Přidávání hodnot do obecných dotazů ORDA

Automaticky přeloženo z Deepl

Určitě jste si již všimli, že dotazy ORDA jsou nejen lehké a čitelné, ale také umožňují snadnou navigaci v celém datovém modelu pomocí objektově orientovaných konceptů! V tomto příspěvku na blogu jsme si ukázali, jak psát výkonné a snadno udržovatelné dotazy. Jednou z doporučených metod bylo oddělené poskytování dotazu a hodnot pomocí zástupných znaků. 4D v17 R5 posouvá zástupné symboly o krok dál tím, že umožňuje psát obecné dotazy ORDA: pozdravte pojmenované zástupné symboly pro hodnoty!

HDI: Příklad pojmenovaných zástupných symbolů pro hodnoty v dotazech ORDA

Tyto nové zástupné znaky jsou poskytovány jako parametry objektů v nastavení dotazu. Vzhledem k tomu, že objekt je mapou klíč/hodnota, je velmi snadné je v dotazech používat.

Příklad vydá za tisíc slov

Zde je dotaz pro získání klienta jménem Charlie s Loyal client jako komentářem. Říká vám to něco? Pokud ne, měli byste se podívat na tento příspěvek, abyste si osvěžili paměť.

C_OBJECT($clients)
$clients :=ds.Clients.query("name = :1 and comment = :2"; "Charlie@"; "Loyal client")

Dotaz lze také zapsat jako:

C_OBJECT($settings;$clients)
$settings :=New object
$settings .parameters:=New object("givenName"; "Charlie@"; "givenComment"; "Loyal client")
$clients :=ds.Clients.query("name = :givenName and comment = :givenComment";$settings)

Stačí použít zástupný symbol s jeho jménem s předponou „:“ .

Váš kód je snadno čitelný a udržovatelný, ještě větší výhodou je však možnost psát obecné dotazy, jejichž hodnotové parametry mohou pocházet z různých zdrojů (uživatelské rozhraní nebo požadavek).

Co třeba takovýto vzor?

Uživatelům můžete poskytnout rozhraní dotazu, kde si mohou zvolit kritéria vyhledávání a hodnoty, které se mají použít.

Níže uvedený kód je určen pro rozhraní, které umožňuje prodejci procházet seznam svých klientů. Vrátí filtrovaný obsah podle ID prodejce.

C_OBJECT$settingsparameters($formData;$settings;$clients)
C_TEXT ($queryString)

$formData :=New object
DIALOG ("QueryEditor";$formData)
CLOSE WINDOW

if (OK=1)
//The logged sales person can only browse their clients
$queryString :="salesPersonUserId = :givenUserId"
//The $formData object comes from the user's interface with search criteria filled

//It contains the sales person's user id and some additional search criterias (name and city)

$settings :=New object

$settings .parameters:=$formData

If ( xml-ph-0034@deepl.ingivenName#Null)
$queryString :=$queryString+" and name = :givenName"
End if

If ($settings.parameters.givenCity#Null)
$queryString :=$queryString+" and city.name = :givenCity"
End if

$clients :=ds.Clients.query($queryString;$settings)
end if

Výše uvedené příklady se dotazují na dataClass, ale pokud se podíváte do dokumentace, zjistíte, že je to použitelné i na kolekce!

Jak vidíte, dynamické sestavování dotazů je hračka. Stáhněte si a spusťte HDI a dozvíte se více!

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.