OData WebService - POST JSON Body mit Root [NAV 2017]

25. Juni 2020 08:53

Hallo Community,

ich habe aktuell eine Herausforderung in NAV 2017 - Genutzt wird ein NAV 2017 und eine externe Applikation, die Daten synchron über eine RESTful Schnittstelle übermitteln soll.
Ich habe also eine einfache Table und dazugehörige Page erstellt und diese als Web Service veröffentlicht. Die Page benötige ich, da ich in NAV 2017 nur Pages mittels ODATA veröffentlichen kann.

Wenn ich über Postman einen versuche starte, ein POST abzusetzen funktioniert auch alles wenn der JSON Body folgend aussieht und nur 1 Datensatz inbegriffen ist:
Code:
{
  "Feld1":"Wertxyz",
  "Feld2":"Wert...",
  "Feld3":"Wert..."
}


Die externe Applikation, die auf den NAV Web Service zugreift, strukturiert den JSON Body allerdings noch mit einem Root Element um auch mehrere Datensätze in einem POST übertragen zu können, was dann wie folgt aussieht:
Code:
{
"Root":
  [
    {
      "Feld1":"Datensatz 1",
      "Feld2":"Wert...",
      "Feld3":"Wert..."
    }
    {
      "Feld1":"Datensatz 2",
      "Feld2":"Wert...",
      "Feld3":"Wert..."   
    }
  ]
}


Hierbei stoße ich auf Probleme. Ich weiß nicht wie ich dieses Root Element verarbeiten kann. Leider habe ich keine Möglichkeit über die Page Funktionen zu veröffentlichen, wie in späteren NAV Versionen. Weiterhin fällt mir keine Möglichkeit ein, wie ich den JSON Body vorher in eine Variable schreiben kann, um ihn dann selbstständig weiter zu verarbeiten.
Ich bin für jede Hilfe oder Idee dankbar.

Beste Grüße,
Udo

Re: OData WebService - POST JSON Body mit Root [NAV 2017]

25. Juni 2020 09:04

Hallo,

eine erste Idee wäre die Implementierung einer Codeunit, die per .Net einen Odata- Webservice- Listener bereitstellt (wenn das möglich ist!!??). Diese Codeunit lässt du dann in einem NAS laufen.
Je nachdem, ob das Tool Multi-Session- fähig sein muss, musst du dann noch ein bisschen mit STARTSESSION herumspielen.

Gruß Fiddi

Re: OData WebService - POST JSON Body mit Root [NAV 2017]

25. Juni 2020 09:20

Hallo fiddi,

sofern ich dich richtig verstanden habe, brauche ich dafür aber dann eine CodeUnit die ich als Web Service veröffentlichen kann, damit die externe Applikation darauf zugreifen kann. Über .Net könnte ich zwar den JSON Body ohne Probleme verarbeiten aber die Bereitstellung des URI für den Service nur über eine .NET Implementierung in einer Codeunit - Wüsste ich leider nicht, wie das gehen soll.
In NAV 2017 kann ich allerdings nur Page Objekttypen als ODATA veröffentlichen. (Ab NAV 2018 wäre das alles einfacher)

Danke und Grüße.

Re: OData WebService - POST JSON Body mit Root [NAV 2017]

25. Juni 2020 09:34

Hallo,

das ist dann OData "handmade". Du würdest versuchen, das was man in Visual Studio programmieren würde, in NAV mit .Net- Variablen zu programmieren.

Das hat mit NAV selbst dann nicht mehr viel zu tun.

Gruß Fiddi

Re: OData WebService - POST JSON Body mit Root [NAV 2017]

25. Juni 2020 09:42

Hallo fiddi,

okay, dann hab ich das richtig verstanden. Danke schon mal für den Input. Wäre jetzt quasi mein Notfallplan, da mein Erfahrungsschatz dabei sehr begrenzt ist.
Vielleicht hat noch jemand einen Hinweis, wie ich das eventuell mit NAV Board Mitteln lösen könnte.

Grüße,
Udo.

Re: OData WebService - POST JSON Body mit Root [NAV 2017]

25. Juni 2020 14:51

Kann man in 2017 bereits parts in einer OData-Page verwenden? Wäre dann eine leere Haupt-Seite mit einem part/SubPage "Root".