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
Azure Communication Services SMTP with Scanner

Using Azure Communication Services SMTP with Your Scanner or Printer

Need to send scans via email from your office scanner? Azure Communication Services provides a reliable SMTP relay that works with any device supporting SMTP au

Read More
Read More
XRechnung Einrichtung in Business Central

XRechnung in Business Central einrichten: Schritt für Schritt zur E-Rechnung

Ab 2025 wird die E-Rechnung im B2B-Bereich in Deutschland Pflicht. Wir zeigen Ihnen, wie Sie XRechnung in Business Central einrichten – mit E-Beleg-Dienst, Work

Read More
Read More