Rest-API mit mehreren verschachtelten Complex Types

11. März 2020 14:45

Hallo liebe Mitglieder,

ich bin auf ein Problem gestoßen von dem ich nicht weiß, ob dieses (noch) nicht möglich ist oder ich etwas falsch mache.

Vorab: Ich habe bereits vorab Suchen auf Google durchgeführt und bin auch auf Vjekos Beispiel gestoßen, in welchem er einen neuen OData EDM Type angelegt und diesen im ODataEDMType-Property der Page angegeben hat. Mein Problem bezieht sich auf die Verschachtelung dieser Typen.

Aber von vorne:
Ich muss eine eingehende Rest-API in BC14 bereit stellen und habe hierfür ein Muster erhalten:
Code:
{
   "customerAccount":"1183017464",
   "externalId":"29999",
   "type":"Customer",
   "state":"New",
   "organization":{
      "type":"Z",
      "tradingName":"muster GmbH",
      "nameType":"XXX",
      "contactMediums":[
         {
            "type":"PostalAddress",
            "postalAddress": "xyz"
         }
      ],
      "preferred":false
   },
...


Das Objekt "organization" ist kein Array, liegt aber eine Ebene tiefer. Soweit ich weiß, ist eine Subpage immer ein Array, also kann ich nur einen manuellen EDM-Type (ORGANIZATION) definieren, richtig?
Das führt mich zum nächsten Problem, unterhalb der "organization" liegt das Array "contactMediums". Eine Subpage kann ich nicht mehr verwenden, da ich nicht mehr auf der Ebene der API-Page bin, also habe ich einen EDMType (CONTACTMEDIUM) definiert und dieses als Property in der ORGANIZATION-Definition als Collection (da Array) angegeben:

Code:
<ComplexType Name="organization">
    <Property Name="type" Type="Edm.String" Nullable="true" MaxLength="10" />
    <Property Name="tradingName" Type="Edm.String" Nullable="true" MaxLength="30" />
    <Property Name="nameType" Type="Edm.String" Nullable="true" MaxLength="30" />
    <Property Name="contactMedium" Type="Collection(CONTACTMEDIUM)" Nullable="true" />
</ComplexType>


So macht es Microsoft selbst in der ITEM-UOM Definition mit dem Unterschied, dass es kein Array (Collection) ist:
Code:
<ComplexType Name="unitOfMeasureType">
    <Property Name="code" Type="Edm.String" Nullable="true" MaxLength="10" />
    <Property Name="displayName" Type="Edm.String" Nullable="true" MaxLength="50" />
    <Property Name="symbol" Type="Edm.String" Nullable="true" MaxLength="10" />
    <Property Name="unitConversion" Type="ITEM-UOM-CONVERSION" Nullable="true" />
</ComplexType>


Leider führt das zu folgendem Fehler (übrigens auch ohne Collection, identisch zu der ITEM-UOM):
Code:
{
    "error": {
        "code": "Unknown",
        "message": "The OData EDM complex type Collection(CONTACTMEDIUM) that is referenced by contactMediums was not found.  CorrelationId:  d00bdeea-1924-48a5-a369-1fc2cef90694."
    }
}


Hatte jemand eine ähnliche Anforderung und wie seid ihr damit umgegangen?
Ich bin dankbar für alle Vorschläge :-)

Vielen Dank!

Re: Rest-API mit mehreren verschachtelten Complex Types

30. Juni 2020 09:08

Hi,

ich habe hier leider keine Antwort, aber genau das gleiche Problem.
Hast du inzwischen evtl. eine Lösung dafür?

Viele Grüße
Johanna

Re: Rest-API mit mehreren verschachtelten Complex Types

2. September 2021 14:38

Moin,
hat jemand von Euch hierfür eine Lösung gefunden?
Stehe vor der gleichen Problematik, irgendwie eine eine vierte Ebene abzubilden.
Wollte hier ebenfalls eine ein Complex Type definieren, welche ebenfalls ein Array beinhaltet.
3 Ebenen könnte ich so abbilden:

1. Ebene = Page -> 2. Ebene SubPage ->3. Ebene Field ODataEDMType = Collection(Level3Array) -- > 4. Ebene ?????

Für die 4. Ebene müsste ich eigentlich die OData EDM Definition von Level3Array um eine weitere Collection erweitern.

<ComplexType Name="Level3Array">
<Property Name="type" Type="Edm.String" Nullable="true" MaxLength="10" />
<Property Name="Level4Array" Type="Collection(LEVEL4ARRAY)" Nullable="true" />
</ComplexType>

Funktioniert aber leider nicht.
Über Rückmeldung würde ich mich freuen.

vielen Dank