[Gelöst] Event Subscriber - Felder werden nicht erkannt

28. April 2020 11:19

Hallo zusammen,

ich möchte nach Ausführung der Standardprozedur "UpdateUnitCost" in der "Purchase Line" eignen Code ausführen.
Eine Änderung der Base Application kommt für mich nicht in Frage. Aus diesem Grund wollte ich Events verwenden.

Das Event habe ich wie folgt aufgebaut:
Code:
codeunit 51000 OnAfterUpdateUnitCost
{
    [EventSubscriber(ObjectType::Table, 39, 'OnAfterUpdateUnitCost', '', false, false)]
    procedure EventOnAfterUpdateUnitCost()
    var
    begin
        IF ("Type" = "Type"::Item) THEN Message('Änderungen folgend');
    END;

}

Obwohl die "purchase Line" (39) als Table angegeben wurde, wird mi bei "Type" der Fehler ausgeworfen:
"The name '"Type"' does not exist in the current context".
Nur die Messagebox läuft ohne Probleme und macht seinen Dienst.

Was muß ich ändern, damit sich die Eventprozedur auf den aktuellen Record bezieht (REC).

Wäre schön, wenn mir da jemand mal den nötigen Wink geben könnte.
Zuletzt geändert von ckh am 29. April 2020 09:47, insgesamt 1-mal geändert.

Re: Event Subscriber - Felder werden nicht erkannt

28. April 2020 11:40

In deiner Funktion fehlt dir noch der Parameter auf Rec/Purchase Line. Und den musst du dann auch zwischen begin und end verwenden.

Re: Event Subscriber - Felder werden nicht erkannt

28. April 2020 11:52

Meinst du Rec.Type? Das funktioniert leider auch nicht. Hier kommt die gleiche Fehlermeldung auf Rec.

Und wenn ich eine Recordvariable von "Purchase Line" nutze klappt es nicht, da es sich immer auf den aktuellen Record beziehen soll.

Re: Event Subscriber - Felder werden nicht erkannt

28. April 2020 11:55

Nochmal, du musst deiner Funktion erst mal einen gültigen Parameter mitgeben; und zwar denselben (oder mehrere), die OnAfterUpdateUnitCost in Tabelle 39 verwendet.
Und erst mit Hilfe des Parameters hast du überhaupt Zugriff auf die Purchase Line des Publishers.

Re: Event Subscriber - Felder werden nicht erkannt

28. April 2020 12:29

Hallo Natalie,

tschuldige, das ich immer noch auf dem Schlauch stehe.

Die Standard-Prozedur "UpdateUnitCost" hat selbst keinerlei Parameter und sie wird auch ohne Paramter aufgerufen. Sie verwendet dann den aktuellen Datensatz (REC).
Nach meinem Verständnis hat dann auch die Event-Prozedur "OnAfterUpdateUnitCost" keinen Parameter, den ich verwenden könnte und müsste sich ebenfalls auf den aktuellen Datensatz beziehen.

Du hast nicht zufällig einen Codeschnipsel zur Hand, der mir die Erleuchtung bringt :-)

Re: Event Subscriber - Felder werden nicht erkannt

28. April 2020 13:04

ckh hat geschrieben:Die Standard-Prozedur "UpdateUnitCost" hat selbst keinerlei Parameter und sie wird auch ohne Paramter aufgerufen.

Ich schrieb auch, du sollst dir OnAfterUpdateUnitCost ansehen, nicht UpdateUnitCost ;-)

Welche BC-Version verwendet du eigentlich? Laut deinem Profil arbeitest du nur mit NAV 2013.

Re: Event Subscriber - Felder werden nicht erkannt

28. April 2020 15:46

Hi,
der Integration-Event in der Purchase-Line gibt doch die gewünschten Parameter rüber. In Deiner Procedure EventOnAfterUpdateUnitCost() in der Codeunit musst Du die gleichen Parameter verwenden, wie sie auch im Integration-Event in der Purch.Line in der Procedure OnAfterUpdateUnitCost() unten drinstehen.

Code:
procedure OnAfterUpdateUnitCost(var PurchLine: Record "Purchase Line"; xPurchLine: Record "Purchase Line"; PurchHeader: Record "Purchase Header"; Item: Record Item; StockkeepingUnit: Record "Stockkeeping Unit"; Currency: Record Currency; GLSetup: Record "General Ledger Setup")

Re: Event Subscriber - Felder werden nicht erkannt

29. April 2020 09:47

Hi,
das kommt davon, wenn man ein Brett vorm Kopf hat.

Vielen Dank euch beiden, jetzt klappts.