ZeusQL
ENDPOINT
-
GET - api/zeusql/docs
Pagina web di documentazione dove vengono visualizzati i database a cui ci si può collegare e le varie entità interrogabili tramite la chiamata post.
-
POST - api/{db_name}/zeusql/
Esecuzione di una query tramite il protocollo Terya
Parametri
- db_name -> nome del database nel quale si vuole eseguire la lettura dei dati
Codici di risposta
- Buon Fine -> 200
- Autenticazione fallita -> 401
- Permesso negato -> 403
- Richiesta mal formattata -> 400
- Entità non trovata -> 404
- Anomalia interna -> 500
Controlli
- Il body della richiesta viene verificato in base al protocollo sottostante
- I nomi di campi e entità su cui vengono fatte operazioni devono essere presenti nel rispettivo json di entità
- Le varie operazioni nei filters devono essere idonee per il tipo di campo
- Non ci possono essere includes successive al livello in cui vengono aggiunte le metrics
- La paginazione può essere applicata ad un Singolo livello della query
- Se non si va ad aggiungere un contesto alla chiamata di una entità temporale verrà utilizzata la data odierna
- Se non si specifica la lingua di traduzione nel contesto i campi descrittivi verranno visualizzati con la lingua con cui sono stati salvati originariamente
PROTOCOLLO
Input
-
Struttura generale
{ "resource": string, "context"?: { "asOf"?: string, // ISO date "locale"?: string, // es. "it-IT", "en-US" "LOVDisplayType"?: "KeyOnly"|"DescriptionOnly"|"AllFields" // Metodo di visualizzazione LOV }, "select": { "fields"?: string[], // colonne da restituire "includes"?: IncludeRequest[] // sotto‐query relazionali }, "filter"?: FilterComponent, // filtri applicati all’entità principale "sort"?: SortClause[], // ordinamenti applicati all’entità principale "pagination"?: PaginationClause, // paginazione principale "metrics"?: MetricClause[] // aggregazioni principali } -
Include Request
- Configurazione di una “join” tra le relazioni disponibili dall’entità “padre”
- Essendo
IncludeRequestricorsiva non vi è un limite alla profondità delle “join” che si possono fare
{ "resource": string, // nome della relazione "alias": string, // eventuale alias in caso di include multipli sulla stessa relazione "joinType"?: "LEFT"|"INNER"|"RIGHT"|"OUTER", // tipo di join (default "inner") "fields"?: string[], // quali colonne includere "filter"?: FilterComponent, // filtri per la relazione "sort"?: SortClause[], // ordinamenti per la relazione "pagination"?: PaginationClause // paginazione della sottoquery "metrics"?: MetricClause[], // aggregazioni per la relazione "includes"?: IncludeRequest[] // nidificazione di sotto‐relazioni } -
Filter Component:
Filter Component è la classe astratta che ingloba sia FileterClause che FilterCondition
-
Filter Clause
- Filter Clause serve a raggruppare diversi Filter Component e concatenarli con un operatore logico
{ "logic": "AND" | "OR", "conditions": FilterComponent[] }
-
Filter Condition
- Filter Condition è la condizione basilare applicabile su una colonna
- l’operatore utilizzabile in “op” dipende dal tipo di dato della colonna selezionata in “path”
Operatori disponibili:{ "path": string, // nome del campo da filtrare "op": string, // operatori: EQ, NE, GT, … "value": string // valore per cui filtrare (nel caso di IN/NI i valori sono separati da "$$") }EQ, // equals IL, // like case insensitive LK, // like SW, // start with EW, // end with ET, // empty EN, // not empty IN, // included NI, // not included NE, // not equal GT, // greater than GE, // greater or equal LT, // lower than LE // lower or equal
-
-
Sort Clause
- Sort Clause applica un ordinamento al livello in cui viene inserito
{ "path": string, // Nome del campo che si vuol ordinare "dir"?: "ASC"|"DESC" // Default "ASC" }
-
Pagination Clause
- Pagination Clause aggiunge la paginazione al livello in cui viene impostato
- Pagination Clause può essere utilizzato una sola volta per query
- Se non viene specificato un ordinamento tramite il “Sort Clause” ne verrà applicato uno per primary key
- Con l’utilizzo di questa clausola la risposta dalla API conterrà i campi Meta e Links
{ "page": number, // 1-based "size": number // numero di elementi per pagina }
-
Metric Clause
- Metric clause applica un group by per ogni colonna citata nelle varie parti della richiesta.
- In caso di join verranno aggiunte anche le chiavi di giunzione al group by.
- Con l’utilizzo di metrics il campo “_primaryKey” non verrà restituito.
- Se viene utilizzato il comando metrics non potranno esserci include “figlie” di quel livello di query
{ "field": string, // nome del campo su cui applicare la funzione "fn": string, // Comando da applicare (SUM, COUNT, AVG, MIN, MAX, …) "alias": string // alias del comando }
Output
-
Struttura Output
{ "Data":<T>, "Errors": Error[], "Meta"?: Meta "Links"?: Link }-
<T>
- Oggetto che dipende dalla richiesta fatta.
- Vengono esposti solo i campi selezionati nella prima sezione “fields”
-
Error
- Espone le eccezioni che il processo ha generato
{ "Level": "string", // tipologia di eccezione "Title": "string", // nome dell'eccezione "Detail": "string(nullable)", // dettaglio dell'eccezione "Source": "string(nullable)", // provenienza dell'eccezione } -
Meta
- Oggetti con i dettagli della paginazione
- Campo opzionale, presente solo in caso di paginazione
{ "TotalRows": "int", // righe totali "Rows": "int", // righe visualizzate "PageSelf": "int", // nr pagina attuale "PagePrev": "int(nullable)", // nr pagina precedente (null se siamo nella prima pagina) "PageNext": "int(nullable)", // nr pagina successiva (null se siamo nell'ultima pagina) "PageLast": "int" // nr utlima pagina } -
Links
- Link per ricevere i dati delle altre pagine della paginazione
- NB: I link sono endpoint POST
- Campo opzionale, presente solo in caso di paginazione
- Utilizzando i link forniti non servirà il body nella richiesta
{ "Self": "string", // link della pagina attuale "First": "string", // link della prima pagina "Prev": "string", // link della pagina precedente "Next": "string", // link della pagina successiva "Last": "string", // link dell'ultima pagina }
-
Esempi Richieste
-
Query con traduzioni
In questa chiamata vengono richiesti due campi descrittivi che sono traducibili. Specificando la lingua nel campo “context” i risultati saranno tradotti.
-
Input
{ "resource": "Detections", "context":{ "locale":"en-US" }, "select": { "fields": [ "Description", "DetectionTypes.Description" ], "includes": [ { "resource": "DetectionTypes", "fields":["Description"] } ] }, "filter": { "path": "Id", "op": "EQ", "value": "11111111-1111-1111-1111-111111111111" } } -
Output
{ "data": [ { "_primaryKey": "11111111-1111-1111-1111-111111111111", "Description": "Detection Demo", "DetectionTypes": { "_primaryKey": "tcf4", "Description": "Demo detection type" } } ], "metaData": null, "links": null }
-
-
Query con List Of Values (LOV)
In questa chiamata vengono richiesti tutti i campi delle LOV. Quindi come output verrà fornito un oggetto con: il nome della LOV, l’indice del valore, la descrizione tradotta della LOV.
In base al display type si può decidere che valore visualizzare. Il valore del nome della LOV è fisso e viene visualizzato in tutte e 3 le opzioni.-
Input
{ "resource": "Detections", "context":{ "LOVDisplayType": "AllFields" }, "select": { "fields": [ "Description", "ShopId", "Type.Description", "Type.QuantityRequestMode" ], "includes": [ { "resource": "DetectionTypes", "alias": "Type", "fields": [ "Description", "QuantityRequestMode" ] } ] }, "filter": { "path": "Id", "op": "EQ", "value": "11111111-1111-1111-1111-111111111111" } } -
Output
{ "data": [ { "_primaryKey": "11111111-1111-1111-1111-111111111111", "Description": "Detection Demo", "ShopId": 1, "Type": { "_primaryKey": "tcf4", "Description": "Demo detection type", "QuantityRequestMode": { "LOV": "quantityRequestMode", "Index": 2, "Description": "Free Default Base Unit" } } } ], "metaData": null, "links": null }
-
-
Somma delle Giacenze in base all’articolo e al magazzino
In questa questa query si parte dalla risorsa “Products”, si includono le giacenze che vengono raggruppate per ProductId e WarehouseId e vengono sommati i campi Stock, Ordered e Reserved.
I valori sommati vengono poi filtrati nei filter della risorsa principale e quindi è come se venisse fatto un “having” su quei dati.
Infine i dati sono ordinati (sort) per Codice articolo (Code) e paginati-
Input
{ "resource": "Products", "select": { "fields": [ "Id", "Code", "Stocks.WarehouseId", "Stocks.Stock", "Stocks.Ordered", "Stocks.Reserved" ], "includes": [ { "resource": "Stocks", "fields": [ "WarehouseId", "ProductId" ], "filter": { "path": "WarehouseId", "op": "IN", "value": "1$$2" }, "metrics": [ { "field": "Stock", "fn": "SUM", "alias": "Stock" }, { "field": "Ordered", "fn": "SUM", "alias": "Ordered" }, { "field": "Committed", "fn": "SUM", "alias": "Reserved" } ] } ] }, "filter": { "logic": "OR", "conditions": [ { "path": "Stocks.Stock", "op": "GT", "value": "0" }, { "path": "Stocks.Ordered", "op": "GT", "value": "0" }, { "path": "Stocks.Reserved", "op": "GT", "value": "0" } ] }, "sort": [ { "path": "Code" } ], "pagination": { "page": 2, "size": 5 } } -
Output
{ "data": [ { "_primaryKey": "000100001646", "Id": "000100001646", "Code": "04010605", "Stocks": [ { "WarehouseId": 1, "Stock": 7119.5, "Ordered": 0, "Reserved": 0 }, { "WarehouseId": 2, "Stock": 8505.6, "Ordered": 0, "Reserved": 0 } ] }, { "_primaryKey": "000100001655", "Id": "000100001655", "Code": "04010622", "Stocks": [ { "WarehouseId": 1, "Stock": 20.7, "Ordered": 0, "Reserved": 0 } ] }, { "_primaryKey": "000100001658", "Id": "000100001658", "Code": "04010627", "Stocks": [ { "WarehouseId": 1, "Stock": 19.6, "Ordered": 0, "Reserved": 0 } ] }, { "_primaryKey": "000100001661", "Id": "000100001661", "Code": "04010643", "Stocks": [ { "WarehouseId": 1, "Stock": 134.9, "Ordered": 0, "Reserved": 0 } ] }, { "_primaryKey": "000100001693", "Id": "000100001693", "Code": "04020661", "Stocks": [ { "WarehouseId": 1, "Stock": 914.2, "Ordered": 0, "Reserved": 0 } ] } ], "errors": [], "meta": { "totalRows": 325, "rows": 5, "pageSelf": 2, "pagePrev": 1, "pageNext": 3, "pageLast": 65 }, "links": { "self": "https://localhost:7070/api/zeusql?query=H4sIAAAAAAAACtVWO0_DMBD-K1XVEaFSiaUbYkAdKFIBMZAOkXNtLUxc2U4HUP87Tf1Iz7GTpghFeHF8r9x997CH34lI8sFhJcV4PJkIkLwQBPRpaqh3QlHCQOrTFVaRwIAoo2BZ5XKm7dIyKwosM6amg3dfqBKcZeZ_5nzPM8CUZ8XJh7x-SwVseCHB1zD84xbkPIkMBIS1FiBB7CzTd3PpUMBO05ywIoPm-GrIYBvhJGi3vBSEDSCIgx5g-SiAJvGWHLO0bPWHKRCBEjkbGGxvm6oNBqcewXmW-Bbbmc07qe9SVnhpuhmNJs1olWvfgtgnKEFJcxV1BO1YFIGS6hTwKvcsvD520k8ZTWXUicsQ-x0GeAT0hgJyow8c8LjrD4jmsYuQiI6jEKMmjaQqVAMTC4GqaYyvKfEyuAiErkmE5xlVlOfxhg4mrjbtotdaXNtNOL09vLRqnA41vY3DyaiX4gVRtPff_4jjjP75-0BOCa6-_dqWXNjnGirDyHutFnD1DkMdZA_VY8Dqr2meltUfb6eDjLtGQw0k6Zfj37q4yo_98Ad5s9ZIwwoAAA", "first": "https://localhost:7070/api/zeusql?query=H4sIAAAAAAAACs1VTU8DIRD9K5umR2O2m3jpzXgwPViTqvHg9rBhx5aI0ADbg6b_XStfCwu0TdrEE2HmDfPeMAOj75rXtCjqriyrioNgHUegdlNtveUSIwJC7a76AQIIIGng-izjfMdAWh01Ld6M07hnrXegc9yxFhKuJ8nQh7h-bTisWScgeYYG_i15yCNvgcOBcxYggG8NyoCWFq7smCLStRCTbEvj0PFiq4QDNgdr6iC54jiUvlSD6UOW0bxEAh9cdB-yaeTa13IcE7bxo2bzDHjbkC6o2GQ8roYidhERnyA5RqnqBaK8ikfuKErSBtEg4uUhi28IbkQyiR_jKzuFd6rVz8zcS3Mu7v4EXo58fNI1e29K3Mbatc2ozI6OMhC2wigo3yLgrLaI0RZLzOiRz8twHLNvYmoa75-T0MgslmHZ-hd-Csl0q_4rmpmuvAzPbKcJxu1fbJujJyclxn24BqvzmJ_ABK4wbfYtmGjmX4AVMAnaV-Av67vR5PfLbvQDOB1xHoMIAAA", "prev": "https://localhost:7070/api/zeusql?query=H4sIAAAAAAAACs1VTU8DIRD9K5umR2O2m3jpzXgwPViTqvHg9rBhx5aI0ADbg6b_XStfCwu0TdrEE2HmDfPeMAOj75rXtCjqriyrioNgHUegdlNtveUSIwJC7a76AQIIIGng-izjfMdAWh01Ld6M07hnrXegc9yxFhKuJ8nQh7h-bTisWScgeYYG_i15yCNvgcOBcxYggG8NyoCWFq7smCLStRCTbEvj0PFiq4QDNgdr6iC54jiUvlSD6UOW0bxEAh9cdB-yaeTa13IcE7bxo2bzDHjbkC6o2GQ8roYidhERnyA5RqnqBaK8ikfuKErSBtEg4uUhi28IbkQyiR_jKzuFd6rVz8zcS3Mu7v4EXo58fNI1e29K3Mbatc2ozI6OMhC2wigo3yLgrLaI0RZLzOiRz8twHLNvYmoa75-T0MgslmHZ-hd-Csl0q_4rmpmuvAzPbKcJxu1fbJujJyclxn24BqvzmJ_ABK4wbfYtmGjmX4AVMAnaV-Av67vR5PfLbvQDOB1xHoMIAAA", "next": "https://localhost:7070/api/zeusql?query=H4sIAAAAAAAACs1VTU8DIRD9K5umR2PWNV56Mx5MD9Wkajy4PWxgbIkIDbA9aPrftS4fCwu0TdrEE2HmDfPeMAOj71rUrCjqtiyrSoDkrUDQ7SbaeisUQRRkt7voB0iggJSB67OM850AxTpqUrwZp3FPsXegc9xxDAnXk-LoQ16-NgJWvJWQPEMD_5Y85FFgELDnnDlIEBuDMqCFhXd2whBtMcQk29I4dLzYXcIBm701dZBccRxKX6rB9CGLaF6qQAwuug9ZN2rlazmMCV_7UdOHDHjT0Dao2NV4XA1FbCMiPkEJglLVC0R5FY_cUZSkDWJBxMssi28oaWQyiR_jKzuGd6rVT8zcS3Mq7v4Eno98fNI1e29K3Mbatc2ozI5OZ6B8SVBQvnnAudsizjBRhLMDn5fhOGbfxNQ03j8noZFZLMOy9S_8GJLpVv1XNDNdeR6e2U6TXNi_2DZHT05KjPtwDVbnMT-BCVwS1uxaMNHMvwAr4DpoX0m-rO9Gk98t29EPpRJzh4MIAAA", "last": "https://localhost:7070/api/zeusql?query=H4sIAAAAAAAACs1VTU8DIRD9K5umR2PWTeqhN-PB9KAmVePB7WEDY0tEaIDtQdP_rpWPXVigbdImnggzb5j3hhkYfdeiZkVRt2VZVQIkbwUCvZsa641QBFGQenfRD5BAASkLN2dZ5zsBik3UtHizTuueYe_AznHLMSRcT4qjD3n52ghY8VZC8gwD_FvykEeBQcCec-YgQWwsyoIWDq7thCHaYohJdqXp0PFi64QDNntr2kFyxelQ5lItpg9ZRPNSBWJw0X3IulErX8thTPjaj5o9ZMCbhrZBxa7G42ooYhsR8QlKEJSqXiDKq3jkjqIkXRALIl7us_iGkkYmk_gxvrJjeKda_cTMvTSn4u5P4PnIxyfdsPempNs4u7FZldnR0QbKlwQF5ZsHnPUWcYaJIpwd-LwMxzH7Jqam8e45CY3MYhmWrX_hx5BMt-q_opnpyvPwzHaa5ML9xa45enJSYroP12JNHvsT2MAlYc2uBRPN_AtwAq4nQf9K8uWcE8N-t2xHP-utYzeECAAA" } }
-
-
Lettura di testa righe rilevazioni con dettaglio del tipo rilevazione e articolo
In questa questa query si parte dalla risorsa “Detections”, si include il dettaglio del Tipo rilevazione, include le righe della rilevazione nelle quali viene incluso l’articolo di riferimento. In questo esempio si può notare come viene gestita l’estrazione dati. I campi esposti sono solo i campi presenti nel primo campo fields. I campi presenti negli altri fields ma non nel principale verranno utilizzati nella query (raggruppamenti, filtri, ordinamenti) ma non visualizzati nell’oggetto finale
-
Input
{ "resource": "Detections", "select": { "fields": [ "Description", "ShopId", "Type.Description", "Type.Merge", "Type.RequirePrice", "Type.QuantityRequestMode", "Rows.DetectedCode", "Rows.ReadDate", "Rows.UoM", "Rows.DetectedQuantity", "Product.Code", "Product.CodeBarLabel", "Product.DescriptionShort" ], "includes": [ { "resource": "DetectionTypes", "alias": "Type", "fields": [ "Description", "Merge", "RequirePrice", "QuantityRequestMode" ] }, { "resource": "DetectionRows", "alias": "Rows", "fields": [ "DetectedCode", "ReadDate", "UoM", "DetectedQuantity" ], "includes": [ { "resource": "Products", "alias": "Product", "joinType": "LEFT", "fields": [ "Code", "CodeBarLabel", "DescriptionShort" ] } ] } ] }, "pagination": { "page": 1, "size": 1 } } -
Output
{ "data": [ { "_primaryKey": "C9013BB0-5B96-4DD9-A769-006521D0B022", "Description": "Rilevazione di test", "ShopId": 1, "Type": { "_primaryKey": "6v78", "Description": "Non accorpabile con prezzo richiesto", "Merge": 0, "RequirePrice": 1, "QuantityRequestMode": 2 }, "Rows": [ { "_primaryKey": "0D7FC331-3AA1-43C9-A4B5-10F0559AD9A1", "DetectedCode": "HAMB", "ReadDate": "2025-06-30T13:55:23", "UoM": "PZ", "DetectedQuantity": 3.0, "Product": { "_primaryKey": "000100005403", "Code": "3175", "CodeBarLabel": "", "DescriptionShort": "" } }, { "_primaryKey": "20CDEEA3-0D4F-4AFB-B05F-5F928BA09A4E", "DetectedCode": "3175", "ReadDate": "2025-06-30T13:49:44", "UoM": "kg", "DetectedQuantity": 10.0, "Product": { "_primaryKey": "000100005403", "Code": "3175", "CodeBarLabel": "", "DescriptionShort": "" } }, { "_primaryKey": "76850BD8-51BE-4AE4-B4C3-63CB7C7C067B", "DetectedCode": "6966", "ReadDate": "2025-06-30T13:48:06", "UoM": "PZ", "DetectedQuantity": 2.0, "Product": { "_primaryKey": "000100005403", "Code": "3175", "CodeBarLabel": "", "DescriptionShort": "" } }, { "_primaryKey": "27D03FF6-9F20-4A62-8372-731BD7254369", "DetectedCode": "3175", "ReadDate": "2025-06-30T13:49:27", "UoM": "kg", "DetectedQuantity": 2.0, "Product": { "_primaryKey": "000100005403", "Code": "3175", "CodeBarLabel": "", "DescriptionShort": "" } }, { "_primaryKey": "A7ED2EED-C92A-402C-B717-BC0EC4136970", "DetectedCode": "manx", "ReadDate": "2025-06-30T13:58:30", "UoM": "PZ", "DetectedQuantity": 3.0, "Product": { "_primaryKey": "000100005403", "Code": "3175", "CodeBarLabel": "", "DescriptionShort": "" } } ] } ], "errors": [], "meta": { "totalRows": 14, "rows": 1, "pageSelf": 1, "pagePrev": null, "pageNext": 2, "pageLast": 14 }, "links": { "self": "https://localhost:7070/api/zeusql?query=H4sIAAAAAAAACpVUXU-DMBT9K2TPhMw98qZOE5MtUZxPYw-1vc4aQrEtMdPw3-WjBQotMF6AnnPPhXNPu_qLeZx65RXn6_Vmw0GwnGNo3kK1ugUJWFKWiubdN4sEJCWsS1rFjvBBISGqNvSOWlRgTrNKVqkq9usny56I7lTfDpcMAmdBje6Bn8GyHsF3Tjk8c4pt8EuOUknlpaKBkHtGNKu5RexHBM3_A7nvUK8HR4DIFkkb9Mb2llWtp5ublFsuKU4gGHfrI3eI79A7JHZGz6vSTq6Gc_LHs6EpTnICejrHPqO6jHH2C2eiUrk7jMtQAiUUtbHohjJTdV2aLLlwR8KZhlPZfPA5hb_AqoVmValw_vWEW4vqHH45I21N8yjI9gybCbsuaZM2TtppZH_KkFlDlcZiiS9G66SbKruHx8NiCWM8ajrjqbi3vGOruxoXNmDENlgt2kW-aZKhM01Rt-dCy9lfcrQ7N5bjR9DfFm7bVA_F6h-2mzq_nAYAAA", "first": "https://localhost:7070/api/zeusql?query=H4sIAAAAAAAACqWVUU_CMBDHv8rCM1mQR97UaWLCEkV8Eh7qdmBNs862i0HDd3dj7dqy9YbxaWvvd9fxv_-Vyc9GbIoo2lSz2XwuQPJKZNCuFno3AQWZoryQ7XrqpkhgddAk6GomuKPAcp21iF5N0IQTkJmgZVPaq2yJ53dePuSB4PpQQjxe44SlIPaAASv4rKiAR0EzlHuqSKGoOjQ8SJXyPISv-JeMW-0gvx3hVkDyhCiUeeHpJUeZLwyw10LRjEGMfJGL3BCxJG_ARlCnDXXPhDaEobddXrtPi4xVOQw5o3OQpUdc2bTFd6abTBgl3Tm2j0E-aNnLbGupYcc5PcMMZ7Gg31x4axfH6X-0bIz0FylR_iIpkfFwtQpMh0WGhqN_jj8bnoQDPwCxaU_eMYn1oAyphSqs89C0D05PU-BnLu_u12ga2h-LBXvjI8GL4rwT2EXRdcPfOIbM3l0w7Ysxf1u0JHtaEDumvb-nGug0uzq7oiT9tjFdvXkcJ7_4Bj0sMwcAAA", "prev": "", "next": "https://localhost:7070/api/zeusql?query=H4sIAAAAAAAACqWVTU-DQBCG_wrpuSG1x95UNDEpiWI9SQ8rjHUNYXFZYqrhvwtlPy07YDy17Dwzu7zzzrL4TnlaBkHarFbrNYeaNTyD4WkjVyMQkAnKynp4XtopNRRdUCXIair4SqHIZdYmeFZBFY6gzjit-tJOZUM8vrHqLvcEd8cKwukaJywGfgAMSOCjoRzuOc1Q7qEhpaDi2PNQi5jlPjxhn3U4aAf59QSXAMkjIlDmicVztlIn9LCXXNCsgBA5kY1cEb4lL1BMoFYbup5xaQhF73XesE7LrGhyGHOGdpChJ1zZt8V1pp1MCkr0PqaPXt5r2Xm2NdS446yeYYYzmNdvNrw3D-3yP1r2RvqLlCg_S0pkPGytPNNhkLHhON_HnQ1HwpEXQGx6Ju-UxHJQxtRCFZZ5aNo7o6cpcDO3N7c7NA3tj8G8vXER70XxuxPYRaG74S60PrPrC2b4o8w_FK3IgZbEjOnZ56kDtGbmxPK7Rr907EJW73_axQ-LjQYUMwcAAA", "last": "https://localhost:7070/api/zeusql?query=H4sIAAAAAAAACqWVUU-DMBDHvwrZ80Lm4tPeVDQxGYnifHJ7qHDOGkKxLTHT8N0do6XtoAfGJ2jvd1f2v_91s58t3xZBsK0Wi-WSg2AVT6FdrdRuBBJSSVkh2vXcThGQH4M6QVXTwTcKeaayVsGLDupwBCLltGxKO5UN8fTOyvvME9wcSgjHa5ywGPgeMCCBz4pyeOA0RbnHihSSykPDg5Axy3x4wr5E2GoH2c0IlwDJIiJR5pnFU47SX-hhr7ikaQ4h8kU2ck34mrxCPoJabTj2jCtDaHrX5bX7tEjzKoMhZ3QOMvSIK5u2uM60k0lOSXeO6aOX91p2mm0NNew4q2eY4Qzm9ZsN78yinv9Hy8ZIf5ES5SdJiYyHrZVnOgwyNBz9c9zZcCQc-AGITXvyjkmsBmVILVRhlYemfTB6mgI3c317t0HT0P4YzNsbF_FeFOedwC6KrhvuRu0ze3fBtC_a_G3RkuxpQcyY9v6ejkCn2cXl2R0l6LcJqvLNo579AnaL1pA0BwAA" } }
-
-
Lettura entità con filtri complessi
In questa questa query si vanno ad applicare dei filtri complessi su di una entità con diversi operatori logici
-
Input
{ "resource": "Detections", "select": { "fields": [ "DetectionTypeId", "ShopId", "WarehouseId", "Description", "StartDate", "EndDate", "Etag", "Notes" ] }, "filter": { "logic": "AND", "conditions": [ { "path": "DetectionStatus", "op": "EQ", "value": "1" }, { "path": "ShopId", "op": "EQ", "value": "1" }, { "path": "WarehouseId", "op": "EQ", "value": "7" }, { "logic": "OR", "conditions": [ { "path": "DetectionTypeId", "op": "EQ", "value": "tcf4" }, { "path": "WarehouseId", "op": "EQ", "value": "7" } ] } ] } }
-
Output
{ "data": [ { "_primaryKey": "11111111-1111-1111-1111-111111111112", "DetectionTypeId": "tcf4", "ShopId": 1, "WarehouseId": 7, "Description": "OAH! PEFFOZZA", "StartDate": "2025-03-10T00:00:00", "EndDate": "2025-06-23T17:37:19", "Etag": "607F7C3A-9032-43A5-9E5D-202F7C46513F", "Notes": "" } ], "errors": [], "meta": null, "links": null }
-