bcquality/community/knowledge/error-handling/table-event-subscriber-rolls-back-whole-batch.good.al
Jeremy Vyska 4119417ce4
Some checks failed
Validate knowledge index / validate-index (push) Has been cancelled
Validate frontmatter and structure / validate (push) Has been cancelled
Add 15 community knowledge articles from BC Code Intel ingest (#66)
* Add 15 community knowledge articles from BC Code Intel ingest

Ingests net-new /community knowledge from BC Code Intelligence, surviving
the admission test, gray-zone salvage, and dedup against the full corpus.

Domains: ui (6), error-handling (3), performance (2), upgrade (1),
appsource (1), security (1), telemetry (1). The two BC24 No. Series
migration drafts are merged into one article.

Adds good/bad AL samples for the clean-fit articles (error-handling,
performance, security, telemetry). UI and appsource remain knowledge-only.

Validator and knowledge-index checks pass (207 articles).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Correct SetLoadFields JIT-load article to match MS docs

The draft claimed accessing an unlisted field "reloads the entire row"
per record. Microsoft's partial-records docs say otherwise: the platform
does an implicit Get that loads the missing field(s), and in a direct var
loop the first JIT updates the enumerator so later iterations do not
re-load. The genuine per-row penalty is the pass-by-value case, where the
copy's enumerator is not updated.

Rewrite the article around JIT loading and the by-value footgun, rename
the slug from ...full-reload to ...jit-load, and fix the good/bad samples
to demonstrate the by-value repetition accurately.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Jeremy Vyska <jeremy@sparebrained.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 14:31:50 +02:00

33 lines
1.1 KiB
AL

codeunit 50124 "Batch Import Good Sample"
{
procedure ImportAll(var StagingLine: Record "Sales Line")
var
FailedCount: Integer;
begin
if StagingLine.FindSet() then
repeat
// Isolate each record behind a Codeunit.Run boundary: a failure
// inside the run rolls back only that record's work, and the
// batch continues instead of discarding everything.
if not Codeunit.Run(Codeunit::"Batch Import One Line", StagingLine) then
FailedCount += 1;
until StagingLine.Next() = 0;
if FailedCount > 0 then
Message('%1 line(s) were skipped; the rest were imported.', FailedCount);
end;
}
codeunit 50125 "Batch Import One Line"
{
TableNo = "Sales Line";
trigger OnRun()
begin
// Validation lives here. If it throws, only this line rolls back,
// because the caller wrapped the call in Codeunit.Run.
Rec.TestField("No.");
Rec.TestField(Quantity);
Rec.Insert(true);
end;
}