CFL Import Sales Documents API

  • 7 minutes to read

APIPublisher = 'Dynamate';
APIGroup = 'bocountdynamics';
APIVersion = 'v2.0';
EntityName = 'importsalesdocument';
EntitySetName = 'importsalesdocuments';

GET

Method: GET https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importsalesdocuments(id)

entity:

{ 
    "@odata.etag": "W/\"JzIwOzEyMjQ2ODA5MTk5NDM2ODMzMjk5MTswMDsn\"",
    "id": "dcaa72ee-a42e-ed11-97e8-000d3a254c9a",
    "contentstring": "",
    "service":false,
    "documentType": "Invoice",
    "no": "201907049",
    "customerNo": "1417",
    "name": "",
    "postingDescription": "",
    "standardFormatMessage": "141790704943",
    "journalTemplateName": "VERKOOP",
    "postingDate": "2019-06-14",
    "documentDate": "2019-06-14",
    "dueDate": "2019-06-14",
    "paymentDiscountPct": 0,
    "pmtDiscountDate": "0001-01-01",
    "vatBaseDiscountPct": 0,
    "currencyCode": "",
    "currencyFactor": 0,
    "vatBusPostingGroup": "BINNENLAND",
    "invoiceDiscountAmount": 0,
    "docAmountInclVAT": 119.49,
    "docAmountVAT": 20.74,
    "shortcutDimension1Code": "",
    "shortcutDimension2Code": "",
    "eloID": "",
    "cflArea": "",
    "transactionSpecification": "",
    "transactionType": "",
    "transportMethod": "",
    "docImage":"",
    "docNotes":"",
    "createdDocType": 0,
    "createdDocSubtype": 0,
    "createdDocNo": "",
    "errorMessage": ""
}

DELETE

Method: DELETE https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importsalesdocuments(id)

UPDATE

method: PATCH
https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importsalesdocuments(dcaa72ee-a42e-ed11-97e8-000d3a254c9a) Headers:
"If-Match" :W/"JzIwOzEyMjQ2ODA5MTk5NDM2ODMzMjk5MTswMDsn""
Body:

{
    "name": "TEST-aanpassing"
}

CREATE

Gebruik deze API om een verkoopfactuur of creditnota te importeren.

Dit kan via een PEPPOL xml:

method : POST Url: https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importsalesdocuments body;

{ 
    "contentstring": "base64string"
}
NOTE

Het veld contentstring moet een base64-string bevatten van het xml-bestand van de factuur/creditnota. Indien het veld contentstring gevuld is dan mogen de andere velden niet ingevuld worden. Indien het veld contentstring niet gevuld is dan moeten de andere velden ingevuld worden.

Of adhv. invullen van de velden:

Url: https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importsalesdocuments body;

{ 
    "service":false,
    "documentType": "Invoice",
    "no": "201907049",
    "customerNo": "1417",
    "name": "",
    "postingDescription": "",
    "standardFormatMessage": "141790704943",
    "journalTemplateName": "VERKOOP",
    "postingDate": "2019-06-14",
    "documentDate": "2019-06-14",
    "dueDate": "2019-06-14",
    "paymentDiscountPct": 0,
    "pmtDiscountDate": "0001-01-01",
    "vatBaseDiscountPct": 0,
    "currencyCode": "",
    "currencyFactor": 0,
    "vatBusPostingGroup": "",
    "invoiceDiscountAmount": 0,
    "docAmountInclVAT": 119.49,
    "docAmountVAT": 20.74,
    "shortcutDimension1Code": "",
    "shortcutDimension2Code": "",
    "eloID": "",
    "cflArea": "",
    "transactionSpecification": "",
    "transactionType": "",
    "transportMethod": "",
    "docImage":"",
    "docNotes":""
}

Het is ook mogelijk om zowel header als lines in 1 post toe te voegen: body;

{ 
    "service":false,
    "documentType": "Invoice",
    "no": "201907049",
    "customerNo": "1417",
    "name": "",
    "postingDescription": "",
    "standardFormatMessage": "141790704943",
    "journalTemplateName": "VERKOOP",
    "postingDate": "2019-06-14",
    "documentDate": "2019-06-14",
    "dueDate": "2019-06-14",
    "paymentDiscountPct": 0,
    "pmtDiscountDate": "0001-01-01",
    "vatBaseDiscountPct": 0,
    "currencyCode": "",
    "currencyFactor": 0,
    "vatBusPostingGroup": "",
    "invoiceDiscountAmount": 0,
    "docAmountInclVAT": 119.49,
    "docAmountVAT": 20.74,
    "shortcutDimension1Code": "",
    "shortcutDimension2Code": "",
    "eloID": "",
    "cflArea": "",
    "transactionSpecification": "",
    "transactionType": "",
    "transportMethod": "",
    "docImage":"",
    "docNotes":"",
    "importSalesDocumentLines": [
                {
                    "type": "G/L Account",
                    "no":"600000",
                    "description":"Test regel 1",
                    "quantity":1,
                    "vatBusPostingGroup":"BINNENLAND",
                    "vatProdPostingGroup":"G3",
                    "unitPrice":500
                },
                {
                    "type": "G/L Account",
                    "no":"600000",
                    "description":"Test regel 1",
                    "quantity":1,
                    "vatBusPostingGroup":"BINNENLAND",
                    "vatProdPostingGroup":"G3",
                    "unitPrice":500
                }
            ]
}
NOTE

Het veld docImage moet een base64-string bevatten van het pdf-bestand van de factuur/creditnota.
Vanaf BC 27.0: Het wordt aanbevolen om de nieuwe documentImages API part te gebruiken voor het uploaden van meerdere PDF-bestanden. Het oude docImage veld blijft beschikbaar maar wordt obsolete verklaard.

Meerdere documentafbeeldingen toevoegen (BC 27.0+)

Vanaf Business Central 27.0 is het mogelijk om meerdere PDF-bestanden toe te voegen als documentafbeeldingen via de nieuwe importSalesDocumentImages API part:

{ 
    "service": false,
    "documentType": "Invoice",
    "no": "201907049",
    "customerNo": "1417",
    "name": "Contoso Ltd.",
    "postingDescription": "Sales Invoice",
    "postingDate": "2019-06-14",
    "documentDate": "2019-06-14",
    "dueDate": "2019-06-14",
    "docAmountInclVAT": 119.49,
    "docAmountVAT": 20.74,
    "importSalesDocumentLines": [
        {
            "description":"Test regel 1",
            "quantity":1,
            "unitPrice":500
        }
    ],
    "importSalesDocumentImages": [
        {
            "fileName": "invoice.pdf",
            "fileContent": "base64-encoded-pdf-content-here"
        },
        {
            "fileName": "attachment.pdf",
            "fileContent": "base64-encoded-pdf-content-here"
        }
    ]
}

De documentImages array accepteert meerdere items met:

  • fileName: De bestandsnaam van de PDF
  • fileContent: Base64-gecodeerde inhoud van het PDF-bestand

Deze worden opgeslagen als CFL Document Images en zijn zichtbaar in de document image factbox.

NOTE

Bedragen zijn altijd positief. Het documenttype duidt aan of dit een factuur of creditnota is.

NOTE

Indien het veld Service op true staat dan wordt de factuur/creditnota geboekt als een service factuur/creditnota.

Extra velden via API (BC 27.0+)

Vanaf Business Central 27.0 is het mogelijk om aanvullende veldwaarden mee te sturen bij het importeren van documenten via de nieuwe importSalesDocumentAdditionalFields API part. Dit maakt het mogelijk om velden in te vullen die niet standaard in de API zijn opgenomen.

Instelling

Voordat extra velden via de API kunnen worden gebruikt, moeten deze eerst worden geconfigureerd in de API Extra velden instelling pagina:

  1. Zoek naar API Extra velden instelling in Business Central
  2. Voeg een nieuwe regel toe met:
    • Tabelnr.: Het tabelnummer van de doeltabel (bijv. 36 voor Sales Header)
    • API veldnaam: De naam die in de API wordt gebruikt (bijv. "yourReference")
    • Doelveldnr.: Het veldnummer in de doeltabel waar de waarde moet worden ingevuld
    • Ingeschakeld: Zet op Ja om het veld te activeren

Gebruik

Voeg extra velden toe via de additionalFields array in de POST request:

{ 
    "service": false,
    "documentType": "Invoice",
    "no": "201907049",
    "customerNo": "1417",
    "postingDate": "2019-06-14",
    "documentDate": "2019-06-14",
    "importSalesDocumentLines": [
        {
            "description": "Test regel 1",
            "quantity": 1,
            "unitPrice": 500
        }
    ],
    "additionalFields": [
        {
            "fieldName": "yourReference",
            "fieldValue": "REF-2026-001"
        },
        {
            "fieldName": "externalDocumentNo",
            "fieldValue": "EXT-12345"
        }
    ]
}

Extra velden op documentregels

Extra velden kunnen ook worden toegevoegd aan individuele documentregels via de importSalesDocumentLineAdditionalFields array:

{
    "importSalesDocumentLines": [
        {
            "description": "Test regel 1",
            "quantity": 1,
            "unitPrice": 500,
            "importSalesDocumentLineAdditionalFields": [
                {
                    "fieldName": "itemCategoryCode",
                    "fieldValue": "FURNITURE"
                }
            ]
        }
    ]
}
NOTE
  • De veldnaam in de API (fieldName) moet exact overeenkomen met de geconfigureerde API veldnaam in de instelling
  • De waarde (fieldValue) wordt automatisch geconverteerd naar het juiste gegevenstype van het doelveld
  • Niet-geconfigureerde of uitgeschakelde velden worden genegeerd
  • Ondersteunde gegevenstypes: Text, Code, Integer, Decimal, Boolean, Date, Time, DateTime, GUID en Option

Bound Actions

Post

de API bevat een bound action genaamd post die de corresponderende import-fatuur/creditnota gaat boeken: POST https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importsalesdocuments({id})/Microsoft.NAV.post

Het antwoord bevat geen inhoud, de code is 204.

Adhv. de velden createdDocType, createdDocSubType, createdDocNo en errorMessage kan nagegaan worden of dit succesvol was of niet. Bij correcte boeking zijn de velden createdDocType, createdDocSubType, createdDocNo ingevuld en het veld "errorMessage* leeg.
Indien een fout is opgetreden tijdes boeken dan zijn de velden createdDocType, createdDocSubType, createdDocNo leeg en is het veld errorMessage ingevuld met de foutmelding.

Register

de API bevat een bound action genaamd register die de corresponderende import-fatuur/creditnota gaat registreren (omzetten in een niet geboekte factuur/creditnota): POST https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importsalesdocuments({id})/Microsoft.NAV.register

Het antwoord bevat geen inhoud, de code is 204.

Adhv. de velden createdDocType, createdDocSubType, createdDocNo en errorMessage kan nagegaan worden of dit succesvol was of niet. Bij correcte registratie zijn de velden createdDocType, createdDocSubType, createdDocNo ingevuld en het veld "errorMessage* leeg.
Indien een fout is opgetreden tijdens registreren dan zijn de velden createdDocType, createdDocSubType, createdDocNo leeg en is het veld errorMessage ingevuld met de foutmelding.

Reopen

de API bevat een bound action genaamd reopen die de corresponderende niet geboekte fatuur/creditnota gaat verwijderen en het import document terug gaat openen.:
POST https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importsalesdocuments({id})/Microsoft.NAV.reopen

Het antwoord bevat geen inhoud, de code is 204.

postpreview

de API bevat een bound action genaamd postpreview die de corresponderende een voorbeeld van boeking zal uitvoeren voor het aangemaakt document.:
POST https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importsalesdocuments({id})/Microsoft.NAV.postpreview

Het antwoord bevat geen inhoud, de code is 204. Adhv. het veld errorMessage kan achteraf nagegaan worden of dit succesvol was of niet.
Bij correct voorbeeld van boeking is het veld errorMessage leeg.
Indien een fout is opgetreden tijdens registreren dan is het veld errorMessage ingevuld met de foutmelding.

CFL Import Sales Document Line API

APIPublisher = 'Dynamate';
APIGroup = 'bocountdynamics';
APIVersion = 'v2.0';
EntityName = 'importSalesDocumentLine';
EntitySetName = 'importSalesDocumentLines';

GET

Method: GET https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importSalesDocumentLines(id)

entity:

{ 
    "@odata.etag": "W/\"JzE5OzQyNDg0MDU5Nzk4NDQ2NjQ1MzQxOzAwOyc=\"",
    "id": "481f0a70-ac2e-ed11-97e8-000d3a254c9a",
    "documentType": "Invoice",
    "documentno": "201907049",
    "type": "G/L Account",
    "no":"600000",
    "vatBusPostingGroup": "BINNENLAND",
    "vatProdPostingGroup": "G3",
    "description": "Test regel 1",
    "description2": "",
    "quantity": 1,
    "unitPrice": 500,
    "lineDiscountAmount": 0,
    "countryofOriginCode": "",
    "deferralCode": "",
    "tariffNo": "",
    "shortcutDimension1Code": "",
    "shortcutDimension2Code": "",
    "shortcutDimension3Code": "",
    "shortcutDimension4Code": "",
    "shortcutDimension5Code": "",
    "shortcutDimension6Code": "",
    "shortcutDimension7Code": "",
    "shortcutDimension8Code": "",
    "allowPaymentDiscount":"true"
}

DELETE

Method: DELETE https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importSalesDocumentLines(481f0a70-ac2e-ed11-97e8-000d3a254c9)

UPDATE

method: PATCH
https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importSalesDocumentLines(481f0a70-ac2e-ed11-97e8-000d3a254c9) Headers:
"If-Match" : W/"JzE5OzQyNDg0MDU5Nzk4NDQ2NjQ1MzQxOzAwOyc="
Body:

{
    "description": "TEST-aanpassing"
}

POST

Method: POST https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importSalesDocumentLines

body;

{ 
    "documentType": "Invoice",
    "no": "201907049",
    "type": "G/L Account",
    "no":"600000",
    "vatBusPostingGroup":"BINNENLAND",
    "vatProdPostingGroup":"G3",
    "description":"Test regel 1",
    "quantity":1,
    "unitPrice":500
}

CFL Import Sales Document Attachment API

APIPublisher = 'Dynamate';
APIGroup = 'bocountdynamics';
APIVersion = 'v2.0';
EntityName = 'importSalesDocumentAttachment';
EntitySetName = 'importSalesDocumentAttachments';

Beschrijving

Deze API wordt gebruikt om bijlagen toe te voegen aan geïmporteerde verkoopdocumenten. De bijlagen worden opgeslagen in de drag&drop folder structuur en zijn toegankelijk via de documentbijlagen.

GET

Method: GET https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importSalesDocumentAttachments(id)

entity:

{ 
    "@odata.etag": "W/\"JzE5OzcwNzE5MDcwMDI2Njc1Njg3OTMxOzAwOyc=\"",
    "id": "ce970cac-f433-ed11-97e8-000d3a44bbc6",
    "documentType": "Invoice",
    "documentNo": "201907049",
    "fileName": "attachment.pdf",
    "fileContent": ""
}

DELETE

Method: DELETE https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importSalesDocumentAttachments(id)

POST

Method: POST https://server address:server API port/server instance name/api/Dynamate/BoCountDynamics/v2.0/companies(companyid)/importSalesDocumentAttachments

body:

{ 
    "documentType": "Invoice",
    "documentNo": "201907049",
    "fileName": "contract.pdf",
    "fileContent": "base64-encoded-file-content-here"
}
NOTE
  • Het veld fileContent moet een base64-gecodeerde string bevatten van het bestand
  • Het veld fileName bevat de naam van het bestand (kan elk bestandstype zijn, niet alleen PDF)
  • De bijlagen worden opgeslagen in de drag&drop folder structuur
  • Deze API kan gebruikt worden in combinatie met de hoofddocument API door meerdere bijlagen toe te voegen via de importSalesDocumentAttachments array

Voorbeeld met meerdere bijlagen in één POST:

{ 
    "service": false,
    "documentType": "Invoice",
    "no": "201907049",
    "customerNo": "1417",
    "postingDate": "2019-06-14",
    "documentDate": "2019-06-14",
    "importSalesDocumentLines": [
        {
            "description":"Test regel 1",
            "quantity":1,
            "unitPrice":500
        }
    ],
    "importSalesDocumentAttachments": [
        {
            "fileName": "contract.pdf",
            "fileContent": "base64-encoded-pdf-content"
        },
        {
            "fileName": "specifications.xlsx",
            "fileContent": "base64-encoded-excel-content"
        }
    ]
}