Frage zu xRec & Rec im Event

22. April 2016 14:47

Hallo,

ich habe eine Funktion mit der EventFunktion: OnBeforeModifyEvent,
Davon ausgegangen das im xRec der alte wert drin steht und im Rec der neue.

Also z.B. der Status hat sich von Offen auf Freigegeben geändert.
Hätte ich erwartet das es wie folgt aussieht:

xRec.Status = Offen
Rec.Status = Freigegeben
allerdings bekomme ich dann bei beiden "Freigegeben" als Wert zurück :shock:

Wenn ich mir aber in dieser Funktion den Wert aus der Datenbank lade hat dieser noch den Wert "Offen"

Ist das verhalten Normal oder mache ich was falsch bzw. habe ich da was falsch verstanden :?:

Re: Frage zu xRec & Rec im Event

22. April 2016 15:16

Ich hätte das genauso wie du erwartet. Vielleicht ein Bug, den man MS melden sollte.
Musst du denn unbedingt auf den OnBeforeModifyEvent zugreifen? Evtl. funktioniert es im OnAfterModifyEvent richtig.

Re: Frage zu xRec & Rec im Event

23. April 2016 17:33

pjung hat geschrieben:...xRec.Status = Offen
Rec.Status = Freigegeben
allerdings bekomme ich dann bei beiden "Freigegeben" als Wert zurück :shock:


Da hilft nur eines: Debugger an und schauen, ab welchem Punkt in dem Feld Freigegen drin steht. Sollte der Debugger keinen Aufschluss geben, dann Messages einbauen und prüfen.

Re: Frage zu xRec & Rec im Event

25. April 2016 07:59

Guten Morgen,

mit debugger und Message habe ich schon ausprobiert.

Dieser Code
Code:
[EventSubscriber] Test(VAR Rec : Record "Warehouse Shipment Header";VAR xRec : Record "Warehouse Shipment Header";RunTrigger : Boolean)
LWhseShpHeader.GET(Rec."No.");
MESSAGE('Rec.Status: %1 - LWhseShpHeader.Status: %2 - xRec.Status: %3',Rec.Status,LWhseShpHeader.Status,xRec.Status);


erzeug folgende Ausgabe
Code:
Rec.Status: Freigegeben - LWhseShpHeader.Status: Offen - xRec.Status: Freigegeben


OnAfterModify ist nicht das was ich brauche, da hier ja xRec ja korrekterweise den gleichen Wert hat wie Rec. Da ja xRec den Status der Datenbank wieder spiegelt.

Re: Frage zu xRec & Rec im Event

25. April 2016 08:54

Hallo,

bist du der einzige Eventsubscriber?

Es ist in NAV 2016 nicht definiert, welcher Event einer Subscriber- Kette als erstes ausgeführt wird. Das bedeutet aber auch, das ein Modify in einem anderen Event den xRec, so wie du Ihn haben möchtest, zerstört.


Gruß Fiddi

Re: Frage zu xRec & Rec im Event

25. April 2016 10:41

Hallo,

also wenn nicht der Standard darauf zugreift und es manipuliert, sollte ich der einzige sein.
Aber ist ein guter Hinweis. Ich werde es mal bei anderen Tabellen ausprobieren und mein Ergebnis hier mitteilen.

Re: Frage zu xRec & Rec im Event

25. April 2016 10:52

pjung hat geschrieben:also wenn nicht der Standard darauf zugreift und es manipuliert, sollte ich der einzige sein.
Aber ist ein guter Hinweis. Ich werde es mal bei anderen Tabellen ausprobieren und mein Ergebnis hier mitteilen.

Nicht probieren - nachsehen ;-)
DevClient --> Extras --> Debugger --> Ereignisabonnements --> zurechtfiltern

Re: Frage zu xRec & Rec im Event

25. April 2016 12:00

So hab es sowohl ausprobiert als auch nachgesehen.
Also in der Ereignisabonnements Tabelle ist nur mein eines Event eingetragen.

Beim ausprobieren ist mir folgendes aufgefallen
Das Problem betrifft nur das Feld Status.
Lass ich mir den zugewiesenen Benutzer ausgeben ist die Ausgabe wie erwartet.

Re: Frage zu xRec & Rec im Event

25. April 2016 12:04

Und eine Message direkt im OnModifyTrigger?

Re: Frage zu xRec & Rec im Event

25. April 2016 14:06

kommt zum gleichen Ergebnis wie beim dem Event.

Re: Frage zu xRec & Rec im Event

25. April 2016 14:27

pjung hat geschrieben:kommt zum gleichen Ergebnis wie beim dem Event.

Also liegt der Fehler schon mal nicht beim Event. Wie ist es denn bei OnValidate-Status?

Re: Frage zu xRec & Rec im Event

25. April 2016 15:10

da ist nichts hinterlegt

hier mal der Code von der Tabelle
Code:
OBJECT Table 7320 Warehouse Shipment Header
{
  OBJECT-PROPERTIES
  {
    Date=25.04.16;
    Time=14:07:27;
    Modified=Yes;
    Version List=NAVW18.00;
  }
  PROPERTIES
  {
    DataCaptionFields=No.;
    OnInsert=BEGIN
               WhseSetup.GET;
               IF "No." = '' THEN BEGIN
                 WhseSetup.TESTFIELD("Whse. Ship Nos.");
                 NoSeriesMgt.InitSeries(WhseSetup."Whse. Ship Nos.",xRec."No. Series","Posting Date","No.","No. Series");
               END;

               NoSeriesMgt.SetDefaultSeries("Shipping No. Series",WhseSetup."Posted Whse. Shipment Nos.");

               GetLocation("Location Code");
               VALIDATE("Bin Code",Location."Shipment Bin Code");
               "Posting Date" := WORKDATE;
               "Shipment Date" := WORKDATE;
             END;

    OnModify=BEGIN
               //OnBeforeModify-Event wird in der CodeUnit 50003 genutzt
             END;

    OnDelete=BEGIN
               TESTFIELD(Status,Status::Open);
               DeleteWarehouseShipmentLines;
               DeleteRelatedLines;
             END;

    OnRename=BEGIN
               ERROR(Text000,TABLECAPTION);
             END;

    CaptionML=[DEU=Warenausgangskopf;
               ENU=Warehouse Shipment Header];
    LookupPageID=Page7339;
  }
  FIELDS
  {
    { 1   ;   ;No.                 ;Code20        ;OnValidate=BEGIN
                                                                TESTFIELD(Status,Status::Open);
                                                                WhseSetup.GET;
                                                                IF "No." <> xRec."No." THEN BEGIN
                                                                  NoSeriesMgt.TestManual(WhseSetup."Whse. Ship Nos.");
                                                                  "No. Series" := '';
                                                                END;
                                                              END;

                                                   CaptionML=[DEU=Nr.;
                                                              ENU=No.] }
    { 2   ;   ;Location Code       ;Code10        ;TableRelation=Location WHERE (Use As In-Transit=CONST(No));
                                                   OnValidate=VAR
                                                                WhseShptLine@1002 : Record 7321;
                                                              BEGIN
                                                                IF NOT WmsManagement.LocationIsAllowed("Location Code") THEN
                                                                  ERROR(Text003,"Location Code");

                                                                IF "Location Code" <> xRec."Location Code" THEN BEGIN
                                                                  "Zone Code" := '';
                                                                  "Bin Code" := '';
                                                                  WhseShptLine.SETRANGE("No.","No.");
                                                                  IF WhseShptLine.FINDFIRST THEN
                                                                    ERROR(
                                                                      Text001,
                                                                      FIELDCAPTION("Location Code"));
                                                                END;

                                                                GetLocation("Location Code");
                                                                Location.TESTFIELD("Require Shipment");
                                                                IF Location."Directed Put-away and Pick" OR Location."Bin Mandatory" THEN
                                                                  VALIDATE("Bin Code",Location."Shipment Bin Code");

                                                                IF USERID <> '' THEN BEGIN
                                                                  FILTERGROUP := 2;
                                                                  SETRANGE("Location Code","Location Code");
                                                                  FILTERGROUP := 0;
                                                                END;
                                                              END;

                                                   CaptionML=[DEU=Lagerortcode;
                                                              ENU=Location Code] }
    { 3   ;   ;Assigned User ID    ;Code50        ;TableRelation="Warehouse Employee" WHERE (Location Code=FIELD(Location Code));
                                                   OnValidate=BEGIN
                                                                IF "Assigned User ID" <> '' THEN BEGIN
                                                                  "Assignment Date" := TODAY;
                                                                  "Assignment Time" := TIME;
                                                                END ELSE BEGIN
                                                                  "Assignment Date" := 0D;
                                                                  "Assignment Time" := 0T;
                                                                END;
                                                              END;

                                                   CaptionML=[DEU=Zugewiesene Benutzer-ID;
                                                              ENU=Assigned User ID] }
    { 4   ;   ;Assignment Date     ;Date          ;CaptionML=[DEU=Zuweisungsdatum;
                                                              ENU=Assignment Date];
                                                   Editable=No }
    { 5   ;   ;Assignment Time     ;Time          ;CaptionML=[DEU=Zuweisungszeit;
                                                              ENU=Assignment Time];
                                                   Editable=No }
    { 6   ;   ;Sorting Method      ;Option        ;OnValidate=BEGIN
                                                                IF "Sorting Method" <> xRec."Sorting Method" THEN
                                                                  SortWhseDoc;
                                                              END;

                                                   CaptionML=[DEU=Sortiermethode;
                                                              ENU=Sorting Method];
                                                   OptionCaptionML=[DEU=" ,Artikel,Beleg,Regalnummer oder Lagerplatz,F„lligkeitsdatum,Ziel";
                                                                    ENU=" ,Item,Document,Shelf or Bin,Due Date,Destination"];
                                                   OptionString=[ ,Item,Document,Shelf or Bin,Due Date,Destination] }
    { 7   ;   ;No. Series          ;Code10        ;TableRelation="No. Series";
                                                   CaptionML=[DEU=Nummernserie;
                                                              ENU=No. Series] }
    { 11  ;   ;Comment             ;Boolean       ;FieldClass=FlowField;
                                                   CalcFormula=Exist("Warehouse Comment Line" WHERE (Table Name=CONST(Whse. Shipment),
                                                                                                     Type=CONST(" "),
                                                                                                     No.=FIELD(No.)));
                                                   CaptionML=[DEU=Bemerkung;
                                                              ENU=Comment];
                                                   Editable=No }
    { 12  ;   ;Bin Code            ;Code20        ;TableRelation=IF (Zone Code=FILTER('')) Bin.Code WHERE (Location Code=FIELD(Location Code))
                                                                 ELSE IF (Zone Code=FILTER(<>'')) Bin.Code WHERE (Location Code=FIELD(Location Code),
                                                                                                                  Zone Code=FIELD(Zone Code));
                                                   OnValidate=VAR
                                                                Bin@1000 : Record 7354;
                                                                WhseIntegrationMgt@1001 : Codeunit 7317;
                                                              BEGIN
                                                                IF (xRec."Bin Code" <> "Bin Code") OR ("Zone Code" = '') THEN BEGIN
                                                                  TESTFIELD(Status,Status::Open);
                                                                  IF "Bin Code" <> '' THEN BEGIN
                                                                    GetLocation("Location Code");
                                                                    WhseIntegrationMgt.CheckBinTypeCode(DATABASE::"Warehouse Shipment Header",
                                                                      FIELDCAPTION("Bin Code"),
                                                                      "Location Code",
                                                                      "Bin Code",0);
                                                                    IF Location."Directed Put-away and Pick" THEN BEGIN
                                                                      Bin.GET("Location Code","Bin Code");
                                                                      "Zone Code" := Bin."Zone Code";
                                                                    END;
                                                                  END;
                                                                  MessageIfShptLinesExist(FIELDCAPTION("Bin Code"));
                                                                END;
                                                              END;

                                                   CaptionML=[DEU=Lagerplatzcode;
                                                              ENU=Bin Code] }
    { 13  ;   ;Zone Code           ;Code10        ;TableRelation=Zone.Code WHERE (Location Code=FIELD(Location Code));
                                                   OnValidate=BEGIN
                                                                IF "Zone Code" <> xRec."Zone Code" THEN BEGIN
                                                                  TESTFIELD(Status,Status::Open);
                                                                  IF "Zone Code" <> '' THEN BEGIN
                                                                    GetLocation("Location Code");
                                                                    Location.TESTFIELD("Directed Put-away and Pick");
                                                                  END;
                                                                  "Bin Code" := '';
                                                                  MessageIfShptLinesExist(FIELDCAPTION("Zone Code"));
                                                                END;
                                                              END;

                                                   CaptionML=[DEU=Zonencode;
                                                              ENU=Zone Code] }
    { 34  ;   ;Document Status     ;Option        ;OnValidate=VAR
                                                                WhsePickRqst@1000 : Record 7325;
                                                              BEGIN
                                                                CALCFIELDS("Completely Picked");
                                                                IF "Completely Picked" <> xRec."Completely Picked" THEN BEGIN
                                                                  WhsePickRqst.SETRANGE("Document Type",WhsePickRqst."Document Type"::Shipment);
                                                                  WhsePickRqst.SETRANGE("Document No.","No.");
                                                                  WhsePickRqst.MODIFYALL("Completely Picked","Completely Picked");
                                                                END;
                                                              END;

                                                   CaptionML=[DEU=Belegstatus;
                                                              ENU=Document Status];
                                                   OptionCaptionML=[DEU=" ,Teilweise kommissioniert,Teilweise geliefert,Komplett kommissioniert,Komplett geliefert";
                                                                    ENU=" ,Partially Picked,Partially Shipped,Completely Picked,Completely Shipped"];
                                                   OptionString=[ ,Partially Picked,Partially Shipped,Completely Picked,Completely Shipped];
                                                   Editable=No }
    { 39  ;   ;Posting Date        ;Date          ;CaptionML=[DEU=Buchungsdatum;
                                                              ENU=Posting Date] }
    { 41  ;   ;Shipping Agent Code ;Code10        ;TableRelation="Shipping Agent";
                                                   OnValidate=BEGIN
                                                                IF xRec."Shipping Agent Code" = "Shipping Agent Code" THEN
                                                                  EXIT;

                                                                "Shipping Agent Service Code" := '';
                                                              END;

                                                   AccessByPermission=TableData 5790=R;
                                                   CaptionML=[DEU=Zustellercode;
                                                              ENU=Shipping Agent Code] }
    { 42  ;   ;Shipping Agent Service Code;Code10 ;TableRelation="Shipping Agent Services".Code WHERE (Shipping Agent Code=FIELD(Shipping Agent Code));
                                                   CaptionML=[DEU=Zustellertransportartencode;
                                                              ENU=Shipping Agent Service Code] }
    { 43  ;   ;Shipment Method Code;Code10        ;TableRelation="Shipment Method";
                                                   CaptionML=[DEU=Lieferbedingungscode;
                                                              ENU=Shipment Method Code] }
    { 45  ;   ;Shipment Date       ;Date          ;OnValidate=VAR
                                                                WhseShptLine@1000 : Record 7321;
                                                              BEGIN
                                                                IF "Shipment Date" <> xRec."Shipment Date" THEN BEGIN
                                                                  WhseShptLine.SETRANGE("No.","No.");
                                                                  IF WhseShptLine.FINDFIRST THEN
                                                                    IF CONFIRM(
                                                                         STRSUBSTNO(Text008,FIELDCAPTION("Shipment Date")),FALSE)
                                                                    THEN
                                                                      WhseShptLine.MODIFYALL("Shipment Date","Shipment Date");
                                                                END;
                                                              END;

                                                   CaptionML=[DEU=Warenausg.-Datum;
                                                              ENU=Shipment Date] }
    { 46  ;   ;Completely Picked   ;Boolean       ;FieldClass=FlowField;
                                                   CalcFormula=Min("Warehouse Shipment Line"."Completely Picked" WHERE (No.=FIELD(No.)));
                                                   CaptionML=[DEU=Komplett kommissioniert;
                                                              ENU=Completely Picked];
                                                   Editable=No }
    { 47  ;   ;Status              ;Option        ;CaptionML=[DEU=Status;
                                                              ENU=Status];
                                                   OptionCaptionML=[DEU=Offen,Freigegeben;
                                                                    ENU=Open,Released];
                                                   OptionString=Open,Released;
                                                   Editable=No }
    { 48  ;   ;External Document No.;Code35       ;CaptionML=[DEU=Externe Belegnummer;
                                                              ENU=External Document No.] }
    { 50  ;   ;Create Posted Header;Boolean       ;CaptionML=[DEU=Gebuchten Kopf erstellen;
                                                              ENU=Create Posted Header] }
    { 61  ;   ;Shipping No.        ;Code20        ;CaptionML=[DEU=Lieferungsnr.;
                                                              ENU=Shipping No.] }
    { 62  ;   ;Last Shipping No.   ;Code20        ;TableRelation="Posted Whse. Shipment Header";
                                                   CaptionML=[DEU=Letzte Lieferscheinnr.;
                                                              ENU=Last Shipping No.];
                                                   Editable=No }
    { 63  ;   ;Shipping No. Series ;Code10        ;TableRelation="No. Series";
                                                   OnValidate=BEGIN
                                                                IF "Shipping No. Series" <> '' THEN BEGIN
                                                                  WhseSetup.GET;
                                                                  WhseSetup.TESTFIELD("Posted Whse. Shipment Nos.");
                                                                  NoSeriesMgt.TestSeries(WhseSetup."Posted Whse. Shipment Nos.","Shipping No. Series");
                                                                END;
                                                                TESTFIELD("Shipping No.",'');
                                                              END;

                                                   OnLookup=BEGIN
                                                              WITH WhseShptHeader DO BEGIN
                                                                WhseShptHeader := Rec;
                                                                WhseSetup.GET;
                                                                WhseSetup.TESTFIELD("Posted Whse. Shipment Nos.");
                                                                IF NoSeriesMgt.LookupSeries(WhseSetup."Posted Whse. Shipment Nos.","Shipping No. Series") THEN
                                                                  VALIDATE("Shipping No. Series");
                                                                Rec := WhseShptHeader;
                                                              END;
                                                            END;

                                                   CaptionML=[DEU=Lieferungsnr.-Serie;
                                                              ENU=Shipping No. Series] }
  }
  KEYS
  {
    {    ;No.                                     ;Clustered=Yes }
    {    ;Location Code                            }
  }
  FIELDGROUPS
  {
  }
  CODE
  {
    VAR
      Location@1002 : Record 14;
      WhseSetup@1003 : Record 5769;
      WhseShptHeader@1013 : Record 7320;
      NoSeriesMgt@1001 : Codeunit 396;
      Text000@1011 : TextConst 'DEU=Sie k”nnen einen %1 nicht umbenennen.;ENU=You cannot rename a %1.';
      Text001@1010 : TextConst 'DEU=Sie k”nnen den %1 nicht „ndern, da der Beleg eine oder mehrere Zeilen hat.;ENU=You cannot change the %1, because the document has one or more lines.';
      Text002@1000 : TextConst 'DEU=Sie mssen den Benutzer %1 erst als Lagermitarbeiter einrichten.;ENU=You must first set up user %1 as a warehouse employee.';
      WmsManagement@1004 : Codeunit 7302;
      Text003@1005 : TextConst 'DEU=Sie drfen den Lagerortcode %1 nicht verwenden.;ENU=You are not allowed to use location code %1.';
      ItemTrackingMgt@1006 : Codeunit 6500;
      HideValidationDialog@1007 : Boolean;
      Text006@1012 : TextConst 'DEU=Sie haben das Feld %1 im %2 ge„ndert, die vorhandenen Warenausgangszeilen wurden jedoch nicht ge„ndert.\;ENU=You have changed %1 on the %2, but it has not been changed on the existing Warehouse Shipment Lines.\';
      Text007@1009 : TextConst 'DEU=Sie mssen die vorhandenen Warenausgangszeilen manuell aktualisieren.;ENU=You must update the existing Warehouse Shipment Lines manually.';
      Text008@1014 : TextConst 'DEU=Sie haben das %1 ver„ndert.\\M”chten Sie die Zeilen aktualisieren?;ENU=You have modified the %1.\\Do you want to update the lines?';
      Text009@1008 : TextConst 'DEU=Die Artikel wurden kommissioniert. Wenn Sie den Warenausgang l”schen, verbleiben die Artikel im Versandbereich, bis sie eingelagert werden.\Entsprechende Artikelverfolgungsinformationen, die bei der Kommissionierung eingegeben wurden, werden gel”scht.\M”chten Sie den Warenausgang wirklich l”schen?;ENU=The items have been picked. If you delete the warehouse shipment, then the items will remain in the shipping area until you put them away.\Related item tracking information that is defined during the pick will be deleted.\Are you sure that you want to delete the warehouse shipment?';

    PROCEDURE AssistEdit@8(OldWhseShptHeader@1000 : Record 7320) : Boolean;
    VAR
      WhseShptHeader@1001 : Record 7320;
    BEGIN
      WhseSetup.GET;
      WITH WhseShptHeader DO BEGIN
        WhseShptHeader := Rec;
        WhseSetup.TESTFIELD("Whse. Ship Nos.");
        IF NoSeriesMgt.SelectSeries(
             WhseSetup."Whse. Ship Nos.",OldWhseShptHeader."No. Series","No. Series")
        THEN BEGIN
          NoSeriesMgt.SetSeries("No.");
          Rec := WhseShptHeader;
          EXIT(TRUE);
        END;
      END;
    END;

    PROCEDURE SortWhseDoc@3();
    VAR
      WhseShptLine@1001 : Record 7321;
      SequenceNo@1000 : Integer;
    BEGIN
      WhseShptLine.SETRANGE("No.","No.");
      CASE "Sorting Method" OF
        "Sorting Method"::Item:
          WhseShptLine.SETCURRENTKEY("No.","Item No.");
        "Sorting Method"::Document:
          WhseShptLine.SETCURRENTKEY("No.","Source Document","Source No.");
        "Sorting Method"::"Shelf or Bin":
          BEGIN
            GetLocation("Location Code");
            IF Location."Bin Mandatory" THEN
              WhseShptLine.SETCURRENTKEY("No.","Bin Code")
            ELSE
              WhseShptLine.SETCURRENTKEY("No.","Shelf No.");
          END;
        "Sorting Method"::"Due Date":
          WhseShptLine.SETCURRENTKEY("No.","Due Date");
        "Sorting Method"::Destination:
          WhseShptLine.SETCURRENTKEY("No.","Destination Type","Destination No.");
      END;

      IF WhseShptLine.FIND('-') THEN BEGIN
        SequenceNo := 10000;
        REPEAT
          WhseShptLine."Sorting Sequence No." := SequenceNo;
          WhseShptLine.MODIFY;
          SequenceNo := SequenceNo + 10000;
        UNTIL WhseShptLine.NEXT = 0;
      END;
    END;

    PROCEDURE GetDocumentStatus@15(LineNo@1003 : Integer) : Integer;
    VAR
      WhseShptLine@1001 : Record 7321;
    BEGIN
      WhseShptLine.SETRANGE("No.","No.");
      IF LineNo <> 0 THEN
        WhseShptLine.SETFILTER("Line No.",'<>%1',LineNo);
      IF NOT WhseShptLine.FINDFIRST THEN
        EXIT(WhseShptLine.Status::" ");

      WhseShptLine.SETRANGE(Status,WhseShptLine.Status::"Partially Shipped");
      IF WhseShptLine.FINDFIRST THEN
        EXIT(WhseShptLine.Status);

      WhseShptLine.SETRANGE(Status,WhseShptLine.Status::"Partially Picked");
      IF WhseShptLine.FINDFIRST THEN
        EXIT(WhseShptLine.Status);

      WhseShptLine.SETRANGE(Status,WhseShptLine.Status::"Completely Picked");
      IF WhseShptLine.FINDFIRST THEN BEGIN
        WhseShptLine.SETFILTER(Status,'<%1',WhseShptLine.Status::"Completely Picked");
        IF WhseShptLine.FINDFIRST THEN
          EXIT(WhseShptLine.Status::"Partially Picked");

        EXIT(WhseShptLine.Status);
      END;

      WhseShptLine.SETRANGE(Status,WhseShptLine.Status::"Completely Shipped");
      IF WhseShptLine.FINDFIRST THEN BEGIN
        WhseShptLine.SETFILTER(Status,'<%1',WhseShptLine.Status::"Completely Shipped");
        IF WhseShptLine.FINDFIRST THEN
          EXIT(WhseShptLine.Status::"Partially Shipped");

        EXIT(WhseShptLine.Status);
      END;

      EXIT(WhseShptLine.Status);
    END;

    LOCAL PROCEDURE MessageIfShptLinesExist@7(ChangedFieldName@1000 : Text[80]);
    VAR
      WhseShptLine@1001 : Record 7321;
    BEGIN
      WhseShptLine.SETRANGE("No.","No.");
      IF WhseShptLine.FINDFIRST THEN
        IF NOT HideValidationDialog THEN
          MESSAGE(
            STRSUBSTNO(
              Text006,ChangedFieldName,TABLECAPTION) + Text007);
    END;

    LOCAL PROCEDURE GetLocation@10(LocationCode@1000 : Code[10]);
    BEGIN
      IF LocationCode = '' THEN
        Location.GetLocationSetup(LocationCode,Location)
      ELSE
        IF Location.Code <> LocationCode THEN
          Location.GET(LocationCode);
    END;

    PROCEDURE LookupWhseShptHeader@1(VAR WhseShptHeader@1001 : Record 7320) : Boolean;
    BEGIN
      COMMIT;
      IF USERID <> '' THEN BEGIN
        WhseShptHeader.FILTERGROUP := 2;
        WhseShptHeader.SETRANGE("Location Code");
      END;
      IF PAGE.RUNMODAL(0,WhseShptHeader) = ACTION::LookupOK THEN;
      IF USERID <> '' THEN BEGIN
        WhseShptHeader.FILTERGROUP := 2;
        WhseShptHeader.SETRANGE("Location Code",WhseShptHeader."Location Code");
        WhseShptHeader.FILTERGROUP := 0;
      END;
    END;

    PROCEDURE LookupLocation@4(VAR WhseShptHeader@1001 : Record 7320) : Boolean;
    VAR
      Location@1000 : Record 14;
    BEGIN
      COMMIT;
      Location.FILTERGROUP := 2;
      Location.SETRANGE(Code);
      IF PAGE.RUNMODAL(PAGE::"Locations with Warehouse List",Location) = ACTION::LookupOK THEN
        WhseShptHeader.VALIDATE("Location Code",Location.Code);
      Location.FILTERGROUP := 0;
    END;

    PROCEDURE SetHideValidationDialog@14(NewHideValidationDialog@1000 : Boolean);
    BEGIN
      HideValidationDialog := NewHideValidationDialog;
    END;

    PROCEDURE DeleteRelatedLines@5();
    VAR
      WhsePickRqst@1001 : Record 7325;
      WhseComment@1000 : Record 5770;
    BEGIN
      WhsePickRqst.SETRANGE("Document Type",WhsePickRqst."Document Type"::Shipment);
      WhsePickRqst.SETRANGE("Document No.","No.");
      WhsePickRqst.DELETEALL;

      WhseComment.SETRANGE("Table Name",WhseComment."Table Name"::"Whse. Shipment");
      WhseComment.SETRANGE(Type,WhseComment.Type::" ");
      WhseComment.SETRANGE("No.","No.");
      WhseComment.DELETEALL;
    END;

    LOCAL PROCEDURE DeleteWarehouseShipmentLines@6();
    VAR
      WhseShptLine@1001 : Record 7321;
      Confirmed@1002 : Boolean;
    BEGIN
      WhseShptLine.SETRANGE("No.","No.");
      IF WhseShptLine.FIND('-') THEN
        REPEAT
          IF WhseShptLine."Qty. Shipped" < WhseShptLine."Qty. Picked" THEN BEGIN
            IF NOT CONFIRM(Text009) THEN
              ERROR('');
            Confirmed := TRUE;
          END;
        UNTIL (WhseShptLine.NEXT = 0) OR Confirmed;

      ItemTrackingMgt.SetDeleteReservationEntries(Confirmed);

      IF WhseShptLine.FIND('-') THEN
        REPEAT
          IF WhseShptLine."Assemble to Order" THEN
            WhseShptLine.VALIDATE("Qty. to Ship",0);
          ItemTrackingMgt.DeleteWhseItemTrkgLines(DATABASE::"Warehouse Shipment Line",0,WhseShptLine."No.",
            '',0,WhseShptLine."Line No.",WhseShptLine."Location Code",TRUE);
          WhseShptLine.DELETE;
        UNTIL WhseShptLine.NEXT = 0;
    END;

    PROCEDURE FindFirstAllowedRec@2(Which@1000 : Text[1024]) : Boolean;
    VAR
      WhseShptHeader@1001 : Record 7320;
      WMSManagement@1002 : Codeunit 7302;
    BEGIN
      IF FIND(Which) THEN BEGIN
        WhseShptHeader := Rec;
        WHILE TRUE DO BEGIN
          IF WMSManagement.LocationIsAllowedToView("Location Code") THEN
            EXIT(TRUE);

          IF NEXT(1) = 0 THEN BEGIN
            Rec := WhseShptHeader;
            IF FIND(Which) THEN
              WHILE TRUE DO BEGIN
                IF WMSManagement.LocationIsAllowedToView("Location Code") THEN
                  EXIT(TRUE);

                IF NEXT(-1) = 0 THEN
                  EXIT(FALSE);
              END;
          END;
        END;
      END;
      EXIT(FALSE);
    END;

    PROCEDURE FindNextAllowedRec@11(Steps@1000 : Integer) : Integer;
    VAR
      WhseShptHeader@1002 : Record 7320;
      WMSManagement@1001 : Codeunit 7302;
      RealSteps@1003 : Integer;
      NextSteps@1004 : Integer;
    BEGIN
      RealSteps := 0;
      IF Steps <> 0 THEN BEGIN
        WhseShptHeader := Rec;
        REPEAT
          NextSteps := NEXT(Steps / ABS(Steps));
          IF WMSManagement.LocationIsAllowedToView("Location Code") THEN BEGIN
            RealSteps := RealSteps + NextSteps;
            WhseShptHeader := Rec;
          END;
        UNTIL (NextSteps = 0) OR (RealSteps = Steps);
        Rec := WhseShptHeader;
        IF NOT FIND THEN;
      END;
      EXIT(RealSteps);
    END;

    PROCEDURE ErrorIfUserIsNotWhseEmployee@13();
    VAR
      WhseEmployee@1000 : Record 7301;
    BEGIN
      IF USERID <> '' THEN BEGIN
        WhseEmployee.SETRANGE("User ID",USERID);
        IF NOT WhseEmployee.FINDFIRST THEN
          ERROR(Text002,USERID);
      END;
    END;

    BEGIN
    END.
  }
}


Re: Frage zu xRec & Rec im Event

25. April 2016 15:26

müsstest du nicht Codeunit 7310 subscriben -> du nutzt ja die "Freigeben" Funktion auf der Page, oder? -> die macht ein Modify -> aber kein Modify(TRUE);

Somit wird dein Event garnicht abgefeuert -> auch das Validate vom Status wird nicht abgefeuert, da dort auch nur eine normale Zuweisung stattfindet

PS:

vergiss nicht die Table 7320 auf Standard zurückzusetzen, wenn du fertig bist, sonst nützt dir das Ganze Eventing nichts, wenn du denkst, dass du die Table tatsächlich angepasst hast :)

Re: Frage zu xRec & Rec im Event

25. April 2016 15:32

sweikelt hat geschrieben: die macht ein Modify -> aber kein Modify(TRUE);
Somit wird dein Event garnicht abgefeuert

Das stimmit nicht; Events werden auch bei MODIFY(FALSE) ausgelöst. Innerhalb der Subscriber-Funktion kannst du dann aber abfragen, ob die Änderung mit TRUE oder FALSE einhergegangen war.

Re: Frage zu xRec & Rec im Event

25. April 2016 17:42

Natalie hat geschrieben:
sweikelt hat geschrieben: die macht ein Modify -> aber kein Modify(TRUE);
Somit wird dein Event garnicht abgefeuert

Das stimmit nicht; Events werden auch bei MODIFY(FALSE) ausgelöst. Innerhalb der Subscriber-Funktion kannst du dann aber abfragen, ob die Änderung mit TRUE oder FALSE einhergegangen war.


hatte mir die nur kurz angeschaut, aber noch nicht intensiv genutzt, daher die "unwissenheit" - sorry