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:
GeSHi Error: GeSHi could not find the language cside (using path /home/babaczyk/public_html/d365bc.info.pl/wp-content/plugins/codecolorer/lib/geshi/) (code 2)
Zamiast każdorazowego używania jak funkcji CALCFIELDS:
GeSHi Error: GeSHi could not find the language cside (using path /home/babaczyk/public_html/d365bc.info.pl/wp-content/plugins/codecolorer/lib/geshi/) (code 2)
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.

