W Microsoft Dynamics NAV 2013 mamy do dyspozycji nową funkcję- SETAUTOCALCFIELDS, której umiejętne wykorzystanie może przyczynić się do poprawy wydajności projektowanych rozwiązań.
Wspomniana funkcja pozwala na automatyczne wyliczanie wartości pól typu FlowField podczas pobierania ich z bazy danych, będąc swoistą alternatywą dla funkcji CALCFIELDS. Aby funkcja SETAUTOCALCFIELDS zadziałała prawidłowo należy użyć jej przed rozpoczęciem przeglądania tabeli tak jak zaprezentowano to w poniższym przykładzie:
[cc lang=”cside”]
recItem.SETAUTOCALCFIELDS(Inventory);
IF recItem.FINDSET THEN
REPEAT
//Jakiś kod
UNTIL recItem.NEXT = 0;
[/cc]
Zamiast każdorazowego używania jak funkcji CALCFIELDS:
[cc lang=”cside”]
IF recItem.FINDSET THEN
REPEAT
recItem.CALCFIELDS(Inventory);
//Jakiś kod
UNTIL recItem.NEXT = 0;
[/cc]
Jaki zatem rezultat daje użycie funkcji SETAUTOCALCFIELDS w Microsoft Dynamics NAV 2013? Jest to zwyczajne złączenie dwóch tabel, które zaprezentowałem poniżej:
[cc lang=”sql”]
SELECT
ISNULL(“Item”.”timestamp”,@0) AS “timestamp”,
ISNULL(“Item”.”No_”,@1) AS “No_”,
…
ISNULL(“SUB$Inventory”.”Inventory$Item Ledger Entry$SUM$Quantity”,@120) AS “Inventory”
FROM “Cronus 2013″.”dbo”.”CRONUS International Ltd_$Item” AS “Item”
WITH(READUNCOMMITTED) OUTER APPLY (
SELECT TOP (1) ISNULL(SUM(“Inventory$Item Ledger Entry”.”Quantity”),@119) AS “Inventory$Item Ledger Entry$SUM$Quantity”
FROM “Cronus 2013″.”dbo”.”CRONUS International Ltd_$Item Ledger Entry” AS “Inventory$Item Ledger Entry”
WITH(READUNCOMMITTED)
WHERE (“Inventory$Item Ledger Entry”.”Item No_”=”Item”.”No_”)) AS “SUB$Inventory”
ORDER BY “No_” ASC OPTION(OPTIMIZE FOR UNKNOWN, FAST 50
)
[/cc]
Co w tym niezwykłego? Otóż to, że w przeciwieństwie do tego, czego nas uczono od kilku lat o Dynamics NAV i T-SQL, funkcja SETAUTOCALCFIELDS nie korzysta z widoków SIFT. Mimo to przyczynia się ona do znacznej poprawy wydajności.
Kolejną ważną sprawą dotyczącą SETAUTOCALFIELDS jest umiejętność poprawnego jej resetowania – podobnie do filtrów SETRANGE, aby wyłączyć jej działanie należy wywołać ją bez parametrów (SETAUTOCALCFIELDS()).
Znając te dwie zasady na pewno bez problemu poradzicie sobie z poprawnym korzystaniem z tej nowości tworząc nowe moduły w Microsoft Dynamics NAV 2013.