Merge remote-tracking branch 'origin/main' into fix-setloadfields-order-myth

# Conflicts:
#	community/knowledge/performance/call-setloadfields-before-filters.md

Co-authored-by: JeremyVyska <35526546+JeremyVyska@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-05-22 08:11:13 +00:00 committed by GitHub
commit ee73a0c98d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
474 changed files with 7604 additions and 1969 deletions

View file

@ -1,5 +1,5 @@
---
bc-version: [26..28]
bc-version: [all]
domain: performance
keywords: [singleinstance, subscriber, event, memory, session]
technologies: [al]
@ -9,7 +9,7 @@ application-area: [all]
# Avoid growing globals in SingleInstance subscribers
> **Seed article.** Ported from BC Code Intelligence to seed the community corpus. Community contributors are invited to expand or refine.
> Contributions welcome — open a PR to refine or extend this article.
## Description

View file

@ -1,5 +1,5 @@
---
bc-version: [26..28]
bc-version: [all]
domain: performance
keywords: [maintainsiftindex, sift, calcsums, flowfield, write-cost]
technologies: [al]
@ -9,7 +9,7 @@ application-area: [all]
# Choose MaintainSIFTIndex by read-write ratio
> **Seed article.** Ported from BC Code Intelligence to seed the community corpus. Community contributors are invited to expand or refine.
> Contributions welcome — open a PR to refine or extend this article.
## Description

View file

@ -1,5 +1,5 @@
---
bc-version: [26..28]
bc-version: [all]
domain: performance
keywords: [setloadfields, case, conditional, branch, field-loading]
technologies: [al]
@ -9,7 +9,7 @@ application-area: [all]
# Load common fields before branching on case
> **Seed article.** Ported from BC Code Intelligence to seed the community corpus. Community contributors are invited to expand or refine.
> Contributions welcome — open a PR to refine or extend this article.
## Description

View file

@ -1,5 +1,5 @@
---
bc-version: [26..28]
bc-version: [all]
domain: performance
keywords: [setloadfields, primary-key, reference, existence-check, memory]
technologies: [al]
@ -9,7 +9,7 @@ application-area: [all]
# Load only primary key fields for reference work
> **Seed article.** Ported from BC Code Intelligence to seed the community corpus. Community contributors are invited to expand or refine.
> Contributions welcome — open a PR to refine or extend this article.
## Description

View file

@ -1,5 +1,5 @@
---
bc-version: [26..28]
bc-version: [all]
domain: performance
keywords: [setloadfields, filter, field-exclusion, index]
technologies: [al]
@ -9,7 +9,7 @@ application-area: [all]
# Omit filter-only fields from SetLoadFields
> **Seed article.** Ported from BC Code Intelligence to seed the community corpus. Community contributors are invited to expand or refine.
> Contributions welcome — open a PR to refine or extend this article.
## Description

View file

@ -1,5 +1,5 @@
---
bc-version: [26..28]
bc-version: [all]
domain: performance
keywords: [case, branch, frequency, control-flow, hot-path]
technologies: [al]
@ -9,7 +9,7 @@ application-area: [all]
# Order case branches by frequency
> **Seed article.** Ported from BC Code Intelligence to seed the community corpus. Community contributors are invited to expand or refine.
> Contributions welcome — open a PR to refine or extend this article.
## Description

View file

@ -1,5 +1,5 @@
---
bc-version: [26..28]
bc-version: [all]
domain: performance
keywords: [deleteall, bulk-delete, sql, ondelete, trigger-bypass]
technologies: [al]
@ -9,7 +9,7 @@ application-area: [all]
# Use DeleteAll for filtered bulk deletion
> **Seed article.** Ported from BC Code Intelligence to seed the community corpus. Community contributors are invited to expand or refine.
> Contributions welcome — open a PR to refine or extend this article.
## Description

View file

@ -1,5 +1,5 @@
---
bc-version: [26..28]
bc-version: [all]
domain: security
keywords: [dataclassification, gdpr, privacy, euii, compliance]
technologies: [al]
@ -9,20 +9,18 @@ application-area: [all]
# Classify every field with DataClassification
> **Seed article.** Ported from BC Code Intelligence to seed the community corpus. Community contributors are invited to expand or refine.
## Description
Every field on every AL table and table extension must carry an explicit `DataClassification` property. The value drives GDPR tooling, data-subject requests, retention policies, and audit reporting — all of which rely on the field metadata to know what data to include, anonymize, or delete. A field with no `DataClassification` defaults to `ToBeClassified`, which is a compliance gap, not a neutral state.
Every field on every AL table and table extension must have a resolved `DataClassification` value, either declared directly on the field or inherited from a table-level default. The value drives GDPR tooling, data-subject requests, retention policies, and audit reporting — all of which rely on the field metadata to know what data to include, anonymize, or delete. A field with no field-level property and no table-level default resolves to `ToBeClassified`, which is a compliance gap, not a neutral state.
## Best Practice
Choose the narrowest value that accurately describes the field's content: `EndUserIdentifiableInformation` for data that directly identifies a person, `EndUserPseudonymousIdentifiers` for indirect identifiers, `CustomerContent` for business operational data, `SystemMetadata` for system-generated housekeeping, `AccountData` for tenant/billing, `OrganizationIdentifiableInformation` for organization-level identifiers. When uncertain between two values, pick the stronger protection.
Choose the narrowest value that accurately describes the field's content: `EndUserIdentifiableInformation` for data that directly identifies a person, `EndUserPseudonymousIdentifiers` for indirect identifiers, `CustomerContent` for business operational data, `SystemMetadata` for system-generated housekeeping, `AccountData` for tenant/billing, `OrganizationIdentifiableInformation` for organization-level identifiers. Use a table-level default for homogeneous tables, and override individual fields whose content differs from that default. When uncertain between two values, pick the stronger protection.
See sample: `classify-every-field-with-dataclassification.good.al`.
## Anti Pattern
Leaving `DataClassification = ToBeClassified` on a field, or omitting the property entirely (which resolves to the same default). Code in this state fails compliance audits and breaks the subject-access-request and retention tooling that depends on the property being set correctly.
Leaving `DataClassification = ToBeClassified` on a field, omitting classification when the table has no default, or relying on a table-level default that understates a field's actual content. Code in this state fails compliance audits and breaks the subject-access-request and retention tooling that depends on the property being set correctly.
See sample: `classify-every-field-with-dataclassification.bad.al`.

View file

@ -1,5 +1,5 @@
---
bc-version: [26..28]
bc-version: [all]
domain: security
keywords: [permissionset, includedpermissionsets, assignable, composition, role]
technologies: [al]
@ -9,7 +9,7 @@ application-area: [all]
# Compose permission sets with IncludedPermissionSets
> **Seed article.** Ported from BC Code Intelligence to seed the community corpus. Community contributors are invited to expand or refine.
> Contributions welcome — open a PR to refine or extend this article.
## Description

View file

@ -1,5 +1,5 @@
---
bc-version: [26..28]
bc-version: [all]
domain: security
keywords: [entitlement, permissionset, license, clipping, sandbox-drift]
technologies: [al]
@ -9,7 +9,7 @@ application-area: [all]
# Do not grant rights beyond a user's entitlement
> **Seed article.** Ported from BC Code Intelligence to seed the community corpus. Community contributors are invited to expand or refine.
> Contributions welcome — open a PR to refine or extend this article.
## Description

View file

@ -1,5 +1,5 @@
---
bc-version: [26..28]
bc-version: [all]
domain: security
keywords: [istemporary, deleteall, modifyall, safeguard, precondition]
technologies: [al]
@ -9,7 +9,7 @@ application-area: [all]
# Guard bulk operations with IsTemporary
> **Seed article.** Ported from BC Code Intelligence to seed the community corpus. Community contributors are invited to expand or refine.
> Contributions welcome — open a PR to refine or extend this article.
## Description

View file

@ -1,5 +1,5 @@
---
bc-version: [26..28]
bc-version: [all]
domain: security
keywords: [oauth2, api-key, authentication, httpclient, token-refresh]
technologies: [al]
@ -9,7 +9,7 @@ application-area: [all]
# Prefer OAuth2 over API keys for external HTTP calls
> **Seed article.** Ported from BC Code Intelligence to seed the community corpus. Community contributors are invited to expand or refine.
> Contributions welcome — open a PR to refine or extend this article.
## Description

View file

@ -1,5 +1,5 @@
---
bc-version: [26..28]
bc-version: [all]
domain: security
keywords: [temporary-table, data-protection, permission, cleanup]
technologies: [al]
@ -9,7 +9,7 @@ application-area: [all]
# Protect sensitive data in temporary tables
> **Seed article.** Ported from BC Code Intelligence to seed the community corpus. Community contributors are invited to expand or refine.
> Contributions welcome — open a PR to refine or extend this article.
## Description