Microsoft Dynamics NAV 2013 i SETAUTOCALCFIELDS

Microsoft Dynamics NAV 2013 i SETAUTOCALCFIELDS

18 marca 2013 08:00 0 komentarzy

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ń.

SETAUTOCALFILEDS - Microsoft Dynamics NAV 2013

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:

1
2
3
4
5
recItem.SETAUTOCALCFIELDS(Inventory);
IF recItem.FINDSET THEN
REPEAT
//Jakiś kod
UNTIL recItem.NEXT = 0;

Zamiast każdorazowego używania jak funkcji CALCFIELDS:

1
2
3
4
5
IF recItem.FINDSET THEN
REPEAT
recItem.CALCFIELDS(Inventory);
//Jakiś kod
UNTIL recItem.NEXT = 0;

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
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
)

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.

Zostaw odpowiedź