NAV 2018 API - Complex Types

waitwait Member Posts: 53
I really like the new NAV 2018 API feature. The only thing I'm missing is better documentation and too much time has gone into reverse engineer how standard Nav is using this feature and finding out the little thing. The purpose by this post is to hopefully save some other poor programmers a little time. If you see something I'm doing wrong then please correct me.

I'm not going to write how to use basic API or even create your own basic API. I used the following two articles and if you are new to the Nav API I would recommend them to get started

how to create custom apis for business central even from macos

how to obtain data from nav standard apis

To see how standard NAV uses this take a look at codeunit 5468 "Graph Mgt - Complex Type".

First thing we need to do is to create the entity data model for our complex type.

1. Step is to create subscriber for the function ApiSetup in the codeunit Graph Mgt - General Tools (function HandleApiSetup)
2. Step is to create the specification for our complex type (function GetBeerEDM)
3. Step is to create function to Insert or Update the OData Type (function InsertOrUpdateBeer)

g5ilvaq6udr2.png


When this is ready we need to go into /Departments/Administration/IT Administration/Services and sync the API, this we do by pressing the Intergrate APIs button.

ebijkagycqdr.png


Now when we get the Metadata for our API we will see our complex type there

x9wlb9z5zmtk.png

To use our complex type we simply create JSON object that matches the entity we created earlier. For that we will use the codeunit 5459 "JSON Management"

dcy1ohhfpcdc.png

We will then create page of the type API. We will get the JSON object we created in last step and in the ODateEDMType we put the name of the Entity Data Model we created

ldygwq3jldzf.png


Now when we call beers we get our complex type

sc6p8xh3zixn.png


We can also have array of complex types, then we construct our JSON string as an array and use Collection in the ODateEDMType

4rmz7mboqa2s.png

0u8davtsgzgf.png

and get array of our complex type

szymkqovaqse.png

Best Answers

  • waitwait Member Posts: 53
    Answer ✓
    gmorken wrote: »
    Nice! Can you do this in AL?

    Yes it should be pretty much the same process.

Answers

  • gmorkengmorken Member Posts: 38
    Nice! Can you do this in AL?
  • waitwait Member Posts: 53
    Answer ✓
    gmorken wrote: »
    Nice! Can you do this in AL?

    Yes it should be pretty much the same process.
  • Milek212mmMilek212mm Member Posts: 14
    Thanks for the post,it's great! :) Maybe you can help me,i created OData EDM Type like this,but after APIs integrate i can't see complexType i added in metadata and this can be the reason why i cant generate complexType in JSON.
    Any idea how to update metadata? Thanks in advance!
  • waitwait Member Posts: 53
    > @Milek212mm said:
    > Thanks for the post,it's great! :) Maybe you can help me,i created OData EDM Type like this,but after APIs integrate i can't see complexType i added in metadata and this can be the reason why i cant generate complexType in JSON.
    > Any idea how to update metadata? Thanks in advance!

    Hi Milek212mm, If you followed all the steps you should see the metadata for the complex type so its difficult to say why its not working for you.
Sign In or Register to comment.