Beide AL-Funktionen haben eine ähnliche Bedeutung und können theoretisch zum Löschen oder Initialisieren eines Datensatzes verwendet werden. Es gibt jedoch einen wichtigen Unterschied. Eine der Funktionen setzt den Mandanten zurück, geändert mit der Funktion CHANGECOMPANY. Beim Refactoring einer alten und vielfach verbesserten Codeunit bin ich kürzlich auf folgendes Muster gestoßen. Nehmen wir an, der aktuell ausgewählte Mandant ist 'Mandant A' .
Customer.CHANGECOMPANY('Mandant B');
...
CLEAR(Customer);
Customer.INIT;
Customer."No." := 'Anything'
...
Customer.INSERT;
Die Ausführung des oben geschnippten Kodes fügt immer einen Datensatz in dem 'Mandant A' ein. Der Grund dafür ist, die Funktion CLEAR beeinflusst das Setup von CHANGECOMPANY. Aus diesem Grund ist der obige Kode inkonsistent. Zu beachten sind daher die folgenden Regeln.
Customer.CHANGECOMPANY('Mandant B');
...
CLEAR(Customer);
Customer.INIT;
Customer."No." := 'Anything'
...
Customer.INSERT;
Customer.CHANGECOMPANY('Mandant B');
...
CLEAR(Customer."No.");
Customer.INIT;
Customer."No." := 'Anything'
...
Customer.INSERT;
Im obigen Beispiel scheint der Aufruf von CLEAR jedoch unnötig zu sein.
Customer.CHANGECOMPANY('Mandant B');
...
CLEAR(Customer);
Customer.CHANGECOMPANY('Mandant B');
Customer.INIT;
Customer."No." := 'Anything'
...
Customer.INSERT;
Dynamics NAV TM Entwickler und Berater Konrad Buczkowski