Dále jsou uvedeny příklady pro rozšířené dotazování - JSON dokument (v těle POST požadavku).
Rozšířené dotazování se od základního liší formou vstupních dat (dotazu) a způsobem jejich předávání. Dotaz je předáván v podobě JSON dokumentu (tzv. dotazový objekt) v těle HTTP POST požadavku.
Jsou dva druhy resourců (zdrojů), na kterých je možné rozšířené dotazování použít:
- První variantou je zaslání HTTP požadavku na subresource kolekce BO /{connection}/{kolekce BO}/query, pak není nutné uvádět vlastnost class (je známa díky nadřízené kolekci BO).
- Druhou variantou je zaslání HTTP požadavku na obecný resource pro rozšířené dotazování /{connection}/query, pak je nutné uvádět vlastnost class (kvůli obecné povaze zdroje není známa).
U příkladů je předpokládáno odesílání na obecný resource pro rozšířené dotazování, vlastnost objektu dotazu class je tedy vždy specifikována.
Parametr /query provádí dotaz na základě práv uživatele v závislosti na třídě (class), nad kterou dotaz běží.
- Třída s BO kontrolerem - Práva se vyhodnocují podle kontroleru spojeného s touto třídou (např. issuedinvoices).
- Třída bez BO kontroleru - Práva se ověřují na základě zpřístupnění položek pro API. Pokud nelze nastavit oprávnění ke spuštění dotazu, dotaz nebude proveden.
Uživatelé mají právo spouštět dotazy (opRun) na vybrané položky. Přístup k dalším položkám se nastavuje v agendě Zpřístupnění položek pro API.
 Dotazový objekt
Dotazový objekt
                                                        Jedná se o objekt, který obsahuje dotaz (platí i pro vnořené dotazy).
| Dotazový objekt | ||
|---|---|---|
| Vlastnost | JSON typ | Význam | 
|  |  | Identifikátor kolekce, nad kterou je dotaz vykonáván | 
|  |  | Vlastní dotaz, více viz klauzule select | 
|  |  | Omezení kolekce, více viz klauzule where | 
|  |  | Agregace kolekce, více viz klauzule groupby | 
|  |  | Řazení kolekce, více viz klauzule orderby | 
 Výrazový objekt
Výrazový objekt
                                                        Jedná se o objekt, který je možné použít v klauzuli select rozšířené varianty dotazování.
| Výrazový objekt | ||||||||
|---|---|---|---|---|---|---|---|---|
| Vlastnost | JSON typ | Význam | ||||||
|  |  | Název fieldu ve výsledném objektu. | ||||||
|  |  | 
 | ||||||
 Volba vybíraných dat (klauzule select, expand)
Volba vybíraných dat (klauzule select, expand)
                                                        Klauzule select se v rozšířené variantě dotazování používá i namísto klauzule expand (expand v rozšířené variantě není).
 Příklad 1
Příklad 1
                                                                Výběr kolekce faktur, každý objekt faktury bude obsahovat ID, částku (Amount) a DisplayName, které je složené pomocí polí načtených z provázaných objektů. Jedná se o rychlejší variantu než je uvedena v prvním příkladu, ve kterém je použita nepersistentní položka (DisplayName); jak již bylo zmíněno výše, nepersistentní položky znamenají degradaci výkonu.
Klauzule select je v rozšířené variantě dotazování reprezentována JSON polem obsahujícím jednotlivé požadované fieldy. Fieldy samotné jsou reprezentovány buď řetězcem obsahujícím výraz nebo výrazovým objektem.
POST http://localhost:81/data/queryTělo požadavku:
{
  "class": "issuedinvoices",
  "select": [
	"ID",
	"Amount",
	{ "name": "DocNumber", "value": "DocQueue_ID.Code || '-' || OrdNumber || '/' || Period_ID.Code" }
  ]
} Příklad 2
Příklad 2
                                                                Výběr z agendy Adresář firem, pro výběr fieldu FirmOffices je využit výrazový objekt, pro výběr bankovních účtů (field BankAccounts, na BO firmy jsou bank. účty vedeny jako řádky Rows) je navíc použit specifikační objekt.
POST http://localhost:81/data/queryTělo požadavku:
{
  "class": "firms",
  "select": [
	"ID",
	"Code",
	"Name",
	{ "name": "FirmOffices",
	  "value": ["Name"]
	},
	{ "name": "BankAccounts",
	  "value": {
	  "field": "Rows",
	  "query": {
		"select": ["ID", "Name", "BankAccount"]
	  }
	}
  }
 ]
}
 Příklad 3
Příklad 3
                                                                Výběr kolekce ceníků, ke každému ceníku je ve výsledku dotazu zahrnut seznam firem, které jej mají nastavený. Jedná se o ukázku použití výrazového objektu v rámci selectu, možnosti využitelné pouze v rozšířené variantě dotazování. Všimněte si v klauzuli where vnořeného výrazového objektu použití :ID - reference na field nadřazeného BO v poddotazu. Pomocí takovéto syntaxe (:{název fieldu BO z nadřízeného dotazu}) lze do omezení (where) poddotazu dosazovat kontextuálně hodnoty z nadřazeného dotazu (pouze z nadřazeného dotazu). Tato možnost je důležitá ve chvíli, kdy je potřeba filtrovat za předem neznámé hodnoty. (Více viz Klauzule where s kontextuálními parametry.)
				
POST http://localhost:81/data/queryTělo požadavku:
{
  "class": "pricelists",
  "select": [
	"ID", 
	"Code", 
	"Name",
	{
	  "name": "Firms",
	  "value":
	  {
		"class": "firms",
		"select": ["ID", "Code", "Name"],
		"where": "PriceList_ID = :ID"
	 }
     }
  ]
} Volba vybíraných dat (klauzule selectSCHEMA)
Volba vybíraných dat (klauzule selectSCHEMA)
                                                        Klauzule selectschema se používá místo klauzule select. Oba současně použít nelze. Jednotlivé hodnoty parametru selectschema představují předdefinované sady polí, které se vypíšou do výstupu. Možné hodnoty parametru selectschema jsou:
 Příklad 1
Příklad 1
                                                                Výběr kolekce objednávek přijatých s použitím hodnoty ID, kdy vráceným objektem bude ID záznamu.
POST http://localhost:81/data/queryTělo požadavku:
{
  "class": "receivedorders",
  "selectschema": "id"
} Příklad 2
Příklad 2
                                                                Výběr z agendy objednávek přijatých za použití zpracování požadavků v mezipaměti (serverstate) a hodnoty expanded.
POST http://localhost:81/data/serverstateTělo požadavku:
{
    "cacheid": "",
    "type": "load",
    "data": {
        "class": "receivedorders",
        "object_id": "26W0000101",
        "query": {
            "selectschema": "expanded"
        }
    }
}
 Omezení vybíraných dat (klauzule where)
Omezení vybíraných dat (klauzule where)
                                                        Klauzule where má v rozšířené variantě dotazování podobnou sémantiku jako where v základní formě dotazování. Výraz pro určení platnosti se zapisuje do řetězcové hodnoty vlastnosti where dotazového objektu.
 Klauzule where s kontextuálními parametry
Klauzule where s kontextuálními parametry
                                                                    Klauzule where může obsahovat kontextuální parametry, které umožňují dosazovat hodnoty z nadřazeného dotazu. Kontextuální parametry jsou identifikovány pomocí speciální "dvojtečkové" syntaxe:
:{název fieldu BO z nadřízeného dotazu}
                                                                        Lze také využívat kontextuální parametry v tečkové notaci. Dále je možné vytvářet uživatelsky pojmenované kontextuální parametry, které mohou zjednodušit tvorbu a čitelnost složitějších dotazů.
 Příklad
Příklad
                                                                            POST http://localhost:81/data/queryTělo požadavku:
{
    "class": "StoreSubcards",
    "select": [
      "Storecard_ID.code",
      { "name": "superid", "value": "Storecard_ID.ID" },
      {
        "name": "cards",
        "value": {
          "class": "StoreCards",
          "select": [
            { "name": "code", "value": "code" }
          ],
          "where": "code=:Storecard_ID.code and id=:superid"
        }
      }
    ],
    "orderby": "Storecard_ID.Code"
} Řazení dat (klauzule orderby)
Řazení dat (klauzule orderby)
                                                        Klauzule orderby slouží k řazení výstupu stejným způsobem jako v SQL. Řazení se specifikuje ve vlastnosti orderbydotazového objektu. Hodnotou této vlastnosti je JSON pole, které může obsahovat řetězce obsahující výrazy pro řazení, a nebo objekty řazení (objekt řazení je nutné použít v situaci, kdy chceme řadit sestupně - výchozí řazení je vzestupné).
| Objekt řazení | ||
|---|---|---|
| Vlastnost | JSON typ | Výraz | 
|  |  | Výraz pro řazení | 
|  |  | Indikace, zda je řazení sestupné (true = sestupné; false = vzestupné) | 
 Příklad
Příklad
                                                                Výběr kolekce faktur vydaných, každý objekt faktury obsahuje částku (Amount) a objekt firmy, na kterou je faktura vystavena (Firm_ID). Faktury jsou řazeny dle kódu firmy, na kterou jsou vystaveny vzestupně, a následně podle částky sestupně.
POST http://localhost:81/data/queryTělo požadavku:
{
  "class": "issuedinvoices",
  "select": [
	"Amount", 
	{
	  "name": "Firm_ID",
	  "value":
	  {
		"select": ["ID", "Code", "Name"]
	  }
   }
],
	"orderby": [
	  "Firm_ID.Code",
	  { "value": "Amount", "desc": true }
]
} Agregace dat (klauzule groupby)
Agregace dat (klauzule groupby)
                                                        Klauzule groupby má v rozšířené variantě dotazování stejnou sémantiku jako groupby v základní formě dotazování. Výraz pro agregaci se zapisuje do řetězcové hodnoty vlastnosti groupby dotazového objektu.
 Příklad
Příklad
                                                                Získání trojice firem s největší celkovou fakturovanou částkou (Amount). Firmy jsou seřazeny podle této celkové částky sestupně (ukázka použití kombinace klauzulí orderby, groupby a take).
POST http://localhost:81/data/issuedinvoices/queryTělo požadavku:
{
	"select": [
		{ "name": "Amount", "value": "Sum(Amount)" },
		{
			"name": "Firm_ID",
			"value":
				{
					"select": ["ID", "Code", "Name"]
				}
		}
	],
	"orderby": [
		{ "value": "Sum(Amount)", "desc": true }
	],
	"groupby": [
		"Firm_ID"
	],
	"take": 3
} PŘÍKLAD  - příklad použití funkce Floor, která vrátí data seskupená za dny
PŘÍKLAD  - příklad použití funkce Floor, která vrátí data seskupená za dny
                                                                Ukázka použití funkce Floor, dotažení hodnoty amount na dokladu faktury vydané pro rok 2025 seskupený podle dní:
GET http://localhost:80/demo/issuedinvoices?select=floor(createdat$date), sum(amount), avg(amount), min(amount), max(amount)&where=CreatedAt$DATE+ge+'2025-01-01' and CreatedAt$DATE+le+'2025-12-31'&groupby=floor(createdat$date)"Odpověď:
[
{
	"floor(createdat$date)": "2025-03-24T23:00:00.000Z",
	"sum(amount)": 154002.02,
	"avg(amount)": 77001.01,
	"min(amount)": 22014.01,
	"max(amount)": 131988.01
	},
	{
	"floor(createdat$date)": "2025-03-30T22:00:00.000Z",
	"sum(amount)": 32234.92,
	"avg(amount)": 16117.46,
	"min(amount)": 0,
	"max(amount)": 32234.92
	}
]