API Response richtig mappen
Hi zusammen,
ich stehe gerade vor einem Problem und hoffe auf eure Hilfe.
Ich habe eine Tabelle Parts, unter anderem mit den Feldern Artikelnummer und Lagerbestand WooCommerce. In WooCommerce habe ich mir eine Schnittstelle gebaut, damit ich in Ninox die aktuellen Lagerbestände per POST Call abrufen kann.
Auf einzelner Artikeleben funktioniert das per Button bereits hervorragend. Jetzt möchte ich aber, dass beim Start der Datenbank ein Array aus allen Artikelnummern an WooCommerce geschickt wird und sich die Bestände in Ninox dann entsprechend aktualisieren.
Das Array, der Post Call und auch das Result funktionieren schon einwandfrei, allerdings habe ich gerade Schwierigkeiten das Result richtig zu mappen.
Mein Code den ich bei Start der Datenbank ausführen lasse ist bis dato so. Wie kann ich jetzt bestimmen, dass er anhand der Artikelnummer (sku) das Feld Lagerbestand WooCommerce aktualisieren soll? Das Result habe ich mir mal testweise in eine alertbox schreiben lassen.
let vArray := [];
let vArrayObj := [];
let vObj := {};
let vbody := [];
let myParts := (select Parts where Status = 1 or Status = 2);
for i in myParts do
vObj := {
sku: i.Artikelnummer
};
vArrayObj := [vObj];
vArray := array(vArray, vArrayObj)
end;
let vbody := vArray;
let response := do as server
http("POST", "https://www.woocommerceshop.com/wp-json/api/part?endpoint=stock_sku_get", {
accesstoken: "xyz",
'Content-Type': "application/json"
}, vbody)
end;
if response.error then
alert(text(response.error))
else
alert(response.result)
end
Als Result bekomme ich folgende Werte, die an und für sich ja richtig wären:
Würde mich freuen, wenn ihr mir beim mappen helfen könntet.
Vorab vielen Dank.
LG, Andi
21 Antworten
-
Hallo Andi
Du bekommst als Antwort ein Array mit x Objekten zurück.
Wenn du auf das erste Objekt mit dem Wert von 'sku' zugreifen möchtest:
item(response,0).sku
Wenn du den gesamten Response durchlaufen möchtest, benötigst du eine Schleife.
Bsp.
for i in response do
let vsku := item(response,i).sku;
let vstock := item(responses).stock
"Hier kannst du jetzt ein Script schreiben was du mit den Werten machen möchtest"
Bsp.
create TabellenName.sku := vsku
end -
1. Die Funktion muss vor der for-Schleife stehen. Sie muss immer zuerst deklariert werden und kann erst danach irgendwo im nachfolgenden Script aufgerufen werden. Oder sie wird als globale Funktion deklariert.
2. Die Datentypen, die der Funktion übergeben werden, müssen stimmen.
Schau dir mal in der 0001_Ninox-Reference den Beitrag zu 'function' an.
3. Ich gehe davon aus, dass die Artikelnummer nur einmal in der Tabelle vorkommt. Deshalb das first um Mehrfachrecords zu vermeiden. Sollte die Artikelnummer mehrfach in der Tabelle vorkommen, musst du wieder mit eine Schleife arbeiten.function fx_mapping(vsku : text,vstock : number) do
first(select Parts[Artikelnummer = vsku]).('Lagerbestand WooCommerce' := vstock)
end;
for i in response.result do
let vsku := text(item(response.result,i).sku);
let vstock := number(item(response.result,i).stock);
fx_mapping(vsku, vstock)
end -
Wieder fehlerhaft durch copy/paste.
if response.error then alert(text(response.error)) else let cItems := cnt(response.result); for i in range(0,cItems) do let vsku := text(response.item(result,i).sku); let vstock := number(response.item(result,i).stock); first(select Parts[Artikelnummer = vsku]).('Lagerbestand WooCommerce' := vstock) end; end;
Content aside
- vor 2 JahrenZuletzt aktiv
- 21Antworten
- 212Ansichten
-
4
Folge bereits