0

JSON an Ninox-API übergeben

Hallo zusammen,

habe folgendes Problem:

Per API soll ein JSON-Array an Ninox übergeben werden, darin sind Anweisung zum aktualisieren von Datensätzen.

curl
-H 'Content-Type: application/json'
-d '{"query": "TicketUpdate(formatJSON(
        [
            {"id":"B123","firstname":"Max7","name":"Muster"},
            {"id":"B124","firstname":"Max8","name":"Muster"}
         ]
   ))"}'

Die Rückmeldung lautet

"message": "Internal Server Error"

 

Wie kann ich den Funktionsaufruf und das Array korrekt übergeben?

Grundsätzlich funktioniert der API-Aufruf, ein Query zu einer Funktion die kein Array als Daten empfängt, funktioniert.

So sieht die Globale Funktion aus:

function TicketUpdate(vArray : text) do
    let xArray := parseJSON(vArray);
    item(xArray, 0).id;
    for i in range(0, cnt(xArray)) do
        let vUpdate := first(select Tickets where Nr = item(xArray, i).id);
        vUpdate.(Vorname := item(xArray, i).firstname);
        vUpdate.(Name := item(xArray, i).name)
    end;
    for i in range(0, cnt(xArray)) do
        let vUpdate := first(select Tickets where Nr = item(xArray, i).id);
        {
            ID: vUpdate.Nr,
            Vorname: vUpdate.Vorname,
            Name: vUpdate.Name
        }
    end;

 

Danke schonmal :-)

3 Antworten

null
    • Fox Concepts
    • Christoph.2
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Daniel,

    das Problem liegt hierbei bei den " Zeichen innerhalb des übergebenen Textes, da diese ja in Ninox das Text-Format deklarieren.

    Ich habe leider selber keine saubere Lösung dafür, aber löse es im Moment so, dass ich mit einer replace-Funktion im Übergabeparameter " durch \" ersetze.  Aufpassen, wenn bei dein Inputdaten bereits \" enthalten ist, dann muss das noch etwas erweitert werden.

    Wäre selber dankbar, wenn hier noch wer eine bessere Variante hat.

    Noch ein kleiner Tip: Du kannst die Input-Variable in Ninox mit 'any' deklarieren (vArray : any), dann kannst du direkt ein JSON übergeben und sparst dir 'formatJSON' / 'parseJSON'

      • Produktmanager
      • dpat
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Christoph danke. Aber da habe ich auch schon diverse Dinge versucht, und das geht nicht. Zum Beispiel:

      curl
      --data-raw '{
          "query": "Funktion(\"Nachricht\")"
      }'
      
    • Produktmanager
    • dpat
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Nach vielen Stunden sind wir jetzt einen Schritt weiter. Die Übergabe funktioniert, wenn das JSON als url-encoded String übergeben wird.

    Dabei tritt aber nun das Problem auf, dass Leerzeichen durch + ersetzt werden. D.h. eine Adresse kommt bspw. statt "Musterstraße 25" als "Musterstraße+25" an.

Content aside

  • vor 1 JahrZuletzt aktiv
  • 3Antworten
  • 130Ansichten
  • 3 Folge bereits