Gå aldrig tilbage til en Dynamics NAV event-fuser

Hvis du nogensinde har oplevet at tabel event subscriber ikke bliver afviklet selvom den er defineret og aktiv jf. Dynamics NAV, ja så kan det skyldes at du er ramt af bug id 203304, “Events stop being triggered after compiling other objects”, som blev løst i Dynamics NAV 2016 CU16 og NAV 2017 CU4.

Fejlen fremprovokeres let med følgende subscriber codeunit, der gerne skulle kaldes når “Description 2” ændres på Item-tabellen:

OBJECT Codeunit 50000 DynHookTest
{
  OBJECT-PROPERTIES
  {
    Date=28-04-17;
    Time=09:43:53;
    Modified=Yes;
    Version List=Dyn Hook Test;
  }
  PROPERTIES
  {
    OnRun=BEGIN
          END;

  }
  CODE
  {

    [EventSubscriber(Table,27,OnAfterValidateEvent,"Description 2")]
    LOCAL PROCEDURE ItemAfterValidateDescription2@1000000001(VAR Rec@1000000000 : Record 27;VAR xRec@1000000001 : Record 27;CurrFieldNo@1000000002 : Integer);
    BEGIN
      MESSAGE('Hook call');
    END;

    BEGIN
    END.
  }
}

For at fremprovokere fejlen gøres følgende:

  1. Importer ovenstående codeunit 50000, Dyn Hook Test
  2. Tilføj “Description 2” til page 30, Item Card
  3. Kør klienten og check at dialogen “Hook call” dukker op når du retter i “Description 2” på et varekort
  4. Ret derefter fx tabel 37, Sales Line – du kan nøjes med at skrive noget i Description på et felt og slette det igen. Og så gemme tabellen compileret.
  5. Lav derefter samme test som i punkt 3 – og bæmærk at dialogen “Hook call” IKKE dukker op.

Det hjælper ikke selvom du lukker klienten og starter den igen. Men oversætter du codeunit 50000, Dyn Hook Test igen, så kommer event subscriptionen til live igen.

Fejlen er som sagt løst i Dynamics NAV 2016 CU 16 og Dynamics NAV 2017 CU 4, og blev så vidt vides trigget på tabeller der havde flowfields til tabeller, som blev ændret. Det er løst ved at de tabeller også bliver markeret som ændret når kildetabellen for flowfields ændres. Det kan ses ved at en åben Windowsklient nu advarer om at tabellen er ændret (fx vil klienten advare om at Item tabellen er ændret, selvom du ændrer i Sales Line tabellen med ovenstående eksempel).

Workarounds kan fx være at genoversætte samtlige codeunits (da de er de eneste der kan indeholder event subscribers) HVER gang du retter i en tabel. Og det er man efter min mening nødt til at gøre indtil man har opdateret platformen til mindst hhv. NAV 2016 CU16 eller NAV 2017 CU4 (du bør naturligvis opdatere til nyeste nu hvor du er i gang).

I øvrigt: Hermed en opfordring til at bruge events alle steder hvor det er muligt – og indrapportere steder hvor du evt. mangler event publishers til Microsoft (enten via NAV support eller som ønske på http://connect.microsoft.com). Det er genialt og gør det væsentligt lettere at opdatere NAV og at strukturere dine tilpasninger pænt.

 

Credits til følgende som har lavet benarbejdet med at identificere fejlen, herunder lavet ovenstående codeunit og repro:

…og som så ofte også tak til Lars Lohndorf-Larsen, Microsoft for at identificere bug-id’et som var skyld i fejlen.