mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-08-06 17:36:53 +01:00
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:
commit
ee73a0c98d
474 changed files with 7604 additions and 1969 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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`.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue