Automatisches Löschen + Neu Erzeugen von Artikelreferenz

26. März 2024 16:04

Wenn man irgendetwas in der Tabelle 99 - Item Vendor ändert, wird die Funktion UpdateItemCrossReference aus der Codeunit 5702 - Dist. Integration aufgerufen. Dabei werden zugehörige Item Cross Reference - Einträge gelöscht und auf Basis des Item Vendor - Datensatzes neu erzeugt. Auch dann, wenn sich gar nichts für die Item Cross Reference relevantes geändert hat. Das führt zu zig unnötigen Transaktionen in unserer Datenbank. Für unseren Shop ist es relevant, wenn eine EAN gelöscht oder neu erzeugt wird. Deswegen läuft dann auch immer ein unnötiger Update-Prozess Richtung unseres Webshops.

Das wirkt auf mich nicht so sinnvoll gelöst. Ist das in neueren NAV-Versionen besser gelöst, sodass nur Item Cross Reference - Einträge gelöscht und neu angelegt werden, wenn sich auch etwas geändert hat oder ist das immer noch so?

Ich überlege gerade, wie wir damit umgehen sollen. Ein Schritt könnte sein, schonmal all unsere Kunden-individuellen Feldern aus der Tabelle 99 rauszuholen und in eine eigene Tabelle zu verfrachten. Ist natürlich schon Aufwand. Oder ein Standard-Eingriff, sodass nur das Löschen und die Neuanlage nur noch passieren, wenn sich etwas relevantes geändert hat

Hat jemand noch Gedanken dazu?
Zuletzt geändert von InfoWissler am 26. März 2024 16:42, insgesamt 1-mal geändert.

Re: Automatisches Löschen + Neu Erzeugen von Artikelreferenz

26. März 2024 16:39

Das Problem ist dass der Aufruf im OnModify Trigger der Tabelle erfolgt und nicht geprüft wird was geändert wurde. Ich hatte ähnliche Probleme schon an anderer Stelle (Aktualisierung KORE Kostenart bei Änderung FIBU Sachkonto). In NAV würde ich da einfach im OnModify Trigger entsprechende Prüfungen einbauen und das UpdateItemCrossReference nur ausführen wenn es nötig ist.

Nachtrag: Zur Lösung in neueren BC Versionen siehe den Beitrag von Ermac.
Zuletzt geändert von enh am 26. März 2024 16:46, insgesamt 1-mal geändert.

Re: Automatisches Löschen + Neu Erzeugen von Artikelreferenz

26. März 2024 16:42

Hallo,
grundsätzlich arbeitet der Standard noch genau so. Allerdings hättest du in neuen Versionen ein Event in der Funktion UpdateItemReference (Item Cross Reference wurde durch das Item Reference Feature ersetzt) der Tabelle Item Vendor zur Verfügung, um hier vorher ggf. die Verarbeitung abzubrechen. Ähnliche Events stehen auch bei Insert- und DeleteItemReference zur Verfügung.

Code:
local procedure UpdateItemReference()
var
    ItemReference: Record "Item Reference";
    IsHandled: Boolean;
begin
    IsHandled := false;
    OnBeforeUpdateItemReference(Rec, IsHandled, xRec);
    if IsHandled then
        exit;

    // ...
end;


Ähnlichen Code könntest du in deine Lösung implementieren (lassen), um erst bei wirklichen Änderungen die Daten in den Webshop zu synchronisieren.

Re: Automatisches Löschen + Neu Erzeugen von Artikelreferenz

26. März 2024 16:54

Danke, ich dachte erst da würden auch Einträge vom Typ Barcode gelöscht und neu angelegt, was aus meiner Sicht gar keinen Sinn ergeben hätte. Dann baue ich einfach ein paar Prüfungen ein, mit denen ich prüfe, ob sich in der Item Vendor relevante Felder geändert haben und nur wenn ja, lasse ich dann das mit dem Löschen und der Neuanlage weiterlaufen. Dabei schaue ich dann schon, dass ich meine Variable zum Abbrechen dann auch isHandled nenne, damit das später einfach zu upgraden ist.