0

JSON Array aus Untertabelle erstellen

Servus zusammen, 

 

ich habe eine Tabelle 'Order' mit einer Untertabelle 'Warenausgang'. Die Untertabelle ist wiederum verknüpft mit meiner Tabelle Produkte. 

 

Ich möchte per Button ein JSON Array erzeugen, welches mir Artikelnummern und Mengen zurückgibt. Es soll diese Form haben:

["Position":[{"Partnumber":"bp-j-blahpendant-gold-os","Quantity":1}, {"Partnumber":"bp-j-blahpendant-silver-os","Quantity":1}, und so weiter...]]

 

Mit meiner Funktion bekomme ich aber ein falsches Array zurück: 

 

[{"Position":[{"Partnumber":["bp-c-feliciashirt-black-sm","bp-c-feliciashirt-black-ml","bp-c-feliciashirt-khaki-sm","bp-c-feliciashirt-khaki-ml","bp-c-feliciaflares-black-sm","bp-c-feliciaflares-black-ml","bp-c-feliciaflares-khaki-sm","bp-c-feliciaflares-khaki-ml","bp-c-filippaflares-black-s","bp-c-filippaflares-black-m","bp-c-filippaflares-black-l","bp-c-taylortop-black-sm","bp-c-taylortop-black-ml"],"Quantity":[4,3,4,3,3,3,3,3,3,3,2,6,6]}]}]

 

Meine Funktion sieht bis dato so aus:

let myResult := [{
Position: [{
Partnumber: Warenausgang.Produkte.Artikelnummer,
Quantity: Warenausgang.Menge
}]
}];
Text := text(myResult)

 

Wie bekomme ich denn hier die korrekte Formatierung hin? 

 

Vorab vielen Dank. 

VG, Andi

11 Antworten

null
    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ich würde es so probieren:
    let vArray := [];
    let vArrayObj := [];
    let vObj := {};
    for i in Warenausgang do
    vObj := {
    Partnumber: i.Warenausgang.Produkte.Artikelnummer,
    Quantity: i.Warenausgang.Menge
    };
    vArrayObj := [vObj];
    vArray := array(vArray, vArrayObj)
    end;
    "// HTTP-Call definieren //";
    let vBody := [{
    Position: vArray
    }];
    Text := text(vBody)

    • Andi_Neumaier
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Uwe, 

    Danke für deine Antwort. 

    Klappt leider noch nicht so ganz. Ich habe mal den HTTP Call raus gelassen. Will mich zuerst mal auf das Array konzentrieren. 

     

    let vArray := [];
    let vArrayObj := [];
    let vObj := {};
    for i in Warenausgang do
    vObj := {
    Partnumber: Warenausgang.Produkte.Artikelnummer,
    Quantity: Warenausgang.Menge
    }
    end;
    vArrayObj := [vObj];
    vArray := array(vArray, vArrayObj);
    alert(text(vArray))

     

    Liefert leider so kein Ergibnis zurück. Alertbox also leer. Wichtig vielleicht noch. In dem Array sollen natürlich immer nur die Artikelnummern und Quantities der mit diesem Datensatz verknüpften Datensätze im Warenausgang sein. 

     

    VG, Andi

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Andi
    Streiche mal die Zeile "//HTTP-CALL definieren//"
    Habe vergessen die Kommentierzeile zu löschen.
    Du solltest trotzdem 
    let vBody := [{
    Position: vArray
    }];
    Text := text(vBody)
    drin lassen und es nochmal probieren.
    Bei mir bekomme ich dann folgendes raus:
    [{"Position":[{"Partnumber":"Toyota","Quantity":1},{"Partnumber":"Mercedes","Quantity":3},{"Partnumber":"VW","Quantity":4}]}]

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Sorry, Korrektur:
    let vArray := [];
    let vArrayObj := [];
    let vObj := {};
    for i in Warengruppe do
    vObj := {
    Partnumber: i.Produkte.Artikelnummer,
    Quantity: i.Menge
    };
    vArrayObj := [vObj];
    vArray := array(vArray, vArrayObj)
    end;
    let vBody := [{
    Position: vArray
    }];
    Body := text(vBody)

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Body ist Name des Textfeldes in das das Ergebnis geschrieben wird

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    ...nur mal einen Einwurf. Soweit ich weiß, geht das deklarieren eines leeren Arrays so nicht. Keine Fehlmeldung, aber man kann es nicht benutzen, ergo auch nicht füllen. Workaround ist erst zur Typdeklaration eine Dummyfüllung, dann leeren. 

    let vArray := ["a"];

    vArray := []

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Doch das funktioniert. Keine Fehlermeldung und ich erhalte ein Ergebnis wie oben beschrieben.
    Hier der Link zur Testdatenbank: https://www.dropbox.com/s/zctvfw62bcqh6cz/test.ninox?dl=0

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Nutze dieses Konstrukt um Tabellen oder verschachtelte Tabellen an Carbone als Druckeditor/Dateikonvertierer zu übertragen.
    Siehe Ninox DB 343 im deutschen WebinarTeam

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    @UweG. Sehr merkwürdig. Ich wollte auch nicht Dein Konstrukt anzweifeln, habe jetzt es ausprobiert, aber bei mir klappt das mit den Arrays sonst nicht. Muß ich wohl noch ein wenig nachdenken;-). Danke für die Rückmeldung.

    let a := [];

    let b := [1, 2, 3];

    array(a, b)

    —> kein Ergebnis

     
    let a := [4];

    a := [];

    let b := [1, 2, 3];

    array(a, b)

    —> Ergebnis 1,2,3

    • Andi_Neumaier
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Bi mir klappt es auch. Keine Fehlermeldungen und das Ergbenis genauso wie es sein soll. 

    @UweG. vielen Dank. 

     

    VG, Andi

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo MZ
    In deinen Beispielen hast du Recht, was die Anzeige des Arrayinhaltes betrifft und ich habe das gleiche Ergebnis wie du.
    Aber das Array im ersten Beispiel ist nicht leer.
    Wenn du es in cnt(array(a,b)) änderst, siehst du das das Array 3 elemente enthält.
    Mit item(array(a,b),0) bekommt man auch 1 als erstes Element des Array's.
    Weshalb man mit concat() keine Anzeige aller Element erhält kann ich nicht sagen.
    Was aber funktioniert ist: formatJSON(array(a,b))
    Wieder ein Mysterium von Ninox. ;-)

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 11Antworten
  • 570Ansichten
  • 1 Folge bereits