From f1b23df900d874c8607df4403f16221bd9d9479c Mon Sep 17 00:00:00 2001 From: Jeffrey Bulanadi Date: Tue, 21 Apr 2026 17:01:47 +0800 Subject: [PATCH 1/2] fix: Replace LoadFields with AddLoadFields in APIV2 pages Replace per-record Rec.LoadFields calls inside SetCalculatedFields and LoadCurrencyInformation procedures with Rec.AddLoadFields in OnOpenPage. LoadFields invoked from OnAfterGetRecord causes JIT reads on every record fetch, which triggers telemetry errors under concurrent load. AddLoadFields declared in OnOpenPage ensures the required fields are included in the initial dataset query, eliminating unnecessary JIT round-trips entirely. Affected pages: - APIV2SalesInvoices: fields No., Currency Code, Amount Including VAT, Posted, Status - APIV2SalesCreditMemos: fields Applies-to Doc. Type, Currency Code - APIV2SalesQuotes: field Currency Code - APIV2PurchaseInvoices: field Currency Code - APIV2PurchaseCreditMemos: fields Applies-to Doc. Type, Currency Code - APIV2BankAccounts: field Currency Code (new OnOpenPage trigger added) Fixes #29634 --- Apps/W1/APIV2/app/src/pages/APIV2BankAccounts.Page.al | 6 +++++- .../W1/APIV2/app/src/pages/APIV2PurchaseCreditMemos.Page.al | 2 +- Apps/W1/APIV2/app/src/pages/APIV2PurchaseInvoices.Page.al | 2 +- Apps/W1/APIV2/app/src/pages/APIV2SalesCreditMemos.Page.al | 2 +- Apps/W1/APIV2/app/src/pages/APIV2SalesInvoices.Page.al | 2 +- Apps/W1/APIV2/app/src/pages/APIV2SalesQuotes.Page.al | 2 +- 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Apps/W1/APIV2/app/src/pages/APIV2BankAccounts.Page.al b/Apps/W1/APIV2/app/src/pages/APIV2BankAccounts.Page.al index b19125ab30..9d3715b0c1 100644 --- a/Apps/W1/APIV2/app/src/pages/APIV2BankAccounts.Page.al +++ b/Apps/W1/APIV2/app/src/pages/APIV2BankAccounts.Page.al @@ -108,6 +108,11 @@ page 30051 "APIV2 - Bank Accounts" CurrencyCodeDoesNotMatchACurrencyErr: Label 'The "currencyCode" does not match to a Currency.', Comment = 'currencyCode is a field name and should not be translated.'; CurrencyValuesDontMatchErr: Label 'The currency values do not match to a specific Currency.'; + trigger OnOpenPage() + begin + Rec.AddLoadFields("Currency Code"); + end; + trigger OnAfterGetRecord() begin LoadCurrencyInformation(); @@ -127,7 +132,6 @@ page 30051 "APIV2 - Bank Accounts" var GraphMgtGeneralTools: Codeunit "Graph Mgt - General Tools"; begin - Rec.LoadFields("Currency Code"); CurrencyCodeTxt := GraphMgtGeneralTools.TranslateNAVCurrencyCodeToCurrencyCode(LCYCurrencyCode, Rec."Currency Code"); end; } \ No newline at end of file diff --git a/Apps/W1/APIV2/app/src/pages/APIV2PurchaseCreditMemos.Page.al b/Apps/W1/APIV2/app/src/pages/APIV2PurchaseCreditMemos.Page.al index 5ec94a854c..b1515f20a0 100644 --- a/Apps/W1/APIV2/app/src/pages/APIV2PurchaseCreditMemos.Page.al +++ b/Apps/W1/APIV2/app/src/pages/APIV2PurchaseCreditMemos.Page.al @@ -616,6 +616,7 @@ page 30083 "APIV2 - Purchase Credit Memos" begin CheckDataUpgrade(); SetPermissionsFilters(); + Rec.AddLoadFields("Applies-to Doc. Type", "Currency Code"); end; var @@ -670,7 +671,6 @@ page 30083 "APIV2 - Purchase Credit Memos" local procedure SetCalculatedFields() begin - Rec.LoadFields("Applies-to Doc. Type", "Currency Code"); SetInvoiceId(); CurrencyCodeTxt := GraphMgtGeneralTools.TranslateNAVCurrencyCodeToCurrencyCode(LCYCurrencyCode, Rec."Currency Code"); end; diff --git a/Apps/W1/APIV2/app/src/pages/APIV2PurchaseInvoices.Page.al b/Apps/W1/APIV2/app/src/pages/APIV2PurchaseInvoices.Page.al index 78f85fc890..230334c0e1 100644 --- a/Apps/W1/APIV2/app/src/pages/APIV2PurchaseInvoices.Page.al +++ b/Apps/W1/APIV2/app/src/pages/APIV2PurchaseInvoices.Page.al @@ -595,6 +595,7 @@ page 30042 "APIV2 - Purchase Invoices" trigger OnOpenPage() begin CheckPermissions(); + Rec.AddLoadFields("Currency Code"); end; var @@ -622,7 +623,6 @@ page 30042 "APIV2 - Purchase Invoices" local procedure SetCalculatedFields() begin - Rec.LoadFields("Currency Code"); CurrencyCodeTxt := GraphMgtGeneralTools.TranslateNAVCurrencyCodeToCurrencyCode(LCYCurrencyCode, Rec."Currency Code"); end; diff --git a/Apps/W1/APIV2/app/src/pages/APIV2SalesCreditMemos.Page.al b/Apps/W1/APIV2/app/src/pages/APIV2SalesCreditMemos.Page.al index 37f4821aab..7e6a799b20 100644 --- a/Apps/W1/APIV2/app/src/pages/APIV2SalesCreditMemos.Page.al +++ b/Apps/W1/APIV2/app/src/pages/APIV2SalesCreditMemos.Page.al @@ -638,6 +638,7 @@ page 30038 "APIV2 - Sales Credit Memos" trigger OnOpenPage() begin SetPemissionsFilters(); + Rec.AddLoadFields("Applies-to Doc. Type", "Currency Code"); end; var @@ -691,7 +692,6 @@ page 30038 "APIV2 - Sales Credit Memos" local procedure SetCalculatedFields() begin - Rec.LoadFields("Applies-to Doc. Type", "Currency Code"); SetInvoiceId(); CurrencyCodeTxt := GraphMgtGeneralTools.TranslateNAVCurrencyCodeToCurrencyCode(LCYCurrencyCode, Rec."Currency Code"); end; diff --git a/Apps/W1/APIV2/app/src/pages/APIV2SalesInvoices.Page.al b/Apps/W1/APIV2/app/src/pages/APIV2SalesInvoices.Page.al index 1740f9623f..a53de711c7 100644 --- a/Apps/W1/APIV2/app/src/pages/APIV2SalesInvoices.Page.al +++ b/Apps/W1/APIV2/app/src/pages/APIV2SalesInvoices.Page.al @@ -718,6 +718,7 @@ page 30012 "APIV2 - Sales Invoices" trigger OnOpenPage() begin SetPermissionFilters(); + Rec.AddLoadFields("No.", "Currency Code", "Amount Including VAT", Posted, Status); end; var @@ -772,7 +773,6 @@ page 30012 "APIV2 - Sales Invoices" local procedure SetCalculatedFields() begin - Rec.LoadFields("No.", "Currency Code", "Amount Including VAT", Posted, Status); GetRemainingAmount(); CurrencyCodeTxt := GraphMgtGeneralTools.TranslateNAVCurrencyCodeToCurrencyCode(LCYCurrencyCode, Rec."Currency Code"); end; diff --git a/Apps/W1/APIV2/app/src/pages/APIV2SalesQuotes.Page.al b/Apps/W1/APIV2/app/src/pages/APIV2SalesQuotes.Page.al index 6ed326996d..58621d0d53 100644 --- a/Apps/W1/APIV2/app/src/pages/APIV2SalesQuotes.Page.al +++ b/Apps/W1/APIV2/app/src/pages/APIV2SalesQuotes.Page.al @@ -679,6 +679,7 @@ page 30037 "APIV2 - Sales Quotes" trigger OnOpenPage() begin CheckPermissions(); + Rec.AddLoadFields("Currency Code"); end; var @@ -717,7 +718,6 @@ page 30037 "APIV2 - Sales Quotes" local procedure SetCalculatedFields() begin - Rec.LoadFields("Currency Code"); CurrencyCodeTxt := GraphMgtGeneralTools.TranslateNAVCurrencyCodeToCurrencyCode(LCYCurrencyCode, Rec."Currency Code"); end; From 124cb66c3f5ba3203e9db7c63bdd200245352965 Mon Sep 17 00:00:00 2001 From: Jeffrey Bulanadi Date: Thu, 30 Apr 2026 01:25:13 +0800 Subject: [PATCH 2/2] fix: use OnInit instead of OnOpenPage for AddLoadFields in BankAccounts OnOpenPage is not guaranteed to be called for all API page operations (POST, PATCH, DELETE, batch). OnInit is always called when the page object is instantiated, making it the correct trigger for AddLoadFields which must fire before any record data is fetched. --- Apps/W1/APIV2/app/src/pages/APIV2BankAccounts.Page.al | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Apps/W1/APIV2/app/src/pages/APIV2BankAccounts.Page.al b/Apps/W1/APIV2/app/src/pages/APIV2BankAccounts.Page.al index 9d3715b0c1..7f92b96dfa 100644 --- a/Apps/W1/APIV2/app/src/pages/APIV2BankAccounts.Page.al +++ b/Apps/W1/APIV2/app/src/pages/APIV2BankAccounts.Page.al @@ -108,7 +108,7 @@ page 30051 "APIV2 - Bank Accounts" CurrencyCodeDoesNotMatchACurrencyErr: Label 'The "currencyCode" does not match to a Currency.', Comment = 'currencyCode is a field name and should not be translated.'; CurrencyValuesDontMatchErr: Label 'The currency values do not match to a specific Currency.'; - trigger OnOpenPage() + trigger OnInit() begin Rec.AddLoadFields("Currency Code"); end;