Hallo,
ich gebe auch mal meinen Senf dazu.
Ich glaube, dass du es dir komplizierter machst als notwendig. Wenn ich deine Beschreibung richtig verstanden habe, dann bereitest du deine Daten auf für einen folgenden E-Mail-Schritt.
Dies im Frontend zu machen mit timeouts und allem drum und dran wird nicht verlässlich funktionieren, da du den netzwerkseitigen Aspekt der Enduser betrachten musst und deren Performance nicht kennst. Daher die Frage:
Was hält dich davon ab, die Funktionalität schlicht und ergreifend in eine PHP-RegelausführungsFunktion auszulagern? Dann hast du diese ganzen Probleme gelöst und kannst dich auf korrekte Ausführung verlassen.
Ich sehe zwei Möglichkeiten dazu:
Entweder gehst du über die Standardgunktionalität
private function getUniqueInformAddresses() {
$uniqInformAddresses = [];
$sub = 'SUBV_DEBIT_RULES';
$rids = $this->getSubtableRowIds($su);
foreach ($rids as $rid) {
if ($this->getSubtableValue($sub, $rid, 'INFORM') == 1) {
$uniqInformAddresses[] = $this->getSubtableValue($sub, $rid, 'RECEIVER_SQL');
}
}
return array_unique($uniqInformAddresses);
}
Oder du gehst die SQL-Route
private function getUniqueInformAddressesviaSQL() {
$uniqInformAddresses = [];
$sql = "SELECT DISTINCT RECEIVER_SQL FROM SUBV_DEBIT_RULES WHERE INFORM = 1 AND step_id=?";
$res = $this->jrSQLSelect($sql, [$this->getStepId()]);
foreach ($res as $row) {
$uniqInformAddresses[] = $row['RECEIVER_SQL'];
}
return $uniqInformAddresses;
}
Dann schreibst du dir die in die Untertabelle und schickst an diese die E-Mail.
Was meinst du?
EDIT:
Auf Wunsch mehr Infos.
Du willst keine Dialogfunktion, die Handhabung ist etwas komplizierter und du machst dir das Leben wieder schwerer als notwendig. Diese Funktionen sind speziell dafür da, innerhalb des Lifecycles des Schrittes Backend-Aktivitäten auszuführen. Hierbei müssen weitere Nebeneffekte betrachtet werden.
Was du möchtest ist eine Regelausführungsfunktion anzulegen und dann diesen Code einzufügen und anzupassen (siehe Kommentar):
<?php
class className extends JobRouter\Engine\Runtime\PhpFunction\RuleExecutionFunction
{
public function execute($rowId = null) {
$uniqueAddresses = $this->getUniqueInformAddresses();
$this->writeAddresses($uniqueAddresses);
}
private function getUniqueInformAddresses() {
$uniqInformAddresses = [];
//Hier den Namen der Untertabelle, NICHT der Untertabellenansicht
//Ebenso unten die Untertabellenfeldnamen einfügen, NICHT die Untertabellenansichtsfeldnamen
$sub = 'SUBV_DEBIT_RULES';
$rids = $this->getSubtableRowIds($su);
foreach ($rids as $rid) {
if ($this->getSubtableValue($sub, $rid, 'INFORM') == 1) {
$uniqInformAddresses[] = $this->getSubtableValue($sub, $rid, 'RECEIVER_SQL');
}
}
return array_unique($uniqInformAddresses);
}
private function writeAddresses($uniqueAddresses) {
$sub = 'SUBT_SETTLEMENT_EMAIL';
$this->clearSubtable($sub);
$rid = 1;
foreach ($uniqueAddresses as $address) {
$rowData = ['SETTLEMENT_RECEIVER' => $address];
$this->insertSubtableRow($sub, $rid, $rowData);
$rid++;
}
}
}
?>
Dann gehst du mit der Rechten Maustaste auf den Schritt, Regeln -> und fügst eine neue Ausführungsregel ein und wählst unter PHP diese Funktion aus. Sie wird nun beim Senden des Schrittes ausgeführt. Im Folgeschritt solltest du dann in deiner Untertabelle die korrekten Einträge sehen.
Vielen lieben Dank, Stefan! Funktioniert einwandfrei!