Table Logic Map — Project (contoso_project)
Environment: Contoso DEV (https://contoso-dev.crm.dynamics.com) · Generated: 2026-03-01T10:00:00.000Z
Custom · User-owned · Audit on · Duplicate detection off · Change tracking on · Activities on · Notes on
3 plugin steps · 2 workflows (1 real-time / 1 background) · 2 flows · 1 business rule · 2 forms (2 handlers, 1 PCF, 1 component) · 1 key · 1 duplicate rule · 2 cascades · 1 field security profile · 1 autonumber column · 1 computed column · 2 external touchers · 2 apps · 6 views (1 quick find)
Contents
Legend
sync runs inside the database transaction and can block the save
async queued by the async service, runs after the transaction commits
real-time real-time workflow — inside the transaction, like a sync plugin
background background workflow — queued, runs after the transaction commits
client runs in the browser on the form, before the save reaches the server
instant run on demand by a user, not by a table event
rule platform data rule, enforced whenever the data changes
Smells (3)
info cascade-chain — Cascade delete chain: contoso_project → contoso_task continues 2 levels deepCascade delete removes child rows inside the same transaction, and each level fires the children's own delete logic (plugins, workflows, flows, further cascades). Chains of two or more levels make a single delete expensive, hard to predict and impossible to undo; consider Restrict or RemoveLink on one of the levels.
info disabled-clutter — Contoso.Plugins.ProjectAuditTrail: Update of contoso_project is disabledDisabled steps, draft processes and disabled handlers do not run but still show up in solutions, exports and the maker portal. They mislead readers about what the table does; remove them or document why they are kept.
info realtime-plus-plugin — Real-time workflow and sync plugin both on Update / Post-operation (sync)Dataverse runs real-time workflows as sync steps interleaved with plugins by execution order (rank 1 unless changed). When both exist on the same message and stage the effective order depends on ranks that are set in two different designers, so it is easy to break. Prefer one mechanism per message/stage or make the ranks explicit.
Pipeline (8)
Create
Execution pipeline for Create on Project (contoso_project) 6 items in 3 stages, in execution order: Pre-operation 3, After commit (async) 2, Always (data rule) 1. Alternate keys, cascades and computed columns are grouped under the "Always" stage and are not part of the ordered chain. Pre-operation (3) Contoso.Plugins.ProjectNumbering: Create of contoso_project — plugin · rank 1 · sync #1 sync · plugin Contoso.Plugins.ProjectNumbering: Create of contoso_project Project code — autonumber · rule rule · autonumber Project code Projects with the same name — duplicate rule · sync sync · duplicate rule Projects with the same name After commit (async) (2) Create kickoff tasks — workflow · background · inferred background · workflow ≈ Create kickoff tasks Notify PM "on create" [v2] — flow · async async · flow Notify PM "on create" [v2] Always (data rule) (1) Project code — key · rule rule · key Project code rule sync async background ≈ inferred
Execution order for Create
Pre-operation
#1 Contoso.Plugins.ProjectNumbering: Create of contoso_project — plugin step · sync · enabled · assembly: Contoso.Plugins · version: 1.4.0.0 · type: Contoso.Plugins.ProjectNumbering · images: PreImage (Pre: contoso_code, contoso_name) · secure config: set (never exported) · config: [configuration omitted] · touches: contoso_code
Project code — autonumber · rule · enabled · format: PRJ-{SEQNUM:5} · touches: contoso_code
Projects with the same name — duplicate rule · sync · enabled · matching table: contoso_project · status: Published · touches: contoso_name
After commit (async) (After commit — order not guaranteed)
Create kickoff tasks — workflow · background · enabled · scope: Organization · on demand · touches: contoso_accountid, contoso_name · confidence: heuristic
Notify PM "on create" [v2] — cloud flow · async · enabled · scope: Organization · run as: Flow owner
Always (data rule)
Project code — alternate key · rule · enabled · columns: contoso_code · status: Active · touches: contoso_code
Update
Execution pipeline for Update on Project (contoso_project) 6 items in 4 stages, in execution order: Pre-operation 1, Post-operation (sync) 2, After commit (async) 2, Always (data rule) 1. Alternate keys, cascades and computed columns are grouped under the "Always" stage and are not part of the ordered chain. Pre-operation (1) Projects with the same name — duplicate rule · sync sync · duplicate rule Projects with the same name Post-operation (sync) (2) Contoso.Plugins.ProjectRollup: Update of contoso_project — plugin · rank 1 · sync #1 sync · plugin Contoso.Plugins.ProjectRollup: Update of contoso_project Validate budget — workflow · real-time · inferred real-time · workflow ≈ Validate budget After commit (async) (2) Contoso.Plugins.ProjectAuditTrail: Update of contoso_project — plugin · rank 2 · async · disabled #2 off · async · plugin Contoso.Plugins.ProjectAuditTrail: Update of contoso_project Sync budget to finance — flow · async async · flow Sync budget to finance Always (data rule) (1) Project code — key · rule rule · key Project code rule sync async real-time off = disabled ≈ inferred
Execution order for Update
Pre-operation
Projects with the same name — duplicate rule · sync · enabled · matching table: contoso_project · status: Published · touches: contoso_name
Post-operation (sync) (Same rank — order between plugins and real-time workflows is not guaranteed)
#1 Contoso.Plugins.ProjectRollup: Update of contoso_project — plugin step · sync · enabled · filtering: contoso_budget, contoso_status · assembly: Contoso.Plugins · version: 1.4.0.0 · type: Contoso.Plugins.ProjectRollup · images: PostImage (Post: contoso_budget); PreImage (Pre: all columns) · touches: contoso_margin · smells: realtime-plus-plugin
Validate budget — workflow · real-time · enabled · filtering: contoso_budget · scope: Organization · touches: contoso_budget, contoso_margin · confidence: heuristic · smells: realtime-plus-plugin
After commit (async) (After commit — order not guaranteed)
#2 Contoso.Plugins.ProjectAuditTrail: Update of contoso_project — plugin step · async · disabled · filtering: any column · assembly: Contoso.Plugins · version: 1.2.0.0 · type: Contoso.Plugins.ProjectAuditTrail · images: PreImage (Pre: all columns) · smells: disabled-clutter
Sync budget to finance — cloud flow · async · enabled · filtering: contoso_budget, contoso_margin · scope: Organization · filter: statecode eq 0 · run as: Flow owner
Always (data rule)
Project code — alternate key · rule · enabled · columns: contoso_code · status: Active · touches: contoso_code
Delete
Execution pipeline for Delete on Project (contoso_project) 1 items in 1 stages, in execution order: Always (data rule) 1. Alternate keys, cascades and computed columns are grouped under the "Always" stage and are not part of the ordered chain. Always (data rule) (1) Delete → Cascade to contoso_task — cascade · rule rule · cascade Delete → Cascade to contoso_task rule
Execution order for Delete
Always (data rule)
Delete → Cascade to contoso_task — cascade · rule · enabled · child: contoso_task · via: contoso_projectid · behaviour: Cascade · relationship: contoso_project_tasks · smells: cascade-chain
Assign
Execution pipeline for Assign on Project (contoso_project) 1 items in 1 stages, in execution order: Always (data rule) 1. Alternate keys, cascades and computed columns are grouped under the "Always" stage and are not part of the ordered chain. Always (data rule) (1) Assign → Cascade to contoso_task — cascade · rule rule · cascade Assign → Cascade to contoso_task rule
Execution order for Assign
Always (data rule)
Assign → Cascade to contoso_task — cascade · rule · enabled · child: contoso_task · via: contoso_projectid · behaviour: Cascade · relationship: contoso_project_tasks
Execution pipeline for FormLoad on Project (contoso_project) 4 items in 1 stages, in execution order: Client (form) 4. Alternate keys, cascades and computed columns are grouped under the "Always" stage and are not part of the ordered chain. Client (form) (4) Contoso.Controls.BudgetGauge — PCF · client client · PCF Contoso.Controls.BudgetGauge Contoso.Project.onLoad — script · client client · script Contoso.Project.onLoad Default region — business rule · rule · inferred rule · business rule ≈ Default region IFrame: IFRAME_Portal — component · client client · component IFrame: IFRAME_Portal client rule ≈ inferred
Execution order for FormLoad
Client (form)
Contoso.Controls.BudgetGauge — PCF control · client · enabled · form: Project · column: contoso_budget · tab: General · section: Financials · touches: contoso_budget
Contoso.Project.onLoad — form script · client · enabled · form: Project · library: contoso_/scripts/project.js · function: Contoso.Project.onLoad · form event: onload
Default region — business rule · rule · enabled · form: Project · scope: Form · actions: SetDefaultValue, SetVisibility · touches: contoso_region · confidence: heuristic
IFrame: IFRAME_Portal — form component · client · enabled · form: Project · type: IFrame · url: https://portal.contoso.com/projects?… · tab: Portal · section: Portal
Execution pipeline for FormSave on Project (contoso_project) 1 items in 1 stages, in execution order: Client (form) 1. Alternate keys, cascades and computed columns are grouped under the "Always" stage and are not part of the ordered chain. Client (form) (1) Name — required · client client · required Name client
Execution order for FormSave
Client (form)
Name — required column · client · enabled · level: ApplicationRequired · touches: contoso_name
FieldChange
Execution pipeline for FieldChange on Project (contoso_project) 2 items in 1 stages, in execution order: Client (form) 2. Alternate keys, cascades and computed columns are grouped under the "Always" stage and are not part of the ordered chain. Client (form) (2) Contoso.Project.onRegionChange — script · client client · script Contoso.Project.onRegionChange Default region — business rule · rule · inferred rule · business rule ≈ Default region client rule ≈ inferred
Execution order for FieldChange
Client (form)
Contoso.Project.onRegionChange — form script · client · enabled · filtering: contoso_region · form: Project · library: contoso_/scripts/project.js · function: Contoso.Project.onRegionChange · form event: onchange
Default region — business rule · rule · enabled · filtering: contoso_accountid · form: Project · scope: Form · actions: SetDefaultValue, SetVisibility · touches: contoso_region · confidence: heuristic
Any
Execution pipeline for Any on Project (contoso_project) 3 items in 1 stages, in execution order: Always (data rule) 3. Alternate keys, cascades and computed columns are grouped under the "Always" stage and are not part of the ordered chain. Always (data rule) (3) Auditing — audit · rule rule · audit Auditing Finance managers — field security · rule rule · field security Finance managers Margin — formula · rule · inferred rule · formula ≈ Margin rule ≈ inferred
Execution order for Any
Always (data rule)
Auditing — audit · rule · enabled · note: Auditing is on for the organization and for the table; audited columns are recorded on Create, Update and Delete.
Finance managers — field security profile · rule · enabled · profile: Finance managers · touches: contoso_confidentialnotes
Margin — formula column · rule · enabled · formula: contoso_budget * 0.2 · touches: contoso_budget · confidence: heuristic
Libraries: contoso_/scripts/project.js
Handlers
Event Column / control Function Library Enabled Pass context Parameters
onload — Contoso.Project.onLoad contoso_/scripts/project.js yes yes —
onchange contoso_region Contoso.Project.onRegionChange contoso_/scripts/project.js yes yes "EMEA|APAC"
PCF and components
Type Name Column Location Details
PCF Contoso.Controls.BudgetGauge contoso_budget General › Financials region body
IFrame IFrame: IFRAME_Portal — Portal › Portal url https://portal.contoso.com/projects?…, region body
Business rules: Default region (form)
Libraries: none
Handlers
None
PCF and components
None
Business rules: none
Columns (10)
10 of 14 columns with logic (triggers, touched by, required, secured, audited or computed).
Column Display name Type Flags Source Triggers Touched by
contoso_accountid Customer Lookup — simple Default region Create kickoff tasks
contoso_budget Budget Money audited simple Contoso.Plugins.ProjectRollup: Update of contoso_project, Sync budget to finance, Validate budget Contoso.Controls.BudgetGauge, Margin, Validate budget
contoso_code Project code String — autonumber PRJ-{SEQNUM:5} — Contoso.Plugins.ProjectNumbering: Create of contoso_project, Project code
contoso_confidentialnotes Confidential notes Memo secured simple — Finance managers
contoso_margin Margin Decimal — formula Sync budget to finance Contoso.Plugins.ProjectRollup: Update of contoso_project, Validate budget
contoso_name Name String required, audited simple — Create kickoff tasks, Name, Projects with the same name
contoso_projectid Project Uniqueidentifier required simple — —
contoso_region Region Picklist — simple Contoso.Project.onRegionChange Default region
contoso_status Project status Picklist — simple Contoso.Plugins.ProjectRollup: Update of contoso_project —
ownerid Owner Owner required, system simple — —
Data rules
Keys
Project code (Active): contoso_code
Duplicate rules
Projects with the same name (Published) — contoso_project ↔ contoso_projectcontoso_name ↔ contoso_name (Exact Match, ignore blanks)
Cascades
contoso_project → contoso_task (via contoso_projectid)Assign: Cascade Delete: Cascade (chain depth 2)
Field security profiles
Finance managers: contoso_confidentialnotes (read Allowed, create Not Allowed, update Allowed)
Audit
Auditing: effective (organization on, table on) — Auditing is on for the organization and for the table; audited columns are recorded on Create, Update and Delete.
Audited columns: contoso_budget, contoso_name
Required columns
contoso_name (Name), contoso_projectid (Project), ownerid (Owner)
Touched by (2)
Flows and actions that read or write contoso_project without being triggered by it.
Write
Close stale projects — cloud flow · disabled · trigger: recurrence · operations: ListRecords (List_stale_projects), UpdateRecord (Apply_to_each/Update_project) · touches: statecode, statuscode
Read
Weekly project digest — cloud flow · enabled · trigger: recurrence · operations: ListRecords (List_projects)
Apps (2)
App Unique name State Managed
Contoso Field Service contoso_FieldService Active yes
Project Hub contoso_ProjectHub Active no
Other dependencies (1)
Components that depend on the table and are not represented above (views, charts, dashboards, ...).
Component type Name Object id
Saved Query (26) Active Projects e1f2a3b4-00a1-4000-8000-0000000000a1
Source errors (1)
customApis (permission): HTTP 403: Principal user is missing prvReadCustomAPI privilege — this map is missing what that source would have found