4D udržuje vaše výběry záznamů konzistentní, pokud jde o mazání záznamů.

Automaticky přeloženo z Deepl

S mazáním dat je třeba zacházet opatrně. Abychom předešli problémům, můžeme použít transakce nebo se spolehnout na zálohy a protokoly.

Ve verzi 4D 20 R4 byla provedena některá vylepšení, aby byl výběr záznamů stabilní a konzistentní, pokud jde o případné mazání záznamů v tomto výběru.

Čtěte dále a dozvíte se, jak bude váš kód 4D tak bezpečný po vybalení z krabice.

Vnitřní chování 4D

Jak již možná víte, 4D interně zpracovává tabulku adres, která ukazuje na fyzické bloky dat na disku. Pokud jde o zacházení s touto adresní tabulkou v interní architektuře 4D, mohlo by to vést k problémům, o kterých se zde hovoří, při postupu výběru záznamů.

Když je záznam odstraněn, je v tabulce adres odstraněn jeho odkaz na fyzická data.

Aby se zabránilo vzniku děr a optimalizovalo se využití paměti pro tabulku adres, využívá 4D při vytváření nového záznamu volná místa v této tabulce adres.

Po vytvoření výběru záznamů (například pomocí dotazu), pokud je poté záznam patřící do tohoto výběru odstraněn a je vytvořen nový záznam, může být na něj odkazováno prostřednictvím stejného čísla předchozího záznamu v tabulce adres.

V minulosti jste tedy mohli ve svém výběru najít některé údaje, které vůbec neočekáváte.

konkrétní příklad

Zaměstnanec má k vyřízení hromadu úkolů. Při vytvoření je úkol ovlivněn stavem TO DO.

Pravidelně je zaměstnanci zasílán mail s jeho úkoly TO DO. Vytvoří se výběr těchto úkolů a u každého z nich je smyčka, která v e-mailu uvede podrobnosti.

Správce má však právo některé úkoly smazat. Pokud správce omylem smaže úkol ve výše uvedeném výběru a hned poté se vytvoří nový úkol pro jiného zaměstnance… co se stane?

Před 4D 20 R4

Nově vytvořený úkol byl nalezen ve smyčce, a protože se jedná o úkol pro jiného zaměstnance, je zcela mimo rozsah!

Po 4D 20 R4

Nově vytvořený úkol se ve smyčce nenachází a výběr dat je vždy konzistentní a můžete se na něj bezpečně spolehnout.

Výše uvedený případ použití není tak častý, protože většinou u záznamu měníme stav, místo abychom jej přímo mazali.

Nebo jste možná byli zvyklí znovu kontrolovat konzistenci záznamu / entity (s ohledem na kritéria výběru) před jeho pokračováním.

Každopádně vám to již nemusí vadit.

Podívejme se na to v akci v nějakém kódu

V následujícím příkladu sestavíme výběr entit $target.

Poté vymažeme entitu patřící do tohoto výběru entit (pro rychlé pochopení to děláme ve stejném kusu kódu, ale můžeme si představit, že to dělá jiný uživatel v jiném procesu).

Smyčka zpracovává pouze dvě entity, které nám zbyly (internalID 10 a 12).


var $target; $customers : cs.CustomersSelection
var $customer : cs.CustomersEntity
var $newCustomer : cs.CustomersEntity
var $status : Object

// Three customers are retrieved with internal ID 10, 11, 12
$target:=ds.Customers.query("internalID >= 10 and internalID <= 12")
ASSERT($target.length=3)

// We delete the customer with internalID = 11
$customers:=ds.Customers.query("internalID = :1"; 11).drop()

// We create a new customer with internalID = 99 
$newCustomer:=ds.Customers.new()
$newCustomer.internalID:=99
$status:=$newCustomer.save()

// We loop on the $target entity selection
// got before the creation of the new customer
For each ($customer; $target)
// The new customer is not in the entity selection ... 
ASSERT($customer.internalID#99)
End for each 

Důležité: Tato funkce platí pro data zpracovávaná klasickými standardními příkazy QUERY a ORDA 4D.

Pokračujte v bezpečné práci s 4D, protože vaše oblíbená vývojová platforma přebírá mnoho starostí, abyste se mohli soustředit na obchodní logiku!

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.