Add data-modeling and appsource knowledge articles (MICROSOFT layer) (#65)

Author 7 remedial BCQuality knowledge articles plus good/bad AL samples
(21 files) covering AL master-table and data-model design:

- data-modeling: master No. from number series in OnInsert; use codeunit
  "No. Series" not obsolete NoSeriesManagement; setup table is a singleton;
  set Last Date Modified in OnModify and OnRename; enforce Blocked in
  referencing code not in the master.
- style: ApplicationArea required on page controls (AS0062).
- appsource: object affixes prevent collisions (AS0011).

Clean-room authored from own BC knowledge; specifics verified against public
sources only (learn.microsoft.com, microsoft/BCApps). Introduces two new
domains (data-modeling, appsource).

Co-authored-by: Jesper Schulz-Wedde <jesper.schulzwedde@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Jesper Schulz-Wedde 2026-07-13 10:35:31 +02:00 committed by GitHub
parent 34c931e1c1
commit 766046b85d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
21 changed files with 885 additions and 0 deletions

View file

@ -0,0 +1,55 @@
table 50362 "Loyalty Member"
{
Caption = 'Loyalty Member';
DataClassification = CustomerContent;
fields
{
field(1; "No."; Code[20])
{
Caption = 'No.';
trigger OnValidate()
var
NoSeries: Codeunit "No. Series";
begin
if "No." = xRec."No." then
exit;
LoyaltySetup.Get();
if not NoSeries.IsManual(LoyaltySetup."Member Nos.") then
Error(ManualNosNotAllowedErr);
"No. Series" := '';
end;
}
field(2; "No. Series"; Code[20])
{
Caption = 'No. Series';
Editable = false;
TableRelation = "No. Series";
}
}
keys
{
key(PK; "No.")
{
Clustered = true;
}
}
var
LoyaltySetup: Record "Loyalty Setup";
ManualNosNotAllowedErr: Label 'Numbers are assigned automatically. Allow manual numbers on the No. Series to enter one by hand.';
trigger OnInsert()
var
NoSeries: Codeunit "No. Series";
begin
if "No." = '' then begin
LoyaltySetup.Get();
LoyaltySetup.TestField("Member Nos.");
"No. Series" := LoyaltySetup."Member Nos.";
"No." := NoSeries.GetNextNo("No. Series");
end;
end;
}