Aktualisierung einer Untertabellenansicht im Dialog nach Anpassung in einer Dialogfunktion
Aktualisierung einer Untertabellenansicht im Dialog nach Anpassung in einer Dialogfunktion
Ich lasse euch mal an meinem Lösungansatz teilhaben. Vielleicht hat ja noch jemand eine bessere Idee. Problematisch waren a) die fehlenden DatenbankIDs, da es sich hierbei nicht um die laufende Nummerierung im HTML Code / JS handelt. Diese ID lese ich direkt aus dem DOM-Objekt aus.
Zudem muss der save-Aufruf sowohl im JS als auch im PHP erfolgen, sonst wird die Untertabellenansicht im Dialog nicht aktualisiert.
![file](https://yellowdevs.de/upload/files/1721026815881_image.png)
Aufruf im JS mit Prüfung, ob überhaupt ausgewählte Daten vorhanden sind:
```
function verschiebeDateienZwischenUntertabellen($sourceTable, $targetTable)
{
$ausgewaehlteRows = erzeugeArrayMitAusgewaehltenEintraegen($sourceTable.replace('MATT', 'UT') , 'checkbox_auswahl');
if($ausgewaehlteRows.length>0)
{
var userParameters = {SOURCE: $sourceTable, TARGET: $targetTable, ROWS: JSON.stringify($ausgewaehlteRows)};
jr_execute_dialog_function('VERSCHIEBE_DATEIEN_ZWISCHEN_UNTERTABELLEN', userParameters,
function (successReturnObject)
{
//console.log(successReturnObject.result) ;
jr_execute('save');
},
function (errorReturnObject)
{
//console.log(errorReturnObject);
}
);
}
}
function erzeugeArrayMitAusgewaehltenEintraegen($untertabellenansicht, $feldname)
{
$ausgewaehlteRowIDs = [];
jr_loop_table($untertabellenansicht,
function ($subtable, $rowId)
{
if(jr_get_subtable_value($subtable, $rowId, $feldname) == 1)
{
$ausgewaehlteRowIDs.push(document.getElementById($untertabellenansicht.replace('MATT', 'UT')+'_row_id_'+$rowId).value);
jr_set_subtable_value($subtable, $rowId, $feldname, 0);
jr_remove_subtable_row($subtable, $rowId);
}
}
);
return $ausgewaehlteRowIDs;
}
```
Und dann das einfache PHP:
```
<?php
class className extends JobRouter\Engine\Runtime\PhpFunction\DialogFunction
{
public function execute($rowId = null)
{
$sourceTable = $this->getParameter('SOURCE');
$targetTable = $this->getParameter('TARGET');
$rows = $this->getParameter('ROWS');
$rows = json_decode($rows, true);
foreach ($rows as $row)
{
$rowData = array( 'DATEI' => $this->getSubtableValue($sourceTable, $row, 'DATEI', true),
'DATEINAME' => $this->getSubtableValue($sourceTable, $row, 'DATEINAME', true),
'DATEITYP' => $this->getSubtableValue($sourceTable, $row, 'DATEITYP', true)
);
$this->insertSubtableRow($targetTable, 1, $rowData);
$this->deleteSubtableRow($sourceTable, $row);
}
$this->save();
}
}
?>
```
Ich lasse euch mal an meinem Lösungansatz teilhaben. Vielleicht hat ja noch jemand eine bessere Idee. Problematisch waren a) die fehlenden DatenbankIDs, da es sich hierbei nicht um die laufende Nummerierung im HTML Code / JS handelt. Diese ID lese ich direkt aus dem DOM-Objekt aus.
Zudem muss der save-Aufruf sowohl im JS als auch im PHP erfolgen, sonst wird die Untertabellenansicht im Dialog nicht aktualisiert.
![file](https://yellowdevs.de/upload/files/1721026815881_image.png)
Aufruf im JS mit Prüfung, ob überhaupt ausgewählte Daten vorhanden sind:
function verschiebeDateienZwischenUntertabellen($sourceTable, $targetTable)
{
$ausgewaehlteRows = erzeugeArrayMitAusgewaehltenEintraegen($sourceTable.replace('MATT', 'UT') , 'checkbox_auswahl');
if($ausgewaehlteRows.length>0)
{
var userParameters = {SOURCE: $sourceTable, TARGET: $targetTable, ROWS: JSON.stringify($ausgewaehlteRows)};
jr_execute_dialog_function('VERSCHIEBE_DATEIEN_ZWISCHEN_UNTERTABELLEN', userParameters,
function (successReturnObject)
{
//console.log(successReturnObject.result) ;
jr_execute('save');
},
function (errorReturnObject)
{
//console.log(errorReturnObject);
}
);
}
}
function erzeugeArrayMitAusgewaehltenEintraegen($untertabellenansicht, $feldname)
{
$ausgewaehlteRowIDs = [];
jr_loop_table($untertabellenansicht,
function ($subtable, $rowId)
{
if(jr_get_subtable_value($subtable, $rowId, $feldname) == 1)
{
$ausgewaehlteRowIDs.push(document.getElementById($untertabellenansicht.replace('MATT', 'UT')+'_row_id_'+$rowId).value);
jr_set_subtable_value($subtable, $rowId, $feldname, 0);
jr_remove_subtable_row($subtable, $rowId);
}
}
);
return $ausgewaehlteRowIDs;
}
Und dann das einfache PHP:
<?php
class className extends JobRouter\Engine\Runtime\PhpFunction\DialogFunction
{
public function execute($rowId = null)
{
$sourceTable = $this->getParameter('SOURCE');
$targetTable = $this->getParameter('TARGET');
$rows = $this->getParameter('ROWS');
$rows = json_decode($rows, true);
foreach ($rows as $row)
{
$rowData = array( 'DATEI' => $this->getSubtableValue($sourceTable, $row, 'DATEI', true),
'DATEINAME' => $this->getSubtableValue($sourceTable, $row, 'DATEINAME', true),
'DATEITYP' => $this->getSubtableValue($sourceTable, $row, 'DATEITYP', true)
);
$this->insertSubtableRow($targetTable, 1, $rowData);
$this->deleteSubtableRow($sourceTable, $row);
}
$this->save();
}
}
?>
Aktualisierung einer Untertabellenansicht im Dialog nach Anpassung in einer Dialogfunktion
Ich lasse euch mal an meinem Lösungansatz teilhaben. Vielleicht hat ja noch jemand eine bessere Idee. Problematisch waren a) die fehlenden DatenbankIDs, da es sich hierbei nicht um die laufende Nummerierung im HTML Code / JS handelt. Diese ID lese ich direkt aus dem DOM-Objekt aus.
Zudem muss der save-Aufruf sowohl im JS als auch im PHP erfolgen, sonst wird die Untertabellenansicht im Dialog nicht aktualisiert.
![file](https://yellowdevs.de/upload/files/1721026815881_image.png)
Aufruf im JS mit Prüfung, ob überhaupt ausgewählte Daten vorhanden sind:
function verschiebeDateienZwischenUntertabellen($sourceTable, $targetTable)
{
$ausgewaehlteRows = erzeugeArrayMitAusgewaehltenEintraegen($sourceTable.replace('MATT', 'UT') , 'checkbox_auswahl');
if($ausgewaehlteRows.length>0)
{
var userParameters = {SOURCE: $sourceTable, TARGET: $targetTable, ROWS: JSON.stringify($ausgewaehlteRows)};
jr_execute_dialog_function('VERSCHIEBE_DATEIEN_ZWISCHEN_UNTERTABELLEN', userParameters,
function (successReturnObject)
{
//console.log(successReturnObject.result) ;
jr_execute('save');
},
function (errorReturnObject)
{
//console.log(errorReturnObject);
}
);
}
}
function erzeugeArrayMitAusgewaehltenEintraegen($untertabellenansicht, $feldname)
{
$ausgewaehlteRowIDs = [];
jr_loop_table($untertabellenansicht,
function ($subtable, $rowId)
{
if(jr_get_subtable_value($subtable, $rowId, $feldname) == 1)
{
$ausgewaehlteRowIDs.push(document.getElementById($untertabellenansicht.replace('MATT', 'UT')+'_row_id_'+$rowId).value);
jr_set_subtable_value($subtable, $rowId, $feldname, 0);
jr_remove_subtable_row($subtable, $rowId);
}
}
);
return $ausgewaehlteRowIDs;
}
Und dann das einfache PHP:
<?php
class className extends JobRouter\Engine\Runtime\PhpFunction\DialogFunction
{
public function execute($rowId = null)
{
$sourceTable = $this->getParameter('SOURCE');
$targetTable = $this->getParameter('TARGET');
$rows = $this->getParameter('ROWS');
$rows = json_decode($rows, true);
foreach ($rows as $row)
{
$rowData = array( 'DATEI' => $this->getSubtableValue($sourceTable, $row, 'DATEI', true),
'DATEINAME' => $this->getSubtableValue($sourceTable, $row, 'DATEINAME', true),
'DATEITYP' => $this->getSubtableValue($sourceTable, $row, 'DATEITYP', true)
);
$this->insertSubtableRow($targetTable, 1, $rowData);
$this->deleteSubtableRow($sourceTable, $row);
}
$this->save();
}
}
?>