Questa è una traduzione automatica. Il messaggio originale è disponibile in Inglese.

ANVEDI Callback

Le informazioni contenute in questa pagina si riferiscono a installazioni in loco che utilizzano solo i file FOB.

Se si utilizza Microsoft Dynamics NAV 2017 o più recente e Anveo EDI Connect 5.00 offre una nuova logica di personalizzazione basata su eventi. Si consiglia vivamente di passare ai nuovi eventi di integrazione, se possibile, per facilitare gli aggiornamenti alle nuove versioni.

Il Codeunit ANVEDI Callback con ID 5327310 è il punto centrale se si vuole cambiare il comportamento di Anveo EDI Connect. Manteniamo costante l’API di questa Codeunit, in modo da non dover sovrascrivere questo oggetto quando si aggiorna il nostro modulo. Ci sono diverse funzioni che possono essere modificate da voi e alcune funzioni di aiuto che non devono essere modificate. Se avete aggiornato il modulo e vi manca una funzione di aiuto che potrebbe essere stata aggiunta in una versione più recente, c’è un secondo oggetto chiamato EDI Callback - Template con ID 5327313 dove troverete la nuova funzionalità.

OnFunction

Il modulo permette di definire le proprie funzionalità, che possono essere richiamate dalle mappature EDI. È possibile definire tutte le funzioni di cui si ha bisogno. Si dovrebbe utilizzare il case-statement predefinito e aggiungere le chiamate alle funzioni build-in FunctionName..FunctionName5.

Non si dovrebbe mettere alcun codice al di fuori della struttura di casi predefinita, in quanto questa funzione può essere chiamata abbastanza spesso e qualsiasi codice aggiuntivo può avere un impatto negativo sulle prestazioni.

CASE TRUE OF
  // ... other functions

  FunctionName('EXAMPLE', 'HelloWorld'):
    BEGIN
      FunctionResult('Hello World!');
      EXIT;
    END;
END;
Esempio: Funzione “Ciao mondo” in OnFunction

Il numero alla fine della funzione di aiuto locale FunctionName definisce il conteggio dei parametri. Si possono definire funzioni con un massimo di cinque parametri. È possibile accedere al contenuto dei parametri richiamando le funzioni GetTextParameter(ParNumber) e le funzioni simili per altri tipi di dati. Il numero del parametro viene contato da “1” a “5”.

Ogni funzione deve restituire un valore chiamando la funzione locale con il nome FunctionResult.

La funzione FunctionResult dovrebbe essere richiamata una sola volta. È buona pratica aggiungere una dichiarazione EXIT direttamente dopo di essa per evitare di chiamare la funzione più volte.

È possibile scegliere i nomi degli oggetti e delle funzioni a piacere.

I primi 29 caratteri della combinazione di nome dell’oggetto e della funzione devono essere unici per poter specificare i parametri dal mapping. Dovresti cercare di tenere i nomi brevi.

Ecco un elenco completo delle funzioni disponibili da utilizzare nella dichiarazione CASE. A partire da Anveo EDI Connect 4.00:

  • FunctionName(ObjectName: Text; FunctionName: Text)
  • FunctionName1(ObjectName: Text; FunctionName: Text; ParamName1: Text)
  • FunctionName2(ObjectName: Text; FunctionName: Text; ParamName1: Text; ParamName2: Text)
  • FunctionName3(ObjectName: Text; FunctionName: Text; ParamName1: Text; ParamName2: Text; ParamName3: Text)
  • FunctionName4(ObjectName: Text; FunctionName: Text; ParamName1: Text; ParamName2: Text; ParamName3: Text; ParamName4: Text)
  • FunctionName5(ObjectName: Text; FunctionName: Text; ParamName1: Text; ParamName2: Text; ParamName3: Text; ParamName4: Text; ParamName5: Text)

Qui trovate una lista della funzione che potete utilizzare per accedere ai parametri:

  • GetTextParameter(ParNum : Integer) : Text
    • Prende il parametro e prova a lanciarlo su un testo di tipo dati.
  • GetIntegerParameter(ParNum : Integer) : Integer
    • Prende il parametro e prova a lanciarlo al tipo di dati integro.
  • GetBooleanParameter(ParNum : Integer) : Boolean
    • Prende il parametro e prova a lanciarlo su dati di tipo booleano.
  • GetDecimalParameter(ParNum : Integer) : Decimal
    • Prende il parametro e prova a lanciarlo al tipo di dati decimali.
  • GetDateParameter(ParNum : Integer) : Date
    • Prende il parametro e prova a lanciarlo alla data del tipo di dati.
  • GetTimeParameter(ParNum : Integer) : Time
    • Prende il parametro e prova a lanciarlo a tempo di tipo dati.
  • GetDateTimeParameter(ParNum : Integer) : DateTime
    • Prende il parametro e prova a lanciarlo al tipo di dati data/ora.
  • GetParameter(ParNum : Integer;VAR EDIVariant : Codeunit
    • Riceve il parametro come istanza della ANVEDI Variant dell’Codeunit ANVEDI Variant.

CallbackRegistration

Questa funzione viene chiamata ogni volta che nel modulo succede qualcosa a cui si può reagire. La funzione contiene una struttura di casi, dove è possibile controllare il parametro passato CallbackSupport cosa è successo.

Non si dovrebbe mettere alcun codice al di fuori della struttura di casi predefinita, in quanto questa funzione può essere chiamata abbastanza spesso e qualsiasi codice aggiuntivo può avere un impatto negativo sulle prestazioni.

Questa struttura potrebbe sembrare insolita agli sviluppatori di C/AL, ma in questo modo possiamo aggiungere funzionalità, senza la necessità di aggiornare la ANVEDI Callback Codeunit.

Gli eventi disponibili sono definiti dal Codeunit ANVEDI Callback Support. Nelle sezioni seguenti parleremo degli eventi disponibili.

OnJobCallback

È possibile utilizzare l’codeunit del lavoro dal modulo per definire lavori personalizzati. L’codeunit permette di supportare l’uso di più parametri. Potete trovare maggiori informazioni sulla documentazione per l’handler del lavoro.

OnAcceptTransmission

Questa funzione è chiamata per determinare se un file o un messaggio deve essere accettato o ignorato dal modulo. Il modulo non memorizza se una trasmissione è stata ignorata e chiama questa funzione ogni volta che vede una trasmissione. Il file non è ancora letto, quindi si può decidere solo in base ai metadati disponibili.

Parametri:

EDITransmission

Un record dalla tabella EDI Transmission con i dati finora noti. Il disco non è ancora stato scritto.

Se si reagisce a questo evento, è necessario chiamare la seguente funzione:

HandleAcceptTransmission(Result : Boolean;VAR EDITransmission : Record "ANVEDI Transmission")

Parametri:

Result

Se ricevere o meno la trasmissione. Il valore True significa che si desidera ricevere i dati, il valore False che si desidera ignorare la trasmissione.

EDITransmission

Si dovrebbe passare il record della chiamata OnAcceptTransmission a questo parametro.

CASE TRUE OF
  // ...
  CallbackSupport.OnAcceptTransmission(ANVEDITransmission):
    BEGIN
      // Ignore files with the name "FileList.txt"
      // Usually you also want to check the communication channel etc. to only run this for specific channels
      IF ANVEDITransmission."Tag 2" = 'FileList.txt' THEN BEGIN
        CallbackSupport.AcceptTransmission(FALSE. ANVEDITransmission);
      END ELSE BEGIN
        CallbackSupport.AcceptTransmission(TRUE. ANVEDITransmission);
      END;
    END;
  END;
END;
Esempio: OnAcceptTransmission

OnBeforeList

Questo codice viene chiamato prima che il modulo cerchi nuovi dati. Questo può essere usato per emettere un comando o uno script esterno per ricevere i file, prima che il modulo cerchi nuovi dati.

Parametri:

EDICommunicationChannel

Specifica un record di dati della tabella dei EDI Communication Channel per il quale devono essere cercati nuovi messaggi.

Questo evento non richiede una chiamata ad un’altra funzione in quanto non supporta alcun valore di ritorno.

OnAfterList

Questo codice viene chiamato dopo che il modulo ha cercato nuovi dati.

Parametri:

EDICommunicationChannel

Specifica un record di dati della tabella dei EDI Communication Channel.

Questo evento non richiede una chiamata ad un’altra funzione in quanto non supporta alcun valore di ritorno.

OnBeforeReceive

Questo evento viene chiamato prima che venga recuperata una trasmissione.

Parametri:

EDITransmission

Specifica un record di dati della tabella di EDI Transmission.

Questo evento non richiede una chiamata ad un’altra funzione in quanto non supporta alcun valore di ritorno.

OnAfterReceive

Questo evento viene chiamato dopo la ricezione di una trasmissione.

Parametri:

EDITransmission

Specifica un record di dati della tabella di EDI Transmission.

Questo evento non richiede una chiamata ad un’altra funzione in quanto non supporta alcun valore di ritorno.

OnBeforeArchive

Questo evento viene chiamato prima dell’archiviazione di una trasmissione.

Parametri:

EDITransmission

Specifica un record di dati della tabella di EDI Transmission.

Questo evento non richiede una chiamata ad un’altra funzione in quanto non supporta alcun valore di ritorno.

OnAfterArchive

Questo evento viene chiamato dopo l’archiviazione di una trasmissione.

Parametri:

EDITransmission

Specifica un record di dati della tabella di EDI Transmission.

Questo evento non richiede una chiamata ad un’altra funzione in quanto non supporta alcun valore di ritorno.

OnBeforeDelete

Questo evento viene richiamato prima della cancellazione di una trasmissione.

Parametri:

EDITransmission

Specifica un record di dati della tabella di EDI Transmission.

Questo evento non richiede una chiamata ad un’altra funzione in quanto non supporta alcun valore di ritorno.

OnAfterDelete

Questo evento viene richiamato dopo la cancellazione di una trasmissione.

Parametri:

EDITransmission

Specifica un record di dati della tabella di EDI Transmission.

Questo evento non richiede una chiamata ad un’altra funzione in quanto non supporta alcun valore di ritorno.

OnBeforeSend

Questo evento viene chiamato prima dell’invio di una trasmissione.

Parametri:

EDITransmission

Specifica un record di dati della tabella di EDI Transmission.

Quando si reagisce a questo evento è necessario chiamare la funzione:

HandleBeforeSendTransmission(Result, EDITransmission)
Result

Se inviare la trasmissione. Il valore True significa che la trasmissione deve essere inviata.

EDITransmission

La trasmissione che hai ricevuto con la chiamata dell’evento.

OnComposeMessage

Questo evento viene chiamato quando viene composta una trasmissione.

Parametri:

EDITransmission

Specifica un record di dati della tabella di EDI Transmission.

Questo evento non richiede una chiamata ad un’altra funzione in quanto non supporta alcun valore di ritorno.

OnAfterSend

Questo evento viene chiamato dopo l’invio di una trasmissione.

Parametri:

EDITransmission

Specifica un record di dati della tabella di EDI Transmission.

Quando si reagisce a questo evento è necessario chiamare la funzione:

HandleAfterSendTransmission(Result, EDITransmission)
Result

Il risultato è attualmente ignorato.

EDITransmission

La trasmissione che hai ricevuto con la chiamata dell’evento.

OnReplacePlaceholder

Questa funzione viene chiamata quando viene valutata una stringa che può contenere variabili definite dall’utente, come ad esempio il nome di un file.

Qui di seguito trovate un esempio:

If Placeholder = 'MyNumber' THEN BEGIN
    IF EDILinkedDocument.FINDSET THEN REPEAT
      RecID := EDILinkedDocument."Record ID";
      IF (RecID.TABLENO = DATABASE::"EDI Document") THEN BEGIN
        RecRef.GET(EDILinkedDocument."Record ID");
        RecRef.SETTABLE(EDIDocument);
        CallbackSupport.HandleReplacePlaceholder(TRUE, EDIDocument."System Document No.");
        EXIT;
      END;
    UNTIL EDILinkedDocument.NEXT = 0;
  
    CallbackSupport.HandleReplacePlaceholder(FALSE, '');
  END ELSE BEGIN
    CallbackSupport.HandleReplacePlaceholder(FALSE, '');
  END;
Esempio di codice: OnReplacePlacePlaceholder

Parametri:

Placeholder

Il nome della variabile tra le parentesi graffe per la quale si cerca un valore.

Quando si reagisce a questo evento si dovrebbe chiamare la funzione:

CallbackSupport.HandleReplacePlaceholder(Result,Value)

Parametri:

Result

Se si vuole restituire un valore. Se si restituisce True è necessario specificare un valore per la variabile. È possibile sovrascrivere le variabili di sistema.

Value

Il valore che dovrebbe essere utilizzato.

OnError

Questo evento viene chiamato quando si verifica un errore nella coda di elaborazione.

Parametri:

EDIProcessingQueue

Un’istanza della tabella EDI Processing Queue la cui elaborazione non è riuscita.

AfterProcess

Questo evento viene chiamato dopo l’elaborazione di una voce nella tabella EDI Processing Queue. Si dovrebbe controllare lo stato dell’inserimento passato e reagire di conseguenza.

Parametri:

EDIProcessingQueue

Un’istanza della tabella EDI Processing Queue che è stata elaborata.

LookupLinkedDocument

Questa funzione viene richiamata dalla lista dei documenti collegati, se l’utente vuole aprire la pagina della carta. Ci sono alcune pagine predefinite nel modulo e si cerca di tornare alla pagina di ricerca predefinita, nel caso questa funzione restituisca False.

LookupLinkedDocument(RecRef: RecordRef) : Boolean
RecRef

Il record per il quale l’utente vuole aprire la pagina.

Valore di ritorno

Un valore booleano. Restituire il valore True, se la pagina è stata aperta da questa funzione; False altrimenti.

     CASE RecRef.NUMBER OF
       DATABASE::"Sales Header":
          BEGIN
            RecRef.SETTABLE(SalesHeader);
            PAGE.RUN(PAGE::"Sales Order", SalesHeader);
            EXIT(TRUE);
          END;
      END;
Esempio di codice: Aprire la pagina della carta per l’ordine di vendita

BeforeConvert

Questa funzione viene richiamata prima dell’avvio di un mapping. La chiamata è all’interno della transazione del database del mapping. È possibile annullare l’esecuzione del mapping, prima ancora che il mapping sia iniziato restituendo il valore True. In generale si sconsiglia l’utilizzo di questa funzione. Se si desidera chiamare il codice personalizzato, si prega di utilizzare la più recente CallbackRegistration o la funzionalità OnFunction.

AfterConvert

Questa funzione viene richiamata dopo che un mapping è stato completato con successo. La chiamata è all’interno della transazione del database del mapping. In generale si sconsiglia l’utilizzo di questa funzione. Se si desidera chiamare il codice personalizzato, si prega di utilizzare la più recente CallbackRegistration o la funzionalità OnFunction.

In Anveo EDI Connect 4.00 abbiamo aggiunto agli eventi la funzione CallbackRegistration chiamata OnError e AfterProcess. Si prega di utilizzare la nuova funzionalità, se possibile.

Riferimenti incrociati

È possibile definire una propria logica di riferimento incrociato. Questa funzionalità viene richiamata, quando il tipo di riferimento incrociato è impostato su callback. Spesso si consiglia di utilizzare le mappature al posto del codice di richiamata personalizzato per facilitare la lettura delle mappature. Il codice di riferimento incrociato personalizzato è, dal nostro punto di vista, più difficile da mantenere.

ValidateCrossReferenceNumber

Verificare se un numero di riferimento esterno è valido.

questa funzione è deprecata e non deve essere utilizzata.

GetInternalNo

Restituisce un numero interno da uno esterno.

GetInternalNo(TableID: Integer; FieldNo: Integer; RelationTableID: Integer; RelationFieldNo: Integer; RelationTableView: Text[1024]; RelationTableViewPar1: Variant; VAR InternalNo: Code[20]; EDICrossReferenceType: Record 5327361; ExternalNo: Text[64]; EDIProject: Code[20]) : Boolean

GetExternalNo

Restituisce un numero esterno da uno interno.

GetExternalNo(TableID: Integer; FieldNo: Integer; RelationTableID: Integer; RelationFieldNo: Integer; RelationTableView: Text[1024]; RelationTableViewPar1: Variant; InternalNo: Code[20]; EDICrossReferenceType: Record 5327361; VAR ExternalNo: Text[64]; EDIProject: Code[20]) : Boolean

UpdateCrossReference

Viene chiamato se l’utente cerca di aggiornare un riferimento incrociato.

UpdateCrossReference(TableID : Integer; FieldNo: Integer; RelationTableID: Integer; RelationFieldNo: Integer; RelationTableView: Text[1024]; RelationTableViewPar1: Variant; InternalNo: Code[20]; EDICrossReferenceType: Record 5327361; CrossReference: Text[64]; EDIProject : Code[20])

Funzioni deprezzate

La funzionalità sottostante è implementata solo in parte e quindi non è sicura. Si consiglia di utilizzare i filtri di sicurezza di default del Microsoft Dynamics NAV 2013R2 e di lasciare vuote le due funzioni.

ApplyUserFilter

Permette di filtrare i dati passati in modo che l’utente possa cambiare il filtro in un secondo momento. L’uso di questa funzione non è più raccomandato. La funzione potrebbe essere rimossa nelle versioni più recenti.

ApplySecurityFilter

Permette di filtrare i dati in modo che il filtro non possa essere modificato dall’utente. Questa funzione non viene chiamata in tutti i casi. L’uso di questa funzione non è più raccomandato. La funzione potrebbe essere rimossa nelle versioni più recenti.