ANVEDI Integration
De ANVEDI Integration codeunit bevat alle openbare API-aanroepen naar de EDI-module die u mogelijk wilt aanroepen vanuit uw aangepaste code. Alle functies in deze codeunit moeten worden gebruikt als u direct een EDI-actie wilt starten via een code.
Algemene concepten
In dit gedeelte bespreken we eerst de kernconcepten, die je moet begrijpen om de codevoorbeelden te kunnen lezen.
Gebruikerstransacties
Anvaigo EDI Connect heeft een concept dat “gebruikerstransacties” heet, die meerdere databasetransacties kunnen overspannen en meerdere fouten kunnen verzamelen. De meeste acties in Anvaigo EDI Connect vereisen een open gebruikerstransactie om ze uit te voeren. Je kunt een gebruikerstransactie starten door te bellen:
// Start a new user transaction with the description given by TextDescription
ANVEDIIntegration.BEGIN_USER_TRANSACTION(TextDescription);
// Your EDI code
// End the user transaction and show an error list, if there were any
ANVEDIIntegration.END_USER_TRANSACTION(TRUE, FALSE);
Met de aanroep van END_USER_TRANSACTION kun je fouten weergeven, de huidige databasetransactie afbreken of een retourwaarde krijgen, of er een fout is opgetreden. We zullen het later in detail bespreken.
BEGIN_USER_TRANSACTION
Start een nieuwe gebruikerstransactie. Let op dat je calls alleen in de EDI-module integreert op punten waar een COMMIT kan plaatsvinden. In veel gevallen zal de module alle databasewijzigingen vastleggen voordat de EDI-logica wordt uitgevoerd. Overweeg ook om alleen de gegevens te markeren en een achtergrondtaak te gebruiken om de EDI-logica uit te voeren.
De gegeven tekst wordt aan de gebruiker getoond als er een wachtdialoog wordt geopend, omdat het proces tijd in beslag neemt.
BEGIN_USER_TRANSACTION(Text : Text[1024])
Je moet een aanroep van BEGIN_USER_TRANSACTION altijd beëindigen met een aanroep van END_USER_TRANSACTION.
SHOWDIALOGS
Deze functie kan worden gebruikt om EDI-dialoogvensters te verbergen.
SHOWDIALOGS(ShowDialogs : Boolean)
De parameter bepaalt of de dialoogvensters al dan niet worden weergegeven. Een aanroep van deze functie moet zich binnen een gebruikerstransactie bevinden. Normaal gesproken roep je deze functie direct na BEGIN_USER_TRANSACTION aan.
ISPROCESSING
Deze functie geeft terug of u zich binnen een mapping bevindt. U kunt deze waarde controleren bij het valideren van triggers, bijvoorbeeld om een ander gedrag te krijgen bij het verwerken van EDI-processen. U kunt deze waarde ook gebruiken om invoerdialoogvensters alleen weer te geven als u geen EDI verwerkt.
END_USER_TRANSACTION
Deze functie beëindigt een gebruikerstransactie.
END_USER_TRANSACTION(ShowErrorList : Boolean; BreakOnError : Boolean) Success : Boolean
Als er fouten zijn opgetreden tijdens de transactie, toon deze dan in een dialoogvenster aan de eindgebruiker. Deze parameter heeft geen effect als GUIALLOWED False is.
Of de module een fout moet geven, waardoor de huidige processtroom wordt onderbroken. Alle code na deze regel wordt niet uitgevoerd als er een fout is opgetreden tijdens de transactie. Als deze parameter op True wordt ingesteld, wordt er een foutmelding getoond dat er een of meer fouten zijn opgetreden, als die er waren. In dit geval kan de gebruiker niet de volledige lijst met fouten zien.
Een retourwaarde, of er een fout is opgetreden of niet. Geeft True terug bij succes, d.w.z. er geen fouten waren; anders False.
De retourwaarde kreeg in oudere versies van de module een andere naam, maar had dezelfde functie. De oude naam van de terugkeerwaarde was onjuist, de functie gaf altijd True terug bij succes.
Werken met zakelijke transacties
RUN_BUSINESSTRANSACTION_JOB
Voert de gegevensverzamelingstaak van een opgegeven bedrijfstransactietype uit. Dit moet worden aangeroepen vanuit een gebruikerstransactie.
RUN_BUSINESSTRANSACTION_JOB(BusinessTransactionTypeCode : Code[20])
Code van het type zakelijke transactie.
// Start a new user transaction with the description given by TextDescription
ANVEDIIntegration.BEGIN_USER_TRANSACTION(TextDescription);
// Collects the data of the Business Transaction Type "INVOICE_OUT" and processes the mappings
ANVEDIIntegration.RUN_BUSINESSTRANSACTION_JOB('INVOICE_OUT');
// End the user transaction and show an error list, if there were any
ANVEDIIntegration.END_USER_TRANSACTION(TRUE, FALSE);
START_BT_WITH_REC
Start een nieuwe bedrijfstransactie voor de opgegeven code en record-id.
START_BT_WITH_REC(BusinessTransactionTypeCode : Code[20];RecID : RecordID)
RUN_BT_BATCH_JOB
Voert de batchverzamelingstaak uit met de opgegeven naam. Dit moet worden aangeroepen vanuit een gebruikerstransactie.
RUN_BT_BATCH_JOB(BatchCode : Code[20])
Als u het wilt combineren met RUN_BUSINESSTRANSACTION_JOB, moet u beide functies in afzonderlijke BEGIN..END_USER_TRANSACTION-blokken inkapselen en het volgende ertussen plaatsen:
COMMIT;
SELECTLATESTVERSION();
Acties
Soms wilt u een knop op een pagina maken om een EDI-proces te starten, of wilt u het bijvoorbeeld integreren in het release-proces. In deze gevallen kun je bijna alle acties van de module uitvoeren vanuit code. Houd er rekening mee dat EDI-processen meestal geautomatiseerd moeten zijn en op de achtergrond moeten draaien. Dus voordat je acties in code toevoegt, moet je de mogelijkheid van een achtergrondtaak als alternatief overwegen.
Een EDI Mapping uitvoeren
Om een EDI Mapping uit te voeren, moeten we een gebruikerstransactie starten. Daarna willen we misschien gegevens doorgeven aan de mapping. We kunnen dan de mapping uitvoeren en het resultaat controleren wanneer we de gebruikerstransactie beëindigen. De gedetailleerde beschrijving van de commando’s vind je na het codevoorbeeld.
// Start a new user transaction with the description given by TextDescription
ANVEDIIntegration.BEGIN_USER_TRANSACTION(TextDescription);
// Reset any existing table views
ANVEDIIntegration.RESET_TABLEVIEWS();
// Copy sales invoice header from Rec to a local variable
SalesInvoiceHeader := Rec;
// Filter the local variable to the current record
SalesInvoiceHeader.SETRECFILTER;
// Store the filter to the record under the name INVOICE
ANVEDIIntegration.SET_TABLEVIEW('INVOICE', SalesInvoiceHeader.GETVIEW(FALSE));
// Run the mapping EXAMPLE, NAV, INVOICE. You can access the invoice header, by adding the table and setting the filter to a named table view and enter INVOICE as the name. In general, you can pass as many filters as you need to the mapping.
ANVEDIIntegration.RUN('EXAMPLE', 'NAV', 'INVOICE', FALSE, TRUE, '');
// End the user transaction and show an error list, if there were any
ANVEDIIntegration.END_USER_TRANSACTION(TRUE, FALSE);
RESET_TABLEVIEWS
Zet alle bestaande opgeslagen tabelweergaven terug. Moet worden aangeroepen vanuit een gebruikerstransactie.
RESET_TABLEVIEWS()
SET_TABLEVIEW
Slaat een tabelweergave op onder een opgegeven naam. Moet worden aangeroepen vanuit een gebruikerstransactie.
SET_TABLEVIEW(FilterName : Code[30];FilterText : Text[1024])
Een code die de naam van het filter weergeeft. Je moet exact dezelfde naam opgeven in de EDI Mapping om het filter op te halen.
De filtertekst in de vorm van een Anvaigo EDI Connect-tabelweergave. Je moet de Microsoft Dynamics 365 Business Central ingebouwde functie GETVIEW gebruiken, indien mogelijk, om de correct geformatteerde string te krijgen.
GET_TABLEVIEW
Haalt een opgeslagen filter op. Moet worden aangeroepen vanuit een gebruikerstransactie.
GET_TABLEVIEW(FilterName : Code[30]) : Text[1024]
RUN
Voer een of meer EDI-toewijzingen uit. Moet worden aangeroepen vanuit een gebruikerstransactie.
RUN(ProjectFilter : Text[250];FormatFilter : Text[250];CodeFilter : Text[250];MultipleAllowed : Boolean;ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
De code van het project of een filterstring die overeenkomt met de projectcode.
De code van de mapping of een filterstring die overeenkomt met de indelingscode.
De code van de mapping of een filter dat overeenkomt met de gewenste mapping.
Of er meerdere toewijzingen moeten worden uitgevoerd als er een filter is opgegeven. Dit is een veiligheidsfunctie die voorkomt dat u meer dan één mapping uitvoert.
Of de nabewerking moet worden uitgevoerd. Normaal gesproken wil je dit instellen op True.
Een filter op de nabewerkingen. Normaal gesproken kun je een lege tekenreeks opgeven.
Andere acties
RECEIVE_ALL
Afgeschreven functie. Je moet de algemene functie niet aanroepen, maar een van de meer specifieke functies hieronder.
Ontvangt alle communicatiekanalen. Deze functie moet worden aangeroepen vanuit een gebruikerstransactie.
RECEIVE_ALL(ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
RECEIVE_FOLDER
Ontvangt de gegevens van de opgegeven transmissiemap of mappen. Deze functie moet worden aangeroepen vanuit een gebruikerstransactie.
RECEIVE_FOLDER(TransmissionFolderCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
De code van het transmissiefilter of een filterstring op het codeveld.
Of de nabewerking moet worden uitgevoerd. Normaal gesproken wil je dit instellen op True.
Een filter op de nabewerkingen. Normaal gesproken kun je een lege tekenreeks opgeven.
RECEIVE_COMMUNICATIONCHANNEL
Ontvangt gegevens van het opgegeven communicatiekanaal. Deze functie moet worden aangeroepen vanuit een gebruikerstransactie.
RECEIVE_COMMUNICATIONCHANNEL(CommunicationChannelCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
De code van het communicatiekanaal of een filterstring op het codeveld.
Of de nabewerking moet worden uitgevoerd. Normaal gesproken wil je dit instellen op True.
Een filter op de nabewerkingen. Normaal gesproken kun je een lege tekenreeks opgeven.
SEND_ALL
Afgeschreven functie. Je moet de algemene functie niet aanroepen, maar een van de meer specifieke functies hieronder.
Verzendt alle communicatiekanalen. Deze functie moet worden aangeroepen vanuit een gebruikerstransactie.
SEND_ALL(ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
Of de nabewerking moet worden uitgevoerd. Normaal gesproken wil je dit instellen op True.
Een filter op de nabewerkingen. Normaal gesproken kun je een lege tekenreeks opgeven.
SEND_FOLDER
Verstuurt open transmissies van de opgegeven transmissiemap. Deze functie moet worden aangeroepen vanuit een gebruikerstransactie.
SEND_FOLDER(TransmissionFolderCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
De code van de verzendmap of een filtertekenreeks op het codeveld.
Of de nabewerking moet worden uitgevoerd. Normaal gesproken wil je dit instellen op True.
Een filter op de nabewerkingen. Normaal gesproken kun je een lege tekenreeks opgeven.
SEND_COMMUNICATIONCHANNEL
Verstuurt open transmissies van het opgegeven communicatiekanaal. Deze functie moet worden aangeroepen vanuit een gebruikerstransactie.
SEND_COMMUNICATIONCHANNEL(CommunicationChannelCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
De code van het communicatiekanaal of een filterstring op het codeveld.
Of de nabewerking moet worden uitgevoerd. Normaal gesproken wil je dit instellen op True.
Een filter op de nabewerkingen. Normaal gesproken kun je een lege tekenreeks opgeven.
PROCESS
PROCESS(ProcessFollowing : Boolean;ProcessingQueueView : Text[250];UserTransactionFilter : Boolean)
Of de nabewerking moet worden uitgevoerd. Normaal gesproken wil je dit instellen op True.
Een filter op de nabewerkingen. Normaal gesproken kun je een lege tekenreeks opgeven.
Of alleen nabewerkingen van de huidige gebruikerstransactie moeten worden verwerkt.
De ontvanger/afzender instellen
SET_COMMUNICATION_CHANNEL
Stelt het communicatiekanaal in voor de volgende mapping binnen de gebruikerstransactie.
SET_COMMUNICATION_CHANNEL(ChannelCode : Code[20])
De code van het communicatiekanaal.
SET_RECEIVER_PARTNER
Stelt de ontvangerpartner in voor de volgende mapping binnen de gebruikerstransactie.
SET_RECEIVER_PARTNER(ReceiverPartner : Code[20])
De partnercode van de ontvanger.
SET_RECEIVER_IDENTIFICATION
Stelt de ontvangeridentificatie in voor de volgende mapping binnen de gebruikerstransactie.
SET_RECEIVER_IDENTIFICATION(Identification : Text[64])
De ontvangeridentificatie. Dit is een vrije tekst die een speciale betekenis kan hebben op specifieke communicatiekanalen.
SET_SENDER_PARTNER
Stelt de afzenderpartner in voor de volgende mapping binnen de gebruikerstransactie.
SET_SENDER_PARTNER(PartnerCode : Code[20])
De partnercode van de afzender.
SET_SENDER_IDENTIFICATION
Stelt de afzenderidentificatie in voor de volgende mapping binnen de gebruikerstransactie.
SET_SENDER_IDENTIFICATION(Identification : Text[64])
De ontvangeridentificatie. Dit is een vrije tekst die een speciale betekenis kan hebben op specifieke communicatiekanalen.
Loggen en foutafhandeling
De volgende functies kunnen alleen worden aangeroepen terwijl een mapping actief is. Deze functies zijn bedoeld om te worden gebruikt voor aangepaste foutafhandeling vanuit code.
LogError
Logt een foutmelding.
LogError(ErrorMessage : Text[1024])
De foutmelding. De uitvoering gaat door na deze oproep. Gebruik de native ERROR-functie om de besturingsstroom te onderbreken.
LogWarning
Logt een waarschuwing.
LogWarning(WarningMessage : Text[1024])
De tekst van de waarschuwing.
LogInformation
Logboekinformatie.
LogInformation(InformationMessage : Text[1024])
De informatie die moet worden gelogd.
LogDocumentError
Logt een fout die bij een EDI-document hoort. Er is een meer universele functie genaamd LogRecIDErrorWithCode.
LogDocumentError(ErrorMessage : Text[1024];EDIDocument : Record "EDI Document")
De foutmelding.
Het EDI-document waar de fout bij hoort.
LogDocumentWarning
Logt een waarschuwing die bij een EDI-document hoort. Er is een meer universele functie genaamd LogRecIDWarningWithCode.
LogDocumentWarning(WarningMessage : Text[1024];EDIDocument : Record "EDI Document")
De waarschuwing die moet worden gelogd.
Het EDI-document waar de fout bij hoort.
LogDocumentInformation
Logt een informatie die bij een EDI-document hoort. Er is een meer universele functie genaamd LogRecIDInformationWithCode.
LogDocumentInformation(InformationMessage : Text[1024];EDIDocument : Record "EDI Document")
De informatie die moet worden gelogd.
Het EDI-document waar de fout bij hoort.
LogDocumentLineError
Logt een fout die bij een EDI-documentregel hoort. Er is een meer algemene functie met de naam LogRecIDErrorWithCode.
LogDocumentLineError(ErrorMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
De foutmelding die moet worden gelogd.
De EDI-documentregel waartoe de fout behoort.
LogDocumentLineWarning
Logt een waarschuwing die bij een EDI-documentregel hoort. Er is een meer algemene functie genaamd LogRecIDWarningWithCode.
LogDocumentLineWarning(WarningMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
De waarschuwing die moet worden gelogd.
De EDI-documentregel waartoe de fout behoort.
LogDocumentLineInformation
Logt een informatie behorend bij een EDI Documentregel. Er is een meer algemene functie met de naam LogRecIDInformationWithCode.
LogDocumentLineInformation(InformationMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
De informatie die moet worden gelogd.
De EDI-documentregel waartoe de fout behoort.
LogErrorWithCode
Logt een fout met een extra foutcode.
LogErrorWithCode(ContinueExecution : Boolean;ErrorMessage : Text[1024];Code : Code[20])
Of de controlestroom moet worden onderbroken of dat de uitvoering moet worden voortgezet
De foutmelding die moet worden gelogd.
Een code om de fout te identificeren.
LogWarningWithCode
Logt een waarschuwing met een extra foutcode.
LogWarningWithCode(WarningMessage : Text[1024];Code : Code[20])
De waarschuwing die moet worden gelogd.
Een code om de fout te identificeren.
LogInformationWithCode
Logt een informatie met een extra foutcode.
LogInformationWithCode(InformationMessage : Text[1024];Code : Code[20])
De informatie die moet worden gelogd.
Een code om de fout te identificeren.
LogRecIDErrorWithCode
Logt een foutmelding die bij een specifiek record hoort.
LogRecIDErrorWithCode(ContinueExecution : Boolean;ErrorMessage : Text[1024];RecID : RecordID;Code : Code[20];IsUserAcceptable : Boolean)
Of de controlestroom moet worden onderbroken of dat de uitvoering moet worden voortgezet.
De foutmelding die moet worden gelogd.
De record-ID waartoe de fout behoort.
Een foutcode om de fout te identificeren.
Of de fout aanvaardbaar is voor de eindgebruiker. Dit vereist een niet-lege foutcode.
LogRecIDWarningWithCode
Logt een waarschuwing die bij een record hoort.
LogRecIDWarningWithCode(WarningMessage : Text[1024];RecID : RecordID;Code : Code[20])
De waarschuwing die moet worden gelogd.
De record id waar de waarschuwing bij hoort.
Een code om de logboekvermelding te identificeren.
LogRecIDInformationWithCode
Logt informatie die bij een record hoort.
LogRecIDInformationWithCode(InformationMessage : Text[1024];RecID : RecordID;Code : Code[20])
De informatie die moet worden gelogd.
Het record id waar de informatie bij hoort.
Een code om de logboekvermelding te identificeren.