ORDA – Sdílení výběru entit mezi procesy

Automaticky přeloženo z Deepl

4D v16 R6 zavedlo nový koncept komunikace mezi procesy: sdílené objekty a sdílené proměnné kolekce! Díky tomu můžete snadno sdílet informace mezi procesy.

Dosud nebylo možné mezi procesy sdílet výběry entit. To se však změnilo … s potěšením vám oznamujeme, že ve verzi 4D v18 R5 jsou výběry entit sdílitelné!

Pryč jsou doby, kdy jste museli sestavovat seznam primárních klíčů, abyste mohli výběr entit přesunout do jiného procesu. Vylepšete svůj víceprocesový kód tím, že zahrnete výběry entit ORDA jako sdílené objekty.

Čtěte dále a dozvíte se více.

HDI: Sdílení výběrů entit ORDA

Princip

Ve verzi 4D v18 R5 je možné sdílet většinu výběrů entit. To znamená:

  • jsou neměnné (neumožňují přidání nových entit).
  • mohou být sdíleny mezi několika procesy nebo pracovníky.

Některé výběry entit nejsou sdílené (například pokud byly vytvořeny pomocí dataClass.newSelection() nebo Create entity selection()). To znamená, že se jedná o tzv:

  • jsou měnitelné (umožňují přidání nových entit)
  • nelze je sdílet mezi několika procesy

sdílené výběry entit

Počínaje verzí 4D v18 R5 je možné sdílet většinu používaných výběrů entit (získaných pomocí query(), all(), …).

Podívejme se na příklad pro lepší pochopení.

Příklad

V následujícím příkladu sestavíme dva výběry entit:

  • jeden pro zaplacené faktury.
  • jeden pro nezaplacené faktury.

Můžeme je chtít předat pracovníkovi, který deleguje jejich odeslání:

  • potvrzovací e-maily pro zaplacené faktury.
  • upomínací e-maily pro nezaplacené faktury.

Zde je kód:

If
End use

CALL WORKER Storageinfo(Storage.info=Null)
Use (Storage)
Storage .info:=New shared object()
End use
End if

Use (Storage.info)
//Put entity selections in a shared object
Storage .info.paid:=ds.Invoices.query("status=:1"; "Paid")
Storage .info.unpaid:=ds.Invoices.query("status=:1"; "Unpaid") xml-ph-0034@de

Zde je metoda sendMails :

var $info; $1: Object
var $paid ; $unpaid: cs.InvoicesSelection
var $invoice : cs.InvoicesEntity
var $server ; $transporter; $email; $status: Object

//Prepare emails s
$server :=New object
$server .host:="exchange.company.com"
$server .user:="myName@company.com"
$server .password:="moje heslo"

$transporter :=SMTP New transporter($server)

$email :=New object
$email .from:="myName@company.com"

//Get entity selections
$info:=$1
$paid:=$info.paid
$unpaid:=$info.unpaid

//Loops on entity selections
For each ($invoice; $paid)
$email .to:=$invoice.customer.address // email address of the customer
$email .subject:="Platba v pořádku za fakturu #"+String($invoice.number)
$status :=$transporter.send($email)
End for each

For each ($invoice; $unpaid)
$email .to:=$invoice.customer.address // email address of the customer
$email .subject:="Zaplaťte prosím fakturu #"+String($invoice.number)
$status :=$transporter.send($email)
End for each

Jak vidíte, pracovník si s výběry entit poradí!

přecházení mezi výběry entit, které lze sdílet / které nelze sdílet.

V některých případech můžete mít nesdílený výběr entit. Pokud jej potřebujete sdílet s jiným procesem, stačí použít nový .copy() funkce třídy, která je k dispozici u objektů výběru entit.

Zde je příklad právě tohoto postupu:

Form.products je nový prázdný výběr entit získaný pomocí funkce třídy newSelection(). Není tedy sdílený a akceptuje přidání entity.

Form.products:=ds.Products.newSelection()

//Form.product is entered by the user
Form .products.add(Form.product)

Pokud se ji pokusíte vložit „tak, jak je“, do sdíleného objektu $sharedObj, dojde k chybě:

var $sharedObj : Object
$sharedOb j:=New shared object()

Use ($sharedObj)
//Error "Not supported value type in a shared object or a shared collection"

$sharedObj.products:=Form.products
End use

Protože ORDA myslí na všechno, je k dispozici nová funkce .copy() třídní funkce dostupná na objektech výběru entit.

Vrátí kopii zadaného výběru entit, takže se můžeme zeptat, zda je tato kopie sdílitelná, nebo ne.

var $sharedObj : Object
$sharedObj :=New shared object()

Use ($sharedObj)
//Returns a shareable copy of the Form.products entity selection
$sharedObj .products:=Form.products.copy(ck shared)
End use

A je to!

Pomocí této nové funkce třídy můžete samozřejmě také změnit výběr sdílených entit na výběr nesdílených entit vynecháním nepovinného parametru.

Všimněte si, že byl také aktualizován příkaz Kopírovat OB:

  • jako parametr přijímá výběr entit.
  • Výběry entit vnořené do kopírovaného objektu se rovněž kopírují podle předaného parametru.

Stáhněte si HDI a podívejte se do dokumentace, abyste se dozvěděli 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.