Add 4 community knowledge articles: posting-routine pattern, email module, Word report layout, defensive/offensive blast radius

Contributed from Curabis's own BCQuality custom layer, rewritten to the
community contribution contract (no fenced code in the .md, AL samples as
sibling .good.al/.bad.al files, under 100 lines per article).
This commit is contained in:
Michael Dieringer 2026-08-27 18:11:04 +02:00
parent 19ec6b8c52
commit 17e8856b35
12 changed files with 276 additions and 0 deletions

View file

@ -0,0 +1,59 @@
codeunit 50120 "Contoso Jnl.-Check Line"
{
procedure CheckLine(var JnlLine: Record "Contoso Journal Line")
begin
if JnlLine."Line No." = 0 then
exit; // skip empty lines without error
JnlLine.TestField("Posting Date");
JnlLine.TestField(Amount);
end;
}
codeunit 50121 "Contoso Jnl.-Post Line"
{
// Operates only on the record passed in — never reads or writes the
// Journal table itself, so document posting can call this directly.
procedure PostLine(var JnlLine: Record "Contoso Journal Line")
var
LedgerEntry: Record "Contoso Ledger Entry";
begin
LedgerEntry.Init();
LedgerEntry.TransferFields(JnlLine);
LedgerEntry.Insert(true);
end;
}
codeunit 50122 "Contoso Jnl.-Post Batch"
{
// The only one of the three that touches the Journal table.
procedure PostBatch(var JnlLine: Record "Contoso Journal Line")
var
CheckLine: Codeunit "Contoso Jnl.-Check Line";
PostLine: Codeunit "Contoso Jnl.-Post Line";
begin
if JnlLine.FindSet() then
repeat
CheckLine.CheckLine(JnlLine);
until JnlLine.Next() = 0;
if JnlLine.FindSet() then
repeat
PostLine.PostLine(JnlLine);
JnlLine.Delete();
until JnlLine.Next() = 0;
end;
}
codeunit 50123 "Contoso Jnl.-Post (Yes/No)"
{
// The only entry point a page should call.
trigger OnRun()
var
JnlLine: Record "Contoso Journal Line";
PostBatch: Codeunit "Contoso Jnl.-Post Batch";
begin
if Confirm('Do you want to post the journal lines?') then
PostBatch.PostBatch(JnlLine);
end;
}