by Mostafa Balat, Microsoft Development Center Copenhagen Abstract In a service-oriented deployment, web services are used to extend NAV's functionality and reach. Depending on how volatile this data is and the corresponding usage scheme, it is expected to be up-to-date within a pre-defined period of time (e.g. once a day). Description When NAV is integrated with external services, then the user scenarios become dependent on the data and functions offered by such services. Eventually, there are different approaches through which the external data can be retrieved, stored and used. Dynamic: either exposed by the external service itself or by a separate catalog that NAV can query. Advantage: data is always up-to-date Disadvantage: it requires constant connection to the data source. Static: hard-coded in the database for the user to benefit from. Advantage: data is promptly available when needed. Disadvantage: if data changes at some point, it will require a maintenance effort, which exposes the business process to a risk of failure. Cached: offered through an external service and gets pulled according to a pre-defined refresh rate or manually. Advantage: data is 'up-to-date' within the rules acceptable by the business process, without extra load on the network resources or the external service. Disadvantage: if data changes while the auto-refresh did not happen yet, the user may not have access to the latest data; however, the user can manually force a refresh of the data, if asked to do so. When to Use It Offer data in lookups that were cached from an external service. Diagram Usage Set up an NAV feature to consume the data from an external service. Refresh the data on a pre-defined refresh rate (e.g. once a day) or when enforced by a power user or an admin. Cache the data in a table and offer it in lookups, as applicable. NAV Specific Example Overview PAG1259 Bank Name - Data Conv. List offers the required functionality to refresh and display the list of bank names needed to specify which file format to convert to. The page can be accessed from PAG1260 Bank Data Conv. Service Setup to display all available bank names. It is also used as a lookup on PAG370 Bank Account Card, where it offers a filtered view of the cached bank names based on the Country/Region Code field. If PAG1259 Bank Name - Data Conv. List is being open and the cached data is 'old', it refreshes the cache. The cached data is stored in TAB1259 Bank Data Conv. Bank. Meanwhile, the user has the chance to refresh the data using Code Sample OnInit=BEGIN ShortTimeout := 5000; LongTimeout := 30000; END; OnOpenPage=VAR BankDataConvBank@1002 : Record 1259; ImpBankListExtDataHndl@1000 : Codeunit 1289; CountryRegionCode@1004 : Text; HideErrors@1003 : Boolean; BEGIN CountryRegionCode := IdentifyCountryRegionCode(Rec,GETFILTER("Country/Region Code")); IF BankDataConvBank.ISEMPTY THEN BEGIN ImpBankListExtDataHndl.GetBankListFromConversionService(HideErrors,CountryRegionCode,ShortTimeout); EXIT; END; RefreshBankNamesOlderThanToday(CountryRegionCode,HideErrors,ShortTimeout); END; OnAction=VAR ImpBankListExtDataHndl@1000 : Codeunit 1289; FilterNotUsed@1001 : Text; ShowErrors@1003 : Boolean; BEGIN ShowErrors := TRUE; ImpBankListExtDataHndl.GetBankListFromConversionService(ShowErrors,FilterNotUsed,LongTimeout); END; LOCAL PROCEDURE IdentifyCountryRegionCode@1(VAR BankDataConvBank@1002 : Record 1259;Filter@1000 : Text) : Text; VAR CompanyInformation@1001 : Record 79; BlankFilter@1003 : Text; BEGIN BlankFilter := ''''''; IF Filter = BlankFilter THEN BEGIN CompanyInformation.GET; BankDataConvBank.SETFILTER("Country/Region Code",CompanyInformation."Country/Region Code"); EXIT(BankDataConvBank.GETFILTER("Country/Region Code")); END; EXIT(Filter); END; LOCAL PROCEDURE RefreshBankNamesOlderThanToday@5(CountryRegionCode@1000 : Text;ShowErrors@1002 : Boolean;Timeout@1004 : Integer); VAR BankDataConvBank@1001 : Record 1259; ImpBankListExtDataHndl@1003 : Codeunit 1289; BEGIN IF CountryRegionCode <> '' THEN BankDataConvBank.SETFILTER("Country/Region Code",CountryRegionCode); BankDataConvBank.SETFILTER("Last Update Date",'<%1',TODAY); IF BankDataConvBank.FINDFIRST THEN ImpBankListExtDataHndl.GetBankListFromConversionService(ShowErrors,CountryRegionCode,Timeout); END; NAV Usages Bank name lookup on the Bank Account card for dynamically identifying the format to use to generate a bank-specific payment file. Ideas for Improvement Expose the refresh rate through a setup table to make it easily configurable without changing the code.