Systemweite Variable setzt sich nicht zurück

20. Dezember 2017 15:09

Hallo zusammen,

ich habe folgendes Anliegen: Ich benötige eine systemweite Optionvariable welche sich im Fehlerfall auch wieder resettet. Mein erster Gedanke war eine SingleInstance Codeunit mit einer globalen Variable (Option). Allerdings wird diese nicht zurückgesetzt sobald das System einen Error schmeißt. Das Konstrukt IF CODEUNIT.RUN THEN <Setze Variable zurück> funktioniert auch nicht da ich nicht erzwingen kann dass alle Transaktionen zu diesem Zeitpunkt abgeschlossen sind. Hat jemand noch eine andere Idee bzw. Denkanstoß ?

Besten Dank im Voraus.

Re: Systemweite Variable setzt sich nicht zurück

20. Dezember 2017 16:46

Spontan würde ich auf eine zweite systemweite Variable setzen, welche du am Ende abfragen kannst.

Mal angenommen, in der Codeunit 80 "Sales-Post" würde in Abhängigkeit dort erkannter Kriterien eine Variable SendNotificationMail auf Yes gesetzt, und die E-Mail soll nach der Codeunit 80 erst versendet werden.

In der Codeunit 80 setzt du irgendwann (möglicherweise ziemlich weit am Anfang) die Variable SendNotificationMail.
Damit der (die Codeunit 80) aufrufende Programmcode weiß, ob die Codeunit erfolgreich durchgelaufen ist, setzt du ganz am Ende der Codeunit 80 eine weitere Variable SalesPostFinished auf Yes.

Codeunit 80:
Code:
[...]
IF Cust.Notification = Cust.Notification::"E-Mail" THEN BEGIN  // z. B. irgendwo am Anfang
  GlobalVarMgt.SetVar('SendNotificationMail',''Yes');
END;
[...]
GlobalVarMgt.SetVar('SalesPostFinished','Yes');  // Ganz am Ende des OnRun-Triggers der CU 80


z. B. Codeunit 81:
Code:
[...]
CODEUNIT.RUN(CODEUNIT::"Sales-Post",SalesHeader);
IF GlobalVarMgt.GetVar('SalesPostFinished') <> 'Yes' THEN BEGIN
  GlobalVarMgt.DelVar('SendNotificationMail');
END;
IF GlobalVarMgt.GetVar('SendNotificationMail') = 'Yes' THEN BEGIN
  MailMgt.SendNotification(Rec);
  GlobalVarMgt.DelVar('SendNotificationMail');
END;

Re: Systemweite Variable setzt sich nicht zurück

20. Dezember 2017 16:50

Wenn du uns erläuterst, wozu du diese Variable benötigst, dann können wir eventuell besser helfen.