Alle Bestelldaten aus einer Bestellung via API (RestSharp)

Hallo,

ich probiere gerade mit der API herum und möchte eine bestimmte Bestellung mit allen Details erhalten.

Ich nutze VB.NET und RestSharp.

Die Hauptdaten der Bestellung habe ich bereits erhalten:

        Dim client As New RestClient(URL)
        Dim request As New RestRequest("/order/" & ID, Method.Get)
        Dim response As New RestResponse

        request.AddUrlSegment("id", "order_id")
        request.AddHeader("Authorization", "Bearer " & Token.bearerToken)

        response = client.Execute(request)

        Dim order As String = response.Content

Leider sind in den Daten keine weiteren Detaildaten zur Bestellung drin (Adresse, Lieferadresse, Positionen, Zahlungsart).

Kann man das auch in „einem Rutsch“ mit erhalten?
Oder muss man diese Daten mit separaten API-Aufrufen abfragen? Wenn ja, wo findet man dann die entsprechenden IDs (zum Beispiel für die Adresse?)

Hallo,

das kann mit den Associations gelöst werden.

Beispiel: Request_Body

{
„ids“: „f0c70188f4b042d986d8c9d53121005f“,
„page“: 1,
„limit“: 25,
„associations“: {
„lineItems“: {
„associations“: {
„product“: {}
}
},
„currency“: {},
„language“: {},
„orderCustomer“: {
„associations“: {
„customer“: {}
}
},
„salesChannel“: {
„associations“: {}
},
„addresses“: {
„associations“: {
„country“: {},
„countryState“: {},
„salutation“: {}
}
},
„deliveries“: {
„associations“: {
„shippingMethod“: {},
„shippingOrderAddress“: {}
}
},
„transactions“: {
„associations“: {
„paymentMethod“: {}
}
},
„documents“: {
„associations“: {
„documentType“: {}
}
},
„tags“: {}
}
}

Grüße

Hättest du vielleicht ein Beispiel, wie man das in restsharp abbildet?

Hallo,

die Associations können mit ExpandoObject aus System.Dynamic gebildet und dann serialisiert werden.

    public async Task<Order> Get_Order(string id, string languageid = "")
    {
        if (string.IsNullOrEmpty(languageid)) languageid = ShopLanguageId;

        // Associations Struktur anlegen
        dynamic associations = new ExpandoObject();

        associations.lineItems = new ExpandoObject();
        associations.lineItems.associations = new ExpandoObject();
        associations.lineItems.associations.product = new ExpandoObject();
        if (IVersion.CompareTo(new Version("6.4.10.0")) > 0) associations.lineItems.associations.children = new ExpandoObject();

        associations.currency = new ExpandoObject();
        associations.language = new ExpandoObject();

        associations.orderCustomer = new ExpandoObject();
        associations.orderCustomer.associations = new ExpandoObject();
        associations.orderCustomer.associations.customer = new ExpandoObject();

        associations.salesChannel = new ExpandoObject();
        associations.salesChannel.associations = new ExpandoObject();

        associations.addresses = new ExpandoObject();
        associations.addresses.associations = new ExpandoObject();
        associations.addresses.associations.country = new ExpandoObject();
        associations.addresses.associations.countryState = new ExpandoObject();
        associations.addresses.associations.salutation = new ExpandoObject();

        associations.deliveries = new ExpandoObject();
        associations.deliveries.associations = new ExpandoObject();
        associations.deliveries.associations.shippingMethod = new ExpandoObject();
        associations.deliveries.associations.shippingOrderAddress = new ExpandoObject();

        associations.transactions = new ExpandoObject();
        associations.transactions.associations = new ExpandoObject();
        associations.transactions.associations.paymentMethod = new ExpandoObject();

        associations.documents = new ExpandoObject();
        associations.documents.associations = new ExpandoObject();
        associations.documents.associations.documentType = new ExpandoObject();

        associations.tags = new ExpandoObject();

        Search JParam = new Search { Ids = new List<string> { id }, Page = 1, Limit = 25, Associations = associations };

        string @apisource = $@"/api{apiversionstr}/search/order";

        RestRequest request = new RestRequest(apisource) { Method = Method.Post }
          .AddHeader("sw-language-id", languageid)
          .AddStringBody(JsonConvert.SerializeObject(JParam, Formatting.Indented, NoEmpties), DataFormat.Json);

        RestResponse response = await CallRest(Base_url, request);

CallRest führt letzendlich RestClient.ExecutePostAsync(request) aus.