You are hereBlog / blog di roberto / Utilizzare i Global Trigger con Dynamics Navision

Utilizzare i Global Trigger con Dynamics Navision


By roberto - Posted on 27 giugno 2007

Può capitare di dover scrivere del codice in Navision, che debba essere eseguito ad ogni inserimento modifica o cancellazione di ogni tabella.

Il metodo più costoso e sbagliato è quello di andare ad aggiungere la chiamata a questo codice nei trigger OnInsert, OnModify e OnDelete di ogni tabella.

Esistono nella CodeUnit 1 (ApplicationManagement) delle funzioni chiamate

  • OnGlobalInsert
  • OnGlobalModify
  • OnGlobalDelete
  • OnGlobalRename

usate oggi per la compilazione del log degli eventi in Navision.
Queste funzioni possono essere usate aggiungendo anche altro codice, ottenendo il risultato sopra descritto.

Il problema è che per usarle deve essere abilitato il log altrimenti la chiamata non viene fatta.Per ovviare a questo problema è sufficiente modificare la funzione GetGlobalTableTriggerMask sempre nella CodeUnit 1 in questa modo:

GetGlobalTableTriggerMask(TableID : Integer) : Integer
//EXIT(ChangeLogMgt.GetTableTriggerMask(TableID));
EXIT(15);

Ora Navision farà sempre la chiamata ai trigger globali eseguendo il codice contenuto. Il log funzionerà solo se abilitato.

Volendo fare qualcosa di più raffinato si può creare un setup nel quale specificare quali tabelle e in che condizioni devono eseguire le operazioi globali e modificare la funzione GetTableTriggerMask della CodeUnit 423 per leggere questo setup.

ATTENZIONE: Tutti gli oggetti usati nei trigger globali devono essere dichiarati come variabili locali, soprattutto le codeunit, altrimenti alla chiusura del client, Navision andrà in crash.

NOTA:
Affinché le modifiche apportate alla Codeunit 1 siano eseguibili, è necessario riavviare il client Navision, anche quello dal quale si sta sviluppando.

sicuro che funzioni sempre sempre?

http://dynamicsuser.net/forums/t/24409.aspx