Es gibt hier grundsätzlich verschiedene Möglichkeiten. Zunächst hier die Frage, ob nach der Freigabe eines Lieferscheins tatsächlich alle Lieferscheine mit den genannten Bedingungen berücksichtigt werden sollen oder nur der freigegebene.
Performanter und meiner Meinung nach sinnvoller wäre die zweite Option. Ich möchte aber beide Varianten vorstellen.
1) Lieferschein wird freigegeben => Für alle Lieferscheine mit TransferState.Value = 1 und WorkflowStateApproved = 100 soll die Aktion "Rechnungslauf" (Code = "CreateCollectiveInvoices") ausgeführt werden.
Der Event Abonnent könnte folgendermaßen aussehen:
- Asynchron ausführen = true
- In neuer Transaktion ausführen = true
- Event Beschreibung: AfterSQLUpdate für OP_DeliveryNotes (kein Filter notwendig)
Erklärung: Der Rechnungslauf kann damit nach dem Speichern und im Hintergrund gestartet werden.
- Event Verarbeitungsservice: LUA_EXEC
- Konditionen:
WorkflowStateApproved Equals 100
WorkflowStateApproved Less 100 (alten Wert des Datensatzes verwenden)
TransferState.Value Equals 1
Erklärung: Damit wird der Abonnent nur betrachtet, wenn der Status "Freigegeben" sich beim Update geändert hat.
- Mappings:
a) Zielparameter: FireAfterExecutionEvent, Wert: true
b) Code, Wert:
local deliveryNotes = Database[cDatabaseObjectNames.OrderProcessingDeliveryNotes]
:Where(cFieldName.TransferState.."."..cFieldName.Value, eFieldComparison.Equal, 1)
:And("WorkflowStateApproved", eFieldComparison.Equal, 100)
:Select(cFieldName.GUID)
:Query(Session);
for i = 0, deliveryNotes.Length - 1 do
ExecuteAction("CreateCollectiveInvoices", cDatabaseObjectNames.OrderProcessingDeliveryNotes, deliveryNotes[i].Dataset[cFieldName.GUID].ValueGuid);
end
Erklärung: Es werden alle Lieferscheine geöffnet, die den Transferstatus offen haben und freigegeben sind. Für jeden einzelnen Lieferschein wird anschließend die Aktion "Rechnungslauf starten" ausgeführt. Siehe auch https://erpwiki.novicon.net/index.php?title=Technische_Dokumentation/Serverseitige_Lua-Programmierung#Aktionen_und_Prozesse_aufrufen
2) Lieferschein wird freigegeben und ist noch offen. => Für diesen Lieferschein wird der Rechnungslauf gestartet.
Der Event Abonnent könnte folgendermaßen aussehen:
- Asynchron ausführen = true
- In neuer Transaktion ausführen = true
- Event Beschreibung: AfterSQLUpdate für OP_DeliveryNotes (kein Filter notwendig)
- Event Verarbeitungsservice: EXEC_ACT
- Konditionen:
WorkflowStateApproved Equals 100
WorkflowStateApproved Less 100 (alten Wert des Datensatzes verwenden)
TransferState.Value Equals 1
- Mappings:
a) Quellparameter: GUID, Zielparameter: RecordGuid
b) Zielparameter: Name, Wert: CreateCollectiveInvoices
c) Zielparameter: DatabaseObjectName, Wert: OP_DeliveryNotes
Hinweis: Die Mandantenabhängigkeit muss beachtet werden. Im zweiten Fall kann der optionale Parameter "Client" (mit Quellparameter = Client) gesetzt werden, im ersten Fall kann das im Lua Code programmiert werden.