[Gelöst] Schnittstellen in Business Central

6. Januar 2025 11:52

Moin zusammen,

ich wollte wissen, wie der aktuelle Stand der Schnittstellen in Business Central ist. So wie ich es lese, gibt es "SOAP web Services" (veraltet), "OData web Services" und "(REST) API web Services".

In der folgenden Quelle steht auch, dass sowohl "(REST) API web Services" als auch "OData web Services" auf OData Version 4 basieren:

https://learn.microsoft.com/en-us/dynam ... b-services

Es gibt bei SOAP und OData Request-Limits.

https://learn.microsoft.com/en-us/dynam ... taServices

Ein Limit, das "Max concurrent requests" von "5" (see the current per-user Limit), gilt dieses auch für "(REST) API web Services"? Oder verstehe ich da was falsch?
Zuletzt geändert von Klaus90 am 6. März 2025 16:38, insgesamt 1-mal geändert.

Re: Schnittstellen in Business Central

6. Januar 2025 12:13

Hallo,

ich denke da verstehst du nichts falsch.

Die Schnittstellen in SaaS ist nicht unbedingt dafür gedacht das System mit vielen und langen OData- Anfragen zu belästigen.

Gruß Fiddi

Re: Schnittstellen in Business Central

6. Januar 2025 14:12

wie ist es bei on premise?

Dieser Limit beschränkt sich auf zeitgleich offene Anfragen, also Anfragen die eine Request haben aber noch keine Response?

Re: Schnittstellen in Business Central

7. Januar 2025 09:24

Klaus90 hat geschrieben: […]gilt dieses auch für "(REST) API web Services"

REST über HTTP ist das Grundlagenprotokoll, darin wird dann z.B. mittels OData abgefragt, siehe auch Definition hier.
Hier ein Codebeispiel für einen HTTP-Request (hier GET) an einem anderen bekannten ERP-System :wink: , mit OData V2 und Response als JSON.
Code:
GET https://dev.hec.mysystem.com/sap/opu/odata/sap/API_BUSINESS_PARTNER/A_BusinessPartner
?sap-client=200
&$format=json
&$expand=to_BusinessPartnerAddress/to_AddressUsage,to_BusinessPartnerAddress/to_EmailAddress,to_BusinessPartnerAddress/to_PhoneNumber,to_BusinessPartnerAddress/to_FaxNumber,to_BusinessPartnerAddress/to_MobilePhoneNumber,to_BusinessPartnerAddress/to_URLAddress
&$select=BusinessPartner,BusinessPartnerCategory,Customer,Supplier,BusinessPartnerName,BusinessPartnerFullName,FirstName,MiddleName,LastName,Language,LastChangeDate
Authorization: Basic Myadmin:MyPassword

Ausführen kann man solche Requests z.B. über:
REST Client
Postman
SOAP ist veraltet und sollte nicht mehr in neuen Projekten verwendet werden.

Re: Schnittstellen in Business Central

15. Januar 2025 15:44

Was ist unter "OData web services" bezüglich auf Codeunits "Yes (through OData unbound actions)" gemeint? Was kann ich mir da vorstellen?

Re: Schnittstellen in Business Central

16. Januar 2025 13:41

Unbound actions sind nicht an Entitäten gekoppelt (also z.B. Feldwerte einer Tabelle) Creating and interacting with an OData V4 unbound action
Entität (Informatik)

Zu den Grundlagen im Umgang mit OData in BC ist hier ein Artikel: Exposing Dynamics 365 Business Central data to the outside world: my two cents

AJ Kauffmann: Codeunit API’s in Business Central

Re: Schnittstellen in Business Central

14. Februar 2025 17:43

Ah ok verstehe. Ich habe dazu mal eine andere Frage:

Habe eine Tabelle und eine Page mit 2 Felder erstellt No. und Picture. No. ist Code 20 und Picture ist von Type MediaSet. Habe die Page im Webdienst zur Verfügung gestellt. Wenn ich im Postman einen Post unter dieser url ausführe:
http://xxxxxxx.de:7068/TEST/ODataV4/Com ... xxxxxGmbH')/NewLine
mit dem Body:
Code:
   {
      "No": "1234",
   }


dann erstellt er den Datensatz. Ich möchte aber gerne mehrere Bilddateien in Picture reinschreiben lassen.

Normalerweise verwende ich dafür multipart/form-data. Egal was ich unter form-data eintrage es kommt diese Response zurück.

Code:
{
    "error": {
        "code": "",
        "message": "The request entity's media type 'multipart/form-data' is not supported for this resource."
    }
}


Kann ODataV4 "form-data" allgemein nicht? Wie bekomme ich per ODataV4 mehrere Bilder rein?

Re: Schnittstellen in Business Central

28. Februar 2025 17:14

Normalerweise verwende ich eine Page für odata v4. Jetzt habe ich ein Blob als Datentype. Wie könnte der Post dazu aussehen? Also ich kann Base64 verwenden, aber ich glaube, dass es da bessere Alternativ mit ODATAv4 gibt.

Re: Schnittstellen in Business Central

3. März 2025 17:49

http://<server-url>/TEST/ODataV4/Company('Company%20GmbH')/SalesReturnOrderSalesReturnLines(Document_No='VREKL0000018',Line_No=10000)/Picture_2/

liefert das hier aus:

Code:
{
    "@odata.context": "http://<server-url>/TEST/ODataV4/$metadata#Company('Company%20GmbH')/SalesReturnOrderSalesReturnLines(Document_No='VREKL0000018',Line_No=10000)/Picture_2/$entity",
    "ID": "xxxxx",
    "Description": "2025-02-17 15_55_13-Greenshot",
    "Content@odata.mediaEditLink": "http://<server-url>/TEST/ODataV4/Company('Company%20GmbH')/SalesReturnOrderSalesReturnLines(Document_No='VREKL0000018',Line_No=10000)/Picture_2",
    "Content@odata.mediaReadLink": "http://<server-url>/TEST/ODataV4/Company('Company%20GmbH')/SalesReturnOrderSalesReturnLines(Document_No='VREKL0000018',Line_No=10000)/Picture_2/Content",
    "Mime_Type": "image/png",
    "Height": 246,
    "Width": 219,
    "Company_Name": "Company GmbH",
    "Expiration_Date": "0001-01-01T00:00:00Z",
    "Prohibit_Cache": false,
    "File_Name": "",
    "Security_Token": "",
    "Creating_User": ""
}


jetzt möchte ich ein Patch ausführen:

http://<server-url>/TEST/ODataV4/Company('Company%20GmbH')/SalesReturnOrderSalesReturnLines(Document_No='VREKL0000018',Line_No=10000)/Picture_2

im Header:

--header 'If-Match: *' \
--header 'Content-Type: application/octet-stream' \

im Body
--data-binary '@postman-cloud:///1eff8396-0556-4c10-862d-5ad43???0f5d'

Antwort:
Dieser Stream unterstützt keine Suchvorgänge.
Ereignisanzeige im Nav Server:

Server instance: TEST
Tenant ID:
Type: System.NotSupportedException
Message: Dieser Stream unterstützt keine Suchvorgänge.
StackTrace:
bei System.Net.HttpRequestStream.get_Length()
bei Microsoft.Dynamics.Nav.Service.OData.V4.PageDataProvider.<>c__DisplayClass11_1.<ModifyMediaItem>b__1()
bei Microsoft.Dynamics.Nav.Service.OData.Extensions.NavFormExtensions.ExecuteWithinTransaction(NavForm form, Action action)
bei Microsoft.Dynamics.Nav.Service.OData.V4.PageDataProvider.<>c__DisplayClass11_0.<ModifyMediaItem>b__0(NavForm form)
bei Microsoft.Dynamics.Nav.Runtime.ApplicationObjectRootScope.AddApplicationObjectRootScope(NavApplicationObjectBase applicationObject, Action action)
bei Microsoft.Dynamics.Nav.Service.OData.Extensions.NavSessionExtensions.Execute(NavSession session, Int32 id, Action`1 operation)
bei Microsoft.Dynamics.Nav.Service.OData.NavService.<>c__DisplayClass14_0.<Execute>b__0(NavSession session)
...

Wo ist der Fehler?

Re: Schnittstellen in Business Central

6. März 2025 16:37

Ich habe einfach einen Datentype text genommen und Base64 per call reingepackt. Funktioniert alles. Irgendwie ist diese Methode nicht offiziell.