Ninox REST API: Oder (or) in Filter
Wie kann ich im Filter mehrere Felder mit „oder„ (or) verknüpfen?
?filters={"fields":{"DirectPhone":"123", "MobilePhone":"123"}}
Hintergrund: Ich bekomme eine Telefonnummer und möchte den entsprechenden Kontakt auslesen. Ich weiß bei der Nummer allerdings nicht ob es sich um die Direktwahl oder die Mobile Nummer etc. handelt.
5 Antworten
-
Gibt es einen Grund das du es über den Filter ausführen willst oder könntest du auch eine andere Möglichkeit nutzen?
Beispielsweise den "query" API Endpoint:let url := "https://api.ninox.com/v1/teams/"+ teamId() + "/databases/" + databaseId() + "/query";
let header := {
"Authorization" :"Bearer [API KEY]",
"Content-Type": "application/json"
};
let body := {
"query": "select Kontakte where DirectPhone = 123 or MobilePhone = 123"
};
http("POST", url, header, body)
https://docs.ninox.com/en/api/public-cloud-apis#execute-a-read-only-query-with-post
-
Perfekt, das funktioniert – vielen Dank. Leider bekomme ich nur die ID des Datensatzes zurück. Wie kann ich alle Resultate als komplettes JSON bekommen?
-
Da hatte ich auch schon Probleme, ich wüsste auch keine andere Möglichkeit, als nochmals eine Abfrage aller so erhaltenen IDs zu machen:
let url := "https://api.ninox.com/v1/teams/"+ teamId() + "/databases/" + databaseId() + "/query";
let header := {
"Authorization" :"Bearer [API KEY]",
"Content-Type": "application/json"
};
let body := {
"query": "(select Kontakte where DirectPhone like 123 or MobilePhone like 123)"
};
let results := http("POST", url, header, body).result;
let json := [{}];
for i in results do
let ninoxID := substr(text(i), 2);let res := http("GET", "https://api.ninox.com/v1/teams/"+ teamId() + "/databases/" + databaseId() + "/tables/" + tableId("Kontakte") + "/records/" + ninoxID, header, null).result;
if cnt(json.id) = 0 then
json := [res]
else
json := array(json, [res])
end;
end;
json
Wenn sonst jemand noch andere Optionen sieht wäre das auch super. Aber sollte mal funktionieren so, wenn nicht eine zu grosse Anzahl von Resultaten vorliegen. Sonst gibt es Probleme mit der Ninox API, dass zu viele Requests in zu kurzer Zeit gesendet werden.
Und auch noch Achtung: in meinem Beispiel ist jetzt kein Error Handling implementiert, also wenn der Request fehlschlägt oder kein Resultat vorhanden ist müsstest du diese Situationen noch speziell handhaben
-
Danke für die Antwort. Das ist leider extrem ineffizient und unpraktisch. Man würde schon erwarten dass man die Daten mindestens komplett als JSON bekommen könnte…
-
Support hat mir geholfen, Problem gelöst:
When you use the query endpoint you will have to build your own object.
You can follow this example:
"query": "for i in select Contact do {\"ID\":i._id ,\"Firstname\": i.Firstname, \"Companylink\": i.Companylink} end"
The quotations are escaped through the \. With the variable i we can access the data from the for loop.
The output will then be an array with Objects of your making.
Content aside
- vor 3 JahrenZuletzt aktiv
- 5Antworten
- 563Ansichten