Zástupné znaky pro cesty k atributům v dotazech ORDA

Automaticky přeloženo z Deepl

Funkce ORDA se ve verzi 4D v17 R5 stále rozšiřují! V předchozím příspěvku na blogu jsme vám ukázali, jak vytvářet obecné dotazy s pojmenovanými zástupci hodnot. Tento příspěvek se zaměří na to, jak používat zástupné znaky pro cesty k atributům (názvy polí v tabulkách).

HDI: Příklad zástupných znaků pro cesty k atributům v dotazech ORDA

K dispozici jsou dva typy zástupných znaků:

Indexované zástupné znaky

Podívejme se na příklad použití indexovaných zástupných symbolů pro cesty k atributům. Chceme vyhledat klienty, jejichž jména začínají na „Bravo“ a v poli pro komentář mají uvedeno „Nový klient“:

C_OBJECT($clients)
$clients :=ds.Clients.query(":1 = 'Bravo@' a :2 = 'Nový klient'"; "name"; "comment")

Zástupné znaky se do řetězce dotazu vloží jako :paramIndex( např. :1, :2, … s přírůstkem 1). Jejich odpovídající hodnoty jsou dány posloupností parametru (parametrů) value.

pojmenované zástupné znaky

Můžete také použít pojmenované zástupné znaky. Používají stejný koncept jako pojmenované zástupné symboly pro hodnoty. Parametry jsou vloženy jako :paramName a jejich hodnoty jsou uvedeny v řetězci dotazu:

C_OBJECT($clients;$settings)
$settings :=New object
$settings .attributes:=New object("pathOfName"; "name"; "pathOfComment"; "comment")
$clients :=ds.Clients.query(":pathOfName = 'Bravo@' a :pathOfComment = 'New client'";$settings)

Proč používat zástupné znaky?

Podívejme se na licencesInfo pole objektu. Uvádí počet licencí ve stylu licenceName:number.

{"licencesInfo":
{"4DDevPro":10, //This client has 10 4DDevPro licences
"4DServerV17_2":18,
"4DWebappserverV17_2":23}
}

Chcete-li zjistit počet licencí „4DDevPro“, můžete napsat tento dotaz:

C_OBJECT($clients)
$clients :=ds.Clients.query("licencesInfo.4DDevPro >=0")

Nyní se však podívejte na toto licencesInfo pole objektu. Vidíte, že použití zástupných znaků pro cesty k atributům může být užitečné zejména při dotazování objektu, jehož názvy vlastností nejsou v souladu s tečkovanou notací:

{"licencesInfo":
{"4D Dev. Pro":10, //This client has 10 4D Dev. Pro licences
"4D Server V17.2":18,
"4D Web app/server V17.2":23}
}

V tomto konkrétním případě problém vyřeší zadání parametrů jako kolekce řetězců, protože dotaz je bude interpretovat jako cestu k atributu.

C_OBJECT($clients)
$clients :=ds.Clients.query(":1 >=0";New collection("licensesInfo"; "4D Dev. Pro"))

To není jediná výhoda použití zástupných znaků. Je zde také zvýšený aspekt bezpečnosti, protože použití zástupných symbolů zabraňuje vložení škodlivého kódu. Také již není třeba se obávat problémů s formátováním nebo znaky. Seznam by mohl pokračovat …

Výše uvedené příklady se týkají dotazování na dataClass, ale pokud se podíváte do dokumentace, zjistíte, že je to použitelné i na kolekce. Objevíte také další příklady, které ukazují, proč je použití zástupných symbolů dobrá volba!

Avatar
• Product Owner • Marie-Sophie Landrieu-Yvert se připojila k programovému týmu 4D jako Product Owner v roce 2017. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich převod do funkčních specifikací. Její úlohou je také zajistit, aby implementovaná funkce odpovídala potřebám zákazníka. Marie-Sophie vystudovala inženýrskou školu ESIGELEC a svou kariéru zahájila jako inženýrka v IBM v roce 1995. Podílela se na různých projektech (projekty údržby nebo výstavby) a pracovala jako vývojářka Cobol. Poté pracovala jako UML designer a Java developer. V poslední době byly jejími hlavními rolí analyzovat a psát funkčních požadavky a koordinovat obchodní a vývojové týmy.