Business Central performance tips from BC TechDays

Performance Giveaways

Daniel Gorski
Daniel Gorski 19. September 2022
2 Min. Lesezeit

All credits belong to Waldo. His session on BC Tech Days 2022 was refreshing and informative.

You should check his new Business Central Performance Tool:

https://github.com/waldo1001/waldo.BCPerfTool

If you want to read more about that cool guy, just check his blog
https://www.waldo.be/


Our TOP 5 "Performance"-Giveaways:


1. Check if record is filled before you fire "DeleteAll":

AssemblyCommentLine.SetCurrentKey("Document Type", "Document No.");
AssemblyCommentLine.SetRange("Document Type", "Document Type");
AssemblyCommentLine.SetRange("Document No.", "No.");
if not AssemblyCommentLine.IsEmpty() then
    AssemblyCommentLine.DeleteAll();

2. Don't load the whole record. Load always a subset by using "SetLoadFields":

Item.SetLoadFields(Item."Item Category Id", Item."Item Category Code");
Item.SetRange(Item."Item Category Code", '');
if Item.FindSet() then
    repeat
        Item2 := Item;
        if ItemCategory.GetBySystemId(Item2."Item Category Id") then begin
            Item2."Item Category Code" := ItemCategory."Code";
            Item2.Modify();
        end;
    until Item.Next() = 0;

3. Calculating flowfields always outside the loop by using SetAutoCalcFields:

ConfigPackageTable.SetAutoCalcFields("Table Name");
if ConfigPackageTable.FindSet() then
    repeat
        if not HideDialog then
            ConfigProgressBar.Update(ConfigPackageTable."Table Name");

        ExportConfigTableToXML(ConfigPackageTable, PackageXML);
    until ConfigPackageTable.Next() = 0;

4. Using the right keys in your tables and using IncludedFields and SumIndexFields

key(Key1; "Vendor No.", "Posting Date")
{
    IncludedFields = "Currency Code", "Amount to Apply", Open;
}

key(Key2; "Vendor No.", "Posting Date")
{
    SumIndexFields = "Purchase (LCY)";
}

5. Use TextBuilder to append substrings instead of using Text variable

procedure ReadAsTextWithSeparator(InStream: InStream; LineSeparator: Text)
var
    Tb: TextBuilder;
    Line: Text;
begin
    InStream.ReadText(Line);
    Tb.Append(Line);
    while not InStream.EOS do begin
        InStream.ReadText(Line);
        Tb.Append(LineSeparator);
        Tb.Append(Line);
    end;
end;
how-to
development
business central
performance
al code
bc techdays
optimization
Modulare ERP-Architektur für skalierbare Unternehmenssoftware

Architektur

Mehr als nur Warenwirtschaft - die Landtechnik Lösung

ERP-Systeme wurden jahrelang als Monolithen verkauft. Die eigentliche Stärke moderner Plattformen wie Business Central liegt jedoch in der Modularität - und gen

Read More
Read More
BeyondCues Subscription Billing KPIs in Business Central

Product

Subscription Billing Meets Real-Time KPIs: BeyondCues Sub. Billing

MRR, ARR, ARPU und Churn Rate direkt im Role Center von Business Central - ohne AL-Entwicklung. BeyondCues Sub. Billing bringt Subscription-KPIs dorthin, wo Sie

Read More
Read More