# Solving Dynamics 365 — full text > A practical reference for Microsoft Dynamics 365, Business Central, and the Microsoft business apps ecosystem — guides, comparisons, pricing, troubleshooting, and a glossary. Author: Emil Björk, Microsoft business apps consultant, Gothenburg. Canonical site: https://www.solvingdynamics365.com. Index: https://www.solvingdynamics365.com/llms.txt. Each section below is one page; cite the URL on its "Source:" line. Dates are ISO (YYYY-MM-DD); "Updated" is the last substantive revision. --- # 1099 reporting for US in Dynamics 365 Finance How F&O handles US 1099 reporting — vendor classification, 1099 boxes, year-end generation, e-filing, and the recipient-copy distribution. Source: https://www.solvingdynamics365.com/guides/1099-reporting-in-f-and-o Section: Finance & SCM / Finance Published: 2026-06-20 Updated: 2026-08-25 In the United States, **1099 reporting** is the annual obligation to report payments made to certain types of vendors — independent contractors, professional services providers, attorneys, royalty recipients, interest recipients — to the **Internal Revenue Service (IRS)** and to the vendors themselves. Dynamics 365 Finance handles 1099 reporting natively for US-localised companies, with the workflow that turns transactional data into compliant filings. ## The 1099 forms Different forms apply to different payment types: - **1099-MISC** — miscellaneous income including rent, prizes, awards, medical / health payments. - **1099-NEC** — non-employee compensation; the dominant form for contractor payments (separated from MISC in tax year 2020). - **1099-INT** — interest paid. - **1099-DIV** — dividends paid. - **1099-K** — payments via third-party payment networks (Stripe, PayPal-style). - **1099-G** — government payments. - **1099-R** — distributions from pensions, retirement accounts. Each form has multiple **boxes** corresponding to different income categories within the form. ## Vendor 1099 classification Each vendor in F&O carries: - **Tax ID (TIN / EIN / SSN)** — the vendor's tax identifier; required for 1099 reporting. - **1099 form code** — which form applies (MISC, NEC, INT, etc.). - **1099 box** — which box within the form the payments report to. - **1099 minimum threshold** — payments below this amount per year aren't reported (default $600 for NEC, varies by form/box). Setting vendor 1099 classification correctly at onboarding is operationally critical — wrong classification at year-end leads to wrong filings. ## W-9 collection Best practice: collect a signed IRS **Form W-9** from every potentially-1099-eligible vendor before the first payment. The W-9 confirms the vendor's TIN and 1099 status. Without a valid W-9, the IRS requires backup withholding (typically 24%) on subsequent payments — substantial vendor friction. ## Backup withholding When backup withholding applies: - Each payment to the vendor withholds the configured percentage. - The withheld amount is remitted to the IRS separately. - Documented in F&O alongside the original payment. Most companies avoid backup withholding by collecting W-9s upfront; the cost of collecting upfront is much less than the operational burden of withholding and remittance. ## Year-end 1099 generation The annual workflow: 1. **Verify vendor data.** Audit every 1099-eligible vendor — TIN present, classification correct, address current. Vendors with errors hold up the year-end process. 2. **Validate transactions.** Identify all payments made during the tax year to 1099-eligible vendors. Confirm classifications. 3. **Run the 1099 statement.** F&O's **1099 statements** routine aggregates per vendor, per form, per box — preparing the report data. 4. **Review and adjust.** Some adjustments are typical: - Manual additions for non-AP payments (advance payments, payments made outside the system). - Manual exclusions for payments incorrectly classified. - Threshold checks. 5. **Generate the forms.** F&O produces: - **Vendor copies** — printable forms or digital PDFs distributed to each vendor. - **IRS filing** — the consolidated submission (paper or electronic). 6. **Distribute.** Vendor copies must reach vendors by January 31 of the following year for most forms. 7. **File with IRS.** Filing deadlines vary by form: - 1099-NEC: January 31. - 1099-MISC (paper): February 28. - 1099-MISC (electronic): March 31. - Penalties for late filing escalate by lateness duration. ## Electronic filing (e-filing) For 10+ forms, the IRS requires e-filing through their **FIRE** (Filing Information Returns Electronically) system or **IRIS** (newer Information Returns Intake System). F&O produces the file in the required format; the customer submits through the IRS portal. ## State 1099 Many US states also require 1099 reporting: - Some states participate in the **Combined Federal/State Filing Program (CFSF)** — federal filing also satisfies state. - Others require separate state filings with state-specific formats. F&O's localisation handles state-specific variations where the partner localisation has implemented them; verify per state. ## Corrections Issued 1099s that need correction: - **Corrected forms** — issued to vendor and IRS with a corrected indicator. - **Voided forms** — for filings that should be withdrawn entirely. Tracking correction history is part of the audit trail. **Common pitfalls.** - **Wrong vendor classification.** Treating a vendor as 1099-eligible when they shouldn't be (or vice versa) leads to wrong filings. - **Missing TINs.** Without a TIN, the form can't be filed. - **Late delivery to vendors.** Vendors who don't receive 1099s on time can't complete their own tax returns; relationship damage. - **Wrong box assignments.** Payments report under the wrong category. ## Operational reality US 1099 reporting is unglamorous but unforgiving. The IRS penalises errors and late filings. Year-end 1099 work should start in November (data clean-up) for January-end distribution. Mature operations have a documented runbook executed annually. --- # ABC analysis and slow-moving items in Business Central How to identify high-value and slow-moving inventory in Business Central — ABC classification, inventory ageing, and the operational actions that follow. Source: https://www.solvingdynamics365.com/guides/abc-analysis-and-slow-moving-items-in-bc Section: Business Central / Inventory & warehouse Published: 2026-05-29 Updated: 2026-08-25 Inventory is never uniform — some items drive most of the revenue and warrant tight control; others are dead weight tying up capital. **ABC analysis** and **slow-moving inventory** identification are the analytical lenses that separate which is which. Business Central includes both natively; the operational actions that follow are what produce the business value. ## ABC analysis — the principle The classic Pareto observation: typically 80% of revenue (or value) comes from 20% of SKUs. Inventory management benefits from segmenting accordingly: - **A-class items** — ~10–20% of SKUs, ~70–80% of value. Tight control: weekly cycle counts, low safety stock, frequent supplier relationships, narrow reorder windows. - **B-class items** — ~30–40% of SKUs, ~15–20% of value. Standard control: monthly counting, moderate safety stock, regular reordering. - **C-class items** — ~50–60% of SKUs, ~5–10% of value. Loose control: annual counting, larger safety stock, infrequent reordering, possibly Min/Max replenishment. ## ABC analysis in Business Central The platform supports ABC analysis through: - **Item statistics** — sales and consumption data per item over a period. - **ABC analysis report** — segments items by chosen criteria (revenue, gross profit, units sold, cost) into A / B / C tiers based on configurable percentages. - **Item classification field** — store the ABC class on each item card; routines can update it periodically. ## Configuration of the analysis Choose: - **Period** — last 12 months, last quarter, year-to-date. Longer periods smooth noise; shorter periods reflect recent shifts. - **Criterion** — by sales value, by cost value, by gross profit, by units sold. Different criteria produce different segmentations. - **Tier thresholds** — A = top 80%, B = next 15%, C = remaining 5% (configurable). - **Scope** — all items, by item category, by location. ## Acting on ABC classifications The classification itself does nothing; the operational actions that follow create value: - **A items**: counting periods set to weekly. Safety stock reviewed quarterly. Supplier diversification considered (single-supplier risk on A items is high). Reorder points tight to minimise capital while avoiding stockouts. - **B items**: standard treatment. Mid-frequency cycle counting. Moderate safety stock. - **C items**: loose treatment. Annual counting. Larger safety stock (cost of holding is low; cost of stockout is also low for slow movers). ## Slow-moving inventory Beyond ABC, identifying items that *aren't moving* is critical. Slow movers consume warehouse space, tie up capital, become obsolete, and eventually require write-downs. ## Slow-moving identification Business Central reports surface: - **Items with no sales in N days / months** — pure no-movement. - **Items with declining velocity** — selling, but at slower and slower rates. - **Items with high inventory days on hand** — substantial stock relative to demand. - **Items past expected sell-through date** (configurable). Generated reports list candidates; the inventory team reviews and acts. ## Inventory ageing A complementary view: how long has inventory been sitting? Items can be old in two ways: - **Lot ageing** — the lot is approaching expiry. Action: prioritise pick or initiate write-off. - **Receipt ageing** — items received N months ago and still on hand. Action: investigate why; possibly markdown, return to vendor, write off. For perishable items (food, pharma, chemicals), receipt ageing is a daily operational concern; lot ageing drives picking priorities (FEFO — first-expired-first-out). **Actions on slow movers.** - **Markdown** — reduce price to clear. The slow-moving discount is a sales-team-and-finance decision. - **Bundle** — combine slow movers with fast-movers in promotional bundles. - **Return to vendor** — for vendor-returnable items, return for credit before they become unsalvageable. - **Write off** — for items beyond hope, write off to inventory adjustment. - **Discontinue** — block from purchase; sell down inventory then retire. - **Move to satellite locations** — sometimes slow movers in one location are normal-pace elsewhere; reallocate. ## Reporting Pre-built reports cover ABC analysis, slow-moving inventory, inventory ageing. Power BI dashboards extend with cross-cutting analysis — slow movers by customer segment, by supplier, by item category. **Common pitfalls.** - **No classification routine** — ABC analysis runs once at implementation and never updates. Market dynamics shift; classifications go stale. - **Slow movers ignored** — reports surface them; nobody acts. Capital accumulates indefinitely. - **Wrong period for ABC** — using last-12-months for a fast-changing fashion business hides recent reality. - **Markdowns without strategy** — random discounting that erodes margin without clearing inventory. ## Operational discipline Run ABC analysis quarterly. Review slow movers monthly. Action — actually adjust safety stock, counting periods, supplier discussions, markdowns. Without action, the analysis is just reports. --- # Accessibility in Dynamics 365 apps How Dynamics 365 supports accessibility — keyboard navigation, screen readers, colour contrast, ARIA, and the requirements for compliance with WCAG. Source: https://www.solvingdynamics365.com/guides/accessibility-in-dynamics-365-apps Section: Foundations / Productivity & UX Published: 2026-05-01 Updated: 2026-08-25 Accessibility — designing apps so that users with disabilities can use them effectively — is a legal requirement in many jurisdictions and an ethical baseline everywhere. Dynamics 365 ships with accessibility features in standard pages and components; customisations can reduce or improve accessibility. Understanding the baseline and how to preserve it during customisation is essential. **The standards.** - **WCAG (Web Content Accessibility Guidelines)** — international standard from W3C. - **WCAG 2.1 AA** — common compliance target. - **WCAG 2.2 AA** — newer; some additional criteria. - **Section 508 (US)** — federal requirement; references WCAG. - **EN 301 549 (Europe)** — public sector procurement; references WCAG. - **ADA (US)** — Title III applies to private organisations; often referenced as WCAG-equivalent in practice. Most organisations target WCAG 2.1 AA as the working standard. **Microsoft's accessibility commitment.** - Microsoft publishes Voluntary Product Accessibility Templates (VPATs) for Dynamics 365 products. - Standard pages are designed with accessibility in mind. - Accessibility is part of the product development standards. VPATs are useful evidence for procurement compliance. **What standard Dynamics 365 provides.** - **Keyboard navigation** through forms, views, and commands. - **Screen reader support** — Narrator, JAWS, NVDA work with model-driven apps and canvas apps. - **High contrast modes** — Windows high contrast respected. - **Scalable text** — browser zoom up to 200%. - **Logical tab order** — focus moves predictably. - **ARIA labels** on standard controls. - **Skip navigation** — jump past repeated headers. For an un-customised app, baseline accessibility is reasonable. **Where customisation breaks accessibility.** - **Custom JavaScript** that intercepts keyboard events without preserving accessibility. - **PCF controls** without ARIA attributes. - **Custom forms** with poor tab order. - **Inaccessible third-party embeds** — iframes, web resources. - **Colour-only information** — status communicated only through colour. - **Missing labels** on custom controls. Each is a regression from baseline; cumulative impact significant. **Power Apps canvas — accessibility considerations.** - **AccessibleLabel** property on controls — set this on every input. - **Logical TabIndex** — preserves keyboard navigation order. - **Color contrast** — built-in App Checker flags low-contrast. - **Avoid colour-only communication** — pair colour with icon or text. - **Screen reader support** — verify each screen with NVDA or Narrator. App Checker (built into Power Apps Studio) flags many accessibility issues at design time. **Model-driven app accessibility.** - **Form layouts** — sections labeled; controls have labels. - **Sub-grids** — accessible by default; verify custom views. - **Ribbon and command bar** — keyboard accessible. - **Custom forms via JavaScript** — JavaScript can introduce regressions; test. **Power Pages accessibility.** - **Web template authors** must follow web accessibility practices. - **Liquid templates** — ensure semantic HTML. - **Custom CSS** — preserve focus styles; don't remove outlines. - **Forms** — labels, fieldsets, proper input types. Power Pages is web; full web accessibility practices apply. **Voice and screen reader testing.** - **Test with actual screen readers** — NVDA (free), JAWS, Narrator. - **Keyboard-only** test — disable mouse for a session. - **High contrast mode** test — Windows high contrast enabled. - **Browser zoom** to 200% — verify layout doesn't break. These tests reveal issues that visual review misses. **Common accessibility failures.** - **Custom button without keyboard support** — only mouse-clickable. - **Form field without label** — screen reader announces "edit text" only. - **Colour-only state indicator** — "red means error" invisible to colour-blind. - **Modal dialogs without focus management** — focus stuck behind dialog. - **Custom dropdowns** — keyboard navigation broken. - **Image without alt text** — screen reader skips meaningful image. **Common pitfalls in development.** - **Accessibility tested at end.** Far cheaper to fix issues during development. - **No accessibility champion.** No one owns the accessibility story; gaps accumulate. - **Reliance on automated tools alone.** Automated tools catch ~30% of issues; manual testing essential. - **Customisations not VPAT-evaluated.** Microsoft VPAT covers standard product; customisations need their own evaluation. - **Regression after release.** Updates introduce regressions; periodic re-audit needed. **Audit and certification.** - **Internal audit** — periodic accessibility review by trained staff. - **External audit** — formal review by accessibility specialists. - **VPAT** — for procurement compliance with US federal agencies and others. - **Continuous monitoring** — automated tools (axe, WAVE) running in CI. **Accessibility in design phase.** - **Wireframes reviewed** for accessibility before build. - **Colour palette validated** for contrast. - **User journeys checked** for keyboard completability. Catching issues at design is cheaper than fixing post-build. **Operational rhythm.** - **Per release** — automated accessibility check in CI; spot-check by humans. - **Quarterly** — fuller audit of high-traffic surfaces. - **Annually** — full external audit for compliance evidence. - **On regression** — fix and re-audit affected surfaces. ## Strategic positioning Accessibility is non-negotiable for many organisations: - **Public sector** — legal requirement. - **Regulated industries** — often explicit standards. - **Multi-national** — Europe, Canada, Australia have strong requirements. - **Customer-facing portals** — ADA-style lawsuits a real risk in US. For internal-facing Dynamics deployments, accessibility broadens who can be hired and supported. For external-facing, it's a compliance and inclusion baseline. The investment is modest if built in early; expensive if retrofitted. Build accessibility practices into design, build, and deployment processes from the start. The payback is in compliance, in user inclusion, and in avoiding costly retrofits or legal action. Most modern organisations should treat accessibility as foundational, not optional. --- # Account hierarchies in Dynamics 365 How Dynamics 365 models corporate parent-subsidiary relationships — account hierarchy field, hierarchy charts, security, and reporting roll-up. Source: https://www.solvingdynamics365.com/guides/account-hierarchies-in-dynamics-365 Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Updated: 2026-08-25 For B2B sellers, the *account* is rarely flat — customers are organisations with parent companies, subsidiaries, divisions, regional offices, and operating units. Dynamics 365 models these relationships through **account hierarchies**, with reporting, security, and visualisation that respects the corporate structure. ## The hierarchy field Each **Account** record carries a **Parent Account** lookup. Setting Parent Account on a subsidiary creates the hierarchy edge — Subsidiary → Parent. Parent accounts can themselves have parents, building a tree of arbitrary depth. ## Hierarchy charts Dynamics 365 ships built-in **hierarchy visualisation** for any record type with a hierarchical relationship. On an account form, the hierarchy chart shows the current account in context — parents above, children below, with key fields displayed per node. Clicking a node navigates to that record. This is the standard way sellers see "who else in this organisation are we engaged with". ## Roll-up reporting Several aggregation patterns operate over the hierarchy: - **Roll-up rollup columns** — Dataverse rollup columns can compute *across the hierarchy*. A "Total opportunity revenue from this account and all descendants" column gives executives a single number per top-level account, summed from every child. - **Aggregate views** — saved views can include child records, e.g. "All open opportunities for this account family". - **Forecasting** — sales forecasting can aggregate by account hierarchy, so a Global Account Director sees pipeline across every subsidiary they touch. ## Security through hierarchy **Hierarchy security** is an additional scope dimension on Dataverse security roles: - **Manager hierarchy security** — managers see records owned by their direct or indirect reports. - **Position hierarchy security** — uses configured position hierarchies for the same purpose. Account hierarchy itself doesn't drive security directly (unlike manager hierarchy); accounts under different owners remain owner-scoped. But custom security configurations can route access based on account hierarchy if business logic demands. ## Sales motions Account hierarchies enable several sales motions: - **Global account management.** Strategic accounts with global reach get a single Global Account Director who sees every subsidiary's opportunities, contracts, cases, and service. Subsidiary-level sellers continue managing day-to-day; the GAD coordinates at the parent level. - **Cross-sell and up-sell.** Knowing the full corporate footprint reveals expansion opportunities — three subsidiaries already buy Product A; the fourth subsidiary hasn't, suggesting a target. - **Risk view.** A case escalation at one subsidiary surfaces to the global account team to manage the relationship beyond the local context. ## Marketing implications Marketing campaigns can target by hierarchy — campaign to all subsidiaries of strategic parent accounts. Customer Insights – Journeys segments respect the hierarchy. ## Customer Service implications Cases on subsidiaries can roll up to a parent-level account view, so a parent account manager sees aggregated service issues across the family — useful for QBRs and account-health reviews. ## Limits Account hierarchies are simple parent-child trees. Complex matrix organisations (a subsidiary belongs to two parents through different functions) are awkward; companies that need this typically use **custom relationship modelling** — a *Connected Accounts* custom table or related-record approach — alongside the standard hierarchy. **Common pitfalls.** - **Incomplete data** — only some subsidiaries have Parent Account set. Hierarchy views misrepresent the truth. - **Wrong direction** — parent and child reversed; reports show wrong totals. - **Mergers and acquisitions** — when a parent acquires another company, hierarchy needs updating; often forgotten. - **Over-deep hierarchies** — 10-level deep trees become hard to navigate. Flatten where business logic doesn't require depth. ## Operational reality A clean account hierarchy is a leverage point — the same data drives sales reporting, marketing segmentation, service routing, and finance reporting. Invest in keeping it current. --- # Account schedules and financial reports in Business Central How Business Central's account schedules and the newer Financial Reports feature work — and how to build P&L and balance sheet reports without leaving BC. Source: https://www.solvingdynamics365.com/guides/business-central-account-schedules-and-financial-reports Section: Business Central / Finance & accounting Published: 2026-05-01 Updated: 2026-08-25 Business Central ships with a row-and-column reporting engine for financial statements that long predates Power BI. It's old-fashioned, fast, and good enough that many companies never need an external BI tool for monthly management accounts. ## Account schedules and Financial Reports The original feature is called **Account Schedules**. Microsoft is gradually rebranding it to **Financial Reports**, with a refreshed UI on top of the same engine. Both names refer to the same underlying capability: define a list of rows pointing to GL accounts or dimensions, define a list of columns covering periods, comparisons, or calculations, and the system renders a structured report. ## Row definitions A **row definition** lists report lines. Each line references one or more GL accounts (by number, by range, or by category), or another row by *totalling formula*, with formatting (bold, italic, indent) and optional drill-down. Rows can be hidden when zero, bold when negative, or constrained to a single dimension value. This is how you build a P&L: revenue lines, gross profit subtotal, operating expense rollups, EBITDA, depreciation, financial expenses, net profit. ## Column definitions A **column definition** lists report columns. Each column is a period (current, prior, year-to-date, budget), a comparison (variance, variance %), or a formula across other columns. Columns can be dimension-filtered, so you can split a single account across departments side by side. ## Combining them You attach a column definition to a row definition to get a runnable report. The same row definition (e.g. "Standard P&L") can be combined with several column definitions ("Month vs Budget", "Month vs Last Year", "Year-to-date vs Plan"). ## Dimensions and consolidations Account schedules respect dimensions throughout, which is how single-row, multi-cost-centre reports work without duplicate accounts. ## Excel and Power BI Reports can be **scheduled to email** as PDF or Excel, opened in Excel for ad-hoc editing, or exported to **Power BI** for distribution. Excel integration is two-way for some report types. ## Limits Account schedules are tabular; they don't do charts, parameter prompts beyond date and dimensions, or row-level conditional formatting beyond signed values. For sophisticated visualisation you use Power BI. For solid month-end P&L and balance sheet, Account Schedules earn their keep. --- # Aging reports in Business Central How Business Central's aging reports work — AR aging, AP aging, date-driven buckets, customisation, and the operational use in collections and cash management. Source: https://www.solvingdynamics365.com/guides/aging-reports-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 Updated: 2026-08-25 Aging reports are the standard analytical lens for **accounts receivable** and **accounts payable** — how old are the open balances, where is the risk concentrated, where is the cash-flow opportunity. Business Central ships several aging reports with configurable buckets, dimension filters, and Excel / PDF export. Understanding them is essential for AR/AP-led teams. ## Customer aging — the standard The **Aged Accounts Receivable** report: - Lists every customer with an open balance as of a chosen date. - Splits each customer's balance into **aging buckets** — typically 0–30 days, 31–60, 61–90, over 90, with the report date as the anchor. - Aging based on **due date** (the default) or **document date** depending on the parameter. - Per-customer totals with overall company total. - Outputs as printed report, PDF, or Excel for deeper analysis. Buckets are configurable per run — for tight cash-flow management you might use weekly buckets (0–7, 8–14, 15–21, 22+ days); for general aging the monthly buckets are standard. ## Vendor aging — the mirror The **Aged Accounts Payable** report has the same structure for vendor open balances. Used by AP teams to prioritise payment runs, identify ageing supplier liabilities, and manage cash-out timing. ## Dimensions and filters Aging reports accept filters: customer / vendor selection, salesperson, department dimension, payment terms. Useful when one team handles strategic accounts separately from the rest. ## Currency Multi-currency tenants see aging in: - **Local currency** — converted at posting rates. - **Original currency** — the customer's transactional currency. Toggleable per run. For multi-currency analysis, the currency-converted view is the standard. ## Detail vs summary Two flavours: - **Summary** — one row per customer, aging-bucket totals across. - **Detail** — one row per open document, with aging-bucket allocation. Used for investigating large accounts or specific overdue invoices. ## As-of date Aging is typically run as-of the current date, but the report supports historical as-of dates — useful for reproducing audit positions, comparing aging over time, or analysing collection performance. ## Integration with reminders Aging reports identify the customers and amounts that need reminder action. The reminder routine consumes the same underlying ledger data and proposes reminders for entries past their due date. ## Integration with Power BI Pre-built Power BI templates for BC include aging visualisations: - AR aging heatmap (customer × bucket). - Trending aging over time. - Top-overdue customers list. - AR-as-% of total revenue by month. - DSO (Days Sales Outstanding) trend. For interactive analysis, Power BI is preferable to the static aging report. ## DSO and DPO Beyond aging buckets, two derived metrics: - **DSO (Days Sales Outstanding)** — average time to collect, computed as AR / average daily revenue. Trend matters more than absolute value. - **DPO (Days Payable Outstanding)** — average time taken to pay, AP / average daily expense. Standard health-of-AR/AP signals. BC doesn't ship native DSO/DPO reports; they're computed in Power BI or Excel from the underlying data. **Common pitfalls.** - **Aging by document date instead of due date** — looks worse than reality for customers with long payment terms. Default to due date. - **Ignoring credit memos** — credit memos reduce open balance; aging that doesn't apply them shows inflated outstanding. - **Customer with only payments on account** — appears with negative balance, sometimes confusing. Investigate the application status. - **Stale aging** — running once a quarter and reacting only at quarter-end. Run weekly during active collections. ## Operational reality Aging reports are the daily currency of credit / collections / treasury work. Embed them into the morning routine; act on them; iterate the collection process based on what they show. --- # AI Builder document automation, in depth How AI Builder's document automation works — pre-built models, custom training, output structure, and the right way to integrate it with Dynamics 365. Source: https://www.solvingdynamics365.com/guides/ai-builder-document-automation-in-depth Section: Power Platform / Copilot & AI Published: 2026-05-01 Updated: 2026-08-25 **Document automation** in AI Builder turns PDF, image, and Office document inputs into structured data that flows into Power Apps, Power Automate, and Dynamics 365. It's the workhorse AI capability behind invoice processing, ID-document capture, receipt extraction, and dozens of other business automations. Understanding what it does well — and where it falls short — saves projects. ## Pre-built models Microsoft ships ready-to-use models trained on millions of documents: - **Invoice processing** — extracts vendor name, address, invoice number, date, total, tax, line items, currency. Works for most standard invoice layouts in major languages. - **Receipt reader** — extracts merchant, date, total, line items, payment method. - **ID reader** — extracts ID number, name, date of birth, expiry from passports, driving licences, national IDs of supported countries. - **Business card reader** — extracts contact data from a business card image. - **Text recognition (OCR)** — generic OCR for any printed or handwritten text. Pre-built models require no training; call them and they return structured JSON. ## Custom models When the document layout is specific (a particular vendor's invoice, a custom shipping document, a tailored expense form), you train a **custom document processing model**: 1. Upload sample documents (typically 5–50 examples per layout). 2. Tag the fields to extract — click on the value in each sample, name the field. 3. Train. AI Builder processes for 10–30 minutes and emits a model with reported accuracy. 4. Test on held-out samples; retrain if accuracy is low. 5. Publish. Custom models support both **field-level extraction** (single values like Invoice Total) and **table extraction** (line items with multiple columns). ## Hybrid: pre-built + custom For unusual vendor invoices that the pre-built invoice model handles poorly, train a custom model just for those vendors and route to it conditionally. Combining the two is common. ## Integration with Dynamics 365 The standard pattern: 1. A document arrives — uploaded to BC's Incoming Documents, dropped in a SharePoint folder, attached to a Dataverse record, or received as an email attachment. 2. A Power Automate flow triggers, passes the document to an AI Builder model. 3. The model returns the structured extraction. 4. The flow validates, transforms, and creates the appropriate Dynamics 365 record — a draft purchase invoice in BC, a Dataverse case, an expense entry in Project Operations. 5. A human reviews, corrects (the corrections feed back as model retraining data), and posts. ## Output structure Each model returns a JSON object with field names, values, and confidence scores. Flows can branch on confidence — high-confidence extractions auto-post; low-confidence go to human review. ## Accuracy and feedback Custom models report training and held-out accuracy. Real-world accuracy depends on document quality (scanned vs digital), layout consistency, and language. Build the feedback loop: every human correction is retraining data; periodic retraining keeps the model current. **Limits.** - Hand-written documents are harder than typed. - Very poor scan quality degrades all models. - Languages beyond the top 20 have less coverage in pre-built models. - Very complex multi-table layouts may need pre-processing (split into pages, region-of-interest) before extraction. ## Credits AI Builder runs on a credit model — each model invocation consumes credits from the tenant's pool. Budget credits against expected volume; capacity add-ons are available. ## Operational reality Don't aim for 100% automation. Aim for 80% extraction accuracy with 20% human review; productivity gains are dramatic, edge cases stay safe. --- # AI Builder explained Microsoft's no-code AI model library inside the Power Platform — pre-built models, custom training, and what AI Builder is good at. Source: https://www.solvingdynamics365.com/guides/ai-builder-explained Section: Power Platform / Copilot & AI Published: 2026-05-01 Updated: 2026-08-25 **AI Builder** is the no-code machine-learning capability inside the Power Platform. It exists to put trained ML models in the hands of makers — citizen developers, business analysts, power users — without needing data scientists, Python notebooks, or Azure ML knowledge. For Dynamics 365 customers, AI Builder is the cheap, fast way to add AI to a Power App or Power Automate flow without an enterprise data-science programme. ## Pre-built models Microsoft ships ready-to-use models for common business tasks: - **Form processing** — extract structured data from invoices, receipts, IDs, and custom forms with a UI for training on samples. - **Object detection** — locate and count objects in images (boxes, pallets, equipment). - **Sentiment analysis** — score text for positive/negative/neutral tone across many languages. - **Key phrase extraction** — pull out salient terms from text. - **Language detection** — identify the language of a document. - **Text translation** — translate between languages. - **Business card reader** — extract name, title, email, phone from a card image. - **Receipt reader** — extract structured line items from receipt photos. - **Text recognition (OCR)** — extract printed and handwritten text from images. - **Category classification** — classify text into a custom taxonomy. ## Custom models Beyond the pre-built set, AI Builder supports **custom-trained models** for prediction, category classification, entity extraction, and form processing. Training is point-and-click: provide labelled data from Dataverse or a file, the system trains, and reports accuracy. Re-training on a schedule keeps models current. ## Where models run Trained models live as **AI Builder assets** in an environment. They're invoked from: - **Power Automate** flows — call the model as an action; pass inputs, receive outputs. - **Power Apps** — invoke the model from a button or screen. - **Dataverse plug-ins** — call from server-side logic. - **Direct APIs** — for programmatic use. ## Integration with Dynamics 365 Common use cases: - **Invoice automation** — receipts and invoices arrive in a shared mailbox, AI Builder extracts data, a flow posts a draft vendor invoice in Business Central or F&O. - **Lead enrichment** — AI Builder predictions enrich incoming leads with a quality score. - **Customer feedback** — sentiment analysis on case descriptions, with auto-prioritisation. - **Inspection** — object detection during field service inspections flags missing or defective components. ## Limits AI Builder is not a substitute for Azure ML or Azure OpenAI for sophisticated requirements. Models are limited in size, training data, and customisation; very high-volume scenarios may incur cost concerns. For most no-code AI scenarios in Dynamics 365 workflows, it's the right tool. ## Licensing AI Builder credits are sold separately or bundled with some Power Platform licences. Track credit consumption — it's the most common AI Builder budget surprise. ### Frequently asked questions **What pre-built models does AI Builder include?** Form processing (invoices, receipts, IDs, custom forms), object detection, sentiment analysis, key phrase extraction, language detection, text translation, business card and receipt readers, OCR text recognition, and category classification. **Where can an AI Builder model be called from?** Power Automate flows as an action, Power Apps from a button or screen, Dataverse plug-ins from server-side code, and directly through its APIs. Models live as AI Builder assets in an environment. **What is the most common Dynamics 365 use case?** Invoice automation: documents arrive in a shared mailbox, AI Builder extracts the fields, and a flow creates a draft vendor invoice in Business Central or Finance and Operations. Lead scoring, case sentiment prioritisation, and object detection during field inspections are the next most common. **How is AI Builder licensed?** Through AI Builder credits, sold separately or bundled with some Power Platform licences. Credit consumption is the most common budget surprise, so track it from the first production flow. **When is AI Builder the wrong tool?** For sophisticated or very high-volume machine learning. Models are limited in size, training data, and customisation; Azure ML or Azure OpenAI is the right platform once those limits bite. --- # AI prompts in Power Platform How AI Builder and Copilot Studio promote prompts as a first-class artefact — prompt design, parameters, grounding. Source: https://www.solvingdynamics365.com/guides/ai-prompts-in-power-platform Section: Power Platform / Copilot & AI Published: 2026-05-01 Updated: 2026-08-25 Across the Power Platform, generative AI is exposed through **AI prompts** — reusable, parameterised templates that call an LLM with consistent instructions and structured inputs. Treating prompts as artefacts (versioned, ALM-deployed, tested) rather than ad-hoc strings is the difference between a flashy demo and a production-grade AI feature. ## Where prompts live Prompts can be authored in: - **AI Builder** — the canonical home; "AI prompts" is a model type alongside form processors, classifiers, etc. - **Copilot Studio** — embedded in topic logic and agents. - **Power Automate** — invoked from flows. - **Power Apps** — invoked from canvas apps directly. The prompt itself is a Dataverse-stored asset, solutionable, exportable. **Prompt anatomy.** - **Instruction text** — the prompt body, with placeholders. - **Input parameters** — typed values supplied at invocation. - **Output type** — text, table, structured JSON. - **Model selection** — GPT-4, GPT-4o, or other available models. - **Grounding data** — knowledge sources the prompt can reference. ## Designing a prompt A production prompt typically has structure like: 1. **Role and context** — "You are an expert in [domain]. Your job is to [task]." 2. **Input data** — labelled values: "Customer message: {message}. Account history: {history}." 3. **Instructions** — what to produce, format constraints. 4. **Examples** — few-shot examples showing desired output. 5. **Constraints and edge cases** — what not to do, how to handle empty inputs. Most prompt failures trace to vague instructions or missing examples. Iterate with real inputs until the output is reliable. **Output types.** - **Text** — free-form response. Easy to call, hard to parse downstream. - **Structured (JSON)** — defined schema; the model is constrained to produce JSON matching the schema. Far more reliable for downstream automation. Use structured outputs whenever the downstream step needs specific fields. Free-form text is fine for end-user display; downstream automation should rely on structured. ## Grounding A prompt can be grounded in: - **Specific Dataverse rows** — pulled in at invocation. - **Documents** — files in SharePoint, OneDrive, or AI Builder document collections. - **Knowledge sources** — Copilot Studio knowledge. - **Search results** — Microsoft Search or Bing. Grounding reduces hallucinations and aligns output to authoritative data. **Invocation patterns.** - **From a flow** — the "Create text with GPT using a prompt" action. - **From a canvas app** — `AIBuilder.PromptName.Predict({inputs})` Power Fx call. - **From a low-code plug-in** — Power Fx call within plug-in logic. - **From a Copilot Studio agent** — generative actions triggered by intent. ## Versioning and ALM Prompts are versioned in the maker portal. Solutions export the current version; consumers reference the prompt by ID. Promotion through dev → test → prod follows standard solution ALM. Be careful about referencing prompts by name vs by ID — name changes break references. ## Testing The prompt builder has a test pane: - Provide sample inputs. - See the model's output. - Iterate. Production prompts need more than UI testing — a small test harness in Power Automate or a Python script can regression-test prompts against a corpus of representative inputs. ## Cost Each prompt invocation costs AI credits per AI Builder licensing. Credits convert roughly to token usage. High-volume scenarios need careful cost modelling: a prompt firing on every Dataverse Create event at 10K events/day adds up. ## Latency LLM responses take seconds, not milliseconds. UX-blocking calls feel slow. Patterns: - **Async invocation** — kick off the prompt, show "processing", display result when ready. - **Streaming output** — display tokens as they arrive (where supported). - **Caching** — same inputs → same output; cache aggressively. **Common pitfalls.** - **Untested edge cases** — empty inputs, very long inputs, unusual character sets break the prompt. - **Trust-on-first-use** — outputs assumed correct without verification; hallucinations slip into production. - **No versioning hygiene** — prompts edited live in prod; no rollback path. - **Free-form text downstream** — parsing brittle; structured output is the fix. - **Cost overruns** — high-volume invocation without monitoring; surprise bill. - **Prompt injection vulnerability** — user input flowing into prompts without sanitisation; users craft inputs to override instructions. **Prompt injection mitigation.** - **Treat user input as data, not instruction.** Wrap user input in clear delimiters; instruct the model to ignore instructions in user input. - **Validate output** before acting — even if the model is "told" not to produce certain outputs, treat outputs as untrusted. - **Limit privileges** — a prompt that triggers an action shouldn't have full system permissions. ## Operational guidance Treat prompts like code: version, test, deploy through pipelines, monitor in production. The "type into a box and run it" feel of AI Builder makes it easy to skip these practices — and easy to ship fragile AI features that break under real usage. Discipline pays back. --- # AL compiler errors in Business Central The AL compiler errors every Business Central developer hits — AL0118, AL0132, AL0185, AL0296, AL0432, AL0603, AL0604, ID-range and symbol errors — with cause, fix, and prevention. Source: https://www.solvingdynamics365.com/guides/al-compiler-errors-in-business-central Section: Business Central / Troubleshooting Published: 2026-09-03 Every AL developer meets the same short list of compiler diagnostics, and most of them mean something other than what the message says. This reference covers the ones that consume the most time, in the order you tend to meet them: environment and symbol problems first, then the real code errors, then the warnings that become errors at the next release wave. Each entry is symptom, cause, fix, prevention. For the first-day setup problems around F5 and launch.json, see [writing your first AL extension](https://www.solvingdynamics365.com/guides/writing-your-first-al-extension). ## Symbols and dependencies ### "You do not have the symbols for the referenced app" / nothing compiles **Symptom.** Every object reference fails; the Problems pane fills with AL0118 and AL0185 for base-application types like `Record Customer`. **Cause.** The `.alpackages` folder is empty or stale. Symbols are downloaded from the environment named in `launch.json`; if the environment name, server, or authentication is wrong, the download silently fails and the compiler has no base application to resolve against. **Fix.** Check `environmentName` (sandbox name, exact case) and `tenant` in `launch.json`, sign in again, run `AL: Download symbols`, and confirm `.alpackages` now contains the Microsoft Application, Base Application, and System packages for your target version. **Prevention.** Keep `.alpackages` out of Git and treat symbol download as part of environment setup. Pin `application` and `platform` in `app.json` to the version the sandbox actually runs. ### AL0185: Table 'X' is missing **Symptom.** A table that exists in the environment cannot be found by the compiler. **Cause.** The table belongs to an app that is not in your `dependencies` in `app.json`, so its symbols are not loaded even if the app is installed. Also appears when a dependency's symbols were downloaded for a different version than the installed one. **Fix.** Add the owning app (id, name, publisher, version) to `dependencies`, download symbols again, rebuild. For a Microsoft table, verify the `application` version in `app.json` is at least the version where the table was introduced. **Prevention.** Declare dependencies before writing code against them; the compiler enforces the graph and it is cheaper to get right early. See [AL extensions architecture](https://www.solvingdynamics365.com/guides/al-extensions-architecture). ## Identifier and type errors ### AL0118: The name 'X' does not exist in the current context **Symptom.** An identifier — variable, field, procedure, object — is underlined and the build fails. **Cause.** A typo, a variable declared in another procedure's `var` block, a field on a table you have not extended yet, a procedure that is `local` in another codeunit, or a missing dependency (see AL0185). **Fix.** Check spelling and scope; declare the variable where it is used; add the table extension that creates the field; make the procedure non-local or move the call; add the dependency. **Prevention.** Let IntelliSense drive identifier entry and keep the CodeCop analyzer on so naming is consistent. ### AL0132: 'X' does not contain a definition for 'Y' **Symptom.** A method or field is called on a record, codeunit, or interface that does not have it. **Cause.** Wrong object — the method exists on a different codeunit, or the field is on the header not the line. Also the classic case after a wave: the method was renamed or removed and the obsolete warning was ignored. **Fix.** Check the object's definition (F12 goes there); use the correct object or the replacement method named in the obsolete tag. **Prevention.** Fix AL0432 warnings when they appear rather than when the object disappears. ### AL0603: An implicit conversion is being performed from Text to Code **Symptom.** A warning or error where a `Text` value is assigned to a `Code` field or variable. **Cause.** `Code` fields are uppercase and length-limited; assigning arbitrary text can overflow at runtime. The compiler flags the implicit conversion. **Fix.** Convert explicitly with `CopyStr(TextValue, 1, MaxStrLen(CodeField))` and, where case matters, `UpperCase`. Consider whether the target should be `Text` in the first place. **Prevention.** Use `MaxStrLen` on every assignment into a length-limited field; it is the difference between a compile-time nudge and a runtime "The length of the string is X, but it must be less than or equal to Y" error — see [AL runtime errors](https://www.solvingdynamics365.com/guides/al-runtime-errors-in-business-central). ### AL0100: Syntax error, 'X' expected **Symptom.** The compiler expected a token — usually `;`, `end`, `)` or `begin` — and found something else. **Cause.** A missing semicolon, an unbalanced `begin`/`end`, or a stray character; the reported line is often one after the real mistake. **Fix.** Look at the line above the reported one; format the document (Shift+Alt+F) to make block structure visible. **Prevention.** Format on save and keep procedures short enough that block balance is obvious. ## Scope and platform errors ### AL0296: The application object or method 'X' has scope 'OnPrem' and cannot be used for 'Cloud' development **Symptom.** Code that compiled against an on-premises target fails when `target` is `Cloud`. **Cause.** The object or method is marked `[Scope('OnPrem')]` — .NET interop, file system access, certain system codeunits — and is not available in Business Central online. **Fix.** Replace with the cloud-safe equivalent: `Http` and `Json` types instead of .NET, Azure Blob or SharePoint through the API instead of the file system, `Isolated Storage` instead of local secrets. Where no equivalent exists, the feature is on-premises-only by design. **Prevention.** Set `"target": "Cloud"` in `app.json` from day one for anything that will ever run online. ### "The object ID 5xxxx is not in the allowed range" / AL0223-class errors **Symptom.** An object fails to compile because its ID falls outside the ranges the app declares. **Cause.** `idRanges` in `app.json` does not cover the ID. Per-tenant extensions use 50000–99999; AppSource apps use their assigned range; a copied object often carries an ID from a different project. **Fix.** Change the object ID to fall inside the declared range, or widen `idRanges`. If two installed apps declare the same IDs, one must move — the environment refuses to publish overlapping objects. **Prevention.** Document your ID slice per app and per environment, and use the `AL: Go!` scaffold's range as a starting point rather than inventing one. ## Warnings that become errors ### AL0432: 'X' is marked for removal. Reason: … Tag: … **Symptom.** A warning on a table, field, method, or event that still compiles. **Cause.** The object is `ObsoleteState = Pending`. Microsoft removes obsolete objects after at least two release waves; when it does, AL0432 turns into AL0118 or AL0132 and the build breaks. **Fix.** Read the reason and tag: it names the replacement. Migrate to it now, while the old one still exists to compare against. **Prevention.** Treat AL0432 as an error in CI (`"al.ruleSetPath"` or the `-errorLog` gate in [AL-Go for GitHub](https://www.solvingdynamics365.com/guides/business-central-cicd-with-al-go)) and compile against the preview build six weeks before each wave — [upgrading AL code across BC versions](https://www.solvingdynamics365.com/guides/upgrading-al-code-across-bc-versions) covers the rhythm. ### AL0604: Use of implicit 'with' will be removed in the future. Qualify with 'Rec.' **Symptom.** Warnings on every unqualified field reference inside a page or codeunit with a source table. **Cause.** Legacy C/AL-style code relies on the implicit `with` on the source record. Microsoft is removing it because it makes field resolution ambiguous when tables change. **Fix.** Qualify with `Rec.` (or the record variable name). Enable the `NoImplicitWith` feature in `app.json` so the compiler treats it as an error and finds every instance. **Prevention.** Scaffold new projects with `"features": ["NoImplicitWith"]` and never write unqualified field access. ## Analyzer findings that block AppSource CodeCop, UICop, PerTenantExtensionCop, and AppSourceCop findings (rule IDs AA0xxx and AS0xxx) are not compiler errors, but AppSource validation treats many as blocking — missing affixes, non-unique captions, breaking schema changes, missing `Access` and `Permissions` properties. Turn the analyzers on in `settings.json` from the first commit; a warning during development costs seconds, the same finding at submission costs a resubmission cycle. [Per-tenant extensions vs AppSource](https://www.solvingdynamics365.com/guides/per-tenant-extensions-vs-appsource) covers what validation checks. ## When the build passes but publish fails Two errors live between compiler and runtime. "The extension could not be published because it would cause a breaking schema change" means you deleted or narrowed a field that has shipped — mark it obsolete instead; schema removal breaks upgrade. "Object ID already in use" on publish means another installed extension — often an abandoned earlier attempt — claims the same ID; uninstall it from Extension Management or move your range. Runtime failures after a successful publish are a different reference: [AL runtime errors in Business Central](https://www.solvingdynamics365.com/guides/al-runtime-errors-in-business-central). ### Frequently asked questions **What does AL0118 mean?** The name does not exist in the current context — the compiler cannot resolve an identifier. Nine times out of ten it is a typo, a variable declared in a different scope, a field that needs a table extension before it exists, or symbols that have not been downloaded for a dependency. **Why do I get AL0185 'Table is missing' when the table clearly exists?** Because the compiler cannot see it: the symbols for the app that owns the table are not in .alpackages, or that app is not listed in your app.json dependencies. Add the dependency, run AL: Download symbols, and rebuild. **Are AL0432 and AL0604 errors or warnings?** Warnings by default — AL0432 marks use of an obsolete object that Microsoft will remove after two waves, AL0604 marks implicit with. Treat both as errors: AppSource validation rejects them, and a warning you ignore today is a broken build after the wave that removes the object. **How do I fix 'The object ID is not in the allowed range'?** Your object's ID is outside the idRanges declared in app.json. Either change the object ID to fall inside the declared range, or widen the range — 50000–99999 for per-tenant extensions, your assigned range for AppSource apps. Two apps claiming the same IDs cannot coexist in one environment. --- # AL events and integration patterns How AL events let extensions hook into Business Central — business events, integration events, subscriber patterns, and what to avoid. Source: https://www.solvingdynamics365.com/guides/al-events-and-integration-patterns Section: Business Central / AL & development Published: 2026-05-01 Updated: 2026-08-25 Events are the heart of AL extension architecture. They let your code run when Microsoft's code (or another extension's) reaches a defined point, without you modifying anyone else's source. Used well, they keep extensions upgrade-safe; used badly, they create invisible coupling across the codebase. ## Two kinds of events **Business events** are domain-level publications — "OnAfterPostSalesDocument", "OnAfterInsertCustomer" — declared by Microsoft on its standard objects. **Integration events** are custom publications declared by an extension when it wants to be extensible itself: an ISV's app might publish `OnBeforeCalculateLineDiscount` so customers can layer their own discounting rules. ## Subscribers A **subscriber** is a procedure in a codeunit decorated with `[EventSubscriber(...)]`, naming the publisher object and the event. The compiler binds it at install time. When the publisher raises the event, every subscriber runs, in undefined order, in the same transaction. ## OnBefore vs OnAfter *OnBefore* events run before the action and can suppress or modify the operation (typically via a `var IsHandled` parameter). *OnAfter* events run after the action completes and are the right place for follow-on processing — sending an email, calling an integration, writing to a log. ## Manual vs automatic binding Subscribers can bind automatically (the default) or manually. **Manual binding** is for cases where the subscriber should run only when explicitly activated — for tests, or for per-tenant feature toggles. Manual subscribers are bound at runtime with `BindSubscription`. ## Conditional subscription A subscriber attribute can include a *property* filter so the subscriber only runs when a property on the publisher record matches a value — useful to scope cross-extension behaviour. **Common patterns.** - *Add a field to a posted document*: subscribe to `OnAfterCopy...` between unposted and posted records to carry the value across. - *Validate before posting*: subscribe to `OnBeforePost...` and raise `Error` if business rules don't pass. - *Trigger an integration*: subscribe to `OnAfterPost...` and queue a job to call an external API. ## Anti-patterns Subscribing to dozens of OnBefore events to inject conditional behaviour. Long-running synchronous subscribers (move them to job queue entries). Subscribers that depend on the *order* other subscribers run in (they shouldn't). And subscribers that mutate the publisher's record after it's been written — almost always wrong. --- # AL extension architecture How AL extensions are structured in Business Central — objects, namespaces, app.json, dependencies, and the runtime model. Source: https://www.solvingdynamics365.com/guides/al-extensions-architecture Section: Business Central / AL & development Published: 2026-05-01 Updated: 2026-08-25 An **AL extension** is the package that delivers custom code, tables, pages, reports, and configuration to Business Central. Understanding the architecture is the first step to writing extensions that survive upgrades cleanly. ## The package An extension compiles to a single `.app` file — a signed, versioned package containing compiled AL objects, manifest, permission sets, translations, and runtime resources. The `.app` is what gets uploaded to a Business Central tenant or published to AppSource. **app.json.** Every extension is rooted in an `app.json` manifest that declares the publisher, name, version, ID (GUID), the platform/application versions it targets, the runtime version, dependencies on other apps, and the object ID ranges the extension is allowed to use. App registration with Microsoft assigns the object range; collisions are not allowed. ## Object types Extensions can contain **tables** (new business entities), **table extensions** (extra fields and triggers on Microsoft's standard tables), **pages** (UI), **page extensions** (extra fields and actions on standard pages), **codeunits** (procedures), **reports**, **queries**, **XMLports**, **permission sets**, **enums**, and **interfaces**. The most common pattern in customer extensions is *table extensions + page extensions + a few codeunits with event subscribers* — adding fields and behaviour to the standard product without replacing it. ## Events Behaviour customisation happens through **events**: Microsoft and other extensions publish business and integration events; your codeunit subscribes to them and runs your code before, on, or after the original logic. This is what makes extensions upgrade-safe: when Microsoft changes the base code, your subscribers still bind to the same events. ## Dependencies An extension can depend on others by declaring them in `app.json`. The platform installs them in dependency order, and dependent extensions can extend each other's tables and pages. ## The runtime Business Central's AL runtime is a managed VM compiled from AL. Each request runs in its own session with transactional database access. The runtime enforces permission checks, multi-tenancy isolation, and event publication. ## Sandboxes for development AL developers use **Visual Studio Code** with Microsoft's AL Language extension, pointing at a Business Central **sandbox** environment as the runtime target. Publish, debug, deploy, and read symbols all work from VS Code against the sandbox. ## Three deployment paths The same `.app` can ship to AppSource (Microsoft-validated, sold to many customers), to a customer tenant as a **per-tenant extension** (uploaded directly, single-tenant), or — for on-premise BC — installed locally. --- # AL language and runtime evolution How the AL language for Business Central evolved from C/AL — runtime versions, language features added wave by wave, and what AL is becoming. Source: https://www.solvingdynamics365.com/guides/al-language-runtime-evolution Section: Business Central / AL & development Published: 2026-05-01 Updated: 2026-08-25 The **AL language** is what every Business Central extension is written in today. It replaced the older **C/AL** in NAV 2018 / BC 14, and has been evolving rapidly since — new runtime versions every release wave, new language features, deprecations of old patterns. For anyone touching BC code, understanding the language's trajectory matters. ## C/AL background Pre-2018, Business Central (then Dynamics NAV) used C/AL — a proprietary Pascal-like language tightly coupled to the NAV Development Environment. Code lived in objects modified directly inside the database. Customisations were per-tenant, hard to upgrade, hard to maintain. ## AL launch Introduced in 2017 with NAV 2018, AL is C/AL's successor: - **VS Code-based** authoring. - **Modern syntax** while preserving NAV semantics. - **Extension model** — code packaged as deployable extensions, not direct object modification. - **Source control friendly** — text-based; git workable. The shift was painful but transformative. By BC 17 / 2020, AL was fully mature and C/AL was deprecated. ## Runtime versions Each BC release wave bumps the **AL runtime version**. Runtime version determines: - Language features available. - API surface available. - Behavioural compatibility. Extensions declare their minimum runtime version in `app.json`. Newer runtimes typically backward-compatible; the constraint is on lower bound. **Language features by wave.** - **AL 1.0 (BC 14)** — basics: tables, pages, codeunits, reports, events. - **AL 2.0 era** — interfaces, enums, page extension improvements. - **AL 6.0+ era** — text builders, refined error handling. - **AL 10+ era** — out-of-the-box exception handling, modern collection types. - **AL 12+ era** — Copilot-aware patterns, refactored event publishing. Each wave adds incrementally; checking release notes per wave is essential for developers. ## Interfaces A meaningful add: defining interfaces for codeunit contracts, enabling polymorphism via enums implementing interfaces. ## Events and integration Events (OnBefore, OnAfter, Integration events) are the canonical extension hook. The event ecosystem expands per wave — more events, finer granularity. **The extension package (.app).** Compiled AL produces an `.app` file: - Self-contained. - Versioned (Major.Minor.Build.Revision). - Dependencies declared. - Deployable via web client or programmatically. The `app.json` and `launch.json` configure the project. **Per-tenant vs AppSource.** - **Per-tenant extensions** — deployed to one BC tenant. - **AppSource extensions** — published by partners through Microsoft's marketplace; available to all BC tenants. Same language; different distribution. ## Performance considerations AL performance has improved each wave but the patterns matter: - **Avoid heavy in-loop database calls.** - **Batch operations** preferred. - **Use SetLoadFields** to reduce field load. - **Background tasks** for long-running. ## Modern testing AL test framework matured around BC 16/17: - Codeunits as test fixtures. - Test runner integrated. - Mocking patterns documented. CI pipelines that compile and run tests on every commit are now standard. ## Telemetry Application Insights integration via AL allows extensions to emit telemetry; partners and customers can observe runtime behaviour. ## Pragmas and obsolete attributes Marking obsolete code: - `Obsolete` attribute on procedures. - Compiler warnings for callers. - Eventual removal after grace period. A discipline around obsoletion enables backward-compatible API evolution. **Common pitfalls.** - **Sticking with C/AL patterns in AL.** Old habits; AL has better idioms. - **Ignoring runtime targeting.** Targeting too high excludes some tenants; too low loses features. - **Heavy direct database calls.** Old pattern; new pattern uses set-based and batch APIs. - **No test coverage.** Manual testing only; regressions ship. ## Strategic positioning AL is the future of Business Central extensibility. Investment in AL skills, modern patterns, source-controlled extensions, and CI/CD pipelines aligns with Microsoft's direction. Legacy C/AL maintenance is shrinking; new development should be AL from day one. The language continues to evolve; staying current on per-wave changes is part of being a productive BC developer. --- # AL runtime errors in Business Central The Business Central runtime errors AL developers and admins meet most — record already exists, does not exist, modified by another user, string length, locks and deadlocks, G/L inconsistency — with fixes. Source: https://www.solvingdynamics365.com/guides/al-runtime-errors-in-business-central Section: Business Central / Troubleshooting Published: 2026-09-03 Runtime errors are the ones users see: a red banner in the client, a failed job queue entry, a 400 from the API. Business Central's messages are unusually explicit about which table and which key is involved, so most of them can be diagnosed from the text alone. This reference covers the recurring ones in the order they show up in a typical tenant's telemetry: data errors, concurrency and locking, posting consistency, and the platform limits. Compile-time problems are in [AL compiler errors](https://www.solvingdynamics365.com/guides/al-compiler-errors-in-business-central). ## Record errors ### "The record in table X already exists. Identification fields and values: …" **Symptom.** An insert fails and names the table and key. **Cause.** A primary-key collision. The code calls `Insert` without checking existence; a number series is set to allow manual numbers and a user typed a duplicate; an integration re-sends a record it already created; or a key is composed from user input that is not unique. **Fix.** Guard the insert: `if not Rec.Get(Key) then Rec.Insert(true) else Rec.Modify(true)`, or use `Rec.Insert(true, true)` patterns where the platform handles it. For integrations, make the operation idempotent — look up by external ID first. **Prevention.** Treat every insert in integration code as an upsert; see [idempotency in Dynamics 365 integrations](https://www.solvingdynamics365.com/guides/idempotency-in-dynamics-365-integrations). ### "The X does not exist. Identification fields and values: …" **Symptom.** A `Get` fails, typically deep in a posting routine or report. **Cause.** A lookup to a related record that has been deleted or was never created: a customer whose posting group was removed, an item referenced by a document line, a dimension value renamed. Also caused by code that calls `Get` on a blank key because a field was empty. **Fix.** Read the identification fields in the message — they tell you exactly which key is missing — and either recreate the referenced record or fix the referring one. In code, use `if Rec.Get(...) then` where absence is legitimate, and `TestField` before the lookup where it is not. **Prevention.** Do not delete setup records that have been used; block them instead. Validate references at entry time, not posting time. ### "Another user has modified the record for this X after you retrieved it from the database." **Symptom.** A `Modify` fails on a record the session read earlier. **Cause.** Optimistic concurrency. Business Central stamps every row with a version; if the version in the database is newer than the one your session holds, the write is refused. Long-running pages, integrations that read a batch and write later, and job queue entries overlapping with user edits all trigger it. **Fix.** Re-read immediately before writing (`Rec.Get(Rec.RecordId)` or `Rec.Find`), then `Modify`. In integration code, retry the read-modify-write once on this specific error text. **Prevention.** Keep the gap between read and write short; never hold a record across a user prompt; give background processes their own change windows. ### "The length of the string is X, but it must be less than or equal to Y characters. Value: …" **Symptom.** An assignment into a `Code` or `Text` field fails at runtime. **Cause.** Data longer than the field: an external system's 100-character name into a 50-character field, a concatenated key, an API payload. Older versions phrase this as "Overflow under type conversion of Text to Code". **Fix.** Truncate deliberately with `CopyStr(Value, 1, MaxStrLen(Rec.Field))`, or widen the field in a table extension if the data legitimately needs it — but note that base-application fields cannot be widened. **Prevention.** `MaxStrLen` on every assignment from external data; validate lengths at the integration boundary. The compiler warns about this pattern as AL0603. ### "X must have a value in Y: Z. It cannot be zero or empty." **Symptom.** A `TestField` fails, naming field, table, and record. **Cause.** Setup is incomplete — a posting group without an account, a customer without a payment term — or the code tests a field the user has no way to fill. **Fix.** Fill the named field on the named record. For posting-group and setup fields, [Business Central posting setup errors](https://www.solvingdynamics365.com/guides/business-central-posting-setup-errors) lists which table holds what. **Prevention.** Configuration checklists per company; the Company Hub and setup wizards catch most gaps. ### "The filter 'X' is not valid for the Y field on the Z table." **Symptom.** A `SetFilter` or user-entered filter fails. **Cause.** Filter syntax applied to the wrong type — text operators on a date, an unescaped special character (`&`, `|`, `@`, `*`) in a value, or a `Code` filter with characters the field cannot hold. **Fix.** Use `SetRange` for exact values, and for `SetFilter` escape values with `'%1'` placeholders and `StrSubstNo`, or wrap them in quotes via `Rec.FieldName` filter tokens. **Prevention.** Never concatenate user or external data into a filter string. ## Locking and concurrency ### "The operation could not complete because a record was locked by another user. Please retry the activity." **Symptom.** A write waits and then fails; in the client it appears after a pause of tens of seconds. **Cause.** Another session holds a lock on the row or table for longer than the lock timeout — a long posting, a report with `LockTable`, a job queue entry processing a large batch, or an integration holding a transaction open across an external call. **Fix.** Find the blocking session in the admin centre or via telemetry (lock timeout events name the blocking object and user), let it finish or cancel it, retry. In code, shorten the transaction: commit at safe points, move external calls outside the lock. **Prevention.** Never call an external API inside a transaction that holds locks; schedule heavy batch work outside business hours; use `ReadIsolation` to avoid unnecessary locks on reads. [Business Central performance tuning](https://www.solvingdynamics365.com/guides/business-central-performance-tuning) covers the patterns. ### "Your activity was deadlocked with another user's activity. Please retry the activity." **Symptom.** A write fails immediately with the deadlock message. **Cause.** Two sessions each hold a lock the other needs — classically two posting routines touching the same tables in a different order, or a job queue entry and a user both updating an item and its ledger. **Fix.** Retry; the platform chose your session as the victim. Then find the pair: telemetry's deadlock events include both statements. **Prevention.** Lock tables in a consistent order in custom code (`LockTable` on the parent before the child), and serialise batch jobs that touch the same tables. ## Posting consistency ### "The transaction cannot be completed because it will cause inconsistencies in the G/L Entry table." **Symptom.** A posting fails after all the validation passed, with no field named. **Cause.** The consistency check at the end of `Gen. Jnl.-Post Line` found debits and credits in the transaction do not net to zero — a rounding difference from a custom posting or an event subscriber that adjusted one side, an inconsistent currency rounding setup, or a VAT rounding precision that differs between amount and base. **Fix.** Debug the posting with a breakpoint on the consistency check, or post the document with the debugger attached and compare G/L entries in the buffer by posting group. The difference is usually cents; the offending line is the one whose amount was touched by code outside the standard routine. **Prevention.** Subscribers on posting events must never change amounts without also adjusting the balancing entry; use the `OnAfter…` events to add entries, not to alter existing ones. Review currency and VAT rounding settings when a localisation is introduced. ### "Attempted to divide by zero." / "Arithmetic operation resulted in an overflow." **Symptom.** A calculation fails in a report or codeunit. **Cause.** A quantity or rate of zero used as a divisor — typically unit cost per quantity where quantity is zero on a cancelled line — or a `Decimal` beyond its 18-digit range, or an `Integer` beyond 2^31. **Fix.** Guard the division; use `BigInteger` or `Decimal` where sums can exceed integer range. **Prevention.** Assume every divisor can be zero on real data. ## Permissions and platform limits ### "You do not have the following permissions on TableData X: Read / Insert / Modify / Delete" **Symptom.** A user or the API caller is refused on a table they can see in the UI. **Cause.** The permission set lacks direct or indirect permission for that table in that operation. Posting routines need indirect permissions on ledger tables through codeunit execution; a role built from `BASIC` alone lacks them. Also common after an extension adds a table without shipping a permission set. **Fix.** Use the Effective Permissions page from the user card to see which set grants what; add the missing permission to a copied set, or assign the extension's permission set. **Prevention.** Every extension ships a permission set object; assign by role, not by user. See [Business Central permissions and security](https://www.solvingdynamics365.com/guides/business-central-permissions-and-security). ### "The request was blocked because … exceeded the limit" / operational limits **Symptom.** A session, job, or API call is terminated by the platform: too many rows in a report, a transaction running too long, too many sessions, too many API requests. **Cause.** Business Central online enforces operational limits — maximum transaction duration, report row limits, concurrent sessions, API rate limits — that on-premises never had. **Fix.** Split the work into smaller transactions or job queue entries; page API calls and honour `Retry-After` on 429s; reduce report scope. **Prevention.** Read Microsoft's operational limits page for the current numbers and design batch work around them from the start. The API-specific errors are in [Business Central API errors](https://www.solvingdynamics365.com/guides/business-central-api-errors). ## Finding the error in the first place Enable telemetry to Application Insights in the admin centre: every runtime error is logged with the AL stack trace, the object, the user, and the SQL statement for lock and deadlock events. It turns "a user got an error yesterday" into a query. [Business Central telemetry and monitoring](https://www.solvingdynamics365.com/guides/business-central-telemetry-and-monitoring) covers the setup, and the [debugger guide](https://www.solvingdynamics365.com/guides/business-central-debugger-deep-dive) covers reproducing the error with snapshot debugging when the message alone is not enough. ### Frequently asked questions **What does 'The record in table X already exists' mean?** An Insert hit a primary-key collision — a record with that key is already there. Either the code inserts without checking (use Insert(true) after a Get or Find, or Insert then Modify), or a number series handed out a number that was already used, or the key is being built from user input that is not unique. **How do I fix 'Another user has modified the record for this X after you retrieved it from the database'?** It is optimistic concurrency: your copy of the record is older than the database version. Re-read the record (Get or Find) immediately before Modify, keep transactions short, and in integrations retry the read-modify-write once on this specific error. **What causes 'The transaction cannot be completed because it will cause inconsistencies in the G/L Entry table'?** The posting routine's consistency check found the G/L entries in the transaction do not balance to zero — usually a rounding difference from a custom posting routine, a currency or VAT rounding setting, or an event subscriber that changed an amount on one side. Check the amounts by posting group and dimension set in the debugger. **What is the difference between a lock error and a deadlock?** 'The operation could not complete because a record was locked by another user' is a plain wait that timed out; 'Your activity was deadlocked with another user's activity' is two sessions each holding a lock the other needs, and the platform killed one. Both are fixed by shorter transactions, consistent lock order, and moving heavy work to the job queue. --- # Alerts and notifications in Dynamics 365 Finance How F&O's alert framework surfaces important events — alert rules, due-date triggers, change events, delivery to action centre and email. Source: https://www.solvingdynamics365.com/guides/alerts-and-notifications-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-06-10 Updated: 2026-08-25 For users working in Dynamics 365 Finance and Supply Chain, much of the day-to-day intelligence comes from being told *when something happened* — a sales order shipped, a credit limit exceeded, a customer overdue, a production order completed, a workflow approval needed. The **alert framework** is the platform's built-in subscription mechanism that delivers these notifications without requiring custom integration. ## The model A **rule** specifies what to watch for. Each user can create rules against: - **Field changes** — when a specific field on a record changes (e.g. "alert me when this customer's credit limit is reduced"). - **Due dates** — when a record's due date approaches (e.g. "alert me 7 days before the sales order delivery date"). - **Creation / deletion** — when records of a type are created or deleted. - **Workflow events** — when a workflow stage transitions. Users create rules through the **Manage Alert Rules** action; admins can create system-wide rules that apply to all users matching criteria. ## Delivery Alerts deliver to: - **Action centre** — the bell icon in the F&O UI shows pending alerts. - **Email** — configurable per rule. - **Mobile push** — through the F&O mobile companion. - **Application Insights telemetry** — for system-level monitoring. A single rule can fire to multiple channels. **Common alert scenarios.** - **Credit risk** — alert credit manager when a customer's overdue balance exceeds a threshold. - **Delivery promises at risk** — alert customer service when a sales order's expected ship date is in the past with the order still unshipped. - **Inventory shortages** — alert procurement when stock falls below safety stock. - **Workflow timeouts** — alert manager when an approval hasn't been acted on within N days. - **Posting failures** — alert operations when batch job errors. - **High-value events** — alert leadership when a sales order over a threshold posts. ## Rules at scale F&O's alert framework is fine for individual user rules and a moderate number of system rules. For larger volumes — many users with many rules — performance can degrade because the framework checks every applicable rule on every change. For high-volume scenarios, alternative patterns: - **Power Automate flows** triggered by F&O events via virtual entities or Dual-write — more flexible, scales better. - **Application Insights alerts** — for system-level health rather than business events. - **Service Bus integration** — for downstream systems consuming events. ## Alert delivery preferences Users can configure per-rule: - Active hours (don't notify outside working hours). - Channels (Action Centre only, or also email). - Aggregation (one alert per event, or batched daily summary). Avoid alert fatigue — users overwhelmed with notifications start ignoring them, including the important ones. ## System-wide alerts Beyond per-user rules, system-wide alerts cover: - **Service health** — Microsoft-driven notifications for service issues. - **Critical batch failures** — operational-impact failures. - **Security events** — unusual access patterns, failed login attempts at scale. - **Capacity thresholds** — Dataverse storage approaching cap, API call usage approaching limit. These typically route to administrators or operations teams via configured action groups. ## Mobile and Teams Modern F&O integrates with Microsoft Teams for alert delivery: - An adaptive card in a Teams channel. - Interactive — user can act on the alert directly from Teams. - Coordinates with the broader Microsoft 365 notification surface. Mobile push notifications surface alerts on the user's phone, with one-tap navigation to the relevant record in the F&O mobile experience. **Limits.** - **Rule complexity** is bounded — sophisticated conditional logic across multiple records typically needs Power Automate. - **Visibility into rule firing** is limited — debugging "why didn't I get this alert" is harder than equivalent Power Automate flow run history. - **Performance at scale** — every change touches every applicable rule. **Common pitfalls.** - **Alert overload** — users create dozens of rules, get hundreds of alerts daily, ignore them all. - **Stale rules** — rules created for a long-gone process still fire and confuse users. - **No system-wide health alerts** — operations team finds out about problems from user reports rather than alerts. ## Operational discipline Curate alert rules deliberately. Audit periodically — retire what's not useful. Combine with Power Automate flows for complex cross-system orchestration. The framework is the daily-pulse mechanism for the operational team. --- # Allocations and allocation rules in Dynamics 365 Finance How F&O allocates costs and revenue across dimensions — ledger allocation rules, basis sources, percentage methods, and the periodic allocation cadence. Source: https://www.solvingdynamics365.com/guides/allocations-and-allocation-rules-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 Updated: 2026-08-25 A central IT cost of $100,000/month needs to be spread across business units that benefit from it. A consolidated marketing spend gets reassigned to the brands that received the activity. Shared service costs need to push to the consuming departments. **Allocation rules** in F&O define how these distributions happen — automating what would otherwise be a manual journal exercise every period. ## The allocation problem Accounting captures cost where it's spent (a vendor invoice for IT services hits the IT department) but business analysis needs cost where it's consumed (each business unit's "true" IT cost). Allocations move postings from source dimensions to destination dimensions per defined rules. **Two flavours of allocation.** - **Ledger Allocation Rules** — the modern, configurable allocation engine. Period-end batch processing. - **Fixed allocation accounts** — older mechanism on individual accounts; less flexible, mostly being replaced. This article focuses on Ledger Allocation Rules. **Anatomy of an allocation rule.** - **Source** — what is being allocated. Defined by accounts, dimensions, or a journal type. - **Destination** — where it's being moved to. Defined by dimensions. - **Basis** — the proportion drivers (headcount, square footage, revenue %, prior period transactions). - **Method** — fixed percentage, basis-driven, formula. - **Posting** — offset account treatment. **Methods.** - **Fixed percentage** — distribute manually-specified percentages (40/30/30 across three BUs). - **Fixed weight** — weights (3:2:1) translated to percentages. - **Basis** — proportions computed from another data set (e.g. revenue per BU last month, headcount this month, transactions hit per BU). - **Spread evenly** — equal split across destination dimensions. - **Equally** — same as spread evenly. Basis methods are the most powerful — they adjust the allocation each period to current driver values, no manual update needed. **Basis sources.** - **Ledger balances** — prior period account balances (e.g. revenue) as the driver. - **Statistical measures** — non-financial measures (headcount, square footage) stored in F&O for this purpose. - **Formulas** — combinations of measures. Statistical measures are maintained per period — finance updates the headcount per department at month-end before running allocations. ## Source criteria What's being allocated: - **Main accounts** — IT cost account 6000. - **Financial dimensions** — only the IT department source. - **Currency** — only LCY. - **Date range** — current period. ## Destination dimensions How the destination is constructed: - **Pre-defined dimensions** — specific destination values. - **Wild-card** — all dimensions in scope. - **Derived** — destination dimensions calculated from the basis. **Running allocations.** 1. Source data is collected. 2. Basis is calculated per destination dimension combination. 3. Allocation amounts are computed. 4. The journal is proposed — review before posting. 5. Posting creates reversal entries on source and matching entries on destinations. Most teams run allocations as a sequenced step in the period close: after AR/AP, before consolidation. ## Step allocations Some costs flow through multiple steps — central → division → cost centres. Each step is a separate allocation rule; the order matters. F&O supports sequencing. ## Reciprocal allocations When two cost pools mutually allocate to each other (IT serves HR; HR serves IT), simple sequential allocation gets it wrong. Reciprocal allocation solves simultaneous equations to balance correctly. F&O supports reciprocal via specific rule configuration. ## Reversal and rerun If allocations need adjustment after posting: - **Reverse** the posted allocation. - **Adjust** the rule or basis. - **Re-run.** Always preserve the original posting as a reversed entry — audit trail of "what we allocated and why" matters for explainability. **Reporting.** - **Pre-allocation views** — show cost as originally posted, before reassignment. - **Post-allocation views** — show cost after allocation. Both views are usually needed: pre-allocation for fiduciary reporting (responsibility centre, where cost was incurred), post-allocation for managerial reporting (true business cost). **Common pitfalls.** - **Basis not updated.** Headcount or revenue measures stale; allocations use old proportions; results misleading. - **Allocation chain dependencies.** Step allocations run out of order; downstream rules see wrong source. - **Circular allocations not handled.** Without reciprocal logic, two-pool allocations settle wrong. - **Source/destination overlap.** A destination dimension is also part of source criteria; allocations cycle back. - **No reversal hygiene.** Failed allocations not reversed; cost reported both at source and at destination — double counted. ## Audit considerations Allocations are journal entries; auditors review the allocation rules and the basis data. Maintained allocation rule documentation (method, basis, last reviewed) helps audits move quickly. ## Practical scope Allocations are the right tool for repetitive period-end cost distributions. Strategic one-off cost reassignments (a project of restating prior periods) are usually better done as a discrete journal exercise — allocation rules are for the recurring, repetitive case. --- # ALM with GitHub Actions for Power Platform How to run Power Platform CI/CD with GitHub Actions — Microsoft's official workflows, source structure, and the differences from Azure DevOps. Source: https://www.solvingdynamics365.com/guides/alm-with-github-actions-for-power-platform Section: Power Platform / ALM & governance Published: 2026-05-01 Updated: 2026-08-25 **GitHub Actions** is the second canonical CI/CD path for Power Platform — equivalent in capability to Azure DevOps, increasingly preferred for new projects given GitHub's broader developer mindshare and the integration with the rest of the GitHub ecosystem. ## The Power Platform Actions Microsoft publishes an official GitHub Actions collection — `microsoft/powerplatform-actions` — covering the same surface as the Azure DevOps Build Tools: - `actions-install` — install the `pac` CLI on the runner. - `actions/who-am-i` — authenticate and verify access to a Power Platform environment. - `actions/export-solution` — export solution.zip from an environment. - `actions/pack-solution` / `actions/unpack-solution` — convert between .zip and source folder. - `actions/import-solution` — push a solution into an environment. - `actions/publish-solution` — publish customisations. - `actions/check-solution` — run Solution Checker. - `actions/upgrade-solution` — managed solution upgrade flow. - `actions/reset-environment` — wipe a sandbox. - `actions/copy-environment` — clone an environment. These are composable in `.github/workflows/` YAML files. ## Typical workflow A standard repo would have: - `.github/workflows/ci.yml` — runs on PR and main commits. Packs the solution, runs solution checker, runs any unit tests, publishes an artefact. - `.github/workflows/deploy-uat.yml` — manually triggered or auto on main merge. Imports the latest packaged solution to UAT. - `.github/workflows/deploy-prod.yml` — manually triggered with approval gate. Imports to production. ## Authentication Two patterns: - **Service principal** — register an app in Entra ID, configure secrets in GitHub repository settings. The workflow authenticates with client ID + secret (or certificate, preferred for higher security). - **OIDC / federated identity** — newer approach. GitHub Actions issues a short-lived OIDC token to Azure; Azure validates and grants access. No long-lived secrets to manage; rotation is automatic. OIDC is the recommended pattern for new repositories. ## Environments and protection rules GitHub Actions **environments** correspond to Power Platform environments. Each GitHub environment can have: - **Protection rules** — required reviewers before a workflow targeting this environment runs. - **Deployment branches** — only allow deploys from specific branches. - **Environment-specific secrets** — separate credentials per environment. - **Wait timers** — delay deployment to allow review window. A typical setup: PR workflows run on any branch; deploys to UAT require merge to `main`; deploys to Production require manual approval and only from `main`. ## Source structure Same as Azure DevOps — unpacked solution as folders of YAML / XML / JSON files in source control, with `pac solution pack` reconstructing the .zip at build time. ## ALM for non-solution work Some Power Platform work doesn't live in solutions cleanly: SharePoint configuration, Office 365 tenant settings, Azure resources, custom connector definitions. GitHub Actions handles these too via: - **Azure CLI** — provision Azure resources. - **Microsoft Graph PowerShell** — configure Entra and M365. - **PnP PowerShell** — SharePoint provisioning. - **Custom scripts** — invoke any API. A single workflow can deploy across the full estate, not just the Power Platform solution. **Compare to Azure DevOps.** | Aspect | Azure DevOps | GitHub Actions | |---|---|---| | Microsoft official actions | ✓ (Build Tools) | ✓ (powerplatform-actions) | | OIDC support | ✓ | ✓ (newer, simpler) | | Approval gates | ✓ (rich) | ✓ (good) | | Marketplace breadth | Good | Largest | | Cost | Per-user | Per-minute | | Tight Microsoft ecosystem | More legacy ties | More modern | Both work; GitHub Actions is the choice for new projects in most organisations. ## Operational reality Like any CI/CD, GitHub Actions for Power Platform pays back over time. Invest a week in setting it up; reap the benefits across every deployment from then on. --- # Alumni engagement and advancement on Dynamics 365 How universities run alumni relations and advancement on Dynamics 365 — the lifelong constituent record from applicant to donor, affinity segmentation. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-education-alumni-engagement Section: Industries / Education Published: 2026-09-02 Alumni engagement is the longest customer relationship any organisation manages: the constituent arrives as a seventeen-year-old applicant and may still be receiving the magazine at ninety. The work splits into alumni relations — keeping graduates connected through communications, events, volunteering, and mentoring — and advancement — turning that connection into philanthropic support. Dynamics 365 can carry both on one constituent record, using Customer Insights for segmentation and journeys, Sales for the gift pipeline, and Power Pages for the alumni-facing web. This guide sets out the model and is candid about where the specialist advancement platforms remain stronger. See [Dynamics 365 for education](https://www.solvingdynamics365.com/guides/dynamics-365-for-education) for the institutional picture. ## One record for life The design principle is a single contact from first enquiry to bequest. The [SIS integration](https://www.solvingdynamics365.com/guides/dynamics-365-for-education-sis-integration) guide covers the applicant-to-student handoff; graduation is the next transition, and it must not create a new record. The SIS feed at conferral should update the existing contact with degree, class year, faculty, and graduation date, switch the constituent type to alumnus, and — critically — carry forward the preferred personal email, because the institutional mailbox dies within months. On that contact, alumni-specific structure: - **Education records** as a related table (an alumnus may hold three degrees from the institution), not fields on the contact. - **Affiliations** — faculty, hall of residence, sports team, society, study-abroad cohort — as a many-to-many to an affiliation table. These are what segmentation runs on. - **Employment history** as a related table with current employer as an account, which powers corporate-relations work and peer segmentation. - **Relationships** — spouse, parent of a current student, classmate — through connection records. - **Consent and preferences** per channel and per purpose, because alumni are subject to GDPR, CAN-SPAM, and every other regime the institution's graduates live under. ## Segmentation and journeys **Customer Insights – Data** unifies the constituent's giving, event attendance, email engagement, volunteering, and portal activity into measures — an engagement score is the standard one — and segments. The affinity dimensions above make segments meaningful: "class of a given decade, engineering, attended an event in two years, never given" is a real segment that alumni relations can act on. The [segmentation deep dive](https://www.solvingdynamics365.com/guides/customer-insights-segmentation-deep-dive) covers the mechanics. **Customer Insights – Journeys** carries the communications: the new-graduate welcome sequence, the reunion-year journey, the giving-day campaign, the lapsed-engagement reactivation. Event management in Journeys handles reunions, regional receptions, and lectures with registration, waitlists, check-in, and follow-up; the [event orchestration](https://www.solvingdynamics365.com/guides/dynamics-365-marketing-event-orchestration) guide covers it in depth. Journeys is licensed by contacts and interactions, and an institution with a few hundred thousand alumni needs to size that honestly — inactive alumni without consent should not be in the marketing contact count. ## Giving and advancement Annual giving is a gift table, appeals and campaigns, and stewardship journeys — the same model as [donor management](https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits-donor-management) for nonprofits, and that guide applies in full. Advancement adds the prospect pipeline: research, rating, assignment to a gift officer, cultivation, solicitation, stewardship. **Dynamics 365 Sales** models it as opportunities with a business process flow for moves management, activities for contact reports, and the pipeline for the campaign forecast. Gift officers get Sales licences; everyone else runs on lighter ones. Where the product stops and partners begin: online giving forms and payment processing, planned-giving calculations, matching-gift lookup, wealth screening and prospect research data feeds, and the receipting rules of each country. Established advancement ISVs on Dataverse cover most of this, and choosing one is effectively choosing the giving flow. Endowment accounting — pooled investments, unitisation, spending-policy distributions to individual endowed funds — is a finance question, not a CRM one. It is handled in the ledger with a fund dimension and usually an endowment ISV or a spreadsheet for the unitisation; the CRM records the donor's endowment agreement and its purpose. ## Volunteering and mentoring Alumni volunteers — mentors, guest speakers, interviewers, chapter leaders — are constituents with a volunteer role and a history of engagements. Model roles and engagements as tables, drive recruitment through journeys, and surface opportunities through the portal. Mentoring matching between alumni and students is a Power Pages application over those tables or a specialist mentoring platform integrated back into Dataverse; the specialist platforms are better at matching and messaging, and the CRM should hold the outcome, not the conversations. ## The alumni portal **Power Pages** gives alumni a self-service site: update details and preferences, register for events, view giving history and receipts, browse a directory subject to opt-in, and find volunteering opportunities. Authentication is through Entra External ID or social identity providers; the [Power Pages for customer portals](https://www.solvingdynamics365.com/guides/power-pages-for-customer-portals) guide covers the build. The directory is the feature that carries the most privacy risk — default everyone to not listed, and let them opt in. ## Where the specialists still win Blackbaud and the Salesforce-based advancement products own a large share of higher-education advancement, and their packaged giving, receipting, prospect-research, and reporting are ahead of what Dynamics 365 delivers without ISVs. Dynamics 365 wins where the institution wants alumni relations, student services, and admissions on one platform with one constituent record, already runs Microsoft 365 and Entra, and has the appetite to assemble the giving components from ISVs rather than buy a suite. An institution whose only goal is advancement fundraising should compare the suites honestly. ## Measuring it Engagement rate (share of alumni with a recorded interaction in the year), event attendance by segment, giving participation rate, and dollars raised per gift officer. All four come from the tables above in Power BI; participation rate — givers divided by contactable alumni — is the one that rankings and boards watch, and it needs a defined denominator that the SIS feed and the consent model both agree on. --- # Anti-corruption layers for Dynamics 365 integrations How anti-corruption layers protect Dynamics 365 from external system model leakage — translation patterns, when to apply ACL, and the maintenance discipline. Source: https://www.solvingdynamics365.com/guides/anti-corruption-layers-with-dynamics-365 Section: Integrations / Architecture patterns Published: 2026-05-01 Updated: 2026-08-25 When Dynamics 365 integrates with external systems, those systems have their own domain models, terminology, and quirks. Without intentional design, those external models leak into Dynamics — concepts named oddly, fields that don't match Dynamics's semantics, business logic intertwined. An **anti-corruption layer (ACL)** is the architectural pattern that prevents this leakage: a translation boundary that lets each side keep its own model clean. **The problem.** - External system A uses "Account" for what Dynamics calls "Customer." - External system B has status codes "1, 2, 3, X, Y" with non-obvious meaning. - External system C's date format differs. - Each is a small thing; together they corrupt the model. Without ACL, Dynamics ends up with foreign concepts; future maintenance pays the cost. **What an ACL provides.** - **Translation** — external concepts mapped to Dynamics concepts. - **Isolation** — external system changes don't ripple into Dynamics. - **Defensive validation** — external data validated before crossing. - **Abstraction** — Dynamics doesn't depend on external's specifics. The investment is real; the long-term maintenance benefit is greater. **Where to put the ACL.** - **Azure Function** — common Microsoft pattern. - **Logic App** — for some scenarios. - **Custom service** in App Service. - **API Management policies** — for inbound translation. - **Plug-in** — for simple cases. For complex translations, dedicated services typically. **ACL responsibilities.** - **Receive** external system data. - **Validate** — required fields, formats. - **Translate** — to Dynamics model. - **Enrich** — add Dynamics-specific defaults. - **Forward** — to Dynamics API. - **Translate response** back if needed. The same in reverse for outbound. **Translation patterns.** - **Field mapping** — `external.CustomerId → dynamics.AccountNumber`. - **Value mapping** — `external.Status "1" → dynamics.statecode 0`. - **Structural transformation** — flatten / unflatten. - **Lookup translation** — `external.CountryCode "US" → dynamics.Country reference`. Each translation is a documented rule. **Validation rules.** - **Required fields present.** - **Format valid** — email, date, numbers. - **Value ranges** — within expected. - **Business rules** — domain validation. Catch problems at the boundary; Dynamics doesn't process bad data. **Bidirectional ACL.** - Inbound translation (external → Dynamics). - Outbound translation (Dynamics → external). - Both managed in the ACL. Symmetric translation; consistent model isolation. **When ACL pays back.** - **Integration with legacy systems** — old systems have unique models. - **Multiple similar external systems** — multiple insurers, multiple banks; each slightly different. - **External systems that change frequently** — ACL absorbs the change. - **Different teams own each system** — ACL is the contract boundary. **When ACL is overkill.** - **Simple, well-defined integration** — direct mapping suffices. - **One-time data migration** — overhead exceeds benefit. - **Low volume** — manual quirks tolerable. For most production integrations, some ACL exists even if minimal. **Implementation example.** External system "ProductFulfillment" sends shipments to Dynamics: ``` External payload: { "shipRef": "SHIP-12345", "soNum": "SO-99", "stat": "S", "shipDate": "20261110" } ``` Translated to Dynamics: ``` { "shipmentTrackingNumber": "SHIP-12345", "salesOrderId": "lookup-by-name(SO-99)", "statusCode": 3, // Shipped "shipmentDate": "2026-11-10T00:00:00Z" } ``` The ACL does this translation; Dynamics never sees the foreign vocabulary. ## Schema versioning External system schemas evolve: - ACL versioned independently. - Multiple versions can coexist. - Migration window for upstream callers. Versioning enables schema evolution without breaking consumers. **Error handling at ACL.** - **Validation errors** — return to source; not propagated. - **Translation errors** — log and alert; retry or dead-letter. - **Dynamics errors** — translated back to source-friendly message. The ACL prevents cryptic errors from reaching either side. **Monitoring ACL health.** - **Throughput** — messages translated. - **Validation failures** — what's coming in bad. - **Latency** — translation time. - **Errors** — type and rate. Standard observability; treats ACL as production service. **Common pitfalls.** - **No ACL.** External model leaks into Dynamics; foreign concepts proliferate. - **ACL as thin pass-through.** Doesn't translate; just forwards. No protection. - **Hard-coded mappings.** Should be configuration; making changes requires code. - **No validation.** Bad data reaches Dynamics. - **Stateful ACL.** State should typically live in Dynamics or external; ACL is stateless translation. - **Performance bottleneck.** Heavy translation becomes throughput limit. **Patterns and frameworks.** - **AutoMapper** (.NET) — declarative object mapping. - **JSONata** — JSON transformation language. - **JOLT** — Java-based. - **Custom in TypeScript / C#** — full control. Choose based on team skill and translation complexity. **Testing.** - **Unit tests** — translation correctness. - **Property-based tests** — round-trip preservation. - **Integration tests** — with real external system. - **Performance tests** — high-volume. ACL is critical infrastructure; test like it. **Documentation.** - **Field mapping** documented. - **Value mappings** referenced. - **Validation rules** explicit. - **Error meanings** explained. Documentation enables maintenance years later. ## Strategic positioning Anti-corruption layers represent architectural maturity. Teams new to integration often skip ACL — direct mappings seem simpler. Teams with experience know the long-term cost of model leakage; they invest in ACL upfront. For architects: - Identify boundaries where ACL matters. - Choose appropriate technology per boundary. - Build versioning and observability. - Document translations. The investment pays back through: - Cleaner Dynamics model. - External system changes absorbed. - Easier debugging. - Lower maintenance over years. Not every integration needs heavy ACL; every meaningful integration benefits from some level of intentional translation boundary. Design for the long term. --- # AP automation and OCR in Dynamics 365 Finance How invoice automation works in F&O — vendor invoice journal, OCR extraction, three-way matching, approval workflow, and the partner ecosystem. Source: https://www.solvingdynamics365.com/guides/ap-automation-and-ocr-in-f-and-o Section: Finance & SCM / Finance Published: 2026-06-18 Updated: 2026-08-25 For enterprise organisations, accounts payable handles thousands of vendor invoices per month. Manual data entry from emailed PDFs is slow, error-prone, and expensive. **AP automation** — combining OCR for invoice data extraction, automated matching to purchase orders and receipts, and structured approval workflows — collapses the manual effort. Dynamics 365 Finance ships building blocks; partners deliver the operational platforms most enterprises use in practice. ## The vendor invoice journal F&O's central object for AP processing is the **vendor invoice journal** — an unposted holding area for invoices in process: - **Header** — vendor, invoice number, invoice date, due date, total. - **Lines** — what's on the invoice: line items, GL accounts, dimensions, taxes. - **Status** — Draft, Submitted, Approved, Posted, Cancelled. - **Attachments** — the original PDF for audit. - **References** — link to PO and receipt for three-way matching. Invoices in the journal aren't yet vendor-ledger entries; posting promotes them. **Capture — three options.** 1. **Manual entry** — a clerk reads the PDF and types the data. Slow, expensive, error-prone. Suitable only for very low volume. 2. **F&O native OCR** — Microsoft's built-in OCR (via AI Builder) reads the PDF and extracts vendor identity, invoice number, dates, totals, line items. The user reviews extracted data, corrects errors, then posts. Adequate for simple invoice layouts and low-to-moderate volume. 3. **Partner AP automation** — specialist platforms (Continia Document Capture, ExFlow, Documotor, Tungsten Network, ABBYY-based solutions) deliver: - High-accuracy OCR tuned for invoice layouts. - Per-vendor field-mapping templates that learn over time. - Three-way matching automation. - Sophisticated multi-step approval workflows. - Exception handling dashboards. - Integration to e-invoicing standards. For high-volume operations (hundreds to thousands of invoices weekly), partner AP automation is the practical choice. ## Three-way matching For invoices referencing purchase orders: - **PO** — what was ordered (quantities, prices, items). - **Receipt** — what physically arrived. - **Invoice** — what the vendor is billing. Matching all three before approving the invoice catches: vendor overbilling, missing receipts, mispriced lines, quantity discrepancies. F&O supports configurable tolerance thresholds — exact match, percentage variance, dollar variance. Mismatches outside tolerance route to exception handling. ## Approval workflow AP approval typically follows: - **Document validation** — completeness, vendor verification. - **Three-way match** — if PO-referenced, match the three. - **GL account assignment** — for non-PO invoices, the GL clerk assigns the right account. - **Department / cost-centre approval** — manager of the relevant cost centre signs off. - **Compliance review** — for high-value or unusual invoices. - **Final approval** — by AP lead or controller. Each step routes through F&O workflow with configurable conditions, escalation, and audit trail. ## Approval-on-mobile Approvers act from: - F&O web client. - F&O mobile app. - Microsoft Teams (with adaptive cards). - Email (action links). The multi-channel surface speeds approval cycles substantially. ## E-invoicing integration For jurisdictions with mandatory e-invoicing (Spain SII, Italy SDI, Mexico CFDI, Brazil NFe, EU's growing requirements), AP automation integrates with the country e-invoicing platforms: - Receive vendor invoices in structured e-invoice format directly (no PDF / OCR step). - Validate signatures and authenticity. - Process through the standard workflow. ## Posting Approved invoices post to: - Vendor ledger — creating the open AP entry. - General ledger — debit to expense / asset, credit to AP control. - Inventory ledger (if PO-referenced) — closing out the goods-received-not-invoiced accrual. - Project ledger (if project-referenced) — adding to project cost. The system enforces three-way match thresholds; over-tolerance differences require explicit acknowledgment. **Reporting and KPIs.** - **Days to approve** — workflow cycle time per invoice. - **Touchless rate** — % of invoices that flow PO → match → approve → post without manual intervention. - **Exception rate** — % that hit a mismatch or rejection. - **Early-payment discount capture** — invoices paid within the discount window vs not. - **Vendor-specific patterns** — vendors with consistent mismatches, late documentation, etc. **Common pitfalls.** - **Low OCR accuracy** — for poorly-formatted vendor invoices, OCR extraction is unreliable. Per-vendor templates help. - **Slow approval cycles** — invoices sit unapproved for weeks; late-payment penalties accumulate; vendor relationships strained. - **Three-way match tolerances too loose** — over-billing slips through. - **Three-way match tolerances too tight** — every legitimate variance becomes an exception. ## Operational reality AP automation is one of the highest-ROI projects in enterprise finance. Per-invoice processing cost typically drops from €20+ to under €5; cycle time from weeks to days. Most mid-to-large F&O customers run a partner AP automation platform alongside F&O's native capabilities. --- # API Gateway patterns for Dynamics 365 How API gateways enhance Dynamics 365 integration architecture — Azure API Management, security, rate limiting, transformation. Source: https://www.solvingdynamics365.com/guides/api-gateway-patterns-for-dynamics-365 Section: Integrations / Architecture patterns Published: 2026-05-01 Updated: 2026-08-25 When many consumers integrate with Dynamics 365 — or when Dynamics needs to expose APIs externally — an **API Gateway** sits in front of the actual APIs to provide cross-cutting concerns: authentication, rate limiting, transformation, logging, versioning. **Azure API Management (APIM)** is Microsoft's offering; for serious Dynamics integration architectures, an API gateway is foundational infrastructure. **What an API gateway does.** - **Authentication / authorisation** — verify caller identity. - **Rate limiting** — protect backend from overload. - **Request / response transformation** — adapt formats. - **Caching** — reduce backend load. - **Logging and analytics** — visibility. - **Routing** — direct traffic to appropriate backend. - **Versioning** — multiple API versions coexist. The gateway centralises these concerns; backends focus on business logic. **Why for Dynamics 365.** - **Standardise external API access** to Dataverse. - **Hide multiple backends** — Dataverse + F&O + custom services behind one façade. - **Security boundary** — additional defense layer. - **Throttle protection** — prevent overwhelming Dataverse limits. - **Developer experience** — discoverable, documented APIs. **Azure API Management (APIM).** - **Developer portal** — API documentation, testing. - **Policies** — declarative request / response handling. - **Products** — group APIs for consumers. - **Subscriptions** — per-consumer keys. - **Backends** — connections to actual API sources. - **Versions and revisions** — version management. Mature product; widely used. **Common patterns.** ## API façade Multiple backends, one external API: - External consumers see unified API. - Gateway routes to appropriate backend. - Backend complexity hidden. For Dynamics + F&O + custom services, single external API simplifies consumer experience. ## Throttling Protect Dataverse: - Gateway limits caller to N requests / minute. - Aggregated across all calls. - 429 returned when exceeded. Dataverse has its own throttling; gateway adds tenant-level throttle and queue management. ## Transformation Adapt request / response: - External format vs Dataverse format. - Add / remove fields. - Reformat dates, currencies. - Inject defaults. Reduces backend complexity; clients see clean API. ## Caching Frequently-read data: - Cache response at gateway. - Subsequent calls served from cache. - TTL configured. For read-heavy reference data (product catalog, country list), dramatically reduces Dataverse load. **Security policies.** - **OAuth 2.0** — token validation. - **IP filtering.** - **Client certificate authentication.** - **JWT validation** — claims-based access. Each policy at gateway level; backend doesn't reimplement. **Versioning.** - **v1** API endpoint. - **v2** updated API. - Both coexist; consumers migrate gradually. Without versioning, breaking changes break consumers; with, smooth evolution. **Backend mapping.** - **Dataverse** — OData API endpoint. - **F&O** — data entities OData endpoint. - **Custom services** — Azure Functions, App Services. - **External APIs** — third-party services. Gateway abstracts which backend; routing logic per request. **Developer portal.** - Self-service API documentation. - Try-it-out console. - API key generation. - Usage analytics per developer. For external developer ecosystems, the developer portal is the front door. **Monitoring at gateway.** - Per-API request volume. - Latency distribution. - Error rate. - Per-consumer usage. Centralised observability for all API traffic. **Common APIM policies.** ```xml api://my-api ``` Policies declarative; powerful at expressing common patterns. **Multi-tenant scenarios.** - ISVs serving multiple customers via single gateway. - Per-tenant routing. - Tenant-isolated rate limits. - Tenant-specific transformations. The gateway handles multi-tenancy without backend complexity. **Pricing considerations.** - APIM Pricing tiered (Consumption, Developer, Basic, Standard, Premium). - Premium for enterprise scale. - Cost vs benefit modelling. For high-volume APIs, Premium tier necessary. **Comparison with direct Dataverse API.** - **Direct** — simple, less control, no transformation. - **Gateway-mediated** — more setup, more control, more observability. Direct API fine for internal apps and Power Platform. Gateway for external consumers, multi-system façade, security perimeter. **Common pitfalls.** - **Gateway as just passthrough.** Adds latency without value. - **Heavy transformation logic at gateway.** Should be in business logic layer. - **No documentation.** Developer portal empty; adoption low. - **No versioning.** Breaking changes propagate. - **Rate limits wrong.** Too restrictive frustrates; too loose lets abuse through. - **Authentication misconfigured.** Authorised callers blocked or unauthorised allowed. **Best practices.** - **Document everything** — schema, examples, errors. - **Version from day one.** - **Standardised error responses.** - **Comprehensive monitoring.** - **Caching where data permits.** - **Security policies tested.** - **Performance tested.** **Alternative: Power Platform's connectors as gateway.** - For Power Platform-only consumers, custom connectors serve similar purpose. - Less for external consumers. APIM is broader; custom connectors more Power Platform-specific. ## Strategic positioning API Management is the modern way to expose Dynamics 365 APIs to external consumers and to integrate multiple backends behind a unified façade. The investment in APIM setup pays back through: - Cleaner consumer experience. - Centralised security and rate limiting. - Better observability. - Easier evolution. For organisations with multiple consumers of Dynamics APIs, multiple backend systems, or aspirations to expose APIs externally (B2B, partner ecosystems), API Gateway is essential infrastructure. Skip it and you'll end up reinventing pieces poorly across multiple integrations. --- # App designer for model-driven apps How to build a model-driven Power App — site map, tables, forms, views, business process flows, dashboards, and the app-experience layer. Source: https://www.solvingdynamics365.com/guides/app-designer-for-model-driven-apps Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Updated: 2026-08-25 Every Dynamics 365 CRM-side product (Sales, Customer Service, Field Service, Project Operations) *is* a model-driven Power App — a curated experience over Dataverse with a site map, included tables, configured forms, views, dashboards, and process flows. Building your own model-driven app, or customising the standard Dynamics 365 ones, happens in the **app designer**. ## What a model-driven app is Where a canvas app is pixel-perfect drag-and-drop, a model-driven app is *generated* from configuration: - **Tables included** — which Dataverse tables the app shows. - **Site map** — the navigation structure (areas → groups → subareas). - **Forms** — which forms are available for each table. - **Views** — which views appear in each table's list. - **Charts and dashboards** — analytical surfaces. - **Business process flows** — staged processes embedded in forms. - **Components per table** — fine-grained inclusion of business rules, security roles, scripts. The platform renders the app — list pages, forms, command bar, navigation — automatically from the configuration. No layout drawing; consistent, responsive, mobile-aware UX out of the box. ## The site map The **site map** is the left-side navigation menu of the app. It has: - **Areas** — top-level groupings (Sales, Service, Settings). - **Groups** within areas — labelled subdivisions. - **Subareas** within groups — the actual navigation items, each pointing to a table, a view, a dashboard, a URL, or a web resource. A typical sales-oriented app has areas for *Sales* (with Leads, Opportunities, Accounts, Contacts subareas), *Marketing* (with Campaigns, Marketing Lists), and *Reports / Dashboards*. ## App designer UI Microsoft has been migrating from the older app designer (in the classic interface) to the **modern app designer** in the Power Apps maker portal. The modern designer offers: - Visual editing of the site map with drag-and-drop. - Side-pane lists of available tables, forms, views, business rules. - Inline forms designer for the included forms. - Live preview during editing. - Solution-aware so the app deploys cleanly across environments. ## Customising standard Dynamics 365 apps The shipped Dynamics 365 apps (Sales Hub, Customer Service Hub, Field Service, etc.) can be customised — adding custom tables to the site map, removing tables not in use, adjusting which forms / views are shown. Customisations live in unmanaged solutions in dev, exported as managed for promotion. ## Building a new app from scratch Start in app designer: 1. Name the app. 2. Add tables — pick from Dataverse's existing tables. 3. Configure the site map — group tables logically, add labels, set icons. 4. Configure forms per table — which form is the default for each table. 5. Configure views per table — which views appear in the list selector. 6. Add dashboards and business process flows. 7. Save and publish. The result is a new app accessible at `/apps/` URL, with its own icon in the App selector. ## Multi-app patterns A single Dataverse environment can host many model-driven apps, each with different tables and configurations: - **Sales app** — Sales-relevant tables and views. - **Service app** — Cases, Knowledge, SLAs. - **Internal-tool app** — Custom tables for internal processes, no Dynamics standard tables. - **Read-only viewer app** — for executives or external auditors. Each app respects its own security; users only see apps they have access to. ## Theme and branding App themes (colours, logos) are configured per app or per environment. The shipped Dynamics 365 apps have their own themes; custom apps can have bespoke branding. ## Mobile Every model-driven app renders on the Power Apps mobile app automatically. Configure mobile-specific form variants if the standard form is too dense for small screens. **Limits.** - **Structure is constrained** — model-driven apps don't support arbitrary layout. Pages are forms / lists / dashboards / business process flows. Anything else needs canvas pages embedded in the app. - **Performance** — apps with many tables and many forms slow down. Audit included content. **Common patterns.** - **One app per persona / role** — Sales for sellers, Service for agents, Field Service for technicians. Each focused. - **One environment, many apps** — share data, separate experiences. - **Custom page injection** — when you need pixel-perfect UX for one screen, embed a custom canvas page in the model-driven app. ## Operational reality Apps are configuration, not code. Iterate them as the business learns what users actually need. Version them in solutions; promote through environments cleanly. --- # Application areas in Business Central How Application Areas in Business Central control which features users see — Basic, Essential, Premium. Source: https://www.solvingdynamics365.com/guides/business-central-application-areas Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-25 Business Central licenses come in tiers — Essential and Premium primarily. Different tiers unlock different feature sets. **Application Areas** is the mechanism BC uses to selectively show or hide UI controls based on which features are licensed and which scenarios are needed. It's quiet plumbing that most users don't notice, but understanding it matters for customisation and tenant configuration. ## The application area concept Every field and control in BC can be tagged with one or more application areas. When a user opens a page, BC checks: - Which application areas the company has enabled. - For each control, does any of its application areas match? - If yes, render; if no, hide. Out-of-box, BC standard control set ships tagged across application areas, allowing tenants to expose different feature sets. **Standard application areas.** - **#Basic** — fundamental operations. - **#Suite** — broader suite functionality. - **#Finance** — finance-specific. - **#FixedAssets** — fixed asset management. - **#Manufacturing** — production. - **#Service** — service module. - **#Premium** — features only available in Premium licence. - **#Advanced** — advanced features. - **#All** — always shown. A control tagged `#Manufacturing, #Premium` shows only when both application areas are enabled. **Enabling application areas per company.** - **Company Information** page → **Application Areas** action. - Checkboxes per application area. - Saved per company. Different companies in the same tenant can have different application areas; legal entities with different licence tiers stay separated. ## The licence connection The licence determines which application areas can be enabled. A company with an Essential licence cannot enable #Premium application areas — the system enforces. **Customisation via application areas.** - A custom field added by an extension can be tagged with an application area. - Visible only in companies with that application area enabled. - Useful for premium features within a partner extension. ## Per-user override Users can't override application areas — these are company-level. Personalization is the user-level mechanism for showing/hiding controls; application areas are operational policy. **Common use cases.** - **Essential customer** — sees core finance, sales, purchasing. Manufacturing controls hidden. - **Premium customer** — sees everything including service and manufacturing. - **Multi-tenant partner** — different customers with different enabled areas. **Adding a new application area.** ```al controladdin MyControl extends MyTable { field("MyField"; Code[20]) { ApplicationArea = MyCustomArea; // ... } } ``` Then enable `MyCustomArea` in Company Information. For custom partner extensions adding their own application areas, the discipline lets the partner ship features that customers can selectively enable. ## Hiding without application areas Other mechanisms: - **Visibility property** — code-driven show/hide. - **Permission sets** — controls visible only to certain users. - **Personalization** — user-level. Application area is for license-tier or business-area-driven exposure. Visibility is for runtime logic. Permission is for security. Personalization is for user preference. The four mechanisms compose; understanding each prevents confusion. **Common pitfalls.** - **Forgotten application area on new custom field.** Field never appears. - **Application area set wrong.** Field shows in all companies despite intent for premium-only. - **Conflicting application areas.** Field with `#Premium AND #Manufacturing`; both must be enabled; user enabled only one; field hidden. - **Application areas vs Visibility confusion.** Developers use Visibility when they should use ApplicationArea, or vice versa. ## Migration considerations When updating BC versions: - Standard application area tags may change. - Custom extension application areas should be tested against the new version. - Some fields may appear or disappear due to platform changes. ## Audit considerations Application areas don't generate audit logs by themselves. Changes to enabled areas are tracked via change log if configured. ## Per-tenant defaults A new BC company gets default application areas based on the licence and the company creation wizard's choices. Reviewing and adjusting these post-creation is a setup step. ## Strategic positioning Application areas are a hidden but powerful feature for managing what users see. They reflect licence boundaries, business scope, and customisation strategy. For partner extensions, they enable tier-based product offerings. For multi-company tenants, they enable per-company scope. Most users never know they exist — and that's by design — but admins and developers benefit from understanding the model. Time spent learning it pays back when figuring out why a field doesn't appear or how to selectively expose features. --- # Approval limits and hierarchies in Business Central How Business Central routes documents through approval — user approval limits, hierarchical routing, workflow user groups, and the substitute mechanism. Source: https://www.solvingdynamics365.com/guides/approval-limits-and-hierarchies-in-bc Section: Business Central / Finance & accounting Published: 2026-05-31 Updated: 2026-08-25 For organisations of any size, controlling who can authorise what is operationally fundamental. Business Central's **approval limits** and **hierarchical routing** structure who can approve which documents — and the workflow engine routes documents accordingly. ## User approval setup Each Business Central user record has an associated **User Setup** with approval-related fields: - **Sales Amount Approval Limit (LCY)** — the maximum amount of sales documents this user can approve. - **Purchase Amount Approval Limit (LCY)** — the maximum amount of purchase documents this user can approve. - **Request Amount Approval Limit** — the maximum amount this user can submit (over this requires preventive approval). - **Approver ID** — the user this user reports to for approval routing. - **Substitute** — the user who acts on behalf during this user's absence. - **Unlimited Sales / Purchase Approval** — boolean overrides for top-of-hierarchy users. The fields together model the approval hierarchy and authorisation amounts. **The approval flow.** 1. User creates a document (a purchase order, a sales quote, an expense report). 2. User clicks **Send Approval Request**. 3. Workflow evaluates routing rules based on the document, the user, the configured workflows. 4. Approval request created and assigned to the first approver — typically the user's Approver, picked up the hierarchy from the User Setup. 5. If the first approver's limit covers the document amount, they can approve. 6. If the amount exceeds the approver's limit, the request escalates to *their* approver. 7. The escalation continues up the hierarchy until an approver with sufficient limit is found. 8. Each approver acts (approve, reject, delegate) before the next step. 9. Once approved, the document is unlocked for posting. The hierarchical routing is automatic — the platform walks the Approver chain. ## Workflow templates Microsoft ships approval workflows for common documents: - Purchase quote / order / invoice approvals. - Sales quote / order / invoice approvals. - Payment journal approvals. - Document approval for customer credit limits. - Item creation / modification approvals. Each template uses the User Setup hierarchy plus configured conditions. Templates can be customised — different threshold conditions, alternative approver assignments, multiple parallel branches. ## Workflow user groups Beyond hierarchical routing, **workflow user groups** define ordered or parallel sets of approvers. Useful when: - A complex approval needs multiple roles (finance + procurement + technical). - The standard manager hierarchy doesn't match approval requirements. - Specific document types need specialist approvers (legal for contracts). Groups can be configured with sequential routing (each in turn) or parallel routing (all approve in parallel; complete when all done). ## Substitutes When an approver is unavailable (holiday, illness, departure), the **Substitute** field on their User Setup redirects pending approvals to the substitute. Active during the absence window. Substitutes can be configured per user and updated as needed. ## Escalation Pending approvals can be configured to **auto-escalate** after a configurable delay — e.g. if the manager doesn't act within 48 hours, escalate to *their* manager. Prevents stuck approvals in long-leave scenarios where substitutes weren't configured. ## Email and Teams notifications Approvers receive notification of pending approvals via: - Business Central role-center activity tile. - Email with action links. - Microsoft Teams card (with the BC Teams app installed) — approve/reject inline from Teams. - Mobile app push notification. The multi-channel notification helps approvals move quickly. ## Approval audit Every approval action records: - Who approved (or rejected, or delegated). - When. - Comments left by the approver. - The state of the document at the time of action. The audit log is part of the document's history; auditors can reconstruct exactly how each posted document was approved. ## Custom workflows Beyond Microsoft's templates, custom workflows can be configured via the **Workflow Designer**: - New triggers (custom document types, custom conditions). - New response actions (call Power Automate flows, raise alerts, set additional fields). - Complex conditional branching. For workflows that need to cross systems or integrate with external services, **Power Automate** is typically the better tool — triggered by Business Central events, the flow handles the orchestration. **Common pitfalls.** - **Approval hierarchies that don't match reality.** Recent re-orgs invalidate the configured chain; documents route to the wrong people. - **No substitutes** — managers go on leave, documents pile up unapproved. - **Approval limits set too low** — every document escalates; the senior approver becomes a bottleneck. - **Approvers don't know they're approvers** — no training; documents sit unactioned. - **Workflow proliferation** — dozens of workflows with overlapping conditions, unpredictable behaviour. ## Operational reality Approval workflows are governance code — they enforce control discipline that prevents fraud, misposting, and unauthorised commitments. Configure thoughtfully, maintain actively, audit periodically. --- # Approval workflows in Business Central How approval workflows work in Business Central — built-in templates, custom workflow design, Power Automate alternatives, and approval limits. Source: https://www.solvingdynamics365.com/guides/business-central-approval-workflows Section: Business Central / Finance & accounting Published: 2026-05-01 Updated: 2026-08-25 Approval workflows in Business Central enforce that high-impact documents — purchase orders over a limit, customer credit overrides, payment journals, sales quotes — are reviewed and signed off before they post. The built-in engine is functional and easily extendable, with Power Automate available when you need to reach outside BC. ## The workflow engine Each workflow has a **template** that defines triggers (e.g. "Sales Document Approval"), conditions (lines amount above 50,000), and a sequence of *response* actions: notify users, set status to *Pending Approval*, send approval requests, escalate after delay, allow or block postings while pending. Approvers act from inside BC, from email notification links, or from Microsoft Teams cards. ## Built-in templates Microsoft ships templates for purchase quote/order/invoice approvals, sales quote/order/invoice approvals, customer overcredit notifications, payment journal approvals, and overdue payment reminders. A new tenant gets all of them; they're disabled by default and enabled as needed. ## Custom workflows A workflow designer page lets you copy a template and modify the trigger conditions, approver hierarchy (direct manager, named approver, workflow user group, sales/purchase amount approval limits), and response actions. Conditions support AL field filters with AND/OR logic. The same engine drives custom workflows from extensions. ## Approval limits Each user has a record in **User Setup** with *approval limits* — the maximum amount they can approve for sales and purchase documents. Workflows route up the hierarchy until a sufficient approver is found. ## Workflow user groups For more complex routing (e.g. project approvals routed to the project manager rather than the document creator's manager), workflow user groups define ordered or parallel approver sets. ## Substitutes and delegation Each user can name a substitute approver, so leave doesn't block business. ## Power Automate as an alternative For workflows that need to reach outside BC (Slack notifications, integrations to external systems, complex conditional logic), Power Automate cloud flows triggered by BC are a stronger fit. Microsoft ships actions for *create approval*, *wait for response*, *update record*. A pragmatic pattern: built-in workflows for posting controls; Power Automate for orchestrations across multiple systems. ## Audit Every approval action writes to the approval entries table — who approved, when, on what, with comments — and survives in the database for the life of the record. --- # Architecture decision records for Dynamics 365 How ADRs capture the architectural choices in a Dynamics 365 program — what they are, what to record, and the long-term value they provide. Source: https://www.solvingdynamics365.com/guides/architecture-decision-records-for-dynamics-365 Section: Implementation / Methodology Published: 2026-08-09 Updated: 2026-08-25 A Dynamics 365 implementation makes hundreds of architectural decisions — Sales vs Customer Service for some workflow, BC vs F&O for a subsidiary, Power Automate vs plug-in for some logic, partner ISV vs custom build. Three years later, when someone asks "why did we do it this way?", nobody remembers. **Architecture decision records (ADRs)** are the lightweight discipline that captures the reasoning while it's fresh. ## What an ADR is An ADR is a short document — typically one or two pages — capturing one architectural decision: - **Title** — succinct description. - **Status** — Proposed, Accepted, Deprecated, Superseded. - **Context** — what problem are we solving? What's the situation? What constraints apply? - **Decision** — what did we decide? - **Consequences** — what are the implications? Trade-offs? Risks? - **Alternatives considered** — what else was on the table? Why was each rejected? - **Decision-makers** — who decided? - **Date** — when. Format-wise, plain markdown files in a version-controlled repository — `docs/adr/0001-use-dataverse-for-shared-customer-data.md`, `docs/adr/0002-bc-not-f-and-o-for-uk-subsidiary.md`, sequentially numbered. **Why bother.** - **Decisions are made by people who leave.** Three years from now, the original architect is at another company. Without ADRs, their reasoning is lost; successors reverse decisions without understanding why. - **Decisions need to be revisited.** "Did we decide F&O for the UK because of complexity or because BC didn't support a feature in 2023?" Without an ADR, that question can't be answered. - **Decisions are evidence in audits and post-mortems.** "Why did we choose vendor X over vendor Y?" The ADR is the evidence. - **Onboarding new team members.** Reading ADRs gives them context faster than reverse-engineering decisions from code. **Common ADR topics in Dynamics 365 programs.** - **Product selection per subsidiary** — why F&O for one entity, BC for another. - **CRM-side product choice** — why Sales + Service, or Sales-only, or Customer Insights without Sales. - **Customisation strategy** — when to use Power Platform vs AL/X++ vs plug-ins. - **Integration patterns** — Dual-write vs Synapse Link vs custom for specific data flows. - **Multi-currency / multi-entity setup** — chart of accounts shared or per-entity, reporting currency, consolidation approach. - **Security model** — business unit topology, role design, hierarchical security. - **Environment topology** — number of sandboxes, naming, lifecycle. - **DLP policies** — connector classification choices. - **ISV selection** — why Continia for AP automation vs ExFlow vs Documotor. - **Identity provider** — Entra ID, External ID, federated, social. - **API authentication** — service principals vs managed identity vs OAuth. - **Disaster recovery strategy** — RPO/RTO targets and how they're met. **Writing a good ADR.** The hardest part isn't the format — it's documenting honestly. Good ADRs: - **Explain context that's not in the decision.** Why now? What pressures, constraints, opportunities led here? - **List real alternatives, not strawmen.** "We considered X, Y, Z" — actual considered options, with real reasons each was rejected. - **Acknowledge trade-offs.** Every architectural decision has trade-offs; pretending otherwise is dishonest. - **Are short.** One or two pages, not twenty. ADRs that nobody reads are wasted effort. **ADR lifecycle.** - **Proposed** — under discussion; comments expected. - **Accepted** — decision made; team is acting on it. - **Deprecated** — decision is no longer current; usually superseded by a newer ADR. - **Superseded** — explicitly replaced by another ADR (which references the predecessor). Old ADRs aren't deleted — they're marked superseded with a reference to the new ADR. The history matters. **Storage and access.** Best practice: - **In source control** — alongside the code, in a `docs/adr/` folder. - **Versioned** — Git tracks changes; review through PRs. - **Linkable from the code** — code comments can reference ADR numbers ("see ADR-0042 for why we use this pattern"). - **Discoverable** — index file listing all ADRs with status. For Dynamics 365 programs without a central code repo, ADRs can live in Azure DevOps wikis, Confluence, or SharePoint. The format matters less than the discipline. **Frequency.** Not every decision warrants an ADR. Heuristics: - **Architecturally consequential** — affecting the broader system, not local code style. - **Hard to reverse** — once committed to, reversing is expensive. - **Debated** — alternatives were seriously considered. - **Non-obvious to a future reader** — without context, someone would do something different. Roughly: a healthy Dynamics 365 program produces 20-50 ADRs over its first year, with steady-state of 10-20 per year afterward. **Reviews and revisits.** Schedule periodic ADR reviews: - Each release cycle, identify ADRs that should be revisited based on what's been learned. - Annual review of accepted ADRs — still relevant? Still correct? Still consistent with current state? - On major changes (new modules, big integrations, organisational changes), audit affected ADRs. **Common pitfalls.** - **No ADRs at all** — decisions are tribal knowledge; lost when people leave. - **ADRs written but not maintained** — stale ADRs are worse than no ADRs (they mislead). - **ADRs too detailed** — multi-page ADRs nobody reads. - **ADRs as documentation, not records** — ADRs aren't user guides; they're decision records. ## Operational reality ADRs are a small investment that pays back enormously. Adopt the practice; treat it seriously; the program's institutional memory thanks you. --- # Assembly orders in Business Central How Business Central handles assembly orders — assembly BOMs, assemble-to-order vs assemble-to-stock, and when to use assembly vs production orders. Source: https://www.solvingdynamics365.com/guides/assembly-orders-in-business-central Section: Business Central / Inventory & warehouse Published: 2026-05-01 Updated: 2026-08-25 Business Central includes an **Assembly** module — a lightweight production capability available in **Essentials** (unlike the full manufacturing module, which is Premium). It's designed for kitting, simple assembly, and configure-to-order scenarios where the operation is "combine these components into this finished good" without complex routings, capacity planning, or shop-floor reporting. ## Assembly BOMs An item is marked as *assemblable* by attaching an **assembly BOM** — a list of components with quantities and units of measure. Components can be inventory items or resources (time consumed by a person or workstation). Unlike production BOMs (in the Manufacturing module), assembly BOMs are single-level and have no routings. **Two assembly policies.** - **Assemble-to-Stock (ATS).** The assembly is built into inventory ahead of demand. Common for kits sold frequently, where holding finished kits in stock is faster than assembling on order. - **Assemble-to-Order (ATO).** The assembly is built specifically for a customer order. The sales order line carries a quantity, and Business Central automatically creates a *linked assembly order* that produces the goods when the sales line is released. Cancelling or changing the sales line propagates to the assembly order. This is the powerful pattern — order-driven assembly without manual coordination. ## The assembly order An assembly order has a header (the finished item, quantity, due date, location) and lines (the components being consumed). Status flows: Open → Released → Posted. On posting: - Components are consumed (item ledger entries posted as outbound, value entries posted at cost). - The finished item is created (item ledger entry posted as inbound, value entry posted at the cost of consumed components plus resource cost). - Resource time is captured as resource ledger entries. ## Substitutions and variants Component lines can be **substituted** at assembly time if the planned component is unavailable. Variants are supported — a kit can be assembled in different colour variants from variant-specific components. **When to use assembly vs production orders.** - **Assembly** for: kits, simple bundles, configure-to-order with no routing, distribution-style light value-add. - **Production orders** for: anything with a routing, capacity planning, subcontracting, finite scheduling, scrap accounting, or shop-floor time reporting. Assembly is available in Essentials; Production is Premium-only. For customers on Essentials whose needs grow toward routings, this is one of the reasons to upgrade. ## Sales integration ATO assembly orders show on the sales order alongside the line, with full traceability between sales and the build. Posting the sales shipment automatically posts the assembly. Customer documents print only the sales line, not the underlying components, unless explicitly configured. ## Reservation Components on an assembly order can reserve against specific on-hand stock, ensuring the right batch or serial is consumed. Combined with order-to-order binding, this is how MTO businesses keep promises. ## Reporting Assembly orders appear in production-style availability reports and contribute to inventory valuation. Standard reports cover assembly capacity, component consumption, and cost variance. --- # Asset hierarchies in Dynamics 365 Field Service How D365 Field Service models complex asset structures — parent-child relationships, sub-assets, asset categories. Source: https://www.solvingdynamics365.com/guides/field-service-asset-hierarchies Section: Customer Engagement / Field Service Published: 2026-05-01 A wind turbine isn't one asset; it's a parent asset (the turbine) with sub-assets (gearbox, generator, blades, controller). A manufacturing line has multiple machines, each with components. A building has HVAC units, each with subsystems. **Field Service asset hierarchies** model these multi-level structures so work orders, maintenance, and analytics reflect operational reality. **The customer asset entity.** - **Asset name and identifier** — serial number, asset tag. - **Make, model, manufacturer** — what it is. - **Customer** — the owning organisation. - **Location** — physical site. - **Parent asset** — for hierarchy. - **Functional location** — where it sits within the larger structure. **Hierarchy via parent asset.** - An asset's `Parent Asset` field points to its parent. - Hierarchy navigable up and down. - Multiple levels supported (no fixed depth). A typical hierarchy: ``` Building 1 Floor 2 HVAC Air Handler Unit Cooling Coil Heating Coil Fan Motor ``` Each is its own asset record; relationships build the tree. ## Functional locations Alternative organising structure: - Functional location ≠ physical asset. - Physical location structure ("Building 1 → Floor 2 → Room 203"). - Assets assigned to functional locations. Some operations prefer functional location-based organisation; others prefer asset hierarchy. Both can coexist. ## Asset categories Type-based classification: - Heating equipment. - Cooling equipment. - Plumbing. - Electrical. Categories drive default maintenance, default work order types, default service contracts. **Work orders on hierarchical assets.** - Work order targets a specific asset. - Can also reference parent for context. - Sub-asset failures may require parent-level diagnosis. The hierarchy enables impact analysis — "if the gearbox fails, what else is affected?" ## Maintenance plans Per-asset or per-asset-category: - Schedule routine maintenance. - Generate work orders automatically. - Each maintenance plan targets specific asset(s). For asset hierarchies, decide which level maintenance plans attach to — typically the operating asset, not individual components. **Asset lifecycle states.** - **Active** — in service. - **Inactive** — out of service but retained. - **Decommissioned** — removed permanently. - **Under maintenance** — temporarily down. State transitions tracked; reporting respects state. ## Asset attributes Custom fields per asset category: - Capacity. - Voltage. - Manufacturer-specific specifications. - Last service date. Stored as additional columns or as related attribute records. ## IoT integration Connected assets: - Each asset has IoT device association. - Telemetry data linked. - Alerts trigger work orders. The asset hierarchy informs alert routing — a sub-asset alert may escalate to the parent's responsible team. ## Service contracts Asset-linked: - Coverage by asset or asset group. - Different service levels per asset type. - Renewal cycles per asset. Tracking which assets are under contract is operationally critical for billing decisions. **Reporting hierarchies.** - **Asset utilisation** — by asset or by hierarchy parent. - **Maintenance cost** — by hierarchy. - **Mean time between failures (MTBF)** — by asset type. - **Mean time to repair (MTTR)** — diagnostic effectiveness. These metrics drive capital planning, vendor performance reviews, and operational decisions. ## Asset transfers When assets move: - Customer sale of equipment. - Internal transfer between sites. - Re-deployment after maintenance. Hierarchy and ownership must update; work orders in flight need handling. **Common pitfalls.** - **Flat asset structure for complex equipment.** Single asset record for what's actually multiple components; granularity lost. - **Over-decomposition.** Every screw as separate asset; maintenance impossible. - **Hierarchy not maintained.** Reality changes; system doesn't. - **Decommissioned not decommissioned.** Inactive assets still generating false alerts. - **No standard category taxonomy.** Each customer has unique categories; cross-customer reporting impossible. **Best practices.** - **Hierarchy depth thoughtful.** 2-4 levels usually enough; deeper rarely useful. - **Decompose to maintenance unit.** What's separately maintained = its own asset. - **Consistent categories** across customer base. - **Asset audit periodic** — verify reality vs system. - **Decommissioning discipline** — actively retire stale assets. ## Service organisations' patterns A typical maintenance services company: - Tens of thousands of customer assets. - Multiple sites per customer. - Complex hierarchies for industrial equipment. - IoT integration for monitored assets. Field Service handles this scale with appropriate setup. **Operational rhythm.** - **Per work order completion** — update asset state. - **Quarterly** — asset audit per customer. - **Annually** — asset master cleanup and reconciliation. ## Strategic positioning Asset hierarchies are foundational for serious field service operations. A flat asset model works for simple equipment; complex industrial environments demand hierarchical modelling. The investment in upfront hierarchy design pays back in work order accuracy, maintenance effectiveness, reporting clarity, and the ability to use IoT meaningfully. Field Service supports the depth; the organisation must apply the discipline to use it. --- # Asset Management in Dynamics 365 Supply Chain How Dynamics 365 SCM's Asset Management module handles maintenance — work orders, preventive maintenance, condition monitoring, and the role of IoT. Source: https://www.solvingdynamics365.com/guides/asset-management-in-dynamics-365-scm Section: Finance & SCM / Finance Published: 2026-05-01 Updated: 2026-08-25 For asset-heavy operations — manufacturers with production equipment, utilities, transport fleets, building owners, energy companies — maintenance management is operationally critical. Downtime is expensive; reactive maintenance is more expensive than planned. Dynamics 365 Supply Chain Management ships an **Asset Management** module covering the full enterprise maintenance lifecycle. ## Asset registry A hierarchical **asset register** holds every maintainable asset: - **Asset** — a piece of equipment with identifier, model, location, criticality. - **Functional location** — where the asset lives (plant, line, area, building, room). - **Asset type and category** — classification for reporting and policy. - **Manufacturer, serial number, warranty** — for vendor management. - **Lifecycle status** — Active, In Storage, Disposed, Under Service. Assets are arranged in trees — a production line is a parent of its machines; a machine is a parent of its sub-assemblies; sub-assemblies are parents of components. Work orders attach at any level. ## Maintenance work orders The central object — a **work order** captures planned or unplanned maintenance work: - **Type** — Preventive, Corrective, Inspection, Improvement, Project. - **Asset / functional location** — what's being worked on. - **Description and detailed work** — what needs doing. - **Resources required** — internal technicians, external contractors, equipment. - **Materials required** — spare parts, consumables. - **Schedule** — start, end, priority, deadline. - **Status** — Created, Scheduled, In Progress, Completed, Posted. - **Actual time and materials** — captured as work progresses. ## Preventive maintenance Configurable **maintenance schedules** generate work orders automatically: - **Time-based** — every 90 days, every quarter, every year. - **Counter-based** — every 1,000 operating hours, every 100,000 miles, every 50,000 cycles. - **Condition-based** — when a sensor reading exceeds a threshold. - **Mixed** — whichever triggers first. Pre-defined **maintenance plans** bundle the required steps, parts, tools, and skills for each maintenance event, so the work-order template is reusable. ## Condition monitoring **Asset counters** track usage and condition values manually entered or auto-collected from IoT sensors. Thresholds trigger work orders when crossed. Common counters: operating hours, production count, temperature, vibration, pressure, oil quality. ## Spare parts Parts inventory ties to assets through **BOM-like structures** showing which parts apply to which assets. Work orders reserve and consume parts from inventory; stock-out warnings prompt re-ordering. ## Resource scheduling Maintenance resources have skills, certifications, and calendars. The schedule board (similar to Field Service) shows planned work orders against resources with conflict and load visibility. ## Cost accounting Every work order captures labour cost, materials cost, and external services cost. Total maintenance cost per asset, per asset class, per location feeds operational cost analysis. ## IoT integration Industrial IoT data through Azure IoT Hub feeds the condition-monitoring layer: - Real-time sensor values stream in. - Thresholds and ML anomaly detection trigger alerts. - Alerts auto-generate work orders. - Predicted failures drive preventive action before breakdown. This is the same pattern as **Connected Field Service** applied to internal assets rather than customer-installed equipment. **Reporting.** - **Asset performance** — uptime, MTBF, MTTR (mean time between failures, mean time to repair). - **Maintenance cost** — per asset, per type, per period. - **Compliance** — overdue preventive maintenance, audit-ready records. - **Reliability analysis** — patterns suggesting product or supplier issues. ## Where it fits Asset Management in SCM is enterprise-grade — comparable to dedicated CMMS (computerised maintenance management systems) like SAP PM, IFS Asset Management, IBM Maximo. Smaller operations may use simpler tools; SCM customers benefit from having maintenance integrated with the same ERP that handles finance, supply chain, and production. ## Operational reality Maintenance discipline is more important than the software. Configure the system thoughtfully; train the technicians; audit the data quality; review reports monthly. The software supports the discipline. --- # Async jobs in Dataverse How Dataverse runs background work — system jobs, async plug-ins, workflow runs, and how to monitor, troubleshoot. Source: https://www.solvingdynamics365.com/guides/dataverse-async-jobs-management Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Many things in Dataverse happen asynchronously — background workflows, async plug-ins, scheduled jobs, system events. They all flow through the **async system** under the hood. When this system slows down or backs up, user-facing operations slow with it. Understanding async behaviour is essential for any production Dataverse deployment of any scale. **What runs async.** - **Async plug-ins** at Stage 50. - **Async workflows** (legacy real-time workflows). - **Bulk operations** — bulk delete, bulk import. - **System events** — duplicate detection runs, calculated column recalcs. - **Power Automate flows** (for many trigger types). - **Custom async actions.** ## The system job Each async operation is a row in the `System Job (asyncoperation)` table: - **Owner** — who initiated. - **Operation Type** — what kind. - **Status** — Waiting, In Progress, Succeeded, Failed, Canceled. - **Status Reason** — finer detail. - **Start Time, End Time, Duration.** - **Error Code, Error Message** if failed. - **Retry Count.** The table is queryable and reportable. **Monitoring.** - **System Jobs page** in admin centre — filterable view. - **Advanced Find** — query AsyncOperations directly. - **Power BI / Fabric** — pull async data for trend reporting. Mature deployments have a dashboard showing job counts, failure rates, duration percentiles. **Job statuses.** - **Waiting** — queued; not yet picked up. - **In Progress** — running. - **Pausing / Paused** — manual pause. - **Canceling / Canceled** — manually canceled. - **Succeeded.** - **Failed.** Stuck "In Progress" jobs older than expected indicate stalled execution. **Job queue management.** - Capacity is shared across the environment. - Async jobs prioritised by type and retry rules. - Background work doesn't block user-facing operations (mostly). **Retry behaviour.** - **Transient errors** — retried automatically with backoff. - **Permanent errors** — marked Failed; not retried. - **Max retries** — configurable; defaults vary by job type. Bulk operations have their own retry semantics. **Common async backlog causes.** - **Heavy bulk import** — fills queue with insert / update jobs. - **Misbehaving plug-in** — failing repeatedly, retrying. - **Workflow with infinite loop** — workflow creates record; trigger fires another workflow; loop. - **External system slow** — async plug-in calls external API; backed up waiting. - **Plug-in throwing on every record** — visible bug; high failure rate. ## Backlog impact When async queue is deep: - New async work waits. - Some operations appear delayed to users. - Investigation gets harder (older jobs harder to find). **Cleaning up.** - **Cancel** specific jobs. - **Bulk delete completed jobs** — older than retention period. - **Async cleanup job** — schedule periodic cleanup; configurable retention. Without cleanup, the async table balloons over time; performance degrades. ## Async cleanup job A system job that purges old async records: - Configurable retention days. - Runs periodically. - Keeps async table size manageable. In high-volume environments, configure retention to 7-30 days; queries against async are then fast. **Querying async.** ``` GET /api/data/v9.2/asyncoperations?$filter=statecode eq 3 and statuscode eq 31 ``` `statecode 3` = Completed, `statuscode 31` = Failed. Combine to find recent failures. ## Failure analysis Failed jobs: - **Error message** — start here. - **Stack trace** in plug-in failures. - **Input data** — what was the job processing. - **Time pattern** — failures in clusters indicate system issue. Common failure causes: - Plug-in exception (most common). - External system timeout. - Concurrency / lock conflict. - Resource limits. ## Bulk delete jobs Separate but related: - Bulk delete is an async operation. - Can run for hours on large data sets. - Configured with query, recurrence, time window. For data archival or compliance, bulk delete is the right mechanism. ## Plug-in profiling When async plug-ins are slow: - Trace log inside plug-in. - Application Insights integration (where configured). - Identify hot paths. Performance issues compound — slow plug-in × many records = significant time. **Common pitfalls.** - **No backlog monitoring.** First sign is user complaints; reactive. - **Cleanup disabled.** Async table balloons; queries slow. - **No failure investigation.** Failed jobs pile up; problems compound. - **Sync work where async appropriate** — user-facing slowness. - **Async work where sync needed** — race conditions when subsequent steps assume completion. - **Throw-on-retry plug-ins** — same failure repeats; backlog grows. **Operational rhythm.** - **Daily** — failure count check. - **Weekly** — backlog depth review. - **Monthly** — performance trend analysis. - **Per incident** — root cause of significant failures. ## Strategic positioning Async jobs are the invisible backbone of Dataverse extensibility. They work reliably most of the time; when they don't, the symptoms can be subtle (operations seem slow, some side effects don't happen) and the diagnosis requires understanding the system. Investing in monitoring, cleanup, and failure analysis early prevents accumulated debt. Mature deployments treat async health as a first-class operational metric, not an afterthought. --- # Attended vs unattended RPA in Power Automate Desktop How attended and unattended RPA differ in Power Automate — modes, licensing, machine management, and the use cases where each fits. Source: https://www.solvingdynamics365.com/guides/power-automate-attended-vs-unattended-rpa Section: Power Platform / Power Automate Published: 2026-05-01 Power Automate Desktop (PAD) automates desktop applications via robotic process automation — driving Windows UIs, web browsers, terminal applications programmatically. Two execution modes shape how PAD runs: **attended** (with a user) and **unattended** (lights-out, no user). The choice has licensing, infrastructure, and operational implications. ## Attended RPA A user is present: - User starts the automation; bot runs alongside. - User may interact between bot steps. - User sees and can intervene if needed. - One execution per user session. ## Unattended RPA No user present: - Bot runs on a dedicated machine. - Scheduled or triggered automatically. - Runs through a queue. - Many automations across many machines possible. **Choosing between modes.** - **Attended** — for tasks where the user benefits (data lookup, form-fill assistance, side automation while doing other work). User-pace. - **Unattended** — for tasks running outside user's day (overnight reports, weekend processing, scheduled tasks). Machine-pace. **Licensing.** - **Attended** — bundled in Power Automate per-user plans or per-bot. - **Unattended** — separate Power Automate "unattended bot" SKU; per concurrent bot per machine. Unattended is materially more expensive because it's running 24/7 capacity. ## Machine management Each unattended bot needs a Windows machine: - **Power Automate machine** — Windows VM registered with the Power Automate service. - **Machine groups** — pool of machines for load balancing. - **Connection persistence** — agents stay connected to the cloud service. For unattended at scale, machine fleet management becomes infrastructure work. **Setup for unattended.** 1. Provision Windows VM with PAD agent installed. 2. Register the machine with Power Automate. 3. Configure user account that bot will run as. 4. Test connectivity to PAD cloud service. 5. Schedule or queue the desktop flow. The VM runs continuously; bots execute as scheduled. **Power Automate desktop machine groups.** - Multiple machines pooled. - Cloud service distributes work. - Provides redundancy. - Scales horizontally. For organisations with high unattended bot volume, machine groups are essential. **Triggers for unattended.** - **Scheduled** — cron-style. - **Event-based** — Dataverse event, SharePoint event, etc. - **Manual** — admin triggers ad hoc. - **From cloud flow** — Power Automate cloud flow invokes desktop flow. The cloud flow → desktop flow pattern is the most common: orchestration in cloud, desktop bot for the UI work. ## Bot account Bot runs as a specific Windows user: - Dedicated service account. - Stored credentials. - Permission to applications being automated. The bot's permissions = the user's permissions; respect least-privilege. **Concurrency.** - **One bot per machine at a time** — typically; some scenarios allow parallel sessions. - **Multiple machines for parallelism.** - **Queueing** — work waits in queue; processed FIFO. **Comparison patterns.** - **High-volume back-office** — unattended scale. - **User-assistive** — attended. - **Periodic batch** — unattended scheduled. - **On-demand desktop tasks** — attended on user trigger. **Reliability considerations.** - **Application UI changes** break bots. - **Windows updates** can affect bot behaviour. - **Network blips** disrupt unattended runs. Bots in production need monitoring and recovery patterns. **Common pitfalls.** - **Treating attended as unattended.** Running long-running automations on user's machine; user productivity blocked. - **Bot account credentials in plain text.** Security violation; use Key Vault references. - **No exception handling.** Bot fails halfway; partial state. - **No idempotency.** Re-running breaks data. - **Single bot for all work.** Bottleneck; queue grows. - **No monitoring.** Bot runs daily; one day fails; nobody notices for a week. **Production-grade RPA.** - **Machine groups for redundancy.** - **Monitoring dashboards.** - **Alerting on failures.** - **Idempotent bot design.** - **Exception handling at every step.** - **Documented runbooks for common failures.** - **Periodic UI regression checks** — automation tested when target apps update. ## Reconciliation After unattended runs: - Did each scheduled run complete? - Did each record process correctly? - Are there discrepancies vs source system? Bots can silently fail; reconciliation surfaces it. ## RPA vs API Always prefer API when possible: - API more reliable than UI scraping. - API faster. - API less brittle to UI changes. Use RPA when API isn't available — legacy applications, terminal-based systems, web apps without APIs. ## Strategic positioning Unattended RPA is genuine automation at scale; attended is user-assistive productivity. Both have places. The licensing and infrastructure for unattended is material; weigh against the labour savings. For high-volume, repetitive desktop tasks where no API exists, RPA pays back; for lower-volume or where APIs are available, alternatives often win. Plan capacity, monitoring, and process discipline before scaling RPA broadly. The technology works; the operational maturity around it is what determines success. ### Frequently asked questions **What is the difference between attended and unattended RPA?** Attended desktop flows run with a user present who starts them and can intervene. Unattended flows run lights-out on a dedicated, registered Windows machine, triggered by a schedule, an event, or a cloud flow, and queue across machine groups. **How is unattended RPA licensed?** Through a separate Power Automate Process (per bot) licence rather than the per-user Premium plan, which covers attended use. A bot on a machine executes one unattended run at a time, so concurrency needs more bots or more machines. **What account does an unattended bot run as?** A dedicated Windows service account with stored credentials and only the application permissions it needs. Keep the credentials in a Key Vault reference, never in plain text. **Should I use RPA when an API exists?** No. APIs are faster, more reliable, and immune to UI changes. Reserve RPA for legacy applications, terminal systems, and web apps with no API. --- # Azure API Management in front of Dataverse How API Management acts as a façade for Dynamics 365 APIs — rate limiting, authentication, transformation, observability, and developer portal. Source: https://www.solvingdynamics365.com/guides/apim-in-front-of-dataverse Section: Integrations / API & identity Published: 2026-08-01 Updated: 2026-08-25 When Dynamics 365 APIs are consumed by many external systems — partners, mobile apps, internal applications, third-party integrations — exposing them directly creates governance, security, and operational problems. **[Azure API Management (APIM)](https://www.solvingdynamics365.com/glossary/api-management)** is the standard pattern for a managed API gateway sitting in front of Dynamics 365, adding rate limiting, authentication, transformation, observability, and a developer portal. **What APIM provides.** - **Single endpoint** — partners hit `api.contoso.com/dynamics/...` instead of `contoso.crm.dynamics.com/api/data/v9.2/...`. Decoupling. - **Authentication** — APIM verifies API keys, subscription tokens, or OAuth tokens. Dataverse never sees unauthenticated traffic. - **Rate limiting** — quotas per consumer; protects Dataverse from runaway clients. - **Transformation** — request / response shape can be transformed; consumers don't need to handle Dataverse-specific quirks. - **Caching** — read-heavy responses cached at the gateway; reduces Dataverse load. - **Versioning** — multiple API versions exposed; deprecation managed. - **Observability** — every request logged with metadata; analytics across all consumers. - **Developer portal** — auto-generated documentation, API key issuance, self-service for partner developers. **Architecture.** ``` External consumers → APIM → Dataverse (Web API) ``` APIM authenticates the consumer (subscription key, OAuth), applies policies (rate limit, transformation), and forwards to Dataverse with a service-principal access token. Dataverse only sees authenticated, vetted traffic from APIM. ## Policy-driven configuration APIM's behaviour is defined by **policies** — XML configuration that runs at request time. Common policies: - **`set-backend-service`** — direct the request to Dataverse. - **`set-header`** — add Authorization headers with service-principal tokens. - **`rate-limit-by-key`** — N requests per minute per consumer. - **`quota-by-key`** — N total requests per consumer per month. - **`cache-store` / `cache-lookup`** — cache responses. - **`set-body`** — transform the request or response. - **`json-to-xml` / `xml-to-json`** — format conversion if needed. - **`validate-jwt`** — verify OAuth JWT tokens. - **`return-response`** — short-circuit with a custom response (e.g. mock data). Policies are applied per API operation or globally per product. **Products and subscriptions.** - **Products** — bundles of APIs offered as a unit. "Partner API" might include Customer / Order / Invoice operations. - **Subscriptions** — issued to consumers; ties a consumer to a product. Each subscription has a unique key. - **Consumers** — partners, internal apps, third-party developers. Each has subscriptions to one or more products. This structure lets you: - Issue different API products to different partners. - Apply different rate limits / pricing per product. - Track usage per consumer. **Authentication patterns.** - **API key per consumer** — simplest; key in a header (`Ocp-Apim-Subscription-Key`). - **OAuth 2.0** — for human-end-user scenarios; APIM validates the JWT. - **Mutual TLS** — for high-security partner scenarios. APIM provides identity-provider integration through OpenID Connect and OAuth flows; configurable per product. **Rate limiting strategy.** - **Per-consumer limits** — different partners get different quotas based on contract. - **Per-operation limits** — write-heavy operations might be more limited than read operations. - **Burst vs sustained** — allow bursts (e.g. 100 calls in 10 seconds) within longer-term sustained limits (e.g. 10,000 per day). Rate limiting protects Dataverse from being overwhelmed and produces predictable performance for all consumers. **Caching.** For read-heavy APIs, caching dramatically reduces Dataverse load. APIM caches responses based on URL and query parameters: - **Read operations** — cache for 5 minutes / 1 hour / as appropriate. - **Cache invalidation** — based on TTL; can be triggered explicitly for mutations. - **User-specific caching** — cache per user via the cache key. Cached responses serve at gateway speed; Dataverse never sees the request. ## Developer portal APIM auto-generates a developer portal with: - API documentation derived from OpenAPI specs. - Interactive "try it" pages for testing operations. - API key self-service issuance. - Quotas and usage dashboards per consumer. Partners and internal developers use the portal as their starting point. **Observability.** - **Per-request logging** — every call logged with timing, status, consumer. - **Application Insights integration** — APIM streams telemetry to App Insights. - **Diagnostic logs** — Azure Monitor logs for compliance and debugging. The data answers: who's using which APIs, how fast, with what error rates. ## Cost APIM is billed by tier (Developer, Basic, Standard, Premium) — fixed monthly cost based on capacity. Sized for expected traffic. **Limits.** - **APIM is a managed service with capacity limits per tier** — exceed tier capacity, requests slow or fail. Scale up tier or use multiple APIM instances. - **Policy complexity** — overly complex policies slow request processing. - **Maintenance** — APIM versions update periodically; configurations need adaptation. **When to use APIM.** - **Multi-tenant API exposure** — many consumers with different access levels. - **Partner API programmes** — public-ish APIs with developer onboarding. - **High-volume integrations** — protection and observability matter. - **Compliance-driven scenarios** — audit, rate-limit, authentication centrally enforced. ## When not For single-consumer integrations or internal-only APIs with simple authentication, APIM may be overkill. Direct Dataverse calls suffice. ## Operational reality APIM is enterprise-grade infrastructure. Plan for it deliberately; staff with someone who knows the platform; treat it as production. Done well, it's the API governance layer that makes large-scale Dynamics 365 integration sustainable. --- # Azure Data Factory with Dynamics 365 How to use Azure Data Factory for Dynamics 365 data integration — connectors, common patterns, performance tuning. Source: https://www.solvingdynamics365.com/guides/azure-data-factory-with-dynamics-365 Section: Integrations / Azure services Published: 2026-05-01 Updated: 2026-08-25 **Azure Data Factory (ADF)** is Microsoft's cloud-native ETL/ELT platform. For Dynamics 365 customers, ADF is one of several options for data movement — to and from Dataverse, F&O, and across hybrid scenarios. Understanding when ADF wins (and when other tools win) is foundational for designing the right integration architecture. **What ADF provides.** - **Connectors** to 90+ sources — Dataverse, F&O, SQL, Synapse, files, APIs. - **Pipelines** — orchestrated workflows of data movement and transformation. - **Mapping data flows** — visual transformation logic. - **Triggers** — schedule, event-based, manual. - **Monitoring** — pipeline runs, errors, performance. - **Integration with Azure DevOps / Git** — pipeline definitions in code. It's a comprehensive platform — large investment, large capability. **Connectors for Dynamics 365.** - **Dataverse connector** — read and write to Dataverse tables. - **Common Data Service (legacy)** — deprecated; Dataverse connector is current. - **D365 Finance and Operations connector** — read F&O data entities. - **Generic OData connector** — fallback for entities not in dedicated connector. For F&O, the data entity model is the integration surface; ADF connects via the OData endpoint or direct database access in specific patterns. **Pipeline patterns.** - **Daily full refresh** — read everything from source, write to destination. - **Incremental** — only changed records since last run; uses last-modified-date or change tracking. - **Bulk historical migration** — one-time large load. - **Continuous replication** — frequent small batches. Incremental is the dominant pattern for ongoing integrations; full refresh is for small data or where change tracking isn't available. **Common scenarios.** - **Dataverse → data lake** for analytics (alongside or instead of Synapse Link). - **F&O → data warehouse** for reporting. - **External SQL → Dataverse** for master data sync. - **Files (CSV, JSON, Parquet) → F&O** for migrations. - **Dataverse → SQL** for cross-application analytics. **Performance tuning.** - **Parallel copies** — multiple data partitions read concurrently. - **Compute scale** — Integration Runtime size (DIUs). - **Filtering at source** — push filters down rather than pulling all then filtering. - **Compression** — Parquet vs CSV; orders of magnitude smaller and faster. - **Batch sizes** — tune insert/update batch sizes for destination performance. A well-tuned pipeline can move millions of rows per minute; poorly tuned can take hours. **Authentication.** - **Managed Identity** — preferred; ADF runs with a managed identity, granted access to sources. - **Service Principal** — when managed identity isn't applicable. - **Linked services with credentials** — for SQL connections. Managed identity eliminates secrets — major security advantage. ## Mapping data flows Visual transformation: - Filter, aggregate, join, pivot. - Conditional split. - Surrogate key generation. - Slowly Changing Dimension handling. Behind the scenes, mapping data flows run on Azure Databricks; performance depends on cluster sizing. **Comparison with alternatives.** | Tool | Strengths | Weaknesses | |---|---|---| | **ADF** | Comprehensive, scalable, code-first | Setup complexity, cost | | **Power Automate** | Simple, low-code | Limited scale, throttling | | **Synapse Link** | Real-time Dataverse → Synapse | One-way, less flexible | | **Fabric Pipelines** | Newer, Fabric-integrated | Less mature than ADF | | **DMF (in F&O)** | F&O-native | F&O-only | | **Custom code** | Total flexibility | Maintenance burden | For high-volume, complex, scheduled integrations: ADF. For low-volume reactive integrations: Power Automate. For real-time analytics replication: Synapse Link / Fabric Link. ## Cost ADF pricing: - **Per pipeline run** — small charge. - **Per activity execution** — depends on activity type. - **Compute time** — for data flows and integration runtimes. - **Data movement DIUs** — for copy operations. High-volume daily runs can be tens of dollars per day. Budget and monitor. ## Source control ADF pipelines as JSON in git: - Pipeline definitions reviewable. - Environment promotion via Azure DevOps releases or GitHub Actions. - Branch-based development. Mature ADF deployments treat pipelines as code, not as artifacts edited in the portal. **Error handling.** - **Activity-level retry** — automatic retries with backoff. - **Failure paths** — pipeline branches on success/failure. - **Email / Teams notifications** — alerts on failure. - **Logging** — to Log Analytics for centralised observability. Robust pipelines handle expected failure modes (transient errors, downstream throttling) and alert on unexpected. **Common pitfalls.** - **No incremental logic.** Full refresh daily; expensive and slow. - **No watermarking.** Incremental logic without proper checkpointing; data missed or duplicated. - **Hardcoded credentials.** Stored in linked services; security risk. - **No alerting.** Pipeline silently fails; data integration broken for days. - **Source schema changes.** Source adds column; pipeline fails. Schema-on-read patterns help. - **Performance unoptimized.** Default settings; slow operations; high cost. ## Integration with Microsoft Fabric Fabric pipelines (the spiritual successor to ADF) are emerging: - Built into Fabric. - Same conceptual model as ADF. - Better integration with Lakehouse / Warehouse. - More limited capability initially; closing the gap. For new Fabric-centric deployments, Fabric pipelines may be preferred; for existing ADF investments, no urgency to migrate. ## Strategic positioning ADF is the workhorse for serious data integration in Microsoft's cloud. For Dynamics 365 customers, it's the right tool for high-volume, complex, scheduled integrations between Dynamics and other systems. The investment in setup pays back through reliability and scale; the cost is real but manageable. Most enterprise Dynamics 365 deployments end up with significant ADF footprint — it's an architectural pillar of the integration story. --- # Azure Functions for Dynamics 365 integrations How to use Azure Functions to extend and integrate Dynamics 365 — patterns, authentication, lifecycle, performance, and the trade-offs vs Power Automate. Source: https://www.solvingdynamics365.com/guides/azure-functions-for-dynamics-365 Section: Integrations / Azure services Published: 2026-07-30 Updated: 2026-08-25 When low-code (Power Automate, Logic Apps) doesn't fit, Azure Functions are the next-step compute platform for Dynamics 365 integrations and extensions. They're code (typically C#, JavaScript, Python, PowerShell), they run on demand without server management, and they integrate cleanly with the broader Azure and Microsoft cloud ecosystem. **When to reach for Azure Functions.** - **Complex transformations** that Power Automate can't express cleanly — recursive logic, complex string parsing, integration with libraries. - **High-throughput** scenarios where Power Automate's per-action cost or throughput doesn't fit. - **Custom connectors** beyond what platform connectors provide. - **Webhook receivers** for external systems pushing events. - **Scheduled batch jobs** that need substantial compute. - **Background workers** consuming Service Bus / queue messages. - **API façades** in front of Dataverse for partner consumption. ## Triggers Functions are triggered by events: - **HTTP** — function exposed at a URL; called via REST. The most common for integration scenarios. - **Timer** — runs on a schedule. Replaces "Scheduled Tasks" running in legacy infrastructure. - **Queue / Service Bus** — runs when a message arrives. Used for asynchronous processing of events from Dataverse. - **Event Grid** — runs on Event Grid events. - **Blob Storage** — runs when a blob is created or modified. - **Cosmos DB** — runs on document changes. For Dynamics 365 integrations: - **HTTP-triggered functions** receive webhook calls from Dataverse, Business Central, or external systems. - **Service Bus-triggered functions** consume events from Dataverse's Service Bus integration. - **Timer-triggered functions** run periodic exports / imports. **Authentication.** To call Dataverse from a Function: - **Microsoft Entra ID app registration** — the Function authenticates as a service principal. - **Managed Identity** — if the Function is hosted in Azure, use Azure Managed Identity for credential-free authentication to Dataverse. - **OAuth 2.0 client credentials** flow — exchange client ID + secret for access token; use token in Dataverse API calls. The Dataverse SDK for .NET handles this in straightforward code; for other languages, use HTTP client libraries with appropriate token handling. **Calling Dataverse from a Function.** ```csharp // C# example using Dataverse SDK var serviceClient = new ServiceClient( new Uri("https://contoso.crm.dynamics.com"), clientId, clientSecret, true); var customer = await serviceClient.RetrieveAsync( "account", new Guid("..."), new ColumnSet("name", "telephone1")); ``` **Receiving webhook from Dataverse.** ```csharp [FunctionName("DataverseWebhook")] public static async Task Run( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req, ILogger log) { var body = await new StreamReader(req.Body).ReadToEndAsync(); // body contains Dataverse's notification payload // Process the change return new OkResult(); } ``` The function URL is registered as a webhook subscription target in Dataverse. ## Hosting plans Azure Functions have multiple hosting tiers: - **Consumption** — pay-per-execution; auto-scale to zero; cold starts. Good for low-volume / sporadic workloads. - **Premium** — pre-warmed instances; no cold starts; VNET integration. Good for production with consistent traffic. - **Dedicated (App Service Plan)** — like running on a regular App Service; predictable cost; no per-execution scaling. Good for very high or very steady workloads. For most Dynamics 365 integration scenarios, Consumption or Premium is appropriate. **Performance.** - **Cold starts** — Consumption Functions starting from idle take 1-5 seconds. Premium pre-warmed instances eliminate. - **Concurrent execution** — Functions scale automatically; many concurrent executions of the same function are normal. - **Throttling** — Dataverse has API rate limits; high-throughput Functions need to handle 429 responses with exponential backoff. **Monitoring.** - **Application Insights integration** — automatic for Functions. Trace messages, exception logs, performance metrics, request rates. - **Function execution history** — visible in the Azure portal. - **Custom telemetry** — log structured events for richer analysis. **Patterns and examples.** - **Webhook-to-record-update** — Dataverse changes notify a webhook; Function processes and updates external system. - **Periodic data sync** — Timer-triggered Function pulls from external API and writes to Dataverse. - **Event-driven processor** — Service Bus-triggered Function consumes events; processes; writes results back. - **API façade** — HTTP-triggered Function exposes a curated API in front of Dataverse for partner consumption. - **Validation service** — Function called from a Power Automate flow; validates complex business rules; returns yes/no. **Cost.** - **Consumption** — free up to a generous tier, then very inexpensive per execution. Most Dynamics 365 integration scenarios run in the cheap zone. - **Premium / Dedicated** — fixed monthly cost; predictable. **Limits.** - **Function execution time** — Consumption limits at 5–10 minutes; Premium / Dedicated can be longer. - **Memory** — Consumption ~1.5GB; Premium more. - **Connections** — outbound connection limits per Function App. **Common pitfalls.** - **Long-running operations** — Functions aren't for hours-long work; use Durable Functions or Logic Apps. - **Cold start in user-facing scenarios** — Consumption cold starts can frustrate; use Premium. - **No structured logging** — debugging without proper logs is brutal. - **Hard-coded credentials** — store in Azure Key Vault. ## Operational reality Azure Functions are the workhorse for code-grade Dynamics 365 integration. Choose them when low-code tools don't fit; use the platform features (App Insights, Key Vault, Managed Identity) consistently; treat each Function App as a proper production deployment with CI/CD, monitoring, and ALM. --- # Azure Service Bus integration with Dataverse How Dataverse publishes change events to Azure Service Bus — registration, message format, queues vs topics, and resilient consumer patterns. Source: https://www.solvingdynamics365.com/guides/azure-service-bus-integration-with-dataverse Section: Integrations / Azure services Published: 2026-05-01 Updated: 2026-08-25 **Service Bus integration** is one of Dataverse's most enterprise-friendly outbound integration mechanisms. When Dataverse changes a record, it publishes a message to an Azure Service Bus queue or topic; downstream consumers process the message at their own pace, with durable retention and built-in retry. For high-volume, async, decoupled integrations, this is the right pattern. **The architecture.** 1. A Dataverse record changes (Create, Update, Delete, etc.). 2. A configured **Service endpoint** of type Service Bus catches the event. 3. Dataverse serialises the relevant record context (target entity, attribute changes, before/after images) into a Service Bus message. 4. The message is published to a Service Bus queue or topic. 5. One or more downstream consumers — Azure Functions, custom code in a VM, Logic Apps, third-party services — read from the queue/topic and process. **Queues vs topics.** - **Queue** — point-to-point: one publisher, one consumer (or one consumer at a time). The consumer reads and the message is removed. - **Topic** — publisher with multiple subscribers: each subscriber gets its own copy. Useful when several systems should be notified of the same change. Choose queue when one system handles each change. Choose topic when multiple systems care about the same change. ## Registration Service Bus integration is configured through the **Plug-in Registration Tool** (legacy but still functional) or through programmatic registration. The configuration includes: connection string to the Service Bus namespace, queue/topic name, message format (XML or JSON), and which Dataverse messages and entities trigger publication. Registration can be **synchronous** (block the Dataverse operation until the message is published) or **asynchronous** (queue locally and publish on the async service queue). Asynchronous registration is overwhelmingly the right choice — synchronous Service Bus publication couples Dataverse availability to Service Bus availability. ## Message format Dataverse publishes either: - **Entity image** — a snapshot of the changed record including pre-image and post-image attributes. - **Execution context** — the full context (message, entity, target, user, parameters, etc.) serialised as XML/JSON. Most consumers want the execution context for flexibility — they can determine what changed and act on it. **Consumer patterns.** - **Azure Functions** — serverless: trigger on queue message, scale out, process, ack. The most common pattern. - **Logic Apps** — trigger on Service Bus message, orchestrate downstream steps with retry and error handling. - **Custom services** — long-running consumers in App Service, AKS, VMs. - **Third-party SaaS** — many SaaS products consume Service Bus messages natively. ## Resilience Service Bus is the answer when consumers cannot be assumed always-on. Messages persist in the queue for up to a configurable retention window (defaults to 14 days, max much longer). Failed processing returns the message to the queue (or to a **dead-letter queue (DLQ)** after configurable retry limits) for later investigation. Dataverse fire-and-forgets; the queue is the durability layer. ## Throughput Service Bus standard tier handles hundreds of messages per second; premium handles many thousands. Plan capacity against expected Dataverse change volume. **Vs Event Grid / Webhooks.** - **Service Bus** — durable, ordered, point-to-point or pub/sub at moderate scale. The right choice for transactional integration. - **Event Grid** — high-volume fan-out at scale, lightweight. The right choice for many subscribers wanting near-real-time events. - **Webhooks** — direct HTTP POST, simpler, no retry beyond a few attempts. The right choice for low-volume real-time and tolerant consumers. For Dynamics 365 enterprise integrations with serious volume and reliability requirements, Service Bus is the canonical default. ## Where to go next Making the publish side reliable is [the outbox pattern](https://www.solvingdynamics365.com/guides/the-outbox-pattern-with-service-bus); making the consume side reliable is [message replay and poison queue handling](https://www.solvingdynamics365.com/guides/message-replay-and-poison-queue-handling-for-d365). The alternatives are compared in [webhooks vs events](https://www.solvingdynamics365.com/guides/webhooks-vs-events-in-dataverse) and [Event Grid with Dataverse](https://www.solvingdynamics365.com/guides/event-grid-with-dataverse); the Business Central equivalent is [webhooks vs Service Bus](https://www.solvingdynamics365.com/guides/integrating-business-central-webhooks-vs-service-bus). --- # Azure Synapse Link for Dataverse How Synapse Link replicates Dataverse data to Azure Data Lake Storage continuously — architecture, configuration, query patterns. Source: https://www.solvingdynamics365.com/guides/azure-synapse-link-for-dataverse Section: Integrations / Azure services Published: 2026-05-01 Updated: 2026-08-25 For analytical workloads against Dataverse data, the historical answer was nightly ETL via ADF or pulling data through the Dataverse API into a warehouse. **Azure Synapse Link for Dataverse** offered a better answer: continuous, low-latency replication of Dataverse changes to Azure Data Lake Storage (ADLS) Gen2, with Synapse SQL pools or Spark for query. With Microsoft Fabric's emergence, the equivalent is **Fabric Link for Dataverse**, which is increasingly the recommended path. Understanding both clarifies the strategic direction. **The problem Synapse Link solves.** - Dataverse is a transactional system; analytical queries against it can degrade performance for users. - API-based extraction is slow for large data; OData paging adds overhead. - Nightly batch ETL introduces 24-hour latency. - Analytical queries want columnar storage and parallel compute; Dataverse's storage isn't optimised for that. Synapse Link extracts changes continuously, lands them in ADLS as CSV or Parquet, and exposes them to analytical tools. **Architecture.** - **Dataverse environment** — source. - **Synapse Link configuration** — per-table choices for replication. - **ADLS Gen2 storage account** — destination. - **Synapse workspace** — provides SQL serverless and Spark compute over ADLS. - **Initial sync** — bulk copy of selected tables. - **Continuous delta** — change-tracking-based updates flowing every 15+ minutes. The setup is mostly point-and-click in the Power Platform portal. ## Storage format Two options: - **CSV** — simpler, larger, no schema enforcement. - **Delta Parquet** — columnar, smaller, schema-on-write, queryable as a Delta Lake table. Delta Parquet is the modern choice; better performance and capability. ## Folder structure ADLS layout typically: ``` container/dataverse/ {table-name}/ {year}/{month}/{day}/ file1.parquet file2.parquet ... table-name.snapshot/ table-name.cdf/ ``` `.snapshot` holds the current state; `.cdf` (change data feed) holds incremental changes. **Query patterns.** - **Synapse SQL serverless** — `SELECT ... FROM OPENROWSET(...)` over the Parquet files. - **Synapse Spark** — Spark notebooks reading the Delta tables. - **Power BI** — directly query the Synapse SQL endpoint. - **External tools** — read the Parquet directly. ## Fabric Link for Dataverse The Microsoft Fabric–native version: - Same conceptual model: continuous replication of Dataverse to lake-based storage. - Destination: OneLake (Fabric's storage layer). - Native integration with Fabric Lakehouse, Warehouse, semantic models. - **Direct Lake mode** — Power BI semantic models read from OneLake without import. Fabric Link is the strategic direction. New deployments should default here; existing Synapse Link deployments may migrate over time. **What replicates.** - **All standard columns** of selected tables. - **Choice values** as labels (not numeric codes). - **Lookups** as related record IDs. - **Audit history** (optional). - **Activity records** (optional). ## Latency From change in Dataverse to availability in ADLS / OneLake: - **Minimum** ~15 minutes for active changes. - **Typical** within an hour. - **Bulk operations** may lag longer. Not real-time but fresh enough for most analytical use. **Cost.** - **Dataverse Synapse Link** — minimal incremental Dataverse cost. - **Storage** — ADLS or OneLake bytes. - **Compute** — Synapse SQL serverless per query; Spark per session. - **Fabric** — Fabric capacity consumed. For analytical workloads, the cost is generally favourable vs running queries directly against Dataverse APIs at scale. ## Per-table selection Not every table needs replication: - High-value tables for analytics — yes. - System tables (audit, async operations) — usually no. - Custom tables — yes if used in analytics. - Reference data — usually yes. Each table replicated costs storage and compute. Curate the list. ## Schema evolution When a Dataverse table changes (column added, renamed): - Synapse Link / Fabric Link picks up new columns. - Renamed columns can break dependent queries. - Deleted columns lag in the lake. Schema drift is a continuous concern; document column dependencies for queries. **Use cases beyond reporting.** - **Machine learning training** — historical Dataverse data as ML training set. - **Data warehouse loading** — stage to a curated warehouse. - **Cross-system analytics** — combine Dataverse with non-Dataverse data. - **Archival** — long-term retention beyond Dataverse's storage tier. **Comparison with alternatives.** | Approach | Latency | Setup | Cost | Use case | |---|---|---|---|---| | **Synapse Link** | ~15 min | Low | Moderate | Analytics replication | | **Fabric Link** | ~15 min | Low | Moderate | Fabric-centric analytics | | **ADF pipeline** | Scheduled | Higher | Moderate | Custom transformations | | **API extraction** | On-demand | Custom | Per-call | Specific data needs | | **Direct Dataverse query** | Real-time | None | Per-query | Operational queries | For analytical workloads, Synapse/Fabric Link wins for most scenarios. **Common pitfalls.** - **Selecting everything.** All Dataverse tables replicated; storage and cost balloon; usability suffers. - **Schema changes not tracked.** Downstream queries break silently. - **No retention policy.** Lake accumulates indefinitely; cost grows. - **Mixed modes.** Some tables in CSV, some in Parquet; queries inconsistent. - **Security gap.** Lake permissions less granular than Dataverse; sensitive data exposed to broader audience. ## Security considerations Replicated data in the lake bypasses Dataverse's row-level security: - **Lake security** is file/folder/container based. - **Sensitive data** in replicated tables is accessible to anyone with lake access. - **Mitigation** — separate sensitive tables into restricted containers; column-level masking in views. For regulated data, careful planning of who can query the lake is essential. ## Strategic positioning Synapse Link / Fabric Link is the canonical pattern for Dataverse analytics. For new analytics workloads, set up Fabric Link from the start; build Lakehouse and semantic models on top. For existing reporting on Dataverse, evaluate moving to Fabric Link to offload analytical load from production Dataverse. The operational simplicity (low setup, continuous replication, native integration) makes it default for any meaningful analytics workload against Dataverse. ## Where to go next The successor path is [Fabric Link for Dataverse](https://www.solvingdynamics365.com/guides/integrating-dataverse-with-microsoft-fabric-link) and the destination is [Microsoft Fabric and Dynamics 365](https://www.solvingdynamics365.com/guides/microsoft-fabric-and-dynamics-365). Landing in your own lake is [bring your own storage](https://www.solvingdynamics365.com/guides/integrating-dataverse-with-bring-your-own-storage). Reporting on the result is [Power BI for Dynamics 365](https://www.solvingdynamics365.com/guides/power-bi-for-dynamics-365), and the transactional alternative for small deltas is [change tracking](https://www.solvingdynamics365.com/guides/change-tracking-in-dataverse). --- # Azure vs Power Platform: when to use which Both let you build applications on Microsoft's cloud. Power Platform is low-code and opinionated for business apps; Azure is pro-code and general-purpose. Source: https://www.solvingdynamics365.com/guides/azure-vs-power-platform-when-to-use-which Section: Foundations Published: 2026-08-27 Updated: 2026-08-27 The Azure vs Power Platform question comes up on every serious Microsoft-shop architecture conversation, and it's the wrong question if it's framed as "either / or". The right question is "which is the right tool for this specific workload?" and often the answer is "both, doing different jobs". This guide walks the distinction in a shape that helps architects choose, and covers the working pattern for scenarios where the two collaborate. ## What each is **Power Platform** is Microsoft's low-code application platform, opinionated for business applications. Power Apps for user interfaces (canvas or model-driven), Power Automate for workflows, Power BI for analytics, Power Pages for external-facing sites, Copilot Studio for conversational agents, Dataverse for shared data. Governed centrally through Managed Environments and DLP policies. Time-to-first-app is measured in days. **Azure** is Microsoft's public cloud, pro-code and general-purpose. Virtual machines, container services (AKS, Container Apps), serverless functions, managed databases (SQL, Cosmos, PostgreSQL), messaging (Service Bus, Event Grid, Event Hubs), storage, networking, identity (Entra External ID, managed identities), AI services (Azure OpenAI, Azure ML), monitoring, and hundreds of other services. Time-to-first-app is measured in weeks to months. Both run on the same hyperscale cloud infrastructure. Both use Entra ID for identity. Both can be integrated with each other through well-defined connector, event, and API surfaces. ## When Power Platform is the right pick Power Platform is the right pick when the workload has these shapes: **Business application over Dataverse.** A tracker for approvals, a case-management app for a specific team, a portal for customer request submissions, a mobile app for field data capture. Anything that fundamentally is "structured data with a form and a workflow". **Automation over Microsoft 365 and Dataverse events.** A flow that fires when a SharePoint file is uploaded, an approval routed through Teams, a scheduled report emailed. The 500+ connectors and event triggers let you assemble this without writing any code. **Analytics over Microsoft data.** Reports and dashboards, especially over Dataverse, Fabric, SQL, or files. Semantic model design, DAX measures, embedded reports. Power BI is a serious BI product, not a low-code toy. **Fast time-to-value.** Prototypes that need to work in a week. Solutions where the maker is the domain expert (a finance analyst building a budgeting tool, a marketing manager building a campaign tracker). **Central IT governance of low-code.** Managed Environments, DLP policies, solution pipelines, Center of Excellence tooling. Power Platform assumes central governance is a thing that has to work; Azure assumes the individual workload owners solve their own governance. ## When Azure is the right pick Azure is the right pick when the workload has these shapes: **High-throughput or specialised compute.** Machine learning training, video processing, scientific compute, real-time bidding, event stream processing at millions of events per second. Power Platform cannot land here; Azure was built for it. **Custom pro-code applications.** A .NET web app, a Python data pipeline, a Node.js service, a Go microservice. Any workload where the code is genuinely the artefact and you want direct control over language, framework, deployment, and runtime. **Custom APIs and integrations.** Building an API that many consumers hit; a legacy-integration middleware layer; a data pipeline between SAP and Snowflake. Azure Functions, Logic Apps, API Management, Service Bus, Event Grid are the toolkit. **Regulated compute isolation.** Workloads that need dedicated virtual networks, network isolation, private endpoints, customer-managed encryption keys, or specific compliance certifications that Power Platform doesn't offer at your regulatory level. **Highly custom AI.** Fine-tuning a model, building an agent with custom orchestration, running inference at scale with your own model. Azure OpenAI, Azure AI Foundry, Azure ML. **Below-the-application-layer infrastructure.** Data lakes, message brokers, caches, DNS, CDN — the substrate that applications sit on. Power Platform consumes these; Azure provides them. ## Where the boundary is fuzzy Two areas genuinely sit near the line. **Integration workloads.** Power Automate cloud flows handle a huge range of integration scenarios. So does Azure Logic Apps (which is the same underlying engine, sold under Azure). And Azure Functions. And Service Bus. Which one is right depends on throughput, latency, complexity, developer preference, and licensing model. There is no clean rule; a solutions architect makes the call per workload. **Simple business apps with real transaction volume.** A Power App with a few hundred users and moderate transaction volume runs well. The same app with 20,000 users hitting Dataverse at peak needs deep API-throttling awareness or a re-architecture onto Azure. The break point is not sharp and it's not fixed — Microsoft has been raising Dataverse's ceilings — but it exists. ## The collaboration pattern The most productive pattern for mixed environments is **Power Platform for the front-end, business logic, and workflow; Azure for the substrate and specialised workloads**. A concrete example: a customer wants a field-inspection app. - **Power App** on mobile for the technician to fill in the inspection. - **Dataverse** for the inspection record and photo attachments. - **Power Automate flow** to route the completed inspection through approval. - **Azure Function** to run image analysis on the uploaded photos with a custom ML model. - **Azure Service Bus** to queue notifications to a third-party regulatory reporting system. - **Power BI** for the compliance dashboard. Each part of the workload is on the tool that fits it best. The Power Platform pieces get the fast time-to-value and central governance. The Azure pieces get the specialised capability. The two integrate through documented connectors and event surfaces. ## Governance implications Governance is where the two platforms differ most in operating model. **Power Platform** assumes governance is centralised through the Power Platform admin center — DLP policies apply to all environments, Managed Environments enforce sharing rules, the Center of Excellence starter kit provides visibility into makers, apps, and flows. A central IT team can meaningfully oversee thousands of makers. **Azure** assumes governance is distributed with policy-as-code (Azure Policy), subscription-level RBAC, and a landing-zone architecture. Central IT sets guardrails; workload teams own their subscriptions. Overseeing thousands of Azure subscriptions requires substantially more investment in landing-zone tooling and cost-management discipline. For Microsoft-shop customers, both models coexist. The Power Platform CoE and the Azure landing zone are complementary — Power Platform for the wide maker community, Azure for the pro-code workloads and shared substrate. ## Cost profile **Power Platform** is licensed per user or per app or per capacity. The per-user model scales linearly; the per-app model can be cheaper for large-user, single-app scenarios. Cost is predictable and roughly linear with user or app count. **Azure** is consumption-based. Cost is proportional to compute hours, storage GB, transactions, egress bandwidth. Cost is variable and often unpredictable at first — a workload can scale up dramatically under load and the bill follows. FinOps discipline is more important on Azure than on Power Platform. For a given business application, Power Platform is usually cheaper for the small-user-count / high-per-user-value shape (an approval app for 200 users). Azure is usually cheaper for the high-transaction / low-per-user shape (an API serving 10 million calls a day). ## The short version Power Platform is opinionated low-code for business applications, with fast time-to-value, central governance, and predictable licensing. Azure is pro-code cloud infrastructure with unlimited flexibility, distributed governance, and consumption pricing. Business apps and workflow → Power Platform. Substrate, specialised compute, custom AI, high-throughput integration → Azure. Most non-trivial Microsoft-shop architectures use both, connected through documented surfaces, with each tool doing what it's best at. ## Where to go next On the Azure side: [Azure Functions for Dynamics 365](https://www.solvingdynamics365.com/guides/azure-functions-for-dynamics-365), [Logic Apps Standard vs Consumption](https://www.solvingdynamics365.com/guides/logic-apps-standard-vs-consumption), and the [Azure services overview](https://www.solvingdynamics365.com/guides/integrating-dynamics-365-with-azure-services). The same boundary inside Dataverse is [plug-ins vs Power Automate](https://www.solvingdynamics365.com/guides/integrating-with-dataverse-plug-ins-vs-power-automate); the third-party version of the low-code question is [Power Automate vs Zapier](https://www.solvingdynamics365.com/guides/power-automate-vs-zapier). ### Frequently asked questions **Is Power Platform a replacement for Azure?** No — they sit at different layers. Power Platform is the opinionated low-code layer for business applications (forms, workflows, reports over Dataverse); Azure is the general-purpose pro-code cloud underneath. Real solutions routinely use both, for example a Power App front end with an Azure Function doing the heavy compute. **When does a workload belong on Azure?** High-throughput or specialised compute, custom pro-code applications, custom APIs and middleware, workloads needing network isolation or customer-managed keys, and custom AI. Anything where the code is the artefact and you need control of language, runtime and deployment. **When is Power Platform the right pick?** Structured data with a form and a workflow: trackers, case management, approval automation over Microsoft 365 events, analytics over Microsoft data, and anywhere time-to-first-app measured in days matters more than architectural control. **Where is the boundary genuinely fuzzy?** Integration workloads — Power Automate, Logic Apps (the same engine sold under Azure), Functions and Service Bus overlap heavily — and business apps with real transaction volume, where a Power App that works for hundreds of users may need re-architecture toward Azure at tens of thousands. --- # B2C authentication with Dynamics 365 — Entra External ID and beyond How to authenticate external customers and partners against Dynamics 365 — Entra External ID (formerly Azure AD B2C), Power Pages authentication. Source: https://www.solvingdynamics365.com/guides/b2c-authentication-with-dynamics-365 Section: Integrations / API & identity Published: 2026-05-01 Updated: 2026-08-25 Dynamics 365 needs to authenticate two kinds of users: internal employees (Entra ID workforce identities) and external customers and partners (B2C-style identities). The patterns for the second case have evolved — Azure AD B2C, Power Pages's built-in identity providers, and now **Microsoft Entra External ID**. Knowing the options and the trade-offs is essential for any customer-facing deployment. **Internal vs external identity.** - **Internal (workforce)** — employees with Entra ID accounts. Single tenant, controlled provisioning. - **External (customer)** — customers, partners, suppliers. Many millions potential. Self-registered. Different lifecycle from employees. Putting customers in the workforce Entra ID tenant is a bad idea — different lifecycle, different scale, license implications. ## Azure AD B2C (legacy) The historical Microsoft B2C identity solution: - Separate tenant from workforce. - Self-registration via custom policies. - Social identity providers (Google, Facebook, Apple). - Custom branding. - MFA configurable. Used widely; mature; supported. New deployments now have an alternative. ## Microsoft Entra External ID Rebranded and modernised replacement: - Same conceptual model — external identity tenant. - Integrated with modern Entra features. - Improved developer experience. - Same auth protocols (OAuth, OIDC). For new B2C deployments, Entra External ID is the path. Existing Azure AD B2C continues to work but Microsoft's investment is shifting. ## Power Pages identity providers Power Pages portals can authenticate users via: - **Local accounts** — username/password in Dataverse (small scale only). - **Microsoft accounts** — personal Microsoft accounts. - **Entra ID** — workforce accounts. - **Entra External ID / Azure AD B2C** — purpose-built customer identity. - **Social providers** — Google, Facebook, LinkedIn. - **SAML 2.0** — enterprise federation. - **OAuth 2.0** — generic. For customer portals, the combination of Entra External ID + selected social providers is common. ## The contact-record binding Power Pages binds an authenticated user to a Dataverse **contact** record: - First-time login → contact lookup by email or external ID → if found, bind; if not, create. - Subsequent logins use the binding. - The contact's web roles drive what the user can see and do. This is the mechanism connecting authentication (who) with authorisation (what). **User registration flows.** - **Self-registration** — user signs up; account created with limited access; possibly admin approval for elevated access. - **Invitation-based** — admin invites; user redeems invitation; account created with pre-configured role. - **Federation** — user's enterprise IdP federates; user appears with prior trust. Different flows suit different B2C scenarios — public portal vs partner portal vs supplier portal. **MFA for external users.** - Strongly recommended for any portal accessing sensitive data. - Configurable per identity provider. - Step-up MFA — required only for high-risk operations. ## Single sign-on (SSO) for customers If the same customer authenticates across multiple Microsoft-hosted properties: - Single Entra External ID tenant. - Customer signs in once, accessing all properties. - Sign-out propagates. Reduces friction; improves customer experience. ## Custom user attributes External identity tenants can store: - Standard claims (email, name). - Custom claims (loyalty number, tier, preferences). Claims flow into the application as token claims at sign-in. Available for personalisation and authorisation. **Conditional access for external users.** - Risk-based — block sign-in from suspicious locations. - Device-based — require managed devices for sensitive access. - App-based — different rules per app. Same Conditional Access framework as workforce, applied to external identities. **B2C with Dynamics 365 specifics.** - **Customer self-service portal** — Power Pages + Entra External ID. - **Partner portals** — same pattern; partner-specific business logic. - **Supplier portals** — for F&O vendor collaboration; Entra External ID for supplier sign-in. - **Marketing forms** — anonymous-to-known conversion; identity captured on first form submission. **Pricing and licensing.** - Entra External ID priced per monthly active user (MAU). - First N users free; pay-per-user beyond. - Compared to AAD B2C: similar economics, modernized billing. For high-volume consumer portals (millions of users), unit economics matter — model carefully. **Migration from Azure AD B2C to Entra External ID.** - New tenant creation. - User migration — depending on volume, batch process. - Application reconfiguration — update endpoints. - Custom branding ported. - Testing. Microsoft provides tooling and guidance; migration is non-trivial but achievable. **Common pitfalls.** - **Customers in workforce tenant.** Wrong tenant; licence cost; security risk. - **Local accounts at scale.** Username/password storage in Dataverse for thousands of customers; password management nightmare. - **No MFA.** Customer accounts compromised; data exposure. - **Single failure point.** Only one IdP supported; if it's down, all customers locked out. - **Identity-to-contact mismatch.** Email-based binding fails when customer changes email; new contact created; history lost. - **Conditional access too strict.** Legitimate customers blocked. ## Operational guidance For new customer-facing Dynamics 365 deployments: - Use Entra External ID. - Layer in social providers based on audience. - Enable MFA at minimum for sensitive operations. - Conditional Access policies appropriate for risk profile. - Plan contact-record binding lifecycle carefully. ## Strategic positioning Customer identity is foundational for any external-facing Dynamics 365 deployment. The platform supports flexible patterns; choosing the right one depends on audience size, security needs, and integration complexity. Entra External ID is the strategic direction; for new projects, it's the default choice. The investment in clean identity architecture pays back continuously — every customer self-service interaction depends on it working reliably. --- # Backup strategy for Dynamics 365 What Microsoft backs up automatically vs what customers need to plan for — Dataverse, F&O, third-party backup tools. Source: https://www.solvingdynamics365.com/guides/backup-strategy-for-dynamics-365 Section: Implementation / Operations & support Published: 2026-05-01 Updated: 2026-08-25 Cloud Dynamics 365 customers often assume Microsoft handles all backup. Microsoft handles a lot, but not everything — and "backup" and "restore" semantics matter for specific recovery scenarios. Understanding the platform's native capabilities and where customer-specific backup tooling fits is essential for any operationally serious deployment. **What Microsoft handles natively.** - **Dataverse production environments** — backed up automatically by Microsoft. Point-in-time backups retained for 7 days (default), expandable on certain tiers. - **F&O production environments** — backed up automatically; point-in-time restore typically 30 days. - **Disaster recovery** — geo-redundant; in case of regional outage, services restored in paired region. - **Service availability** — 99.9%+ SLA across services. These are operational; customers can request restores within the retention window. **Restore mechanics.** - **Dataverse** — restore entire environment to a point in time; cannot restore individual tables. - **F&O** — full database restore via LCS or admin portal; granular restore not native. - **Self-service** — restore is initiated by customer admin via admin portal. Restore overwrites the target; you must accept losing changes since the backup point. **What Microsoft does NOT cover.** - **Accidental deletion beyond retention window** — if not noticed for 30 days, prior state is gone. - **Compliance retention** — regulatory holds may require longer retention than native. - **Granular restore** — restoring one record without rolling back everything. - **Cross-environment migration** — backup of dev to restore as test isn't always natively supported. - **Application-aware extraction** — extracting data for non-Microsoft systems. For these scenarios, customer-managed backup tools fill the gap. **Third-party backup tools.** - **AvePoint Cloud Backup** — Dataverse and Power Platform backup. - **Skyvia Data Backup** — Dynamics 365 / Dataverse incremental backup to cloud storage. - **CloudFuze, BackupGo, others** — varying capability. Capabilities: - Daily / hourly automated backups. - Granular restore (table, record level). - Cross-tenant restore (recovery scenario). - Long-term retention (years, decades). - Compliance-driven retention policies. ## Cost of third-party backup Per-environment licensing, often per-GB. For a large Dataverse tenant, can be material. Weigh against the cost of unrecoverable data loss. **Backup vs disaster recovery.** - **Backup** — point-in-time copies of data, used to restore from accidental deletion or corruption. - **Disaster recovery** — capability to operate in a different region if primary fails. Microsoft handles DR natively; backup is partially Microsoft, partially customer concern. **Backup vs archive.** - **Backup** — short-term, operational recovery. - **Archive** — long-term retention for compliance or historical reference. Different needs, different tools. Backup is rolling; archive is preserving. **Specific scenarios.** - **Accidental table delete in Dataverse** — within retention, restore environment to prior point. - **Mass record deletion** by buggy flow — restore environment, accept loss of changes since. - **Single record needs restoring** — Microsoft's native restore overwrites everything; third-party granular tools more practical. - **Data lost 6 months ago** — Microsoft's retention has expired; third-party tools or backup files are the only option. **Backup policies — design considerations.** - **Frequency** — daily? Hourly? Trade off storage cost and RPO (recovery point objective). - **Retention** — 30 days? 1 year? 7 years? Driven by compliance. - **Scope** — full environment or specific entities? - **Access** — who can initiate a restore? RBAC essential. - **Testing** — periodic restore drills validate the backup actually works. The last point is critical: untested backups have a high probability of failure when needed. ## Long-term retention For compliance: - Financial records often need 7+ years. - HR records vary by jurisdiction. - Customer data tied to contracts. Microsoft's native retention doesn't cover this; customer-side archive is essential. ## Data extraction for archiving Periodically extract data to a separate store: - **Dataverse Synapse Link** or **Fabric link** — continuous replication to a data lake. - **Custom export** via DMF for F&O. - **CSV / Parquet** for cold storage. The archive store has its own retention; even if the live Dynamics 365 environment is deleted, the archive remains. ## GDPR / right to erasure tension Personal data subject erasure obligations conflict with long retention: - Customer requests deletion. - Data must be removed from live systems within timelines. - Backups containing the data are problematic — recovering a backup re-introduces deleted data. Mitigation: documented process to scrub deleted subjects from backups during routine restores; some organisations explicitly disclose in privacy notices that "backups may retain data for up to N days." **Common pitfalls.** - **Assumed Microsoft does everything.** Critical data lost; Microsoft can't help beyond retention. - **No restore drills.** Backup exists but restore process never tested; fails when needed. - **Granular restore expected.** Microsoft's overwrite-everything approach incompatible with single-record recovery needs. - **Backup tool not licensed for all environments.** Production covered, sandbox unlicensed; sandbox loss = real impact. - **Compliance retention overlooked.** 30-day retention insufficient for SOX; auditor flags. - **No documented RTO/RPO.** Recovery objectives undefined; expectations misaligned during incidents. **Operational rhythm.** - **Daily** — automated backups (Microsoft + third-party). - **Monthly** — restore drill in non-prod. - **Quarterly** — backup policy review. - **Annually** — full DR scenario rehearsal. ## Strategic positioning Backup strategy is unglamorous but essential. Microsoft's native capabilities are sufficient for many scenarios but not all. The decision to invest in third-party backup or extensive archival depends on: - Data criticality. - Regulatory environment. - Recovery requirements (granularity, point-in-time). - Risk tolerance. For regulated industries and operationally critical systems, comprehensive backup is non-negotiable. For everything else, careful evaluation of native vs supplementary tools sets the right level. --- # Bank deposits and cash management in Business Central How Business Central handles physical bank deposits, cash receipts, and the day-to-day cash management beyond bank reconciliation. Source: https://www.solvingdynamics365.com/guides/bank-deposits-and-cash-management-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 Updated: 2026-08-25 Many SMBs still handle physical cash and cheques — retail businesses, restaurants, professional services with cash-on-arrival, charities and clubs. Business Central's cash management features cover the day-to-day handling: receiving payments, batching them into deposits, taking them to the bank, and reconciling against the bank statement. ## Cash receipt journal The simplest path: a sales invoice is paid, the AR clerk opens the **cash receipt journal**, picks the customer, picks the open invoice to apply against, enters the amount, and posts. The customer ledger entry settles; the bank account ledger is credited. For multiple payments received in a day, the journal accumulates many lines before a single batch post. ## Bank deposits Bank deposits formalise the "many cheques and cash, one trip to the bank" pattern. Instead of posting each receipt as it arrives, the receipts queue on a **bank deposit** record: 1. **Create deposit** — header records the bank account, date, total, and description. 2. **Add lines** — each cheque or cash payment as a line, with customer reference, amount, applied invoice. 3. **Post** — when the deposit is taken to the bank, post it. The bank ledger receives one large entry equal to the deposit total; the AR ledger receives the individual applications. This pattern matches the physical reality: many small receipts go in one envelope to the bank, one bank statement line shows the deposit. Reconciliation is then trivial — the bank statement's deposit ties exactly to the BC deposit posting. ## Posted bank deposits Once posted, the deposit is immutable and archived. Adjustments require credit memos or correcting journals against the AR or bank ledger. ## Cash management module Beyond receipts and deposits, the cash management area in BC handles: - **Bank account cards** — each bank account is a master record with currency, posting groups, bank statement format, payment file format. - **Bank account ledger entries** — every posting that affects the bank balance. - **Bank reconciliation** — matching the statement to the ledger (see the dedicated guide). - **Bank account statements** — the historical record of reconciled statements. - **Cash flow forecast** — forward view of liquidity (see the dedicated guide). - **Payment journals** — outbound vendor payments (see payment terms guide). - **Customer payments** — inbound applications. ## Reconciliation discipline The clean pattern: 1. Receive payments → cash receipt journal or bank deposit. 2. Take to bank. 3. Bank statement arrives the next day. 4. Run **Bank Reconciliation** — auto-match statement lines to ledger entries. 5. Resolve unmatched items (bank fees, errors). 6. Post the reconciliation. Done daily or weekly, bank reconciliation is a few minutes' work; left to month-end accumulation, it can become an hour or more of detective work. ## Multi-currency cash Bank accounts can be in any currency. Receipts in foreign currency post at the day's exchange rate; revaluation at period-end posts FX gain/loss. ## Petty cash Petty cash is handled either as a bank account (small, low-volume) or as a GL account with manual journals. BC doesn't have a separate "petty cash module" — the bank-account pattern is the standard approach for tracking petty cash float. ## Credit card receipts Customer-paid card payments are typically handled as a separate bank account representing the merchant-services holding account. The card processor settles to the operating bank account days later, and the settlement is reconciled with merchant-fee deductions. ## Practical advice For SMBs taking cash and cheques, configure bank deposits from day one. The discipline of batching receipts before deposit makes reconciliation trivial; the alternative — every receipt posted individually — turns into a forensic exercise at month-end. --- # Bank feeds and statement import in Business Central How Business Central pulls bank statement data — Envestnet Yodlee feeds, bank statement file import formats, and the data-exchange framework behind both. Source: https://www.solvingdynamics365.com/guides/bank-feeds-and-statement-import-in-bc Section: Business Central / Finance & accounting Published: 2026-05-01 Updated: 2026-08-25 Reconciling a bank account by hand is a slow, error-prone afternoon. Business Central provides two paths to automate the inbound side: **bank feeds** (live API connections to financial institutions) and **statement file import** (MT940, BAI2, CAMT.053, and similar formats). Both ultimately load lines into the **Bank Account Reconciliation** or **Payment Reconciliation Journal** for matching against ledger entries. ## Envestnet Yodlee bank feeds Microsoft's standard bank feed service is built on Envestnet Yodlee, the financial-data aggregator. With the **Envestnet Yodlee Bank Feeds** extension installed, a Business Central user can: 1. Link a bank account in BC to the corresponding account on the user's bank portal. 2. Authenticate (OAuth or username/password) via Yodlee's flow. 3. Schedule daily refresh — Yodlee fetches the latest transactions and pushes them into BC's `Bank Stmt Service Trans` records. 4. Run reconciliation against the imported transactions. Coverage is broad in North America and Western Europe but uneven elsewhere — verify the bank is supported before committing. Some banks require additional consent or appear in degraded mode (limited fields). ## Statement file import The alternative is to upload a file the bank produces — MT940 (legacy SWIFT), CAMT.053 (XML, ISO 20022, the modern standard), or country-specific formats (Norwegian Bankgiro, German MT940 variants). BC's **Data Exchange Definition** framework parses the file: 1. On the bank account card, set the `Bank Statement Import Format` field. 2. Use the `Import Bank Statement` action on a bank reconciliation; pick the file. 3. The data exchange parses XML or text into reconciliation lines. ## Data Exchange Definitions BC ships with several built-in formats (CAMT.053, SEPA CT, NACHA). Country-localised formats add more. For unsupported banks, partners often build custom definitions: - A `Data Exch. Def` record names the format. - `Data Exch. Line Def` records describe each line type (header, balance, transaction). - `Data Exch. Column Def` records map XML paths or text positions to fields in BC tables. - `Data Exch. Field Mapping` records map data-exchange columns to target table fields with optional transformation expressions. The framework is configurable but tedious; modifying it requires understanding both the file format spec and BC's data exchange model. **Payment Reconciliation Journal vs Bank Reconciliation.** - **Bank Reconciliation** — designed for full bank-statement vs G/L reconciliation. Reconciles every transaction over a period; produces a reconciliation report; closes the period balance. - **Payment Reconciliation Journal** — designed for incoming customer payments. Suggests applications against open customer invoices using algorithms (name match, amount match, reference match). Both consume the same imported lines but apply them differently. Most teams use both: payment reconciliation for incoming customer cash, bank reconciliation for full month-end reconciliation. ## Matching logic The payment reconciliation journal scores potential matches: - Exact reference match (CID, OCR, ISO reference) — high confidence. - Customer name match + amount — medium. - Amount only — low; needs human review. The `Apply Automatically` action auto-applies high-confidence matches and leaves the rest. Tunable thresholds determine where the line is drawn. ## Bank account balance reconciliation The bank reconciliation page compares: - The bank's reported balance. - BC's bank account balance. - The cumulative effect of matched and unmatched transactions. Outstanding items (a check issued but not cleared, a deposit in transit) are flagged. When totals match and outstanding items are explainable, the reconciliation can be posted, closing the period. **Common pitfalls.** - **Daily feed with weekly reconciliation cadence.** Transactions accumulate; daily review keeps it manageable. - **CAMT.053 versions.** ISO 20022 has multiple versions (.001.02, .001.08); banks support different ones. Confirm the data-exchange definition matches your bank's output. - **Manual journal entries against the bank account.** Reconciliation impossible to balance. Discipline: every bank account movement must originate from a payment, receipt, transfer, or reconciliation entry — never a manual G/L journal. - **Yodlee re-authentication.** Banks rotate session tokens; Yodlee links break periodically. Build a monitoring step into the AR rhythm. - **Duplicate imports.** Importing the same statement twice creates double entries. The `Statement No.` field on a bank reconciliation should be unique; system warns but doesn't always block. ## When to invest in custom integration For high-volume cash management (large multinationals, treasury operations), a direct host-to-host bank integration through Azure Logic Apps or a partner connector typically beats both Yodlee and file import. The setup cost is high but the daily operational cost is near zero. --- # Bank reconciliation in Business Central How bank reconciliation works in Business Central — bank feeds, statement imports, AI-assisted matching, and month-end reconciliation. Source: https://www.solvingdynamics365.com/guides/business-central-bank-reconciliation Section: Business Central / Finance & accounting Published: 2026-05-01 Updated: 2026-08-31 Bank reconciliation is the routine financial task that benefits most from Business Central's recent investment in automation and AI. What used to be a half-day spreadsheet exercise is now mostly a click-through. ## The model Each bank account in BC is represented by a **bank account card** with its own ledger entries (the *bank account ledger*), currency, and posting setup. Reconciliations match BC's posted bank ledger entries against the bank's statement to confirm both sides agree, surface differences, and create journal entries for items only the bank knows about (fees, interest, direct debits). ## Importing the statement Three patterns are common: - **Live bank feeds** via partner connectors (Envestnet | Yodlee in North America, regional bank-feed services in Europe and Australia/NZ) refresh transactions daily without manual import. - **MT940 / camt.053 files** uploaded into BC, the standard formats most European banks support. - **CSV files** with a configurable mapping for banks that don't provide structured exports. ## The Bank Account Reconciliation page Imported statement lines appear alongside BC bank ledger entries. BC auto-matches by amount, document number, and date, marking matches as green. Unmatched lines are highlighted for manual review. ## AI-assisted matching (Copilot) The Copilot for Bank Reconciliation learns from prior reconciliations to suggest matches on lines that don't auto-match cleanly — payments where the customer reference is slightly off, batched payments covering multiple invoices, payments early or late, foreign currency conversions. The user accepts, modifies, or rejects each suggestion; the engine improves over time. ## Posting transfer entries Lines on the bank statement that don't have a counterpart in BC (bank fees, interest, direct debits, undeposited cheques) can be posted directly from the reconciliation as journal entries to user-defined GL accounts, eliminating a separate journal step. ## Closing the reconciliation Once the difference is zero, the reconciliation is *posted*, marking the matched bank ledger entries as closed and writing a posted bank reconciliation record for audit. ## Bank reconciliation vs the payment reconciliation journal BC ships two pages with confusingly similar names, and choosing the right one matters. The **Bank Account Reconciliation** page (this guide) confirms that posted BC entries agree with the bank — it's a control activity. The **Payment Reconciliation Journal** does something different: it takes the same imported statement and *creates* the application of customer and vendor payments — matching incoming payments to open invoices, applying them, and posting the lot. Businesses with high incoming-payment volume live in the payment reconciliation journal daily and run the bank reconciliation as the monthly check on top. Using the bank reconciliation page to discover unapplied customer payments means you're doing AR application a month late; using the payment journal as your only control means nobody has confirmed the bank ledger actually ties out. You want both, in that order — apply daily, reconcile monthly (or weekly). ## Multi-currency accounts A bank account in a foreign currency reconciles in that currency — statement lines and ledger entries both in EUR, say — while the GL carries the LCY equivalent. The reconciliation itself is unaffected, but month-end needs the separate **currency revaluation** step to restate the LCY balance at the closing rate; see [foreign currency revaluation in BC](https://www.solvingdynamics365.com/guides/foreign-currency-revaluation-in-bc). A reconciled account that still shows a GL difference is almost always an unrevalued FX balance, not a reconciliation error. ## Common failure modes - **The stale first reconciliation.** An account that has never been reconciled (or was migrated with a lump opening balance) presents years of noise on day one. Do a one-time cleanup reconciliation as part of go-live cutover rather than asking the first month-end to absorb it. - **Direct postings to the GL bank account.** If journals post straight to the bank's G/L account instead of through the bank account card, the bank ledger and GL diverge and no amount of reconciling fixes it. Block direct posting on bank-linked G/L accounts. - **Deleting instead of investigating.** Unmatched statement lines get deleted to force the difference to zero. The reconciliation posts, and the unexplained transaction resurfaces next month. Every line needs a match, a transfer posting, or a documented reason. - **Trusting Copilot suggestions blind.** The AI matching is good at fuzzy references and batched payments, but it proposes — a human accepts. Treat a low-confidence suggestion on a large amount as a prompt to look, not a button to click. ## Month-end A reconciled bank account ledger is what ties bank account balances on the trial balance to actual bank statements. Reconciliation should be done at least monthly; in many businesses it's run daily — daily reconciliation catches fraud, bank errors, and mispostings while they're hours old rather than weeks. The posted reconciliation is also what your auditors will ask for, so the discipline pays for itself at year-end; it slots into the broader [month-end close checklist](https://www.solvingdynamics365.com/guides/business-central-month-end-close). --- # Batch jobs and batch groups in Dynamics 365 Finance How F&O's batch framework runs background processing — batch jobs, batch groups, schedules, server allocation, and operational monitoring. Source: https://www.solvingdynamics365.com/guides/batch-jobs-and-batch-groups-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-06-06 Updated: 2026-08-25 Dynamics 365 Finance and Supply Chain runs substantial background processing — periodic invoicing, master planning, inventory closing, electronic-reporting submissions, integration imports / exports. The **batch framework** is the platform's scheduler and execution engine; understanding it is essential to running a tenant at scale. ## Batch jobs A **batch job** is the unit of scheduled work. Each batch job: - **Caption** — human-readable description. - **Scheduled start** — when it first runs. - **Recurrence** — one-time, daily, weekly, monthly, hourly, or custom cron-style expressions. - **Status** — Scheduled, Executing, Ended, Error, Cancelled. - **Batch group** — assignment to a processing pool (see below). - **Tasks** — one or more units of work within the job. A single batch job can contain multiple **tasks**, each a separate process. Tasks run in defined sequence with dependencies; complex jobs orchestrate multi-step pipelines. ## Batch groups A **batch group** is a named processing pool that segregates batch jobs by purpose or priority: - **Default** — most batch work, general-purpose. - **High-priority** — for time-sensitive work that shouldn't wait behind lower-priority jobs. - **Long-running** — for jobs taking hours; isolated so they don't block shorter jobs. - **Integration** — for inbound / outbound integration processing. - **Reporting** — for report generation. - **Custom** — any business-specific pool. Each batch group has configured **parallelism** — how many threads / batch servers can run jobs in that group simultaneously. The split lets administrators allocate resources: critical integrations on a dedicated high-parallelism group; reporting on a lower-priority group. ## Batch servers Behind the scenes, **batch servers** are F&O application servers configured to process batch work. Each server is assigned to one or more batch groups; servers in the same group share the workload. Microsoft manages batch-server provisioning in SaaS F&O; the customer controls allocation through batch group configuration. ## Tasks and dependencies Within a batch job, tasks have dependencies — task B starts only after task A completes successfully. The model supports: - **Sequential** — A → B → C. - **Parallel** — A and B run concurrently, then C waits for both. - **Conditional** — task B runs only if task A succeeded; alternative task C runs if A failed. Complex multi-step nightly routines compose as task graphs within one batch job. **Common batch jobs.** - **Master planning runs** — typically nightly regenerative plans. - **Inventory closing** — month-end or quarter-end. - **Adjust Cost — Item Entries equivalent** — incremental cost recalculation. - **Currency revaluation** — period-end FX revaluation. - **Recurring invoicing** — subscription / recurring contract billing. - **Sales / purchase reservation cleanup** — release stale reservations. - **Electronic reporting submissions** — periodic statutory filings. - **Integration data exports** — to / from external systems. - **Job queue equivalent operations** — anything that doesn't need user interaction. ## Monitoring The **Batch History** workspace lists every batch job execution with: - Start time, end time, duration. - Status (success, failure, cancelled). - Detailed log per task. - Error messages and stack traces for failures. The **System administration** workspace surfaces batch health globally — currently running, queued, failed. Telemetry through Application Insights tracks long-term trends. **Failure handling.** - **Retry** — failed tasks can retry automatically per configured policy. - **Notification** — failures can trigger email or Teams notifications to operations. - **Manual intervention** — administrators can resume, restart, or skip failed tasks. - **Cascade behaviour** — a failed task can either halt subsequent tasks or skip and proceed. ## Throttling and resource management Heavy batch loads can compete with interactive users for resources. Manage through: - **Time-of-day scheduling** — heavy jobs during off-hours. - **Batch group allocation** — interactive-impacting jobs on isolated batch groups. - **Concurrent limits** per batch group. - **Job priority** within a group. **Common pitfalls.** - **Job piles up due to under-allocated batch group** — work queues but doesn't run because no server is available. - **Conflicting jobs with no isolation** — heavy inventory closing kills user-interaction performance. - **Failed jobs left in error** — operations team doesn't notice; downstream processes miss data. - **Schedule drift** — jobs scheduled to run at fixed times accumulate drift; reconsider scheduling weekly vs cron. ## Operational reality The batch framework is the operational engine of F&O. Configure batch groups thoughtfully; monitor execution daily; investigate failures promptly. Mature operations run hundreds of batch jobs daily without anyone noticing. --- # Batch operations in the Dataverse Web API How to make multiple Dataverse Web API calls in one HTTP round-trip — $batch requests, change sets, and the performance gains at scale. Source: https://www.solvingdynamics365.com/guides/batch-operations-in-the-dataverse-web-api Section: Integrations / API & identity Published: 2026-05-01 Updated: 2026-08-25 Calling Dataverse one record at a time over the Web API is fine for occasional operations. For integrations processing hundreds or thousands of records, the per-call HTTP overhead dominates total time. **Batch operations** — submitting multiple operations in a single HTTP request — collapse that overhead and unlock substantially higher throughput. ## The OData batch endpoint The Web API exposes a batch endpoint at `POST /api/data/v9.x/$batch`. The request body is a multipart payload containing many sub-requests; the response is a multipart payload with each sub-response. **Anatomy of a batch request.** ``` POST /api/data/v9.2/$batch HTTP/1.1 Content-Type: multipart/mixed; boundary=batch_AAA --batch_AAA Content-Type: application/http Content-Transfer-Encoding: binary GET /api/data/v9.2/accounts(GUID-1) HTTP/1.1 Accept: application/json --batch_AAA Content-Type: application/http Content-Transfer-Encoding: binary GET /api/data/v9.2/accounts(GUID-2) HTTP/1.1 Accept: application/json --batch_AAA-- ``` Multiple GETs in one HTTP round-trip; the server processes each, responses bundle into the multipart reply. ## Mixing operation types Within one batch, mix GETs, POSTs, PATCHes, DELETEs. For non-GET operations, wrap them in a **change set** for transactional atomicity (see below). **Change sets — atomic groups within a batch.** A **change set** is a sub-group within a batch that's processed atomically — either all sub-requests succeed or all are rolled back. Used for related writes that must succeed together: ``` --batch_AAA Content-Type: multipart/mixed; boundary=changeset_BBB --changeset_BBB Content-Type: application/http Content-Transfer-Encoding: binary POST /api/data/v9.2/accounts HTTP/1.1 Content-Type: application/json { "name": "Contoso" } --changeset_BBB Content-Type: application/http Content-Transfer-Encoding: binary POST /api/data/v9.2/contacts HTTP/1.1 Content-Type: application/json { "firstname": "Karen", "_parentcustomerid_value": "$1" } --changeset_BBB-- --batch_AAA-- ``` The contact creation references the account via the `$1` placeholder — the platform substitutes the newly-created account's GUID in the second request. If either fails, both roll back. **Performance characteristics.** - **Network round-trip count drops** from N to 1. Latency reduces dramatically for chatty integrations. - **Throughput increases** — batch of 100 records typically completes in seconds vs minutes. - **Server processing** — each sub-request still executes server-side individually; CPU savings are modest. - **Throttling** — batch requests count toward Dataverse API limits as multiple requests (one per sub-request). **Practical limits.** - **Maximum sub-requests per batch** — typically ~1000 per batch. - **Maximum change sets per batch** — typically ~10. - **Maximum sub-requests per change set** — typically ~100. - **Maximum payload size** — typically several megabytes; very large attachments hit limits. Check Dataverse documentation for current values; they evolve. **Common patterns.** - **Bulk upsert** — submit 100 PATCHes-with-create-if-missing in one batch. - **Related-record creation** — create an Account plus 10 Contacts in one batch with a change set, ensuring atomicity. - **Read-many-by-ID** — submit 100 GETs in one batch instead of 100 round-trips. - **Mass deletion** — submit 100 DELETEs in one batch. - **Read followed by conditional write** — a batch with a GET sub-request whose result drives a conditional PATCH in the same batch. ## SDK support The Dataverse SDK for .NET (`OrganizationServiceProxy`, `ServiceClient`) supports batch operations through `ExecuteMultipleRequest` — the SDK equivalent of the Web API's batch endpoint. The mechanics differ slightly but the pattern is the same. ## Power Automate Power Automate's "List rows" and other Dataverse actions don't natively use batch internally for bulk operations. To use batching from Power Automate, call the Web API directly via the HTTP action with a multipart body — more code, but substantial performance gain for bulk scenarios. **Common pitfalls.** - **Throttling surprise** — a batch with 100 sub-requests consumes 100 API call units, not 1. Plan capacity. - **Mixing transactional and non-transactional in one batch** — change sets vs free sub-requests have different rollback semantics. Be deliberate. - **Batch larger than the limit** — exceeds maximum; gets rejected. Split. - **Error handling — partial success** — non-change-set sub-requests can independently succeed or fail; the consumer must process the response carefully. ## Operational reality For any Dataverse integration handling more than dozens of records, batching is the table-stakes optimisation. The investment is small at design time; the throughput gain compounds over the integration's life. --- # Batch posting in Business Central How Business Central handles batch posting of journals, orders, and documents — performance, background processing, and the trade-offs against single posting. Source: https://www.solvingdynamics365.com/guides/business-central-batch-posting Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-25 Posting one sales invoice is fast. Posting 500 at month-end is not — unless you use **batch posting**, BC's feature for queueing multiple documents for unattended posting, typically in background. Understanding when batch helps and when it just hides problems matters for posting performance. **What batch posting means.** - A user selects multiple documents (sales orders, sales invoices, purchase invoices, etc.). - Invokes **Batch Post** action. - BC queues each for posting. - Posting happens sequentially, often in a background session. - Results summarised — successes, failures. The user doesn't wait for each post; they get a notification when the batch completes. **Where batch posting is available.** - Sales orders (post and ship). - Sales invoices. - Purchase invoices. - Purchase orders (receipt or invoice). - General journals. - Item journals. Each list page typically has a Batch Post action. **Foreground vs background.** - **Foreground** — user's session processes the batch; user waits. - **Background** — BC's task scheduler processes; user continues working. Background is the modern default for batch posting. Configured via the **Job Queue** entry that runs batch posting tasks. **Performance comparison.** - **Single posting** — one document at a time, user-driven, sub-second to few-seconds each. - **Batch posting** — multiple documents, queued; per-document time similar but no user wait. - **Bulk SQL operations** — would be faster but bypass business logic; not supported. Batch doesn't make individual posts faster; it removes user wait time. **Error handling.** - One document failing doesn't stop the batch. - Failed documents listed in the batch results. - User reviews failures and reposts or fixes. This is critical — without batch, a failure means user manually retries; with batch, failures isolated automatically. ## Concurrency considerations Background batch posting runs in its own session: - Locks tables briefly during each post. - Concurrent user activity may conflict. - Some posts may retry due to lock conflicts. For high-volume batches, schedule during off-hours to avoid concurrency. **Per-document type considerations.** - **Sales invoice batch** — straightforward; each invoice independent. - **Sales order with shipment + invoice** — two steps per order; batch handles both. - **General journal** — batch posts each journal as a unit; if one journal has imbalanced lines, the journal fails as a unit. - **Item journal** — similar. ## The job queue Batch posting often configured as a job queue entry: - Runs on schedule (nightly). - Picks up documents flagged for batch posting. - Posts and reports. This is the unattended pattern — users mark documents during the day; nightly batch posts them. ## Posting via REST API External systems often batch post via the BC API: - API call per document. - Throttling considerations. - Async error handling. For external automation, this pattern is common; API rate limits apply. **Common pitfalls.** - **Batch hiding problems.** Persistent failures buried in batch results; no one triages. - **Background batch competes with users.** Mid-day batch slows user activity; schedule for off-hours. - **Posting period closed during batch.** Documents fail when the period closes mid-batch. - **Number series exhaustion.** Heavy batch posting can outpace number series; configure adequately. - **No alerting on failures.** Batch completes; failures ignored. **Optimisation tips.** - **Smaller batches** — 50–100 documents per batch; easier to recover from errors. - **Pre-flight validation** — run report identifying likely-to-fail documents before batch. - **Scheduled retry** — for known transient failures. **Configuration: Sales & Receivables Setup, Purchase & Payables Setup.** Several batch-posting options: - **Post with Job Queue** — enable background processing. - **Notify on Success** — send notification when batch completes. - **Notify on Failure** — alerts for failures. **When NOT to batch.** - **Time-critical posting** — single posts are faster end-to-end for one document. - **Reviewer-required workflow** — each document needs review. - **Tiny volumes** — five documents, just post each. ## Strategic positioning Batch posting is essential for any operation with significant daily posting volume — wholesale distributors, e-commerce, B2B services. Configured properly with background processing, error monitoring, and scheduling discipline, it dramatically improves user experience and posting throughput. Configured carelessly, it becomes a source of hidden errors and operational confusion. Invest in the setup; treat batch as a production process, not a one-click convenience. --- # Benefits management in Dynamics 365 Human Resources How D365 HR handles benefits — plans, enrolment, eligibility rules, dependents, providers integration, and the operational discipline of annual open enrolment. Source: https://www.solvingdynamics365.com/guides/dynamics-365-hr-benefits-management Section: Customer Engagement / Human Resources Published: 2026-05-01 Employee benefits — health insurance, dental, retirement plans, life insurance, voluntary perks — are operationally complex and country-specific. **D365 Human Resources** manages the benefits portfolio: defining plans, enrolling employees, tracking dependents, integrating with providers, and supporting the annual open enrolment crunch. The capability scales from US-centric employer-paid benefits to international flex-benefit programmes. **Benefits architecture.** - **Benefit plan** — a specific benefit offering (e.g., "Aetna PPO Health Plan 2026"). - **Benefit option** — a tier within the plan (Employee Only, Employee + Spouse, Family). - **Benefit provider** — the carrier (Aetna, Blue Cross, Fidelity). - **Benefit type** — broad category (Health, Dental, Retirement, Life). - **Enrolment period** — when employees can enrol or change. - **Eligibility rules** — who's eligible for which plan. ## Eligibility rules Common dimensions: - **Employment status** — full-time, part-time. - **Tenure** — minimum service. - **Location** — country, state. - **Role** — executive, hourly. - **Union membership.** - **Bargaining unit.** Rules cascade — eligibility for a plan is the intersection of multiple criteria. **Enrolment events.** - **New hire enrolment** — onboarding window (typically 30 days). - **Open enrolment** — annual window (typically 2–4 weeks). - **Qualifying life events** — marriage, divorce, birth, dependent gain/loss; trigger mid-year enrolment changes. Each event has a window, eligibility rules, and approval workflow. **Enrolment workflow.** 1. Employee opens enrolment portal. 2. System displays eligible plans. 3. Employee selects plan and option. 4. Adds dependents if applicable. 5. Beneficiaries designated (for life insurance, retirement). 6. Cost displayed (employee deduction). 7. Confirmation; HR approves where required. 8. Enrolment effective on plan start date. The portal is typically Power Pages–based or third-party (Workday, ADP self-service) integrated with D365 HR. ## Dependents A dependent record includes: - Relationship (spouse, child, domestic partner, parent). - Date of birth. - Tax dependent status. - Coverage eligibility per plan. Dependents reuse across multiple benefits (same spouse on health and dental). ## Premium calculation Per-pay-period premium: - **Employee contribution** — what the employee pays. - **Employer contribution** — company-paid portion. - **Tax treatment** — pre-tax vs post-tax. Premium varies by plan, by option, by employee characteristics (age band, smoker status). ## Provider integration Enrolment data flows to the insurance carrier: - **EDI feed** — 834 enrolment file, weekly or daily. - **API integration** — newer carriers. - **Carrier portal upload** — manual fallback. Carrier processes enrolment; coverage activates; ID cards issued. Without timely feeds, employees show up at the doctor with no coverage on record. ## Open enrolment Annual ritual: - HR communicates plan changes for the upcoming year. - Window opens (typically October–November for January effective). - Every employee reviews and updates elections. - Defaults: re-elect prior plan, or active-enrol-required. - HR processes elections; carrier feeds; payroll deduction setup. Open enrolment is HR's busiest 4–6 weeks of the year; system reliability and user-friendly portal are essential. ## Affordable Care Act (ACA) compliance (US) US employers must: - Offer affordable coverage to full-time equivalents. - Report 1095-C forms to employees and IRS. - Track measurement period, stability period, eligibility. D365 HR (or partner ISVs layered on) handles ACA tracking and reporting. ## Cafeteria plans (Section 125) Tax-advantaged pre-tax benefits in the US: - **Health insurance premiums.** - **Flexible spending accounts (FSA)** — health, dependent care. - **Health savings accounts (HSA)** — paired with high-deductible plans. Each has specific tax treatment and enrolment rules. **Retirement plans.** - **401(k) / 403(b)** — employee deferrals. - **Employer match** — match formula, vesting. - **Pension** — defined benefit plans (declining but still present). - **Profit sharing** — employer discretionary. Integration with retirement plan administrator (Fidelity, Vanguard, T. Rowe Price) handles ongoing contribution tracking. ## International benefits Outside the US: - **Statutory benefits** — many countries mandate employer contributions. - **Pension schemes** — country-specific. - **Health benefits** — single-payer countries have minimal employer health benefits; private supplemental. - **Tax advantage** — varies wildly. Localisation packs for each country handle the specifics. **Benefit reporting.** - **Enrolment summary** — by plan, demographics. - **Premium / contribution totals** — for accounting accruals. - **Year-over-year changes** — for HR analytics. - **Vendor reconciliation** — carrier reports vs HR enrolment data. **Common pitfalls.** - **Open enrolment portal slow under load.** Thousands of employees enrolling in 2 weeks; performance critical. - **Wrong eligibility logic.** Some employees offered plans they're not eligible for; problems at carrier side. - **Dependents missed.** Spouse enrolled without children; family discovers gap at doctor. - **Premium drift.** Plan rates change but premium calculation not updated; payroll deductions wrong. - **Beneficiaries forgotten.** Life insurance with no beneficiary; legal complication at claim time. - **Carrier feed failure unnoticed.** EDI fails one week; new hires not enrolled at carrier; HR doesn't notice for weeks. ## Operational rhythm Year-round enrolment events (new hires, life events); monthly reconciliation against carrier reports; annual open enrolment cycle. Benefits administration has rhythms similar to payroll — predictable, time-critical, low-tolerance for errors. The system supports the workflow; HR's attention to detail in setup and ongoing monitoring is what keeps benefits clean. --- # Bin setup and warehouse classes in Business Central How bin codes, bin contents, bin types, and warehouse classes shape inventory placement and picking in Business Central. Source: https://www.solvingdynamics365.com/guides/bin-setup-and-warehouse-classes-in-bc Section: Business Central / Inventory & warehouse Published: 2026-05-01 Updated: 2026-08-25 A **bin** in Business Central is the lowest-level inventory storage unit — typically a physical shelf, pallet position, or rack location. Bin design is where most warehouse implementations get derailed: too few bins and you lose accuracy, too many and you create unmaintainable complexity. **Where bin setup lives.** - **Location card** — `Bin Mandatory` flag, default bins. - **Bins page** — the list of all bins at a location. Each bin has `Code`, `Description`, `Zone Code`, `Bin Type Code`, `Warehouse Class Code`, `Bin Ranking`, and capacity attributes. - **Bin Contents** — what's currently in each bin, by item, variant, and unit of measure. Populated automatically by warehouse postings. ## Bin naming conventions A common pattern is `ZONE-AISLE-RACK-LEVEL-POSITION` (e.g. `A-01-03-02-04`). The naming should sort naturally in pick walk order so worksheet sorts give pickers a sensible path. Don't use names with embedded special characters — many scanner workflows choke. ## Bin types Defined on the **Bin Type** page. A bin type ticks which warehouse flows the bin participates in: - **Receive** — receive zone for inbound. - **Ship** — ship zone for outbound. - **Put-away** — eligible as a put-away destination. - **Pick** — eligible as a pick source. - **Put-away + Pick** — most floor bins. - **QC** — quality control quarantine. A receive-only bin can't have stock picked from it directly; it must first be moved to a pick-eligible bin. ## Warehouse classes A **Warehouse Class** segregates inventory by storage requirement: ambient, refrigerated, frozen, hazmat, oversized. Each item carries a `Warehouse Class Code`; each bin carries one; the put-away logic only places an item into a compatible bin. This is how cold-chain compliance is enforced — frozen items physically cannot be placed in an ambient bin without overriding the warehouse class check. ## Bin ranking The `Bin Ranking` number on a bin (higher = preferred) influences put-away and pick suggestions: - **Put-away** prefers high-ranked bins (typically the pick face). - **Pick** prefers high-ranked bins (faster paths). Bin ranking is the most underused tuning knob in BC's warehouse module. Time invested ranking bins after the first few months of real picks pays back forever. ## Default bins per item On the **Item** card, you can set: - **Default bin** at a location. - **Bin Content** records that explicitly bind an item to specific bins with min/max quantities. Bin content with min/max enables the **Replenishment** workflow — moves are suggested when the pick face drops below minimum. ## Adjustment bins Each location has an `Adjustment Bin Code` on the location card. Quantity adjustments (positive/negative inventory adjustments) post against this bin to keep the bin contents balanced. Without an adjustment bin set, adjustment journals fail to post on a bin-mandatory location. ## Cross-dock bins Some operations cross-dock inbound deliveries straight to outbound shipments without storing them. Configure a cross-dock zone with `Cross-Dock Bin Type` and enable cross-dock on relevant items; BC will suggest cross-dock movement when an inbound matches an outbound demand. ## Bin capacity Optional but powerful — set `Maximum Cubage` and `Maximum Weight` on a bin; put-away logic skips bins that don't have room. Most implementations skip capacity tracking because cubage and weight data on items is rarely accurate. If your data is good, capacity-aware put-away dramatically reduces operator decisions. **Common pitfalls.** - **Over-segmentation.** Creating dozens of zones and bin types because they sound useful, then nobody understands the workflow. Start simple, layer complexity only when there's a problem to solve. - **Bin code chaos.** Inconsistent naming. Mixed length codes. Bin codes that don't sort in walk order. Worth fixing in cutover, very painful to fix after. - **Adjustment bin missing.** Posting fails with cryptic errors. Always set during location setup. - **Default bins forgotten on new items.** New items get added without default bins; put-away suggests random bins. Build item creation into a checklist with default bin assignment. - **No bin audit.** Periodic cycle counts ensure system bin content matches physical reality. Without that, the optimisation built on bin data is worthless. ## Bin redesign A bin layout designed at go-live rarely matches the optimal layout after 18 months of real operations. Building a "bin review" into the operations rhythm — quarterly or annually — keeps the warehouse efficient as product mix and volumes change. --- # Blocked items and customers in Business Central How block fields on items, customers, and vendors prevent transactions in Business Central — the three block levels, when each applies. Source: https://www.solvingdynamics365.com/guides/blocked-items-and-customers-in-business-central Section: Business Central / Sales & purchasing Published: 2026-05-01 Updated: 2026-08-25 Every operational dataset in Business Central — items, customers, vendors, resources — carries a **Blocked** field. The intent is simple: stop transactions against the record without deleting it. The execution is more nuanced than it first looks, and getting the block design wrong is one of the more common causes of "the system is preventing us from doing our job" support tickets. ## The three block levels on items The Item card has a `Blocked` boolean, but most teams discover only after a few months that there are actually three distinct block fields: - **Blocked** — stops everything: purchases, sales, transfers, production, journals. The item effectively vanishes from operations. - **Sales blocked** — stops outbound (sales orders, sales invoices, transfers to other locations on sales). - **Purchasing blocked** — stops inbound (purchase orders, purchase invoices). The split exists because real-world reasons to block are usually directional. A discontinued item shouldn't be purchased but the remaining stock still needs to be sold. A recalled item needs to stop selling but vendor returns and adjustments must continue. ## Customer blocks Customers have three values in the `Blocked` field: - **(blank)** — fully active. - **Ship** — new sales orders can be entered, but no shipping or invoicing. - **Invoice** — shipping is allowed, but no invoicing. - **All** — no new orders, no shipping, no invoicing. `Ship` is the credit-hold value most finance teams use — sales reps can still enter quotes and orders so commercial conversation continues, but warehouse won't release goods. ## Vendor blocks Vendors mirror customers: - **(blank)** — active. - **Payment** — invoices post but payments are blocked. - **All** — no new orders, no invoices, no payments. `Payment` is the most common — typically used while an invoice dispute is open: you want to keep posting expense recognition but withhold cash. ## Resources, locations, accounts Resources have a single `Blocked` boolean. G/L accounts have `Blocked` and `Direct posting`. Locations have `Use as in-transit`. Item charges have `Blocked`. The pattern is consistent: a field whose presence is detected by validation routines on document headers and lines. ## Where the check fires Blocks are validated on the document line at the moment the user enters the item or customer number, and again on posting. A blocked item entered before the block was applied stays on the line — Business Central does not retroactively scan open orders. This means **applying a block does not stop existing pipeline**, only new entries. Teams expecting an instant freeze are sometimes surprised. ## Credit-limit blocks vs hard blocks Customer `Blocked = Ship` and a credit limit warning are different mechanisms: - **Credit limit** — warns or hard-stops based on `Credit Limit (LCY)` vs `Balance + outstanding orders`. Configurable per company via `Credit Warnings` on Sales & Receivables Setup. - **Blocked** — explicit operational block, regardless of balance. Mature credit-control practice uses credit limits for routine over-limit situations and `Blocked` for unusual ones (disputes, suspected fraud, terminated relationships). ## Audit trail Changes to block fields are captured by `Change Log` if enabled on the table. For SOX-relevant environments, enable change log on Customer, Vendor, and Item tables and audit the trail monthly. ## Bulk operations Blocking 200 items at once is common during a discontinuation campaign. Options: - **Edit in Excel** via the Excel add-in. - **Configuration Package** import (less common for this use). - **Edit list** within the item list page itself (`Ctrl+Alt+F7`). There's no native scheduled block — automation requires a small AL extension or a Power Automate flow that updates records via the BC API. ## Permissions The right to set `Blocked` on a customer or vendor is usually restricted via permission sets — credit controllers can block customers; AP managers can block vendors. Don't leave these permissions on every accountant; a wrongful block is operationally expensive. **Common pitfalls.** - **Blocking on the wrong axis.** Setting `Blocked = All` on a customer when only credit-hold is intended; sales loses pipeline visibility. - **Forgetting open documents.** Applying a block doesn't clear pending shipments — they need separate handling. - **No release process.** Blocks accumulate; nobody owns un-blocking. Build a periodic review cadence. - **No reason captured.** The block field doesn't have a built-in reason. Most teams add a `Reason for Block` field via extension or use `Description 2` informally. A clean block strategy treats these fields as a controlled lifecycle, not an emergency switch. --- # BOM versioning and engineering change in Dynamics 365 Supply Chain How F&O handles BOM versioning, engineering change management, and the controlled evolution of product structures over time. Source: https://www.solvingdynamics365.com/guides/bom-versioning-and-engineering-change-in-f-and-o Section: Finance & SCM / Manufacturing Published: 2026-05-01 Updated: 2026-08-25 A manufactured product's [Bill of Materials](https://www.solvingdynamics365.com/glossary/bom) isn't static — components change, suppliers swap parts, design teams improve assemblies, regulations force substitutions, cost pressures drive material changes. Dynamics 365 Supply Chain Management handles this evolution through **BOM versioning** and **Engineering Change Management** — controlling who can change what, when changes apply, and how downstream operations honour the new design. ## BOM versions Each finished item can have multiple **BOM versions** — distinct BOM records for the same finished good, each with a validity window: - **From date** — when this version becomes effective. - **To date** — when this version is retired. - **Site** — different versions can apply per site (US production uses one BOM, EU production uses another). - **Status** — Approved, Active, Discontinued. When a production order is created for a date, the engine selects the BOM version valid for that date. Changing the design means activating a new version with a future effective date; production orders before the date use the old, after use the new. The transition is automatic. ## Multi-level BOMs Most real products are assembled from sub-assemblies, which have their own BOMs. Each level is versioned independently. A change to a sub-assembly's BOM cascades up — every parent BOM that references the sub-assembly is affected (though the engine resolves which version to use based on the date hierarchy). ## Routing versions Same model applies to **routings**. The same finished item can have multiple routing versions over time as operations change — new equipment, faster setup, restructured workflow. ## Engineering Change Management (ECM) Beyond simple versioning, **Engineering Change Management** adds formal control of the change process. Used in regulated, engineering-heavy, or PLM-integrated environments. The model: - **Engineering Change Request (ECR)** — someone proposes a change. Captured as a request with description, justification, scope (which products affected), priority. - **Review and approval** — workflow routes the ECR through stakeholders (design, manufacturing, procurement, quality, regulatory) for input and approval. - **Engineering Change Order (ECO)** — once approved, the ECR becomes an ECO that authorises specific changes to specific BOMs, routings, items, or formulas. - **Implementation** — the ECO drives the actual changes: new BOM versions created, items updated, routings revised, with effective dates aligning across the affected scope. - **Audit trail** — every step of the ECR/ECO lifecycle is logged with who, when, what. For pharma, medical devices, aerospace, automotive, and regulated industries, ECM is essential. For consumer goods or simpler manufacturing, basic BOM versioning may suffice. ## Item versioning Beyond BOMs, individual **items** can also be versioned in F&O — though more loosely. The item master holds the current value of each field; historical changes log to the change history rather than producing parallel item records. For "this item evolved" semantics, customers often create a new item rather than evolve the existing one. ## Integration with PLM Larger manufacturers run a dedicated **Product Lifecycle Management (PLM)** system — PTC Windchill, Siemens Teamcenter, Autodesk Fusion 360 Manage, Dassault Enovia — for design, CAD, document management, regulatory submission. PLM is the source of truth for design; F&O receives BOMs from PLM via integration. The pattern: - Design happens in PLM. - Approved designs export to F&O. - F&O production execution uses the released BOM version. Integrations exist for major PLM systems; the exchange typically covers BOMs, item masters, and engineering changes. ## Co-products / by-products and versioning Process manufacturing's co-product and by-product structures are versioned alongside formulas. A formula version captures the proportional ingredients, yields, and co/by-products as a unit; activating a new version changes them all together. **Common pitfalls.** - **Skipping versioning** — editing the same BOM repeatedly loses history. Production orders running with "current" BOM produce inconsistent results when the BOM changed mid-order. - **Future-dated versions without communicating** — the floor doesn't know the change is coming; surprises at the cutover date. - **ECM bypass for "quick" changes** — informal changes outside the ECM process undermine the audit trail and regulatory compliance. ## Operational reality Version discipline scales with manufacturing maturity. Smaller operations get by with basic BOM versions; complex products in regulated industries need full ECM. Match the rigour to the requirement. --- # Bring-your-own-storage patterns for Dataverse What 'BYOS' actually means in the Dataverse world — customer-managed keys, your own data lake for Synapse Link, SharePoint and Azure Blob for files. Source: https://www.solvingdynamics365.com/guides/integrating-dataverse-with-bring-your-own-storage Section: Integrations / Data movement Published: 2026-09-02 "Bring your own storage" gets asked for in Dataverse projects for three unrelated reasons that happen to share a phrase. Someone wants the storage bill to go down. Someone wants the data to sit in an Azure subscription they control. Someone in compliance wants to hold the encryption keys. Dataverse does not offer a single switch that moves its database into your storage account, and anyone promising that is describing something else. What it offers is a set of specific mechanisms, each answering one of those three needs, and it pays to match the mechanism to the need before anyone buys a storage account. ## What Dataverse will not do Dataverse's transactional database is Microsoft-managed. You cannot point it at your own Azure SQL or storage account, and you cannot run it on-premises. Its capacity model, described in [Dataverse storage types explained](https://www.solvingdynamics365.com/guides/dataverse-storage-types-explained), splits usage into Database, File, and Log, and all three are billed as Dataverse capacity regardless of what you would prefer. The patterns below work around the edges of that model; none of them replace it. ## Need 1: control of encryption keys **Customer-managed keys (CMK).** Dataverse environments can be encrypted with a key you hold in Azure Key Vault rather than a Microsoft-managed key. Microsoft still stores the data; you control the key, can rotate it, and can revoke it, which renders the environment inaccessible until access is restored. This is the compliance answer for organisations whose policy requires key custody. It applies to Managed Environments, needs an enterprise policy in Azure, and carries operational responsibility: lose the key, lose the environment. It does not reduce cost or move data. CMK is not BYOS in the literal sense, but it is often what the compliance requirement behind a BYOS request is actually asking for. Confirm that before going further. See [Dynamics 365 data protection and compliance](https://www.solvingdynamics365.com/guides/dynamics-365-data-protection-and-compliance). ## Need 2: data in a subscription you control **Synapse Link to your own data lake.** The closest thing to true bring-your-own-storage. Dataverse continuously writes a copy of selected tables to an ADLS Gen2 account in your subscription, in your region, under your access controls. It is a copy for analytics and integration, not the operational database, and Dataverse keeps running from its own storage. But it satisfies the requirement that a full, current copy of the data lives in storage you own and can retain, secure, and hand to any tool you like. See [Azure Synapse Link for Dataverse](https://www.solvingdynamics365.com/guides/azure-synapse-link-for-dataverse). The Fabric variant, Link to Fabric, keeps the data in Dataverse-managed storage and exposes it through OneLake without a copy. It is simpler but does not put anything in your subscription; if that was the point, use Synapse Link. **Long-term retention.** Dataverse's long-term data retention feature moves inactive rows to a cheaper Microsoft-managed tier inside Dataverse. It is about cost, not custody, and belongs under the next heading. ## Need 3: lower storage cost File storage is where Dataverse bills hurt: attachments, images, and documents accumulate and are charged as File capacity. The patterns that offload them: **SharePoint document management.** The standard integration stores documents in SharePoint document libraries linked to Dataverse records, using Microsoft 365 storage rather than Dataverse File capacity. It is first-party, mature, and the default answer for documents on accounts, cases, and opportunities. See [SharePoint document management for Dynamics 365](https://www.solvingdynamics365.com/guides/sharepoint-document-management-for-dynamics-365). It does not cover note attachments or email attachments automatically. **Attachment offload to Azure Blob or SharePoint.** Note and email attachments can be moved out of Dataverse to Azure Blob storage or SharePoint by an attachment management solution, of which Microsoft has published one and several ISVs sell others, or by a custom plug-in that intercepts the attachment on create and stores a link. This is the true BYOS for files: the bytes live in your storage account, Dataverse holds a pointer. The catch is that everything that expects the attachment to be in Dataverse (exports, some mobile clients, some reports) needs to understand the pointer. **Long-term data retention** for row data: policies move old cases, activities, and custom-table rows into a retained store that is queryable but cheaper. Rows come back read-only through a separate path. It is the right tool for compliance retention of closed records that nobody edits. **Archiving to your own store.** Export old rows through Synapse Link or a scheduled pipeline into your lake, then [bulk delete](https://www.solvingdynamics365.com/guides/bulk-delete-jobs-in-dataverse) them from Dataverse. Cheapest, fully in your control, and the rows are gone from the application. Suitable when the business agrees that old data lives in reports, not in forms. ## Choosing Key custody: CMK. A copy in your subscription: Synapse Link. Documents: SharePoint integration. Attachments driving File capacity: an offload solution to Blob or SharePoint. Old rows driving Database capacity: long-term retention if they must stay queryable in place, archive-and-delete if they need not. ## What breaks in practice CMK operations that were not rehearsed, so a key rotation locks people out. Synapse Link storage accounts created without lifecycle policies, so the lake costs more than the Dataverse capacity it was meant to offset. Attachment offload solutions that break a downstream integration expecting real attachments. Archive-and-delete run without confirming that a report somewhere reads those rows. ## Stability verdict Every mechanism here is supported and stable. The instability is expectation: a BYOS request usually arrives as one sentence and needs three mechanisms to satisfy properly, or one mechanism once the actual requirement is pinned down. Pin it down first. --- # Budget control in Dynamics 365 Finance How F&O's budget control enforces budgets at transaction posting — budget control rules, document overrides, the BC vs budgeting distinction. Source: https://www.solvingdynamics365.com/guides/budget-control-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 Updated: 2026-08-25 **Budget control** in Dynamics 365 Finance enforces budget limits at transaction time — preventing or warning when a posting would exceed the approved budget for a dimension combination. It's distinct from **budgeting** (the planning process); budget control is the runtime enforcement. **The two concepts.** - **Budgeting** — the process of preparing budget figures: budget plans, budget revisions, approved budgets. - **Budget control** — the runtime mechanism that checks transactions against the budget at posting. A company can budget without budget control (the budget exists for reporting and variance analysis only). A company cannot budget-control without first having a budget. ## Why use budget control Public sector and government environments typically have legal requirements to not exceed appropriated budgets. Some private companies use it for cost discipline on capital projects, R&D programs, or shared service charge-backs. Most private companies do *not* use budget control — they review variance after the fact rather than blocking transactions in real time. ## Budget control configuration The setup includes: - **Budget control configuration parameters** — turn it on, define the start date. - **Budget cycle time spans** — the budget period (annual, quarterly, monthly). - **Budget models** — separate models for original, revised, transferred-in budgets. - **Budget classes** — what document types are budget-controlled (POs, vendor invoices, expense reports). - **Budget control rule** — define the allowable threshold (100% strict, 110% soft warn, etc.). - **Available budget formula** — what counts toward "used": confirmed orders, draft requisitions, received goods. ## Available budget formula The critical concept. When checking whether a $1,000 PO can be posted, the system computes available budget: - Original budget – preliminary commitments (requisitions) – firm commitments (POs) – actuals (invoices) – reserved (encumbrances) ± transfers. Each component is configurable. Different organisations define "available" differently: some count requisitions, some don't; some count goods receipts as actuals, some only invoices. ## Posting validation When a transaction is about to post: 1. Compute the budget control values per dimension combination affected. 2. Compute available budget. 3. Compare against the rule: - **Within budget** → post normally. - **Over the warning threshold** → display warning; user can still post. - **Over the strict threshold** → block posting; user must adjust or override. ## Override Authorised users can override block decisions with reasons captured. Override is audit-trail-tracked; override patterns reveal where budgets are systematically wrong. ## Dimension control Budget control operates at the **financial dimension** level: by department, by project, by cost centre, by program. The granularity determines whether you block at the program level (sum across multiple projects) or at the individual project level. Common pattern: enforce at the program level; report at the project level. ## The encumbrance pattern Public sector budget control often involves **encumbrances** — when a PO is approved, the budget is reserved (encumbered) even though no money has yet been spent. When goods are received, the encumbrance reduces and an actual increases. F&O supports this lifecycle natively for public sector deployments. **Budget planning vs operational budget.** - **Budget planning** — the multi-step process to create the budget: scenarios, what-if analysis, workflow approvals. - **Operational budget** — the approved budget that runtime budget control checks against. The output of budget planning is the operational budget; budget control reads only the operational budget. ## Budget revisions Mid-year budget changes (additional appropriations, transfers between programs) are recorded as **budget revisions**. Each revision is tracked; reporting shows original budget vs revised budget vs actuals. For public sector, revision audit trail is a compliance requirement. ## Budget transfers Moving budget from one dimension combination to another: - Source dimension loses budget. - Destination dimension gains budget. - Transfer document records the movement. Often subject to workflow approval — transferring funds between programs is a governance event. **Common pitfalls.** - **Budget control before stable budget process.** Implementing budget control without a clean budget creation process → control rejecting transactions because the budget is wrong. Sequence: stabilise budgeting, then add control. - **Too-granular dimensions.** Budget control at the lowest dimension level → many blocks for items that should aggregate at higher level. Use program/department, not specific G/L account. - **Available budget formula wrong.** Counting requisitions as committed when they shouldn't be → premature blocks. Adjust per policy. - **No override discipline.** Users override routinely without reasons; controls erode. - **Performance impact.** Budget control checks add posting overhead; for high-volume transactional environments, tune carefully. ## Private sector alternatives Most private companies skip budget control in favour of: - **Approval workflows on POs and invoices** — humans approve based on budget visibility but the system doesn't enforce. - **Periodic variance reports** — monthly review reveals over-runs after the fact. This soft approach is faster and less rigid; it requires managerial discipline rather than system enforcement. ## Public sector reality Government finance teams have stringent budget enforcement legal requirements. Budget control is the only practical answer; the implementation overhead is justified by the legal mandate. --- # Budget management for Dynamics 365 implementations How to budget and manage costs for a Dynamics 365 project — cost categories, tracking discipline, change control, and the patterns that prevent budget overruns. Source: https://www.solvingdynamics365.com/guides/budget-management-for-dynamics-365-projects Section: Implementation / Project execution Published: 2026-05-01 Updated: 2026-08-25 Dynamics 365 implementations are significant investments — typical mid-market projects run $500K to $5M; enterprise projects multiples of that. Managing the budget through the project requires discipline: tracking actuals, controlling change, escalating concerns. Done well, projects come in close to plan; done poorly, overruns compound silently. **Cost categories.** - **Software licences** — Dynamics 365 user licences, capacity add-ons. - **Partner / SI fees** — implementation labour. - **Internal labour** — your team's time, often underestimated. - **Integrations** — connector development, third-party tools. - **Data migration** — extraction, cleansing, loading. - **Training** — change management, end-user training. - **Travel and expenses** — particularly for global projects. - **Infrastructure** — Azure consumption, additional services. - **Contingency** — buffer for unknowns. Each deserves explicit budget; missing categories cause overruns. **Total cost of ownership (TCO) vs implementation cost.** - **Implementation cost** — one-time. - **Ongoing cost** — subscriptions, support, evolution. TCO over 5 years is typically 3-5x implementation cost; budgeting one without the other misleads. **Budget development.** - **Bottom-up estimate** — sum components. - **Top-down comparison** — benchmark against similar projects. - **Triangulation** — both approaches should converge. If bottom-up is 30% above top-down, scrutinise. **Contingency.** - **10-15%** for well-defined projects. - **20-30%** for complex / first-time efforts. - **Higher** for high-uncertainty (greenfield, untested integrations). Contingency is not slush fund; it's reserve for known-unknowns. **Phases and gating.** - **Discovery** — Phase 1 spend. - **Design** — Phase 2. - **Build / configure** — Phase 3. - **Test** — Phase 4. - **Deploy** — Phase 5. - **Hypercare** — Phase 6. Each phase has its budget; gate review confirms readiness for next phase. **Tracking.** - **Budget vs actual** by category, by phase. - **Earned value management** for complex projects. - **Trend** over time — burn rate. - **Forecast to complete** — projected final cost. Tracking weekly during build; monthly at steering. **Burn rate.** - **Actual spend per week / month.** - **Compared to plan.** - **Compared to remaining work.** Burn rate higher than work completion ratio means trouble. **Forecast to complete.** - **Spent to date + estimated remaining.** - **Projected final cost.** - **Variance to budget.** Forecast updated regularly; growing variance is leading indicator. ## Change control Critical for budget integrity: - **Change requests** documented. - **Cost impact estimated.** - **Approval at appropriate level.** - **Budget updated.** Without change control, scope creeps in for "free." **Common overrun causes.** - **Scope creep** — incremental additions accumulate. - **Data migration complexity** — usually worse than expected. - **Integration challenges** — external systems harder. - **Customisation over-engineering** — partner builds more than needed. - **Re-work** — defects requiring fix. - **Stakeholder unavailability** — delays cost. - **Performance issues** — late-discovered, expensive. Each manageable if anticipated; expensive if surprise. **Vendor cost management.** - **Time and materials** — track hours per task. - **Fixed price** — track delivery against scope. - **Hybrid** — clear distinction between. For T&M, watch hours by individual; sudden spikes warrant questioning. **Internal cost tracking.** - **Time tracking** for project team. - **Allocate to project codes.** - **Aggregate weekly.** Many internal costs uncaptured; budget appears better than reality. **Hidden costs.** - **Productivity hit during transition** — measurable. - **Training time** — end-user days off normal duties. - **Cutover support overtime.** - **Post-go-live tweaks.** Budget for these explicitly. **Steering review of budget.** - **Status** — actual, forecast, variance. - **Concerns** — emerging cost pressure. - **Decisions** — scope trade-offs. Budget visibility prevents end-of-project shock. **Cost optimisation strategies.** - **Phasing** — reduce scope in initial phase. - **Standard over custom** — minimise development. - **Reuse** — leverage existing components. - **Internal vs partner** — some work cheaper internally. - **Off-shore** — for some labour. Each has trade-offs; not always cheaper for cheap's sake. **Common pitfalls.** - **No internal cost capture.** Project looks cheaper than reality. - **Missing categories.** Training, hypercare overlooked at plan. - **Insufficient contingency.** First surprise blows budget. - **No change control.** Scope additions invisible until total is reviewed. - **Late forecasting.** Projection delayed until late; correction harder. - **Vendor invoices not reconciled.** Overcharges or duplicate billings. - **Capitalisation confusion.** What's capex vs opex unclear. **Capitalisation considerations.** - **Software licences** — often capitalised. - **Implementation labour** — sometimes capitalisable. - **Training** — typically opex. Accounting team should advise; treatment varies by jurisdiction and accounting standard. ## ROI tracking Beyond budget management: - **Expected benefits** — defined upfront. - **Tracked post-go-live.** - **ROI calculation** — benefits vs total cost. Projects without ROI tracking lose accountability. ## Strategic positioning Budget management is one of the project disciplines that distinguishes successful from failed implementations. The discipline isn't optional; the scale of investment demands it. For project sponsors: - Set budget realistically with proper categories. - Build adequate contingency. - Track actively, not just at quarter-end. - Use change control. - Surface concerns early. Cost overruns are usually predictable from week 8 if anyone's looking. The teams that look catch issues; the teams that don't get surprised. The cost of attention is small; the cost of overrun is material — both financially and reputationally. --- # Budget planning in Dynamics 365 Finance How F&O's budget planning module orchestrates the annual budget cycle — budget plans, scenarios, stages, workflow, and the integration with Excel and Power BI. Source: https://www.solvingdynamics365.com/guides/budget-planning-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 Updated: 2026-08-25 The annual budget is one of the largest finance projects most organisations run — months of cross-functional input, multiple iterations, executive review, board approval. **Budget Planning** in F&O is the orchestration module that supports this process: defining the structure, gathering input from contributors, consolidating drafts, routing through stages, and producing the approved operational budget. ## Budget vs budget plan vs budget control Three distinct concepts: - **Budget plan** — the planning process: drafts, revisions, scenarios. - **Budget** — the approved output; what becomes the operational budget. - **Budget control** — runtime enforcement (separate topic). Budget planning ends when an approved plan is transferred to operational budget. **Architecture.** - **Budget planning process** — defines a budget cycle. - **Stages** — sequential steps (departmental input → finance review → executive review → board approval). - **Scenarios** — different versions (base, conservative, growth). - **Layouts** — templates defining the structure shown to contributors. - **Worksheets** — the Excel-like surface where amounts are entered. **The budget cycle.** 1. **Setup** — define stages, scenarios, layouts, contributors. 2. **Initiation** — create the budget plan; pre-populate from prior year + adjustments. 3. **Departmental input** — each manager enters their draft. 4. **Finance review** — consolidates; identifies issues. 5. **Executive review** — challenge, refine. 6. **Board approval.** 7. **Transfer to operational budget** — approved plan becomes the budget. Each stage has workflow approval; the system tracks who did what when. ## Layouts Define what contributors see: - **Rows** — accounts, dimensions, or hybrid. - **Columns** — periods (months, quarters), prior actuals, prior budget, variance. - **Calculation rules** — totals, percentages, ratios. A layout for a sales manager differs from one for a CFO; tailoring matters. ## Scenarios Parallel versions: - **Base case.** - **Stretch / growth.** - **Conservative.** - **Re-forecast** — mid-year revision. Contributors can fill multiple scenarios; comparison highlights sensitivity. ## Excel integration A signature feature: - Contributors can export their budget worksheet to Excel. - Edit in Excel — formulas, charts, modelling. - Import back to F&O. For executives more fluent in Excel than F&O, this is essential. The integration maintains data integrity through structured cells. ## Stage workflow Each stage has: - **Inputs** — what contributors can edit. - **Outputs** — what's locked when stage completes. - **Approvers.** - **Routing rules.** Movement between stages is controlled — finance can't bypass departmental input; executives can't override without protocol. **Allocations within budget planning.** - Top-down allocation — exec sets total; cascades to departments by formula. - Bottom-up roll-up — departments enter; aggregates to total. Many budgets combine both; top-down envelope with bottom-up detail. **Forecast vs budget.** - **Budget** — annual baseline. - **Forecast** — periodic updates reflecting current reality. Many organisations maintain a rolling forecast updated quarterly; F&O supports both as separate plans or as scenarios. **Power BI for budget reporting.** - Budget data flows to Power BI. - Side-by-side comparison with actuals. - Variance analysis dashboards. Standard reports + custom Power BI is the pattern. ## Driver-based budgeting Modern approach where budget is built from operational drivers: - Headcount × salary per role = total compensation. - Volume × unit price = revenue. - Volume × cost per unit = variable cost. Driver tables stored alongside budget; changes to drivers propagate to budget lines automatically. **Zero-based vs incremental.** - **Incremental** — last year + X% adjustment. - **Zero-based** — every line justified from zero. Zero-based is more rigorous, more effort. F&O supports both; the methodology is organisational choice. **Common pitfalls.** - **Budget plan never finalised.** Drafts iterate; stage never closes; operational budget delayed. - **Excel imports / exports out of sync.** Two versions of truth; reconciliation hell. - **Approval workflow bypassed.** Approvers sign for plans they didn't review; governance weak. - **No variance analysis.** Budget exists; nobody compares to actuals; budget becomes shelfware. - **Driver assumptions stale.** Driver-based model uses old volumes; budget doesn't reflect current trajectory. **Operational rhythm.** - **Setup** — pre-budget cycle definition. - **Cycle execution** — typically 8–12 weeks. - **Approved budget locked** — start of new fiscal year. - **Monthly variance review.** - **Quarterly re-forecast** (often). ## Strategic positioning Budget planning is one of finance's highest-stakes processes. F&O's module is full-featured but complex; investing in setup pays back across many budget cycles. For organisations with simpler needs (small businesses, single entity), the module may be overkill — Excel-based budgeting works fine. For enterprises with multiple legal entities, complex hierarchies, and demanding stakeholders, F&O Budget Planning is a real asset. The success of any budget process is more about discipline than software — clear timelines, accountable contributors, transparent decisions, post-cycle retrospectives. The tool supports the rhythm; the rhythm must come from leadership. --- # Budgets in Business Central How Business Central handles GL budgets — budget names, dimensions, Excel import, comparison to actuals, and the limits worth knowing. Source: https://www.solvingdynamics365.com/guides/budgets-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 Updated: 2026-08-25 Business Central's budget module is the simplest practical financial planning tool — it holds budgeted amounts per GL account, per dimension, per period, with comparison to actuals and Excel-friendly editing. It is not a CPM platform, but it covers the planning needs of most SMBs that don't need driver-based modelling or scenario layering. ## Budget names Each budget lives under a **G/L budget name** — a label that scopes a complete budget set. The pattern is to create budget names per scenario or version: *FY2026 Budget*, *FY2026 Q1 Reforecast*, *FY2027 Annual Plan*, *FY2026 Optimistic*. Reports filter by budget name to compare versions side by side. ## Budget structure Inside a budget name, entries are *G/L Budget Entries* keyed by: GL account, posting date, and dimension values. Each entry holds an amount. A budget can be granular (every account-period-dimension combination has a separate entry) or aggregated (single annual values per account). The system happily handles both. ## Dimensions Up to four budget dimensions per budget name — typically Department, Cost Centre, Project, and one more relevant axis. Filter, slice, and roll up the budget by any combination, identical to how dimensions work on actual postings. ## Excel integration The most-loved feature. *Export to Excel* downloads the budget as a structured spreadsheet — accounts down, periods across, dimensions as additional axes. Edit in Excel, save, and *Import from Excel* reads it back, replacing or merging the budget entries. This is how budgets actually get prepared: controllers send the Excel to budget owners; budget owners fill in their column; controllers consolidate the responses and import the merged result. Painful to do natively in BC; smooth in Excel. ## Comparison to actuals **Account schedules** and **financial reports** can run with budget columns alongside actual columns and compute variance and variance %. Filter by budget name to compare scenarios. Dashboards in Power BI can do the same. ## Cash flow integration A budget feeds into the cash flow forecast as forward expense projection, contributing operating outflows beyond the immediate AP backlog. This is the most direct benefit of keeping a current GL budget. **Limits.** - **No version controls / approval workflow** beyond manual discipline. Customers needing formal budget approval and lifecycle either use Power Automate + a managed Excel template, or move to a dedicated CPM tool. - **No driver-based modelling.** The budget holds *what* you plan to spend, not *why* — there's no "headcount × salary × benefit %" formula structure. Build that in Excel before importing. - **No scenario sensitivity.** Multiple budget names compare side by side but the system doesn't model "if revenue is 10% lower". **Best practice.** - One budget name per official plan version. Don't pile multiple scenarios into the same name. - Dimension consistency between budget and actuals — if Department is on actuals, Department must be on the budget, or variance reports drop entries. - Refresh budgets at least quarterly via reforecasts. Annual-only budgets quickly disconnect from reality. ## When to outgrow Budgets that demand workflow, driver-based modelling, or scenarios → use a dedicated planning tool (Workday Adaptive, Anaplan, Vena, Solver) integrated to BC. --- # Build vs buy in the Dynamics 365 ecosystem When to customise Dynamics 365 with AL / X++ / Power Platform vs buy an AppSource solution — the trade-offs, the framework, the practical guidance. Source: https://www.solvingdynamics365.com/guides/build-vs-buy-in-the-dynamics-365-ecosystem Section: Implementation / Methodology Published: 2026-05-11 Updated: 2026-08-25 For every gap between out-of-the-box Dynamics 365 and what the business needs, the decision is the same: **build** (customise via AL, X++, Power Platform, or plug-ins) or **buy** (install an AppSource ISV solution). The decision compounds — across hundreds of small choices, the cumulative direction shapes the implementation's complexity, cost, and longevity. ## The default direction in modern Dynamics 365 implementations Microsoft's **Success by Design** methodology explicitly emphasises **fit to standard** as the first option, and customisation only when standard truly doesn't fit. Many veteran consultants apply a more general principle: prefer *configuration* over *customisation*, prefer *bought* over *built*, prefer *Power Platform extensions* over *core code changes*. The reason isn't ideology — it's that customisation cost compounds across upgrades and team turnover, while configuration and bought solutions usually don't. **The build case.** Build (customise / extend) when: - **The requirement is genuinely unique** — no commercial solution exists that addresses the specific business need. - **The requirement is strategic** — the differentiation is the business value; sharing functionality with competitors via a common ISV defeats the purpose. - **Cost-benefit clearly favours custom** — the AppSource alternative is more expensive over the lifetime than building and maintaining custom code. - **Standard plus light customisation suffices** — small AL extension adding a few fields and a custom report is cheaper than a heavyweight ISV. - **You have the skills and capacity** — pro-developer team in place; ALM discipline; willingness to maintain. **The buy case.** Buy (install an ISV solution) when: - **The requirement is common** — many companies need it, an ISV has commodified it (country localisations, AP automation, EDI, banking integrations). - **The complexity exceeds in-house capacity** — building it would consume significant team time that isn't available. - **The vendor maintains it** — release-wave compatibility, regulatory updates, ongoing support are someone else's job. - **Total cost of ownership favours buying** — per-user license fees over the system's life are less than the build cost plus ongoing maintenance. - **Time-to-value matters** — bought solutions deploy in weeks; built solutions take months. **The decision framework.** For each gap: 1. **Is there a commercial ISV solution?** Search AppSource. List candidates. 2. **What's the gap between the ISV's coverage and your needs?** Often 80–95%. The remaining gap may be fillable with light customisation on top of the ISV. 3. **What's the build cost?** Realistic estimate: design, development, testing, ALM setup, ongoing maintenance for the system's life. 4. **What's the buy cost?** Per-user-per-month licences across affected users, multi-year horizon. Plus implementation cost (the ISV may charge for setup). 5. **What's the risk of building?** Will it break at the next release wave? Are there compliance or regulatory dimensions only the vendor can keep current? 6. **What's the risk of buying?** Vendor lock-in? Vendor going out of business? Vendor not keeping pace with platform changes? The honest answer to these often points clearly one way. ## The hybrid pattern Most mature implementations are *both* — many ISV solutions in the stack + custom extensions for the genuinely unique work. The mix: - **ISV** for country localisations, EDI, AP automation, e-commerce connectors, banking, document capture, complex pricing engines. - **Custom AL / X++ / Power Platform** for the company-specific business logic, integrations to internal systems, bespoke UI tweaks. **Common patterns.** - **Country expansion** — when entering a new country, buy the country localisation. Don't build it. - **AP automation** — buy. The category is mature; building it from scratch produces inferior outcomes. - **EDI** — buy. Same reason. - **Industry vertical solution** — buy if a credible one exists; the depth ISVs have can't be replicated quickly. - **Strategic customer-facing differentiation** — build. This is your business. - **Internal workflow tweaks** — build with Power Platform; small, contained, low-risk. **Anti-patterns.** - **Building what you should buy because in-house feels cheaper.** Doesn't account for maintenance cost over years. - **Buying what you should build because outsourcing feels safer.** ISV solutions that don't fit produce frustration; you customise the ISV's customisation, and now you have *two* maintenance problems. - **Buying multiple overlapping ISVs.** One ISV for document capture, another for OCR, a third for approval workflow. Overlaps confuse users and complicate maintenance. - **Custom code that should have been Power Platform.** Old AL/X++ patterns for things Power Automate flows could do trivially. ## Operational reality The build-vs-buy decision is iterative — revisit it as the platform evolves. What had to be built five years ago may now be available as an ISV. What was bought from a vendor that's now dying may need to come back in-house. Stay engaged with the ecosystem. ### Frequently asked questions **What is the default direction in modern Dynamics 365 projects?** Fit to standard first, then configuration over customisation, bought over built, and Power Platform extensions over core code changes. Customisation cost compounds across release waves and team turnover; configuration and bought solutions mostly do not. **When should I build rather than buy?** When the requirement is genuinely unique or strategically differentiating, when a light AL or Power Platform extension is cheaper than a heavyweight ISV, or when lifetime licence fees for an AppSource app exceed the cost of building and maintaining code — and you have the developers and ALM discipline to maintain it. **What should almost always be bought?** Country localisations, AP automation, EDI, banking integrations, document capture, e-commerce connectors, and credible industry vertical solutions. These categories are commoditised and the vendor carries the regulatory and release-wave maintenance. **What is the worst anti-pattern?** Customising an ISV that does not quite fit — now you maintain the ISV's customisation and your own. Close behind: overlapping ISVs for document capture, OCR, and approvals, and custom AL or X++ for things a Power Automate flow does trivially. --- # Building agents with Copilot Studio How to design Copilot Studio agents — topics vs generative answers, knowledge grounding, actions, multi-turn dialogs, and operational patterns. Source: https://www.solvingdynamics365.com/guides/building-agents-with-copilot-studio Section: Power Platform / Copilot & AI Published: 2026-05-01 Updated: 2026-08-25 Building a useful Copilot Studio [agent](https://www.solvingdynamics365.com/glossary/agent) is straightforward in mechanics and demanding in discipline. The platform is generous; the design choices around it decide whether the agent is a hit or a forgotten experiment. ## Decide what the agent is for Before opening Copilot Studio, write down one sentence: "This agent helps [audience] do [task] by [capability]." If you can't write that sentence cleanly, the agent will sprawl. The good ones are narrow. ## Topics vs generative answers Two complementary mechanisms: - **Topics** are structured conversation paths — named triggers, branching nodes, prompts, variable-setting, conditional branching, calls to actions. Topics are deterministic: given input X, do exactly Y. The right pattern for **critical flows** ("reset my password", "open a ticket", "check my order status") where you need predictable behaviour, hand-off paths, and audit. - **Generative answers** use the LLM to synthesise responses from connected **knowledge sources** (SharePoint, websites, documents, Dataverse). The right pattern for **the long tail** of "how do I" questions where authoring an explicit topic for each variation would be infeasible. A well-designed agent has 10–30 topics covering critical flows and generative answers picking up the rest. **Knowledge sources.** - **SharePoint sites** — index your internal documentation, knowledge base, policy docs. - **Public websites** — point at a public domain for indexed retrieval. - **Dataverse tables** — answer questions grounded in your CRM data. - **File uploads** — for static reference content. - **External services** — through custom connectors. Citations link generative answers back to the source, so users can verify and audit can review. ## Actions Actions let the agent *do* things, not just *answer*. Built-in actions can call Power Automate flows, REST APIs, Dataverse operations, or third-party connectors. The agent decides when to call an action based on the conversation and the action's description, so write action names and descriptions clearly — they're how the LLM matches user intent to capability. ## Multi-turn dialogs Topics support multi-turn dialogs with variables, conditional branches, and user clarifications. When the agent needs information before acting (e.g. "I'll open a case; what's your contact email?"), the dialog gathers it cleanly with validation and fallbacks. ## Hand-off When the agent can't help, hand off gracefully. Configure escalation to a human agent through Omnichannel for Customer Service, or to a team via Teams, or to email — whichever fits the channel. ## Channels A single agent publishes to Teams, the web, Power Pages, WhatsApp, SMS, Facebook Messenger, Omnichannel for Customer Service. Channel-specific tweaks (e.g. card layouts for adaptive-card-capable channels) handle the variation. ## Testing The Copilot Studio designer includes a test pane with conversation playback and an issue tracker. Build a regression test set — known good prompts and their expected behaviour — and re-run before publishing. ## Telemetry Every conversation is logged with topic triggers, action calls, knowledge hits, and outcomes. Use the analytics to identify topics that aren't triggering when they should, generative answers that lack source coverage, and topics that escalate too often. ## Governance Microsoft Purview integrates for content policies, sensitive-data detection, and DLP. Multi-environment ALM (dev → test → prod) is supported through solutions. ## Operational reality Ship a small agent. Measure adoption and resolution rate. Iterate weekly for the first month. Grow the topic and knowledge surface based on actual user prompts, not imagined ones. --- # Bulk delete jobs in Dataverse How Dataverse's bulk delete handles mass record cleanup — scheduling, filters, retention policies, and the operational discipline around storage management. Source: https://www.solvingdynamics365.com/guides/bulk-delete-jobs-in-dataverse Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Updated: 2026-08-25 Dataverse storage is finite and meaningful — billed per GB above the licence-included allocation. Over time, environments accumulate audit logs, plug-in trace records, completed workflow logs, expired records, test data, old emails. **Bulk delete** is the platform's mechanism for systematic clean-up, configured as scheduled jobs that retire data based on filter criteria. ## The model A **bulk delete job** specifies: - **Target table** — which Dataverse table to delete from. - **Filter (FetchXML)** — which rows match. - **Schedule** — run once or recurring (daily, weekly, monthly). - **Notification** — email when complete. When the job runs, the system: 1. Identifies rows matching the filter. 2. Deletes them in batches. 3. Cascades according to relationship rules (related child records may delete too). 4. Logs progress. 5. Reports completion with row count. **Common use cases.** - **Audit history retention.** Audit records grow indefinitely without cleanup. A monthly bulk delete of audit older than 24 months keeps storage bounded while preserving meaningful history. - **Plug-in trace logs.** Trace logs are diagnostic; they should be enabled for debugging and disabled or pruned aggressively otherwise. A weekly bulk delete of logs older than 30 days is common. - **Workflow log cleanup.** Completed workflow / Power Automate run logs accumulate. Configurable retention based on success / failure status. - **Test data.** Sandboxes accumulate test customers, opportunities, leads created during UAT. A "delete test records" job tagged by an attribute (e.g. `IsTestData = Yes`) clears them. - **Email retention.** Tracked emails in CRM are storage-heavy. A bulk delete of completed emails older than a configurable period (1–3 years typical) controls storage growth. - **Activity cleanup.** Old completed tasks, phone calls, appointments — historical but typically not actively used. Periodic cleanup. - **Closed cases with no activity.** Closed cases over 5 years old (depending on retention policy) can be archived or deleted. ## Cascade behaviour Each Dataverse relationship has a delete-cascade rule: - **Cascade** — deleting the parent cascades to children (e.g. delete the opportunity, all its activities go too). - **Restrict** — refuses to delete if children exist. - **Remove link** — deletes the parent, orphans children (sets the lookup to null). - **Cascade active only** — cascades only to children in an active state. Configure carefully; aggressive cascade can produce data loss surprises. ## Performance Bulk delete is *system-friendly* — runs in batches at a configurable rate to avoid swamping the platform. A million-row delete can take hours; that's by design. Plan jobs to run during quiet windows. ## Soft delete vs hard delete Dataverse doesn't have a built-in soft-delete pattern; deletes are hard. Some organisations configure a *Deactivated* status field and only "delete" by deactivating, with bulk-delete jobs later removing deactivated records after a retention period. This gives a recovery window. ## Backup before delete Major one-time deletes (initial cleanup of historical data) deserve a sandbox copy of production first — so the deleted data is recoverable if the criteria turn out wrong. Microsoft's point-in-time restore is 28 days; beyond that, no recovery. ## Audit of bulk deletes Each bulk-delete job execution records: when, by whom, what filter, how many rows. The audit trail is essential for compliance — auditors will ask what was deleted and when. **Limits.** - **Permission required** — bulk delete needs specific privileges, usually system admin. - **Some tables can't be bulk deleted** — system tables, some configuration tables. - **API call quota** — large bulk deletes consume API call budget on the tenant. - **Cascade depth** — very deep cascades can run for a long time and consume substantial resources. **Compliance considerations.** - **GDPR right to erasure** — deletion may be obligatory for specific contacts on request. - **Statutory retention** — some data must be kept for years (financial records, employee records). Don't delete prematurely. - **Legal hold** — records under legal hold cannot be deleted. Mark and exclude from bulk deletes. ## Operational discipline Establish a tenant-wide retention policy. Configure bulk delete jobs aligned to the policy. Review monthly that they're running. Audit annually. Storage stays bounded; performance stays healthy. --- # Business Central API errors Business Central API and OData errors decoded — Authentication_InvalidCredentials, BadRequest_ResourceNotFound, Internal_CompanyNotFound, Request_EntityChanged, Application_DialogException, 429 limits, custom API 404s. Source: https://www.solvingdynamics365.com/guides/business-central-api-errors Section: Business Central / Troubleshooting Published: 2026-09-03 Business Central's API returns errors as a JSON body with a `code` and a `message`, and the codes are more useful than the HTTP status. This reference covers the ones that recur in integration work — authentication, addressing, concurrency, validation, limits, and custom API publishing — with what each actually means. For the API itself, start with [Business Central API and OData](https://www.solvingdynamics365.com/guides/business-central-api-and-odata); for web services more broadly, [Business Central web services](https://www.solvingdynamics365.com/guides/business-central-web-services). ## Reading an API error Every failed call returns something like: ```json { "error": { "code": "Application_DialogException", "message": "Posting Date is not within your range of allowed posting dates. CorrelationId: …" } } ``` The `code` says which family the error belongs to; the `message` is usually the same text a user would see in the client. The `CorrelationId` is what Microsoft support and your telemetry need — log it on every failure. ## Authentication and authorisation ### 401 — Authentication_InvalidCredentials / Authentication_MissingCredentials **Symptom.** Every call fails; Postman with a user token might work while your service does not. **Cause.** In order of frequency: the token was requested for the wrong scope (it must be `https://api.businesscentral.dynamics.com/.default`); the token is for a different tenant than the environment; the Authorization header is missing or malformed; or, for service-to-service authentication, the app registration has not been added in Business Central under Microsoft Entra Applications with a permission set and with consent granted by an admin. **Fix.** Decode the token (jwt.ms) and check `aud` and `tid`. Register the app in Business Central, assign permission sets (for example `D365 BUS FULL ACCESS` or a custom set), and grant consent from the same page. **Prevention.** One app registration per integration with the least permission set that works, and a checklist that includes the Business Central-side registration — it is the step every new integration forgets. ### 403 — Forbidden / user status errors **Cause.** The user or app is known but disabled, has no licence, or lacks permission on the object. For service principals, the entry on the Microsoft Entra Applications page has State set to Disabled, or its permission set does not cover the table. **Fix.** Enable the entry; use Effective Permissions on the user to see what the permission set grants. See [Business Central permissions and security](https://www.solvingdynamics365.com/guides/business-central-permissions-and-security). ## Addressing ### 404 — BadRequest_ResourceNotFound **Symptom.** The environment responds, but the resource is not found. **Cause.** A wrong segment in the URL: the environment name, the API route (`/api/v2.0/` for the standard API, `/api////` for custom), the entity set name (plural: `customers`, `salesInvoices`), or an id that does not exist. Also the classic: the company id segment points at a company in a different environment. **Fix.** Walk the URL: `https://api.businesscentral.dynamics.com/v2.0/{tenant}/{environment}/api/v2.0/companies` should list companies; then `companies({id})/customers`. Compare each segment with what that call returns. ### 404 — Internal_CompanyNotFound **Cause.** The company id or name in the URL is wrong for this environment, or the company was renamed. Copying an environment gives companies new ids. **Fix.** Call `/companies` and use the id it returns; store company ids per environment, never hard-code them. **Prevention.** Environment-specific configuration for every integration, refreshed after any environment copy — see [Business Central environments](https://www.solvingdynamics365.com/guides/business-central-environments). ### 400 — "The property 'X' does not exist on type 'Microsoft.NAV.customer'" **Cause.** A field name in `$select`, `$filter`, `$orderby`, or the body that is not in the API's contract, or has the wrong case (API field names are camelCase: `displayName`, not `DisplayName`). **Fix.** Read the entity's metadata at `/api/v2.0/$metadata` and use the exact names. ### 405 — BadRequest_MethodNotAllowed **Cause.** A verb the endpoint does not support: DELETE on a posted document, PATCH on a read-only API page, POST to a bound action without the action name. **Fix.** Check the API page's `Editable`, `InsertAllowed`, `ModifyAllowed`, and `DeleteAllowed` properties, and call bound actions as `POST …/Microsoft.NAV.post`. ### 415 — Unsupported_MediaType / BadRequest_MissingContentType **Cause.** A POST or PATCH without `Content-Type: application/json`. **Fix.** Set the header. ## Concurrency and keys ### 409 — Request_EntityChanged: "Another user has already changed the record…" **Symptom.** PATCH or DELETE fails intermittently. **Cause.** Business Central requires an `If-Match` header carrying the `@odata.etag` from the GET; if the record's etag has changed since, the write is refused. Integrations that GET a batch and PATCH later hit this whenever a user edits in between. **Fix.** Re-read, take the new etag, retry once. `If-Match: *` overwrites unconditionally — acceptable for master data the integration owns, dangerous for anything users also edit. **Prevention.** Keep read-to-write windows short and make the integration the single writer for the fields it manages. ### 400 — Internal_EntityWithSameKeyExists: "The record in table X already exists" **Cause.** A POST with a key (`number`, `code`) that already exists, or a number series that handed out a used number. **Fix.** Look up by the business key before creating; treat POST as upsert. [Idempotency in Dynamics 365 integrations](https://www.solvingdynamics365.com/guides/idempotency-in-dynamics-365-integrations) covers the pattern. ### 400 — Application_RecordNotFound / Internal_RecordNotFound **Cause.** A reference in the body — `customerNumber`, `itemId`, `paymentTermsId` — points at a record that does not exist in this company. **Fix.** Validate references against the target company; ids differ between companies and environments even when codes match. ## Validation and business logic ### 400 — Application_DialogException **Symptom.** The message is a Business Central business error: allowed posting dates, blocked customer, missing posting setup, "There is nothing to post". **Cause.** The API ran the same validation and posting code a user would, and it failed for the same reason it would in the client. **Fix.** Fix the data or the setup. The messages are decoded in [posting setup errors](https://www.solvingdynamics365.com/guides/business-central-posting-setup-errors) and [journal and document posting errors](https://www.solvingdynamics365.com/guides/business-central-journal-and-document-posting-errors). ### 400 — Application_FieldValidationException **Cause.** A field's `OnValidate` trigger rejected the value — an invalid VAT registration number, a date before the customer's start date, a code that does not exist in its lookup table. **Fix.** Read the message; it names the field and the rule. ### 400 — Application_StringExceededLength **Cause.** A value longer than the field: a 120-character address line into a 100-character field. **Fix.** Truncate at the integration boundary; the `$metadata` document carries each field's `MaxLength`. ### 400 — Application_FilterErrorException **Cause.** A `$filter` the OData layer could not translate — unsupported function, wrong type, unescaped quote in a value. **Fix.** Escape single quotes by doubling them (`'O''Brien'`), use `eq`, `ne`, `gt`, `lt`, `contains`, `startswith`, and filter on fields the page exposes. ### 400 — "The request could not be understood by the server due to malformed syntax" **Cause.** Invalid JSON — trailing comma, wrong quotes, a number where a string is expected, an enum value not in the allowed set. **Fix.** Validate the body with a linter; check enum values against `$metadata`. ## Limits and availability ### 429 — Too Many Requests **Symptom.** Bursty integrations fail under load with `Retry-After` in the response. **Cause.** Business Central online enforces operational limits per environment — a maximum number of concurrent API requests and a maximum request rate per rolling window — documented on Microsoft's operational limits page and revised from time to time. **Fix.** Honour `Retry-After` with exponential backoff; reduce calls with `$select` and `$filter`, `$batch` for multiple operations, and delta sync via `lastModifiedDateTime` filters or webhooks rather than polling everything. **Prevention.** Design for the limits from the first call; [webhooks in Business Central](https://www.solvingdynamics365.com/guides/webhooks-in-business-central) and [webhooks vs Service Bus](https://www.solvingdynamics365.com/guides/integrating-business-central-webhooks-vs-service-bus) cover the push alternatives. ### 503 / Internal_TenantUnavailable **Cause.** The environment is being updated (the update window), restored, or is temporarily unavailable. **Fix.** Retry after the window; integrations should tolerate a short outage at the scheduled update time. **Prevention.** Align the environment's update window with a quiet period for integrations — see [release waves](https://www.solvingdynamics365.com/guides/business-central-release-waves). ### Internal_ServerError / 500 **Cause.** An unhandled error inside Business Central — often a runtime error in an extension's API page or an event subscriber that fires during the API operation. **Fix.** Find the CorrelationId in telemetry; the AL stack trace names the object. [AL runtime errors](https://www.solvingdynamics365.com/guides/al-runtime-errors-in-business-central) covers the usual suspects. ## Custom API pages ### 404 on a custom API that exists **Cause.** The URL must match the page's `APIPublisher`, `APIGroup`, `APIVersion`, and `EntitySetName` exactly, and the page must have `PageType = API`, `EntityName` set, and the extension installed in that environment. A `v1.0` in the page and `v1` in the URL is a 404. **Fix.** Compare the four properties with the URL segment by segment. ### "The entity 'X' does not have a property 'Y'" on a custom page **Cause.** The field's `Caption` is not what the API uses — the API name is the field's declared name in the page's `field(name; Source)` syntax, camelCase by convention. **Fix.** Use the names from the page definition, and check `$metadata`. ### Webhook subscription errors **Cause.** "The provided callback URL could not be validated" means the receiving endpoint did not echo the `validationToken` query parameter within the timeout; subscriptions also expire after a few days and must be renewed, and repeatedly failing endpoints get their subscription dropped. **Fix.** Implement the handshake exactly (respond 200 with the token as the body), renew before expiry, and answer notifications quickly — do the work asynchronously. ## When the error is not from Business Central A Power Automate flow or Logic App using the Business Central connector wraps these errors in its own; the `code` and `message` above are still inside the error body. [Power Automate flow failures](https://www.solvingdynamics365.com/guides/power-automate-flow-failures-explained) covers the wrapper. And if the call never reaches Business Central — DNS, proxy, TLS — the response has no `error.code` at all, which is itself the diagnostic. ### Frequently asked questions **Why does my Business Central API call return 401 Authentication_InvalidCredentials?** The token is for the wrong audience or the app is not known to Business Central. The OAuth scope must be https://api.businesscentral.dynamics.com/.default, the token must be for the same tenant as the environment, and for service-to-service calls the app registration must be added on Business Central's Microsoft Entra Applications page with a permission set and consent granted. **What does Request_EntityChanged (409) mean?** Optimistic concurrency: the record changed since you read it. Every PATCH and DELETE must send an If-Match header with the @odata.etag you received, or If-Match: * to overwrite unconditionally. Re-read the record, take the new etag, and retry. **What is Application_DialogException?** A business-logic error raised by Business Central itself — a posting date outside the allowed range, a blocked customer, a missing posting group. The message is the same text a user would see in the client; fix the data or setup, not the API call. The posting error references on this site decode the common ones. **Why does my custom API page return 404?** The URL does not match the page's APIPublisher, APIGroup, APIVersion, and EntitySetName exactly, or the extension is not installed in the environment named in the URL, or the page's PageType is not API. Check the four properties against the URL segment by segment — they are case-sensitive. --- # Business Central CI/CD with AL-Go How AL-Go for GitHub turns an AL extension repo into a build-test-deploy pipeline — secrets, environments, and continuous delivery. Source: https://www.solvingdynamics365.com/guides/business-central-cicd-with-al-go Section: Business Central / AL & development Published: 2026-05-01 Updated: 2026-08-25 **AL-Go for GitHub** is Microsoft's official template for running Business Central extension builds, tests, and deployments as GitHub Actions workflows. It replaced earlier home-grown PowerShell pipelines with a maintained, supported, free toolkit. For any Business Central project bigger than a single PTE maintained by one person, AL-Go is the right starting point. ## What you get Initialising a repository from the AL-Go template installs a `.AL-Go` folder with workflow definitions and PowerShell scripts. Out of the box you get: - A **CI/CD workflow** that runs on every pull request and main-branch push, building the AL extensions in containers, running tests, and producing signed `.app` artefacts. - An **Increment Version Number** workflow for bumping `app.json` versions between releases. - A **Publish to AppSource** workflow that submits new versions to Microsoft for validation. - A **Deploy to Environment** workflow that publishes to one or more named Business Central environments. - A **Create release** workflow that tags a Git release and uploads the build artefacts. - A **Test Current** workflow that runs the full AL test suite against a fresh container. ## Setup Fork or copy the AL-Go template, drop your AL source into the standard project folder structure, set repository secrets (a Business Central app registration's tenant ID, client ID, client secret, and the encryption key for AL-Go's own settings), and the workflows run. ## Environments Each Business Central environment you want to deploy to (Dev, UAT, Prod) is configured in `settings.json` with a name and a secret reference. Deployments are gated by GitHub *environment protection rules* — approvals, branch restrictions, deployment windows. ## Containers vs cloud AL-Go can run builds either in **BC Container** images on GitHub-hosted runners (slow, free, simple) or on **self-hosted runners** (fast if you have machines available). For most projects, container builds on GitHub-hosted runners are fine. ## Multi-app repos A single repo can hold many AL apps with dependency graphs. AL-Go builds them in order, runs cross-app tests, and packages a coordinated release. ## Branching strategy AL-Go works with trunk-based development plus feature branches. Production deployments come from main; preview deployments can come from branches. ## The win A breaking platform change shows up in the PR build the moment Microsoft pushes new symbols. You catch breakage at code-review time, not at customer go-live. --- # Business Central environments and sandboxes How environments work in Business Central SaaS — production vs sandbox, capacity, copies, and lifecycle management. Source: https://www.solvingdynamics365.com/guides/business-central-environments Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-30 In Business Central SaaS, an **environment** is an isolated instance of the application with its own database, users, configuration, and installed extensions. Every Microsoft 365 tenant that licenses Business Central gets one production environment included; additional environments are bought as add-ons. Environments are the unit of almost everything operational — updates, backups, extension deployment, capacity — so a deliberate environment strategy is one of the cheapest pieces of insurance a BC project can buy. ## Environment types **Production** environments hold real business data, have stricter update controls (a customer-defined update window), and are backed up automatically with point-in-time restore for 28 days. **Sandbox** environments are intended for development, testing, training, and demos. Sandboxes are free to create (up to a configurable limit) but live on lower-priority infrastructure, so they may pause, throttle, or update sooner than production. The practical consequence: never run anything business-critical in a sandbox, and never demo from production. ## The admin centre The **Business Central admin centre** is the canonical management surface: create, copy, rename, and delete environments; schedule update windows; monitor capacity; configure notification recipients; and view telemetry links. Partners get delegated access through GDAP, which is how most SMBs actually operate it. If you run BC and have never opened the admin centre, that is the first gap to close — update scheduling alone justifies it. ## Capacity and storage Each Business Central licence contributes a small amount of **database capacity** and **file storage** to the tenant, and each environment consumes from that pool. When the tenant runs low, customers buy storage add-ons — or, more productively, clean up first. The usual suspects are old sandboxes nobody deleted, document attachments, and log-like custom tables that grew unbounded. Deleting a stale sandbox is free; storage add-ons are forever. ## Copying environments From the admin centre you can copy a production environment to a sandbox (most common, for safe testing with real data) or a sandbox to a sandbox. Copies preserve installed extensions and configuration but generate a new connection identity, so tenant integrations don't fire automatically against the copy — deliberate, and it has saved many companies from a test system emailing real customers or posting to a live bank integration. Still, treat copies of production as containing real personal data, because they do: restrict who can access them and refresh or delete them on a schedule rather than letting year-old copies of the live database accumulate. ## Updates Microsoft schedules every environment for major version updates twice a year (April and October). Customers can shift the update by a small number of weeks via the admin centre, and can update a sandbox first to validate before production. The pattern that works: copy production to a sandbox, let the sandbox take the new major version early, run your key processes and any per-tenant extensions against it, then let production update inside its window. Minor updates arrive monthly and are non-negotiable — which is fine, because they are non-breaking by design. What breaks on update is almost never Microsoft's code; it is an unmaintained per-tenant extension, which is why the sandbox-first rhythm matters. ## Restore The admin centre offers a self-service **point-in-time restore** to any moment in the past 28 days. The restored environment lands as a *new* environment — the live tenant continues running until you switch over. This is the answer to "someone posted a disastrous batch this morning", but note what it is not: a long-term archive. Data older than 28 days is only recoverable if you exported it yourself, so retention requirements beyond that need a telemetry/export strategy — see [backup strategy for Dynamics 365](https://www.solvingdynamics365.com/guides/backup-strategy-for-dynamics-365). ## Lifecycle pattern A healthy lifecycle has at least three environments — Dev (sandbox), UAT (sandbox), Production — with extensions promoted dev → UAT → prod through AppSource or per-tenant extension deployments, ideally driven by [AL-Go for GitHub CI/CD](https://www.solvingdynamics365.com/guides/business-central-cicd-with-al-go) rather than manual uploads. Companies with heavier change volume add a fourth environment for training or a stable pre-prod that mirrors production versions exactly. Two habits separate tidy tenants from messy ones. First, name environments for their role (PROD, UAT, DEV-feature-x) and delete what no longer has one. Second, write down which environment is the master for which kind of test — performance numbers from a throttled sandbox are noise, and UAT sign-off against a six-month-old data copy is theatre. Environments are cheap; the discipline around them is the actual asset. ## Where to go next The lifecycle around environments is covered in [release waves](https://www.solvingdynamics365.com/guides/business-central-release-waves) and [AL-Go CI/CD](https://www.solvingdynamics365.com/guides/business-central-cicd-with-al-go); what the 28-day restore does not cover is in [backup strategy for Dynamics 365](https://www.solvingdynamics365.com/guides/backup-strategy-for-dynamics-365). Two environment-specific failure modes are worth knowing before they bite: [job queue entries after a copy or restore](https://www.solvingdynamics365.com/guides/business-central-job-queue-errors) and [API errors from stale company ids](https://www.solvingdynamics365.com/guides/business-central-api-errors). [Telemetry and monitoring](https://www.solvingdynamics365.com/guides/business-central-telemetry-and-monitoring) is how you see all of it. ### Frequently asked questions **What is the difference between a production and a sandbox environment?** Production holds real data, has a customer-defined update window, and gets automatic backups with 28-day point-in-time restore. Sandboxes are free up to a limit, run on lower-priority infrastructure that may pause or throttle, and update sooner — never run anything business-critical in one. **How many environments should a Business Central tenant have?** At least three — Dev sandbox, UAT sandbox, Production — with extensions promoted through them, ideally by AL-Go CI/CD. Heavier change volume adds a training or stable pre-production environment. **Can I restore a Business Central environment?** Yes, self-service point-in-time restore to any moment in the past 28 days from the admin centre. The restore lands as a new environment; anything older than 28 days is only recoverable if you exported it yourself. **Does copying production to a sandbox fire integrations?** No. Copies get a new connection identity so tenant integrations do not run against the copy, but they still contain real personal data — restrict access and refresh or delete them on a schedule. --- # Business Central feature management How Business Central's Feature Management page lets administrators preview, opt-in to, or delay new features within a release wave. Source: https://www.solvingdynamics365.com/guides/business-central-feature-management Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-25 Microsoft ships many Business Central features as **opt-in** capabilities behind a runtime toggle, rather than enabling them automatically for all tenants. The **Feature Management** page is the administrator's control panel for these toggles. Understanding it is essential for managing the change pace inside each release wave. ## The model Each feature in Microsoft's Feature Management catalogue has a status: - **Preview** — available in the platform but disabled by default. Administrators can enable per environment for testing. Behaviour may still change before general availability. - **Generally Available, opt-in** — the feature is stable, but not auto-enabled. The administrator chooses when to turn it on. Many features stay in this state for one or two waves before becoming mandatory. - **Generally Available, default on** — the feature is enabled automatically; it can still be temporarily disabled in some cases for backward compatibility. - **Mandatory** — the feature is on and cannot be disabled. Eventually every default-on feature becomes mandatory. ## Why opt-in Microsoft uses opt-in features to: - Ship new functionality without surprising customers mid-quarter. - Let customers test in sandbox before enabling production. - Catch breaking-change risk early — admins who enable preview features feed back to Microsoft on problems. - Allow partners to test extension compatibility against new platform features. ## The Feature Management page A grid showing every feature, its status, a description, a link to the documentation, and the toggle. The administrator enables or disables per environment. Changes can take effect immediately or require a session restart. ## Examples of opt-in features Recent releases have used Feature Management for: - New AL platform capabilities (e.g. new query language constructs, new event signatures). - New UI patterns (e.g. modernised list pages, new filter experiences). - Application-level changes (e.g. new copilot capabilities, new bank reconciliation logic). - Integration changes (e.g. new connector versions, new API behaviour). ## Sandbox-first The discipline is: enable previewing features in **sandbox** first, run regression tests, confirm extensions still work, then enable in **production**. Tenants that flip features in production without sandbox validation occasionally find that an extension breaks or a workflow behaves differently — the kind of incident that erodes user trust. ## Telemetry Application Insights telemetry records feature enable/disable events with the user, environment, and timestamp. Useful audit when investigating "why is this behaving differently than last week". ## Per-environment vs per-company Most features toggle per environment (affecting all companies inside it). A small number toggle per company; the Feature Management page makes it clear which. ## The progression A feature typically lifecycles: 1. **Wave N** — released as Preview opt-in. 2. **Wave N+1** — moved to Generally Available opt-in. 3. **Wave N+2** — moved to default-on, with option to disable. 4. **Wave N+3 or N+4** — mandatory; toggle removed. Customers who never opt-in get features automatically when they become default-on — usually well-tested by then. Customers who opt-in early get features sooner and help shape the rollout. ## Best practice Review Feature Management every release wave alongside the published Release Plan. Enable previews for features you care about; leave the rest alone. --- # Business Central integrations with the Power Platform and Microsoft 365 How Business Central plugs into Power Apps, Power Automate, Power BI, Excel, Outlook, Teams, and Copilot. Source: https://www.solvingdynamics365.com/guides/business-central-integrations-power-platform-m365 Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-25 A big part of Business Central's value is that it lives inside the broader Microsoft cloud rather than as a standalone island. The connections are mature, well-documented, and — for the most part — work out of the box. ## Power Automate A first-party **Business Central connector** for Power Automate covers most standard tables and the most common operations: create/read/update records, trigger on changes, run actions. Approval workflows in Business Central can themselves be powered by Power Automate, replacing or extending the built-in workflow engine. Watch out for **API call limits** on the tenant — they're generous but real, and chatty flows can hit them. ## Power Apps Canvas apps and model-driven apps consume Business Central data through the same connector. The standard pattern is to keep transactions in Business Central and use Power Apps for purpose-built front ends — warehouse scanning, expense capture, customer onboarding. ## Power BI Business Central ships pre-built Power BI apps for finance, sales, purchasing, and inventory. For deeper analytics, the **Power BI app source** connector reads directly, and the **Business Central data lake export** (or the newer **Microsoft Fabric** link) streams transactional data into a lakehouse for cross-system reporting. ## Outlook The Outlook add-in lets a user open a customer or vendor in Business Central from any email, see open documents, and even create quotes or invoices without leaving Outlook. ## Teams A Business Central card in Teams allows sharing records into a chat, where colleagues can view and act on them inline. ## Excel Almost every list page has an **Edit in Excel** action that opens a live, two-way Excel workbook — edit, save, and the changes post back to BC. This is the single feature most loved by finance teams. ## Copilot Built-in copilots assist with bank reconciliation, sales line suggestions, product description text, chart explanations, and natural-language report queries. Customers can also build their own **Copilot Studio** agents that read and write to BC via the same connector stack. ## SharePoint/OneDrive Document attachments on Business Central records are stored in OneDrive/SharePoint, not in the BC database — which keeps the database lean and storage costs predictable. --- # Business Central job queue errors Why Business Central job queue entries fail or stall — Error status, stuck In Process, entries that never run, permission and user problems, overlapping jobs, sandbox copies, reports needing parameters — with fixes. Source: https://www.solvingdynamics365.com/guides/business-central-job-queue-errors Section: Business Central / Troubleshooting Published: 2026-09-03 Job queue entries fail quietly. Nobody is watching the page when the nightly cost adjustment errors out at 02:00, and the first symptom is a month-end that does not reconcile. This reference covers the ways entries fail or stall, where the real message is, and the setup that stops it recurring. The queue itself — categories, recurrence, telemetry — is covered in [the job queue in Business Central](https://www.solvingdynamics365.com/guides/the-job-queue-in-business-central). ## Where the error is A failed entry shows Status = Error. Open the entry card and choose Show Error, or open Job Queue Log Entries (filtered to the entry) for the history: one row per run with Start, End, Status, and Error Message. The message is whatever the codeunit or report raised — a posting error, a permission error, a runtime error — and is decoded in the same way as a user-facing error: [posting setup errors](https://www.solvingdynamics365.com/guides/business-central-posting-setup-errors), [journal and document posting errors](https://www.solvingdynamics365.com/guides/business-central-journal-and-document-posting-errors), and [AL runtime errors](https://www.solvingdynamics365.com/guides/al-runtime-errors-in-business-central). If the log has no row for the time the job should have run, the job did not run at all, which is a different problem (below). ## Entries that fail ### Status = Error with a business message **Symptom.** "Posting Date is not within your range of allowed posting dates", "The Gen. Posting Setup does not exist", "Item X is blocked". **Cause.** The job posts documents or journals and hit the same validation a user would. Recurring journals scheduled through the queue are the usual source: the posting date range was not rolled forward, or a dimension value was blocked since the journal was set up. **Fix.** Fix the data or setup, then set the entry back to Ready. The job re-runs at its next scheduled time, or immediately with Run Once. **Prevention.** Put "check job queue log" in the daily finance routine, and set Maximum No. of Attempts to Run and Rerun Delay on entries whose failures are transient. ### "You do not have the following permissions on TableData X" **Symptom.** The entry fails on a permission error although the user who created it can run the process manually. **Cause.** Scheduled runs execute as the user in the entry's User ID — the person who last set it to Ready — and that user's permission sets lack the object. Extensions that add tables without permission sets, or a user who created the entry with SUPER and later had it removed. **Fix.** Set the entry to Ready as a user with the right permission set (a dedicated service account is the clean answer), or add the permission to that user's role. See [Business Central permissions and security](https://www.solvingdynamics365.com/guides/business-central-permissions-and-security). ### "The user does not exist" / entry fails after a leaver **Cause.** The User ID on the entry belongs to a disabled or deleted user, or one whose licence was removed. **Fix.** Re-set the entry to Ready under a service account; audit every entry's User ID when someone leaves. **Prevention.** Create all job queue entries as a named service account with a stable licence, never as a person. ### Lock and deadlock errors **Symptom.** "The operation could not complete because a record was locked by another user" or "Your activity was deadlocked" in the log, at times when nobody is logged in. **Cause.** Two job queue entries running simultaneously on overlapping tables — Adjust Cost and an inventory posting job, two recurring journals, a report and a batch — or a job overlapping with an integration writing through the API. **Fix.** Give entries that touch the same tables the same Job Queue Category Code; entries in a category run one at a time. Space the schedules. **Prevention.** One category per functional area (INVENTORY, GL, INTEGRATION) from the start. ### "Maximum No. of Attempts to Run" exhausted **Cause.** The entry has retried the configured number of times and given up; the underlying error is in the log. **Fix.** Fix the cause, reset the entry to Ready. ## Entries that never run ### Status = Ready, Earliest Start Date/Time in the past, no log entry **Symptom.** The entry looks scheduled but nothing happens. **Cause.** In Business Central online the job queue is driven by scheduled tasks created when the entry is set to Ready. If the task was lost — after an environment copy, a restore, or an entry that was set to Ready in a session that was killed — no task exists and nothing will fire. **Fix.** Set the entry On Hold and then Ready again to create a new scheduled task. The Job Queue Entries page's Restart action does the same. ### Entries On Hold after copying or restoring an environment **Symptom.** After copying production to a sandbox, or restoring, every entry is On Hold. **Cause.** Deliberate. Business Central sets job queue entries On Hold in a copied or restored environment so a sandbox does not post, email, or integrate as if it were production. **Fix.** In a sandbox, leave them on hold unless a specific test needs one; in a restored production environment, review the list and set the genuine jobs to Ready under the service account. **Prevention.** Keep a documented list of production job queue entries and their schedules so a restore can be reconciled against it — [Business Central environments](https://www.solvingdynamics365.com/guides/business-central-environments) covers copy and restore behaviour. ### Stuck In Process **Symptom.** The entry has shown In Process for hours or days; nothing is running. **Cause.** The session executing the job ended without updating the status — an environment update at the scheduled update window, a platform restart, or the job exceeding a session limit. Entries do not recover from this by themselves. **Fix.** Set the entry to Ready (Restart). Check the log to see whether the last run completed its work before dying; posting jobs are transactional per document, so partial batches are usually safe to rerun. **Prevention.** Schedule long jobs away from the environment's update window, and set Job Queue Entry notifications so someone sees a stuck entry within hours rather than at month-end. ### Recurring entry skips runs **Cause.** Run on Mondays… flags unchecked for a day, a Starting Time / Ending Time window the job could not fit into because the previous run overran, or No. of Minutes between Runs set on a job that takes longer than that. **Fix.** Check the recurrence fields on the card; widen the window or lengthen the interval. ## Reports in the job queue ### "The report cannot be run in the job queue because it has a request page" / report runs with wrong parameters **Cause.** A report scheduled through the queue needs its request-page options saved with the entry — the Report Request Page action on the job queue entry card. Without them, the report runs with defaults or fails. **Fix.** Open the entry, run Report Request Page, fill the options, save. For output, set Report Output Type (PDF, Excel, Word) and, if it should be sent, the printer or email setup. ### Report never produces output **Cause.** Output Type is None, or the printer name on the entry does not match a configured printer. **Fix.** Check the entry's output fields; [printers and print management](https://www.solvingdynamics365.com/guides/business-central-printers-and-print-management) covers cloud printing. ## Codeunits in the job queue ### "The Job Queue Entry cannot run codeunit X" / parameter string ignored **Cause.** The codeunit's `OnRun` does not expect a Job Queue Entry record, so the Parameter String is not read; or the codeunit is not marked to run in the background context and prompts for confirmation, which fails without a UI. **Fix.** Codeunits for the queue take `Job Queue Entry` as the `TableNo` and read `"Parameter String"`; wrap any `Confirm` in `GuiAllowed` checks. **Prevention.** Test every queue codeunit with Run Once before scheduling it. ## Monitoring so this stops being a surprise Three settings turn the job queue from silent to observable. Job Queue Entry Card > Notifications sends a notification when an entry fails. Telemetry to Application Insights logs every job start, finish, and failure with the error and the object — [Business Central telemetry and monitoring](https://www.solvingdynamics365.com/guides/business-central-telemetry-and-monitoring) covers the setup and the KQL for "jobs that failed overnight". And the Job Queue Entries page itself, filtered to Status = Error or In Process, belongs on the administrator's role centre as a cue. Most job queue outages last exactly as long as it takes someone to look. ### Frequently asked questions **Where is the actual error for a failed job queue entry?** In the Error Message field on the entry (open the card and use Show Error), and in the Job Queue Log Entries page, which keeps a row per run with the message. The message is the runtime error the job's codeunit or report raised — decode it with the posting and AL runtime error references. **Why is my job queue entry stuck In Process?** The session running it died — an environment update, a restart, a timeout — before it could set the status back. The entry will not restart itself. Set it to Ready (or use Restart), and if it happens after every update window, move the schedule away from the window. **Why does a job queue entry run for me but fail for the scheduled run?** Scheduled runs execute as the user recorded on the entry (the one who set it to Ready), not as you. If that user is disabled, has left, lost a licence, or lacks permissions on the objects the job touches, every scheduled run fails. Re-set the entry to Ready as a service account that has the permissions. **Can I run two job queue entries at once?** Yes, and that is often the problem. Entries without a Job Queue Category Code run in parallel and lock each other; put jobs that touch the same tables in one category so they run one at a time. --- # Business Central journal and document posting errors Business Central posting errors that are not posting groups — allowed posting dates, dimension code mandatory, number series, blocked customers and items, nothing to post, warehouse handling, approvals. Source: https://www.solvingdynamics365.com/guides/business-central-journal-and-document-posting-errors Section: Business Central / Troubleshooting Published: 2026-09-03 Once the posting groups are right, the errors that stop a posting are about the document itself: its date, its dimensions, its number, and the state of the records it references. This reference covers those in the order finance and operations users report them. Posting group errors — "does not exist" and "must have a value in … Posting Setup" — are in [posting setup errors](https://www.solvingdynamics365.com/guides/business-central-posting-setup-errors); code-level runtime errors in [AL runtime errors](https://www.solvingdynamics365.com/guides/al-runtime-errors-in-business-central). ## Posting dates ### "Posting Date is not within your range of allowed posting dates." **Symptom.** A journal or document refuses to post; the same document may post for a colleague. **Cause.** General Ledger Setup carries Allow Posting From and Allow Posting To for the company; User Setup carries the same fields per user, and the per-user range wins when present. The error fires when the line's posting date falls outside whichever applies. Two situations dominate: a user back-dates into a closed period, or nobody rolled the range forward after month-end and the whole company is locked out of the new month. **Fix.** If the date is wrong, change it. If the period is genuinely open, extend Allow Posting To in General Ledger Setup, or the user's own range in User Setup for the people who close the books. Check both places — a stale User Setup range is the usual reason "it works for me but not for her". **Prevention.** Make rolling the posting date range a named step in the [month-end checklist](https://www.solvingdynamics365.com/guides/business-central-month-end-close), and give only the controller a wider per-user range for closing entries. ### "Posting Date must not be later than Work Date" / date warnings on documents **Cause.** A document dated in the future relative to the work date, or a VAT date outside the VAT period when VAT date control is on. **Fix.** Correct the date; if the future posting is intentional, adjust the work date for the session. ## Dimensions ### "Select a Dimension Value Code for the Dimension Code X for Customer Y." **Symptom.** A line fails validation or posting naming a dimension and a record. **Cause.** The record — customer, vendor, item, G/L account, resource, fixed asset — has a default dimension whose Value Posting is Code Mandatory, and the line has no value for that dimension. Common when a new G/L account or item was created without the default dimension the rest of its group carries. **Fix.** Set the dimension value on the line's Dimensions page, or on the record's Default Dimensions so every future line inherits it. **Prevention.** Use Account Type Default Dimensions to set mandatory dimensions per table rather than per record, and templates for new customers, vendors, and items. [Dimensions design](https://www.solvingdynamics365.com/guides/business-central-dimensions-design) covers the model. ### "Dimension Value Code must be X for Dimension Code Y for Customer Z." **Cause.** Value Posting is Same Code — the record insists on one specific value — and the line has a different one, usually because a user overrode it. **Fix.** Use the mandated value, or change the default dimension if the rule is wrong. ### "A dimension used in Gen. Journal Line X, Y, Z has caused an error. …" **Cause.** The wrapper message on journals; the text after it is one of the above, or a blocked dimension value. **Fix.** Read the second sentence and act on that. ### "Dimension Value X - Y is blocked" / "The dimension value is blocked" **Cause.** The dimension value has been blocked — a closed project, a retired cost centre — but a recurring journal, a default dimension, or an open document still uses it. **Fix.** Change the line to a live value; update the default dimension or recurring journal that keeps feeding the blocked one. **Prevention.** Before blocking a dimension value, search default dimensions and open documents for it. ## Number series ### "You cannot assign new numbers from the number series X on DATE." **Symptom.** Creating or posting a document fails to get a number. **Cause.** The number series line whose Starting Date applies has no numbers left, or the only lines have starting dates after the posting date, or the series is not marked Default Nos. / Manual Nos. appropriately. Year-based series (INV-2026-…) hit this on 1 January when nobody added the new year's line. **Fix.** On the number series lines, add a line with a starting date on or before the posting date and a fresh number range, or raise Ending No. on the current line. **Prevention.** Set Warning No. on each series line so users are warned before the range runs out, and put "add next year's number series lines" in the year-end checklist. [Number series in Business Central](https://www.solvingdynamics365.com/guides/number-series-in-business-central) covers the design. ### "It is not possible to assign numbers greater than X from the number series Y." **Cause.** Ending No. has been reached. **Fix.** Extend Ending No. or add a new line. ### "The number series X does not allow manual numbers" / "does not allow default numbers" **Cause.** A user typed a number into a series that only assigns automatically, or left it blank on a series that only allows manual entry. **Fix.** Set Manual Nos. or Default Nos. on the series to match how it is meant to be used. ## Blocked records ### "Blocked must be equal to 'No' in Customer: No.=X. Current value is 'All'." **Symptom.** A sales document for the customer cannot be created, shipped, or invoiced. **Cause.** The customer's Blocked field is Ship, Invoice, or All. Ship blocks shipments, Invoice blocks invoicing, All blocks everything including payments. Credit control sets these; so does the Privacy Blocked flag after a data-subject request. **Fix.** Confirm with whoever blocked the customer; clear or reduce the block if the sale should go ahead. Privacy Blocked is a separate field and a separate conversation. **Prevention.** Document the blocking policy — who blocks, at what overdue threshold, who unblocks. [Customer credit limits and blocking](https://www.solvingdynamics365.com/guides/customer-credit-limits-and-blocking-in-bc) covers the design; [blocked items and customers](https://www.solvingdynamics365.com/guides/blocked-items-and-customers-in-business-central) the three block levels. ### "Blocked must be equal to 'No' in Item: No.=X." / "Sales Blocked must be equal to 'No' …" / "Purchasing Blocked …" **Cause.** The item is blocked entirely, or for sales, or for purchasing — retired products, quality holds, discontinued suppliers. **Fix.** Use a replacement item (item substitutes help), or unblock if the block is stale. ### "Blocked must be equal to 'No' in Vendor" / "in G/L Account" / "in Bank Account" Same pattern on the other master tables; the fix is the same. ## Document state ### "There is nothing to post." **Symptom.** Post does nothing on an order or journal. **Cause.** On a sales or purchase order, Qty. to Ship / Qty. to Receive and Qty. to Invoice are all zero — often because a previous partial posting cleared them, or because a user set them to zero. On a journal, the batch has no lines, or the lines are all filtered out of view. **Fix.** Set the quantities to post on the lines; clear the journal filter. ### "The lines must be balanced. Balance: X" / journal out of balance **Cause.** A general journal batch must balance to zero per document number (or per line when Force Doc. Balance is on) unless a Bal. Account is used. A one-sided line, a rounding difference on a currency conversion, or lines under two document numbers that should be one. **Fix.** Add the balancing line or Bal. Account, or fix the document numbers so each group balances. ### "This document can only be released when the approval process is complete." **Cause.** An approval workflow applies to the document and it has not been approved, or the request was cancelled. **Fix.** Send for approval and wait, or have an approver with sufficient limit approve. Check the workflow's conditions if the document should not have needed approval. **Prevention.** Keep approval limits and approver users current; a leaver who was the only approver stops every document in their chain. [Approval workflows](https://www.solvingdynamics365.com/guides/business-central-approval-workflows) covers the setup. ### "Warehouse handling is required for Entry Type = Sale, Item No. = X, Variant Code = , Location Code = Y." **Symptom.** A sales order will not ship, or a purchase order will not receive, at a particular location. **Cause.** The location has Require Shipment, Require Receive, Require Pick, or Require Put-away switched on, so inventory movements must go through warehouse documents — a warehouse shipment and pick, or a warehouse receipt and put-away — and be registered before the order posts. **Fix.** Run the warehouse flow: release the order, create the warehouse shipment or receipt, create and register the pick or put-away, then post. If that location was never meant to run warehouse documents, turn the requirement off on the location card — but only if no open warehouse documents exist there. **Prevention.** Decide per location which of the three warehouse modes it runs before the first transaction; [warehouse pick and put-away](https://www.solvingdynamics365.com/guides/warehouse-pick-and-put-away-in-bc) covers the modes. ### "Location Code must have a value in Sales Line …" **Cause.** Inventory Setup has Location Mandatory on, and the line has no location. **Fix.** Set the location on the line or as a default on the customer, vendor, or user's responsibility centre. ## Cost and quantity ### "Quantity must not be less than Qty. to Ship" / "You cannot ship more than X units" **Cause.** The quantities on the line are inconsistent after a partial posting or a manual edit. **Fix.** Set Qty. to Ship to at most Outstanding Quantity. ### "Item X is not in inventory" / negative inventory prevented **Cause.** Inventory Setup has Prevent Negative Inventory on (or the item does), and the shipment would take stock below zero at that location. **Fix.** Receive the stock first, adjust the quantity, or — if negative inventory is an accepted practice — allow it on the item. **Prevention.** [Item availability and order promising](https://www.solvingdynamics365.com/guides/item-availability-and-order-promising-in-bc) covers keeping promised quantities honest. ## Reading an error you have not seen Every Business Central validation error names a field, a table, and the record's key. Open that record, look at that field, and the fix is usually visible. When the message names a setup table instead, it is a posting group problem — go to [posting setup errors](https://www.solvingdynamics365.com/guides/business-central-posting-setup-errors). When it names no field at all and talks about inconsistencies or locks, it is a runtime problem — go to [AL runtime errors](https://www.solvingdynamics365.com/guides/al-runtime-errors-in-business-central). And if a job queue entry is what failed rather than a user, [job queue errors](https://www.solvingdynamics365.com/guides/business-central-job-queue-errors) explains where the real message is hiding. ### Frequently asked questions **How do I fix 'Posting Date is not within your range of allowed posting dates'?** The document or journal date falls outside Allow Posting From / Allow Posting To in General Ledger Setup, or outside the per-user range in User Setup, which overrides it. Either the date on the line is wrong — a back-dated document into a closed period — or the ranges have not been rolled forward after month-end. Fix the date, or move the range if the period is genuinely open. **What does 'Select a Dimension Value Code for the Dimension Code X for Customer Y' mean?** The customer (or vendor, item, G/L account) has a default dimension with Value Posting set to Code Mandatory, and the line has no value for that dimension. Set the dimension value on the line, or on the record's default dimensions so it flows automatically. **Why does Business Central say 'You cannot assign new numbers from the number series'?** The number series has run out — the last number used has reached the ending number — or the line's Starting Date is later than the posting date, or the series is not set to allow default numbers. Add a new series line with a later starting date and a fresh range, or extend the ending number. **What is 'Warehouse handling is required for Entry Type = Sale, Item No. = X, Location Code = Y'?** The location requires warehouse shipment, receipt, pick, or put-away, so the document cannot be posted directly — the warehouse document has to be created and registered first. Either run the warehouse flow, or turn off the requirement on the location if that location was never meant to use it. --- # Business Central licensing and pricing How Business Central is licensed — Essentials vs Premium, Team Members, External Accountants, and what really drives total cost. Source: https://www.solvingdynamics365.com/guides/business-central-licensing-and-pricing Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-30 Business Central licensing is, on the surface, simple. There are three named-user licenses plus an accountant license, sold per user per month, with Microsoft list pricing published on its site. The complexity is in matching license type to actual user behaviour — and in understanding that the licence line is the smallest line on the real budget. ## The license types **Essentials** is the standard full-user license. It covers financials, sales and purchasing, projects, inventory, warehouse, distribution, and basic supply chain. Most users in most companies are Essentials. **Premium** is Essentials plus **manufacturing** and **service management**. Premium is required if *anyone* in the company uses those modules, and crucially you cannot mix: in a single tenant, all full users must be on the same SKU — either all Essentials or all Premium. This trips up companies that have a small service department and discover that one user's needs force every other full user up to Premium. Before accepting that jump, price the alternative: several capable ISV service-management and light-MRP apps on AppSource run on Essentials, and for a small team the ISV subscription can cost far less than the Premium uplift across the whole user base. **Team Member** is a lower-cost license for employees who only need read access plus a narrow set of write actions: time entry, expense entry, approval workflows, updating their own data, and consuming reports. It is *not* a general data-entry license — posting transactions, processing orders, or creating items is not allowed. Team Member misuse is the most common licensing compliance issue in BC: a "read-only" user who quietly starts posting journals is out of licence, and Microsoft's rules are enforced technically more than they once were. **External Accountant** is a free license for the customer's external accountant, with the same rights as a full user, scoped to the company they support. Two more that matter in specific businesses: **Device** licenses cover shared terminals — a shop-floor station or warehouse scanning device used by many people — and are priced per device, not per user. **Attach** pricing applies when a user already has a qualifying Dynamics 365 base app and adds BC (or vice versa) at a reduced rate; in mixed CRM-plus-ERP shops this is worth modelling properly. ## Choosing the split The exercise that pays for itself: list every person who will touch the system and write down what they actually *do*, not what department they sit in. Warehouse staff who only post from scan-driven documents may fit Device licensing. Managers who "need access to everything" usually consume reports — Team Member, or better, a Power BI report with no BC licence at all. Companies routinely over-buy full users by 20–30% because the default answer to "what licence?" was Essentials for everyone. Named users can be reassigned as staff change, so seasonal peaks are handled by reassignment, not stockpiling. ## What actually drives total cost The license fee is rarely the biggest number. The real drivers: - **Implementation** — partner services for design, configuration, data migration, and training. A typical SMB implementation runs somewhere between three and twelve months of partner engagement and often costs several multiples of the first-year license spend. - **ISV add-ons** from AppSource — localizations, EDI, freight, service, quality. Individually small, collectively a real monthly line. - **Storage** beyond the included database capacity — driven by attachments and log-heavy custom tables more than by transactions. - **Environments** — sandboxes are mostly free, but an additional *production* environment is a paid add-on. - **Integrations** — Power Automate premium connectors, middleware, and the maintenance of whatever you build. - **Support and enhancements** after go-live — the steady-state partner relationship. A pragmatic rule of thumb: budget the license, then budget the same amount again for implementation in year one, and a smaller recurring slice for managed services and enhancements after go-live. If a proposal shows licences as the dominant cost, something is missing from the proposal, not from the licence list. ## Keeping the bill honest over time Licensing hygiene is a twice-a-year habit, not a one-off. Review assigned licences against the last-login and permission data BC gives you; downgrade full users who have drifted into approver-only behaviour; remove leavers promptly (named licences do not free themselves). Check whether the Premium requirement still holds — businesses that dropped a service line sometimes pay the Premium uplift for years out of inertia. And re-read the [official licensing guide](https://go.microsoft.com/fwlink/?LinkId=866544) at renewal: Microsoft adjusts prices and terms roughly annually, and the changes tend to be announced quietly. For how licensing fits the wider platform cost picture, see [license optimisation for Dynamics 365](https://www.solvingdynamics365.com/guides/license-optimisation-for-dynamics-365). ## Where to go next Current list prices and a base-plus-attach calculator are on the [Business Central pricing page](https://www.solvingdynamics365.com/pricing/business-central). [Business Central pricing tiers explained](https://www.solvingdynamics365.com/guides/business-central-pricing-tiers-explained) goes deeper on sizing the user mix, [Dynamics 365 licensing explained](https://www.solvingdynamics365.com/guides/dynamics-365-licensing-explained) covers attach across the family, [Business Central environments](https://www.solvingdynamics365.com/guides/business-central-environments) explains the storage and environment lines, and [common Business Central ISV add-ons](https://www.solvingdynamics365.com/guides/common-business-central-isv-addons) is the other recurring cost most quotes leave out. ### Frequently asked questions **Can I mix Essentials and Premium users?** No. In a single tenant all full users must be on the same SKU — either all Essentials or all Premium. A small service department that needs Premium modules forces every other full user up to Premium as well. **What can a Team Member license actually do?** Read access plus a narrow set of write actions: time entry, expense entry, approvals, updating their own data, and consuming reports. It is not a general data-entry license — posting transactions, processing orders, or creating items is not allowed. **Is there a free license for our accountant?** Yes. The External Accountant license is free, has the same rights as a full user, and is scoped to the company the accountant supports. **When is Premium required?** When anyone in the company uses the manufacturing or service management modules. Those are the two modules that separate Premium from Essentials. --- # Business Central on-premises vs SaaS The real differences between Business Central on-premises and the SaaS (online) deployment — features, customisations, costs. Source: https://www.solvingdynamics365.com/guides/business-central-onprem-vs-saas Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-25 Business Central is available in two deployment shapes: **on-premises** (you host it on your own hardware or in your own Azure subscription) and **online / SaaS** (Microsoft hosts and operates it). Both run the same product core, but the operational model, customisation model, and feature parity diverge in ways that matter to the buying decision. ## SaaS (Business Central online) Hosted in Microsoft datacentres. Microsoft handles infrastructure, updates, backups, scaling. Customers configure and customise within the constraints of the SaaS model. Updates are continuous — minor monthly updates and two major waves per year, applied by Microsoft on a published schedule. The dominant deployment for new customers since around 2018. ## On-premises Installed on customer infrastructure — either physical, customer's Azure / AWS / Hyper-V, or a hosting partner's environment. The customer owns the SQL Server, the Business Central server, the management portal. Updates are applied when the customer chooses. The historical deployment model; still the choice for some regulated industries and customers with deep customisations. **Feature differences.** - **Microsoft AppSource.** SaaS-only — most ISV apps are SaaS-only since around 2022. - **Power Platform integration.** Both, but SaaS has tighter, more automatic integration; on-premises requires hybrid configuration and a Power Platform Dataverse gateway. - **Copilot features.** SaaS only — AI features depend on Microsoft cloud services. - **Embedded apps and Teams integration.** SaaS only. - **C/AL on-premises legacy.** On-premises can still run a hybrid C/AL + AL model if customers haven't fully migrated; SaaS is AL-only. - **Custom dev tools.** SaaS has a sandboxed environment per tenant; on-premises has direct service tier access. The SaaS feature set is broader and grows faster. Microsoft's investment is unambiguously SaaS-first. **Customisation model.** - **SaaS** — only **extensions** in AL. No direct database changes, no per-tenant code on the service tier. Per-tenant extensions deployable; AppSource for global ISV apps. - **On-premises** — extensions, AppSource apps, and additionally direct service-tier modifications if the customer chooses. The freedom is wider but the maintenance burden is heavier. The "no direct service tier" rule in SaaS is what enables continuous Microsoft updates without breaking each tenant — but it also means some legacy modifications (deep base-app rewrites) can't migrate as-is. **Cost.** - **SaaS** — per-user subscription, no infrastructure cost, no admin labour for hosting. Predictable, growing linearly with users. - **On-premises** — perpetual licence (or BREP subscription) + SQL Server licence + infrastructure cost + admin labour. Lower marginal cost at scale but higher upfront commitment. For most mid-market customers, SaaS is cheaper TCO once you account for admin labour and update overhead. For very large customers with existing infrastructure, on-premises can be cheaper at scale but requires real ops capability. **Update cadence.** - **SaaS** — automatic. Two major waves (April and October) with a one-cycle deferral option. Minor updates monthly. - **On-premises** — customer chooses. Many run a major version behind to wait for ISVs to certify on the latest. Updates can be deferred indefinitely (within Microsoft's support window — typically Mainstream + Extended). ## Performance and scale Both can handle a few hundred concurrent users without issue. SaaS isolates each tenant in Azure SQL Database; on-premises shares SQL Server resources across tenants. Large customers running into SaaS limits are a known but rare scenario; Microsoft offers premium SaaS tiers and dedicated capacity for the largest. ## Data residency SaaS is hosted in Microsoft datacentre regions you select at provisioning. Some regions and some regulatory regimes still require on-premises (or a partner-hosted sovereign cloud). For most regions, SaaS data residency is sufficient. ## Migration path on-premises → SaaS Microsoft provides **cloud migration tool** moving data from BC on-premises (and NAV 2015+) to BC SaaS: 1. Install the on-premises cloud migration tool. 2. Authenticate against the SaaS tenant. 3. Replicate selected companies and data. 4. Validate; cut over. Extensions must be re-deployed against SaaS. Custom modifications need rebuilding as extensions. Plan months for a real migration. **When on-premises still wins.** - Regulated industries with strict data sovereignty. - Very deep customisations that haven't been refactored to extensions. - Specific integrations to on-premises legacy systems that can't be opened up. - Customers with strong opinions about cloud and a true on-premises ops capability. ## When SaaS is the choice Everyone else. New BC deployments default to SaaS unless there's a specific reason to do otherwise. **Common pitfalls.** - **Lift-and-shift expectations.** Customers expect on-premises customisations to "just work" on SaaS. They don't; refactoring is required. - **Update unpreparedness on-premises.** Skipping updates for years; major version jumps become painful migrations. - **AppSource availability.** Customers move on-prem to SaaS and discover the partner extension they relied on isn't certified for SaaS. The strategic direction is unambiguous: SaaS is the future. New investments should plan accordingly. ## Where to go next If the answer is SaaS, the move is [migrating from NAV on-premises to Business Central SaaS](https://www.solvingdynamics365.com/guides/migrating-from-nav-on-premise-to-bc-saas) and the operating model is [Business Central environments](https://www.solvingdynamics365.com/guides/business-central-environments) plus [release waves](https://www.solvingdynamics365.com/guides/business-central-release-waves). The customisation constraint is explained in [per-tenant extensions vs AppSource](https://www.solvingdynamics365.com/guides/per-tenant-extensions-vs-appsource); the residency question in [data residency and compliance](https://www.solvingdynamics365.com/guides/data-residency-and-compliance-in-dynamics-365). ### Frequently asked questions **Which features are only available in Business Central online?** Copilot and AI features, AppSource (most ISV apps are SaaS-only since around 2022), embedded Teams integration, and the tightest Power Platform integration. On-premises can still run a hybrid C/AL plus AL model; SaaS is AL extensions only. **How do updates differ between SaaS and on-premises?** SaaS updates automatically — two major waves in April and October with a one-cycle deferral option, plus monthly minor updates. On-premises customers choose when to update and often run a version behind, but skipping updates for years turns the next upgrade into a migration project. **Is SaaS cheaper than on-premises?** For most mid-market customers, yes, once admin labour, SQL Server licensing, infrastructure, and update overhead are counted. Very large customers with existing infrastructure and a real operations team can run on-premises cheaper at scale. **How do I migrate from on-premises to Business Central online?** With Microsoft's cloud migration tool, which replicates companies and data from BC on-premises or NAV 2015+ into the SaaS tenant. Extensions must be redeployed and any direct service-tier modifications rebuilt as extensions — plan months, not weeks. **When does on-premises still make sense?** Strict data-sovereignty regimes, deep customisations not yet refactored to extensions, integrations to legacy systems that cannot be exposed, and organisations with a genuine on-premises operations capability. Everyone else defaults to SaaS. --- # Business Central performance tuning Where Business Central performance problems come from, and the AL and configuration patterns that fix them — keys, queries, locking, and async jobs. Source: https://www.solvingdynamics365.com/guides/business-central-performance-tuning Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-25 Business Central is fast out of the box, but custom code, large data volumes, and chatty integrations can all degrade it. The fixes are well-known. ## Read the telemetry first Every tenant emits **performance telemetry** to a partner-configured Application Insights workspace. Long-running pages, slow API calls, lock timeouts, and inefficient SQL queries are all reported. Diagnose with telemetry before guessing. ## SetLoadFields When you read a record but only need a subset of fields, call `SetLoadFields()` first. The platform issues a narrower SELECT, dramatically cutting I/O for large tables. The single highest-yield optimisation in many extensions. ## Keys and indexes Tables have **keys** (the AL term for indexes), and queries are fastest when a key matches the SetRange / SetFilter pattern in code. Custom queries on standard tables often need a custom key declared in a table extension. Watch for *MaintainSiftIndex* on flow fields — SIFT keys speed up SUMs but slow inserts. ## FlowField pitfalls Pages that display FlowFields recalculate them on every refresh. For high-volume lists, hide or compute on demand rather than on load. ## Locking Posting code locks rows. Long-running custom code that holds locks blocks other users. Patterns: commit between independent units of work; avoid running OnAfterPostXyz subscribers that do slow external calls inside the transaction; move heavy work to **job queue entries** that run asynchronously. ## Job queue The **Job Queue** is BC's built-in scheduler. Use it for nightly batch routines, asynchronous integrations, and any code that doesn't need to complete before the user gets a response. Configurable retries, parallelism limits, and isolation. ## API performance API calls obey the same rules as page calls — `SetLoadFields`, `$select` query parameter, and `$expand` instead of N+1 round-trips. Honour the platform's 429 throttling rather than retrying immediately. ## Reports Long reports running interactively block the user. Schedule them via the Job Queue or **Report Inbox**, where the user gets a notification when the PDF is ready. ## Pages Pages with hundreds of fields, many FactBoxes, or heavy AL `OnAfterGetRecord` triggers are slow to refresh. Profile with the AL profiler in VS Code. ## Database growth Stale data (orphan attachments, old change-log entries, completed but un-archived job queue entries) inflates storage and slows queries. Schedule cleanup routines. ## Test at scale Performance tests pass against a 1,000-row sandbox and fail against a 1,000,000-row production. Test against representative data volumes before go-live. --- # Business Central posting setup errors The Business Central posting group errors — Gen. Posting Setup, VAT Posting Setup, Customer and Vendor Posting Group, Inventory Posting Setup, Direct Posting, blocked accounts — with cause, fix, prevention. Source: https://www.solvingdynamics365.com/guides/business-central-posting-setup-errors Section: Business Central / Troubleshooting Published: 2026-09-03 Posting groups are Business Central's way of turning a document into ledger entries without asking the user for an account number: the customer says which receivables account, the item says which revenue and inventory accounts, the two together say which VAT accounts. When a combination is missing or an account on it is blank, posting stops with one of a small family of messages that all look alike. This reference decodes them. The wider posting-groups model is in [posting groups in Business Central](https://www.solvingdynamics365.com/guides/posting-groups-in-business-central); errors about dates, dimensions, and number series are in [journal and document posting errors](https://www.solvingdynamics365.com/guides/business-central-journal-and-document-posting-errors). ## The pattern behind every message Each message names a setup table and the key it looked for. Read it as "I looked up this combination and found nothing (does not exist)" or "I found it but the account I need on it is blank (must have a value)". The fix is always in the named setup table; the prevention is always about whether the record that carries the posting group — customer, vendor, item, G/L account, location, bank account, fixed asset — was set up completely. ## General posting setup ### "The Gen. Posting Setup does not exist. Identification fields and values: Gen. Bus. Posting Group='X', Gen. Prod. Posting Group='Y'" **Symptom.** A sales or purchase document, or a journal line with a customer or vendor account, fails to post. **Cause.** No row in General Posting Setup for that business group (from the customer or vendor) and product group (from the item, resource, G/L account, or item charge) combination. Typical after a new customer group, a new item category with its own product group, or a migrated record with a group that does not exist in this company. **Fix.** Open General Posting Setup, create the combination, and fill at least Sales Account, Purchase Account, and — for items — COGS Account and Inventory Adjustment Account. Use the Copy action from a similar row. If the group on the record is simply wrong (a domestic customer tagged EXPORT), fix the record instead of creating a combination that should not exist. **Prevention.** Decide the matrix of business × product groups at implementation and create every legitimate cell; block the illegitimate ones by not creating them. ### "Sales Account must have a value in General Posting Setup: Gen. Bus. Posting Group=X, Gen. Prod. Posting Group=Y. It cannot be zero or empty." **Symptom.** Same trigger, but the combination exists. **Cause.** The row exists with a blank account for the operation being posted. Sales invoices need Sales Account; sales credit memos Sales Credit Memo Account when the separate account feature is on; purchase documents Purchase Account; item postings COGS and Inventory Adjustment; discounts their own accounts when discount posting is set to post discounts separately. **Fix.** Fill the named account. The Suggest Accounts action proposes from neighbouring rows. **Prevention.** After creating a combination, post one document of each type it will carry in a sandbox. ## VAT posting setup ### "The VAT Posting Setup does not exist. Identification fields and values: VAT Bus. Posting Group='X', VAT Prod. Posting Group='Y'" **Symptom.** A document or journal line fails on VAT calculation, sometimes at line entry rather than at posting. **Cause.** No row for the customer's or vendor's VAT business group and the item's or account's VAT product group. Common with cross-border customers, reverse-charge purchases, and items marked with a reduced-rate group nobody set up. **Fix.** Create the combination in VAT Posting Setup with VAT Calculation Type, VAT %, Sales VAT Account, and Purchase VAT Account (and Reverse Charge VAT Account for reverse charge). Zero-rated and exempt combinations still need a row, with 0%. **Prevention.** Model the VAT matrix explicitly — domestic, EU, export × standard, reduced, zero, exempt — and give every cell a row. [Business Central VAT setup](https://www.solvingdynamics365.com/guides/business-central-vat-setup) walks the design. ### "Purchase VAT Account must have a value in VAT Posting Setup …" Same as the general case: the row exists, the account for this direction is blank. Fill it. ## Customer, vendor, and bank posting groups ### "Receivables Account must have a value in Customer Posting Group: Code=X." / "Payables Account must have a value in Vendor Posting Group: Code=X." **Symptom.** Any posting involving a customer or vendor in that group fails. **Cause.** The posting group exists but its control account is blank, or the group was created for a migration and never completed. Also appears for Payment Disc. Debit/Credit, Interest, Additional Fee, and Invoice Rounding accounts when those features are used. **Fix.** Fill the accounts on the Customer Posting Groups or Vendor Posting Groups page. **Prevention.** One group per control account you actually want on the balance sheet; do not create groups speculatively. ### "The Customer Posting Group does not exist." / "Customer Posting Group must have a value in Customer: No.=X." **Cause.** Either the code on the customer points at a group that was deleted or renamed, or the customer card has no group at all — typical of records created through the API or a configuration package that skipped the field. **Fix.** Set the group on the customer; recreate the group if it was deleted. **Prevention.** Use customer and vendor templates so every new record gets posting groups by default; see [customer and vendor templates](https://www.solvingdynamics365.com/guides/customer-and-vendor-templates-in-business-central). ### "G/L Account No. must have a value in Bank Account Posting Group: Code=X." **Cause.** A bank account's posting group has no G/L account, so payment journals and bank reconciliations cannot post. **Fix.** Fill it on Bank Account Posting Groups. ## Inventory posting setup ### "The Inventory Posting Setup does not exist. Identification fields and values: Location Code='X', Invt. Posting Group Code='Y'" **Symptom.** An item ledger posting — receipt, shipment, adjustment, transfer — fails, or Post Inventory Cost to G/L reports errors. **Cause.** Inventory posting setup is per location × inventory posting group. A new location, or an item with a new inventory posting group, needs a row for every location it will move through — including blank location if items are posted without one. **Fix.** Create the row with Inventory Account (and, for manufacturing, WIP and capacity variance accounts). Copy from the existing location's rows. **Prevention.** Adding a location is a setup checklist, not a single record: inventory posting setup, warehouse settings, and bin setup all follow. ### "Inventory Posting Group must have a value in Item: No.=X." / "Gen. Prod. Posting Group must have a value in Item: No.=X." **Cause.** An item created without posting groups — again, typically through the API, a configuration package, or a copied item from a template that lacked them. **Fix.** Set the groups on the item card. **Prevention.** Item templates with posting groups filled; see [item templates in Business Central](https://www.solvingdynamics365.com/guides/item-templates-in-business-central). ## G/L account state ### "Direct Posting must be equal to 'Yes' in G/L Account: No.=X. Current value is 'No'." **Symptom.** A journal line or a document line with a G/L account fails. **Cause.** The account has Direct Posting off. Control accounts — receivables, payables, inventory, VAT, bank — are set that way deliberately so the sub-ledger stays reconciled to the G/L. **Fix.** Post through the sub-ledger: a customer or vendor account on the journal line, an item on the document line, the bank account rather than its G/L account. For a genuine one-off correction, switch Direct Posting on, post, and switch it off again in the same sitting — and record why. **Prevention.** Leave Direct Posting off on every control account. Recurring reconciliation differences at month-end are almost always somebody posting directly; close the hole rather than fixing the symptom each period — [month-end close](https://www.solvingdynamics365.com/guides/business-central-month-end-close) covers the discipline. ### "Blocked must be equal to 'No' in G/L Account: No.=X. Current value is 'Yes'." / "Account Type must be equal to 'Posting' in G/L Account: No.=X." **Cause.** The account is blocked, or it is a Heading, Total, or Begin/End-Total account that cannot carry postings. Common after a chart-of-accounts cleanup renumbered accounts but a posting group still points at the old one. **Fix.** Point the posting group at the correct posting account; unblock only if the account should still be in use. **Prevention.** Before blocking an account, check where it is used with the Where-Used action on the chart of accounts. ## Fixed assets ### "FA Posting Group must have a value in Fixed Asset: No.=X." / "Acquisition Cost Account must have a value in FA Posting Group: Code=X." **Cause.** The asset has no posting group, or the group lacks the account for the posting type (acquisition, depreciation, disposal, gain/loss, maintenance). **Fix.** Complete the FA posting group; every posting type the asset will go through needs its account. **Prevention.** Set up FA posting groups per asset class before the first acquisition; [fixed assets in depth](https://www.solvingdynamics365.com/guides/business-central-fixed-assets-in-depth) has the account list. ## Finding gaps before users do Three habits catch nearly all of these before go-live: complete every posting group page in one sitting and review it against the chart of accounts; post one sales invoice, one purchase invoice, one payment, and one item adjustment per group combination in a sandbox copy; and use the posting setup pages' filters for blank accounts after every migration or template change. The Adjust Cost and Post Inventory Cost to G/L batch jobs are the last line of defence — they surface every missing inventory combination at month-end, which is the least convenient time to learn about it. ### Frequently asked questions **What does 'The Gen. Posting Setup does not exist' mean?** The combination of the customer's or vendor's general business posting group and the item's or account's general product posting group has no row in General Posting Setup, so Business Central does not know which sales, purchase, COGS, and discount accounts to post to. Add the combination with its accounts, or fix the group on the record that is wrong. **Why does an invoice fail with 'Direct Posting must be equal to Yes in G/L Account'?** A journal line or document line is trying to post straight to a G/L account that has Direct Posting switched off — normally a control account such as receivables, payables, or inventory, which should only ever be posted to through the sub-ledger. Post through the customer, vendor, or item instead; only switch Direct Posting on for a genuine correction and switch it off again. **Which posting group does an item need?** Three: a general product posting group (drives revenue, COGS, and purchase accounts via General Posting Setup), a VAT product posting group (drives VAT accounts and rates via VAT Posting Setup), and an inventory posting group (drives the inventory account via Inventory Posting Setup, per location). Missing any one of them stops posting. **How do I find every missing posting setup combination in one go?** Open General Posting Setup and VAT Posting Setup and use the Suggest Accounts action on a new combination, or run the Posting Setup pages filtered to blank accounts. Then test-post a sales and a purchase document per customer and vendor group in a sandbox copy before go-live. --- # Business Central pricing tiers explained A practical look at Essentials, Premium, Team Members, External Accountants, and the hidden costs that matter beyond the SKU. Source: https://www.solvingdynamics365.com/guides/business-central-pricing-tiers-explained Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-31 Business Central's pricing looks deceptively simple — four named-user SKUs, one price each, all per user per month. The real cost lives in the choices around those SKUs. ## Essentials The default full-user licence. Covers financials, sales and purchasing, projects, inventory, warehouse, distribution, and basic supply chain. Most users in most companies are Essentials. ## Premium Essentials plus **manufacturing** and **service management**. There's one critical rule: in a single tenant, *every full user must be on the same SKU* — either all Essentials or all Premium. You cannot mix. So if your three-person service department needs Service Management, every other full user upgrades to Premium too. This is the single most surprising piece of BC pricing. Before accepting the Premium jump, do the arithmetic properly. The uplift applies to the whole full-user population, so the real question is not "is Premium worth it for the service team?" but "is Premium worth the uplift times *every* full user?" For a fifty-user tenant with three service technicians, an AppSource service-management ISV running on Essentials frequently wins on cost alone — and several capable ones exist. The same logic applies in reverse: a genuine manufacturer with routings and capacity planning shouldn't try to fake it on Essentials with spreadsheets to save the uplift. ## Team Members A low-cost licence for users who only need read access plus a narrow set of write actions — time entry, expense entry, approving documents, updating their own data, and consuming reports. **Not** for posting transactions, processing orders, or maintaining items. Trying to use Team Members for general data entry is the most common compliance failure on BC audits. ## External Accountant A free licence for the customer's external accountant, with the rights of a full user, scoped to one company. Used heavily in markets where SMBs rely on external bookkeepers. ## Device licences Available for shared shop-floor terminals where multiple users log in across a shift on the same device. Priced per device rather than per user, which makes them the right answer for warehouse scanning stations and production terminals staffed across shifts — three shifts of two operators on one terminal is one device licence, not six Essentials. ## Attach pricing in mixed tenants If a user already holds a qualifying Dynamics 365 base licence — say Sales Enterprise — Business Central can be added as an **attach** licence at a substantial discount, and vice versa. The rule is that the most expensive app must be the base. In companies running CRM and BC side by side this is worth modelling per user before signing anything; the mechanics are covered in [Dynamics 365 licensing explained](https://www.solvingdynamics365.com/guides/dynamics-365-licensing-explained). ## How to size the user mix The exercise that pays for itself: list every person who will touch the system and write down what they *do*, not which department they sit in. The classic mis-sizings, in order of frequency: - **Essentials for report readers.** Managers who "need access to everything" usually consume reports. That's Team Member — or better, a Power BI report and no BC licence at all. - **Essentials for approvers.** Someone whose only actions are approving purchase documents and expense reports fits Team Member exactly. - **Named users for shared stations.** Warehouse and shop-floor terminals want Device licences. - **Stockpiling for seasonality.** Named licences can be reassigned as staff change; handle seasonal peaks by reassignment, not by buying for the maximum headcount. Companies routinely over-buy full users by 20–30% because the default answer to "what licence?" was Essentials for everyone. Revisit the split twice a year against actual usage — BC's admin views show last login and effective permissions, which is all the evidence a downgrade decision needs. ## Hidden cost #1: storage Database capacity beyond the included quota is billed in GB. A heavy transactional tenant with several years of history hits the threshold eventually — but moving documents (attachments) to SharePoint/OneDrive keeps the BC database lean. ## Hidden cost #2: environments Additional production environments are extra. Sandboxes are mostly free up to a limit. ## Hidden cost #3: API calls Each tenant has a generous but finite API call quota. Chatty Power Automate flows or integrations can exceed it and need optimisation or capacity add-ons. ## Hidden cost #4: ISV add-ons Country localizations, vertical apps, integrations — each priced per user per month and stack on top of the base. Individually small, collectively a real monthly line; a typical mid-market tenant carries three to six paid AppSource apps. ## Where the actual numbers live Deliberately absent from this article: exact prices. Microsoft adjusts BC list pricing roughly annually (most recently upward), and any number written here would mislead within a year. The authoritative sources are the published price list on Microsoft's site and the Business Central licensing guide PDF — check both at renewal, not just at purchase. As a rough 2026 orientation: full users sit in the tens of dollars per user per month, Team Members under ten, and Premium carries an uplift of roughly 40% over Essentials. Budget the base licences, then double the total for year-one realism — implementation, ISVs, and integration work reliably match or exceed the licence line. The full licence-type detail (External Accountant scope, Team Member entitlements, compliance) is in [Business Central licensing and pricing](https://www.solvingdynamics365.com/guides/business-central-licensing-and-pricing), and the whole-platform view in [Dynamics 365 licensing explained](https://www.solvingdynamics365.com/guides/dynamics-365-licensing-explained). ### Frequently asked questions **Can I mix Essentials and Premium users in one tenant?** No. Every full user in a tenant must be on the same SKU, so three service technicians needing Service Management push every other full user to Premium. Price the uplift across the whole user base against an AppSource ISV running on Essentials before accepting it. **What can a Team Member licence do?** Read access plus time and expense entry, approvals, updating the user's own data, and consuming reports. It cannot post transactions, process orders, or maintain items — using it for general data entry is the most common compliance failure on BC audits. **When is a Device licence the right answer?** For shared shop-floor or warehouse terminals staffed across shifts — three shifts of two operators on one scanner station is one device licence, not six Essentials. **What are the hidden costs beyond user licences?** Database storage beyond the included quota, additional production environments, API call capacity for chatty integrations, and ISV add-ons — a typical mid-market tenant carries three to six paid AppSource apps. Budget the licences, then double the total for year-one realism. --- # Business Central release waves explained How Microsoft's twice-yearly release waves work for Business Central — preview, general availability, mandatory updates, and managed extensions. Source: https://www.solvingdynamics365.com/guides/business-central-release-waves Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-30 Microsoft ships major Business Central updates twice a year, on a fixed cadence long called **release waves**. Understanding the cadence — and what it requires of you — is essential for keeping a SaaS tenant healthy. One 2026 caveat up front: Microsoft is retiring the *release plan documents* that used to accompany each wave (roadmap content moves to the continuous AI at Work roadmap from September 2026), but the *update cadence itself is unchanged* — majors still land in April and October. The full story of that change is in [the 2026 wave 2 guide](https://www.solvingdynamics365.com/guides/dynamics-365-2026-wave-2-release-highlights); this guide covers the mechanics that still govern every tenant. ## The schedule **Wave 1** lands in April; **Wave 2** lands in October — so version numbers step twice a year (version 26 in April 2025, 27 in October 2025, 28 in April 2026, 29 in October 2026, and so on). Each major brings new application features, new AL platform capabilities, performance improvements, and — the part that bites the unprepared — deprecations announced one or two versions ahead of removal. Historically each wave came with a formal release plan published months in advance; going forward, feature disclosure is continuous via the roadmap, and the per-version "what's new" documentation remains the reliable record of what actually shipped. ## Preview A preview build is available roughly six weeks before general availability. Customers can spin up a **preview sandbox** from the admin centre, install their own extensions against it, and run regression tests against the upcoming version. This is the canonical window for partners to certify AppSource apps, and the canonical window for you to find out whether your per-tenant extensions survive the new runtime — before production finds out for you. ## General availability and rollout GA is a fixed date, but Microsoft rolls the update out across the tenant base over several weeks. Customers can request an early update from the admin centre — useful when you want the new version in UAT immediately — or let their scheduled window take it. Mandatory upgrades happen by a published cut-off date: you can defer within the allowed range, but there is no opting out indefinitely. A tenant that ignores scheduling ends up updated at Microsoft's convenience, which is exactly the behaviour the update window exists to prevent. ## The update window Customers configure an **update window** (a span of hours on a day of the week) when Microsoft is allowed to take their environment briefly offline to apply the update. Configure it carefully — outside business hours is the obvious answer, but pay attention to overnight batch posting, weekend cron jobs, bank file transmissions, and integration schedules that assume the API is always there. The window applies per environment, so production and sandboxes can (and should) run different schedules, with a sandbox taking each major first. ## Extensions A wave update reinstalls every installed extension against the new platform version. Extensions published to **AppSource** are pre-validated for compatibility — Microsoft runs technical checks against upcoming versions, which is a large part of AppSource's value. **Per-tenant extensions (PTEs)** are not: it is the customer's or partner's job to compile and validate them against the new runtime before the update window arrives. In practice this is where wave problems actually come from. Microsoft's own upgrade machinery very rarely breaks a vanilla tenant; an abandoned PTE using a deprecated event, written by a partner who is no longer engaged, breaks tenants every wave. If nobody currently owns your PTEs, that is the risk to fix — the [AL-Go CI/CD guide](https://www.solvingdynamics365.com/guides/business-central-cicd-with-al-go) shows how compilation against upcoming versions becomes automatic. ## Monthly updates Between majors, Microsoft pushes **monthly minor updates** — bug fixes, security patches, and small enhancements. These don't change the major version, don't require extension recompiles, and can't be skipped. They are also the reason the old NAV habit of "freeze the system, touch nothing" is dead: the platform moves monthly whether you engage or not, and the winning posture is a tenant whose extensions are continuously kept compatible rather than periodically rescued. ## Practical advice Treat each wave like a small recurring project with a named owner: 1. Six weeks out: create a preview sandbox, install all extensions, compile PTEs against the new version. 2. Run your critical-path processes — order-to-cash, purchase-to-pay, month-end — in the preview, plus whatever broke last time. 3. Fix and republish PTEs; chase ISVs whose AppSource apps show compatibility warnings. 4. Brief power users on visible changes and check deprecation lists for anything you still rely on. 5. Confirm the production update window and let the update land. Most teams get through both waves a year with a half-day each once the routine exists. The teams that suffer are the ones treating April and October as surprises — which, on a published fifteen-year-old cadence, they never are. ## Where to go next The developer's side of each wave is [upgrading AL code across BC versions](https://www.solvingdynamics365.com/guides/upgrading-al-code-across-bc-versions), and the warnings that turn into errors are in [AL compiler errors](https://www.solvingdynamics365.com/guides/al-compiler-errors-in-business-central). Sandboxes for the preview are covered in [Business Central environments](https://www.solvingdynamics365.com/guides/business-central-environments). The enterprise-tier equivalent of this cadence is [One Version and updates](https://www.solvingdynamics365.com/guides/dynamics-365-one-version-and-updates). ### Frequently asked questions **When do Business Central major updates ship?** April (wave 1) and October (wave 2), stepping the version number twice a year — version 28 in April 2026, 29 in October 2026. Monthly minor updates land in between and cannot be skipped. **Can I delay a major update?** Within the allowed range via the update window in the admin centre, but not indefinitely. Past the mandatory cut-off, Microsoft applies it at its own convenience. **What usually breaks on a wave update?** Not Microsoft's code — an unmaintained per-tenant extension using a deprecated event. AppSource apps are pre-validated; per-tenant extensions must be compiled against the preview build by the customer or partner. **How should a tenant prepare for each wave?** Six weeks out, create a preview sandbox, install all extensions, compile per-tenant extensions, run order-to-cash, purchase-to-pay, and month-end, fix and republish, chase ISVs with compatibility warnings, brief power users, then confirm the production update window. --- # Business Central telemetry and monitoring How to wire Business Central into Application Insights, what to watch for, and how to use telemetry to diagnose and prevent incidents. Source: https://www.solvingdynamics365.com/guides/business-central-telemetry-and-monitoring Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-25 Business Central emits detailed telemetry — every page load, API call, posting routine, error, and platform event — to Microsoft's **Azure Application Insights**. Partners and customers wire their tenants into their own Application Insights workspaces and use the data to monitor health, diagnose incidents, and improve their extensions. ## Setup Configure an Application Insights instrumentation key on the tenant (from the BC admin centre) for tenant-wide telemetry, on individual environments for environment-scoped telemetry, and inside the `app.json` of each extension for extension-scoped streams. The three layers can target the same workspace or different ones. ## What's emitted Microsoft documents dozens of standard telemetry events: page loads, report runs, job queue executions, API calls (with response time and status), authentication events, permission errors, AL runtime errors, lock timeouts, slow queries, database storage thresholds, environment lifecycle events (update started, completed, failed), and extension lifecycle events. Each event carries structured properties: tenant ID, environment, user, duration, exception details where applicable. ## Querying Application Insights uses **Kusto Query Language (KQL)**. A typical analysis query: filter `customEvents` to a date range, group by environment and event name, project p95 duration. Microsoft publishes a library of canned queries (the *BCTech* GitHub repo) for the most common questions: which pages are slow, which integrations time out, which users hit permission errors. ## Workbooks Application Insights *workbooks* turn KQL queries into shareable dashboards. Microsoft publishes a Business Central workbook with pre-built views of health, performance, and errors. Most partners customise it. ## Alerts Application Insights alerts fire on thresholds — error rate over 5%, lock timeouts more than N per minute, an environment failing to update — and route to Teams, email, or Azure Monitor action groups. Set them up *before* you need them. ## Custom telemetry Your AL extensions can emit their own telemetry via `Session.LogMessage` with a verbosity level (Verbose, Normal, Warning, Error, Critical). This is how you trace your own code's behaviour in production. ## Retention and cost Application Insights retains data for a configurable period (default 90 days), and charges by ingested volume. For high-volume tenants, sample verbose events and keep the structural ones. ## Operational reality A partner with a fleet of customer tenants and good telemetry can spot a release wave breaking change *before* the customer feels it. A partner without telemetry finds out by phone call. The investment is small; the leverage is large. --- # Business Central vs Acumatica Business Central vs Acumatica — per-user versus consumption pricing, construction, distribution and manufacturing editions, customisation platforms, partner channels, and fit. Source: https://www.solvingdynamics365.com/guides/business-central-vs-acumatica Section: Business Central / Comparisons Published: 2026-09-03 Acumatica is the mid-market ERP that Business Central partners lose deals to most often in North America, and the reasons are specific: a pricing model that does not count users, industry editions that ship rather than assemble, and a modern platform that developers like. Business Central answers with price transparency, the Microsoft stack, and an ecosystem several times larger. This guide sets them side by side. ## What each product is **Acumatica** is a cloud ERP founded in 2008, built on its own xRP platform (.NET), sold entirely through partners, and — since 2024 — owned by Vista Equity Partners. It ships industry editions: General Business, Distribution, Manufacturing, Construction, Retail, and Field Service, each with the modules that vertical expects. Its signature is consumption-based pricing: customers pay for the edition, the modules, and a resource tier tied to transaction volume, with unlimited users. It runs in Acumatica's cloud, in a partner's cloud, or on-premises. **Business Central** is Microsoft's SMB ERP: finance, sales, purchasing, inventory, warehouse, projects, service, and manufacturing on one database, extended through AL and AppSource, priced per named user, sold and implemented through Microsoft's partner channel, and integrated with Microsoft 365, the Power Platform, and Dataverse. See [what is Business Central](https://www.solvingdynamics365.com/guides/what-is-business-central). ## Head to head | Area | Acumatica | Business Central | | --- | --- | --- | | Pricing model | Edition + modules + resource tier; unlimited users | Per named user: Essentials $80, Premium $110, Team Members $8 (2026 list) | | Deployment | Acumatica cloud, partner cloud, or on-premises | Microsoft cloud (default) or on-premises | | Industry editions | Distribution, Manufacturing, Construction, Retail, Field Service ship as editions | Horizontal product; verticals through AppSource ISVs and partner solutions | | Financials | Strong: GL with sub-accounts and segments, multi-entity, intercompany, multi-currency | Strong: GL with dimensions and posting groups, multi-company, consolidation | | Distribution | Purchasing, inventory, warehouse, order management, matrix items | Purchasing, inventory with five costing methods, warehouse, item attributes and variants | | Manufacturing | Manufacturing Edition: BOMs, routings, MRP, scheduling, estimating, product configurator | Premium: production BOMs, routings, capacity, planning worksheet, subcontracting | | Construction | Construction Edition: job cost, AIA billing, retainage, change orders, compliance | Projects module plus ISV apps | | Field service | Field Service Edition | Service management on Premium; Dynamics 365 Field Service as the full product | | CRM | Built-in CRM | Basic built-in CRM; Dynamics 365 Sales as the full product | | Customisation | xRP platform, C#/.NET, low-code customisation projects, REST and OData APIs | AL extensions, Power Platform, REST API, AppSource | | Reporting | Generic inquiries, report designer, dashboards, Power BI connector | Financial reports, Power BI apps, Excel, Fabric | | Microsoft 365 | Integrations (Outlook add-in, Teams) | Native — Outlook, Teams, Excel, SharePoint, Copilot | | Partner ecosystem | Loyal, growing, North America-centric | Very large and global | | Update cadence | Two major releases a year, customer-scheduled | Two major waves a year plus monthly updates | ## Where Acumatica wins **Unlimited users.** For a business with 60 people who all touch the system a little — sales reps checking stock, technicians logging time, managers approving — a model that does not count users is compelling. Business Central's per-user pricing has the Team Member licence for light users, but every full user is a line item. **Industry editions.** Construction in particular: job cost, AIA progress billing, retainage, change orders, compliance tracking, and a field app in the box. Manufacturing Edition's estimating and product configurator, and Field Service Edition, are similarly complete. Business Central covers the same ground with a horizontal product plus ISVs, which is flexible but means the partner is assembling your solution. **Deployment choice.** Acumatica runs where you want it, including on your own servers with the same licence. Business Central on-premises exists but Microsoft's investment is unambiguously SaaS-first — see [Business Central on-premises vs SaaS](https://www.solvingdynamics365.com/guides/business-central-onprem-vs-saas). **Developer platform.** The xRP platform is .NET, well documented, and open; developers who know C# are productive quickly. AL is a smaller, Business-Central-specific language with a learning curve. ## Where Business Central wins **Ecosystem.** Thousands of partners worldwide, deep vertical specialists in most countries, and AppSource with a large catalogue of certified apps that Microsoft pre-tests against every release. Acumatica's partner network is strong but concentrated in North America, and its marketplace is smaller. **The Microsoft stack.** Business Central inside Outlook, Teams, Excel, and SharePoint; Power BI and Fabric for analytics; Power Automate and Power Apps for extension; Dataverse for integration with Dynamics 365 Sales, Customer Service, and Field Service; Copilot built in. For a Microsoft 365 shop this is the deciding factor more often than any feature. **Price transparency.** Published list prices per user against a partner quote built from edition, modules, and a resource tier that is hard to compare across vendors. Business Central is easier to budget and to benchmark — the [pricing page](https://www.solvingdynamics365.com/pricing/business-central) has the figures. **Localisation and global reach.** Localisations for dozens of countries from Microsoft and partners; multi-language, multi-currency, and VAT handling proven across Europe. Acumatica's international coverage is growing but thinner. **Continuous updates.** Twice-yearly waves plus monthly updates with extensions pre-validated on AppSource — a tenant that keeps its extensions healthy never does an upgrade project again. Acumatica customers schedule their own upgrades, which is flexibility for some and deferred maintenance for others. ## Where the differences do not matter Core financials and core distribution. Both handle general ledger, payables, receivables, banking, fixed assets, purchasing, inventory, and order-to-cash competently for a mid-market company. Neither loses on the fundamentals. ## How the decision usually gets made **User profile.** Many occasional users favours Acumatica; a defined core team plus approvers favours Business Central with Team Members. **Industry.** Construction is Acumatica's clearest win. Manufacturing and distribution are contested and come down to the local partner. Services and project firms, and anything that pairs with Dynamics 365 Sales or Field Service, favour Business Central. **Stack.** Microsoft 365 alignment is the strongest single predictor for Business Central. **Geography.** North America is competitive; outside it, Business Central's partner and localisation coverage is decisive more often than not. **Partner.** In both cases you are buying the partner as much as the product. [Choosing a Dynamics 365 partner](https://www.solvingdynamics365.com/guides/choosing-a-dynamics-365-partner) applies to either vendor's channel. ## Cost over five years Model both honestly with expected user growth and transaction growth. Acumatica's resource tiers step up with volume; Business Central's per-user line steps up with headcount. Implementation is comparable — partner-led, months not weeks. Acumatica has published a customer bill of rights that includes commitments on pricing transparency at renewal, which is worth reading; Microsoft adjusts Business Central list prices roughly annually and announces them publicly. ## The short version Acumatica is the stronger fit for businesses with many light users, for construction, and for companies that want a shipped industry edition and deployment choice. Business Central is the stronger fit for Microsoft 365 shops, for companies outside North America, for anyone pairing ERP with Dynamics 365 CRM apps, and for buyers who want published prices and the largest ecosystem in the category. The other mid-market ERPs on most shortlists are covered in [Business Central vs NetSuite](https://www.solvingdynamics365.com/guides/business-central-vs-netsuite) and [Business Central vs Odoo](https://www.solvingdynamics365.com/guides/business-central-vs-odoo). ### Frequently asked questions **How does Acumatica pricing differ from Business Central?** Acumatica does not charge per user. Its subscription is based on the edition, the modules, and a resource or transaction-volume tier, with unlimited users. Business Central charges per named user ($80 Essentials, $110 Premium as of 2026). Acumatica's model favours businesses with many occasional users; Business Central's favours businesses with a defined core team and light users on Team Member licences. **Which is better for construction companies?** Acumatica has a dedicated Construction Edition — job cost, AIA billing, retainage, change orders, compliance, and a field app — and is the stronger native fit for general contractors and subcontractors. Business Central covers construction through projects plus ISV apps, which works well but is assembled rather than shipped. **Which has the bigger ecosystem?** Business Central, by a wide margin — thousands of partners worldwide, a large AppSource marketplace, and the whole Microsoft 365, Power Platform, and Azure stack. Acumatica has a loyal, growing partner network and marketplace concentrated in North America and a modern, developer-friendly xRP platform. **Which should a distributor choose?** Both are credible. Acumatica's Distribution Edition and Business Central Essentials both cover purchasing, inventory, warehouse, and order management well. The decision usually comes down to pricing model (many users favours Acumatica), Microsoft 365 alignment (favours Business Central), and the local partner's depth in your niche. --- # Business Central vs Dynamics NAV What changed in the move from Dynamics NAV to Business Central, and what that means for organisations still running NAV. Source: https://www.solvingdynamics365.com/guides/business-central-vs-dynamics-nav Section: Migrations Published: 2026-05-01 Updated: 2026-08-31 Business Central is the direct successor to Dynamics NAV — same posting routines, same dimensions, same general ledger logic — but the operating model around it is fundamentally different. If you're still running NAV, understanding those differences is the key to scoping a sensible upgrade project. ## Deployment NAV was overwhelmingly on-premise, installed on customer-managed Windows servers and SQL Server. Business Central is **SaaS-first**: Business Central Online runs on Azure in Microsoft data centres, with Microsoft owning patching, infrastructure, and twice-yearly platform updates. On-premise Business Central exists but the vast majority of new implementations are cloud. ## Customisation model This is the biggest single change. NAV was customised through the **C/AL** language and the *base object* model: partners modified Microsoft's own objects directly. Upgrades were slow and expensive because every modification had to be re-merged. Business Central replaces C/AL with **AL** and an **extension** model — partners ship code as separate, side-by-side AL extensions, and the base application stays untouched. Upgrades happen automatically twice a year, with extensions tested against the new platform in advance. ## User interface NAV's Windows client is gone. Business Central is fully web-based, with first-class **mobile**, **Outlook**, and **Teams** experiences, plus an embedded **Copilot** for sales line suggestions, bank reconciliation, and other tasks. ## Release cadence NAV shipped roughly once a year with a long support tail. Business Central ships **two major updates per year** (Wave 1 in April, Wave 2 in October) plus monthly hotfixes, with mandatory updates on a customer-defined window. ## Licensing NAV was a perpetual license with annual maintenance. Business Central is a per-user subscription — Essentials, Premium, or Team Member. ## What stays the same It's worth saying clearly, because the marketing makes BC sound like a different product: the application core is NAV. Posting groups, dimensions, the general journal, item costing, the way a sales order flows to a posted invoice — a NAV finance user sits down in Business Central and recognises everything within an hour. NAV skills transfer almost completely; what changes is the technology wrapper and the commercial model. That matters when you plan training: budget for "where did my button go" web-client orientation, not for re-learning the ERP. ## The support clock Mainstream support for every NAV version has ended; the last version, NAV 2018, is in extended support, and that runs out too — into 2028, after which there are no security patches at all. Nothing stops a NAV system from running past that date, but each year the surrounding world moves: TLS requirements, bank formats, e-invoicing mandates, Windows Server versions, and the shrinking pool of C/AL developers willing to maintain it. Most organisations don't leave NAV because it stopped working; they leave because compliance or integration requirements finally demand something the old platform can't do, usually at the least convenient moment. Planning the move on your own schedule is strictly better than doing it under a deadline. ## The three realistic paths 1. **NAV → Business Central Online (SaaS).** The default and what Microsoft's tooling targets. Data migrates via the [cloud migration tooling](https://www.solvingdynamics365.com/guides/migrating-from-nav-on-premise-to-bc-saas); code gets rebuilt as AL extensions. You give up direct database access and server control, and gain automatic updates and the full cloud surface (Copilot, Power Platform connectors, telemetry). 2. **NAV → Business Central on-premise.** Same modern application, self-hosted. Legitimate when data residency or a hard dependency on direct SQL access forces it, but you keep the infrastructure burden and lose the cloud-only features — see [BC on-premise vs SaaS](https://www.solvingdynamics365.com/guides/business-central-onprem-vs-saas) before choosing this deliberately rather than by inertia. 3. **Stay on NAV, contained.** Defensible only as a short bridge — e.g. a company being sold or absorbed within two years. As a strategy it just moves the project later and makes it more expensive. ## The upgrade path in practice Microsoft provides tooling that lifts NAV data into Business Central, but custom C/AL modifications must be **re-built as AL extensions**. For heavily customised NAV deployments, the project often looks more like a re-implementation than a database upgrade, which is why many customers use the move as an opportunity to clean house. That clean-house step is where projects are won. A typical fifteen-year NAV database carries hundreds of modifications nobody can explain, half of which duplicate features Business Central now ships standard (approval workflows, item attributes, bank feeds) or that an AppSource app covers. The right sequence is: inventory the customisations, kill everything that standard BC or an [ISV add-on](https://www.solvingdynamics365.com/guides/common-business-central-isv-addons) covers, and rebuild only the genuinely differentiating remainder in AL. Teams that skip the inventory and port everything one-to-one pay twice — once to rebuild code they didn't need, and again at every [release wave](https://www.solvingdynamics365.com/guides/business-central-release-waves) when it has to be maintained. ## How to decide If you're on NAV today, the question is no longer *whether* Business Central — Microsoft ships no alternative successor — but *when* and *how much to re-implement*. Lightly customised NAV: migrate data, adopt standard, done in months. Heavily customised NAV: treat it as a re-implementation with data history migration as a scoped decision (many teams bring opening balances and open documents only, keeping the NAV database read-only for lookups). Either way, the cost driver is your customisation debt, not the software. ### Frequently asked questions **Is Business Central the same product as Dynamics NAV?** The application core is NAV — posting groups, dimensions, the general journal, item costing, and document flows are recognisable within an hour. What changed is the wrapper: a web client instead of Windows, AL extensions instead of C/AL base-object modification, twice-yearly automatic updates, and per-user subscription licensing. **When does NAV support end?** Mainstream support has ended for every NAV version. NAV 2018, the last release, is in extended support into 2028, after which there are no security patches at all. Most organisations leave earlier because a compliance, banking, or e-invoicing requirement forces the move. **Do NAV customisations carry over to Business Central?** No. C/AL modifications to base objects must be rebuilt as AL extensions. Inventory the customisations first, drop everything that standard Business Central or an AppSource app now covers, and rebuild only the genuinely differentiating remainder. **What are the realistic paths off NAV?** NAV to Business Central online (the default that Microsoft's tooling targets), NAV to Business Central on-premises when data residency or direct SQL access truly forces it, or staying on NAV as a short bridge of at most a couple of years. There is no alternative successor. --- # Business Central vs Finance and Operations When Business Central is the right ERP, when you've outgrown it, and how the move to Dynamics 365 Finance and Supply Chain Management actually goes. Source: https://www.solvingdynamics365.com/guides/business-central-vs-finance-and-operations Section: Migrations Published: 2026-08-27 Updated: 2026-08-27 The "Business Central or Finance and Operations" question comes up in almost every Microsoft ERP conversation, and the honest answer is that they solve different problems for different organisations. This guide walks the criteria that actually decide, in the shape they surface in real projects. Business Central (BC) is the SaaS ERP for small and mid-sized businesses — descendant of Dynamics NAV. Dynamics 365 Finance and Supply Chain Management (F&O) is the enterprise ERP — descendant of Dynamics AX. Both are Microsoft products, both are Dynamics 365, both run on Azure. Everything else about them is different: architecture, extensibility model, licensing, and the shape of the implementation. ## The rough size line For fast triage, the rules of thumb: below roughly 100 concurrent ERP users and around €200M revenue, Business Central is almost always the right choice. Above roughly 500 users and €500M+ revenue, F&O is almost always right. In between is the interesting zone, and headcount alone does not decide. The deciding factors above the numbers are the shape of the operations, not the raw scale. ## When Business Central is right Business Central fits when the business: - Runs in a small number of legal entities — one, maybe a handful. - Has straightforward accounting: one chart of accounts per country, one currency dominant, standard VAT / sales tax with a country localisation available. - Has moderate operational complexity: multi-location warehousing, light assembly or trade goods, jobs and project accounting for services. - Wants a fast time-to-value: a 3–6 month implementation is the expected shape. - Has a partner-led model rather than an internal ERP platform team. A business at 300 users running BC well is normal. A business at 800 users running BC well exists but is less common — usually because the operational complexity is genuinely simple even at scale. The extensibility model (AL extensions, monthly updates, non-breaking upgrades) is the platform's biggest structural advantage. Once configured, BC keeps updating itself and the extensions come along for the ride. The trade-off is a lower ceiling on customisation depth. ## When Finance and Operations is right F&O fits when the business has one or more of: **Multi-entity complexity.** More than a handful of legal entities, especially across countries with different currencies, statutory frameworks, and tax rules. F&O's shared master data (data-sharing policies, global address book) and its per-entity posting layers were built for this. **Deep manufacturing.** Process manufacturing with formulas, co-products, batch attributes, and catch weight. Advanced discrete manufacturing with engineering change management and configure-to-order. Manufacturing execution integration. BC has light manufacturing; F&O has enterprise manufacturing. **Advanced warehousing.** Directed put-away and picking, wave and load management, license plate tracking, cluster picking, high-volume warehouse operations. BC has basic warehousing; F&O's Advanced Warehouse Management is a serious WMS in its own right. **Retail / commerce.** POS, e-commerce, clienteling — Dynamics 365 Commerce runs on F&O infrastructure. If the business is retail-first, F&O is the platform whether or not the finance workload alone would justify it. **Regulatory complexity.** Public sector, defence contracting, life sciences with FDA validation, industries with heavy audit and reporting requirements. F&O's localisation depth, Electronic Reporting framework, and audit trail were built for this workload. **Internal platform capability.** F&O implementations succeed when there is an internal team who own the platform — configuration, governance, upgrades, integrations. Without that team, even the best SI can only carry the deployment so far. If the business does not have and will not build that capability, F&O will be a mismatch regardless of the requirements. ## Where the choice is genuinely hard The middle zone — say 100 to 500 users, one to five legal entities, moderate complexity — is where both platforms plausibly work. What breaks the tie: **Is the operational complexity growing?** If the business is growing into more entities, more countries, more product complexity, F&O's ceiling matters more than BC's speed. If the business is stable in shape, BC's simpler operating model wins. **Is there a manufacturing story?** BC can handle light manufacturing but the depth ends quickly. If manufacturing is central and non-trivial, lean toward F&O even at lower headcount. **How much integration to Microsoft business apps?** Both integrate to Sales, Customer Service, Marketing, Copilot Studio. F&O has **Dual-write** for real-time bidirectional sync to Dataverse; BC uses connectors and Power Automate flows. For deep integration to the CRM apps, F&O has the edge. **How mature is the internal IT team?** F&O demands more platform maturity from the customer. A team that runs a couple of SaaS applications well is BC-ready; F&O needs the muscle to run a genuine enterprise platform. ## What the migration looks like The "we've outgrown BC" migration to F&O is a re-implementation, not an upgrade. There is no in-place migration path — the data models, the extensibility model, and the tooling are fundamentally different. Typical shape: 1. **Business case and platform decision.** Six weeks to three months. Confirms F&O is the target and quantifies the change. 2. **Design and build.** Six to eighteen months, depending on scope. A global template gets built, tested against the current business processes, and refined. 3. **Data migration.** Master data (customers, vendors, items, chart of accounts) moves first, transactional data last. History typically stays in BC in read-only form; only current-year balances and open transactions move. 4. **Cutover.** A weekend cutover for a single entity, phased for multi-entity groups. 5. **Steady state.** F&O runs on the Wave release cadence like BC — but the internal team has to keep up with a much larger platform. Ten-plus months from signature to go-live is typical for a mid-size migration; twenty-four months is not unusual for a global template. Budget rule of thumb: the F&O implementation costs 3–10× a comparable BC one. Because of that cost profile, "migrate to F&O" is almost never the right answer if BC still meets the requirements. Force the "why now" question. The best migrations are triggered by concrete requirements BC cannot meet — a new acquisition adding twenty entities, a manufacturing site whose complexity BC cannot model, a compliance regime that BC's localisation does not cover. ## Running both Some groups run both. F&O centrally for the large entities where the depth is needed, BC in smaller subsidiaries where a full F&O footprint is overkill. Microsoft's guidance in this scenario is that BC subsidiaries consolidate into F&O for group reporting through standard integrations, and that the manufacturing / operational depth stays where it belongs. It is a valid pattern for global groups; it also adds an integration layer that has to be owned by someone. ## The short version Pick BC when the business is under a few hundred users, has straightforward operations, wants a fast implementation, and does not have — or want to build — an internal ERP platform team. Pick F&O when the business runs across many entities and countries, has deep manufacturing or warehousing, sits in a regulated industry, or already has the internal muscle to own an enterprise platform. In the middle, force the "what specifically about the operations requires F&O" question. If nothing specific requires it, BC almost always wins on total cost of ownership. ## Where to go next For each product in depth, [what is Business Central](https://www.solvingdynamics365.com/guides/what-is-business-central) and [what is Dynamics 365 Finance](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-finance). If you are already on Business Central and hitting the line, [growing from Business Central to Finance and SCM](https://www.solvingdynamics365.com/guides/growing-from-business-central-to-finance-and-scm) covers the move. The licensing side is [Dynamics 365 licensing explained](https://www.solvingdynamics365.com/guides/dynamics-365-licensing-explained), with current prices for [Business Central](https://www.solvingdynamics365.com/pricing/business-central) and [Finance and Operations](https://www.solvingdynamics365.com/pricing/finance-and-operations). ### Frequently asked questions **What is the rough size line between BC and F&O?** Below roughly 100 concurrent ERP users and around 200M euro revenue, Business Central is almost always right. Above roughly 500 users and 500M+ euro revenue, F&O is almost always right. In between, the deciding factor is operational shape — entities, manufacturing depth, warehousing, regulatory load — not headcount. **Can a large company run Business Central?** Yes. A business at 300 users running BC well is normal, and 800-user BC deployments exist — usually where the operational complexity is genuinely simple even at scale. Raw user count alone does not force F&O. **What does F&O demand that BC does not?** An internal platform team. F&O implementations succeed when an internal team owns configuration, governance, upgrades and integrations. Without that capability, F&O is a mismatch regardless of requirements — BC's partner-led model is far more forgiving. **When does deep manufacturing force F&O?** Process manufacturing with formulas, co-products, batch attributes and catch weight, or advanced discrete manufacturing with engineering change management and configure-to-order. BC has light manufacturing; F&O has enterprise manufacturing. --- # Business Central vs NetSuite Business Central vs NetSuite for mid-market ERP — pricing models, multi-entity depth, customisation, the Microsoft 365 factor, and which one fits which company. Source: https://www.solvingdynamics365.com/guides/business-central-vs-netsuite Section: Business Central / Comparisons Published: 2026-09-03 Business Central and NetSuite are the two cloud ERPs most mid-market companies end up shortlisting when they outgrow accounting software. Both are mature, both are genuinely cloud-native rather than hosted client-server, and both will run a company from $10 million to several hundred million in revenue. The differences are in pricing model, multi-entity depth, customisation approach, and how much the Microsoft 365 factor weighs in your organisation. This guide compares them the way the decision actually gets made. If you are still deciding whether you need a mid-market ERP at all, start with [what is Business Central](https://www.solvingdynamics365.com/guides/what-is-business-central) and come back. ## The two products in one paragraph each **Business Central** is Microsoft's SMB-to-mid-market ERP, the SaaS successor to Dynamics NAV. It covers finance, sales, purchasing, inventory, warehouse, projects, service, and light-to-medium manufacturing on one tightly integrated application, extended through AL extensions and a large AppSource ISV marketplace, delivered through a partner channel, and updated twice a year by Microsoft. It runs on its own database and integrates with Dataverse, Microsoft 365, and the Power Platform. **NetSuite** is Oracle's cloud ERP, built cloud-first from the late 1990s and the largest pure-cloud ERP by customer count. It covers finance, order management, inventory, CRM, e-commerce (SuiteCommerce), professional services automation, and HR in one platform on one database, with the SuiteCloud platform (SuiteScript, SuiteFlow, SuiteBuilder) for customisation and OneWorld for multi-subsidiary management. It is sold largely direct by Oracle with a partner network alongside. ## Head to head | Area | Business Central | NetSuite | | --- | --- | --- | | Target company | SMB to mid-market, roughly 5–300 users | Mid-market to upper mid-market, roughly 20–1,000+ users | | Pricing model | Published per-user list price; Essentials or Premium plus Team Members | Quoted: platform fee + per-user + per-module; annual increases negotiated | | Financial core | Strong general ledger with dimensions, posting groups, deferrals, fixed assets | Strong general ledger with segments, multi-book accounting, advanced revenue management | | Multi-entity | Good to ~20 companies; consolidation and intercompany modules | Excellent via OneWorld; consolidation, intercompany, tax per subsidiary | | CRM | Basic built-in CRM; Dynamics 365 Sales as the full CRM (separate app, separate database) | Built-in CRM on the same database | | E-commerce | ISV or external storefront (Shopify connector is first-party) | SuiteCommerce native | | Manufacturing | Discrete manufacturing on Premium; production BOMs, routings, capacity | Light manufacturing natively; deeper via Advanced Manufacturing module | | Customisation | AL extensions, Power Platform, AppSource ISVs | SuiteScript (JavaScript), SuiteFlow, SuiteBuilder, SuiteApps | | Reporting | Financial reports, Power BI apps, Excel; Fabric for lakehouse | Saved searches, SuiteAnalytics Workbook, Oracle Analytics | | Microsoft 365 integration | Native — Outlook, Teams, Excel, SharePoint, Copilot | Connectors and third-party integrations | | Release cadence | Two major waves a year plus monthly updates | Two major releases a year | | Partner ecosystem | Very large, uneven by country; strongest in Europe and North America | Oracle direct plus partners; strongest in North America | ## Where NetSuite wins **Multi-subsidiary groups.** OneWorld's consolidation, intercompany automation, multi-book, and per-subsidiary tax handling are core, not add-ons. A group with 30 subsidiaries in 15 countries runs comfortably on NetSuite; on Business Central that profile is pushing the product, and the honest Microsoft answer is [Dynamics 365 Finance](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-finance). **One database for CRM and ERP.** NetSuite's CRM is on the same platform as its ledger. Microsoft's answer — Business Central plus Dynamics 365 Sales — is two products on two databases that integrate well but are still two products. For companies whose sales process is simple and who want one system, NetSuite's single platform is genuinely simpler. **Native e-commerce and revenue management.** SuiteCommerce and Advanced Revenue Management are first-party. Business Central relies on ISVs and connectors for e-commerce and covers ASC 606 through deferrals and ISV apps rather than a dedicated engine. **Depth at the top of the mid-market.** NetSuite comfortably runs companies of 500–1,000 users; Business Central is being stretched past roughly 300. ## Where Business Central wins **Price and price transparency.** The list price is public and per user. A 50-user company can budget from Microsoft's page and a partner quote; NetSuite's quote-based model with platform fees and module charges makes like-for-like comparison hard, and the annual uplift at renewal is the most common complaint in NetSuite customer forums. The [Business Central pricing page](https://www.solvingdynamics365.com/pricing/business-central) has the current figures and a calculator. **The Microsoft 365 factor.** If your company lives in Outlook, Teams, Excel, and SharePoint, Business Central is inside those tools: post from Outlook, edit in Excel, approve in Teams, attach to SharePoint, ask Copilot. NetSuite integrates; Business Central belongs. **Partner choice.** Thousands of Business Central partners exist, with deep vertical specialists in most countries. That means competitive implementation quotes and the ability to switch partners without switching product. NetSuite's direct model means fewer choices and more Oracle in the relationship. **Inventory and warehouse for distributors.** Business Central's item ledger, costing methods, reservations, and warehouse pick-and-put-away are a strong fit for product companies at SMB scale, and the manufacturing module on Premium goes further than NetSuite's base manufacturing. **Extension model and upgrades.** AL extensions never modify the base application, so Microsoft's twice-yearly updates land automatically and extensions are pre-tested on AppSource. NetSuite customisations in SuiteScript are robust, but a heavily scripted account needs release testing every cycle too. ## Where the differences do not matter Core financials — general ledger, payables, receivables, bank reconciliation, fixed assets, budgets, financial statements — are strong on both. Neither product loses a deal on the ledger. Order-to-cash and procure-to-pay for a single-entity distributor or services firm are comparable. Both have real APIs, real audit trails, and real localisation for the major markets. ## How the decision usually gets made **Company shape.** Under 20 legal entities, under roughly 300 users, product or services company: Business Central. Larger groups, many subsidiaries, global consolidation: NetSuite, or Dynamics 365 Finance if the Microsoft stack matters. **Existing stack.** Microsoft 365 shops lean Business Central; Google Workspace and Salesforce shops lean NetSuite. **Cost over five years.** Model both with realistic user growth. Business Central's published prices plus partner implementation are typically materially lower than NetSuite's quote plus renewal escalation at equivalent scale, but a NetSuite deal negotiated hard with a multi-year lock can close the gap. Get the NetSuite renewal terms in writing. **Partner or vendor.** Business Central is bought from and implemented by a partner; NetSuite is mostly bought from Oracle and implemented by Oracle or a partner. Decide which relationship you prefer to manage for ten years — [choosing a Dynamics 365 partner](https://www.solvingdynamics365.com/guides/choosing-a-dynamics-365-partner) covers what to ask. ## Migrating between them Both directions happen. NetSuite to Business Central is driven by cost, Microsoft 365 alignment, and partner availability in a given country; Business Central to NetSuite by growth into a large multi-subsidiary group. The [NetSuite to Business Central migration guide](https://www.solvingdynamics365.com/guides/migrating-from-netsuite-to-business-central) covers the data model mapping and what does not port. If the driver is growth, read [growing from Business Central to Finance and SCM](https://www.solvingdynamics365.com/guides/growing-from-business-central-to-finance-and-scm) first — the Microsoft step-up is often the better answer than a platform switch. ## The short version Business Central is the better value and the better fit for Microsoft-centric SMB and mid-market companies with a moderate number of entities. NetSuite is the stronger product for large multi-subsidiary groups and for companies that want CRM, e-commerce, and ERP on one database from one vendor. Price NetSuite over five years including renewals before comparing; the year-one quote is not the story. ### Frequently asked questions **Is Business Central cheaper than NetSuite?** Usually, and often by a wide margin at the same headcount. Business Central is a published list price per user ($80 Essentials, $110 Premium as of 2026); NetSuite is quoted — a base platform fee plus per-user and per-module charges — with annual uplifts that are widely reported to be steep. Model five years, not year one. **Which is better for multi-entity groups?** NetSuite OneWorld is stronger for large groups: consolidation, intercompany, and multi-book accounting across dozens of subsidiaries are core features. Business Central handles 5–20 companies well through its consolidation and intercompany modules; beyond roughly 20–30 entities with complex eliminations, Dynamics 365 Finance is the honest Microsoft answer, not Business Central. **Can I migrate from NetSuite to Business Central?** Yes. Master data and open transactions map cleanly (NetSuite classes, departments, and locations become dimensions), but SuiteScript, SuiteFlow, and SuiteCommerce customisations do not port — they are rebuilt in AL, Power Automate, and a separate storefront. Plan 6–18 months for a mid-sized company. **When is NetSuite the right choice over Business Central?** Global groups with many subsidiaries, businesses that need NetSuite's native e-commerce or advanced revenue management, companies without a Microsoft 365 footprint, and organisations that want one vendor from CRM to ERP in a single database rather than Microsoft's two-platform model. --- # Business Central vs Odoo Business Central vs Odoo — open-source modular ERP versus Microsoft's SMB ERP: pricing, breadth, accounting depth, localisation, customisation, hosting, and who each one suits. Source: https://www.solvingdynamics365.com/guides/business-central-vs-odoo Section: Business Central / Comparisons Published: 2026-09-03 Odoo is the ERP most likely to be on a small company's shortlist next to Business Central for a reason Business Central partners find frustrating: it is cheaper, it does more things, and a competent developer can bend it into any shape. It is also the one where the trade-offs are least visible at demo time and most visible at month-end. This guide lays both out. ## What each product is **Odoo** is a modular, open-source business suite from Belgium: dozens of apps — CRM, sales, website and e-commerce, point of sale, inventory, manufacturing, purchasing, accounting, HR, projects, helpdesk, marketing — sharing one database and one UI. Odoo Community is free and self-hosted with a reduced app set; Odoo Enterprise is a paid per-user subscription that unlocks the full accounting, the mobile apps, hosting (Odoo Online or Odoo.sh), and support. It is written in Python with a PostgreSQL database, has a very large community of third-party modules, and a partner network that is broadest in Europe, Latin America, and Asia. Odoo releases a major version every year. **Business Central** is Microsoft's SMB ERP: finance, sales, purchasing, inventory, warehouse, projects, service, and manufacturing on one database, with the Dynamics NAV finance heritage underneath, AL extensions and AppSource on top, per-named-user pricing, and native integration with Microsoft 365, the Power Platform, and the rest of Dynamics 365. See [what is Business Central](https://www.solvingdynamics365.com/guides/what-is-business-central). ## Head to head | Area | Odoo | Business Central | | --- | --- | --- | | Licence model | Community: free, self-hosted. Enterprise: per user per month, all apps included | Per named user: Essentials $80, Premium $110, Team Members $8 (2026 list) | | Hosting | Self-hosted, Odoo Online (SaaS), Odoo.sh (PaaS) | Microsoft cloud (default) or on-premises | | Breadth | Very wide: CRM, website, e-commerce, POS, marketing, HR, helpdesk, and ERP in one suite | ERP core; CRM, marketing, and field service through Dynamics 365 sister apps | | Accounting depth | Good and improving; weaker period controls, dimensions, and audit trail | Deep: posting groups, dimensions, deferrals, fixed assets, consolidation, change log, posting date locks | | Inventory and warehouse | Strong: multi-warehouse, routes, lots and serials, barcode app | Strong: five costing methods, bins, directed warehousing on Premium, item tracking | | Manufacturing | Strong: BOMs, work orders, MRP, PLM, quality, maintenance apps | Premium: production BOMs, routings, capacity, subcontracting | | E-commerce and POS | Native website builder, e-commerce, POS | Shopify connector (first-party), ISVs, Dynamics 365 Commerce at enterprise scale | | Customisation | Python modules, Odoo Studio (low-code), open codebase | AL extensions, Power Platform, AppSource | | Localisation | Official localisations for many countries plus community modules of varying quality | Microsoft and partner localisations for dozens of countries, maintained on the release cadence | | Upgrades | Annual major version; upgrades of customised databases are a project | Twice-yearly waves, automatic; extensions pre-validated on AppSource | | Microsoft 365 | Connectors for Outlook and Teams | Native — Outlook, Teams, Excel, SharePoint, Copilot | | Support | Odoo Enterprise support, partners, community | Microsoft support via partner, partner support contracts | ## Where Odoo wins **Price.** Odoo Enterprise per user is a fraction of Business Central, and Community is free. For a ten-person company the difference over three years is real money. Hosting and implementation still cost, and customisation is where budgets go, but the licence line is not close. **Breadth in one suite.** A small business gets CRM, a website, a web shop, point of sale, helpdesk, marketing, HR, and ERP from one login on one database. Microsoft's answer is Business Central plus Dynamics 365 Sales plus a storefront plus Customer Service — better products individually, more products to license and integrate. **Developer freedom.** Python, an open codebase, and tens of thousands of community modules. If you have developers, Odoo bends. Odoo Studio gives non-developers a low-code layer too. **Manufacturing and inventory for the price.** Odoo's MRP, work orders, quality, PLM, and maintenance apps are genuinely capable and included in Enterprise — capabilities that on Business Central need Premium and often an ISV. ## Where Business Central wins **Finance you can audit.** Posting groups, dimensions on every entry, deferrals, fixed assets, consolidation, posting date locks per user, a change log, permission sets with row-level filters, and approval workflows. This is what controllers, auditors, and lenders expect, and it is where Odoo — good as it has become — still asks companies to compensate with process. **Upgrades that do not hurt.** Business Central updates itself twice a year; extensions never touch the base application and AppSource apps are pre-tested. An Odoo database with custom modules faces a real upgrade project every year or falls behind — many stay two or three versions back, which erodes the "always improving" argument. **Localisation maintained on a schedule.** Microsoft and its partners maintain tax, e-invoicing, and statutory reporting for dozens of countries on the wave cadence. Odoo's official localisations are good for its core markets; elsewhere quality depends on the community module and who is maintaining it this year. **The Microsoft stack.** Outlook, Teams, Excel, SharePoint, Power BI, Power Automate, Copilot — all native. For a company already living in Microsoft 365, Business Central is the path of least resistance. **Ecosystem and continuity.** Thousands of partners, a certified marketplace, and Microsoft behind it. Odoo's partner network is large but variable, and a heavily customised Odoo is only as portable as the partner who built it. ## Where the differences do not matter Sales orders, purchase orders, invoices, receivables, payables, bank reconciliation, basic inventory: both do them well. Neither product loses a small distributor on order-to-cash. ## How the decision usually gets made **Budget and size.** Under roughly 20 users with a tight budget and simple finance: Odoo is hard to beat on cost. Growing past that with a finance team that wants controls: Business Central. **Developers or not.** In-house Python developers make Odoo a platform; without them it is a suite you configure and pay a partner to customise, and the cost advantage narrows. **Stack.** Microsoft 365 shops lean Business Central. Google Workspace shops and companies with no Microsoft commitment find Odoo's all-in-one model natural. **Regulation and audit.** Regulated industries, audited companies, and anyone with lenders looking at the books lean Business Central. **Geography.** Odoo is strong in Europe, Latin America, and parts of Asia and Africa; Business Central's coverage is broadest in Europe and North America. Check the local partner depth for both. ## Migrating between them Both directions happen. Odoo to Business Central is usually a growing company that needs finance controls, Microsoft integration, or a supported upgrade path; Business Central to Odoo is usually cost-driven at the small end or a company that wants e-commerce and CRM in the same box. Neither has a first-party tool; both export cleanly and the project is a re-implementation with opening balances and open transactions at a period boundary, as described in the [QuickBooks migration guide](https://www.solvingdynamics365.com/guides/migrating-from-quickbooks-to-business-central). ## The short version Odoo is the better deal for small companies that want one broad suite at low cost and have developers or a good partner to shape it. Business Central is the better ERP once finance controls, audit, maintained localisation, painless upgrades, and the Microsoft stack matter — which for most companies past 20 users is soon. The other options on a small-company shortlist are covered in [Business Central vs QuickBooks](https://www.solvingdynamics365.com/guides/business-central-vs-quickbooks) and [Business Central vs Xero](https://www.solvingdynamics365.com/guides/business-central-vs-xero); the mid-market ones in [Business Central vs NetSuite](https://www.solvingdynamics365.com/guides/business-central-vs-netsuite) and [Business Central vs Acumatica](https://www.solvingdynamics365.com/guides/business-central-vs-acumatica). ### Frequently asked questions **Is Odoo really free?** Odoo Community is free, open-source, and self-hosted, with a subset of the apps. Odoo Enterprise — which adds accounting depth, the mobile apps, hosting on Odoo.sh or Odoo Online, and support — is a paid per-user subscription that, as of 2026, lists at roughly a third to a half of a Business Central Essentials licence. Implementation, hosting, and customisation cost money on both. **Which has better accounting?** Business Central. Its posting engine, posting groups, dimensions, deferrals, fixed assets, consolidation, and audit controls come from two decades of Dynamics NAV finance heritage. Odoo's accounting has improved sharply since version 13 and is adequate for many SMBs, but controllers coming from a real ERP notice the gaps in period controls, dimensional reporting, and audit trail. **Which is easier to customise?** Odoo, for developers. It is Python, open-source, with the whole codebase readable and a large community of modules. Business Central's AL extension model is more constrained — deliberately, so Microsoft's updates never break — and has a smaller developer pool. For makers, Business Central's Power Platform integration is the easier path. **Who should choose Odoo over Business Central?** Small businesses on a tight budget that want one integrated suite for CRM, website, e-commerce, POS, inventory, and accounting; companies with in-house Python developers; and organisations in markets where Odoo's community localisation and partner base are stronger than Microsoft's. Microsoft 365 shops, regulated companies, and anyone who needs audit-grade finance should start with Business Central. --- # Business Central vs QuickBooks Business Central vs QuickBooks Online — accounting software versus ERP, the signs you have outgrown QuickBooks, cost, inventory, multi-entity, and how the migration works. Source: https://www.solvingdynamics365.com/guides/business-central-vs-quickbooks Section: Business Central / Comparisons Published: 2026-09-03 This is not really a like-for-like comparison, and pretending it is leads to bad decisions in both directions. QuickBooks is accounting software; Business Central is an ERP. The right question is not "which is better" but "has our business outgrown accounting software" — and if it has, Business Central is one of the two or three obvious next steps. ## What each product is **QuickBooks Online** (and its Desktop sibling, which Intuit has been steering customers away from) is the dominant small-business accounting product in North America. It does the ledger, invoicing, bills, bank feeds, payroll (via Intuit), and basic inventory, with a large app marketplace filling gaps. Plans run from Simple Start through Plus to Advanced; Advanced is the tier a growing company ends up on, with a cap of 25 users, custom fields, workflows, and batch invoicing. **Business Central** is Microsoft's SMB ERP. It has the ledger too — a deeper one, with posting groups, dimensions, deferrals, and fixed assets — and on top of it the operational modules QuickBooks does not have: real inventory with costing methods and reservations, warehouse management, purchasing with approval workflows, projects with WIP, service management, assembly and manufacturing, and multi-company with consolidation. It is priced per named user and implemented by a partner. See [what is Business Central](https://www.solvingdynamics365.com/guides/what-is-business-central) for the tour. ## Head to head | Area | QuickBooks Online | Business Central | | --- | --- | --- | | Category | Small-business accounting | SMB / mid-market ERP | | Pricing | Per company per month by plan; user caps (25 on Advanced) | Per named user per month: Essentials $80, Premium $110, Team Members $8 (2026 list) | | Implementation | Self-serve or bookkeeper, days | Partner-led, 8–16 weeks for a small company | | General ledger | Chart of accounts, classes and locations, custom fields on Advanced | Chart of accounts plus up to eight global and unlimited shortcut dimensions, posting groups, deferrals, allocations | | Inventory | Quantity and average cost; FIFO on Advanced; no locations depth | FIFO, LIFO, average, standard, specific costing; multiple locations; bins; reservations; item tracking | | Warehouse | None | Pick, put-away, bins, directed warehousing on Premium | | Purchasing | Purchase orders, bills | Requisitions, purchase orders, approval workflows, three-way match, vendor performance | | Multi-entity | One company per subscription; no consolidation | Multiple companies per environment; consolidation and intercompany modules | | Projects | Projects with time and cost on Plus/Advanced | Projects with planning lines, WIP, billing methods | | Manufacturing | None | Assembly orders on Essentials; production orders, BOMs, routings on Premium | | Reporting | Built-in reports, spreadsheet sync | Financial reports, Power BI apps, Excel, Fabric | | Customisation | Custom fields, app marketplace | AL extensions, Power Platform, AppSource ISVs | | Audit and controls | Audit log | Change log, posting date locks, permission sets, approval workflows | ## When QuickBooks is the right answer Most small businesses. A services firm with eight staff, a retailer with one location and simple stock, a contractor doing job costing on Plus — QuickBooks is cheaper, faster, and does the job. An ERP for a company that does not need one is a waste of money and attention. If your accountant is happy and month-end takes a day, stay. ## Signs you have outgrown it The pattern that shows up in every QuickBooks-to-Business-Central project: - **Inventory does not reconcile.** QuickBooks inventory is light; companies that need lot tracking, multiple locations, or accurate costing carry inaccuracies for years and fix them in spreadsheets. - **More than one entity.** Each QuickBooks company is a separate file; consolidation happens in Excel, and intercompany transactions are re-keyed on both sides. - **Month-end lives in spreadsheets.** Accruals, allocations, deferrals, and revaluations are done outside the system because the system has no place for them. - **No purchasing control.** Anyone can raise a bill; there is no requisition-to-approval-to-order flow and no three-way match. - **Integration sprawl.** Zapier, CSV exports, and a growing list of marketplace apps doing what an ERP does natively. - **The user cap.** Advanced tops out at 25 users. Companies approaching it are usually past the point where accounting software fits anyway. Two or three of these mean it is time to look. Five means it was time a year ago. ## Cost, honestly QuickBooks wins on subscription cost at small scale and it is not close: a single monthly fee per company against $80 per named user. The comparison changes as headcount grows and as the cost of working around QuickBooks — the spreadsheets, the reconciliation labour, the bolt-on apps, the errors — becomes visible. At 15–25 users needing inventory or multi-entity, Business Central's licence line is a few thousand dollars a month and the functionality gap is total. The bigger year-one cost is implementation: a partner configuring the chart of accounts, dimensions, posting setup, items, and workflows, migrating data, and training staff. Budget it at roughly the first year's licences again, and read [Business Central licensing and pricing](https://www.solvingdynamics365.com/guides/business-central-licensing-and-pricing) and the [pricing page](https://www.solvingdynamics365.com/pricing/business-central) for the licence rules that matter — the Team Member licence, in particular, keeps read-only and approval users cheap. ## The migration Business Central ships a first-party QuickBooks Online migration in its assisted setup. It reads the Intuit API, maps the chart of accounts (with manual review), and brings customers, vendors, items, bank accounts, opening balances, and optionally open invoices, bills, and purchase orders. The mechanics take days. The project takes 8–16 weeks because of everything around the data: designing dimensions instead of classes, choosing costing methods before the first item posts, physically counting inventory before migrating it, deciding a cut-off date at a period boundary, and training staff who have used QuickBooks for a decade. The [QuickBooks to Business Central migration guide](https://www.solvingdynamics365.com/guides/migrating-from-quickbooks-to-business-central) walks the scope decisions. The pitfall is configuring Business Central to mimic QuickBooks. Its strengths — dimensions, multi-entity, real inventory, posting controls — are the reason to move; use them. ## Alternatives to consider If the driver is purely accounting depth with no inventory or operations, [Sage Intacct](https://www.solvingdynamics365.com/guides/business-central-vs-sage-intacct) and [Xero](https://www.solvingdynamics365.com/guides/business-central-vs-xero) are worth a look. If the driver is a larger, more complex business, [NetSuite](https://www.solvingdynamics365.com/guides/business-central-vs-netsuite) and [Acumatica](https://www.solvingdynamics365.com/guides/business-central-vs-acumatica) are the other mid-market ERPs on most shortlists. The [product chooser](https://www.solvingdynamics365.com/guides/how-to-choose-the-right-dynamics-365-product) puts Business Central in the wider Microsoft context. ## The short version QuickBooks for small businesses whose needs are accounting; Business Central once the business needs inventory, warehousing, purchasing control, multi-entity, projects, or manufacturing that accounting software cannot describe. The move costs real money and a real project, and it pays off when the workaround cost of staying is already higher than that — which, by the time most companies look, it is. ### Frequently asked questions **Is Business Central a replacement for QuickBooks?** It is the step after QuickBooks. QuickBooks is accounting software for small businesses; Business Central is an ERP that adds real inventory and warehousing, dimensions, multi-company, purchasing controls, projects, and manufacturing on top of the ledger. Companies move when QuickBooks stops being able to describe their business. **How much more does Business Central cost than QuickBooks?** QuickBooks Online is priced per company per month with a user cap (Advanced allows up to 25 users); Business Central is $80 or $110 per named user per month as of 2026. For a five-user company QuickBooks is far cheaper. Around 10–15 users needing real inventory or multi-entity, the gap narrows and the functionality gap widens, and implementation cost — weeks of partner time — is the bigger year-one line. **What are the signs we have outgrown QuickBooks?** Inventory counts that never match, more than one legal entity managed in separate files, month-end done in spreadsheets, purchasing with no approval control, integrations held together with Zapier, and a 25-user cap that is in sight. **Is there a migration tool from QuickBooks to Business Central?** Yes. Business Central's assisted setup includes a QuickBooks Online connector that migrates the chart of accounts, customers, vendors, items, opening balances, and open transactions. The mechanical move takes days; configuration, testing, and training take 8–16 weeks for a small company. --- # Business Central vs Sage Intacct Business Central vs Sage Intacct — financial management depth versus full ERP, dimensions, multi-entity, inventory and operations, pricing models, and which fits which company. Source: https://www.solvingdynamics365.com/guides/business-central-vs-sage-intacct Section: Business Central / Comparisons Published: 2026-09-03 Sage Intacct and Business Central are shortlisted together constantly, and the comparison is often framed wrongly as two ERPs. It is really a choice between a best-of-breed financial management system and a full ERP — a choice about where your complexity lives. ## What each product is **Sage Intacct** is a cloud financial management platform, built cloud-first in 2000 and owned by Sage since 2017. Its core is the general ledger with unlimited user-defined dimensions, multi-entity with automatic consolidation and intercompany, multi-book accounting, and strong modules for revenue recognition, project accounting, contracts and subscription billing, and fund accounting. It is the AICPA's preferred provider of financial applications, which tells you its audience: finance teams and CPAs. It has inventory and order management modules, but operations is not its centre of gravity; the design assumption is integration with specialist systems through its Web Services API and marketplace. **Business Central** is Microsoft's SMB ERP: a strong ledger with dimensions and posting groups, and — on the same database — inventory with real costing, warehouse, purchasing with approvals, projects with WIP, service, assembly, and manufacturing. It is priced per named user and sold and implemented through partners. See [what is Business Central](https://www.solvingdynamics365.com/guides/what-is-business-central). ## Head to head | Area | Sage Intacct | Business Central | | --- | --- | --- | | Category | Cloud financial management | SMB / mid-market ERP | | Pricing | Quoted: platform + modules + users; typically five figures a year and up | Published per user: Essentials $80, Premium $110, Team Members $8 (2026 list) | | Dimensions | Unlimited user-defined dimensions on every transaction | Up to eight global dimensions plus unlimited shortcut dimensions | | Multi-entity | Excellent: entities, automatic consolidation, intercompany, multi-currency, multi-book | Good: multi-company, consolidation module, intercompany; strains past ~20–30 entities | | Revenue recognition | Dedicated ASC 606 / IFRS 15 engine, contracts, subscription billing | Deferral templates; ISV apps for full contract-based recognition | | Project accounting | Strong: projects, resources, time, billing, revenue | Strong: projects with planning lines, WIP, billing methods | | Inventory | Inventory and order management modules; adequate for simple stock | Full inventory: costing methods, locations, bins, reservations, tracking | | Warehouse and manufacturing | None | Warehouse; assembly on Essentials, production on Premium | | Nonprofit / fund accounting | Native fund accounting, grant tracking | Fund-as-dimension pattern plus ISVs | | Reporting | Dimensional report writer, dashboards, interactive custom reports | Financial reports, Power BI, Excel, Fabric | | Customisation | Platform Services, Smart Rules, Smart Events, API, marketplace | AL extensions, Power Platform, AppSource | | Microsoft 365 | Integrations | Native — Outlook, Teams, Excel, SharePoint, Copilot | | Implementation | Partner-led, typically 3–6 months | Partner-led, typically 2–6 months | ## Where Sage Intacct wins **Dimensional reporting.** Unlimited dimensions on every transaction and a report writer built around slicing them is the feature finance teams fall for, and it is genuinely better than Business Central's eight-global-plus-shortcuts model for organisations that want ten or twelve analytical axes. **Multi-entity at scale.** Adding an entity, consolidating automatically, eliminating intercompany, and running multi-book all happen inside the product. A 40-entity group with a lean finance team is Intacct's sweet spot; on Business Central it is a stretch, and Microsoft's answer at that scale is [Dynamics 365 Finance](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-finance). **Revenue recognition and subscription billing.** The ASC 606 engine, contract management, and billing schedules are first-party and mature. SaaS companies in particular choose Intacct for this. **Nonprofits and healthcare.** Fund accounting, grant tracking, and the reporting nonprofit boards expect are native, and the Sage Intacct nonprofit practice is deep. Business Central covers the same ground through the [fund-as-dimension pattern](https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits-fund-accounting) and ISVs, which works but is a design rather than a module. ## Where Business Central wins **Operations on the same database.** Inventory, warehouse, purchasing, service, assembly, manufacturing — one item master, one posting engine, one audit trail. A distributor or manufacturer on Intacct integrates an operations system; on Business Central it is already there. **Price and price transparency.** A published per-user list price against a quote. For any organisation with operational users — warehouse, purchasing, service — Business Central's model is usually cheaper and always easier to budget. The [pricing page](https://www.solvingdynamics365.com/pricing/business-central) has the figures and a calculator. **The Microsoft 365 factor.** Business Central is inside Outlook, Teams, Excel, and SharePoint with Copilot built in. Intacct integrates; Business Central belongs. **Partner ecosystem.** Thousands of partners globally with vertical depth. Intacct's partner network is strong in North America and growing elsewhere but smaller. **Localisation breadth.** Business Central ships localisations for dozens of countries; Intacct's international coverage is narrower and heavily North America, UK, Australia, and South Africa. ## Where the differences do not matter Core financials: general ledger, payables, receivables, bank reconciliation, fixed assets, budgets, financial statements, audit trail. Both are excellent. Neither product loses a finance team on the basics. ## How the decision usually gets made **Where is the complexity?** If it is in the finance function — entities, dimensions, revenue recognition, fund accounting — and operations run in specialist systems, Intacct. If it is in operations — stock, warehouse, purchasing, production — Business Central. **Company type.** Services, SaaS, nonprofit, healthcare, financial services: Intacct is the frequent winner. Distribution, manufacturing, retail, project-based product companies: Business Central. **Stack.** Microsoft 365 shops lean Business Central. Organisations that have already committed to Salesforce, Workday, and best-of-breed everything find Intacct a natural fit for the finance slot. **Scale.** Above roughly 20–30 entities with complex consolidation, compare Intacct against Dynamics 365 Finance rather than against Business Central — see [Business Central vs Finance and Operations](https://www.solvingdynamics365.com/guides/business-central-vs-finance-and-operations). ## Migrating between them Both directions happen. Intacct to Business Central is typically a product company that bolted operations onto Intacct and wants one system; Business Central to Intacct is typically a services or nonprofit organisation that never used the operational modules and wants deeper dimensional finance. Neither has a first-party migration tool; both export cleanly to CSV and have good APIs, and the project is a standard re-implementation with opening balances and open transactions at a period boundary. ## The short version Sage Intacct is the better pure financial management system — dimensions, multi-entity, revenue recognition, fund accounting — for organisations whose complexity is in finance and whose operations live elsewhere. Business Central is the better ERP for product and project companies that want finance and operations on one database, at a published per-user price, inside Microsoft 365. Decide by where your complexity is, not by feature count. If the shortlist also includes NetSuite, [Business Central vs NetSuite](https://www.solvingdynamics365.com/guides/business-central-vs-netsuite) covers the third corner. ### Frequently asked questions **What is the main difference between Sage Intacct and Business Central?** Scope. Sage Intacct is a best-of-breed cloud financial management system — general ledger, multi-entity, dimensions, revenue recognition, project accounting — that integrates with other systems for operations. Business Central is a full ERP with inventory, warehouse, purchasing, service, and manufacturing on the same database as the ledger. **Which has better multi-entity and dimensions?** Sage Intacct is the stronger pure finance product: unlimited user-defined dimensions, multi-entity with automatic consolidations and intercompany, and multi-book. Business Central's dimensions (up to eight global plus shortcuts) and consolidation cover most SMB groups, but a finance-only organisation with 30 entities and complex reporting is Intacct's home ground. **Is Sage Intacct cheaper than Business Central?** Rarely at the same scale. Intacct is quoted rather than list-priced — a platform subscription plus modules plus users, typically well into five figures a year — while Business Central is a published $80 or $110 per user per month. For a finance-only team of five, Intacct can be competitive; add operational users and Business Central's per-user model usually wins. **Who should choose Sage Intacct over Business Central?** Services firms, SaaS companies, nonprofits, healthcare, and financial services organisations whose complexity is in the finance function — many entities, dimensional reporting, ASC 606, fund accounting — and who run operations in specialist systems. Product companies with inventory or manufacturing should start with Business Central. --- # Business Central vs Xero Business Central vs Xero — cloud accounting versus ERP, unlimited users versus per-user pricing, inventory and multi-entity limits, and when a Xero business should move up. Source: https://www.solvingdynamics365.com/guides/business-central-vs-xero Section: Business Central / Comparisons Published: 2026-09-03 Xero and Business Central sit at different points on the same road. Xero is where a great many businesses in the UK, Australia, New Zealand, and increasingly elsewhere run their books; Business Central is where a fraction of them end up when the books stop being the hard part. This guide is about where the line is. ## What each product is **Xero** is cloud accounting for small businesses: ledger, invoicing, bills, bank reconciliation with excellent bank feeds, expenses, projects, basic inventory, payroll in some countries, and a very large app marketplace. Every plan includes unlimited users, which shapes how companies use it — the whole team is in, not just the bookkeeper. It is sold direct and through accountants, and its accountant network is a major part of why it dominates its home markets. **Business Central** is Microsoft's SMB ERP: the same ledger functions with more depth (dimensions, posting groups, deferrals, fixed assets, consolidations), plus the operational modules — inventory with real costing, warehouse, purchasing with approvals, projects with WIP, service, assembly and manufacturing, multi-company — that make it an ERP rather than an accounting product. It is priced per named user and implemented by a partner. See [what is Business Central](https://www.solvingdynamics365.com/guides/what-is-business-central). ## Head to head | Area | Xero | Business Central | | --- | --- | --- | | Category | Small-business cloud accounting | SMB / mid-market ERP | | Pricing | Per organisation per month by plan; unlimited users | Per named user per month: Essentials $80, Premium $110, Team Members $8 (2026 list) | | Setup | Self-serve or accountant, days | Partner-led, 8–16 weeks | | Bank reconciliation | Best-in-class feeds and matching | Bank feeds, statement import, AI-assisted matching | | Ledger structure | Chart of accounts plus tracking categories (two) | Chart of accounts plus up to eight global and unlimited shortcut dimensions | | Inventory | Tracked inventory, average cost, single location | Five costing methods, locations, bins, reservations, lots and serials | | Warehouse | None | Pick, put-away, bins, directed warehousing on Premium | | Purchasing | Purchase orders, bills | Requisitions, approvals, three-way match, vendor management | | Multi-entity | One organisation per subscription; no native consolidation | Multi-company in one environment; consolidation and intercompany | | Projects | Xero Projects (time and cost) | Projects with planning lines, WIP recognition, billing methods | | Manufacturing | None | Assembly on Essentials; production on Premium | | Multi-currency | On higher plans | Native, with revaluation | | Reporting | Built-in reports, marketplace BI | Financial reports, Power BI, Excel, Fabric | | Ecosystem | App marketplace (1,000+) | AppSource ISVs, Power Platform, Microsoft 365 | ## Where Xero wins **Simplicity and speed.** A business can be running on Xero in an afternoon. Its bank reconciliation is the reference experience in the category, and it is the product accountants in its home markets know best. **Unlimited users.** Business Central charges per named user; Xero does not charge at all. For a business where twenty people occasionally raise an invoice or check a customer balance, that is a real difference — Business Central's answer is the $8 Team Member licence, which covers read and approvals but not general data entry. **Cost for small businesses.** A single monthly plan fee against per-user ERP licensing plus a partner implementation. For a business whose needs are accounting, the ERP is a category error. **The accountant relationship.** Many businesses are on Xero because their accountant is. That relationship is worth something and is one reason companies stay past the point where the product fits. ## Where Business Central wins **Inventory that reconciles.** Xero's tracked inventory is single-location average cost and is adequate for simple product businesses. Companies that need multiple locations, FIFO or standard costing, lot or serial tracking, reservations, or a warehouse process are past Xero, and marketplace inventory apps bolted on to it are a stopgap with their own reconciliation problems. **Multi-company.** Each Xero organisation is an island. Business Central runs a group in one environment with consolidation, intercompany postings, and a company hub for finance teams that work across entities. **Controls.** Posting-date locks, approval workflows on documents, permission sets with row-level security filters, a change log, and dimensions on every posting. These are what auditors and lenders eventually ask for. **Operations beyond finance.** Purchasing with requisitions and three-way match, projects with WIP, service management, assembly and manufacturing. Xero has none of these because it was never meant to. **The Microsoft 365 factor.** Business Central lives inside Outlook, Teams, Excel, and SharePoint, and Copilot is built into it. Xero integrates with Microsoft 365 through connectors; Business Central is part of it. ## Where the differences do not matter Core bookkeeping. Both invoice, pay bills, reconcile banks, handle VAT/GST/sales tax, run a P&L and balance sheet, and manage receivables and payables competently. Neither loses a customer on the ledger itself. ## Signs a Xero business should move - Inventory in a marketplace app that never quite agrees with Xero. - A second or third organisation, consolidated in a spreadsheet. - Tracking categories exhausted — two is not enough once you want department, project, region, and product line. - Purchase approval done by email. - Month-end accruals, deferrals, and allocations done outside the system. - A finance team that has started asking for an ERP, which usually means they are already doing ERP work by hand. ## Cost and the migration Model the difference over three years including the cost of the workarounds. A 15-user product business on Business Central Essentials with five Team Members is roughly $1,250 a month in licences at 2026 list — see the [pricing page](https://www.solvingdynamics365.com/pricing/business-central) — against a Xero plan plus whatever the marketplace apps cost. The implementation is the larger year-one line: budget it at roughly a year's licences. There is no first-party Xero migration tool as there is for QuickBooks Online, but Xero exports cleanly and its API is good; partners load master data and opening balances through configuration packages. The project shape is the same as any small ERP implementation — cut-off at a period boundary, opening balances plus open transactions, history left in Xero read-only, physical inventory count before go-live. The [QuickBooks migration guide](https://www.solvingdynamics365.com/guides/migrating-from-quickbooks-to-business-central) describes the same decisions. ## The short version Xero for small businesses whose problem is accounting; it is cheaper, simpler, and has unlimited users. Business Central once the business needs inventory, multi-company, purchasing control, or operations that accounting software cannot model — accept the per-user pricing and the implementation project as the cost of a system that can describe the business. If the shortlist also has QuickBooks or Sage Intacct on it, [Business Central vs QuickBooks](https://www.solvingdynamics365.com/guides/business-central-vs-quickbooks) and [Business Central vs Sage Intacct](https://www.solvingdynamics365.com/guides/business-central-vs-sage-intacct) draw those lines. ### Frequently asked questions **Is Xero or Business Central better for a small business?** Xero, for most small businesses. It is cheaper, faster to set up, has unlimited users on every plan, and its bank feeds and app marketplace cover what a services firm or simple product business needs. Business Central becomes the better choice when the business needs real inventory, warehousing, multi-company consolidation, purchasing control, or manufacturing. **Does Xero have a user limit like QuickBooks?** No — Xero includes unlimited users on every plan, which is one of its main advantages over QuickBooks and a genuine cost advantage over Business Central's per-user pricing for businesses with many light users. **Can Xero handle multiple companies?** Each Xero organisation is a separate subscription and there is no native consolidation; groups consolidate in spreadsheets or with a marketplace app. Business Central runs multiple companies in one environment with consolidation and intercompany transactions built in. **Is there a migration tool from Xero to Business Central?** Not a first-party one as there is for QuickBooks Online. Xero exports cleanly to CSV and its API is well documented; partners load master data and opening balances through Business Central's configuration packages. Plan the same 8–16 week project as any small ERP implementation. --- # Business Central web services The classic OData and SOAP web services in Business Central — how they differ from the v2.0 API, and when to use them. Source: https://www.solvingdynamics365.com/guides/business-central-web-services Section: Business Central / AL & development Published: 2026-05-01 Updated: 2026-08-25 Business Central exposes three integration surfaces: the modern **v2.0 REST API**, **custom AL API pages**, and the older **web services** — published pages, queries, and codeunits exposed as **OData v4** and **SOAP** endpoints. The v2.0 API is the preferred path for new integrations, but classic web services still solve problems v2.0 doesn't. ## Publishing From the **Web Services** page in Business Central, an administrator picks a page, query, or codeunit and publishes it under a short name. The system generates an OData URL (e.g. `https://api.businesscentral.dynamics.com/.../ODataV4/Company('Cronus')/MyService`) and, for codeunits, a SOAP URL. Anyone with the right Entra credentials and BC permissions can call it. ## Page web services (OData) A published **page** becomes an OData entity set: read with GET, create with POST, update with PATCH, delete with DELETE. Pages enforce the same triggers and validation as the UI, so a posted entry from OData looks the same as one entered manually. Use page web services when you need write access to standard data and the v2.0 API doesn't expose it. ## Query web services (OData read-only) A published **AL query** becomes a read-only OData feed. Queries are the right answer for **read-heavy reporting** — joining several tables, aggregating, filtering, and shaping the result on the server. Excel, Power BI, and SQL Server Integration Services connect to query feeds directly. ## Codeunit web services (SOAP) A published **codeunit** exposes its public procedures as SOAP operations. The right shape for action-oriented integrations — "post this sales order", "release this purchase order", "approve this credit memo" — where you don't want the caller to manipulate the document fields directly but to invoke a curated business operation. **OData vs v2.0 REST.** v2.0 is OData under the hood, but with consistent paging, error formats, ETag concurrency, and a documented OpenAPI surface. Classic page web services are looser, often lacking ETags, with platform-specific quirks. New integrations should prefer v2.0 + custom API pages. ## Authentication All SaaS web services authenticate with **Entra ID** OAuth 2.0. Basic auth is removed. ## Common pattern Reporting and Excel users consume query web services. Internal automation uses v2.0 or custom API pages. Legacy SOAP integrations migrate to v2.0 over time, but in the meantime SOAP remains supported and stable. --- # Business Central webhooks vs Azure Service Bus subscribers Two ways for external systems to learn that something changed in Business Central — API webhook subscriptions or a Service Bus queue fed from AL. Source: https://www.solvingdynamics365.com/guides/integrating-business-central-webhooks-vs-service-bus Section: Integrations / Eventing & messaging Published: 2026-09-02 External systems need to know when a Business Central record changes: a shipment posted, a customer created, an item's price updated. Polling the API every few minutes works and is how most integrations start. When polling stops being good enough, Business Central offers webhook subscriptions on its API, and Azure offers Service Bus for anything you are willing to publish yourself from AL. They solve the same problem at very different levels of effort and reliability, and the choice depends on what happens if a notification is lost. ## How Business Central webhooks work You create a subscription against an API page (standard or custom) with a callback URL. When a record exposed by that API is inserted, modified, or deleted, Business Central sends a notification to the URL. The notification tells you the resource and the change type. It does not carry the record's data; the subscriber then calls the API to fetch what changed. Subscriptions expire after a fixed period and must be renewed. The receiving endpoint must complete a validation handshake when the subscription is created. That model is deliberately lightweight. Business Central batches notifications, may deliver them with a delay of up to several minutes depending on load, and will drop a subscription that repeatedly fails to respond. There is no replay of missed notifications and no guarantee of ordering. Our [webhooks in Business Central](https://www.solvingdynamics365.com/guides/webhooks-in-business-central) guide covers the setup mechanics. ## How the Service Bus pattern works Nothing in Business Central publishes to Service Bus out of the box. You write an AL extension that subscribes to the relevant events (OnAfterPostSalesDoc, OnAfterInsertEvent on the table you care about, or a custom business event), builds a message, and sends it to a Service Bus queue or topic over HTTPS from AL, with the Service Bus credentials held in isolated storage or Azure Key Vault. Downstream systems consume from the queue at their own pace, with Service Bus providing durable storage, retries, dead-lettering, and ordering within a session. The message can carry the full payload so consumers do not need to call back into Business Central. The trade-off is that you now own an extension, its error handling, and the question of what happens when the Service Bus call fails inside a posting routine. The usual answer is an outbox table in Business Central written in the same transaction as the business event, with a job queue entry draining it to Service Bus, so that a Service Bus outage never blocks a posting. See [the outbox pattern with Service Bus](https://www.solvingdynamics365.com/guides/the-outbox-pattern-with-service-bus) for the general shape. ## Business events: the third option Business Central also ships business events, a curated set of application-level events (sales order released, invoice posted) that publish to Dataverse and from there to Power Automate. This is the low-code middle ground: no AL, no polling, richer semantics than a table-level webhook. It routes through Dataverse, which means Power Automate is the natural consumer and the event set is Microsoft's, extensible in AL if you need your own. For notifying Power Platform, business events are usually better than either webhooks or Service Bus. For notifying a non-Microsoft system, they are one more hop. ## Deciding **Use webhooks when** the subscriber is a single system, a delay of minutes is fine, a missed notification is recoverable by the next one or by a periodic reconciliation, and you do not want to write AL. Syncing a product catalogue to an e-commerce platform is a good fit; the catalogue will be reconciled nightly anyway. **Use Service Bus when** several systems need the same events, when losing an event has a business cost (a posted invoice that never reaches the payment platform), when ordering matters, or when consumers cannot be reached synchronously and need to catch up later. Order-to-cash and finance postings belong here. **Use business events when** the consumer is Power Automate or something else in the Power Platform and the event you need is in the standard set. ## The lost-notification test Ask what happens if one notification never arrives. If the answer is "the next scheduled reconciliation picks it up", webhooks are fine and cheap. If the answer is "a customer does not get their goods", you need durable messaging and an outbox, and the extra AL is the cost of that guarantee. Most integrations that start on webhooks and later migrate to Service Bus do so after a lost notification caused a visible problem. ## Operational differences Webhook subscriptions expire; something must renew them, and forgotten renewals are the most common failure. The receiving endpoint must be reachable from the internet and respond quickly, which usually means an Azure Function or Logic App in front of anything on-premises. Service Bus needs no inbound endpoint, works from anywhere, and has queue depth and dead-letter metrics you can alarm on; see [message replay and poison queue handling](https://www.solvingdynamics365.com/guides/message-replay-and-poison-queue-handling-for-d365). Both patterns need reconciliation. Even with Service Bus, a periodic comparison between Business Central and the downstream system catches the cases where a message was consumed but the consumer's write failed. ## Cost Webhooks are free apart from the compute that receives them. Service Bus is inexpensive at typical ERP volumes, and the real cost is the AL extension and the discipline to maintain it. Business events sit in between and consume Power Platform request capacity. ## Stability verdict Webhooks are stable but limited by design, and they have not changed much in years. The Service Bus pattern is stable because you built it, and it will be as reliable as your outbox and your consumers. Business events are the newest and the one most likely to grow in scope. Our broader [AL events and integration patterns](https://www.solvingdynamics365.com/guides/al-events-and-integration-patterns) guide covers the AL side in more depth. ### Frequently asked questions **How do Business Central webhooks work?** You subscribe to an API page with a callback URL; on insert, modify, or delete Business Central sends a notification naming the resource and change type, without the data — the subscriber then calls the API. Subscriptions expire and must be renewed, notifications can be delayed by minutes and batched, and there is no replay or ordering. **How does the Service Bus pattern work?** An AL extension subscribes to events such as OnAfterPostSalesDoc, builds a message with the full payload, and sends it to a Service Bus queue or topic — usually through an outbox table drained by a job queue so a Service Bus outage never blocks posting. Consumers get durable storage, retries, dead-lettering, and session ordering. **What are business events?** A curated set of application-level events — sales order released, invoice posted — published to Dataverse and consumed by Power Automate with no AL. The best option when the consumer is in the Power Platform and the event is in the standard set. **How do I decide between webhooks and Service Bus?** Ask what happens if one notification never arrives. If a nightly reconciliation catches it, webhooks are fine. If a customer does not get their goods or an invoice never reaches the payment platform, you need Service Bus and an outbox. --- # Business process flows in Dynamics 365 How business process flows guide users through staged work in Dynamics 365 — design, branching, security, and when not to use them. Source: https://www.solvingdynamics365.com/guides/business-process-flows-in-dynamics-365 Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Updated: 2026-08-25 **[Business process flows (BPFs)](https://www.solvingdynamics365.com/glossary/business-process-flow)** are the staged, top-of-form progress bars you see on opportunities, cases, leads, and other Dynamics 365 model-driven app records. They guide users through a multi-step process with required fields, conditional branching, and stage transitions enforced by the platform. Used well, BPFs encode operational discipline; misused, they create rigid bottlenecks that users route around. ## The basic shape A BPF defines an ordered list of **stages**. Each stage has a list of **steps** — fields the user should fill in before moving on. Required steps must be completed; optional ones are surfaced but don't block. Users move from stage to stage with a *Next stage* button; admins can also configure automatic stage transitions on field changes. ## Multi-entity flows A BPF can span multiple Dataverse tables — for example, a sales process that starts on a Lead, qualifies into an Opportunity, and ends on a Quote. As the process moves between entities, the progress bar stays with the user. ## Branching A BPF can branch based on field values — different stages for different deal sizes, regions, or product types. Branching keeps the process honest without forking the schema. ## Multiple flows per entity A single table can have several BPFs (e.g. small-deal vs enterprise-deal sales processes). Users see the flow that matches the record's qualifying conditions and can switch between active flows. ## Security BPFs are themselves Dataverse tables. Security roles control who can run which flows. A flow's data is stored as a record in a hidden table named for the flow, with relationships to the underlying business records. ## Automation Stage transitions can trigger **Power Automate** flows for downstream actions — notifying the sales manager when a deal advances, creating tasks, updating finance — without writing code. **Limits.** - BPFs are linear and (with branching) tree-shaped, not arbitrary state machines. - The same record can't run two BPFs of the same definition at once. - Excessive BPF complexity (twenty stages, deep branches) slows down adoption. ## When not to use a BPF When the process isn't truly staged — when users genuinely jump around between facets of the same record — a BPF gets in the way. Reach for **business rules** and **forms** discipline instead. ## A balanced approach Three to seven well-named stages, three to six steps each, with branching only where the process really diverges. Train users on it. Iterate based on how they actually use it. --- # Business process mapping for Dynamics 365 How to map business processes for a Dynamics 365 implementation — process hierarchies, BPMN notation, scenarios. Source: https://www.solvingdynamics365.com/guides/business-process-mapping-for-dynamics-365 Section: Implementation / Project execution Published: 2026-05-01 Updated: 2026-08-25 A Dynamics 365 implementation needs to understand the customer's business processes — how things actually flow today and how they should flow tomorrow. Business process mapping is the discipline that creates this understanding. Done well, it bridges requirements to design; done poorly, it produces wallpaper that nobody reads. **Why map processes.** - **Common understanding** — stakeholders see the same flow. - **Gap identification** — where standard fits, where customisation needed. - **Design input** — FDDs reflect mapped processes. - **Training material** — onboarding new users. - **Audit evidence** — what the system is designed to do. ## Process hierarchy Three levels typically: - **Level 1 (Strategic)** — major process areas: "Order to Cash", "Procure to Pay", "Hire to Retire". - **Level 2 (Operational)** — sub-processes: "Sales order processing", "Vendor invoice processing". - **Level 3 (Procedural)** — detailed steps: "Create sales order", "Apply credit check". Different audiences need different levels. **Notation choices.** - **BPMN (Business Process Model and Notation)** — formal, standardised. - **Flowchart** — simpler, more universally understood. - **Swim-lane diagrams** — show actors / systems clearly. - **Value stream map** — for transformational analysis. BPMN strikes balance for most Dynamics implementations; specialised analysts trained in it. **BPMN essentials.** - **Tasks** — activities (rectangles). - **Events** — start, intermediate, end (circles). - **Gateways** — decisions, parallel paths (diamonds). - **Sequence flow** — arrows showing order. - **Pools and lanes** — actors / systems. A few hours of training makes BPMN readable; intuitive notation. ## As-is vs to-be Two complete mappings: - **As-is** — current state warts and all. - **To-be** — designed future state. The gap drives implementation scope. **As-is mapping techniques.** - **Process owner interviews.** - **Observation** of people doing the work. - **Document review** — existing procedures. - **System exploration** — what current systems do. - **Workshop facilitation** — group reconstruction. Each captures different aspects; combine for completeness. **To-be design.** - **Future state vision** discussions. - **Best practice review** — how others do it. - **Standard Dynamics process** — what comes out-of-box. - **Customer-specific differentiators** — what must remain unique. The to-be reflects both standard and the customer's reality. **Process modelling tools.** - **Microsoft Visio** — most common. - **Lucidchart** — collaborative. - **Bizagi Process Modeler** — BPMN-focused. - **Microsoft Process Advisor** — process mining + modelling. - **Specialised consulting tools.** Tool choice affects collaboration efficiency but not fundamental quality. ## Process scenarios Per process: - **Happy path** — normal flow. - **Variant flows** — common alternatives. - **Exception flows** — error handling. - **Edge cases** — unusual but possible. Documenting only happy path misses where things actually break. **Documentation per process step.** - **Step name and ID.** - **Role / actor.** - **System interaction.** - **Inputs and outputs.** - **Decision criteria** (if gateway). - **Duration estimate** (for analysis). - **Cost** (where relevant). Detail level matches the purpose — overview vs operational manual. **Process measurement.** - **Cycle time** — total duration. - **Process time** — value-add time. - **Wait time** — between steps. - **Volume** — frequency. - **Cost per execution.** Quantifying current process supports improvement decisions. **Integration with requirements.** - Each process step generates functional requirements. - Non-functional requirements emerge from analysis (volume, latency). - Process maps feed FDDs. The artefacts compose; process maps are early, FDDs are later refinement. **Common process patterns to recognise.** - **Sequential** — step A → B → C. - **Parallel** — A and B simultaneously; both complete before C. - **Conditional** — A → (if X then B else C). - **Loop** — A → B → A until condition met. - **Subprocess** — A → [reusable subprocess] → B. Standard patterns improve modelling efficiency. **Process governance.** - Maps maintained. - Updates when process changes. - Owner per process. - Periodic review cycle. Without governance, process maps drift from reality within months. ## Process mining vs process mapping Different but complementary: - **Mapping** — manual, subjective, based on stakeholder description. - **Mining** — data-driven, objective, based on system event logs. Mining reveals what really happens; mapping captures intent. Combine for richer insight. **Common pitfalls.** - **Over-detailed.** Hundreds of pages; nobody reads. - **Under-detailed.** Vague; doesn't guide implementation. - **Wrong audience.** Technical detail for execs; high-level for developers. - **No updates.** Maps frozen at project end; reality moves on. - **No ownership.** Documents exist; nobody maintains. - **One person's view.** Not validated across stakeholders. **Validation.** - **Walkthroughs** with process owners. - **Stakeholder review.** - **End-user sanity check.** - **System validation** — does the system actually do this? Iterate; first draft rarely captures reality fully. ## For ALM and operations Process maps remain valuable post-go-live: - **Onboarding** — new users learn the process. - **Audit** — evidence of process control. - **Continuous improvement** — baseline for refinement. - **Change management** — context for system changes. ## Strategic positioning Process mapping is investment in understanding. The understanding is the actual deliverable; the diagram is the artefact. Mature implementations have process documentation that survives the project as operational asset. For implementation teams: - Map what matters at the right detail. - Validate with the people who do the work. - Keep maps current. - Use maps as living documentation. The discipline produces clearer designs, better-trained users, and audit-ready evidence of process control. Without it, projects build to assumed processes that may not match reality. --- # Business rules in Dataverse How business rules let you add field-level logic to forms without code — set value, lock field, show error, recommendation, and the limits of the engine. Source: https://www.solvingdynamics365.com/guides/business-rules-in-dataverse Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Updated: 2026-08-25 **Business rules** in Dataverse give makers a graphical, no-code way to add field-level logic to forms — set field defaults conditionally, lock fields based on status, show validation errors, surface recommendations. They run on the client and on the server, so the same rule enforces both during interactive editing and at API write. Used well, they replace small JavaScript snippets and simple plug-ins with declarative configuration; used badly, they multiply unmaintainable spaghetti. ## The model A business rule has: - **Scope** — Entity (runs everywhere including the server) or specific form(s). - **Trigger** — when the rule evaluates: on form load, on field change, on save. - **Condition** — a tree of AND/OR logic on field values. - **Actions** — what happens when the condition is met: - **Set field value** - **Set business required (Optional, Recommended, Required)** - **Set visibility** - **Lock or unlock field** - **Show error message** - **Set default value** - **Recommendation** (suggest a value with one-click acceptance) ## Server-side enforcement With Scope = Entity, the rule runs server-side as well as client-side. A "Status must be Open before activation" rule enforced server-side blocks API writes that would bypass the form. This makes business rules genuinely enforcing, not just guidance. **Common patterns.** - **Conditional required fields.** "If Type = Customer, then Tax ID is required." - **Mutual exclusivity.** "If Has Insurance = Yes, show Insurance Provider; if No, hide it." - **Validation.** "If Discount > 20%, show error: 'Discount above policy maximum, requires approval'." - **Defaulting.** "If Industry = Manufacturing, default Payment Terms = Net 30." - **Locking after status change.** "If Status = Won, lock Estimated Revenue and Close Date." - **Recommendations.** "If Customer Type = Enterprise, recommend setting Account Manager = X." **Limits.** - **Single-table only.** Business rules reference fields on the same table; they can't read from related tables. For cross-table logic, use plug-ins or Power Automate flows. - **No external calls.** Rules can't call APIs, services, or external systems. Pure declarative logic only. - **No loops or complex iteration.** The rule is a flat condition-and-action structure. - **Activation order.** Multiple business rules on the same table fire in their activation order. Conflicts produce unpredictable behaviour. - **Performance.** Heavily nested rules with many actions slow form load. Audit if forms feel sluggish. **Choosing business rules vs other mechanisms.** - **Business rule** — simple field-level logic on one table; enforced both client and server. - **JavaScript / Client API** — complex UI logic, calls to other tables, dynamic web-resource manipulation. Client-side only. - **Power Automate flow** — multi-step logic, cross-table updates, external system calls. Server-side, asynchronous typically. - **Plug-in** — complex transactional logic, performance-critical real-time, cross-table validation. Server-side, synchronous or async. ## Lifecycle and version control Business rules live inside solutions; they version, export, and import like any other component. They show up in solution layers and managed-vs-unmanaged contexts. ## Editor UX The business rule designer is graphical — drag and drop conditions, drag and drop actions, connect them. Suitable for citizen developers. Pro developers can switch to the JSON view for finer control. ## Debugging When a business rule misbehaves, debugging is mostly inspection: - Browser developer tools to see client-side evaluation. - Audit logs for server-side firings. - Manual test data to walk through the rule. There's no breakpoint debugger; the design has to be simple enough to reason about by reading. **Common pitfalls.** - **Conflicting rules** — two rules both touching the same field with different conditions; the last one wins, often unpredictably. - **Rule logic in too many places** — same field affected by a business rule, a JavaScript handler, and a server-side plug-in; debugging becomes a nightmare. Centralise. - **Over-restrictive rules** — locking a field "until status is X" without considering edge cases prevents legitimate user work. - **Stale rules** — original rule fires for a long-gone process; new users see strange behaviour and don't know why. ## Operational discipline Document every business rule's purpose in its description field. Audit annually — retire what's not used; consolidate overlapping rules. Don't let business rules accrete without governance. --- # Business units and teams in Dataverse — a deep dive How business units, owner teams, access teams, and Microsoft 365 group teams compose the security model in Dataverse — what each is for, how they interact. Source: https://www.solvingdynamics365.com/guides/dataverse-business-units-and-teams-deep-dive Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Dataverse security has several composable elements: **business units** define organisational hierarchy, **teams** group users for shared ownership and access, **security roles** define what privileges, and **records** can be owned by users or teams. Getting the composition right is the foundation of a maintainable security model — and the wrong composition is the root cause of permission tangles years later. ## Business units (BUs) A hierarchical structure rooted at one **root BU** (the organisation itself). Child BUs nest beneath; can be many levels deep. Every user belongs to exactly one BU. Business units are primarily about **scope** in security roles. Many privilege levels (Read, Write, etc.) come with a **depth**: - **None** — no access. - **User** — only own records. - **Business Unit** — records owned by users in the same BU. - **Parent: Child Business Units** — own BU + child BUs. - **Organization** — all records. So `Read Account (BU)` lets the user see all accounts owned by anyone in the same BU as them. ## Designing BU hierarchy Three patterns: - **Geographic** — by region (Americas, EMEA, APAC) and sub-region. - **Functional** — by division (Sales, Service, Operations). - **Mixed** — a hybrid based on the security model needs. The hierarchy is rigid. Moving users between BUs is operationally heavy. Design conservatively; over-fine-grained BU hierarchies become unmaintainable. ## Teams A team is a named group of users. Three types: - **Owner team** — can own records. Users in the team see records owned by the team if they have appropriate privileges. - **Access team** — can't own records; instead grants ad-hoc access to specific records via access team templates. - **Microsoft 365 group team** — auto-synced with an M365 group's membership. Each type has its place. ## Owner teams Used when a record belongs to a group, not an individual: - Cases owned by a Support Team rather than a specific agent. - Accounts owned by the regional sales team. - Projects owned by a project team. Owner teams have a BU and a security role (or set). Team-owned records inherit access from the team's privileges plus individual users' privileges. ## Access teams Used for ad-hoc record sharing without creating a full team: - A deal that requires a cross-functional subteam. - Sensitive cases shared with a specific group of people. The pattern: 1. Define an **access team template** for the table (e.g., "Account Project Team"). 2. The template specifies what permissions members get (Read, Write, Append, etc.). 3. On a specific record, add users to the access team. 4. Users get the configured permissions on that record only. Access teams scale better than manual sharing because the membership is tracked per-record. No team explosion. ## Microsoft 365 group teams Sync membership from an M365 group: - Add a user to the M365 group → added to the team in Dataverse automatically. - Remove from M365 → removed from Dataverse team. Useful for departmental teams whose membership is already managed in M365 directory. Single source of truth for membership. ## Security roles on teams Teams can be assigned security roles. Permission a user has = max(roles they personally have) ∪ max(roles their teams have). This is the most common design pattern: **most users don't have roles directly; they inherit roles via teams**. - Easier to manage at scale. - New users added to a team get the right permissions automatically. - Permission changes happen at the role level, propagating to all team members. **The composition.** - **User** belongs to a **BU**. - **User** belongs to zero or more **teams**. - **User** has zero or more **security roles**. - **Teams** have zero or more **security roles**. - **Records** have an **owner** (user or owner team) and an owning BU. - Security check: does the user (directly or via teams) have a role granting the needed privilege at sufficient depth on the record's BU? ## Hierarchical security A separate model layered on top — manager-relationship-based access. Used less commonly; useful for "managers see their direct reports' records" patterns. **Position-based access** — another less-used layer where positions in a chart automatically grant access. Often more trouble than it's worth. **Common design mistakes.** - **Too many BUs.** Hundreds of BUs for a small organisation; users in wrong BUs constantly; data invisible across BUs that should share. - **BU as a tag.** Using BU to categorise customers (commercial vs enterprise) instead of for security scoping. Use a Choice column for categorisation. - **Individual role assignments.** Every user has individual roles; rolling out a new permission means editing every user. Use teams instead. - **Owner teams used for sharing.** Putting the user in an owner team gives them access to all the team's records — too broad. Use access teams for selective record-level sharing. - **Forgotten team membership cleanup.** Departed users still in teams; security review periodically. - **Default Business Unit on user creation.** All users default to the root BU; admin forgets to assign; entire organisation has root-level access. ## Privilege inheritance Don't confuse privilege inheritance with record ownership: - Privilege inheritance: user gets permissions from team's role. - Record ownership: user or team owns the record; their access depends on privileges. ## Operational rule Design the security model with care upfront. Start simple: a flat BU structure, role-based access via teams, access teams for ad-hoc cross-team sharing. Add complexity only when concrete needs demand it. The most maintainable security models are not the most expressive; they're the cleanest. --- # Calculated and rollup columns in Dataverse How calculated columns and rollup columns work in Dataverse — what each does, the performance trade-offs. Source: https://www.solvingdynamics365.com/guides/calculated-and-rollup-columns-in-dataverse Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Updated: 2026-08-25 Dataverse offers three related server-side computed-column types: **calculated columns**, **rollup columns**, and **formula columns**. They're easy to confuse and each has different trade-offs. Used correctly, they replace plug-ins and custom code with no-code declarations; used incorrectly, they slow records or produce stale data. ## Calculated columns A **calculated column** evaluates a formula at *read time* — every time the row is queried, the calculation runs. The formula can reference: - Fields on the same record. - Fields on related records (one level deep). - Constants and simple arithmetic. - Conditional logic (`IF`-style branching). - Some date/text functions. Example: a Total column on an Opportunity computed as `Estimated Value * Probability`. Every time the opportunity is loaded, the calculation runs. **Trade-offs.** - Always shows current values — no stale data. - No storage cost — the value isn't persisted. - Performance cost — every read recalculates. - Can't be queried efficiently — filters on calculated columns don't use indexes. - Limited formula language — not everything is expressible. ## Rollup columns A **rollup column** aggregates across related records — count, sum, average, min, max — and *persists* the result. Examples: - Number of active opportunities on an Account. - Total revenue of won opportunities on an Account. - Latest activity date across all activities on a Contact. Rollups refresh on a schedule (default: every hour) or on demand by clicking *Refresh*. The persisted value can be filtered and indexed. **Trade-offs.** - Can be queried and filtered efficiently. - Limited to specific aggregations (count, sum, avg, min, max). - Stale between refreshes — not real-time. - Refresh job consumes platform resources at scale. - Limited to one related-table aggregation per rollup. ## Formula columns Introduced more recently. **Formula columns** use **Power Fx** (the same language as canvas Power Apps) for richer formula syntax than calculated columns. They evaluate at read time like calculated columns, but with substantially more functions and constructs. **Trade-offs.** - More expressive than calculated columns. - Real-time like calculated columns. - Still read-time only. - Cannot reference related-table aggregations (use rollups for that). - Indexing is limited. **Choosing.** - **Need real-time, simple arithmetic / conditional** → calculated column or formula column. - **Need aggregation across related records** → rollup column. - **Need real-time aggregation** → use a plug-in or query-time computation, neither built-in column type works. - **Need to filter / sort on the value** → rollup (which persists) or computed at integration time and stored to a regular column. ## When to use a Power Automate flow instead When the computation is non-trivial, involves multiple steps, requires updates triggered by changes, or needs to maintain a denormalised state — use a flow: - Flow triggered on change of dependent fields. - Compute the value. - Update the target column. This produces a stored value that can be queried efficiently with full real-time freshness. The trade-off is operational complexity — flows can fail, need monitoring, and don't backfill historical records automatically. ## Plug-ins for complex cases For computations needing complex logic, cross-table aggregation in real time, transactional consistency, or external API calls — a Dataverse plug-in is the right tool. Trade-off: substantial development effort vs the no-code options. **Common pitfalls.** - **Filter / view performance** — building views that filter on calculated columns produces slow queries at scale. Use rollup columns or stored values. - **Rollup staleness** — using rollup values in real-time decision logic without forcing refresh produces wrong-feeling results. - **Formula column compatibility** — exporting solutions with formula columns to older environments may fail; check target platform version. - **Calculated column cascades** — calculated columns referencing other calculated columns chain at read time; complex chains slow record loads. ## Operational discipline Choose deliberately per use case. Default to formula columns or calculated columns for simple per-record calculations; use rollup columns for aggregations; reach for flows or plug-ins when neither built-in option fits. Document the choice and the formula for future maintainers. --- # Call center channel in Dynamics 365 Commerce How the Commerce call center channel handles phone, catalog, and mail-order sales — customer service representatives, order taking, payment processing. Source: https://www.solvingdynamics365.com/guides/dynamics-365-commerce-call-center Section: Finance & SCM / Retail & commerce Published: 2026-05-01 Not every retail sale happens at a register or online. Catalog retailers, B2B sellers, subscription businesses, and many service-based commerce models rely on **call center sales** — customer service representatives taking orders by phone. **Dynamics 365 Commerce** models this as a distinct channel with its own configurations, workflows, and reporting. ## What a call center channel is A logical retail channel: - **Distinct from store and online channels.** - **Operated by CSRs (customer service representatives)** in a call center workspace. - **Phone-based or sometimes chat-based.** - **Order-centric** — orders captured during conversations, paid, fulfilled. Use cases: - **Catalog companies** — printed catalogs trigger phone orders. - **B2B distributors** — accounts call reps for orders. - **Subscription services** — initial subscription setup by phone. - **Specialty retail** — high-value or complex products requiring rep guidance. **Architecture.** - Channel database scoped to the call center. - CSRs use the **call center workspace** in F&O or D365 Commerce. - Same product catalog and pricing as other channels (with channel-specific overrides). - Same customer master. - Same inventory. ## Call center workspace The CSR's primary interface: - Search for customer or create new. - View customer history. - Build the order with line items. - Apply promotions and discounts. - Capture payment. - Process the order. - Manage holds, returns, and exchanges. The workspace is optimised for keyboard-driven, rapid order entry — different ergonomics from a graphical e-commerce site. ## Catalog management Catalog companies print physical or PDF catalogs: - **Source code** — identifier on catalog (or marketing campaign) that drives the call. - **Item references** — catalog item numbers map to system items. - **Promotional pricing** — specific to catalog campaign. When a customer calls, the source code helps the CSR know which catalog the customer is referencing — and which prices and promotions apply. ## Up-sell and cross-sell During order entry: - Suggested upgrades shown ("Premium version available for $X more"). - Cross-sell opportunities ("Customers who bought this also bought..."). - Bundle offers. CSR can accept or decline based on customer interest. The conversion-rate impact justifies the feature. **Order types.** - **Regular sale** — standard. - **Layaway** — partial pay, hold inventory. - **Subscription** — recurring shipment. - **Future ship** — delayed delivery. - **Continuity** — automatically renewing subscription series. Each has unique financial accounting and inventory commitment patterns. ## Payment processing Call center payment is high-risk — card not present, no signature, no chip. Patterns: - **Card token-based** — capture card via PCI-compliant entry; gateway returns token; token used for charge. - **Stored payments** — registered customers have saved cards; one-click charge. - **Manual capture** — CSR types card details into PCI-compliant entry; never written down. - **ACH / bank transfer** — for high-value B2B. **Fraud screening.** - Address verification (AVS). - Card verification value (CVV). - IP and behavioural risk scores. - Manual review queue for flagged orders. Call center fraud rates are higher than online (anonymous channel, manual entry); fraud controls compensate. ## Inventory commitment When the order is taken: - Inventory reserved at the warehouse. - If out of stock, options: - Backorder. - Substitute. - Cancel. - CSR sees real-time availability. **Shipping and fulfillment.** - Order routed to warehouse based on rules (closest, best stock). - Shipping method per customer preference and item characteristics. - Tracking info captured and emailed. Call center orders fulfill same as other channels — same warehouse, same shipping process. **Returns and exchanges.** - CSR handles return calls. - Issues RMA if needed. - Customer ships back; warehouse receives; refund processed. ## Customer history During the call, CSR sees: - Recent orders. - Open orders. - Returns. - Communications history. - Loyalty / lifetime value. Personal touch matters in call center sales — knowing the customer transforms the interaction. ## Continuity programmes Subscription-style: - Customer signs up for monthly box. - Auto-charge each month. - Auto-ship. - Cancellation handling. Continuity revenue is a meaningful portion of catalog company revenue; the system must manage the lifecycle reliably. **Reporting per channel.** - **Sales by source code** — which catalog or campaign drove revenue. - **CSR performance** — orders per hour, conversion rate, average order value. - **Channel comparison** — call center vs online vs store. - **Backlog and aging** — orders awaiting fulfillment. ## Integration with telephony Optional but common: - Caller ID looks up customer automatically. - Click-to-dial outbound. - Call recording for QA. - Integration with contact center platform. **Common pitfalls.** - **Source code drift.** CSRs forget to capture; marketing attribution wrong. - **Inventory commitment race conditions.** Two CSRs see same stock; both commit; one fails. - **Pricing overrides too easy.** CSRs giving discounts without authorisation; margin leakage. - **No QA on call recordings.** Recordings exist but no one reviews; coaching opportunity lost. - **Continuity opt-in confusion.** Customer didn't realise they signed up for recurring; complaints. - **Card decline handling poor.** Order goes into limbo; customer not notified; revenue lost. ## Operational discipline Call center sales is a measured business — conversion rate, average order value, items per order, calls per hour. Mature operations have dashboards per CSR and per shift, with coaching tied to specific metrics. The system supports the operation; the operational rhythm is the difference between a profitable channel and a money-losing one. ## Strategic positioning The call center channel is unfashionable but profitable for the right businesses. Some retailers (Land's End, L.L. Bean, gardening catalogs) drive significant revenue through it. Some B2B sellers run almost exclusively through it. D365 Commerce treats it as a first-class channel — same data, same fulfillment, integrated reporting. For organisations with this sales motion, the depth of capability is meaningful; for others, the call center channel is irrelevant. --- # Canvas app offline mode How to build offline-capable canvas Power Apps — local data, sync patterns, conflict handling, and the limits of mobile-first scenarios. Source: https://www.solvingdynamics365.com/guides/canvas-app-offline-mode Section: Power Platform / Power Apps Published: 2026-05-01 Field workers, warehouse staff, on-site technicians, sales reps in flaky connectivity — for any user who works without reliable network, an app that fails offline is an app that fails. Power Apps canvas apps support **offline mode** with local data, scheduled sync, and conflict handling. The architecture is functional; the design patterns to use it well matter. ## The model An offline-capable canvas app: - Pre-loads data from Dataverse (or other connectors) into a local **SQLite database** on the device. - Uses the local data for reads and writes while offline. - Synchronises to the source when connectivity returns. - Handles conflicts when remote data has changed since the local copy. **Configuration.** In the app designer: - **Enable offline** — the app's *Offline* setting in settings. - **Define offline tables** — which Dataverse tables (and filtered subsets) the app caches locally. Configured as **collections** with explicit `LoadData()` / `SaveData()` patterns, or via the newer **Profile** declarative offline support that handles caching automatically. - **Sync schedule** — frequency of background sync when online (typically every 5–15 minutes). - **Manual refresh** — a button users can click to force sync. ## Data scope Offline mode is most useful when each user works with a *subset* of data: - A field technician needs only today's work orders and the related customer / asset records. - A warehouse picker needs only items in their assigned zones. - A sales rep needs only their accounts and recent opportunities. Pre-loading 10,000 records per user is feasible; pre-loading 100,000 is impractical (storage, performance). Define offline profiles narrowly to keep the local dataset focused. **Read patterns offline.** - Standard `Filter()`, `Search()`, `LookUp()` functions work on the local cache transparently. - Performance is typically faster offline than online (no network round-trip). - Related-record lookups need the related records in the offline cache too — pre-load related tables. **Write patterns offline.** - Writes happen to the local store; sync queues the changes for upload. - The user sees their write reflected immediately in the local UI. - On reconnect, queued changes flush to the source. - The UI typically shows a sync status badge — "online", "syncing", "offline with N changes pending". **Conflict handling.** When the user writes offline and someone else has modified the same record online: - **Last-writer-wins (default)** — the local write overwrites the remote on sync, potentially losing the remote change. - **Server-wins** — the local change is discarded if remote has changed. - **Manual conflict resolution** — surface the conflict to the user; let them choose. Most reliable but disruptive. - **Field-level merge** — for non-conflicting field changes on the same record, merge cleanly; only true conflicts surface. The app's design chooses the strategy. For most field-service scenarios, last-writer-wins on the technician's update is acceptable; for sensitive records, manual resolution is safer. ## Photos and attachments Photos taken offline cache locally and upload on reconnect. The app handles the queue; the user just takes the photo and trusts the platform. **Limits.** - **Storage caps** — each app's offline cache has limits (typically a few hundred MB depending on device). - **Not all connectors support offline** — Dataverse is well-supported; SharePoint and SQL have varying degrees; others may not work offline. - **No real-time during sync** — sync gaps mean the local data is stale by definition. - **Complex relationships** can be hard to fully cache — deep many-to-many networks don't always pre-load completely. **Common patterns.** - **Pre-load on app launch** — app opens, syncs immediately, ready for the day's work. - **Pre-load on schedule** — daily morning sync before users start. - **Manual sync action** — a button for explicit sync; users learn when they need it. - **Status indicators** — visible sync status, pending changes count, last sync timestamp. **Common pitfalls.** - **Pre-loading too much** — users wait minutes for sync; performance degrades. - **Not handling conflicts** — last-writer-wins by default loses remote work users care about. - **No retry on sync failure** — temporary network issues leave changes stuck. Implement retry with exponential backoff. - **Stale data assumed fresh** — users act on data that's 4 hours old, not realising. Show sync timestamp prominently. **Operational discipline.** - **Test offline scenarios deliberately** — fly mode, weak signal, intermittent connectivity. Don't just test online with airplane mode briefly. - **Train users** on the offline indicators and behaviour. - **Monitor sync failures** in telemetry; investigate patterns. - **Pilot with field users** before broad rollout. Done well, offline canvas apps transform the productivity of field workers; done badly, they erode trust in mobile work. --- # Canvas apps vs model-driven apps When to build a canvas Power App versus a model-driven app — pixel-perfect UI, data-driven structure, and the trade-offs each one forces. Source: https://www.solvingdynamics365.com/guides/canvas-apps-vs-model-driven-apps Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Power Apps gives you two genuinely different app-building paradigms. Choosing the right one early matters; switching later is expensive. ## Model-driven apps A model-driven app is generated from a Dataverse schema. You define tables, columns, relationships, forms, and views; the platform renders a consistent, responsive UI around them. Customers see a familiar Dynamics 365 look — left navigation, command bar, business process flows along the top. Every record is reachable via a stable URL; advanced find, audit, security roles, dashboards, and reports all come for free. ## Strengths of model-driven Best for line-of-business CRM-style apps with rich Dataverse schemas and complex security. Standardised UX means little design work. Power BI dashboards, business rules, BPFs, and automation integrate cleanly. Dynamics 365's CRM-side apps (Sales, Customer Service, Field Service) *are* model-driven Power Apps. ## Limits of model-driven Layout is constrained by Dataverse's form designer; you can't put a button anywhere, you can't draw bespoke shapes, and you can't easily build a process that doesn't fit the table-and-form paradigm. ## Canvas apps A canvas app starts from a blank screen. You drag controls — galleries, text inputs, dropdowns, charts, image cards — and write expressions in **Power Fx** to wire them to data sources. You can mix Dataverse with SharePoint, SQL, REST APIs, Excel, and hundreds of other connectors in one app. The shape of the app is whatever you draw. ## Strengths of canvas Pixel-perfect UX. Mobile-first or kiosk-style apps where standard Dynamics 365 chrome would be overkill or distracting. Multi-source data where the user thinks of one screen, not five tables. Cross-data-source flows — e.g. an inspection app that writes to Dataverse and uploads photos to SharePoint. ## Limits of canvas No automatic role-based security on UI elements (you check in expressions). No built-in advanced find, dashboards, or reports — you build them. Scaling to dozens of screens gets unwieldy fast — apps with hundreds of controls become hard to maintain. ## Custom pages A modern hybrid: a canvas-app-style page embedded inside a model-driven app. Use them when 90% of your app is model-driven but one screen needs canvas-style flexibility (a dashboard, a wizard, a guided picker). **Choosing.** - Building a CRM-style app? Model-driven. - Building a field-worker mobile app on top of multiple systems? Canvas. - Need bespoke UI inside a CRM app? Custom page. - Building a portal? Power Pages, not either of these. The biggest mistake is building canvas when model-driven would do — and then re-implementing security, search, and reporting you'd have got for free. ## Where to go next If the real question is whether to buy a Dynamics 365 app at all, read [Power Apps vs Dynamics 365 CRM](https://www.solvingdynamics365.com/guides/power-apps-vs-dynamics-365-crm). Mixing the two on one form is [PCF controls vs embedded canvas apps](https://www.solvingdynamics365.com/guides/integrating-pcf-controls-vs-embedded-canvas-apps); the canvas language is [Power Fx explained](https://www.solvingdynamics365.com/guides/power-fx-explained); the model-driven shell is [the app designer](https://www.solvingdynamics365.com/guides/app-designer-for-model-driven-apps). When a canvas app misbehaves, [canvas app errors explained](https://www.solvingdynamics365.com/guides/power-apps-canvas-app-errors-explained) is the reference. ### Frequently asked questions **When should I build a model-driven app?** For CRM-style, record-heavy apps over a rich Dataverse schema with complex security. You get forms, views, dashboards, search and role-based security generated from metadata — little design work, standardised UX. The Dynamics 365 CRM apps are themselves model-driven apps. **When is a canvas app the right choice?** When you need pixel-perfect UX, a mobile-first or kiosk experience, or one screen over multiple data sources — Dataverse mixed with SharePoint, SQL or REST APIs. You draw the app; the trade-off is you build security checks, search and reporting yourself. **What are custom pages?** A hybrid: a canvas-style page embedded inside a model-driven app. Use one when 90% of the app is model-driven but a single screen — a wizard, a dashboard, a guided picker — needs canvas-style freedom. **What is the most common mistake?** Building canvas when model-driven would do, then re-implementing the security, advanced find and reporting that model-driven would have provided for free. --- # Capacity planning for Dynamics 365 How to plan and monitor capacity in a Dynamics 365 tenant — Dataverse storage, API calls, AI Builder credits, environments, and the cost levers that matter. Source: https://www.solvingdynamics365.com/guides/capacity-planning-for-dynamics-365 Section: Implementation / Operations & support Published: 2026-05-01 Capacity planning is the unglamorous side of Dynamics 365 operations. Done well, it prevents the surprise emails ("you've exceeded your storage allowance and Microsoft will start billing overages next month") that nobody wants. Done badly, it forces emergency licence purchases at the worst possible time. Three resources dominate: Dataverse storage, API call volume, and AI Builder credits. ## Dataverse storage The most-watched capacity metric. Dataverse storage is split into three tiers: - **Database** — the relational store. Most expensive. Holds the transactional data and indexes. Allocated per tenant based on licences; per-user Dynamics 365 SKUs add a small amount each. - **File** — attachments, images, file columns. Cheaper. SharePoint document storage (for documents on records) is separate and *not* counted here. - **Log** — audit logs, plug-in trace logs, change history. Cheapest. ## Watching consumption The **Power Platform admin centre** shows usage per environment over time. Trending matters more than current value — what's growing at 50 GB/month and what's stable? Common growth drivers: - Email tracking (each tracked email is a Dataverse record with full content). - Plug-in trace logs (enable verbose tracing temporarily for debug, forget to disable, grow rapidly). - Audit history on high-volume tables. - Notes and attachments stored in Dataverse rather than SharePoint. **Lowering Dataverse consumption.** - **Move documents to SharePoint** for record attachments. SharePoint storage is generous in M365 licences; Dataverse File storage is not. - **Bulk-delete old audit history** beyond the retention requirement. - **Disable plug-in trace logging** in production except when debugging. - **Archive old data** to OneLake via Synapse Link, then bulk-delete from Dataverse. ## API call capacity Dataverse, Business Central, and Finance/SCM all have per-tenant API call limits, generally generous but real. Power Automate flows, integrations, and custom apps all count toward the limit. Heavy integration tenants can hit it. ## Watching API consumption The admin centre shows API request volumes per user and per environment. The most common surprise: a Power Automate flow that started running 1,000× per hour because of a misconfigured trigger. **Lowering API consumption.** - **Filter at the trigger** so flows only fire on relevant changes. - **Batch operations** rather than calling per row. - **Cache** read-heavy lookups instead of fetching every time. - **Use webhooks or Service Bus integration** instead of polling. ## AI Builder credits AI Builder runs on a credit model — each invocation consumes credits. Tenants get an allocation per licence and per add-on. Credit consumption grows with document automation, prediction models, and AI-powered actions. Monitor monthly; budget against expected automation volume. ## Environments as a capacity unit Each environment counts against tenant resources. Sandboxes are mostly free up to a cap; production environments cost. ## Forecasting growth Project capacity 12–24 months ahead: - New users → more storage and more API calls. - New integrations → more API calls. - New features → more storage and Power Automate runs. - Acquisition or organic growth → step-changes in volume. ## The annual review Once a year, look at capacity vs licence allocation, project the next 12 months, and either buy capacity add-ons proactively or implement reduction work (archive, delete, deprecate). Don't wait for the over-limit alert. **Common patterns.** - **First-year over-provision** by buying generous storage add-ons "just in case" — usually unnecessary. - **Third-year crisis** when audit history and email tracking have eaten through the original allocation — proactive cleanup avoids. - **Sudden integration overrun** when a poorly-designed flow burns API quota — daily monitoring catches early. ## Operational reality Capacity planning is 30 minutes a month of admin review and 4 hours a year of forecasting. Worth it. --- # Cascading delete in Dataverse How Dataverse relationships behave on delete — cascade, restrict, remove link, and the implications for data integrity and accidental data loss. Source: https://www.solvingdynamics365.com/guides/cascading-delete-in-dataverse Section: Customer Engagement / Dataverse platform Published: 2026-06-28 When a Dataverse record is deleted, what happens to its related records? **[Cascading behaviour](https://www.solvingdynamics365.com/glossary/cascading-delete)** — configured per relationship — determines whether children are deleted too, whether the parent's deletion is blocked, or whether the relationship is simply broken. Getting these settings right matters; wrong settings produce surprising data loss or surprising deletion failures. **The cascade options.** Each 1:N (one-to-many) relationship in Dataverse has cascade settings for several operations — Assign, Reparent, Share, Unshare, Merge, and most importantly **Delete**. For Delete, the options are: - **Cascade** — when the parent is deleted, all child records are also deleted. The whole subtree disappears together. - **Restrict** — block the delete of the parent if child records exist. The user must delete children first or the operation fails. - **Remove Link** — delete the parent but break the relationship (set the child's lookup to null). The children survive but become orphans. - **Cascade Active** — like Cascade but applies only to *active* child records; inactive ones are left behind. - **Cascade User-Owned** — cascade applies only to children owned by the same user; others have their link removed. **Common patterns.** - **Account → Contacts** (typical default: Cascade) — when an Account is deleted, its child Contacts are deleted too. Reasonable when the Account's deletion means the whole customer relationship is gone. - **Account → Cases** (often configured: Restrict) — don't let the Account be deleted while it has open cases. Forces explicit handling of pending work. - **Opportunity → Quote** (typical: Cascade) — closing or deleting an opportunity should cascade to its draft quotes. - **Contact → Email Address Detail** (typical: Cascade) — contact-specific child data follows the contact. - **System User → Owned Records** (typical: Restrict at user record, or specific reassignment workflow on departure) — users leaving the company should have their records reassigned rather than orphaned or lost. ## Designing cascade behaviour When creating a relationship between two custom tables, choose: - **Cascade** when the child's existence makes no sense without the parent. A Sales Order Line makes no sense without the Sales Order; cascade. - **Restrict** when the child has independent value or business meaning. A Customer has Cases; deleting the Customer shouldn't lose case history. - **Remove Link** rarely the right choice — orphans are usually unintended. ## Performance Deep cascade chains can produce slow operations. Deleting an Account that cascades to Contacts that cascade to Activities that cascade to Notes can run for seconds or minutes if the subtree is large. Plan for this with admin operations. ## Cascade and bulk delete Bulk delete jobs respect cascade settings — deleting a thousand parents can multiply to tens of thousands of cascaded deletes. Plan capacity. ## Cascade and audit When records are cascade-deleted, the audit log records each deletion. For audit-sensitive scenarios, ensure the audit is comprehensive enough to reconstruct the deletion chain. ## Cascade and integrations Integrations that watch for deletion events (via webhooks, change tracking, or Service Bus) receive notifications for each deleted record in the cascade. High-volume cascades can flood integration consumers. ## Cascade vs deactivation A frequently-better pattern: **deactivate** rather than delete. Deactivated records remain in the database with an *Inactive* status; relationships are preserved; reporting can include or exclude them. Cascade behaviour applies only to actual deletes. For records that genuinely shouldn't survive the parent's removal (transient child data, draft documents), deletion makes sense. For records with audit / historical value, deactivation is safer. ## Configuration vs default Each table has default cascade configurations on its system relationships. Custom relationships can be configured per integration intent. Auditing the cascade settings on critical tables is part of solution review. **Common pitfalls.** - **Cascade where Restrict was intended** — accidentally deleting child records that should have been preserved. Reversal through point-in-time restore is the recovery, with data loss between backup and now. - **Restrict where Cascade was intended** — deleting a parent fails with "child records exist" errors; user can't tell what to do. - **Remove Link causing orphan accumulation** — orphan child records pile up with no parent; reporting becomes inconsistent. - **Cascade chain unintentionally deep** — a delete propagates further than expected, removing data the operator didn't realise would be touched. ## Audit recommendation Before activating an environment for production, audit cascade settings on critical tables. Document the intended behaviour. Test deletion scenarios. The cost of audit is small; the cost of surprise data loss is enormous. ## Operational reality Cascade settings are part of the data-model contract. Get them right at design time; they're hard to change safely once data accumulates. When in doubt, prefer Restrict — failed deletes are recoverable; cascade data loss isn't. --- # Case management deep dive in Dynamics 365 Customer Service How case management works in depth — case types, statuses, parent/child cases, merge and convert, SLAs, and the case lifecycle that drives service operations. Source: https://www.solvingdynamics365.com/guides/case-management-deep-dive-in-customer-service Section: Customer Engagement / Customer Service Published: 2026-05-01 The **case** is the fundamental record in Dynamics 365 Customer Service. Every inbound issue — by email, chat, phone, social — typically becomes a case, lives a lifecycle of investigation and resolution, and contributes to service KPIs. Understanding the case model's nuances unlocks operational discipline. ## Case anatomy A case captures: - **Title** — short description. - **Customer** — the account or contact reporting. - **Status** — Active, Resolved, Cancelled (each with finer reasons). - **Origin** — channel (email, phone, web, chat). - **Priority** — low/normal/high/urgent. - **Severity** — impact level. - **Subject** — the case type, often hierarchical. - **Owner** — agent or queue. - **Created on / Resolved by date** — for SLA calculations. - **Resolution** — narrative of how it was resolved. ## Case statuses and status reasons Each main status has secondary status reasons: - **Active**: In Progress, On Hold, Waiting for Details, Researching. - **Resolved**: Problem Solved, Information Provided. - **Cancelled**: Cancelled, Merged. The status reasons are configurable; they're the granular reporting axis. "Closed cases" is interesting but "closed cases by reason" reveals operational patterns. ## Subject hierarchy Subjects are a hierarchical taxonomy (Subject table). Used for: - **Categorisation** — "Billing → Invoice Dispute → Wrong Address." - **Routing** — cases in a subject branch route to specific queues. - **Reporting** — what subjects generate volume? Good subject design is a piece of structural work — too shallow (just top categories) loses information; too deep, agents pick wrong categories. ## Parent / child cases Cases can be related hierarchically: - **Parent case** — the umbrella issue. - **Child cases** — individual customer reports of the same problem. Useful for major incidents (production outage affecting 50 customers) — one parent case tracks resolution, child cases preserve individual customer history. Parent resolution can cascade to children. ## Merge cases Two cases for the same issue from the same customer: - Merge collapses into one; the merged-away case is marked Cancelled/Merged. - All activities (emails, notes, tasks) move to the surviving case. - Maintains audit trail. Merge is a daily operation in environments where customers report the same issue through multiple channels. ## Convert Cases can convert to other entity types: - **Lead** — if the customer is asking about a product, not reporting a problem. - **Opportunity** — same. - **Knowledge article** — if the resolution is broadly useful, convert to KB content. - **Recurring case template** — for repeated issue patterns. The convert path keeps the case data flowing where it's most useful. ## SLA association Each case can have SLAs applied: - **First response by** — time to first agent reply. - **Resolve by** — time to close. - **KPIs paused** during specific status reasons (waiting on customer doesn't tick). SLA configuration is per-case-type or per-customer-tier. SLA breaches drive escalations and alerts. ## Routing When a case is created, routing rules determine the queue: - Origin-based — chat cases go to chat queue. - Subject-based — billing issues go to billing queue. - Customer-based — VIP customers go to dedicated queue. - Skill-based — language, product expertise required. The **unified routing** capability layers ML on top — predicts ideal agent based on past resolution data. ## Knowledge integration Cases tied to knowledge articles: - Agent searches KB while working a case. - Article linked to case; usage tracked. - Resolution flag if KB resolved it. KB usage metrics flow back to content strategy — which articles are working, which gaps exist. ## Email-to-case Inbound email creates or updates cases: - **Mailbox configured** as a queue. - **Email** processed by server-side sync. - **Subject matching** appends to existing case (if reference key present); otherwise creates new. Reference keys (a Dynamics-generated ID in email subject) tie subsequent replies to the same case. Configure carefully; mismatched keys split conversations into multiple cases. ## Resolution Closing a case: 1. Click Resolve. 2. Select resolution type (Problem Solved, Info Provided). 3. Enter resolution narrative. 4. Enter time spent (billable hours, if relevant). 5. Confirm SLA status. 6. Case status → Resolved. The resolution narrative feeds knowledge content — well-written resolutions become the seed of KB articles. ## Case forms in Workspace Customer Service Workspace renders cases optimised for multi-session: - Compact form layout. - Productivity pane on the side. - Smart assist suggestions surface inline. **Common pitfalls.** - **Subject taxonomy unmanaged.** Agents pick subjects ad-hoc; reporting unreliable. - **No SLA discipline.** SLA enabled but breaches not actioned; metric pollution. - **Cases reopened without policy.** "Resolved" cases reopen routinely; resolution rate inflated. - **Email-to-case duplicates.** Misconfigured reference keys split conversations. - **Status reasons proliferating.** Every supervisor adds a new reason; reporting becomes incomprehensible. ## Operational rhythm Daily queue review by supervisors; weekly trend analysis by service managers; monthly subject and SLA review by leadership. The case data is rich; using it for continuous improvement is the discipline that distinguishes mature service operations. ## Strategic positioning Case management is the operating system of customer service. Get the fundamentals right — taxonomy, routing, SLA, resolution discipline — before layering on AI features, omnichannel, and analytics. Without a clean case foundation, advanced features amplify rather than fix operational chaos. --- # Cash flow forecasting in Business Central How Business Central's cash flow forecast pulls open sales, purchases, fixed assets, jobs, and manual entries into a forward view of liquidity. Source: https://www.solvingdynamics365.com/guides/cash-flow-forecasting-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 The **Cash Flow Forecast** in Business Central pulls every operational signal that will eventually hit the bank — receivables, payables, planned purchases, planned sales, fixed-asset disposals, job billing, and manual adjustments — into a single forward view of liquidity. For SMB CFOs and controllers, it's the bridge between "what does the bank look like next month" and the underlying transactional system. ## The model A **cash flow forecast card** holds the configuration: which sources to include, which GL accounts represent the cash position, how far out to forecast, and which user/role is responsible. A forecast can be defined globally for the company or scoped to specific dimensions (e.g. one forecast per business unit). **Sources.** - **Liquid funds** — opening bank balances at the forecast start date. - **Receivables** — open customer ledger entries, by due date. - **Payables** — open vendor ledger entries, by due date. - **Sales orders** — open sales orders not yet invoiced, contributing income at planned shipment dates. - **Purchase orders** — open purchase orders not yet invoiced, contributing outflow at planned receipt dates. - **Service orders** — planned service income. - **Fixed asset disposals and budgets** — planned proceeds and acquisition costs. - **Job planning** — billable lines and cost lines from open jobs. - **G/L budgets** — operating expense projections from the budget module for forward outflows. - **Cash flow manual revenues and expenses** — entered for the forecast directly to capture items not held elsewhere (loan repayments, dividends, tax instalments). Each source can be toggled on or off per forecast. ## Sub-daily vs aggregated The view can show day-by-day projections for short horizons (the next 30–60 days, where precision matters) or weekly/monthly buckets for longer horizons. ## Azure AI forecasting Business Central includes an optional **Azure AI cash flow prediction** that augments the deterministic forecast with a machine-learning model trained on the company's historical patterns. The AI predicts customer payment delays (which invoices will pay on time, which will slip) and adjusts the receivables timing accordingly. Useful for businesses with predictable payment patterns; sensible to verify against actuals before relying on it for tight cash decisions. ## Where it stops The forecast is operational, not strategic. It doesn't model scenarios, sensitivity, or what-ifs around revenue or cost beyond plain budgets. For CFO-grade scenario modelling, customers integrate to a CPM tool or build the scenario layer in Power BI on top of the cash flow data. ## Adoption tip Many implementations skip the cash flow forecast because the budget data isn't kept current. Get a clean budget into the GL and the forecast becomes useful immediately. --- # Cash flow forecasting in Dynamics 365 Finance How F&O forecasts cash flow — cash flow forecast configuration, dependent transactions, scenario modelling, and the rhythm of weekly cash management. Source: https://www.solvingdynamics365.com/guides/cash-flow-forecasts-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 Cash is what keeps a business running; running out of cash is a hard failure mode that even profitable businesses experience. **Cash flow forecasting** in F&O projects expected cash inflows and outflows over coming periods, giving the finance team visibility into upcoming squeezes or surpluses. The configuration is detailed; the operational discipline of using the forecast is where value materialises. ## Forecast scope A cash flow forecast aggregates: - **Opening cash balance** — bank accounts. - **Expected inflows** — sales orders to be invoiced, AR to be collected, etc. - **Expected outflows** — AP to be paid, payroll, taxes, etc. - **Period-end position** — projected balance. Over weeks or months, the forecast shows the cash trajectory. ## Cash flow forecast configuration Two main components: - **Cash flow forecast** — the master record naming the forecast. - **Dependent forecast configurations** — what feeds into it. Dependent configurations include: - Sales order forecasts. - Purchase order forecasts. - Vendor invoice forecasts. - Customer invoice forecasts. - Project transactions. - Recurring transactions (payroll, rent). - Subscription billing. - Manual entries (planned investments, financings). Each dependent configuration specifies which records flow in, how they're timed (by due date, by payment date), and what's included. **Timing methodology.** - **Sales orders** typically forecast by expected shipment + payment terms → invoice date. - **AR open invoices** forecast by due date + customer payment behaviour (historically delayed?). - **AP open invoices** forecast by due date + our payment plan. - **Purchase orders** forecast by expected receipt + vendor terms. The configuration includes adjusters — "customer X pays 10 days late on average" — to refine forecast accuracy. **Forecast horizon.** - **Weekly** — typical for short-term cash management. - **Monthly** — for medium-term planning. - **Quarterly** — for strategic reviews. Different forecasts can exist with different horizons and frequencies. ## Calculate Cash Flow Forecast The batch: - Runs against configured forecasts. - Pulls current data per dependent configuration. - Computes projected daily / weekly / monthly cash flows. - Updates the forecast tables. Result: a calendar of projected inflows and outflows; cumulative cash position. ## Scenario analysis "What if" modelling: - Multiple forecast versions. - "Base case" — current plan. - "Conservative" — slower collections, faster payments. - "Optimistic" — accelerated collections. - "Stress test" — major customer defaults. Comparison between scenarios reveals sensitivity and risk. **Inflow specifics.** - **Customer invoices outstanding** — by due date and customer behaviour. - **Sales orders not yet invoiced** — based on expected ship date. - **Subscription renewals** — for SaaS-like businesses. - **One-off receipts** — capital infusions, asset sales. **Outflow specifics.** - **Vendor invoices outstanding** — by due date and our payment policy. - **Purchase orders not yet invoiced** — expected receipt and vendor terms. - **Payroll** — recurring per period. - **Tax payments** — scheduled per tax type. - **Loan payments** — debt service. - **Investment / capex** — capital outlays. ## Currency Multi-currency forecast: - Bank accounts in various currencies. - FX assumed (current rates or forecast rates). - Consolidation to reporting currency. For multinational treasury operations, currency dynamics are part of cash forecasting. **Reporting.** - **Daily cash position** — today's actual balance. - **Weekly forecast** — 4–13 week rolling. - **Variance analysis** — actual vs forecast per week. - **Cash conversion cycle** — days sales outstanding, days payable outstanding, days inventory outstanding. Mature treasury operations have a dashboard with these metrics; checked daily. ## Integration with treasury management Larger organisations use specialty treasury management systems (Kyriba, FIS Quantum) for: - Bank account management. - FX hedging. - Investment of excess cash. - Debt management. F&O integrates via reports and APIs; treasury system overlays. **Common pitfalls.** - **Forecast not refreshed.** Static forecast vs dynamic reality; useless. - **Customer payment behaviour static.** Average days payable assumed; specific customer trends ignored. - **Manual entries forgotten.** Planned investment not added; surprise outflow. - **No variance review.** Forecast vs actual not compared; forecast quality doesn't improve. - **Single base case.** No scenarios; risk hidden. - **Stale FX rates.** Currency exposures miscalculated. **Operational rhythm.** - **Daily** — actual cash position check. - **Weekly** — forecast refresh and review. - **Monthly** — variance analysis; scenario update. - **Quarterly** — full forecast review with leadership. The cadence is the forecast's value — without it, the static forecast becomes stale and ignored. **Cash flow forecast vs budget.** - **Budget** — annual financial plan; P&L oriented. - **Cash flow forecast** — cash position over time; treasury oriented. Both are needed; different lenses on similar underlying business. ## Strategic positioning Cash flow forecasting is the discipline that prevents liquidity crises. The F&O module is comprehensive; the operational rhythm around it determines value. For organisations with seasonal cash dynamics, growth-driven working capital needs, or refinancing pressures, a robust forecast process is essential. For others, monthly forecasts are sufficient. Invest in the configuration upfront, in the weekly rhythm operationally, and in the leadership engagement with the forecast strategically. --- # Catch weight items in Dynamics 365 SCM How F&O handles variable-weight inventory like meat, cheese, and produce — the dual unit-of-measure model, catch weight tags. Source: https://www.solvingdynamics365.com/guides/catch-weight-items-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 A box of beef weighs about 18kg — but actually 17.642kg or 18.193kg depending on the box. The customer is invoiced for actual weight, but the warehouse counts and ships in boxes. This dual-unit reality — count one way, weigh another — is what **catch weight** handling in F&O addresses. Without catch weight, every box would have to be created as a unique item with its actual weight, which is operationally absurd. **The two units of measure.** - **Inventory unit** — what you count. Typically "EA" (each), "BOX", or "CTN". - **Catch weight unit** — what you weigh and price. Typically "KG", "LB". The item is set up with both. Each transaction line carries both quantities: a sales line might be 5 EA @ 87.5 KG at $4.20/KG. ## Item setup On the **Released Product**, enable catch weight: - **Catch Weight Item = Yes**. - **Inventory Unit** — counting unit. - **Catch Weight Unit** — weighing unit. - **Nominal Quantity** — expected weight per inventory unit (18 KG per BOX). - **Minimum Quantity / Maximum Quantity** — allowable variance (16–20 KG per BOX). The nominal lets the system pre-fill expected weight; the min/max constrains capture to flag obvious errors. ## Operational capture Every inbound and outbound transaction prompts for actual weight: - **Purchase receipt** — operator captures actual weight of received boxes. - **Production output** — actual weight per finished good unit. - **Inventory adjustment** — actual weight when adjusting count. - **Sales picking** — actual weight per picked unit. - **Production consumption** — actual weight consumed. Scale integration (electronic weigh scales connected to the warehouse mobile device or terminal) automates capture; without it, manual weight entry is the norm. ## Pricing Trade agreements (price lists) are typically per catch weight unit (per KG, per LB) — the inventory unit (BOX) is just the handling unit, but invoicing is by weight. A 5-BOX line at $4.20/KG with captured weight 87.5 KG bills at $367.50. ## Inventory valuation Both quantities are tracked at every step: - **On-hand** in inventory unit (250 BOX) and catch weight unit (4,500 KG). - **Cost** can be per inventory unit or per catch weight unit depending on costing setup. The cost engine handles both — most food companies cost per KG for accuracy. ## Lot-based variability Each lot of a catch weight item can have its own weight characteristics. Combined with item tracking (lot/serial), full traceability of weight per lot is captured: lot ABC has 50 BOX totalling 905 KG; lot DEF has 50 BOX totalling 890 KG. Same SKU, different per-unit weights. ## Catch weight tag Some operations track individual unit weights through a **catch weight tag** — a barcode label printed at production or receipt, capturing the specific unit's weight. When the unit is sold, the tag is scanned and the system pulls the exact weight. This is the high-end pattern for traceability and accurate invoicing. ## Reservation and picking Catch weight complicates reservation: - Reserving 100 KG when each box is 17.5–18.5 KG means reserving 5 or 6 BOX. - Picking might short or over the reservation weight; the order is adjusted at confirmation. The reservation engine has catch-weight aware logic, but warehouse picking flows need to handle the variability — the picked weight is rarely the planned weight to the gram. ## Integration with WMS Mobile warehouse devices integrated with scales capture weights in line with pick/put-away. Without integration, operators handwrite weights and key them in later — error-prone and slow. **Common pitfalls.** - **Catch weight added to existing item.** Switching an item from non-catch-weight to catch-weight is operationally painful; existing inventory must be re-weighed. - **Variance limits too tight.** Real-world weights exceed the min/max; receipts blocked; warehouse frustration. - **Variance limits too loose.** Bad data slips in; weight totals wrong. - **Pricing unit confusion.** Trade agreement set per BOX instead of per KG; invoices wrong. - **Costing unit mismatch.** Costed per BOX (nominal weight) but sold per KG (actual weight); margin calculation noisy. ## Regulatory compliance Food traceability (FSMA, EU Reg 178/2002) often requires per-lot weight tracking for recall scenarios — knowing exactly how much weight was distributed to which customers per lot. Catch weight + item tracking achieves this in F&O. ## When you need it Catch weight is essential for: meat, poultry, fish, cheese, fresh produce, bulk chemicals, anything weighed in handling units that vary. It's overkill for items that are dimensionally fixed. ## Operational discipline Catch weight depends on accurate weight capture at every step. Scale integration, operator training, and exception monitoring (weights outside expected variance) are essential. Without that discipline, the precision the module enables is illusory. --- # Center of Excellence Starter Kit How Microsoft's CoE Starter Kit helps tenant-wide governance of the Power Platform — admin, monitor, nurture, theme, and the operational impact. Source: https://www.solvingdynamics365.com/guides/center-of-excellence-starter-kit Section: Power Platform / ALM & governance Published: 2026-05-01 The **Center of Excellence (CoE) Starter Kit** is Microsoft's free, open-source collection of Power Platform components designed to help organisations govern, monitor, and grow citizen development at scale. It's not Microsoft's only governance tooling — many enterprise tenants supplement with custom processes and third-party tools — but it's the default starting point for any tenant serious about Power Platform governance. ## What the kit provides The CoE Starter Kit is a set of Power Apps, Power Automate flows, dashboards, and Dataverse tables that, once installed in a designated CoE environment, do the following: - **Inventory** — discover every Power App, Power Automate flow, custom connector, Power BI workspace, and Power Pages site across the tenant. The inventory refreshes daily, giving the CoE team a complete map of citizen-development activity. - **Owner attribution** — for each asset, identify the owner, last-modified date, environment, and shared-with count. Orphans (assets whose owners have left the organisation) surface clearly. - **Usage telemetry** — for each app and flow, how often is it used? By whom? How many runs per week / month? Helps separate critical from abandoned. - **Compliance** — track which assets have been reviewed for compliance, which need attention, which are flagged. - **Admin tooling** — bulk-action tools for the CoE team: bulk-share apps with new users, bulk-disable orphaned flows, bulk-export inventory for analysis. - **Nurture** — engagement components for the maker community: communications, training events, success stories, app showcases. **The architecture.** The kit installs into a dedicated **CoE environment** — typically a production-grade environment in the tenant's default region. The environment hosts: - The CoE Starter Kit's apps and flows. - A Dataverse database storing the inventory and telemetry data. - A Power BI workspace with the CoE dashboards. Tenant-wide flows in the CoE environment connect to the Power Platform Admin Center APIs (using a service principal with appropriate permissions) and pull data from every other environment. ## The CoE persona The "Center of Excellence" team is typically: - **A small group** (often 2–5 people) in IT or transformation. - **Skilled in Power Platform** — they themselves build apps, troubleshoot citizen developers, set governance. - **Owners of the governance vision** — DLP policies, environment topology, training, communication. The CoE Starter Kit is their daily tooling. **Core dashboards.** - **Tenant overview** — total apps, flows, environments, makers, monthly trend. - **Top makers** — who's building the most, with engagement metrics. - **Compliance status** — apps reviewed vs unreviewed. - **Risk assessment** — assets flagged based on connectors, sharing, sensitivity. - **Adoption trends** — which apps gaining usage, which losing. **Compliance workflows.** The kit ships with workflows like: - **App compliance review** — when a new app is shared widely, prompt the maker to complete a compliance survey (data sensitivity, integration scope, business owner). - **Inactive maker handling** — when a maker hasn't logged in for N days, flag their owned assets for review. - **Critical app review** — high-usage apps get periodic compliance re-review. **Limits.** - **Self-managed** — the kit is provided as-is; Microsoft doesn't support it in the same way as licensed products. Bug fixes come through the open-source community. - **Telemetry depth** — the kit relies on Power Platform admin APIs; some data points aren't available (e.g. detailed flow execution patterns require Application Insights configuration in addition). - **Customisation needed** — every tenant has specific governance needs; the starter kit is a starting point, not a complete solution. Plan to customise. - **CoE team skill required** — installing, configuring, and operating the kit requires real Power Platform expertise. **Operational reality.** - **First month** — install, configure, validate the inventory data. - **First quarter** — build the governance processes around the data; train the CoE team. - **Steady state** — daily review of dashboards; weekly action on flagged items; monthly leadership reporting. The kit doesn't replace the CoE function — it equips it. Without a CoE team and governance discipline, the kit is just dashboards nobody looks at. ## Updating the kit Microsoft releases updates regularly with new features, bug fixes, and dashboards. Updates are imports of the latest version of each component; usually clean but read release notes for breaking changes. ## The alternative paths For tenants with extreme scale or specific governance needs, commercial CoE-style platforms exist (Hitachi Solutions Powr, Avanade Adopt, third-party governance tools) that supplement or replace the starter kit. The kit covers most needs for most organisations. --- # Chain of Command extension model in F&O How Chain of Command lets X++ developers extend F&O standard logic safely — wrap methods, call next, and the upgrade-safe pattern. Source: https://www.solvingdynamics365.com/guides/chain-of-command-extension-model-in-f-and-o Section: Finance & SCM / AL & X++ development Published: 2026-06-08 In the modern Dynamics 365 Finance and Supply Chain platform, customisation happens through **extensions** — separate models that augment Microsoft's standard code without modifying it directly. **Chain of Command (CoC)** is the X++ language pattern that makes this work safely: an extension method *wraps* a standard method, runs its own logic, and calls *next* to continue the standard execution. The result is upgrade-safe customisation that survives platform updates. ## The pre-extension world In Dynamics AX (the predecessor to F&O), customisation typically meant editing Microsoft's code directly — adding lines to `salesTable.insert()` or `purchTable.update()`. This made upgrades painful: every customisation had to be re-merged with the new platform version, and the more customisations, the worse the upgrade. ## The extension model Modern F&O forbids direct modification of Microsoft objects. Instead, developers write extension models that add or modify behaviour through: - **Class extensions** — add methods or fields to standard classes. - **Table extensions** — add fields, methods, indices, relations. - **Form extensions** — add fields, controls, datasources. - **Chain of Command** — wrap standard methods to inject custom logic. ## Chain of Command — the mechanics A CoC method in an extension class: ```x++ [ExtensionOf(classStr(SalesTableForm))] final class SalesTableForm_Extension { public void init() { // Custom code before standard method info("About to init"); next init(); // Call the standard method // Custom code after standard method info("Finished init"); } } ``` The `[ExtensionOf]` attribute tells the compiler the class wraps `SalesTableForm`. The method name matches a standard method; `next init()` calls the next implementation in the chain — eventually reaching Microsoft's standard. The extension method can do work before, after, or instead of (by omitting `next`). ## The chain Multiple extensions can wrap the same method. They form a chain: - Microsoft's standard at the base. - Extension A wraps it. - Extension B wraps Extension A. - The user-facing call goes through B → A → standard. Each extension's `next` calls the next layer down. The order is determined by the model installation order; deterministic but customers don't typically design for specific chain orders. **What can be wrapped.** - **Public and protected methods** of standard classes, forms, and tables. - **Static methods** — also wrappable. - **`new` and `dispose` methods** — for lifecycle injection. - **Form-level methods** — for UI behaviour modification. Private methods cannot be wrapped — they're encapsulated implementation details. **Common CoC patterns.** - **Pre-validation** — wrap `validateWrite()` to add custom validation rules. Call `next` only if custom rules pass. - **Post-creation hooks** — wrap `insert()` to do follow-on actions (notifications, integration triggers) after successful insert. - **Behavioural override** — wrap `update()` to suppress or modify standard behaviour under specific conditions, then conditionally call `next`. - **Audit logging** — wrap any modify method to log changes to a custom audit table. - **Integration triggers** — wrap post-completion methods to trigger external integrations. ## CoC vs event handlers F&O supports two related patterns: - **Chain of Command** — wraps methods; can modify the call chain before, after, or instead of. - **Event handlers** — subscribe to predefined events; can't suppress or modify the call chain, only observe. CoC is more powerful (can intercept and modify); event handlers are more isolated (purely observational). Choose based on whether you need to alter behaviour or just react to it. ## Performance and overhead Each CoC layer adds a small overhead — method-call indirection through the chain. For high-frequency methods (called millions of times), CoC overhead can add up. Profile if a heavily-wrapped method becomes a bottleneck. ## Upgrade safety This is the whole point. When Microsoft releases a new platform version: - Standard code changes — CoC wraps it as before; chain continues to work unless Microsoft removed or renamed the wrapped method. - New behaviour — CoC extensions still apply; the new behaviour layers in alongside. - Breaking changes — Microsoft documents deprecated methods; CoC code referencing them needs update. For the most part, CoC code survives platform updates without modification — the dramatic improvement over the AX-era customisation model. **Common pitfalls.** - **Forgetting `next`** — the extension intercepts and never calls Microsoft's code. Side effects may surprise. - **Calling `next` in wrong position** — putting custom logic after `next` when it should be before, or vice versa. - **Order-dependent chains** — when multiple extensions wrap the same method, behaviour can depend on installation order. Avoid. - **Long-running CoC** — heavy work inside a wrap can slow the standard operation. ## Operational reality CoC is the foundation of modern F&O customisation. Developers fluent in it produce maintainable, upgrade-safe extensions; those who try to revert to direct modification cannot in the SaaS model. The discipline pays back across years of platform updates. --- # Change log and audit trail in Business Central How Business Central's change log tracks data changes — configuration, performance impact, retrieval, and compliance use. Source: https://www.solvingdynamics365.com/guides/change-log-and-audit-trail-in-business-central Section: Business Central / Admin & ops Published: 2026-05-01 The **change log** is Business Central's data-change audit trail. Every monitored table, column, and event (insert, modify, delete, rename) can be recorded, producing an immutable history of who changed what when. Customers in regulated industries (finance, pharma, food, public sector) rely on it; everyone else should at least know what it does. ## The model Two layers of configuration: 1. **Change Log Setup** (overall) — a master switch that turns logging on or off for the tenant. 2. **Change Log Setup (Tables)** — a per-table, per-action configuration. For each table, the administrator chooses what to track per event: - **All Fields** — every column change is logged. - **Some Fields** — only the columns marked individually are logged. - **No** — no change tracking for this event. This per-table, per-event control is what makes the change log practical rather than overwhelming. Logging *every* change on *every* table on a transactional system would generate massive volume; logging only sensitive columns (customer credit limit, vendor bank account, payment terms) on critical tables is sustainable. ## What gets logged Each change-log entry records: - Table and field. - Type of change (insert, modify, delete, rename). - User who made the change. - Date and time. - Old value. - New value. - Primary key of the affected record. ## Retrieval The **Change Log Entries** page lists every entry, filterable by user, table, date range, primary key. Drilldowns show context. For audit work, entries export to Excel for archiving. ## Performance impact Change logging is not free. Each logged column adds a write to the change log table on every change to that column. Heavily-logged tables (sales lines, item ledger entries) slow down. Best practice: - Log master data tables comprehensively — customer card, vendor card, item card, GL account, dimension values. - Log a few critical transaction tables narrowly — only the fields that matter for audit. - Don't log high-volume transaction tables broadly — the cost-benefit doesn't justify it. ## Other audit signals The change log isn't the only audit surface in BC: - **G/L entries** are immutable by design — every posted journal is the audit record. - **Posted documents** (sales invoices, purchase invoices, shipments) are immutable; corrections post a counter-document. - **Workflow approval entries** record every approval action. - **Application Insights telemetry** captures session events, error events, page navigation, and API calls. - **Activity Log** (a separate feature) tracks specific high-level operations (data sync runs, security changes). ## Compliance For regulated regimes that require demonstrable audit (FDA 21 CFR Part 11 for pharma, similar regimes in food, financial services compliance like SOX), the change log plus the immutable G/L and posted documents form the foundation. ISVs sometimes layer additional audit modules for stricter regimes. ## Retention Change log entries are retained until manually purged. Build a retention policy aligned to statutory requirements (typically 7+ years for financial audit) and a periodic cleanup of older entries beyond the retention period. ## Operational reality Enable change log on master data from day one; tune transactional logging based on actual audit needs in the first months. Don't wait for the first audit to start logging — retroactive audit doesn't work. --- # Change management for Dynamics 365 How to run change management on a Dynamics 365 implementation — stakeholders, comms, training timing, and the cultural patterns that decide adoption. Source: https://www.solvingdynamics365.com/guides/change-management-for-dynamics-365 Section: Implementation / Project execution Published: 2026-05-01 Of all the things that can wreck a Dynamics 365 go-live, change management ranks at or near the top. The technology works; the configuration works; users have ten different ways to ignore both. Treating change management as serious work is the difference between adoption and quiet failure. ## Who owns it The customer, full stop. A partner can advise, build materials, deliver training, but the cultural shift around new ways of working can only come from inside the organisation, with visible sponsorship from leadership. Buy-in from the CFO, COO, sales VP, and ops director is non-negotiable — not just nominally, but visibly: they're on the steering committee, they review the project, they communicate with their teams. ## Stakeholder mapping Early in the project, identify the stakeholder groups: power users, daily transactional users, occasional users, executives, IT, finance, external auditors. Each has different concerns and different change tolerances. The materials, training, and comms approach for each group differs. ## Communication cadence A drumbeat from kick-off to post-go-live: - **Awareness phase** — what's changing and why. Sponsored by leadership; emphasise business outcomes, not features. - **Engagement phase** — workshops, configuration choices presented to power users, feedback collected. People care more about systems they helped shape. - **Training phase** — formal training delivered close to go-live. Earlier than four weeks before, and users forget. Later than two weeks, and there's no time to absorb. - **Go-live phase** — daily check-ins, prominent help channels, leadership visibility. - **Stabilisation phase** — drumbeat continues with usage metrics, success stories, additional training. ## Training Don't ship a recorded course library and call it training. Live, role-based sessions with realistic scenarios from the customer's own data. Workbook handouts users can write on. Floor walkers in the first week of go-live who *physically* sit with users. ## Champions network Identify and resource a **champions network** — one or two users per team who go deeper than their peers, attend extra sessions, and become the local go-to. Champions surface concerns before they become formal complaints and broadcast small wins. ## Resistance is signal Loud resistance is feedback. Sometimes it's "I'm scared and tired" and the answer is empathy and a check-in. Sometimes it's "you've broken my workflow and I have to do twelve clicks where I used to do three" — and the answer is fixing the workflow. Listen. ## Measure adoption Use Dataverse and BC telemetry. Active users, time-to-first-transaction, abandoned sessions, support ticket volume by team. Adoption metrics keep the project leadership honest about what's working. ## Don't declare victory at go-live Stabilisation runs for three to six months. The change-management programme runs alongside. --- # Change readiness assessment for Dynamics 365 implementations How to assess organisational readiness for a Dynamics 365 implementation — readiness dimensions, surveys and interviews, gap analysis. Source: https://www.solvingdynamics365.com/guides/change-readiness-assessment-for-dynamics-365 Section: Implementation / Project execution Published: 2026-05-01 A Dynamics 365 implementation is fundamentally a change initiative — new systems, new processes, often new roles. The organisation's readiness for that change predicts adoption, productivity dip duration, and ultimate success. **Change readiness assessment** measures readiness systematically; the gaps surfaced drive change management interventions before they become problems. **Readiness dimensions.** - **Awareness** — do people know change is coming? - **Understanding** — do they understand what's changing? - **Desire** — do they want the change? - **Knowledge** — do they have skills to operate post-change? - **Ability** — can they actually perform after training? - **Reinforcement** — what supports change after go-live? ADKAR model captures these; similar frameworks exist. **Per-dimension assessment.** - **Survey** — quantitative measurement. - **Interview** — qualitative depth. - **Observation** — actual behaviour vs reported. Triangulate; surveys alone can be misleading. ## Readiness surveys Common questions: - "I understand why the change is happening." - "I see how my role will change." - "I have what I need to operate post-change." - "Leadership is committed to this change." - "My concerns have been heard." Response scales (Strongly disagree to Strongly agree); aggregated across departments. **Survey timing.** - **Baseline** — pre-project. - **During** — periodic pulse. - **Pre-cutover** — final check. - **Post-cutover** — adoption tracking. The trend over time matters more than any single snapshot. ## Segmentation Aggregate readiness hides patterns: - **By department** — finance ready, sales not. - **By role** — managers ready, frontline not. - **By location** — HQ ready, regional offices not. Per-segment scores reveal where interventions needed. **Common readiness gaps.** - **Communication gap** — people don't know change is coming. - **Vision gap** — change announced but unclear why. - **Skill gap** — training inadequate. - **Resource gap** — time / tools insufficient. - **Trust gap** — past project failures cause skepticism. - **Capacity gap** — too many other initiatives. Each gap has different remediation. **Interventions per gap.** - **Communication gap** → step up communications. - **Vision gap** → executive narrative reinforcement. - **Skill gap** → expanded training. - **Resource gap** → backfill time, provide tools. - **Trust gap** → small wins demonstrated; sponsor visibility. - **Capacity gap** → defer competing initiatives or rephase. Interventions cost time and money; budget for them. ## Stakeholder readiness Different stakeholders have different readiness profiles: - **Champions** — high readiness, want to support. - **Adopters** — willing, need information. - **Skeptics** — questioning, need persuading. - **Resisters** — actively opposed. - **Bystanders** — uninvolved. Strategy per group. ## Leadership readiness Often underweighted: - **Executive sponsor active?** - **Middle managers prepared to coach team?** - **Visible leadership commitment?** Without leadership readiness, frontline readiness can't be sustained. ## End-user readiness Day-to-day operators: - **Awareness of upcoming change?** - **Training planned?** - **Time allocated to learn?** - **Buddy / support system available?** Frontline readiness is where adoption happens or doesn't. ## IT readiness Technical side: - **Skills for new system?** - **Support model defined?** - **Cutover plan rehearsed?** - **Decommission plan for legacy?** IT readiness affects go-live smoothness. ## Vendor readiness External: - **Partners ready to support?** - **Suppliers integrated?** - **Customers informed?** Each external party with stake in the system. **Readiness reporting.** - **Dashboard** — current state per dimension. - **Trend** over time. - **By segment** — where gaps. - **Top interventions** — what's being done. Visible to steering; drives interventions. **Common assessment pitfalls.** - **No baseline.** Don't know if readiness improving. - **Survey only.** Misses qualitative reality. - **Aggregate only.** Misses segment patterns. - **Late assessment.** First survey weeks before cutover; no time to act. - **No action.** Assessment done; intervention not. - **One assessment.** Static view; readiness evolves. **Cultural factors.** - **Hierarchical cultures** — top-down change easier; broad consultation less needed. - **Egalitarian cultures** — engagement essential; mandate alone insufficient. - **High-change cultures** — readier baseline. - **Stability-preferring** — more intervention needed. Adapt approach to culture; don't assume one-size-fits-all. ## Change saturation When organisations have too many concurrent changes: - **Project conflict** for resources. - **Cognitive overload** for end users. - **Change fatigue** — apathy or resistance. Map concurrent initiatives; deconflict where possible. ## The 7 Rs Variant assessment framework: - **Reason** — clear? - **Reach** — who's affected? - **Resources** — adequate? - **Risks** — managed? - **Responsibilities** — clear? - **Reinforcement** — sustained? - **Results** — measured? Each "R" warrants attention; gaps in any cause adoption issues. **Cutover readiness checklist.** - All trainings delivered. - Support team trained. - Cutover plan tested. - Communications sent. - Sponsor engagement confirmed. - Risk register reviewed. - Rollback plan validated. Specific checks ensure readiness before commit. ## Post-go-live readiness Adoption isn't binary: - **Day 1** — anxious but operational. - **Week 1-2** — productivity dip. - **Month 1-3** — recovery. - **Month 3-6** — new normal. - **Beyond** — refinement. Each phase has different support needs. ## Strategic positioning Change readiness is one of the most overlooked dimensions of implementation success. Technical delivery on time and budget doesn't matter if users don't adopt. Mature implementations assess readiness systematically and intervene where needed. For project leaders: - Baseline early. - Assess periodically. - Act on gaps. - Track adoption post-go-live. - Adjust through hypercare. The investment is modest — survey time, interview hours, intervention costs. The benefit is the difference between "we shipped a system" and "we successfully transformed how we operate." That difference is the actual measure of implementation success. --- # Change tracking and delta queries in Dataverse How Dataverse change tracking enables efficient incremental sync — enabling per table, using delta tokens, and integration patterns. Source: https://www.solvingdynamics365.com/guides/change-tracking-in-dataverse Section: Integrations / Eventing & messaging Published: 2026-05-01 For any integration that periodically pulls data from Dataverse — analytics ETL, search-index updates, external-system sync, archive workflows — fetching the full table every time is wasteful. **Change tracking** is the Dataverse mechanism that lets consumers fetch *only what's changed* since their last query, dramatically reducing load and improving sync freshness. ## The model Change tracking is enabled per table. When enabled, every modification (Create, Update, Delete) on the table records to a change-log. Consumers query with a **delta token** representing the point they last synced; the response returns: - Records modified since the token. - Deleted record IDs since the token. - A new delta token to use for the next query. The pattern: query → get changes → process → save the new token → query again with the new token next time. ## Enabling change tracking In the table's settings: **Track changes** toggle. Once enabled, the change-tracking infrastructure starts immediately for new changes; existing records are *not* retroactively tracked. The first query returns all current records as the "initial state" plus a starting delta token. Microsoft has change tracking enabled by default for most standard tables; custom tables need explicit enabling. ## The delta token The token is opaque to consumers — a long string the Web API issues. Each query passes the previous token; the response contains the new one. Tokens are valid for a configurable window (typically 30 days for Dataverse); after expiry, the consumer must do a full re-fetch. **The API pattern.** ``` GET /api/data/v9.2/accounts?$select=name,modifiedon Prefer: odata.track-changes ``` Initial response includes a `@odata.deltaLink` header with the URL containing the token. Next query: ``` GET ``` Returns only the changes since the previous query's snapshot moment. **Use cases.** - **Search-index refresh** — keep an Azure Cognitive Search index aligned with Dataverse; query the delta hourly and update only changed records. - **Data-warehouse loads** — incremental loads into Synapse / Fabric / Snowflake without re-extracting unchanged rows. - **External-system sync** — keep a partner system aligned with Dataverse changes. - **Cache invalidation** — invalidate cached records when they change. ## Synapse Link as the modern alternative For analytics workloads, **Synapse Link for Dataverse** offers a managed alternative: continuous near-real-time replication of Dataverse changes to OneLake (or to a Data Lake / Synapse). The customer doesn't manage delta tokens; Microsoft handles the change capture and streaming. For analytics use cases at scale, Synapse Link is generally preferable to roll-your-own change-tracking queries. Change tracking is the right path for: - Specific, low-volume targeted syncs (not broad analytics). - Custom integration patterns where Synapse Link isn't suitable. - Real-time triggers where the consumer wants explicit control. **Limits.** - **Token expiry** — 30-day default. Long-paused consumers must do full re-fetches. - **Filter doesn't apply to deletes** — when a record is deleted, the change-tracking response includes its ID but no fields; you can't filter "only deletes in EMEA" effectively. - **Performance at scale** — extremely high change rates produce large delta responses; chunk and paginate. - **Schema changes** — if a column is added after tracking starts, historical changes don't have data in that column. ## Comparison with webhooks / Service Bus Change tracking is pull-based — the consumer queries periodically. Webhooks and Service Bus integration are push-based — Dataverse notifies the consumer of each change. Trade-offs: - **Pull (change tracking)** — consumer controls cadence; works for batch sync; doesn't lose events if the consumer is down. - **Push (webhooks / Service Bus)** — near-real-time; the consumer must be available or use a durable buffer like Service Bus to avoid loss. Many architectures use push for real-time and pull for backfill / reconciliation. **Common pitfalls.** - **Forgetting to enable on a custom table** — incremental sync doesn't work; fall back to full re-fetches. - **Not handling token expiry** — once the token expires, the consumer must detect and re-initialise. - **Assuming change tracking catches everything** — some bulk operations (some plug-in bypasses, direct SQL in on-premise) don't show in the change feed. Verify per use case. ## Operational discipline Build delta-aware integrations from the start. The performance and freshness advantages compound at scale; retrofitting later is more work than enabling early. --- # Charts, dashboards, and views in Dataverse How model-driven apps present data — system vs personal views, charts, dashboards, and the configuration that drives analytical visibility. Source: https://www.solvingdynamics365.com/guides/charts-dashboards-and-views-in-dataverse Section: Customer Engagement / Dataverse platform Published: 2026-05-01 The day-to-day analytical surface in model-driven Power Apps and Dynamics 365 CRM-side apps comes from three components: **views**, **charts**, and **dashboards**. Each has its place; understanding the layered configuration is essential to giving users useful surfaces without proliferating noise. ## Views A **view** is a filtered, sorted, columnated list of records on a single table. Each table has: - **System views** — provided by Microsoft (All Active Accounts, My Active Opportunities, Closed Cases This Month). Maintained by the platform; customers can edit but not delete. - **Custom views** — created by admins / system customisers. Saved at the table level; available to all users with permission. - **Personal views** — created by individual users from the user interface. Visible only to the creator, optionally shareable. A view defines: - **Filter criteria** — which records to show. - **Columns** — what fields to display, in what order, with what width. - **Sort order** — default sort. - **Result limits / paging** — usually inherited from platform defaults. **View types.** - **Public** — visible to everyone with table access. - **Personal** — owner-scoped, optionally shared with teams. - **Quick Find** — special view defining searchable columns (see the Dataverse search guide). - **Advanced Find** — special view for ad-hoc filtering UX. - **Associated** — special view for related-record subgrids. - **Lookup** — special view for lookup pickers. Each table has one of each special type; customisation tunes them. ## Charts Charts are visualisations bound to a view: - **System charts** — table-level; show data from the current view, automatically updating as the user picks different views. - **Personal charts** — user-created, visible only to the creator. Chart types include bar, column, line, pie, doughnut, area, funnel. Configuration: choose which fields are the axis, which are the values, optional grouping, and the colour scheme. Charts render inline on list pages — the user sees the chart above the list, both filtered by the current view. Drilling down on the chart filters the list to the slice clicked. ## Dashboards A **dashboard** is a multi-component composition of charts, lists, web resources, and Power BI tiles. Each table can have its own dashboards; cross-table dashboards exist at the app level. Dashboard types: - **System dashboard** — admin-configured, available to all users with the role. - **Personal dashboard** — user-created, visible only to creator. - **Interactive dashboard** — modern, with persistent filters and global streams; tuned for case-management-style work where the user filters and processes records inline. ## Power BI integration Beyond native Dataverse charts, **Power BI tiles** can be embedded in dashboards: - **Power BI dashboard tile** — a tile from a Power BI dashboard. - **Power BI report tile** — a full Power BI report embedded. For complex analytical surfaces, Power BI is the better tool than native Dataverse charts. The integration gives users a single dashboard surface combining operational data (Dataverse views) and analytical data (Power BI). **Designing for users.** - **Per-role dashboards** — different defaults for sellers vs service agents vs managers. - **Limit dashboard count** — 5–10 well-curated dashboards beat 50 stale ones. - **Refresh expectations** — Dataverse charts are real-time; Power BI tiles refresh on their own schedule (typically not real-time). - **Mobile dashboards** — different rendering; design with mobile in mind. **Common patterns.** - **Manager dashboards** — team pipeline, team performance, exceptions. - **Agent dashboards** — open cases, SLAs at risk, recent activities. - **Executive dashboards** — high-level KPIs, often Power BI-driven. - **Operational dashboards** — daily-glance views for specific roles. **Operational discipline.** - **Govern personal-view sharing** — personal views shared too widely become semi-system views with no governance. - **Retire stale dashboards** — dashboards nobody uses are clutter. Audit annually. - **Test refresh frequency** — users complaining that "the dashboard is wrong" usually means stale data from misunderstood refresh cadence. ## Where Dataverse charts fall short Complex analytical needs — multi-table joins, complex calculations, sophisticated visualisations — outgrow Dataverse charts. Move to Power BI. Native charts cover the operational "what's happening on my team today" question; analytical depth belongs in Power BI. --- # Choosing a Dynamics 365 partner How to pick the right Microsoft partner for a Dynamics 365 implementation — what to look for, what to interrogate, and the red flags worth catching early. Source: https://www.solvingdynamics365.com/guides/choosing-a-dynamics-365-partner Section: Implementation / Vendor & contracting Published: 2026-05-01 For most customers, the partner you choose matters more than the Dynamics 365 product you choose. The product is fixed; the partner is the variable that decides whether the implementation lands clean or drags on for years. The partner you pick is the partner you'll live with for at least a decade. ## Match by product, industry, and region The Microsoft partner ecosystem is wide and uneven. A partner brilliant at Business Central in food manufacturing in Germany may be poor at Sales for B2B SaaS in Sweden. Always pick partners with **demonstrable experience** in: - The specific Dynamics 365 product you're implementing. - Your industry vertical, including specific regulatory requirements. - Your region and country localizations. - Your scale (a partner that does only enterprise won't be efficient at SMB and vice versa). ## Ask for references Always ask for two or three customer references in your industry and at your scale. Speak to them by phone, not just email. Ask what they wish they'd known before signing, what the partner does badly, and what surprised them on the project. ## Interrogate the team, not the company The partner brand sells; the people deliver. Insist on knowing who specifically will run your project — Engagement Manager, Solution Architect, lead consultants — and meet them before signing. Many partners pitch with senior pre-sales staff and deliver with junior teams. Pin the actual delivery team in the SOW. ## Methodology Ask how they implement. They should reference **Success by Design**, Microsoft's published methodology, and be specific about how they apply fit-to-standard, iterative configuration, and Solution Blueprint Reviews. If they pitch a 12-month waterfall design document and a 6-month build, walk away. ## Power Platform fluency Modern Dynamics 365 implementations layer Power Apps, Power Automate, Power BI, and Copilot Studio extensively. Partners who solve every customisation with AL or X++ are stuck in the past. ## Pricing transparency Demand a detailed budget broken down by phase, role, and deliverable. Be sceptical of suspiciously round numbers and oddly low fixed-price proposals — they're usually missing risk that resurfaces as change requests later. ## Support model What happens after go-live? Many partners are great at projects and weak at support. Understand the support contract: response times, ticket types, escalation paths, the named team you'll work with day to day. **Red flags.** - Insists you must buy add-ons from their captive ISV without justification. - Has only AppSource bestsellers, no real implementation depth. - Has been Microsoft partner-of-the-year ten years running but every reference says they're overbooked. - Can't tell you their consultant retention rate. ## Final test When you ask a hard question and the partner answers it honestly — including "we don't know yet" or "we did that badly on a recent project, here's what we changed" — that's a partner you can work with for ten years. ## Where to go next The formal process is [vendor selection](https://www.solvingdynamics365.com/guides/vendor-selection-for-dynamics-365) and the contract is [the statement of work](https://www.solvingdynamics365.com/guides/statement-of-work-for-dynamics-365). What a good partner should be practising is [Success by Design](https://www.solvingdynamics365.com/guides/the-success-by-design-methodology); what the relationship looks like after go-live is [hypercare](https://www.solvingdynamics365.com/guides/hypercare-after-go-live). The partner line in the budget is the largest year-one number in [TCO modelling](https://www.solvingdynamics365.com/guides/dynamics-365-tco-modelling). ### Frequently asked questions **What should I look for in a Dynamics 365 partner?** Demonstrable experience in the specific product, your industry and its regulations, your country's localisations, and your scale. A partner brilliant at Business Central for food manufacturing in Germany may be poor at Sales for B2B SaaS in Sweden. **How do I check a partner's references?** Ask for two or three customers in your industry at your scale and phone them. Ask what they wish they had known before signing, what the partner does badly, and what surprised them. **Which methodology should a partner follow?** Success by Design — with specifics on fit-to-standard, iterative configuration, and Solution Blueprint Reviews. A 12-month waterfall design document followed by a 6-month build is a reason to walk away. **What are the red flags?** Insisting on their captive ISV add-ons without justification, only AppSource bestsellers and no implementation depth, references that all say the partner is overbooked, no answer on consultant retention, and pitching with senior staff while delivering with juniors — pin the delivery team in the SOW. --- # Circuit breakers in Dynamics 365 integrations How the circuit-breaker pattern protects Dynamics 365 integrations from cascading failures — implementation in Azure Functions, Logic Apps. Source: https://www.solvingdynamics365.com/guides/circuit-breakers-in-dynamics-365-integrations Section: Integrations / Resilience & ops Published: 2026-05-01 When a downstream system fails, a naive integration keeps retrying — burning resources, prolonging the outage, and sometimes pushing the failing system further down. The **circuit-breaker** pattern interrupts this cycle: detect failures, stop calling the failing service, periodically test recovery, restore traffic when healthy. It's a foundational reliability pattern that Dynamics 365 integrations frequently lack. ## The circuit-breaker analogy Like an electrical breaker: - **Closed** — traffic flows normally. - **Open** — failures detected; traffic blocked. - **Half-open** — test traffic allowed to check recovery. - **Re-closed** — recovery confirmed; full traffic resumes. The state machine prevents wasted effort during outages. **Why this matters for Dynamics 365.** - Dynamics 365 integrations often interact with multiple downstream systems. - Each downstream is a failure surface. - Without circuit breakers, failures cascade — one slow downstream blocks the integration. - Backpressure handling prevents queue buildup. **Implementation in Azure Functions.** - Use a library like Polly (in .NET) or Resilience4j (Java) for circuit-breaker semantics. - Configure thresholds: failures per time window to trip; recovery test interval. - Wrap downstream HTTP calls in the circuit-breaker policy. ```csharp var policy = Policy .Handle() .CircuitBreakerAsync( exceptionsAllowedBeforeBreaking: 5, durationOfBreak: TimeSpan.FromMinutes(1)); await policy.ExecuteAsync(async () => await client.PostAsync(url, content)); ``` ## Implementation in Logic Apps Logic Apps doesn't have native circuit-breaker but you can approximate: - Persisted state (Storage Table) tracks recent failures. - Conditional logic checks state before calling downstream. - Periodic Logic App probes downstream and updates state. More complex than code-based; works for simple scenarios. **Implementation in Dataverse plug-ins.** - Plug-ins don't natively support circuit-breaker semantics. - The plug-in should write to a queue (Service Bus) rather than call downstream directly. - The queue consumer implements the circuit-breaker. This pattern — plug-in to queue to consumer — separates concerns and lets the consumer be reliable. **Thresholds and tuning.** - **Failure threshold** — how many failures before tripping. Too low: false trips during transient blips. Too high: trip too late. - **Window size** — over what time period failures are counted. - **Recovery test interval** — how long to wait before testing recovery. - **Half-open behaviour** — how many test calls to confirm recovery. Tuning requires observation. Start conservative (high threshold, long break); tighten based on data. ## Per-service vs per-integration Circuit-breaker scope: - **Per downstream service** — one breaker per service; isolation between services. - **Per integration endpoint** — finer granularity. - **Per tenant** — for multi-tenant SaaS scenarios. Per-service is usually right; finer granularity adds complexity without much benefit unless you have specific reasons. ## Combining with retry Circuit-breaker and retry are complementary: - **Retry** handles individual call failures. - **Circuit-breaker** handles sustained failure patterns. Wrap retry inside circuit-breaker: retry handles flakes; circuit-breaker handles outages. ## Fallback behaviour When the circuit is open: - **Fast-fail** — return error immediately to caller. - **Default response** — return cached or default data. - **Queue for later** — write to dead-letter / outbox for retry post-recovery. - **Degraded mode** — partial functionality. For non-critical downstream (analytics, recommendations), fast-fail or default is fine. For critical downstream, queue for later. ## Monitoring Circuit-breaker state is operationally critical: - **State changes** — alert when circuit opens. - **Failure rate** — track over time; tune thresholds. - **Recovery time** — how long do outages last. - **Stop-gap effectiveness** — what % of calls did the breaker save? Without monitoring, circuit-breakers are invisible; problems only surface when fallback behaviour is noticed by users. **Common pitfalls.** - **No circuit-breaker.** Cascading failures pile up. - **Thresholds too sensitive.** Brief blips trip the breaker; user-visible failures from a recovering downstream. - **Thresholds too lenient.** Outage continues to drag the integration down. - **No fallback strategy.** Breaker opens; caller gets a hard failure; user-visible regardless. - **Per-call state not shared.** Distributed integration; each instance has its own circuit-breaker state; inconsistent behaviour. - **No recovery test.** Breaker stays open; service recovers but breaker doesn't notice. ## Distributed circuit-breakers For multi-instance integration: - **Shared state in Redis** — coordinated across instances. - **Sticky failures** — instance-local; less coordination needed. - **Coordination via control plane** — explicit healthcheck-driven. Shared state is the cleanest; cost of Redis is typically acceptable for production systems. ## Bulkheads Related pattern: limit how much of your service's capacity goes to any one downstream: - **Thread pool limits** — at most N concurrent calls to downstream X. - **Queue limits** — at most N messages in flight. Combined with circuit-breaker: bulkheads contain damage from a slow downstream; circuit-breakers stop calling a failing downstream entirely. ## Strategic positioning Resilience patterns — retry, circuit-breaker, bulkhead, dead-letter — are a coherent set. Implementing all of them produces robust integrations. Implementing none of them produces brittle ones. The investment is engineering discipline, applied consistently across integrations. For Dynamics 365 integrations: - Critical paths — full set of resilience patterns. - Best-effort paths — at minimum retry and DLQ. - Prototypes — minimal patterns acceptable; production-bound paths need uplift. The teams that consistently apply these patterns have integrations that run for years without intervention. The teams that don't, have integration incidents weekly. The cost of resilience engineering is paid once; the savings compound forever. --- # Citizen development governance How to govern citizen development on the Power Platform — the trade-offs, the framework, environments, DLP, training, and the CoE function. Source: https://www.solvingdynamics365.com/guides/citizen-development-governance Section: Implementation / Cost & governance Published: 2026-05-07 The Power Platform's promise is democratising app and automation development — letting business users build the apps and flows they need without IT. The cost of that democratisation, without governance, is a sprawl of unmanaged apps, inconsistent data handling, security gaps, and compliance risk. **Citizen development governance** is how organisations harness the benefits without inheriting the chaos. ## The tension The two competing pressures: - **Empowerment** — letting business users solve their own problems quickly without IT bottlenecks. - **Control** — ensuring data is handled correctly, integrations are secure, applications don't break, compliance is maintained. Healthy governance balances them. Over-control suffocates the citizen-development value proposition; under-control creates problems. ## The governance framework Effective Power Platform governance combines: 1. **Environment topology** — separate environments per use case, security boundary, and lifecycle stage. Default environment is for personal exploration only; production work happens in named environments with appropriate guardrails. 2. **Data Loss Prevention (DLP) policies** — categorising connectors as Business / Non-Business / Blocked, preventing flows from inadvertently leaking Dataverse data to personal SharePoint or Dropbox accounts. Different policies per environment. 3. **Security roles and access** — citizen developers in development environments have higher rights; in production they have read-only or scoped write access. Service principals handle automated work. 4. **Solution discipline** — apps and flows live in solutions, version-controlled, deployed through pipelines rather than edited directly in production. 5. **Monitoring** — telemetry, usage analytics, error alerting. The CoE Starter Kit's dashboards or equivalent commercial tools. 6. **Compliance review** — apps touching sensitive data go through a review before broad sharing. Trivial apps for personal productivity skip review. 7. **Naming conventions** — solutions, environments, apps, flows follow consistent naming so the CoE team can find and manage them. 8. **Training and certification** — citizen developers complete training before being granted maker permissions; advanced training for those building production-grade work. ## The CoE function As discussed in the CoE Starter Kit guide, a dedicated Center of Excellence team is the operational engine of governance. Typically 2–5 people in IT or transformation, with skills in: - Power Platform admin tooling. - DLP policy design. - Citizen-developer support and training. - Compliance assessment. - Communication and community-building. The CoE is enabler, not gatekeeper — they help citizen developers succeed, not block them. ## Maker tiers A useful structure ranks makers by sophistication: - **Explorer** — anyone can build personal apps in the default environment for personal productivity. No formal review. - **Maker** — completed training; can build apps in shared dev environments; CoE reviews before broad sharing. - **Pro maker** — advanced training; can build apps using premium connectors and Dataverse; subject to fuller governance review. - **Champion** — local experts who help other makers; part of the CoE extended team. - **Pro developer** — IT-aligned developers building integrations and pro-grade applications. Each tier has different permissions, expectations, and support levels. ## Compliance reviews A typical review checks: - **Data sensitivity** — what data does the app process? PII, financial, regulatory? - **Integration surface** — what external services does it call? - **Sharing scope** — how many users? Org-wide? With external partners? - **Business criticality** — is anyone's job dependent on this app working? - **ALM maturity** — is it in a solution? Source-controlled? Versioned? Apps flagged high-risk go through fuller review; low-risk apps proceed. ## The make-or-buy decision Citizen development isn't always the right answer. The CoE should help makers decide: - **Quick automation of personal / team workflow** → Power Platform, citizen development. - **Mission-critical, mid-complexity business application** → Power Platform with pro-developer oversight. - **Enterprise system replacing core business logic** → traditional development; not citizen. - **Off-the-shelf SaaS available** → maybe just buy that instead of building. **Common pitfalls.** - **No governance until there's a problem** — once 500 apps exist, retrofitting governance is hard. Start early. - **Over-governance from day one** — making every app go through formal review kills the citizen-development value. Tiered. - **CoE understaffed** — one person trying to govern 1000 makers can't scale. Properly resource. - **No retirement process** — apps from departed employees accumulate. Build retirement into the lifecycle. - **Ignoring the cultural side** — governance frameworks fail without buy-in from leadership, communicating expectations to makers. ## Operational reality Governance is ongoing work, not a one-time project. Build the function; staff it; evolve it as the Power Platform footprint grows. --- # Click-and-collect fulfilment in Dynamics 365 Commerce How buy-online-pick-up-in-store works end to end in Dynamics 365 Commerce — delivery modes, order sourcing, store-side fulfilment in the Store Commerce app. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-retail-click-and-collect Section: Industries / Retail Published: 2026-09-02 Click-and-collect looks simple from the customer's side: buy online, pick up in a store. Behind it sit five systems that have to agree — the storefront, order sourcing, the store's inventory, the store's staff workflow, and payments. **Dynamics 365 Commerce** covers all five in one product, which is the main argument for it over stitching a storefront to a separate ERP. This guide walks the flow and points at the parts that still need attention. ## Delivery modes are the switch Everything starts with **modes of delivery**. Commerce distinguishes a *customer pickup* mode from ship-to-customer modes, and the pickup mode is what tells the rest of the system that the order will be fulfilled by a store, not a warehouse. Configure it per channel: the e-commerce channel offers pickup, the pickup happens at a store channel, and the mapping between them is explicit. Two details worth settling early: - **Which stores can be pickup locations.** Not every store should. Small-format stores with no back room, franchise stores on a different legal entity, and stores with unreliable stock accuracy are common exclusions. The store locator on the storefront respects the configuration. - **Pickup time slots.** Commerce's e-commerce module library supports time-slot selection for pickup, which is what enables curbside collection as a variant. Use it if the store operation actually needs to spread collections through the day; skip it if the promise is simply "ready in two hours". ## Showing availability honestly The storefront needs to know what each store has before it offers pickup there. Commerce reads store-level available-to-promise from headquarters, and for retailers on Supply Chain Management the **Inventory Visibility** add-in gives a low-latency view across channels that is far better than nightly snapshots. The practical problem is not the query, it is the source. Store stock in Commerce is only as accurate as the last statement posting and the last cycle count. Retailers that launch click-and-collect on top of stores with poor count discipline discover it within a week as "ready for pickup" emails go out for items that are not on the shelf. A safety buffer per store — offer pickup only when on-hand exceeds a threshold — is standard and configurable. ## Sourcing the order When the customer chooses a store, sourcing is trivial: that store fulfils. Where it gets interesting is *ship-from-store* and *pickup at nearest store with stock*. **Distributed order management** (DOM) is Commerce's sourcing engine: it takes the order, applies rules (distance, stock, store capacity, cost), and assigns fulfilment locations, splitting lines across stores when necessary. DOM is powerful and easy to over-configure. A retailer with a hundred stores and one warehouse usually needs three rules, not thirty. Start with "customer's chosen store, else nearest store with stock above buffer, else warehouse" and add complexity only when a real problem shows up in the exception queue. ## Store-side fulfilment The store sees the order in the **order fulfilment** operation of the Store Commerce app. The workflow is accept, pick, pack, then either ship or mark ready for pickup. Staff can print pick lists, reject lines they cannot find, and partially fulfil. Each state change updates the order in headquarters and triggers customer notifications. Notification emails ship in the product: order confirmation, ready-for-pickup, and picked-up templates configured per channel. SMS does not — a Power Automate flow or a partner messaging connector fills that gap. If curbside is in scope, the "I'm here" message from the customer is typically a Power Pages form or a partner app, not a Commerce feature. Store operations decisions that matter more than configuration: - **Who owns pick-and-pack in the store.** Retailers that leave it to "whoever is free" get slow orders at peak hours. Assign a role per shift. - **Where held orders live physically** and how long before they are cancelled and restocked. Commerce supports the cancel-and-restock; the shelf and the policy are yours. - **How partial availability is handled.** Contact the customer, ship the missing line, or cancel it. Pick one and configure the store app around it. ## Payments: authorise now, capture at pickup The correct pattern is to authorise the card at checkout and capture when the customer collects, so the customer is never charged for something they did not receive. Commerce supports this: the online order carries an authorisation, and the pickup in the Store Commerce app triggers capture through the payment connector. The trap is authorisation expiry. Card authorisations lapse after a period set by the issuer, often a week or so, and a customer who takes ten days to collect will have a failed capture. Commerce handles re-authorisation, but the behaviour depends on the payment connector — confirm with the acquirer what happens on the tenth day before launch, and set the order-cancellation window to fit. ## Returns of collected orders A click-and-collect order is a sales order in headquarters and can be returned at any store, not only the pickup store, because the transaction is visible across the estate through headquarters. Return reason codes, refund to original tender, and cross-channel return policies all apply. This is one of the underrated benefits of Commerce over a Shopify-plus-ERP setup, where cross-channel returns usually need custom work. ## Business Central retailers On **Business Central** with the Shopify connector, click-and-collect is really a Shopify feature: Shopify handles local pickup in its checkout, and the order arrives in BC as a sales order tagged with a pickup location. Fulfilment status flows back from Shopify POS or a partner POS app; BC is the system of record for inventory and finance but not the workflow engine. That is fine for a handful of stores and simpler promises. It stops being fine when the retailer wants DOM-style sourcing, cross-store returns, or partial pickup — at which point the conversation is about [Commerce](https://www.solvingdynamics365.com/guides/dynamics-365-commerce-explained), not another connector. ## What to measure Three numbers tell you whether click-and-collect is working: time from order to ready-for-pickup, the cancellation rate caused by stock not found, and the share of orders collected within the promised window. All three are derivable from Commerce transaction data in Power BI; none of them ship as a dashboard. --- # Clienteling in Dynamics 365 Commerce How clienteling works in Dynamics 365 Commerce — associate-facing tools, customer profile, recommendations, and the integration with marketing and service. Source: https://www.solvingdynamics365.com/guides/clienteling-in-dynamics-365-commerce Section: Finance & SCM / Retail & commerce Published: 2026-05-01 **Clienteling** is the practice of turning a store associate into a personal service agent for individual customers — knowing the customer's history, preferences, recent interactions, wish list, and using that knowledge to deliver a personalised in-store experience. Dynamics 365 Commerce makes clienteling first-class through the **Store Commerce app**, with tools designed to turn a till operator into a personal shopper. ## The customer profile When an associate pulls up a customer in Store Commerce, they see: - **Recent purchases** across channels — what the customer bought in-store and online, across the company. - **Returns history** — what came back and why. - **Loyalty tier and points balance** — current status with the loyalty programme. - **Wishlist and saved items** — what the customer has marked for future purchase. - **Preferences** — sizes, brands, dietary restrictions, communication preferences. - **Recent interactions** — service cases, complaints, recent emails, recent in-store visits. - **Open orders** — current orders in any status — placed online for pickup, shipped, awaiting receipt. - **Spending patterns** — total spend this year, average order value, frequency. This view bridges what customer service / CRM / loyalty systems usually scatter across multiple tools. ## Personalised recommendations Combined with AI-driven recommendations, the associate sees product suggestions for the customer: - **Based on purchase history** — "customers who bought what you bought also bought…". - **Based on browsing** — items the customer viewed online but didn't buy. - **Cross-sell** — complements to recent purchases. - **Replenishment** — items the customer regularly reorders. The associate uses these as conversation starters, not robotic scripts. ## Outreach Clienteling supports proactive communication: - **Save the sale** — when a customer browses online and leaves, the associate can reach out with a personalised note. - **Birthday / anniversary outreach** — automated or manual based on customer profile. - **New arrival notifications** — when products matching a customer's preferences arrive, prompt the associate. - **Post-purchase follow-up** — care instructions, thank-you, satisfaction check. Outreach happens via the customer's preferred channel (email, SMS, WhatsApp, even physical mail), with templates that personalise to the recipient. ## Appointment booking Customers can book in-store appointments — personal shopping sessions, consultations, fitting appointments — through the customer-facing portal. Associates see the day's appointments on their dashboard and prepare ahead of arrival. ## Sales attribution Sales the associate makes (whether at the till or remote via order-from-home flows) attribute to the associate for commission and performance recognition. The data drives store-level performance management. ## Integration with marketing Customer Insights – Journeys campaigns reach clienteling-tier customers with channel preferences honoured. The clientelling-aware associate sees recent marketing touches so the conversation isn't disconnected. ## Integration with service Open cases or recent complaints from Customer Service surface in the customer profile — the associate knows that the customer was on the phone with support last week, can acknowledge it, follow up gracefully. **Common patterns.** - **High-touch retail** — luxury, jewellery, beauty, fashion — where clienteling drives meaningful revenue. Associates own a book of named customers. - **B2B retail** — wholesale showrooms where the same buyer-customers return regularly. - **Specialty stores** — categories where product knowledge and customer relationship matter (wine, cigars, art, audiophile). ## Where it fits less Fast-moving, low-touch retail (convenience stores, fast fashion) where transactions are anonymous and high-volume. Clienteling overhead doesn't pay back. ## Operational reality Clienteling is as much about culture as software. Associates need to value the relationship; managers need to coach toward it; metrics need to reward repeat-customer business not just one-time transactions. The technology supports the discipline. --- # Closing the income statement and year-end in Business Central How Business Central handles year-end close — closing the income statement, transferring to retained earnings, locking the year, and the cutover discipline. Source: https://www.solvingdynamics365.com/guides/closing-income-statement-and-year-end-in-bc Section: Business Central / Finance & accounting Published: 2026-06-02 Year-end close in Business Central is the formal ritual that closes one fiscal year and opens the next — closing the income statement, rolling profit (or loss) into retained earnings, and locking the year for posting. Done well, it's a structured routine the controller can execute in hours; done badly, it's an extended scramble that delays the new year's reporting. ## Prerequisites — the monthly close at year-end Year-end close starts with completing the *normal* monthly close for the final fiscal period: - All accruals posted. - All depreciation calculated and posted. - All FX revaluations run with year-end rates. - All inventory adjustments (**Adjust Cost — Item Entries**, **Post Inventory Cost to G/L**). - All AP / AR reconciliations verified. - All bank accounts reconciled. - All intercompany balances reconciled. These are part of every month-end; year-end demands they're all complete for the final period. ## Closing the income statement The **Close Income Statement** routine: 1. **Calculates** the balances of all *Income Statement* GL accounts (revenue and expense categories) as of year-end. 2. **Posts** a closing journal that zeroes those accounts and transfers the net to the configured **retained earnings** account (typically GL account *Retained Earnings* or *Equity*). 3. The income statement accounts now show zero balances opening into the new year; the balance sheet accounts roll forward at their year-end values. The routine asks for: - **Fiscal year ending date** — which year to close. - **General Journal Template / Batch** — where to post the closing entries. - **Closing date** — the special "closing date" (the day after year-end-ending, e.g. *C12/31/26* for closing 2026). Closing-date entries are conventionally distinguishable in reports. - **Document No.** — the journal document number. - **Posting Description**. - **Dimensions** — whether dimensions transfer to the retained earnings posting. - **Retain dimensions for inventory** — for inventory-related accounts. The user reviews the proposed journal entries before posting, then posts. The income statement is closed. ## The closing date Business Central distinguishes **regular dates** from **closing dates**. The closing date is a special date pseudo-position — *C12/31/26* — that places the entry after all regular transactions on 12/31/26. Reports that filter "through 12/31/26" include both regular and closing entries; reports that filter "as at 12/31/26" can choose which. The pattern: regular transactions post on 12/31; the income-statement closing journal posts on the closing date *C12/31*; reports for the year include both, but financial-statement views distinguish. ## The fiscal year setup Business Central tracks fiscal years through **Accounting Periods**: - Each accounting period has a start date and a calendar / fiscal flag. - The *new fiscal year* is created (with periods covering the new year's months) before year-end close. - Posting in the new year requires the periods to exist. ## Period and year locks After year-end close: - The *Allow Posting From* date in **General Ledger Setup** moves to the new year's start. No posting in the closed year. - Individual users can have their own posting date restrictions in User Setup. - Re-opening the year for a correction is possible but creates audit-trail events. Typically requires admin permission and should be exception, not routine. ## Multi-company year-end Multi-company tenants run year-end per company: - Each legal entity closes its own year (typically same calendar dates, but fiscal-year boundaries can differ). - Intercompany reconciliations completed *before* close per entity. - Consolidation runs once each subsidiary's close is final. ## Inventory periods at year-end Inventory adjustments after period close should be exceptional. **Inventory periods** can be configured to lock inventory transactions per period — similar to GL period locks. Year-end is the natural full-lock point. **Statutory and tax. Year-end produces:** - **Financial statements** — balance sheet, P&L, cash flow per local statutory format. - **Tax provisions** — corporate income tax accruals. - **Country-specific filings** — VAT annual returns, intrastat, etc. - **Audit package** — for external auditors. These leverage the closed-year data; without a clean close, the statements and filings are unreliable. **Common pitfalls.** - **Closing before everything posts.** Late entries in the closed year require re-opening — disruptive. - **Wrong retained-earnings account** — closing entries land in the wrong place; trial balance doesn't reconcile. - **Dimensions not handled** — dimension structure post-close may not match pre-close; reports get strange. - **Year-end opening period missing** — closing complete but new period doesn't exist; first posting in new year fails. ## Operational reality Year-end is mostly a monthly close at scale. Mature operations close in a week or so after year-end-ending; less mature operations take a month or more. The discipline pays back continuously. --- # Co-products and by-products in Dynamics 365 Supply Chain How F&O handles process manufacturing's multi-output reality — formulas, co-product allocation, by-product accounting, and the integration with planning. Source: https://www.solvingdynamics365.com/guides/co-products-and-by-products-in-f-and-o Section: Finance & SCM / Manufacturing Published: 2026-05-01 In process manufacturing, a single production run often produces *multiple* outputs from the same inputs — meat processing yields prime cuts and trimmings; oil refining produces multiple fractions; chemical synthesis generates targeted products and unavoidable side products. Dynamics 365 Supply Chain Management's **co-products** and **by-products** capabilities handle this multi-output reality natively, where discrete manufacturing's BOM model would force awkward workarounds. **The distinction.** - **Co-product** — a deliberately-produced output with significant economic value, planned for and intended. Co-products are why the production runs. In meat processing, prime cuts and trimmings are both co-products of butchery — both are intended commercial outputs. - **By-product** — an unavoidable output of the process, typically of lower or marginal value. By-products aren't why the production runs but they're unavoidable. In meat processing, bone meal might be a by-product. In oil refining, sulfur extraction produces sulfur as a by-product (though increasingly commercially valuable, so the line blurs). The distinction matters for cost accounting — co-products typically share production cost in proportion to their value (or other allocation basis); by-products typically credit production cost (recovery) rather than absorbing it. ## Formulas and outputs A **formula** in F&O describes a process production run: - **Input lines** — ingredients consumed with proportional quantities and yields. - **Output lines** — the products produced: - **Primary product** — the main intended output. - **Co-products** — additional intended outputs. - **By-products** — unavoidable secondary outputs. Each output has a yield (how much is produced per batch), a cost allocation rule, and inventory handling. **Cost allocation.** - **Co-products** — production cost is allocated across them by one of several rules: by value (relative selling price), by volume, by weight, by fixed percentage, by user-defined formula. The total production cost is split proportionally. - **By-products** — typically use **cost reduction** — the by-product's nominal value reduces the production cost absorbed by the primary product. By-product nominal value is configurable per item. The choice of allocation rule affects margin reporting per output. For commodity processing (oil refining), the allocation rule materially affects which products appear profitable. ## Planned co-products in batch orders Process **batch orders** (the process-manufacturing equivalent of production orders in discrete) plan inputs and outputs together. Planning a batch produces all the outputs simultaneously — you can't choose to make just the primary without also making the co-products and by-products. This has supply-chain implications: planning to make primary product A produces co-product B automatically, increasing B's inventory regardless of whether B is in demand. Master planning has to balance the co-product output against demand for all outputs. ## Co-product master planning The planning engine considers all outputs: - Demand for primary product A pulls batch orders that also produce co-product B. - Demand for co-product B is partially or fully covered by the batches running for product A. - If B has higher demand than A's batches produce, additional batches are planned solely for B (or alternative formulas if available). - If B has lower demand than is produced, B accumulates in inventory. The complexity multiplies with multiple co-products; planning configuration deserves careful attention. ## Catch weight Process manufacturing often combines co-product output with **catch weight** — products priced per unit but inventoried by weight (a cheese wheel = 1 piece but with variable kg per piece). Catch weight tracks both unit and weight; pricing per weight, inventory per piece. Common in dairy, meat, fish. ## By-product disposal Some by-products have zero or negative value (waste streams). Those need accounting for disposal cost, possibly with environmental compliance reporting alongside the operational data. ## Yields and shrinkage A formula's yield is configurable (e.g. 1000 kg input → 950 kg primary + 30 kg by-product + 20 kg shrinkage / waste). Actual yield variance from formula is posted as variance. Operational discipline tracks formula yields vs actual to identify process improvements or formula adjustments. **Common pitfalls.** - **Treating co-products as separate production runs** — separate orders for each output with manual coordination, fragile and expensive. - **By-product cost-reduction value out of date** — by-product's market value changed; the configured value doesn't reflect reality; margin reporting becomes wrong. - **Catch-weight items modelled without catch weight** — pricing and inventory go wrong on every transaction. ## Operational reality Process manufacturing in F&O is one of the deepest configuration areas. Engage a partner with proven process-manufacturing experience; pilot carefully; iterate on the formula structure as actual operations reveal what works. --- # Common Business Central ISV add-ons Categories of Business Central ISV add-ons that customers most often install — country localizations, document automation, EDI, banking. Source: https://www.solvingdynamics365.com/guides/common-business-central-isv-addons Section: Integrations / Data movement Published: 2026-05-01 Few Business Central implementations run on a pure base application. ISVs fill the gaps with add-ons distributed through **AppSource**, and a handful of categories appear on almost every customer's installed-app list. Knowing the categories helps scope an implementation early. ## Country localizations Microsoft ships country localizations for around twenty countries directly; the rest come from local partner ISVs as AppSource apps. Common examples: SAF-T for the Nordics, real-time invoice reporting (RTIR) for Hungary, Poland's JPK, Italy's Fatturazione Elettronica, Saudi Arabia's ZATCA e-invoicing. Localizations cover VAT rates, statutory reports, electronic invoicing, payment files, and country-specific document layouts. ## Document automation AP automation is the single most popular ISV category. ISVs (Continia, ExFlow, Lasernet, Documotor) extract data from vendor PDFs/EDI/email, run them through approval, and post to BC. The base BC ships modest invoice capture and approval; AP automation ISVs add line-level matching, OCR, multi-format ingestion, and complex approval routing. ## EDI Lanham, EDICOM, TIE Kinetix, Pagero and others provide full EDI solutions on BC, covering trading partner onboarding, document maps, and chargeback monitoring (see the EDI guide). ## Banking Local banking integrations — feeds, payment files, statement imports — beyond Microsoft's bundled connectors. Common in markets like the Nordics, Benelux, UK, and Brazil where banking varies by country. ## Manufacturing ISVs (Insight Works, To-Increase, Aptean) add advanced manufacturing features missing from BC's base — shop-floor data collection, finite scheduling, advanced quality management, MES integration, engineering change orders. ## Distribution and warehouse Beyond BC's built-in WMS, ISVs offer scanning UIs (Tasklet, Insight Works WMS, Continia), 3PL connectors, parcel-carrier integration (UPS/FedEx/DHL/PostNord shipping labels), and complex pricing engines. ## Field service For BC-anchored services businesses, ISVs deliver service management and field dispatch capabilities beyond BC's basic service module. ## Project / PSA Add-ons that extend BC's project module toward full PSA — sophisticated billing, resource management, time and expense. ## E-commerce connectors Beyond Microsoft's Shopify connector, ISVs connect WooCommerce, Magento, BigCommerce, and headless commerce platforms to BC. ## Reporting and dashboarding Beyond the built-in Account Schedules and Power BI, ISVs offer richer financial reporting and corporate performance management add-ons. ## Compliance and audit GDPR helpers, audit-trail strengtheners, fraud-detection add-ons. ## Caveat Each installed add-on is a piece of software to upgrade twice a year. A typical BC tenant has five to fifteen installed extensions. Twenty-plus starts to slow upgrades meaningfully. Choose deliberately. --- # Company Hub and multi-company navigation in Business Central How the Company Hub role centre and cross-company features in Business Central give finance teams a single pane across many BC companies — what works. Source: https://www.solvingdynamics365.com/guides/company-hub-and-multi-company-navigation-in-bc Section: Business Central / Finance & accounting Published: 2026-05-01 A finance team running 15 BC companies (subsidiaries, legal entities, project entities) needs to see the world without bouncing through 15 separate company switches. Business Central's **Company Hub** role centre and a cluster of cross-company features are the standard answer. They're useful, but they have well-defined limits worth understanding before designing on top of them. ## The Company Hub role centre Assigning a user to the **COMPANY HUB** role centre lands them on a dashboard listing companies they have access to — across the same BC tenant. Each company row shows headline numbers: receivables, payables, cash, sales month-to-date. From there, a click takes the user into the company. The dashboard is **scope-aware** — the rows shown depend on the user's permissions in each company. If you don't have access to Company X, it won't appear. This is the cleanest BC pattern for users who work in many companies but rarely all at once. **Setup.** 1. Each user has the `Allow Company Hub` flag. 2. Add companies to the user's hub list — explicitly per user. 3. Refresh the hub regularly via the **Refresh Companies in Company Hub** action; balances cache, not live (~daily refresh by default). The caching choice is performance — pulling 15 live company balances on every dashboard load would be slow. ## Switching companies Two paths: - **Top-right company picker** in the BC web client — fast, always present. - **From Company Hub** — context-aware drill. Both work; the picker is faster for power users, the hub is friendlier for managers. ## Cross-company reporting A different problem: producing a single report across all companies. BC has: - **Account Schedules** that can target a company (manual selection). - **Power BI reports** that union data from multiple companies via the BC API. - **Custom data warehouse** consolidating BC data per company into a star schema. The first option doesn't scale beyond a few companies. The second is the practical answer for most mid-market groups. The third is the enterprise answer. ## Intercompany features Cross-company *transactions* — sending a sales invoice from Company A that becomes a purchase invoice in Company B automatically — are handled by **Intercompany Setup**. Each company is registered as an intercompany partner of the others; intercompany chart of accounts and dimensions map the integration. When a sales document is posted with an intercompany partner code, BC creates an inbound document in the partner's company automatically. Reconciliation cycles intercompany AR and AP every period to confirm the books match. ## Cross-company users and licensing Each user licence allows access to multiple companies on the same tenant — no per-company licence fee. So a finance manager touching 15 companies pays for one user licence. This is fundamentally different from the per-tenant model in F&O where legal entities sit inside one tenant. **Limits and what Company Hub doesn't do.** - **No cross-tenant.** Company Hub spans one BC tenant only. Companies on separate tenants (a subsidiary on a different BC contract) require manual access or external aggregation. - **No consolidated reporting in the hub.** Each row is per-company; combined views require Power BI or external consolidation. - **Limited customisation.** The Company Hub role centre can be extended (custom factboxes, additional KPIs) but it's not a free-form dashboard. - **No live data.** Refresh cadence creates lag — the hub is for management overview, not for the cash position right now. ## Cross-company workflows For routine work spanning companies (intercompany allocations, shared service centres processing AP across several entities), the typical pattern combines: - Company Hub for navigation. - Permission sets letting one user act in all relevant companies. - A shared chart of accounts approach to make consolidations and reporting comparable. - Automated intercompany setup so cross-company invoices flow without re-keying. **Common pitfalls.** - **Company-specific data missing.** Master data (items, customers) created in one company isn't replicated to others. Either manage with a master data sync extension or accept the duplication. - **Permission set drift.** Permissions diverge per company over time; a user has different access in Company A vs Company B. Periodic audit catches this. - **Hub data stale.** Forgot to schedule refresh; managers complain about wrong numbers. - **Mistaking Company Hub for consolidation.** It's navigation, not aggregation. Don't promise consolidated reporting from the hub alone. ## Where this stops scaling For groups with more than ~50 companies, or with multi-tenant BC deployments, or with deep cross-company consolidation needs (full eliminations, IFRS disclosure), the right answer is usually a dedicated consolidation tool (OneStream, Financial Reporting in BC, or Microsoft Fabric for analytical consolidation) layered on top of BC. Company Hub is for the mid-market multi-company finance team, not for global groups. --- # Connected Field Service and IoT How Connected Field Service integrates IoT signals with Dynamics 365 Field Service — telemetry, alerts, anomaly detection. Source: https://www.solvingdynamics365.com/guides/connected-field-service-and-iot Section: Customer Engagement / Field Service Published: 2026-05-01 **Connected Field Service** is the part of Dynamics 365 Field Service that bridges physical equipment in the world to the work-order system. Instead of waiting for a customer to call and report a problem, the equipment itself reports its state — temperature, vibration, error codes, usage — and the system decides whether to dispatch a technician, attempt remote resolution, or alert proactively before a fault becomes an outage. **The data flow.** 1. **Equipment** (HVAC units, industrial machinery, medical devices, refrigeration, vehicle fleets) emits telemetry — typically via cellular, WiFi, or LoRa to a cloud endpoint. 2. **Azure IoT Hub** (or another IoT platform) ingests, authenticates, and routes the messages. 3. **Stream Analytics or custom code** processes the stream — thresholds, anomaly detection, ML model scoring. 4. **Alerts** are raised when a condition matches — temperature out of range, vibration above tolerance, error code emitted, predicted failure within N days. 5. **Connected Field Service** receives alerts and decides what to do: try remote resolution (send a command back to the device), schedule a preventive work order, escalate to dispatch, notify a customer. ## Connected Field Service in the agent's view Inside the Field Service application, alerts appear as **IoT alerts** linked to customer assets. Agents (or automated rules) can: - **Acknowledge** — record awareness of the alert. - **Take action remotely** — execute commands sent back to the device (restart, reset thresholds, run diagnostics). - **Create a work order** — dispatch a technician with the right skills, parts, and context. - **Mark as false positive** — feedback that improves anomaly-detection models. ## Anomaly detection Beyond rule-based thresholds (temperature > 80°C), Connected Field Service supports ML-based anomaly detection trained on the equipment's normal patterns. The model spots deviations a fixed threshold would miss — gradual drift, intermittent spikes, multi-variable correlations. ## Preventive vs reactive The big shift Connected Field Service enables: instead of dispatching a technician *after* a failure, predict failure *before* it happens and dispatch preventively. Customers see fewer outages; service organisations see better first-time-fix rates because the right parts arrive with the technician. ## Remote-first resolution Many "problems" are resolvable without a site visit — restart a device, adjust a setting, recalibrate. Connected Field Service automates the remote attempt first; only escalates to dispatch if remote fails. For some service organisations, remote resolution diverts 30–50% of would-be work orders, saving substantial cost. ## Customer asset hierarchy Equipment installed at customer sites is modelled as a **customer asset** with hierarchy: parent equipment, child sub-assemblies, components. Telemetry attaches at the appropriate level. Maintenance history accumulates per asset. ## Integration with the broader stack Connected Field Service plays with: - **Customer Service** — customer-raised cases combine with IoT alerts on the same equipment. - **Sales** — predictive maintenance contracts up-sell from service contracts. - **Supply Chain** — spare-part demand is forecast from predicted failures. - **Customer Insights** — equipment usage patterns inform marketing and product roadmap. ## Implementation reality Connected Field Service requires real IoT capability on the equipment side — sensors, connectivity, telemetry pipeline. For equipment that doesn't yet have IoT, the program needs an OT (operational technology) project alongside the IT project. The IT side is the easy part. ## Licensing Connected Field Service is sold alongside Dynamics 365 Field Service; Azure IoT costs are billed separately by Azure consumption. --- # Connection records in Dataverse How connection records model record-to-record relationships beyond standard lookups — types, roles, use cases, and the limits of the mechanism. Source: https://www.solvingdynamics365.com/guides/connection-records-in-dataverse Section: Customer Engagement / Dataverse platform Published: 2026-07-16 The standard way to relate records in Dataverse is through **lookup fields** — a Customer field on an Opportunity, a Manager field on a User. Lookups are 1:N relationships with fixed semantics. But sometimes the relationship is dynamic, has multiple flavours, or doesn't fit a standard hierarchy. **Connection records** are Dataverse's flexible record-to-record relationship mechanism for these cases. ## The model A **connection** is a special record linking two other records: - **From record** — one endpoint. - **To record** — the other endpoint. - **Connection role** — defines what the relationship is. - **Start date and end date** — when the connection is effective. - **Description** — optional context. Connections work between any two records in Dataverse — the from and to can be different tables, the same table, even different types of relationship. ## Connection roles A **connection role** is a named relationship type. Each role has: - **Name** — Sponsor, Influencer, Partner, Mentor, Competitor, Stakeholder, Spouse. - **Reciprocal role name** — what the reverse relationship is called. "Sponsor" might pair with "Sponsored By"; "Manager" with "Reports To". - **Permitted record types** — which tables the role can connect (e.g. role "Influencer" can connect a Contact to an Opportunity). When you create a connection, you pick the role; the system automatically creates the reciprocal connection from the to-side. **Use cases.** - **Influencer mapping in B2B sales** — A buyer has multiple stakeholders involved in a decision: an Economic Buyer, a Technical Influencer, a Champion, a Blocker. Each is a contact connected to the opportunity through specific roles. The seller can see at a glance who's in the deal and what they do. - **Competitor tracking** — An opportunity has 1-3 competitors. Each is an Account record connected to the opportunity with role "Competitor". Reports show win rate against specific competitors. - **Mentor relationships** — Internal mentorship pairings between employees, with role "Mentor" / "Mentee". The HR system tracks who mentors whom. - **Customer-to-customer relationships** — In a network business (industries with referrals, partnerships), customers refer each other; each referral is a connection with role "Referred By". - **Spouse / family relationships** — In wealth management or insurance, related individuals (spouse, dependents) connect through family roles. **Filtering and querying.** Each record has an associated **subgrid of connections** on its form — typically labelled "Connections" or similar. The user adds, edits, deletes connections inline. Queries can filter: - Connections of a specific role. - Connections to records of a specific type. - Active vs expired connections. - Connections with specific date ranges. Reports can analyse: "show me all opportunities with at least one Influencer connected" or "show me competitors I've won against in the last year". ## Configuration Connection roles are configured per environment: - Create roles for the relationships your business cares about. - Define reciprocal pairs. - Specify permitted record types per role. Common starting roles: Sponsor / Sponsored By, Partner / Partnered With, Spouse / Spouse, Manager / Direct Report, Mentor / Mentee, Influencer / Influenced. **Vs many-to-many relationships.** - **N:N relationship** — defined in the schema; binary (associated or not). - **Connection** — flexible, role-based, with timeline and additional attributes; ad-hoc per record-pair. Connections suit relationships that aren't structural enough to warrant schema-level N:N — relationships that emerge from specific business events. **Vs custom intersection entities.** - **Custom intersection entity** — heavy modeling; full audit, security, lifecycle on the intersection record. Best for complex relationships with substantial structural meaning. - **Connection** — lighter; pre-built form, less customisation. For most "ad-hoc relationship" needs, connections suffice; for structural relationships with rich data, a custom intersection is better. **Limits.** - **Connections aren't shown on the main timeline by default** — they live in their own subgrid. - **Audit history on connections** is limited compared to first-class entities. - **Reporting depth** — connection-based reports can be complex; not all tools handle them cleanly. - **No native cascade delete from parent** — deleting the source record doesn't automatically delete its connections in some scenarios. **Common pitfalls.** - **Connection sprawl** — too many ad-hoc connection roles produces an inventory that's hard to govern. Limit to meaningful roles. - **Connections used where lookups would suit** — standard 1:N lookups are simpler and more performant; reach for connections only when the dynamic / role-based aspect matters. - **Stale connections** — relationships end; nobody updates the end date; reporting shows wrong current state. ## Operational reality Connections are an underused Dynamics 365 feature that solves real B2B sales and relationship-mapping problems. Configure thoughtfully; use them where they genuinely model the business; report on them to extract value. --- # Connection references and environment variables How to make Power Platform solutions portable across environments — connection references for credentials, environment variables for configuration values. Source: https://www.solvingdynamics365.com/guides/connection-references-and-environment-variables Section: Power Platform / ALM & governance Published: 2026-05-01 A Power Platform solution that hard-codes connection IDs and configuration values is a solution that needs manual fixup every time it deploys to a new environment. **Connection references** and **environment variables** are the two mechanisms that make solutions truly portable — abstracting environment-specific details so the same solution package deploys to dev, UAT, and production cleanly. **Connection references.** A **connection reference** is a solution component that abstracts the *kind* of connection a flow or app needs without binding to a specific connection instance. Example: a Power Automate flow that calls SharePoint. In dev, the flow connects to *Dev SharePoint Site*; in UAT, *UAT SharePoint Site*; in prod, *Prod SharePoint Site*. Without connection references, deploying the flow across environments means manually re-pointing the connection each time — error-prone and slow. With connection references: - The flow references a *connection reference* (e.g. `cr_SharePointConnection`) instead of a specific connection. - The connection reference declares the connector type (SharePoint) without the specific credentials. - At import time to each environment, the connection reference is bound to an environment-specific connection (the dev SharePoint connection in dev, etc.). - The flow code stays the same; the binding differs per environment. **Lifecycle.** - **Create the connection reference** in the development environment, bound to a dev connection. - **Use the connection reference** in flows / apps instead of direct connections. - **Export the solution** as managed. - **Import to UAT / prod** — the import process prompts for the target environment's connection to bind to the reference. - **Automate the binding** in pipelines using the Power Platform CLI or solution import parameters. **Environment variables.** An **environment variable** abstracts a *configuration value* — a URL, an API key (via secured environment variable), a numeric threshold, a feature flag — so it can differ per environment. Example: a flow that calls an external API. The API URL is `https://api-dev.example.com` in dev, `https://api-uat.example.com` in UAT, `https://api.example.com` in production. Without environment variables, the URL hard-codes; deploys break. With environment variables: - The flow references an environment variable (e.g. `cr_ApiBaseUrl`). - The variable's *default value* in the solution is the dev URL. - On import to each environment, the import asks for the environment-specific value (or accepts the default). - The flow uses the variable's value at runtime. **Variable types.** - **String** — text values (URLs, names, identifiers). - **Number** — numeric values (thresholds, counts). - **Boolean** — Yes/No flags. - **JSON** — structured configuration. - **Data source** — references to specific Dataverse environments or tables. - **Secret** — secured values pulled from Azure Key Vault. The variable points to a Key Vault URL and secret name; runtime fetches the value at execution. Used for API keys, connection strings, anything sensitive. ## The combined effect A well-designed solution uses both: - **Connection references** for every external connection (SharePoint, SQL, third-party APIs, even Dataverse environments). - **Environment variables** for every value that differs per environment. The result: the same managed solution package deploys to any environment without modification. Bindings happen at import time, automated via CI/CD pipelines. ## Pipeline automation In Azure DevOps or GitHub Actions: - The pipeline holds environment-specific bindings as variables / secrets. - During import, the bindings are supplied through the `pac solution import` parameters or the Power Platform Build Tools task. - The same solution artefact, imported with different binding parameters, produces correctly-configured deployments. **Common pitfalls.** - **Some Flows still bound to specific connections.** Migrating an existing flow to use a connection reference requires explicit migration — Microsoft has improved this but legacy flows may still need cleanup. - **Environment variables not parameterised in pipeline.** If the pipeline imports with default values only, the wrong environment's defaults land in production. Always supply environment-specific values at import. - **Secret variables not properly secured.** If treating sensitive values as plain string variables, they're visible in solution exports. Use Key Vault-backed secret variables. - **Renamed connection references.** Renaming after deployment leaves orphan references in environments; cleanup is manual. ## Operational discipline From day one of a Power Platform solution build, use connection references and environment variables for everything environment-specific. The investment is small at design time; ignoring it produces deploy pain forever. --- # Connection references best practices in Dataverse How connection references decouple connector authentication from solutions — the ALM patterns, common pitfalls. Source: https://www.solvingdynamics365.com/guides/dataverse-connection-references-best-practices Section: Customer Engagement / Dataverse platform Published: 2026-05-01 A Power Automate flow calling SharePoint, SQL, or any connector needs a **connection** — an authenticated session to that service. Hard-coding a specific connection in a flow couples the flow to one user / one credential / one environment. The **connection reference** is Microsoft's abstraction layer: the solution references an abstract handle; each environment binds it to a real connection. **Two distinct concepts.** - **Connection** — a real, authenticated session to a connector. Created by a specific user with their credentials or via service principal. - **Connection reference** — an abstract handle in a solution. References a logical connection; bound to specific connections per environment. Solutions contain connection references, not connections. Connections live in the environment. **Why connection references matter.** - **Solutions deploy without baked-in credentials.** - **Per-environment binding** — dev uses dev credentials; prod uses prod. - **User changes** don't break flows — change the connection binding, not the flow. - **Service principal connections** for production-grade auth without user dependency. ## Creating a connection reference In a solution: 1. Add new → Connection reference. 2. Specify connector type (SharePoint, SQL, Salesforce, etc.). 3. Specify connection (or leave unbound for later binding). The connector defines what authentication is needed; the connection supplies it. ## Using in a flow When designing the flow: - Action picks a connection reference instead of directly picking a connection. - Solution-bound flow uses the reference. - At runtime, the reference resolves to the bound connection. ## Solution import behaviour When importing a solution to a new environment: - Connection references appear unbound. - Admin must bind each to a real connection (or to be auto-bound by deployment automation). - Without binding, flows can't run. This is the deployment-time configuration step that ops must execute. ## Service principal connections Modern preference: - Connection authenticates as a service principal, not a user. - No dependency on a specific human's credentials. - Survives user departures. - More secure (managed identity, no human password). For production, service principal connections are the recommended pattern. ## User-context connections Connections authenticated by a specific user: - User's credentials. - User's permissions in the target service. - Breaks when user leaves or password changes. Use only for personal scenarios or where service principal isn't supported. **Connection ownership.** - Connection owned by the user who created it. - Sharing connection: share with specific users / teams. - Reassign connection: change owner. For team-shared flows, the connection should be shared with the flow's users. ## Multi-tenant scenarios Connection references work cleanly: - Solution exported once. - Imported into multiple customer environments. - Each customer binds to their own connection. This is the ISV pattern — distribute a solution; each customer configures connections. **Common connector patterns.** - **SharePoint** — to a specific site / library. - **SQL** — to a database (connection string + credentials). - **Outlook** — sending emails on behalf of a mailbox. - **HTTP** — generic; often used for custom APIs. - **Custom connector** — your own definition. Each connector has different authentication requirements; service principal support varies. **Auditing connection usage.** - **Power Platform admin centre** — connection inventory. - Identifies orphaned connections (no flow uses). - Identifies high-use connections (many flows). - Identifies connections owned by departed users. Periodic audit catches drift. **ALM patterns.** - **Solution checker** — verify connection references defined. - **Deployment runbook** — list every connection reference; how to bind. - **Automation** — pipelines can bind connection references via API. Automated binding via pipelines is the mature pattern; manual binding works for smaller scale. **Common pitfalls.** - **Flow with hardcoded connection.** Solution contains the connection ID; imports fail in other environments. - **User connection in production.** User leaves; flows break. - **Connection reference unbound.** Solution imported but reference not bound; flow fails at runtime. - **Multiple connections to same target.** Confusion; consolidate. - **Connection share missing.** Flow can run as creator but not for other users. - **Stale connections.** Connections to systems no longer in use; clean up. ## Migration from old patterns Legacy flows with hardcoded connections: 1. Create connection references in the solution. 2. Update each flow to use the reference instead of direct connection. 3. Test. 4. Deploy. 5. Remove unused direct connections. This is technical debt worth paying down for any flow that needs to move between environments. **Operational rhythm.** - **Per deployment** — verify connection bindings in target environment. - **Per user departure** — audit connections owned by departing user; reassign or migrate. - **Quarterly** — connection inventory audit; cleanup. - **Per solution release** — confirm all references properly bound. ## Strategic positioning Connection references are how production-grade Power Platform solutions handle authentication. The pattern is mature; the discipline of using them is what separates production-ready solutions from prototypes. Combined with service principal connections for production and environment variables for secrets, the architecture is secure, portable, and operable at scale. Invest in the pattern early; the alternative is a tangle of hardcoded connections that breaks on every user change and every environment promotion. --- # Consignment inventory in Dynamics 365 SCM How F&O handles consignment inventory — vendor-owned stock on customer premises and customer-owned stock at our locations, the accounting and operational rules. Source: https://www.solvingdynamics365.com/guides/consignment-inventory-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 **Consignment inventory** is stock physically held by one party but legally owned by another. The vendor places goods at the customer's warehouse; ownership transfers only when the customer consumes them; cash settles after consumption. F&O has native consignment support in two directions — vendor-owned consignment at your locations (you hold) and your-owned consignment at customer locations (they hold) — with distinct workflows for each. **Why companies use consignment.** - **Vendor side** — keeps stock at the customer's hand without forcing a sale; customer can't run out, vendor doesn't carry the AR. - **Customer side** — no inventory ownership, no carrying cost, no obsolescence risk until consumed; cash only flows when value is realised. It's a working capital and risk-sharing arrangement. Common in automotive (tier-1 suppliers consign to OEMs), MRO consumables (Grainger-style vendor-managed), and high-value commercial inventory. ## Vendor-owned consignment in F&O You hold the stock; the vendor owns it. Setup: - A separate **location** or **warehouse** flagged as consignment. - Items configured to recognise consignment. - Vendor agreement structure (consignment replenishment order). Workflow: 1. **Consignment replenishment order** — a special PO type that brings vendor stock into your location without posting an inventory financial transaction. Stock arrives, on-hand increases at your location, but the inventory G/L account does *not* increase; the items are not yet owned. 2. **Consumption** — when the items are consumed (issued to a production order, sold to a customer), an **inventory ownership change journal** posts. This recognises: - Inventory ownership transfer from vendor to your company. - Vendor invoice receipt (typically auto-generated against the consignment vendor). - The financial entries that would have happened on a normal purchase. 3. **Settlement** — the vendor invoice is paid normally through AP. The trick is the **deferred ownership recognition**. Inventory on-hand counts the consignment stock; inventory value does not. **Two reporting realities.** - **Physical on-hand** — includes consignment stock. - **Financial on-hand** — excludes consignment stock until consumed. Standard reports show physical; financial reports filter out consignment. Mixing them up leads to wrong asset valuations or wrong availability calculations. ## Customer consignment — your stock at their location F&O models this with: - A site / warehouse representing the customer location. - Transfer orders move stock from your DC to the customer's consignment warehouse — ownership stays with you. - Sales are reported when the customer consumes — typically by importing customer consumption reports as sales orders against the consignment warehouse. ## Consumption-based billing Two patterns: - **Customer self-reports consumption** — customer uploads a periodic file; F&O imports it as sales orders, invoices generated. - **Vendor-managed inventory (VMI)** — vendor sends a replenishment proposal; customer confirms; vendor invoices for the delta. Both depend on accurate consumption data and trust between parties. ## Pricing Consignment doesn't change pricing logic — sales prices apply at consumption time per the trade agreements in place at that date. Some contracts include price protection (the price at delivery, not at consumption) for stable budgeting; F&O supports both via trade agreement effective dates. ## Replenishment For high-volume consignment locations, automated replenishment is standard: - Min/Max coverage on the consignment warehouse triggers replenishment when below min. - Transfer orders or vendor consignment POs auto-suggested. - Vendor-managed inventory: vendor reads our consumption data via EDI/API, sends shipment without our PO. ## Returns and obsolescence Consigned stock that doesn't sell: - **Returned to vendor** — vendor-owned consignment can be returned without financial transaction (we never owned it). - **Customer returns at customer site** — typically a periodic reconciliation, with credit notes for damaged or unsold stock. - **Obsolete consignment** — handled by negotiation; contractual terms determine ownership transfer or scrap. **Common pitfalls.** - **Treating consignment as normal stock.** Posting financial transactions at receipt; vendor stock booked as asset; messy reversals later. - **No consumption discipline.** Items consumed without journal entry; physical and financial diverge over time. - **Reconciliation skipped.** Periodic confirms between physical count, vendor records, customer records prevent year-end surprises. - **Mixing ownership in one bin.** A bin holding both consignment and owned stock; ownership tracking breaks. - **Tax treatment confusion.** Consignment crossing borders has complex VAT/customs implications; consult tax advisors. ## Operational discipline Consignment requires more accounting attention than normal inventory because the physical and financial worlds are deliberately decoupled. The reward is working capital advantage and stronger commercial relationships, but only with discipline in posting, reconciliation, and reporting. --- # Consolidation in Business Central How Business Central consolidates multiple subsidiary companies into a consolidated parent — business unit setup, the consolidation file path, eliminations. Source: https://www.solvingdynamics365.com/guides/consolidation-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 A group of companies running Business Central usually needs to produce consolidated financial statements showing the group as a single economic entity. BC ships native **consolidation** functionality — a way to pull subsidiary G/L data into a parent company, translate it into the parent's currency, and produce consolidated trial balances and reports. ## Architecture Each subsidiary is its own BC company. A separate **consolidation company** is created — empty of operational data, used purely as the destination for consolidated G/L. Subsidiaries are configured as **Business Units** in the consolidation company, defining how each subsidiary's data is imported. ## Business Unit card Per subsidiary: - **Company Name** — the BC company holding subsidiary data. - **Consolidation Method** — `Purchase`, `Pooling of Interests`, `Equity`, `Proportional`. Most are `Purchase` for fully-owned subsidiaries. - **Consolidation %** — for proportional or partial ownership. - **Currency Code** — subsidiary's local currency. - **Exchange Rate** translations — which rate (closing, average, historical) applies to which account category. - **G/L Account Mapping** — how subsidiary chart of accounts maps into the consolidation chart of accounts (if charts differ). **Two import paths.** 1. **Database** — direct read from another BC company in the same tenant. Faster, no file movement. 2. **File** — subsidiary exports a `Consolidation` XML file; consolidation company imports it. Used when subsidiaries are on separate tenants or different BC versions. ## Running consolidation The `Import Consolidation from Database` or `... from File` action on the consolidation company: 1. Reads subsidiary G/L entries for the period. 2. Applies currency translation per account-rate rule. 3. Maps each account into the consolidation chart of accounts. 4. Posts G/L entries in the consolidation company tagged with `Business Unit Code`. The consolidation company's trial balance is now the sum of subsidiaries. ## Currency translation Each G/L account in the consolidation chart specifies which type of rate to apply: - **Closing Rate** — for balance sheet accounts (assets, liabilities). - **Average Rate** — for P&L accounts. - **Historical Rate** — for equity accounts that should not retranslate (share capital). The translation differences accumulate to a **Cumulative Translation Adjustment (CTA)** account on equity — a standard IFRS / US GAAP presentation requirement. ## Eliminations Intercompany transactions (subsidiary A sells to subsidiary B) need elimination — otherwise consolidated revenue and cost are double-counted. BC's consolidation doesn't auto-eliminate; you post **elimination journals** in the consolidation company. Common eliminations: - **Intercompany sales / purchases** — reverse each side. - **Intercompany AR / AP** — net to zero. - **Intercompany loans** — eliminate principal and interest. - **Unrealised intercompany profit** in inventory — defer until the inventory is sold externally. Elimination journals are repeated every period; a documented template makes them manageable. ## Minority interest (non-controlling interest) For partially-owned subsidiaries (e.g. parent owns 75%), the minority's 25% share of net income belongs to a separate equity line. The `Consolidation %` setting handles consolidation percentage but the NCI journal entries are manual elimination work. **What BC consolidation does NOT do.** - **Automatic intercompany elimination** — manual journals required. - **Investment in subsidiary elimination** — manual. - **Goodwill calculation** — manual. - **Full statement of cash flows at group level** — manual (BC has cash flow at company level only). - **IFRS consolidated disclosures (segment reporting, etc.)** — Power BI / Excel. For groups with these complexity needs, dedicated consolidation tools (OneStream, Tagetik, BPC, or Microsoft Financial Reporting) are layered on top of BC. ## Multi-currency consolidated reporting A consolidated trial balance in USD is straightforward — but a French parent reporting in EUR with US subsidiaries needs USD → EUR translation in addition to subsidiary local currency. BC handles both layers as long as the rate setup is configured. **Common pitfalls.** - **Chart-of-accounts mismatch.** Subsidiaries with different charts → consolidation accounts mismatched. Either harmonise charts or maintain mapping tables rigorously. - **Missing elimination journals.** Group revenue overstated. Reconciliation between intercompany AR and AP catches this — they must net to zero per period. - **CTA account not configured.** Translation differences post wrong; balance sheet doesn't balance. - **Re-running consolidation overwrites manual entries.** It does — re-import deletes prior consolidation entries for the business unit. Eliminations must be re-applied or kept distinct (use a separate "Elimination" business unit). - **Currency rates not refreshed.** Old rates used; results wrong. ## Reporting cadence Most groups consolidate monthly, with a full reconciliation at quarter end and audit-quality consolidation at year end. The first consolidated close in BC always reveals chart-of-accounts and rate setup issues; build buffer time into the close calendar. --- # Consolidations in Dynamics 365 Finance How F&O handles financial consolidation across legal entities — consolidation companies, methods, elimination rules, currency translation. Source: https://www.solvingdynamics365.com/guides/consolidations-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 For multi-entity groups, consolidated financial statements show the group as a single economic entity. F&O's **Consolidation** module handles much of this natively — collecting subsidiary data, translating currencies, aggregating to a consolidation company. For groups with simpler structures, F&O alone may suffice; for complex groups, dedicated consolidation platforms (OneStream, BPC, Tagetik, Anaplan) layer on top. **The architecture.** - **Subsidiary legal entities** — each with its own ledger. - **Consolidation company** — a dedicated F&O legal entity for consolidated results. - **Consolidation account groups** — the chart of accounts for consolidated reporting. - **Account mappings** — subsidiary accounts to consolidation accounts. The consolidation company doesn't operate transactional business — it's a reporting entity. **Consolidation methods.** - **Purchase (acquisition)** — full consolidation; subsidiary fully owned or majority-owned. - **Equity** — for significant influence (typically 20–50%); single line "investment in associate." - **Proportional** — for joint ventures. - **Pooling of interests** — historical method. Each method affects how subsidiary numbers flow into consolidated. ## Currency translation For multi-currency groups: - **Closing rate** — balance sheet items. - **Average rate** — P&L items. - **Historical rate** — equity items. Translation differences accumulate as Cumulative Translation Adjustment (CTA) in equity — IFRS / US GAAP requirement. **The consolidation process.** 1. Subsidiary periodic closes complete. 2. Consolidation company runs the consolidation routine. 3. Subsidiary balances pulled (via direct database read in same tenant or file import across tenants). 4. Currency translation applied. 5. Account mapping applied. 6. Consolidation entries posted to consolidation company. This is automated; the manual steps are typically the elimination journals (next). ## Eliminations Cross-entity transactions need elimination: - **Intercompany sales / COGS** — reverse on both sides. - **Intercompany AR / AP** — net to zero. - **Intercompany dividends** — eliminate. - **Investment in subsidiary** — eliminate against subsidiary equity. - **Unrealised intercompany profit in inventory** — defer. - **Goodwill calculation** — recognised at acquisition. F&O can record elimination journals, but doesn't automate them — elimination rules are manual. ## Intercompany reconciliation Before eliminations: - AR of Entity A toward Entity B = AP of Entity B toward Entity A. - Sales of Entity A to Entity B = COGS of Entity B from Entity A. If they don't match, the elimination won't net to zero; investigate. Mature finance teams reconcile intercompany monthly as a pre-consolidation step. ## Account mappings Subsidiary accounts often differ from group: - Subsidiary local chart for statutory reporting. - Group consolidation chart for IFRS or US GAAP. - Mapping rules per subsidiary. The mapping is maintained per subsidiary; new accounts must be mapped or they go to a "unmapped" suspense. ## Minority interest (non-controlling interest, NCI) For partially-owned subsidiaries: - Subsidiary's profits split between parent's share and NCI. - NCI shown as separate equity line. - F&O can capture but elimination logic is manual. ## Goodwill Difference between acquisition cost and net assets acquired: - Recognised on consolidation. - Tested for impairment annually. - Manual journal entries in consolidation company. **Reporting at consolidation.** - **Consolidated trial balance.** - **Consolidated P&L.** - **Consolidated balance sheet.** - **Consolidated cash flow statement** — requires additional analysis. - **Notes and disclosures** — for IFRS / GAAP reporting. Cash flow at group level is the hardest — F&O has cash flow at entity level; group cash flow typically built in Excel or Power BI. **Comparison with dedicated consolidation tools.** - **OneStream, BPC, Tagetik** — purpose-built; full eliminations automation, multi-method support, disclosure management. - **F&O native** — basic consolidation; manual eliminations; limited disclosure features. For groups with fewer than 10 entities and simple intercompany flows, F&O native is sufficient. For groups with 50+ entities, complex eliminations, M&A activity, dedicated tools win. ## Multi-tenant scenarios When subsidiaries are on separate F&O tenants: - File-based import for consolidation. - More complex; longer cycle. - Greater opportunity for reconciliation gaps. Single-tenant multi-entity consolidation is significantly easier. **Common pitfalls.** - **Manual eliminations not automated.** Each cycle re-types the same eliminations; errors creep in. - **Account mapping drift.** New subsidiary accounts unmapped; sit in suspense. - **Currency rate errors.** Wrong rate applied; consolidation off by material amounts. - **No reconciliation discipline.** Intercompany not reconciled before consolidation; eliminations imbalanced. - **Late close cascades.** Subsidiary close delayed; consolidation delayed. **Operational rhythm.** - **Monthly** — consolidation cycle. - **Quarterly** — full review with audit-level rigour. - **Year-end** — audited consolidated financial statements. For quarterly reporting companies (most public companies), the rhythm is rigorous; first 5 business days of next month is a typical target for monthly consolidation. ## Strategic positioning F&O consolidation is functional and improving each wave. For most multi-entity groups using F&O across all entities, it covers the core need. For complex groups with frequent M&A, multi-currency exposure, or sophisticated disclosure needs, augmenting with a dedicated consolidation platform is common. The decision: scope of complexity vs investment in tooling. F&O's strength is integration with the source data; dedicated tools' strength is the depth of consolidation features. Combined intelligently, the architecture serves both operational accuracy and reporting demands. --- # Conversation Intelligence in Dynamics 365 Sales How Conversation Intelligence records, transcribes, and analyses sales calls — meeting platforms supported, the analytics surfaced. Source: https://www.solvingdynamics365.com/guides/conversation-intelligence-in-dynamics-365-sales Section: Customer Engagement / Sales Published: 2026-05-01 **Conversation Intelligence** in Dynamics 365 Sales (Premium SKU) captures sales conversations — Teams meetings, integrated dialler calls, recorded customer interactions — and converts them into structured analytics: transcripts, topics, action items, sentiment, talk ratios, competitor mentions, coaching feedback. The technical capability is impressive; making it stick operationally is where most rollouts succeed or fail. **What it does.** - **Recording** — captures audio of qualifying meetings. - **Transcription** — speech-to-text per participant. - **Topic detection** — what was discussed (product mentions, pricing, competitors, objections). - **Sentiment analysis** — per-participant emotional tone over the call. - **Talk-to-listen ratio** — speaking time percentage per participant. - **Action items** — extracted automatically. - **Pacing and questions** — interrupts, monologues, question density. - **Coaching scorecards** — managers grade calls against defined criteria. The output appears on the related opportunity and in dedicated Conversation Intelligence dashboards. **Meeting platforms supported.** - **Microsoft Teams** — native, deepest integration. - **Zoom** — via connector. - **Cisco Webex** — via connector. - **Native dialler** — built-in voice calling. - **Third-party dialers** (5K integrations) — varies. For organisations on Teams, the integration is friction-light. For Zoom-heavy organisations, the connector adds setup and per-call recording handoff. **Recording setup.** - **Per-call** — rep starts the recording manually. - **Auto-recording** — every meeting with external participants is recorded. - **Filter rules** — only meetings linked to opportunities, only specific reps, only certain accounts. Most deployments start with manual recording for legal-comfort reasons, evolving to auto-recording with appropriate consent management. ## Consent and legal Recording in most jurisdictions requires explicit notification or consent. Implementations include: - **Pre-meeting consent prompts** — Teams notifies participants of recording. - **Disclosed at start of call** — rep verbally confirms recording consent. - **Configurable per-region** — auto-recording disabled in stricter jurisdictions. Legal review of the consent framework is essential before rollout. GDPR, two-party consent states in the US, and similar regulations create real obligations. ## Topic configuration Out of the box, Conversation Intelligence detects generic topics. For specific organisations: - Define **custom keywords and topics** matching your products and competitors. - Train the model on your sales process vocabulary. - The topic list grows with usage. A well-tuned topic configuration is essential for actionable analytics — generic detection misses too much. **Analytics surfaced.** - **Per-call view** — transcript, sentiment timeline, topics flagged, action items. - **Rep performance** — average talk ratio, top topics, sentiment trends. - **Team comparisons** — rep A talks 70% of calls, rep B talks 40%; which is better depends on context. - **Deal-stage influence** — which conversations correlate with closed-won? **Coaching workflow.** 1. Manager opens a rep's recent calls. 2. Listens to/reviews highlighted moments. 3. Adds coaching comments at specific timestamps. 4. Rep reviews comments. 5. Tracked as coaching feedback in HR/learning systems. This is the value loop. Without it, recordings pile up unwatched and the feature is dead weight. ## Predictive scoring overlay Calls scored on multiple dimensions: - **Call effectiveness** — derived from sentiment, talk ratio, customer engagement signals. - **Win probability impact** — which conversations correlate with deals closing. ## Privacy and reps' comfort Resistance is normal: - "I don't want every call recorded." - "My manager will second-guess me constantly." Mitigation: - Position as coaching tool, not surveillance. - Manager training on constructive use. - Rep access to their own analytics; agency. - Clear policy on what's reviewed and for what purpose. Trust builds slowly; first 3–6 months are about building comfort, not analytics. **Common pitfalls.** - **No coaching loop.** Recordings happen, nobody listens, value zero. - **Generic topics only.** Detection misses what matters; team-specific tuning skipped. - **Manager misuse.** Rep called out publicly on a bad call; trust destroyed. - **Consent gaps.** Recording without proper notification; legal exposure. - **Bandwidth concerns.** Teams Premium licence may be needed for some recording features; verify licensing. - **Cherry-picking calls.** Reps only allow good calls to be recorded; analytics skewed. **Adoption pattern that works.** 1. **Pilot with 3–5 motivated reps and managers.** 2. **Define the coaching cadence** — weekly call review per rep. 3. **Use insights to refine playbooks** — what objections come up most; how do top reps handle them? 4. **Track improvement** — call effectiveness scores over time. 5. **Expand once value is demonstrated.** Rolling out broadly without this discipline is the most common failure path. ## Strategic positioning Conversation Intelligence is one of the most transformative additions to Sales when adopted properly — it makes coaching scalable and tied to specific evidence rather than impressions. It's also one of the most-underused premium features when bought but not operationalised. The licence cost is real; the value depends entirely on whether managers and reps engage with the workflow. --- # Copilot across Dynamics 365 How Copilot works across every Dynamics 365 app — Sales, Service, Field Service, Finance, Supply Chain, Business Central, Project Operations. Source: https://www.solvingdynamics365.com/guides/copilot-across-dynamics-365 Section: Power Platform Published: 2026-08-27 Updated: 2026-08-27 Microsoft has been shipping Copilot features into every Dynamics 365 app over the past two years, and the shape of what "Copilot" means differs materially between apps. This guide walks each surface, what it actually does, how it's licensed, and where the natural boundaries are between the app-specific Copilots and the wider Microsoft 365 Copilot. The short version: every Dynamics 365 app has a Copilot inside it, tuned for that app's workflow. Two of them — Copilot for Sales and Copilot for Service — also ship as standalone products that connect to Salesforce, so an org that runs Salesforce today can adopt the Copilot experience without moving off it. ## The taxonomy There are three families of Copilot in Dynamics 365, and getting them straight prevents most licensing and rollout confusion. **App-embedded Copilot.** Copilot features inside a specific Dynamics 365 app — draft an email in Sales, summarise a case in Customer Service, translate a bank statement in Business Central. These are included in the app's Enterprise / Premium licence and appear as buttons and panels inside the app itself. **Copilot for Sales / Copilot for Service.** Two standalone Copilot products that sit inside Outlook, Teams, and the Sales / Service app. They bring CRM context into the Microsoft 365 productivity apps — a seller reading an email in Outlook sees the CRM view of the person they're emailing without opening Dynamics 365. Licensed separately from the underlying app, and connectable to Salesforce as an alternative to Dynamics 365. **Microsoft 365 Copilot with Dynamics 365 plugins.** The general-purpose Microsoft 365 Copilot chat (the one in Teams, the Copilot app, and the web) can be extended with Dynamics 365 plugins that let it read pipeline, cases, or projects when asked. Licensed as part of Microsoft 365 Copilot. The three families overlap in places and complement in others. An organisation running the full stack typically has all three. ## Sales **App-embedded Copilot in Sales** drafts email replies, summarises long email threads, prepares meeting briefings, extracts notes back to CRM after a call, and answers natural-language questions across the pipeline. All inside the Sales app. **Copilot for Sales** does the same job from inside Outlook and Teams — a seller reading an email in Outlook sees the CRM record without switching apps, and can update opportunity fields or log a call from Outlook directly. This is the Copilot that most changes seller behaviour in day-to-day work; sellers live in Outlook, and CRM adoption improves when the CRM lives where the seller already is. Licensed as Sales Premium (bundles Copilot for Sales) or as a Copilot for Sales add-on to Sales Enterprise. Standalone-connected-to-Salesforce is a separately licensed product with its own pricing. ## Customer Service **App-embedded Copilot in Customer Service** handles case summary (the case's history condensed for an agent picking it up mid-flight), email draft replies, conversation summary at end of chat that writes back to the case timeline, knowledge search in natural language, and agent-assist suggestions during a live conversation. **Copilot for Service** brings CRM context into Outlook and Teams for service agents — the same "no switching apps" pattern as Copilot for Sales, but for service scenarios. It also plugs into Salesforce Service Cloud, ServiceNow, and Zendesk for organisations that don't run Customer Service but want the Copilot experience. **Supervisor Copilot** rolls up sentiment monitoring across live conversations, conversation intelligence across calls and chats with keyword tracking, and Copilot-generated summaries of team performance. Licensing follows the Sales pattern: Customer Service Enterprise + Copilot for Service add-on, or standalone Copilot for Service. ## Field Service **Copilot in Field Service** summarises the work order for a technician on arrival, drafts the completion notes from the technician's spoken summary, and finds relevant knowledge articles inside the mobile app. It also helps dispatchers by pre-populating schedule suggestions and flagging at-risk bookings. The technician-side Copilot is the most impactful — technicians spend limited time in front of a keyboard, and a Copilot that turns a two-minute voice summary into a complete work order write-up saves real time per job. Licensed as part of Field Service Enterprise or as an add-on. ## Business Central Business Central was one of the first Dynamics 365 apps to ship serious Copilot features and it has kept extending them. Highlights: - **Bank reconciliation Copilot** matches statement lines to ledger entries and flags exceptions. - **Sales line suggestions** propose line items for a sales order based on the customer's history and current basket. - **Marketing text generation** drafts product descriptions from item attributes. - **Chart explanations** turn a BI chart into a written analysis paragraph. These are targeted features, not a general chat surface — they sit inside the pages where the work happens. Business Central's Copilot approach is deliberately conservative and productivity-focused, which suits the SMB customer base. Included in Business Central Essentials and Premium; no separate Copilot licence. ## Finance and Supply Chain (F&O) **F&O Copilot** is broader in scope than the CRM-side app Copilots because the workflow surface is bigger. Notable features: - **Bank reconciliation** and **vendor invoice capture** (AP automation) both use Copilot for matching and exception handling. - **Demand planning** Copilot proposes forecast overrides and explains the underlying signals. - **Warehouse optimisation** Copilot flags picking-path improvements and layout inefficiencies from the movement data. - **Financial insights** turns the general ledger data into narrative analysis for month-end review. The F&O Copilot roadmap is heavy — Microsoft ships new features every Wave — and the depth of each Copilot varies. Some are polished; some are early-stage. Track the release plans rather than assuming a feature you saw at a Microsoft event is generally available. Included in F&O licensing; no separate Copilot licence for the app-embedded features. ## Project Operations **Copilot in Project Operations** speeds up time entry (draft a week's timesheet from Teams meetings and calendar), assists with project quote configuration, and summarises project health for the weekly delivery review. Less mature than the Sales / Service Copilots but useful, particularly for reducing the friction on consultant time entry — one of the persistent adoption problems in PSA deployments. Included in Project Operations licensing. ## Microsoft 365 Copilot with Dynamics 365 plugins The general-purpose Microsoft 365 Copilot chat can query Dynamics 365 through published plugins. "Show me the top ten deals slipping this quarter" answered by Copilot chat in Teams. "What's my pipeline of open cases from customers above X in revenue" answered in the Copilot app. This is the newest surface and it's genuinely useful for executives and functional leaders who don't live in the Dynamics 365 apps themselves. Licensed as part of Microsoft 365 Copilot ($30/user/month at 2026 pricing); requires the underlying Dynamics 365 app licence for the data being queried. ## Copilot Studio agents **Copilot Studio** (the low-code agent builder) is the extensibility layer for all of the above. A custom agent can be built once and surfaced in Teams, Microsoft 365 Copilot, or the Dynamics 365 apps. Common patterns: - A **customer-service self-service agent** deflects routine cases before they hit human agents. - A **sales assistant agent** in Teams answers seller questions about a specific account by querying Dynamics 365, LinkedIn Sales Navigator, and internal SharePoint. - A **project-status agent** in Copilot chat rolls up project margin, resource load, and next milestones from Project Operations. Copilot Studio is licensed per message pack or per user, depending on the deployment model. It is the right tool when a shipped Copilot doesn't cover a specific workflow and building a custom agent is cheaper than waiting for Microsoft to ship it. ## What matters at rollout Two decisions dominate a Dynamics 365 Copilot rollout. **Which Copilots go first.** The natural sequence is: app-embedded Copilots (they're already licensed if the app is), then Copilot for Sales / Copilot for Service (biggest behaviour change but real license cost), then Microsoft 365 Copilot with Dynamics plugins (broadest reach but again real cost), then Copilot Studio custom agents (highest customisation, highest project cost). **Data readiness.** Every Copilot's quality depends on the data it can read. A Sales Copilot answering pipeline questions against a CRM full of stale opportunities gives bad answers. Cleaning Dataverse master data — closed opportunities marked closed, stale accounts archived, ownership current — is the unglamorous prerequisite that decides whether Copilot delivers value. Rush the licence rollout past this step and Copilot's reputation in the org takes the hit for CRM hygiene problems. ## The short version Every Dynamics 365 app has a Copilot; the pattern is app-embedded (bundled with the app), Copilot for Sales / Service (separately licensed, cross-CRM), and Microsoft 365 Copilot with plugins (broadest). Copilot Studio is the extensibility layer. Data readiness decides whether any of it works well. ## Where to go next The product-level detail lives in [Copilot for Sales features](https://www.solvingdynamics365.com/guides/copilot-for-sales-features), [Copilot in Business Central](https://www.solvingdynamics365.com/guides/copilot-in-business-central), and [Copilot Studio for Dynamics 365](https://www.solvingdynamics365.com/guides/copilot-studio-for-dynamics-365). For building your own agents, [building agents with Copilot Studio](https://www.solvingdynamics365.com/guides/building-agents-with-copilot-studio) and [Copilot agents vs Copilot Studio](https://www.solvingdynamics365.com/guides/copilot-agents-vs-copilot-studio) untangle the options, and [Microsoft 365 Copilot for Dynamics 365](https://www.solvingdynamics365.com/guides/microsoft-365-copilot-for-dynamics-365) covers the plugin surface. Current list prices for the seller-side product are on the [Copilot for Sales pricing page](https://www.solvingdynamics365.com/pricing/copilot-for-sales). ### Frequently asked questions **What are the three kinds of Copilot in Dynamics 365?** App-embedded Copilot features included in each app's Enterprise or Premium licence; Copilot for Sales and Copilot for Service, separately licensed products that bring CRM context into Outlook and Teams and can also connect to Salesforce; and Microsoft 365 Copilot extended with Dynamics 365 plugins to query pipeline, cases, or projects from Copilot chat. **Does Business Central charge extra for Copilot?** No. Bank reconciliation matching, sales line suggestions, marketing text generation, and chart explanations are included in Essentials and Premium with no separate Copilot licence. **How is Copilot for Sales licensed?** As part of Sales Premium, or as an add-on to Sales Enterprise. The standalone version that connects to Salesforce is a separately licensed product with its own pricing. **In what order should Copilots be rolled out?** App-embedded Copilots first (already licensed with the app), then Copilot for Sales or Service (biggest behaviour change, real licence cost), then Microsoft 365 Copilot with Dynamics plugins, then Copilot Studio custom agents for workflows nothing shipped covers. **Why does Copilot give bad answers in our CRM?** Data readiness. A Copilot reading stale opportunities, unarchived accounts, and outdated ownership produces bad summaries. Clean Dataverse master data before the licence rollout, or Copilot takes the blame for CRM hygiene problems. --- # Copilot agents vs Copilot Studio How Microsoft's agent strategy splits — Copilot Studio for building custom agents, declarative agents in Microsoft 365 Copilot, autonomous agents. Source: https://www.solvingdynamics365.com/guides/copilot-agents-vs-copilot-studio Section: Power Platform / Copilot & AI Published: 2026-05-01 Microsoft's agent strategy has multiplied entities in the last two years — **Copilot agents**, **agents in Copilot Studio**, **declarative agents**, **autonomous agents**, **Copilot for Dynamics 365** — overlapping but distinct. Untangling the taxonomy is essential for picking the right tool for a specific need. ## The umbrella term: agent Microsoft uses "agent" loosely for any AI-driven assistant that handles user requests. Underneath, the implementations vary in their building blocks, hosting model, licensing, and integration surface. ## Copilot Studio (formerly Power Virtual Agents) A low-code platform for building custom conversational agents. Origin: chatbots; current state: full agent builder with multi-channel publishing. - **Building blocks** — topics, generative answers, actions (Power Automate, custom connectors, Dataverse). - **Channels** — Teams, web, Slack, custom apps, mobile, voice via Azure Communication Services. - **Licensing** — Copilot Studio messages consumed per invocation; per-tenant or per-user packs. - **Use case** — replace IVR, embed in customer-facing portal, internal helpdesk, custom-domain agents. ## Microsoft 365 Copilot The end-user productivity agent embedded in M365 apps (Teams, Word, Excel, Outlook). Operates over the user's M365 graph data: emails, files, meetings, contacts. - **Building blocks** — proprietary; not user-extensible at the core. - **Extension points** — declarative agents and plug-ins. - **Licensing** — per-user M365 Copilot licence. - **Use case** — productivity in everyday M365 work. ## Declarative agents Defined in JSON manifests, deployed to M365 Copilot. A declarative agent extends M365 Copilot for a specific scenario: - **Custom instructions** — system prompt tailored to a domain (e.g. "You are the HR policy expert"). - **Knowledge sources** — specific files, SharePoint sites, or Microsoft Graph endpoints. - **Capabilities and tools** — restricted set of actions. - **Distribution** — through M365 admin or AppSource. Best for domain-specific copilots in M365 without building a full agent. ## Custom engine agents (custom GPTs in M365) Beyond declarative, an agent can be built with custom logic via the Microsoft 365 Agents SDK — a C#/TypeScript SDK for building agents that run on Azure and surface in M365 Copilot. ## Copilot for Dynamics 365 Pre-built agents embedded in Dynamics 365 apps: - **Sales Copilot** — opportunity summaries, email drafting, meeting prep. - **Service Copilot** — case summarisation, response drafting. - **Finance Copilot** — variance analysis, narrative generation. - **Supply Chain Copilot** — exception explanation, demand insights. These are Microsoft-built; customers configure them but don't build them from scratch. ## Autonomous agents A 2024+ category: agents that act on triggers, run continuously, and complete multi-step tasks without conversational interaction. Built in Copilot Studio with the autonomous agent profile: - **Triggers** — Dataverse events, scheduled, external API. - **Actions** — tools, Power Automate flows, knowledge searches. - **Memory** — short-term and long-term context. - **Approvals** — humans-in-the-loop at decision points. Use cases: inbound email triage, document review, supplier onboarding orchestration. **How they fit together.** - **User asks a question in Teams chat** → Microsoft 365 Copilot. If the question is HR-specific, the **HR declarative agent** answers. - **User is in Dynamics 365 Sales** → **Sales Copilot** offers summaries and drafts. - **External customer chats with us via WhatsApp** → **Copilot Studio agent** routes the conversation. - **An email arrives in support inbox at midnight** → **autonomous agent** triages, drafts a reply, and posts for human review. The architectural pattern: M365 Copilot is the productivity surface; Copilot Studio is the build-your-own surface; Dynamics Copilot is the in-app surface; autonomous is the event-driven backbone. **Common confusions.** - **"Should I build a Copilot Studio agent or a declarative agent?"** Declarative agents extend M365 Copilot's chat in M365 apps for a specific knowledge domain. Copilot Studio agents stand alone, multi-channel, often customer-facing. Different surfaces, different audiences. - **"Why are there multiple agents that overlap?"** Microsoft is iterating in public. Some categories will consolidate; others will deepen. Pick based on current capability and roadmap. - **"Can I extend Microsoft 365 Copilot itself?"** Yes, through plug-ins and declarative agents — but not at the core conversational engine level. ## Licensing complexity Each surface has different licensing: - **M365 Copilot** — per user, ~$30/month list. - **Copilot Studio** — per agent, message-pack based. - **Dynamics Copilot** — bundled with the underlying D365 app licence. - **Autonomous agents** — emerging metering (per task, per minute). Cost modelling for production use is non-trivial; involve licensing specialists early. **Common pitfalls.** - **Choosing the wrong surface.** Building a customer chatbot in M365 Copilot when Copilot Studio is the right tool; or vice versa. - **Ignoring grounding.** Agents without good knowledge sources hallucinate. - **No measurement.** Agents shipped without success metrics; nobody knows if they help. - **Over-relying on a single agent type.** Production AI strategy usually involves several surfaces; designing for one limits flexibility. ## Practical strategy For internal productivity, M365 Copilot + declarative agents. For external multi-channel conversations, Copilot Studio. For in-app workflow assistance, Dynamics Copilot. For event-driven multi-step automation, autonomous agents. Pieces compose; the architecture maps to who's interacting and through which surface. ### Frequently asked questions **When should I build a Copilot Studio agent versus a declarative agent?** Declarative agents extend Microsoft 365 Copilot's chat inside Microsoft 365 apps for a specific knowledge domain. Copilot Studio agents stand alone, publish to Teams, web, WhatsApp, voice, and custom apps, and are often customer-facing. Different surfaces, different audiences. **What is an autonomous agent?** An agent built in Copilot Studio that runs on triggers — Dataverse events, schedules, external APIs — and completes multi-step tasks without a conversation, with human approval at decision points. Inbound email triage and supplier onboarding are typical uses. **Can I extend Microsoft 365 Copilot itself?** Yes, through plug-ins and declarative agents, but not at the core conversational engine. Custom-engine agents built with the Microsoft 365 Agents SDK run on Azure and surface in Microsoft 365 Copilot. **How is each Copilot surface licensed?** Microsoft 365 Copilot per user; Copilot Studio through message packs or Copilot credits; the in-app Dynamics 365 Copilots bundled with the app licence; autonomous agents with emerging consumption metering. Model production costs early. --- # Copilot for Sales features What Microsoft Copilot for Sales does inside Outlook, Teams, and Dynamics 365 Sales — email assistance, meeting prep, summaries, and CRM updates. Source: https://www.solvingdynamics365.com/guides/copilot-for-sales-features Section: Customer Engagement / Sales Published: 2026-05-01 **Microsoft Copilot for Sales** is the AI assistant for B2B sellers — an add-on that combines the general Microsoft 365 Copilot with sales-specific skills, deployed primarily inside **Outlook**, **Teams**, and the **Dynamics 365 Sales** app. It also works with Salesforce, so customers running mixed CRM stacks get the same experience. ## In Outlook The most-used feature. Opening an email from a customer surfaces a Copilot pane with: - **Email summary** in one sentence. - **Suggested reply** drafts tuned to the customer history and the deal stage. - **Related CRM records** — the contact, account, recent opportunities, open cases, last interaction. - **One-click CRM update** — extract commitments from the email thread and write them back as activities, notes, or field updates without leaving Outlook. ## In Teams Copilot for Sales joins calls and meetings: - **Real-time tips** during a sales call — competitor mentions, customer sentiment shifts, action-item prompts. - **Post-meeting summary** delivered as a Teams message, with key takeaways, decisions, and next steps. - **Meeting recordings** auto-attached to the related opportunity in CRM. - **Customer briefings** before a meeting — recent activity, open deals, decision-makers, news. ## In Dynamics 365 Sales Copilot is embedded: - **Account summaries** in a sentence, with a recent-activity ribbon. - **Opportunity summaries** with deal health signals (engagement, momentum, sentiment). - **Email composer** that drafts customer-specific outreach from a prompt. - **Forecasting assist** that explains pipeline movement and flags risk. - **Natural-language search** across CRM data ("show me my opportunities slipping next quarter"). ## Sales call analytics Voice and chat conversations recorded in Teams or via the Sales Conversation Intelligence engine are transcribed and analysed for talk ratio, sentiment, key topics, mentions, and action items. Coaching dashboards roll the data up across the team. ## Custom skills Customers can extend Copilot for Sales with **Copilot Studio** agents that pull from the customer's own knowledge base — product wiki, pricing rules, competitor matrix — and answer seller questions inline. ## Licensing Sold as a per-user add-on. Bundled with the *Sales Premium* SKU of Dynamics 365 Sales. ## Practical reality The Outlook integration is where most users find immediate value; the call-analytics layer is where managers find it. Adoption follows training and a clean CRM — if account data is stale, Copilot's summaries look stale too. --- # Copilot in Business Central: what's actually shipped A feature-by-feature look at Copilot in Business Central — bank reconciliation, sales line suggestions, chat, analysis assist. Source: https://www.solvingdynamics365.com/guides/copilot-in-business-central Section: Business Central Published: 2026-08-31 Business Central got Copilot features earlier than most of the Microsoft stack — marketing text suggestions shipped back in 2023 — and the list has grown every release wave since. The pattern is consistent: not one big chatbot bolted on the side, but small AI assists embedded in specific tasks, each one suggestion-based and confirmed by a human before anything posts. This guide covers what has actually shipped, how the plumbing works, and where the limits are — because the marketing copy covers everything else. One framing note up front: Copilot in Business Central is **included in the licence**. There is no per-user Copilot add-on as with [Microsoft 365 Copilot](https://www.solvingdynamics365.com/guides/microsoft-365-copilot-for-dynamics-365); if you have Essentials or Premium, the features are there to switch on. That changes the adoption maths completely — the question isn't "is it worth the money" but "is it worth ten minutes of setup". ## The shipped features **Bank reconciliation assist.** The flagship, and the one covered in depth in [bank reconciliation in Business Central](https://www.solvingdynamics365.com/guides/business-central-bank-reconciliation). After the rules-based auto-matcher runs, Copilot proposes matches for the awkward residue — payments with mangled references, one payment covering several invoices, near-miss amounts and dates — and suggests G/L accounts for statement lines with no counterpart (fees, interest). Every suggestion is accepted or rejected line by line. This is the feature to lead with when demonstrating Copilot to a finance team, because it attacks a task everyone already resents. **Sales line suggestions.** On quotes and orders, Copilot turns a rough request into document lines — type or paste "the same as last month's order but 20% more of the blue ones", or attach a customer's file, and it proposes item lines with quantities matched against your item catalogue. The user reviews the proposed lines, adjusts, and inserts. For businesses taking orders by email this removes real keystrokes; for configured-product businesses with heavy pricing logic it's a starting point, not a finisher. **E-document matching.** Incoming electronic invoices get mapped to purchase order lines with Copilot proposing the matches — the same "suggest, human confirms" shape as bank reconciliation, applied to the purchase side. If you're adopting e-invoicing mandates anyway, this comes along for the ride. **Analysis assist.** Business Central's analysis mode (pivot-style tabs on any list page) accepts a natural-language request — "show sales by customer by month for this year" — and Copilot builds the analysis tab: grouping, columns, filters. The output is a normal, editable analysis tab, so this doubles as a teaching tool: users see how the thing they asked for is actually constructed. For controllers who never learned the feature, this is quietly the highest-leverage assist in the product. **Chat with Copilot.** A side-pane chat that finds records ("open unpaid invoices for Adatum"), navigates, and explains concepts and fields, with answers drawn from Business Central's documentation. It's genuinely useful as a "how do I" layer for occasional users, and considerably weaker as an analytical tool — it locates and explains; it doesn't compute across your ledger. **Marketing text suggestions.** The original: generate product descriptions from an item's attributes, in a chosen tone, for the web shop or catalogue. Narrow, works, matters mostly to retail and e-commerce users publishing item data outward. **Smaller assists** keep arriving wave by wave — suggested number series setups from a natural-language description, record summaries, field autofill — typically landing first as previews you enable per environment. Treat anything marked preview as exactly that: try it in sandbox, don't build a process on it. Two adjacent things are worth separating from this list. The older **sales and inventory forecasting** and late-payment prediction features predate Copilot branding — machine-learning extensions, useful but not conversational. And the **autonomous agents** (a sales order agent that processes incoming order emails end-to-end, with more agents following) are the next chapter: unlike everything above, they act rather than suggest, run as their own identity, and arrive with task-specific approval checkpoints. They deserve a separate evaluation with process-owner involvement, not a casual toggle — the broader agent conversation is in [Copilot agents vs Copilot Studio](https://www.solvingdynamics365.com/guides/copilot-agents-vs-copilot-studio). ## The plumbing The architecture is straightforward and worth being able to explain to a sceptical IT director: - **Grounding is your BC data, scoped to the user.** Features read the environment's data through the signed-in user's permissions. Copilot cannot surface a record the user couldn't open, and it has no cross-tenant or cross-environment reach. - **Generation runs on the Azure OpenAI Service** operated by Microsoft — not on a public consumer endpoint — and customer data and prompts are not used to train foundation models. - **Admins hold the switches.** The *Copilot & AI capabilities* page in BC toggles each feature per environment, previews are opt-in individually, and there's a data-movement consent for regions where the Azure OpenAI capacity sits in a different geography than the environment. Feature-by-feature control means you can ship bank reconciliation assist to finance without also enabling half-baked previews tenant-wide. - **It's extensible.** AL developers can build their own Copilot experiences — the platform ships a prompt-dialog page type and an Azure OpenAI module so ISVs and per-tenant extensions can offer the same suggest-review-accept pattern over custom functionality. Expect your ISV add-ons to grow Copilot features on this rail. ## Honest limits - **Suggestion quality tracks data quality.** Sales line suggestions against a catalogue full of cryptic item descriptions, or bank matching against customers who pay with no reference, will underwhelm. Copilot amplifies the state of your master data; it doesn't fix it. - **Language coverage is uneven.** Features generally work best in English first, with other languages following per feature and wave. If you run BC in a smaller language, verify each feature in it before promising anything to users. - **Chat is not a reporting tool.** Users will ask it "what was our margin last quarter" and get a record lookup or an explanation, not analysis. Set that expectation early or the whole Copilot brand takes the blame; point those questions at analysis assist or the [reporting stack](https://www.solvingdynamics365.com/guides/power-bi-for-dynamics-365) instead. - **Previews churn.** Features rename, move, and occasionally disappear between waves. Anchor training material to shipped features only. The fair overall read: Copilot in Business Central is a set of well-chosen, low-risk assists that remove tedium from real tasks, free with the licence, and individually switchable. It is not a transformation, and adopting it doesn't need a project — enable bank reconciliation assist and analysis assist, show the right two teams, and let the rest earn its way in wave by wave, tracked like any other change in the [release wave rhythm](https://www.solvingdynamics365.com/guides/business-central-release-waves). ### Frequently asked questions **Does Copilot in Business Central cost extra?** No. Copilot features in Business Central are included with Essentials and Premium licences — unlike Microsoft 365 Copilot, which is a separate paid add-on. An admin does need to enable the features per environment. **Does Copilot see data the user can't see?** No. Copilot features run in the context of the signed-in user and respect Business Central's permission sets. It also has no reach into other tenants or other companies' data. **Is Business Central data used to train the AI models?** No. Prompts and grounding data are processed by the Azure OpenAI Service under Microsoft's terms; customer data is not used to train foundation models. **Which Copilot feature in Business Central is the most useful in practice?** Bank reconciliation assist, by a wide margin, for most businesses — it targets a frequent, genuinely tedious task with clear right answers. Analysis assist is the sleeper hit for finance users who never learned to build analysis tabs by hand. --- # Copilot Studio for Dynamics 365 Building AI agents on top of Dynamics 365 with Copilot Studio — topics, knowledge sources, generative answers, and Dataverse integration. Source: https://www.solvingdynamics365.com/guides/copilot-studio-for-dynamics-365 Section: Power Platform / Copilot & AI Published: 2026-05-01 **Microsoft Copilot Studio** is the low-code platform for building AI agents — conversational and increasingly autonomous — that integrate deeply with Dynamics 365 and the rest of the Microsoft cloud. It is the successor to Power Virtual Agents, with a much heavier generative AI core. For Dynamics 365 customers, Copilot Studio is the standard way to deflect routine support, augment sales sellers, and front-end the data and processes the rest of the platform manages. ## Agents A Copilot Studio **agent** is configured with a *role and instructions* (its job and tone), one or more *knowledge sources* (Dataverse data, SharePoint sites, websites, documents), one or more *actions* (the operations it can perform via connectors), and *trigger conditions* (where it activates — Teams, the web, a Power Pages site, inside Dynamics 365). The agent uses an LLM (Azure OpenAI under the hood) to converse, reason, and decide what to do at each turn. ## Topics and generative answers Classic agent design used **topics** — structured conversation paths with named triggers and explicit dialog steps. Modern Copilot Studio combines topics with **generative answers** that synthesise responses from knowledge sources on the fly. Topics still handle critical, deterministic flows (e.g. "reset my password" with strict steps); generative answers handle the long tail of "how do I..." questions. ## Knowledge Connect Copilot Studio to: - **Dataverse tables** — query Dynamics 365 data with natural language. - **SharePoint sites** — index documents and pages. - **Public websites** — index a public domain. - **File uploads** — PDFs, Office documents, knowledge articles. - **External APIs** — through Power Platform connectors. The agent answers questions grounded in these sources, with **citations** linking back to the source for verification. ## Actions Beyond reading, agents act. Built-in actions can create cases in Customer Service, update opportunities in Sales, fetch records, post journal entries, send emails, kick off Power Automate flows. Each action is permissioned and respects the user's CRM security. ## Channels A single agent publishes to **Microsoft Teams**, **the web** (embed widget), **Power Pages portals**, **Dynamics 365 Customer Service Omnichannel**, **WhatsApp**, **SMS**, **Facebook Messenger**, and a handful of others. The same conversation logic runs everywhere. ## Hand-off Agents recognise when a question is beyond them and **hand off to a human agent** via Omnichannel for Customer Service, with the full conversation context. ## Governance Microsoft Purview integrates for content filtering, content tracking, and data loss prevention. Multi-environment ALM (dev → test → prod) is supported via solutions. ## Operating reality Start small. Pick one well-defined use case (FAQ deflection, an internal HR helper), measure deflection and customer satisfaction, and grow from there. ## Where to go next For the build itself, [building agents with Copilot Studio](https://www.solvingdynamics365.com/guides/building-agents-with-copilot-studio); for the taxonomy of Microsoft's agents, [Copilot agents vs Copilot Studio](https://www.solvingdynamics365.com/guides/copilot-agents-vs-copilot-studio). Reaching outside Microsoft is covered in [integrating agents with external APIs](https://www.solvingdynamics365.com/guides/integrating-copilot-studio-agents-with-external-apis) and [MCP servers](https://www.solvingdynamics365.com/guides/integrating-copilot-studio-with-mcp-servers). The wider Copilot picture is [Copilot across Dynamics 365](https://www.solvingdynamics365.com/guides/copilot-across-dynamics-365). ### Frequently asked questions **What is a Copilot Studio agent made of?** A role and instructions, one or more knowledge sources (Dataverse tables, SharePoint, websites, uploaded documents, external APIs through connectors), actions it may perform, and trigger conditions for where it activates. A large language model on Azure OpenAI drives the conversation and decisions. **What is the difference between topics and generative answers?** Topics are structured conversation paths with explicit steps, right for deterministic flows such as a password reset. Generative answers synthesise responses from knowledge sources on the fly and handle the long tail of how-do-I questions, with citations back to the source. **Where can a Copilot Studio agent be published?** Microsoft Teams, a web embed widget, Power Pages portals, Dynamics 365 Customer Service Omnichannel, WhatsApp, SMS, Facebook Messenger, and more — the same conversation logic runs on every channel. **Can an agent hand off to a human?** Yes. When a question exceeds it, the agent hands off through Omnichannel for Customer Service with the full conversation context, the identified topic, and any collected variables. **How should a first Copilot Studio project be scoped?** Small: one well-defined use case such as FAQ deflection or an internal HR helper, with deflection and satisfaction measured before growing. Governance through Purview and solution-based ALM across dev, test, and production is supported from the start. --- # Cost management and inventory closing in F&O How Dynamics 365 Supply Chain handles inventory costing — closing runs, recalculation, marking, and the differences from Business Central. Source: https://www.solvingdynamics365.com/guides/cost-management-and-inventory-closing-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 Where Business Central runs Adjust Cost — Item Entries as a routine, **Dynamics 365 Supply Chain Management** has a deeper, more configurable inventory costing engine centred on the **inventory closing** process. Understanding it is essential for anyone running F&O at scale. ## The cost-management module F&O's **Cost Management** workspace coordinates: - **Item models** — costing methods per item (FIFO, LIFO, Weighted Avg., Date, Standard Cost, Moving Average). - **Closing runs** — periodic recalculation of inventory costs to ensure inbound costs flow to outbound transactions. - **Adjustments** — manual corrections to specific item ledger entries. - **Inventory recalculation** — without locking inventory, recalculate cost without closing the period. - **Marking** — manually link specific outbound transactions to specific inbound layers (for serial-tracked or specific costing scenarios). - **Cost rollups** — for standard-cost items, roll up component costs to finished goods. ## Inventory closing The headline operation. **Inventory closing** is a date-bound process that: 1. Identifies all open inventory transactions up to a chosen closing date. 2. Matches outbound transactions to inbound transactions based on the item's costing method (FIFO matches earliest open inbound; LIFO matches latest; Weighted Avg. computes the moving average). 3. Posts adjustment entries to reconcile cost. 4. Locks inventory transactions before the closing date — they cannot be edited without explicit reopening. This is more powerful than BC's adjustment routine: it produces a **closed period of inventory transactions** that auditors can trust, with locked records. ## Per-item closing Closing can run for selected items only — useful when investigating discrepancies on one item without disturbing the whole inventory. ## Inventory recalculation A lighter-touch alternative that re-runs cost matching without locking transactions. Used for mid-period sanity checks or for ongoing operations where closing would be premature. ## Marking **Manual marking** lets users explicitly bind a specific outbound transaction to a specific inbound layer. The classic use case: a unique high-value purchase (a specific machine) sold to a specific customer — the user marks the sale against the specific purchase, regardless of FIFO/LIFO order. Marking overrides the standard costing logic for that pair. ## The standard-cost item model Standard cost items work differently. Each item has a configured standard; inbound and outbound post at the standard; variances post to designated variance accounts. The annual standard-cost roll updates the standards (similar to BC's standard cost worksheet but more deeply integrated with manufacturing). Closing reconciles standard inventory to actual when actual deviates substantially. ## Moving average An incremental Weighted Avg. variant where each receipt updates the moving average and outbounds post at the current moving average. Less precise than Weighted Avg. at closing but provides real-time cost visibility on every transaction. ## FIFO with date FIFO with explicit date control — combines date and FIFO order, so deliveries late but recorded earlier still match correctly. ## The GL impact Closing posts adjustment entries to: - Inventory account (asset side). - Cost of Goods Sold account (P&L side). - Variance accounts (for standard cost items). - Inventory revaluation accounts (when standards change). Period-end reconciliation between the *Inventory* GL account and the *Inventory Valuation* report should match to the penny after closing. **Common pitfalls.** - **Closing not run regularly** — inventory cost drifts; COGS becomes unreliable. - **Marking abused** — too many manual marks make audit complex. - **Standard cost variances unallocated** — large variances accumulate in variance accounts without analysis. - **Closing run during operations** — locks inventory, disrupts shipping. Schedule during quiet windows. ## Operational discipline Run inventory recalculation weekly; run inventory closing monthly (or quarterly for low-volume operations). Reconcile inventory to the GL every close. Don't let unallocated variances accumulate; investigate large ones each close. --- # Country setup and localisation in Business Central What's involved in setting up Business Central for a specific country — Microsoft's country versions, partner localisations, and the typical regional pattern. Source: https://www.solvingdynamics365.com/guides/country-setup-and-localisation-in-business-central Section: Business Central / Compliance & localisation Published: 2026-05-01 Business Central runs in dozens of countries. Each country has its own statutory and operational requirements — tax structure, VAT/sales tax rules, statutory reports, payment file formats, banking schemes, audit-trail rules, language. **Country localisations** package the country-specific functionality on top of the base BC; understanding what's localised and where the gaps are is essential before signing on to BC in any given country. ## Microsoft's country versions Microsoft directly publishes localisations for around 20 countries — including United States, Canada, United Kingdom, Germany, France, Italy, Spain, Netherlands, Belgium, Denmark, Sweden, Norway, Finland, Iceland, Australia, New Zealand, Mexico, and several others. Each Microsoft country version includes: - **VAT / sales tax engine** configured for the country's rules. - **Statutory reports** — VAT returns, intrastat, country-specific aging. - **Payment file formats** — SEPA in Europe, ACH in the US, Bacs in the UK, Autogiro in Sweden, etc. - **Bank statement import formats** — country-standard formats. - **Document layouts** — invoice templates conforming to country statutory requirements. - **Number sequences** — sometimes country-specific (e.g. continuous numbering for invoices where statute requires). - **Language translations** — country's primary language(s). Microsoft-published localisations are maintained as part of the base BC, updated with each release wave. ## Partner-published localisations For countries Microsoft doesn't directly support, **partner-published country localisations** on AppSource fill the gap. Partner localisations exist for many countries including Brazil, India, China, Russia, South Korea, Thailand, Indonesia, Malaysia, Vietnam, Turkey, Saudi Arabia, UAE, Egypt, South Africa, Argentina, Chile, Colombia, Peru, and many more. Quality varies — large established partner localisations (e.g. for Brazil with its complex tax requirements) are mature and well-maintained; smaller-country localisations may have narrower coverage. Always evaluate the localisation's feature list against statutory requirements before committing. ## Real-time invoice reporting Many countries now mandate **real-time** or **near-real-time** transmission of invoice data to tax authorities: - **Spain SII** — invoices transmitted within 4 days. - **Italy Fatturazione Elettronica (SDI)** — every B2B invoice through the SDI platform. - **Hungary RTIR** — invoices reported in real time. - **Mexico CFDI** — invoices must be issued by an authorised PAC. - **Brazil NFe** — every invoice through SEFAZ. These requirements are handled by country localisations (Microsoft- or partner-published) and may involve additional integration with country-specific government endpoints. ## E-invoicing trends The EU's **VAT in the Digital Age (ViDA)** initiative is driving mandatory e-invoicing across member states by ~2030. Watching the regulatory landscape per country is part of operating BC internationally. ## Multi-country tenants A single BC tenant can host multiple companies, each in a different country with its own localisation. The companies share the same tenant, users, extensions, and base configuration, but each company's posting rules, VAT engine, and reports respect its country localisation. This is the standard pattern for international SMBs — one BC tenant, one company per country, with each company localised. Country-specific extensions (e.g. *Brazil Localisation* by partner X) install per-tenant and apply to relevant companies. **Common gaps.** - **Country with no Microsoft or partner localisation** — typically means BC isn't the right answer for that country. Some customers run a generic country localisation and supplement with custom AL extensions for statutory needs — viable for small operations, fragile at scale. - **Country localisation behind on regulatory changes** — new tax rules sometimes lag in localisation updates. Stay close to the localisation vendor. - **Conflicting localisations** — if multiple country localisations are installed and they conflict, troubleshooting is painful. Install only what's needed. ## Operational discipline When entering a new country: 1. Verify Microsoft or trusted partner localisation exists and is currently maintained. 2. Map statutory requirements against the localisation's feature list. 3. Identify gaps; either accept (small ones), customise (medium), or reconsider BC (large). 4. Pilot before scaling. ## Where BC fits less Very complex regulatory regimes (Brazilian tax with its many layers, French chart-of-accounts statutory requirements at the highest detail) sometimes push customers to country-specialised ERPs alongside or instead of BC. Evaluate per country before committing. --- # CQRS pattern for Dynamics 365 How CQRS (Command Query Responsibility Segregation) applies to Dynamics 365 architectures — write vs read separation, projection patterns. Source: https://www.solvingdynamics365.com/guides/cqrs-pattern-for-dynamics-365 Section: Integrations / Architecture patterns Published: 2026-05-01 **Command Query Responsibility Segregation (CQRS)** separates write operations (commands) from read operations (queries). For complex domains with imbalanced read/write loads or different consistency needs, this separation enables independent optimisation. Some Dynamics 365 architectures benefit from CQRS principles, particularly for high-volume read scenarios. **The core idea.** - **Command** — change state (Create, Update, Delete). - **Query** — read state. - **Separate models** for each. - **Read model** projected from write model. The separation enables specialisation; read-optimised vs write-optimised. **Why separate.** - **Different scale needs** — reads typically more numerous than writes. - **Different schemas** — denormalised reads, normalised writes. - **Different consistency** — eventual consistency for reads acceptable. - **Different security** — read access broader than write. The asymmetry is fundamental; CQRS exposes it as architecture. **In Dynamics 365 context.** - **Write side** — Dataverse / F&O — the system of record. - **Read side** — replicated to optimised store. - **Projection** — translates write events to read updates. Examples: - Dataverse + Power BI semantic model — semantic model is read-optimised projection. - F&O + data lake — lake is read-optimised projection. - Dataverse + Azure Search — search index is read-optimised. **Where CQRS clearly helps.** - **Analytical workloads** — heavy reads, infrequent writes; warehouse pattern. - **Search workloads** — search index optimised for queries. - **Reporting** — read-only views without taxing operational system. - **Customer-facing portals** — high read volume from many users. - **Cross-system aggregation** — combine sources into queryable view. **Where CQRS adds unnecessary complexity.** - **Simple CRUD** — no benefit from separation. - **Tight consistency requirements** — eventual consistency unacceptable. - **Low scale** — overhead exceeds benefit. CQRS isn't universally appropriate; assess fit. **Projection mechanisms.** - **Synapse Link / Fabric Link** — Dataverse / F&O to lake. - **Power BI semantic models** — Dataverse to BI. - **Custom replication** — for specific destinations. - **Cosmos DB Change Feed + processor** — for high-throughput scenarios. Each has trade-offs in latency, consistency, cost. ## Eventual consistency A defining characteristic: - Write to source. - Projection happens asynchronously. - Read sees updated value some time later. For most analytics, seconds-to-minutes lag is fine. For real-time requirements, less so. **Write-side model.** - Optimised for transactional integrity. - Normalised schema. - Strong consistency. - Business logic enforced. This is Dataverse / F&O standard model. **Read-side model.** - Optimised for query patterns. - Denormalised structure. - Pre-computed aggregations. - Multiple representations (per user role, per use case). Often columnar storage; star schema; materialised views. ## Multiple read models From one write source: - **Operational read** — recent transactions. - **Analytical read** — historical aggregates. - **Search read** — text-searchable. - **Geo read** — spatial queries. Each tuned to its purpose. **Updates and consistency.** - **Strict consistency** — read sees write immediately. Hard distributed. - **Eventual consistency** — read sees write eventually. - **Read-your-own-writes** — user sees their own changes. - **Causal consistency** — if A caused B, B not seen before A. Most CQRS systems offer eventual; design around it. **Conflict handling.** - Multiple writers; same data updated. - Write side handles via optimistic concurrency or pessimistic locks. - Projection handles via "last write wins" or merge logic. Cross-system updates particularly vulnerable; saga patterns help. ## Event sourcing + CQRS Often combined: - Events as the source of truth (event sourcing). - Projections build query models from events. - Replay rebuilds projections. Powerful but heavy; reserved for specific scenarios. ## Dynamics 365 + Fabric pattern Modern example: - Dataverse and F&O are write-side. - Fabric Lakehouse / Warehouse are read-side. - Synapse / Fabric Link provides projection. - Power BI queries Fabric. This is CQRS in practice; standard architecture for analytics. ## Cache as read model Simpler form: - Frequently-queried Dataverse data cached. - Cache invalidated on changes. - Reads hit cache; writes go to source. Lightweight CQRS for specific scenarios. **Common pitfalls.** - **Over-engineering.** CQRS where simpler approach sufficed. - **No clear projection strategy.** Read side built ad-hoc. - **Consistency assumptions wrong.** Code assumes strict; gets eventual. - **Projection lag too long.** Reads stale beyond tolerance. - **Schema drift.** Write and read models diverge. - **No monitoring of projection health.** Lag invisible until users complain. **Best practices.** - **Use case-driven.** Apply CQRS where pattern fits, not because it's fashionable. - **Define consistency model.** Be explicit about read freshness. - **Schema discipline** in both models. - **Monitor projection latency.** - **Recovery / rebuild capability** — rebuild read from write if needed. **Performance implications.** - **Write performance** — slightly slower due to projection trigger. - **Read performance** — significantly faster, well-tuned. - **Storage cost** — duplicated data. Net positive for read-heavy workloads; may be net negative for write-heavy. **Operational implications.** - **More moving parts** — more to monitor. - **More dependencies** — projection can fail. - **More expertise needed** — more patterns to understand. Operational cost real; weigh against benefit. ## Strategic positioning CQRS is a powerful pattern for the right problem. Dynamics 365 implementations regularly use CQRS principles without naming it — Synapse Link, semantic models, search indexes are all read-side projections. Naming the pattern enables intentional design. For architects: - Recognise CQRS opportunities (read-heavy, multi-consumer patterns). - Choose appropriate projection technology. - Define consistency expectations. - Plan operational support. For greenfield analytics or customer-facing query workloads, CQRS principles produce better architectures. For simple operational systems, traditional CRUD remains right. Match pattern to problem. --- # Credit and collections management in Dynamics 365 Finance How F&O's Credit and Collections module handles customer credit risk, dunning, payment-promise tracking, and collections workflow. Source: https://www.solvingdynamics365.com/guides/credit-and-collections-management-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 For mid-to-large B2B operations, customer credit management is operationally significant — granting too much credit risks bad debt; granting too little blocks sales. Dynamics 365 Finance ships a dedicated **Credit and Collections** module to structure both sides: credit-limit management before sales happen, and active collections after invoices age. ## The credit-management side Every customer carries: - **Credit limit** — the maximum exposure F&O will permit before warning or blocking. - **Credit limit type** — Balance (open AR), Balance + Open Orders, custom calculations. - **Credit hold reason** — current credit status with reason code. - **Risk score** — assigned manually or from external credit-bureau integration. - **Insurance coverage** — for customers with trade-credit insurance. - **Payment history** — average days past due, longest delinquency, dispute rate. When a sales order is created or released, F&O evaluates the customer's exposure against the limit. Configurable rules can: - **Block** the order from posting until credit is approved. - **Warn** the user but allow posting. - **Auto-release** if exposure is under threshold. - **Route to credit manager** for review with one-click approve / decline. ## Credit limit adjustments Manual adjustments to credit limits are tracked with effective dates, approver, and reason — a compliance-friendly audit trail. Workflow can route increases through approval (credit manager, CFO depending on size). ## Trade-credit insurance F&O can integrate trade-credit-insurance coverage limits — Atradius, Coface, Euler Hermes-style policies — so that insured-customer exposure under the insurance limit is treated differently from uninsured. ## The collections side **Collections** organises post-due-date follow-up: - **Collections agent** — each customer can be assigned to a collections specialist. - **Aging snapshot** — daily or weekly snapshot of customer balances by aging bucket. - **Collection cases** — formal case records for customers in collection, with status, notes, activities, contacts. - **Payment promises** — recorded commitments by the customer to pay by a date. Aging routines respect promised dates; broken promises escalate. - **Activities** — phone calls, emails, letters, dispute investigations. - **Disputes** — formal customer disputes about invoiced amounts, tracked separately from genuinely overdue. ## Dunning F&O's **dunning** (the formal escalation series) extends beyond BC's reminders: - **Multi-level dunning** — formal letters at each escalation, with configurable text per level. - **Combined for the customer** — one dunning letter per customer covering all their overdue invoices. - **Interest calculation** — overdue interest computed and optionally posted. - **Legal handover** — final level can trigger handover to external collections agencies. - **Dunning in customer's language** — multi-language letter templates. ## Workspace and operational view The **Collections workspace** gives collections agents: - A list of their assigned customers ranked by exposure or aging. - One-click drill-down to customer details. - Activity capture inline (call notes, email logs). - Payment-promise tracking. - Aging view per customer with click-through to specific invoices. ## Dispute management **Disputes** track customer-reported issues with specific invoices: - Invoice line(s) under dispute. - Reason and explanation. - Assigned investigator. - Status (Open, Resolved, Credit Issued, Customer Withdrew). - Resolution amount. Disputed amounts are excluded from regular collections work — collections agents chase undisputed balances; dispute investigators resolve disputes; resolved disputes go back into collections or close with a credit memo. **Reporting.** - **Days Sales Outstanding (DSO)** — overall and per customer segment. - **Aging summary and detail** — across customers, agents, regions. - **Payment promise performance** — kept vs broken promises by customer. - **Collections agent dashboards** — current portfolio, recent activities, recovery rate. - **Bad-debt and write-off analysis**. **Power BI templates** ship with the module for deeper analytics. ## Integration Credit and collections integrate with Sales — pipeline opportunities reference customer credit status; customer credit holds visible in CRM. Customer Service cases linked to disputed invoices give context. ## Where it fits and where it doesn't F&O's collections module is enterprise-grade — substantially deeper than BC's reminder mechanism. For SMBs on BC, BC's reminders plus a collections ISV add-on (Cashbook, Continia Collections) is typically right-sized. For enterprise volume and complex collections operations, F&O's built-in is the strong default. ## Operational reality Collections discipline drives cash flow more than any other operational lever in many businesses. Configure thoughtfully; staff the function appropriately; measure relentlessly. --- # Credit card handling in Business Central How Business Central can integrate credit card payments — through partner connectors, the payment service framework, and the AP-side expense card workflow. Source: https://www.solvingdynamics365.com/guides/credit-card-handling-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 Business Central does not natively process credit card payments end-to-end — there's no built-in PCI-compliant card vault, gateway, or settlement engine. Instead, BC provides a **payment services** framework and a set of integration patterns that let partners and ISVs wire BC into established gateways. Understanding what BC does (orchestrate) vs what gateways do (process) is the first step. **Three contexts for "credit card" in BC.** 1. **Customer payment on sales invoice** — a customer pays an invoice by card. 2. **Customer payment at point of sale** — used in BC Retail / LS Retail or Dynamics 365 Commerce, not core BC. 3. **Vendor expenses on a corporate card** — AP-side workflow for capturing card statements. Each has its own pattern. ## Customer card payments — the payment services framework BC includes a **Payment Services** entity. Out of the box, the **PayPal Payments Standard** service is bundled; partners or ISVs add Stripe, Worldpay, Authorize.Net, Adyen integrations. The pattern: 1. The payment service is enabled and configured (account credentials). 2. Sales invoices and quotes include a "Pay Now" link that routes the customer to the gateway's hosted page. 3. Customer pays at the gateway; the gateway charges the card. 4. Payment confirmation either flows back into BC via webhook (auto-applies cash to invoice) or is reconciled manually based on the bank deposit. PCI scope stays at the gateway; BC never holds card numbers. **Stripe, Adyen, Authorize.Net etc.** Each ISV connector follows a similar pattern but with different UX: - A field on the customer card stores the gateway's customer reference (token). - Recurring billing scenarios charge the stored token without re-collecting card details. - Webhook handlers post payment events into BC as customer ledger entries. For subscription billing, an extension like **Continia OPplus** or **Microsoft Subscription Billing** layers recurring billing logic on top of the gateway connector. ## Credit card surcharging Some markets allow surcharges (typically 1.5–3%) added at checkout. The connector or a custom extension adds a surcharge line to the invoice or a fee G/L entry on the payment. Compliance varies by jurisdiction; check local rules before turning on surcharging. ## The AP side — corporate card statements Many companies issue corporate cards (Amex, Visa) to employees and need to record card transactions: - The employee swipes the card; the merchant processes; the issuing bank statement arrives monthly. - Statement lines need to land in BC as expenses with G/L coding, tax handling, and approval. BC doesn't auto-import card statements natively. Options: - **Continia Expense Management** — AppSource extension that pulls card feeds, captures receipts via mobile app, and posts to BC. - **Microsoft Expense Management** (part of Dynamics 365 Project Operations or F&O) — broader feature set, integrates with BC via dual-write or custom integration. - **Manual import** — the bank statement Excel/PDF, parsed into a configuration package or general journal. ## Bank Account vs Vendor for the card account Two modelling choices for corporate card balances: - **Bank Account** — the card is treated like a negative-balance bank account. Daily charges reduce the account; monthly payment debits the account back to zero. - **Vendor** — the issuer (Amex, Bank) is a vendor; each statement is an invoice that's then paid. The vendor approach is more common because the monthly settlement is a single AP payment with a clear due date and discount window; the bank approach maps better to corporate cards used by treasury. ## Tax handling Card receipts may carry VAT or sales tax that needs proper capture. The expense management extension handles VAT extraction; manual workflows risk lost VAT recovery. EU operations with significant card spend should automate VAT handling for compliance and recovery. ## Reconciliation Reconciling the card statement against expense entries is essential: - Charges captured but missing receipts → chase the employee. - Charges on statement not captured → missed expense, journal correction. - Captured expense not on statement → likely declined or pending; flag for review. A reconciliation report comparing statement total to captured expenses is the monthly control. **Common pitfalls.** - **PCI shortcuts.** Storing card numbers in BC custom fields is a critical breach. Always use tokenisation at the gateway. - **Refunds not handled.** Refunds need negative payment lines linked to original; without the link, customer balance is wrong. - **No webhook validation.** Gateways send webhooks for charge events; without signature validation, replays or spoofed events cause data corruption. - **Missing surcharge G/L mapping.** Surcharges accumulate without clear posting; reconciliation fails. - **Employee onboarding gaps.** A new employee with a new card needs system setup; without it, expenses pile up uncategorised. ## Choosing the integration For B2B SaaS billing or service businesses billing on invoice, a Stripe or Adyen connector is sufficient. For higher-volume retail, BC Retail or D365 Commerce. For deeply integrated expense management with cards, the Continia or D365 Expense Management approach. --- # Crew jobs and multi-resource bookings in Field Service How Dynamics 365 Field Service handles work that requires more than one technician — crews, requirement groups, and coordinated scheduling. Source: https://www.solvingdynamics365.com/guides/crew-jobs-in-field-service Section: Customer Engagement / Field Service Published: 2026-05-01 A lot of field service work needs more than one person — a lift installation needs two technicians plus an apprentice; a large HVAC job needs a lead engineer and an assistant; a complex utility repair needs a crew of four. Dynamics 365 Field Service models this through **multi-resource requirements** that bind multiple resources to a single work order with coordinated scheduling. ## The requirement model A work order's resource needs are expressed through **resource requirements**. For multi-resource work, several patterns are available: - **Multiple individual requirements.** The work order has one requirement per role (one Engineer, one Apprentice). Each requirement schedules independently — both must be on site simultaneously, which the scheduler enforces. - **Requirement group.** A defined *group* of requirements that must be filled together — the lead-and-assistant pair, for example. The group is treated atomically; cancelling one cancels the linkage. - **Crew.** A pre-defined **crew** of resources that work together regularly. Booking a crew schedules every member at once with one booking action. ## Crews A **crew** is a Dataverse record representing a named team: - **Crew name** — Crew Alpha, Crew Beta, etc. - **Lead** — designated lead resource. - **Members** — other resources in the crew. - **Crew strategy** — Manage Lead Only (only the lead is scheduled, others ride along), Manage As Crew (all members are scheduled, their availability checked). Crews are useful when the same group of people work together day after day — common in construction, utilities, multi-tech installs. Less useful for ad-hoc partnerships that vary per job. ## Synchronised scheduling The scheduler ensures multi-resource bookings stay synchronised: - All resources are at the customer site at the same time. - If one resource becomes unavailable (sickness), the whole booking is re-scheduled or one substitute is found. - Travel time is computed per resource individually; the scheduler picks a common arrival window. ## Skill mixing Multi-resource requirements often combine *different* skills — the lead has Senior HVAC certification; the assistant has only Apprentice certification. Each resource matched to its requirement honours the skill requirement. The scheduler picks valid combinations. ## Booking representation On the schedule board, multi-resource bookings show as linked time blocks across each resource's row — same start time, same duration, same customer location. Visual cues highlight that the bookings are part of a group. ## Mobile experience Each resource in a multi-resource booking sees their own booking on their mobile app, with notes that mark it as a crew job (lead vs assistant role). Time recording is per-resource; some organisations track only the lead's time and assume others match. ## Customer experience The customer sees one arrival window, one job, one invoice — not multiple. The customer-facing communications come from the lead resource or the dispatcher. ## Cost and billing Each resource's time posts to the job individually with their cost rate; billing can sum the total or charge a single flat rate per the customer's contract. Lead-vs-assistant pricing tiers are configurable. **Common pitfalls.** - **Crew composition that changes daily** — modelled as a crew, becomes a maintenance burden. Use individual multi-resource requirements instead. - **One missing member doesn't trigger rescheduling** — the whole booking proceeds with reduced staff, leading to unsafe or incomplete work. Configure the scheduler to enforce all-or-nothing on crew jobs where safety matters. - **Cost not distributed correctly** — all hours posting to the lead, missing the apprentice's time. Validate posting setup. ## Operational reality Multi-resource scheduling is materially more complex than single-resource. Pilot with a single crew type before rolling out broadly; expect dispatcher training to take longer than expected. --- # Currencies and foreign exchange in Business Central How Business Central handles multi-currency — local vs additional reporting currency, exchange rate sources, revaluation, and rounding. Source: https://www.solvingdynamics365.com/guides/business-central-currencies-and-fx Section: Business Central / Finance & accounting Published: 2026-05-01 Updated: 2026-08-25 Business Central handles multi-currency natively, and the patterns that hold for one foreign currency hold for fifty. The key is to understand which currency is which. ## Local currency (LCY) Every company has a single **local currency** — the currency of its statutory financial statements. The GL is always posted in LCY. Transactions in foreign currencies are converted to LCY at the transaction date's exchange rate and the LCY amount is what the trial balance shows. ## Foreign currency Customers, vendors, and bank accounts can be assigned a default **foreign currency**. Documents inherit it. Each posted transaction stores both the foreign currency amount and the LCY-equivalent, so reports can run either way. ## Additional reporting currency (ACY) A company can nominate one **additional reporting currency** — typically the parent group's currency. Every posted GL entry is then *also* recorded in ACY, using either the daily rate or an average, so a Swedish subsidiary posting in SEK can produce parallel financial reports in EUR or USD without consolidation. ## Exchange rates Rates are maintained in the **Currency Exchange Rates** table — manually or imported via a service. Microsoft ships a built-in integration to a public **ECB** feed; partners offer commercial feeds (OANDA, central bank APIs) on AppSource. Each rate has a starting date so historical postings re-translate consistently. ## Revaluation Period-end FX revaluation is run as a batch routine on customer, vendor, and bank ledger entries, producing unrealized gain/loss postings to nominated GL accounts. Realized FX is posted automatically when foreign-currency invoices are settled by foreign-currency payments at a different rate. ## Rounding Currency cards configure rounding precision and method (Nearest, Up, Down) per currency, plus invoice-level rounding for cash-paying currencies and dust adjustments on multi-line foreign-currency invoices. ## Sales and purchase pricing Item price lists can be defined per currency; conversion at posting is optional or driven by a configured rate. ## Limits Business Central does not include a treasury management module. Hedging, FX forwards, and netting beyond simple intercompany are typically delivered by an ISV add-on or — for organisations with serious treasury complexity — a dedicated treasury system integrated to BC. --- # Custom actions in Dataverse How Dataverse custom actions expose named operations as callable messages — designed for integration, reusable, callable from many surfaces. Source: https://www.solvingdynamics365.com/guides/custom-actions-in-dataverse Section: Customer Engagement / Dataverse platform Published: 2026-07-12 Beyond standard CRUD operations (Create, Read, Update, Delete), Dataverse supports **custom actions** — named operations the maker defines that encapsulate business logic and become callable through the Web API, plug-ins, JavaScript, Power Automate flows, and other surfaces. Custom actions are the bridge between low-code configuration and clean integration surfaces. ## What a custom action is A **custom action** is a Dataverse-defined named operation: - Has a **name** (e.g. `CalculateCustomerHealthScore`, `ApproveExpense`, `MergeOpportunities`). - Has **input parameters** — typed inputs the caller supplies. - Has **output parameters** — typed outputs the action returns. - Has a **definition** — what the action does (typically a workflow or plug-in implementing the logic). The action becomes a callable message in Dataverse, addressable through the Web API and other invocation surfaces. ## Creating a custom action Through the maker portal: 1. Create a new process; choose **Action** as the category. 2. Define input parameters and output parameters with types. 3. Build the workflow steps that implement the logic — typical step types: query records, update records, send emails, call other actions, set output parameters. 4. Activate. Alternatively, custom actions can be implemented in code: - Register a plug-in against the custom action's message. - The plug-in receives the input parameters, performs the logic, sets the output parameters. **Calling a custom action.** - **From the Web API**: `POST /api/data/v9.2/CalculateCustomerHealthScore` with input parameters in the JSON body. Returns the output as JSON. - **From JavaScript on a form**: `Xrm.WebApi.execute(...)` or `Xrm.Utility.invokeProcessAction(...)`. - **From Power Automate**: the Dataverse connector exposes custom actions as callable steps; the flow designer picks the action from a list and provides inputs. - **From a plug-in**: invoke the action through the `IOrganizationService.Execute()` method. - **From X++ in F&O integration scenarios**: through the Dataverse SDK. **Use cases.** - **Encapsulate complex business operations.** "Approve Expense" might involve checking the manager's authorisation limit, deducting from the budget, creating an approval record, sending a notification, and updating the expense status — five operations in one transactional unit. The custom action wraps them; callers just call "Approve Expense". - **Provide stable APIs.** Custom actions decouple consumers from internal implementation. External integrations can call "MergeDuplicateAccounts" without knowing the dozen steps inside; if you refactor the implementation, callers don't need to change. - **Reusable logic.** A custom action callable from JavaScript on the form, from a Power Automate flow, from a plug-in, and from an external integration — write once, use many times. - **Action without a record context.** "Recalculate All Account Scores" is a global operation, not tied to a single record's CRUD. Custom actions support global scope. **Bound vs unbound actions.** - **Bound action** — associated with a specific table; called on a specific record. "Approve" bound to Expense means you call `POST /api/data/v9.2/expenses({id})/Approve` — the action operates on that specific expense. - **Unbound action** — not tied to a specific record; called on the table level or globally. "GenerateMonthlyReport" doesn't operate on a single record. Each has appropriate use cases. ## Input and output parameter types Custom actions support: - **Primitive types** — string, integer, decimal, boolean, datetime. - **Entity references** — pointers to other records (Lookup). - **Entity collections** — sets of records. - **OptionSetValue** — choice values. - **Money** — currency-typed values. Output parameters work the same way. ## Transactional behaviour Custom actions implemented as synchronous plug-ins or synchronous workflows run inside the originating transaction. Errors roll back the operation. Async actions run after the transaction; errors don't roll back. **Limits.** - **Custom action complexity** is bounded — very large operations may need to be split into multiple actions. - **Power Automate's custom-action support** has occasionally lagged the underlying capability; verify per scenario. - **Custom-action versioning** — changing inputs / outputs is a breaking change for callers. Treat as API contract. **Common pitfalls.** - **Building custom actions for trivial CRUD** — overhead exceeds benefit; standard Web API CRUD is fine. - **Custom action with no clear contract** — confusing for callers; document inputs and outputs. - **Synchronous custom actions doing slow work** — UI freezes. - **Async custom actions where sync was needed** — transaction semantics don't match intent. ## Operational reality Custom actions are a powerful integration tool. Build them deliberately for genuine business operations that benefit from encapsulation and reusability. Document the contracts. Treat them as APIs. --- # Custom connectors in the Power Platform How to build custom connectors for Power Apps, Power Automate, and Copilot Studio — OpenAPI definitions, authentication, certification. Source: https://www.solvingdynamics365.com/guides/custom-connectors-in-power-platform Section: Power Platform / Custom development Published: 2026-05-01 **Custom connectors** in the Power Platform let you call any HTTP API from Power Apps, Power Automate, and Copilot Studio as if it were a first-party connector. They're how customers and ISVs extend the platform's connector library beyond the hundreds Microsoft ships, and they're the right answer when no out-of-the-box connector exists for the API you need to call. **Anatomy of a custom connector.** - **General info** — name, description, icon, the API host URL. - **Security** — authentication scheme (No auth, Basic, API Key, OAuth 2.0, Microsoft Entra ID). - **Definition** — operations (HTTP verbs and paths), parameters, request/response schemas. - **Code** — optional inline C#-like code (custom **policy templates** or **Liquid code**) to transform requests or responses on the fly. **Three ways to create one.** 1. **From an OpenAPI / Swagger file.** Import the API's OpenAPI definition and the connector is generated automatically. The cleanest path when the source API has a maintained OpenAPI spec. 2. **From a Postman collection.** Import a Postman collection — Power Platform converts it into a connector definition. 3. **From blank.** Define operations one at a time in the custom connector designer. Useful for small APIs without a published spec. **Authentication patterns.** - **No auth** — public APIs only; rare in real business use. - **Basic** — username + password sent in the header. Acceptable for legacy integrations, not for new ones. - **API key** — a single token passed in a header or query parameter. Common. - **OAuth 2.0** — the modern path; supports any OAuth-compliant identity provider. Microsoft Entra ID, Auth0, Okta, Google, Salesforce, etc. - **Microsoft Entra ID** — pre-configured OAuth 2.0 against Entra for service-to-service or delegated calls. ## Throughput and limits Custom connectors share the same Power Platform throttling: per-user per-minute call limits, per-environment limits, and per-tenant aggregate limits. APIs called from custom connectors don't bypass platform throttling. ## Definition cleanliness Spend time on the connector definition. Well-named operations, parameters with examples, response schemas that match actual returns — they're the difference between a connector users love and one that's a constant support burden. Add summaries and descriptions to every operation, parameter, and schema field; they appear in the makers' help. ## Sharing Custom connectors live inside a Power Platform environment. They can be: - **Personal** to one maker (the default when created). - **Shared with users** of the same environment. - **Exported** in a solution and imported to other environments. - **Submitted for certification** to be published in the public connector library, available to all Power Platform users globally — the right path for ISVs whose APIs deserve broad reach. ## ISV-published certified connectors ISVs whose APIs are widely used (Sana Commerce, Continia, Lasernet, others in the BC ecosystem) publish certified connectors that show up in the connector picker for every Power Platform user. The certification process is documented; it includes review for quality, security, and documentation. ## Operational reality Custom connectors are easy to start and surprisingly easy to bork — version drift between the connector definition and the source API breaks flows silently. Treat them as code: version-control the OpenAPI spec, regenerate the connector on each API version, test in dev before promoting. --- # Custom PCF controls vs embedded canvas apps in model-driven forms Two ways to put custom UI on a Dynamics 365 form — a Power Apps component framework control or an embedded canvas app — and how to choose based on data access. Source: https://www.solvingdynamics365.com/guides/integrating-pcf-controls-vs-embedded-canvas-apps Section: Integrations / Architecture patterns Published: 2026-09-02 A model-driven form is a fine thing until someone wants a map, a drag-and-drop scheduler, a visual configurator, a signature pad, or a pane that pulls live data from a system outside Dataverse. Then you need custom UI inside the form, and Power Platform gives you two very different tools for it: a Power Apps component framework (PCF) control, which is code that replaces or extends a field or a grid, or an embedded canvas app, which is a whole low-code app rendered inside a form section. They overlap enough that projects pick the wrong one regularly. ## What each actually is A **PCF control** is a TypeScript component built with the PCF tooling, packaged in a solution, and bound to a field, a dataset, or a subgrid on the form. It receives its data through a context object the platform provides, renders with whatever framework you choose (React is the common one), and writes values back through the same context. It is a first-class part of the form: it resizes with it, respects the form's read-only state, and behaves the same on web and mobile. See [PCF controls in Power Apps](https://www.solvingdynamics365.com/guides/pcf-controls-in-power-apps). An **embedded canvas app** is an ordinary canvas app that is placed on a model-driven form and receives the current record as context through the ModelDrivenFormIntegration control. It is built in the canvas designer with Power Fx, uses connectors for data, and lives in the same solution as the form. It runs in an iframe within the form section. ## Data access is the first fork A PCF control bound to a field sees that field. A dataset PCF control sees the rows of a view or subgrid. Beyond that, it can call the Dataverse Web API through the context, and it can call external endpoints, but every external call is code you write and authenticate yourself. An embedded canvas app has the full connector library: Dataverse, SharePoint, SQL, Office 365, and hundreds of others, with authentication handled by the platform. If the custom UI needs to pull from three external systems, the canvas app has them wired in an afternoon. So: data that is on the form or in Dataverse points to PCF; data scattered across connectors points to canvas. ## Performance and fidelity PCF controls load as part of the form and feel native. A well-built one is indistinguishable from a platform control. They work in offline mode on the mobile app when built for it, and they respect the form's theming and accessibility conventions if the developer does. Embedded canvas apps add an iframe, a separate app load, and a visibly different rendering surface. On a fast connection with a small app the delay is a second or two; on a slow one, or with an app that has grown, users notice. They do not work offline in the model-driven mobile app. Layout is fixed-size within the form section, and making a canvas app look like it belongs on the form takes deliberate effort. For anything the user sees on every record load, PCF. For something opened deliberately, such as a side panel or a tool the user reaches for occasionally, canvas is acceptable. ## Who builds and maintains it PCF is a developer artefact: Node tooling, TypeScript, a build pipeline, unit tests if the team is disciplined. When the developer leaves, the next one needs the same skills. Updating the control means rebuilding and reimporting the solution. An embedded canvas app is a maker artefact. A functional consultant or a capable business user can adjust the layout, add a connector, or change a formula without a build. That is a real advantage in organisations without a permanent development team, and a real risk in organisations without governance, because the app can drift far from what was tested. ## Licensing A PCF control that only uses Dataverse and the form's context is covered by the user's Dynamics 365 or Power Apps licence. A PCF control that calls premium external services does not change the licence position by itself. An embedded canvas app that uses premium connectors requires the user to hold a licence that covers them, which Dynamics 365 enterprise licences generally do, but check; a canvas app using a premium connector for users on a Team Member licence is a common surprise. ## Where each is clearly right PCF: replacing a field's editor (a rich text control, a colour picker, a rating), rendering a subgrid differently (a Kanban, a timeline, a map of records), anything on the main form that must be fast and must work offline, and controls you intend to reuse across many forms and tables. Embedded canvas app: a self-contained tool that pulls from external connectors (a document checklist from SharePoint, a pricing lookup from an external SQL database), a guided data-entry wizard that would be awkward as form logic, and prototypes that need to exist by Friday. ## Where each is clearly wrong A PCF control that reimplements a whole application in one field. Nobody wants to maintain that. An embedded canvas app on the main tab of the most-used form, loading on every record open, with a dozen connectors. Users will complain within the week. ## What breaks in practice PCF controls built against an old version of the framework that stop working after a platform update; keep the tooling current. Canvas apps embedded on forms that were shared with the wrong audience so half the users see an error. Either type that hard-codes environment-specific URLs; use environment variables. ## Stability verdict Both are mature and both are supported. PCF is the more durable investment for anything central to the user experience. Embedded canvas apps are the faster path and a reasonable permanent answer for peripheral tools. Read [canvas apps vs model-driven apps](https://www.solvingdynamics365.com/guides/canvas-apps-vs-model-driven-apps) if the real question is whether the whole app should have been canvas to begin with. ### Frequently asked questions **What is the difference between a PCF control and an embedded canvas app?** A PCF control is TypeScript code bound to a field, dataset, or subgrid that renders natively in the form, resizes with it, and works offline. An embedded canvas app is a full low-code app in an iframe on a form section, receiving the current record through the ModelDrivenFormIntegration control. **Which one should I use for data from external systems?** The canvas app. It has the full connector library with platform-handled authentication. A PCF control can call external endpoints, but every call is code you write and authenticate yourself. **Which performs better?** PCF. It loads with the form and feels native. An embedded canvas app adds an iframe and a separate app load, does not work offline in the model-driven mobile app, and gets slower as it grows — keep it off the main tab of the most-used form. **Are there licensing differences?** A PCF control using Dataverse and form context is covered by the user's licence. An embedded canvas app using premium connectors requires a licence that covers them — Team Member users hitting a premium connector is a common surprise. --- # Custom services and OData endpoints in F&O How to expose Dynamics 365 Finance / SCM functionality to external systems — custom services in X++, OData endpoints from data entities. Source: https://www.solvingdynamics365.com/guides/custom-services-and-odata-in-f-and-o Section: Finance & SCM / AL & X++ development Published: 2026-06-12 Dynamics 365 Finance and Supply Chain integrates with external systems through several API surfaces. Two are particularly important for custom integration work: **custom services** (developer-built X++ services that expose specific operations) and **OData endpoints** (automatic REST endpoints generated from data entities). Knowing which to use for which scenario matters. **OData endpoints from data entities.** Every **data entity** in F&O — and most standard entities ship with the platform — is automatically exposed as an OData v4 endpoint: ``` https://.dynamics.com/data/Customers https://.dynamics.com/data/SalesOrderHeaders https://.dynamics.com/data/PurchInvoiceLines ``` Standard OData semantics apply — `$filter`, `$select`, `$expand`, `$orderby`, `$top`, `$skip`, with full CRUD operations via GET / POST / PATCH / DELETE. **Strengths:** - **Zero developer work** beyond enabling entities — generated automatically. - **Standard OData** — broad tool support. - **Documented** — the OData metadata is queryable. - **Versioned** — data entities have versions; new versions add fields without breaking old consumers. **Weaknesses:** - **CRUD-focused** — fine for "create a sales order", less natural for "run a specific business operation". - **Side-effect operations** are awkward — confirming an order, posting a journal, releasing a production order don't map cleanly to PATCH semantics. - **Performance** — large bulk operations through OData are slower than equivalent custom services. **Custom services.** A **custom service** in F&O is a developer-built X++ service that exposes specific operations. The pattern: 1. Define a **service contract** — a class with `[DataContract]`-marked methods defining the operation's inputs. 2. Define a **service implementation** — the X++ class that executes the logic. 3. Define a **service group** — a deployment unit grouping related services. 4. Deploy the service group — F&O exposes the services at endpoint URLs. The result: operations like `PostSalesInvoice`, `ReleaseProductionOrder`, `CalculateCustomerBalance` can be called from external systems as HTTP / SOAP / OData-style endpoints. Inputs are typed; outputs are typed; F&O handles authentication, serialisation, and error responses. **Strengths:** - **Tailored to business operations** — natural for action-oriented integrations. - **Encapsulation** — internal logic is wrapped; external callers don't need to understand the internal data model. - **Performance** — direct X++ execution; can be optimised for specific scenarios. - **Atomic transactions** — multi-step operations run inside a single F&O transaction. **Weaknesses:** - **Developer effort** — must be written in X++ and deployed. - **Versioning discipline** — service contracts evolve; consumers must adapt. - **Less discoverable** than OData metadata. **Choosing.** - **Read-heavy or simple CRUD** → OData endpoints from data entities. - **Business-operation invocation** (post, release, approve, calculate) → custom services. - **High-volume bulk operations** → custom services with batch input. - **Reporting and analytics extraction** → OData (or better: data lake / Synapse Link). ## Authentication Both surfaces authenticate via **Microsoft Entra ID** OAuth 2.0 — typically service-principal authentication for system-to-system calls. The same Entra app registration grants access to both OData and custom services. ## Throttling F&O API call limits apply to both: - **Priority-based throttling** — non-priority calls slow down or queue when the tenant approaches limits. - **Burst limits** — short-term spike capacity beyond sustained rates. - **Per-user limits** — when calls are made as a specific user identity. Heavy integration traffic should respect throttling — implement exponential backoff on 429 responses. **Operational considerations.** - **Logging** — both surfaces emit telemetry through Application Insights. Configure tracing for debugging. - **Versioning** — data entities have built-in versioning; custom services need manual version management (often through deployment of new service variants alongside the old). - **Documentation** — for custom services, maintain external API documentation; OData has self-describing metadata. ## Modern alternatives for analytics workloads For analytics consumption — extracting F&O data for reporting, BI, data warehousing — **Synapse Link for F&O** is the modern path. It streams F&O changes to OneLake near-real-time; consumers query OneLake instead of hitting F&O's API. Vastly more efficient for analytics; preserves F&O's interactive performance for operational users. **Common pitfalls.** - **OData polling for change detection** — chatty, throttling-prone. Use Synapse Link or business events instead. - **Custom services without versioning strategy** — breaking changes cascade to consumers. - **No throttling handling on consumers** — integration randomly fails under load. ## Operational reality Mature integrations use both: OData for entity access, custom services for business operations, Synapse Link for analytics. Each tool for its job. --- # Customer and vendor templates in Business Central How Business Central uses templates to standardise customer and vendor creation — default fields, dimensions, posting groups, and the new-record workflow. Source: https://www.solvingdynamics365.com/guides/customer-and-vendor-templates-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 Creating a customer or vendor in Business Central touches a lot of fields: posting groups, payment terms, payment methods, currency, language, dimensions, default locations, salesperson, credit limit, tax setup. Done from scratch every time, the result is inconsistent data and missed defaults that cause posting problems weeks later. **Customer templates** and **vendor templates** solve this by pre-defining sensible defaults that flow onto every new record from one click. ## The model A template carries all the configurable defaults for a master record — posting groups (General Business, Customer / Vendor, VAT Business), payment terms and method, currency, language, default dimensions, default location, salesperson / purchaser, application method, credit limit (customers), tax registration handling, and any custom fields added via extensions. Multiple templates exist for the meaningful customer / vendor types: *Domestic Customer*, *EU Customer*, *Export Customer*, *Intercompany Customer*, *Wholesale Customer*. Same on the vendor side: *Domestic Vendor*, *Foreign Vendor*, *Subcontractor*, *Intercompany Vendor*. ## Creating from template The new-customer / new-vendor flow asks which template to apply. Selecting *EU Customer* populates the right posting groups, the right VAT business posting group, language code, currency hints, payment terms — leaving only the identifying data (name, address, contact) for the user to fill in. The pattern collapses what would be 30 manual fields into 5. ## Templates from existing records A useful pattern: take a well-set-up customer or vendor and *save as template*. The system captures the configuration and stores it as a new template, ready for reuse. Easier than building templates from scratch — start with a good existing record and copy its setup. ## Quick capture Combined with the *Save as Template* pattern, BC supports *quick capture* from Outlook or other touch points — a contact's email triggers a one-click "create as customer from template X" flow. ## Migration alignment During implementation, templates are configured before customer migration. Each migrated customer is then validated against the relevant template; mismatches surface as data-quality issues. ## Updating defaults Changes to a template apply only to *new* records created after the change. Existing customers / vendors retain their original setup. To propagate changes broadly, use bulk-edit tools on the existing record list. **Limits.** - Templates aren't auto-applied — users must select one. Workflows can mandate template selection at creation. - Templates don't enforce — users can override any field. Disciplined organisations audit deviations periodically. - Templates don't survive deletion in dependency chains — if a referenced posting group is removed, the template breaks until corrected. ## Operational discipline Define five to ten templates per master type, covering the meaningful operational variations. Document the template-selection guidance for users. Audit new records weekly during the first month after go-live to catch deviations and adjust templates if certain defaults aren't right. ## Why it matters Master data consistency is the foundation of every reporting query, integration, and analysis. Five minutes of template setup saves hundreds of cleanup hours over the system's life. --- # Customer credit limits and blocking in Business Central How Business Central handles credit-limit enforcement, customer blocking, and the integration with sales order processing and reminders. Source: https://www.solvingdynamics365.com/guides/customer-credit-limits-and-blocking-in-bc Section: Business Central / Finance & accounting Published: 2026-05-19 For B2B businesses selling on credit, controlling customer exposure is operationally critical — too much credit means bad debt risk; too little means lost sales. Business Central's **credit limit** and **blocking** features structure both sides: limiting how much each customer can owe, and stopping new business when policy demands. ## Credit limit setup Each customer carries a **Credit Limit (LCY)** field — the maximum balance you'll permit before warning or blocking. The setup is per customer on the card; templates can default credit limits per customer template. ## Credit Warnings Three options for what happens when a new sales document would push the customer over their limit: - **Both** — show warning AND show overdue balance. - **Credit Limit** — only warn when over credit limit. - **Overdue Balance** — only warn when overdue balance exists. - **No Warning** — proceed without warning (rare; disables the protection). The warning surfaces during sales document entry, before posting. The user sees the customer's outstanding balance, the proposed addition, and the credit limit. They can accept the warning (post anyway), close the document, or escalate to a credit manager. ## Hard vs soft enforcement By default, the warning is **soft** — the user can override and continue. For **hard** enforcement (block posting until override), customise the response through workflow: - Add a workflow rule that requires approval before posting if the customer is over limit. - The credit manager is the approver; only their approval releases the document. - The approval is auditable. ## Customer blocking Beyond credit limits, customers can be **blocked** entirely: - **Ship** blocked — no new sales orders can ship; existing orders can post. - **Invoice** blocked — no new invoices can post. - **All** blocked — no sales activity at all. Blocking is a binary setting on the customer card; the system enforces immediately at order entry. Use cases: - Customer disputes; freeze further sales until resolved. - Customer in collection; no new credit extension. - Customer ceased operations; archive the relationship. - Compliance reasons (sanctions list, fraud investigation). **Vendor blocking** works the mirror image — blocking purchases from a specific vendor. ## Item blocking Beyond customer / vendor, individual items can be **blocked**: - **Blocked** — no sales of this item. - **Sales Blocked** — block on sales only (purchases allowed for run-down). - **Purchase Blocked** — block on purchases (sell-down inventory). - **Production Blocked** — block production of this item. Useful for items being phased out, recalled, or under quality hold. ## Integration with collections Customers entering serious overdue states can be auto-blocked via workflow: - Reminder level reaches 3 → workflow auto-sets Block = Ship. - AR ageing exceeds N days → workflow notifies credit manager. - Customer's account moved to collections → manual block applied. These workflows don't ship out of the box but are easily built in Power Automate. ## Credit limit utilisation reporting Reports show: - Customer balance vs credit limit per customer. - Percentage utilisation. - Customers approaching limit. - Customers over limit. Useful for credit managers' daily / weekly review. **Limits.** - **No multi-currency credit limits** — credit limit is in LCY only. Multi-currency customers have FX implications. - **No graduated tiers** out of the box — over 80% might warn, over 100% might block. Use workflow for tiered behaviour. - **No external credit-bureau integration** — for automated risk-score-driven limit adjustments, integrate via Power Automate. ## Operational reality Credit-limit and blocking are operational tools — they only work if someone actively manages them. Schedule quarterly credit reviews. Adjust limits as customers grow or shrink. Investigate every over-limit warning. Without active management, limits become folklore that everyone ignores. --- # Customer Data Platform vs Data Warehouse How a CDP like Customer Insights — Data differs from a traditional data warehouse — purpose, structure, activation, and when each fits. Source: https://www.solvingdynamics365.com/guides/customer-data-platform-vs-data-warehouse Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 A modern data stack often includes both a **Customer Data Platform (CDP)** and a **Data Warehouse**. They have overlapping capabilities and distinct strengths. Confusing them — or thinking one replaces the other — leads to architectural mistakes. The shorthand: warehouses analyse; CDPs activate. **Data warehouse purpose.** - **Analytics** — historical and trending analysis. - **Reporting** — financial, operational, executive. - **Decision support** — strategic planning. - **Structured data** — transactional records, dimensional models. Warehouses are the foundation for BI tools (Power BI, Tableau); decision-makers query them for insights. **CDP purpose.** - **Customer profile unification** — single view of each customer. - **Identity resolution** — match records across systems. - **Real-time activation** — segments and signals drive marketing/service decisions. - **Behavioural / transactional / declared data** combined. - **Operational outputs** — journeys, personalization, sales prioritisation. CDPs are the activation layer for customer-centric experiences. **Key differences.** | Aspect | Data Warehouse | CDP | |---|---|---| | Primary use | Analytics | Customer activation | | Data model | Dimensional / star | Profile-centric | | Identity resolution | Limited | Core feature | | Real-time | Often batch | Often near-real-time | | Consumer | Analysts | Marketers, agents | | Storage | Columnar / row | Profile store | | Refresh | Batch | Continuous | ## Customer Insights — Data as CDP Microsoft's offering: - Built for customer unification. - Real-time-ish refresh. - Profile attribute computation. - Direct integration with Journeys, Sales, Service. For Dynamics 365 customers, the integration depth makes it natural choice. ## Fabric / Synapse / Lakehouse as warehouse Microsoft's analytics platform: - Built for analytical queries. - Star schemas and lakes. - Power BI as primary consumer. - ML integration. For analytical needs, this is the foundation. ## The overlap Both store customer data; both can produce reports. The distinction is purpose: - **If you need to know "what is total revenue by segment last quarter?"** — warehouse. - **If you need to know "what's the right next action for this specific customer right now?"** — CDP. Different questions, different tools. ## Complementary architecture Most mature organisations have both: - Operational systems → CDP → activation. - Operational systems + CDP → warehouse → analytics. - Warehouse → ML models → CDP (feedback loop). The warehouse is the system of truth for analytics; the CDP is the system of action for customer engagement. **Common architectural mistakes.** - **CDP as warehouse.** Trying to do analytics in the CDP; performance suffers; capability gaps. - **Warehouse as CDP.** Trying to drive real-time activation from warehouse; latency unacceptable. - **Both for the same purpose.** Duplicating profile data; sync issues; cost. The clean pattern: each in its lane. **Data flow patterns.** - **Sources → CDP** for unification. - **Sources + CDP → warehouse** for analytics. - **Warehouse ML scores → CDP** for activation. - **CDP → activation systems** (Journeys, ads, service). - **Activation outcomes → warehouse** for measurement. This circular flow makes data work for both decisions and actions. **When you only need one.** - **Warehouse only** — analytics-focused organisation; minimal personalised customer engagement. - **CDP only** — small organisation; analytics needs met by warehouse-light tools. For organisations of any complexity, both eventually emerge. ## Microsoft Fabric and CI-Data Microsoft's strategy: - Fabric for warehouse / analytics. - CI-Data for customer profiles / activation. - Integration between them via OneLake. The two products coexist; complementary. ## Cost comparison Different cost structures: - **Warehouse** — storage + compute; can scale to PB. - **CDP** — per-profile pricing typically; scaling to millions of profiles. For very large customer bases (10M+), CDP cost is meaningful; warehouse cost depends on analytic complexity. **Implementation timelines.** - **CDP from scratch** — 6–12 months for meaningful value. - **Warehouse** — variable; 3–18 months depending on scope. Both are programmes; not projects. **Common pitfalls.** - **Treating CDP as silver bullet.** CDP enables; doesn't deliver outcomes alone. - **Warehouse-only with personalisation aspirations.** Personalisation suffers without proper CDP. - **Profile data quality ignored.** Both warehouses and CDPs are garbage-in-garbage-out. - **No measurement loop.** CDP drives actions; warehouse measures; if disconnected, learning stops. ## Strategic positioning CDPs and data warehouses are complementary infrastructure for any organisation serious about customer experience and analytics. The question isn't "which one" but "how do they work together." For Dynamics 365 customers, Customer Insights — Data (CDP) and Microsoft Fabric (warehouse / lakehouse) are the Microsoft-native answer; both integrate; both feed each other. The decision is when to invest in each. For most mid-market and enterprise organisations, both should exist by year 3-5 of their data maturity journey. The order and pace depend on which use cases are most pressing — analytics vs customer engagement — and on the organisation's existing tech footprint. Plan the architecture intentionally; don't end up with both by accident in incompatible ways. ### Frequently asked questions **What is the difference between a CDP and a data warehouse?** A warehouse analyses — historical reporting on dimensional models for analysts. A CDP activates — it unifies customer profiles with identity resolution and pushes segments and signals into marketing, sales, and service in near real time. **Do I need both?** Organisations of any complexity end up with both: sources feed the CDP for unification, sources plus the CDP feed the warehouse for analytics, warehouse ML scores flow back into the CDP for activation, and activation outcomes return to the warehouse for measurement. **What are Microsoft's products for each?** Customer Insights – Data is the CDP; Microsoft Fabric (with Synapse and lakehouse patterns) is the warehouse. They integrate through OneLake and are designed to coexist. **What is the most common architectural mistake?** Using one for the other — running analytics in the CDP, where performance and capability fall short, or driving real-time activation from the warehouse, where latency is unacceptable. --- # Customer hierarchies in Business Central How to model parent-child customer relationships in Business Central — bill-to / ship-to, customer groups, dimensions. Source: https://www.solvingdynamics365.com/guides/customer-hierarchies-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 For B2B sellers, a single customer organisation often has multiple locations, billing relationships, and decision-makers. Business Central's standard data model doesn't natively support deep customer hierarchies the way Dynamics 365 Sales does, but several built-in patterns cover most needs. **The standard patterns.** - **Bill-to / Sell-to customer.** The most common hierarchy. A sales order's *Sell-to Customer* is the operational customer (the location, the buyer); the *Bill-to Customer* is who's invoiced (typically the parent, the holding company, the central accounts payable office). One bill-to can have many sell-tos. Posting hits the bill-to's customer ledger; the sell-to is recorded for operational reporting. - **Ship-to address.** Each sell-to customer can have multiple **Ship-to Addresses** — different warehouses, branch offices, or end-destinations. A sales line can override the customer's default ship-to. Useful when the customer is one company but ships go to many sites without each being a separate customer record. - **Customer template grouping.** Customers are grouped through **Customer Price Group**, **Customer Discount Group**, **Customer Posting Group**, **Currency Code**, **Salesperson Code**, **Country Code**. These aren't hierarchies but they enable bulk operations and reporting across grouped customers. ## Dimensions as hierarchy Many BC implementations use **dimensions** to express customer hierarchy: a *Customer Group* dimension (Parent A, Parent B, Parent C) attached to each customer record propagates onto every transaction. Reports group by the dimension; the parent-level total rolls up across all child customers automatically. ## Native parent-child field BC has no out-of-the-box parent-child customer field. Customers needing it usually: - Add a custom **Parent Customer** lookup field via a per-tenant extension. - Use the **Customer Hierarchy** ISV apps available on AppSource. - Sync the hierarchy from Dynamics 365 Sales (where account hierarchies are first-class) via the standard connector. **Common scenarios.** - **Retail chain customer.** Parent customer holds the master agreement and billing relationship; child customers represent individual stores receiving deliveries. Use bill-to/sell-to with the parent as bill-to. - **Multi-entity group customer.** A customer group with multiple legal entities, each placing its own orders and paying its own invoices. Use separate customer records linked via a Customer Group dimension; no bill-to relationship. - **Holding company structure.** Parent receives invoices; multiple operational subsidiaries place orders. Use bill-to / sell-to with operational subsidiaries as sell-tos. - **Franchise.** Franchisor as parent; franchisees as children, often with different ownership structures. Hierarchy expressed through dimensions; pricing may differ per franchisee. ## Pricing across hierarchy Customer-specific pricing is per customer; the **bill-to / sell-to** pair allows price negotiation at the bill-to level applying to all sell-tos, but BC's standard pricing engine resolves at sell-to. For consistent pricing across a customer family, either: - Use a **customer price group** that includes the family. - Apply the same trade agreement at the bill-to and replicate to sell-tos. - Use ISV extensions for deeper hierarchical pricing. ## Reporting Reports respect customer hierarchy through: - **Bill-to customer** field for posted-document analysis. - **Customer Group dimension** for cross-customer roll-ups. - **Power BI** with custom relationships joining BC data to a customer-hierarchy dataset maintained separately. **Common pitfalls.** - **No hierarchy strategy** — every customer is independent, no roll-up reporting possible. - **Bill-to / sell-to wrongly used** — confusion about which is which leads to wrong posting and wrong customer balances. - **Hierarchy data not maintained** — mergers and acquisitions in the customer base aren't reflected; reports misrepresent. ## Operational reality For complex hierarchies, BC's standard model has limits. If hierarchy is central to the business — chain retail, holding-company customers, multi-entity groups — plan for Dynamics 365 Sales as the relationship system, with BC as the financial system, the two integrated. Inside BC alone, dimensions and bill-to/sell-to cover the standard patterns adequately. --- # Customer Insights – Data explained Microsoft's customer data platform — ingestion, identity resolution, unified profiles, segments, and measures. Source: https://www.solvingdynamics365.com/guides/customer-insights-data-explained Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 Updated: 2026-08-31 **Customer Insights – Data** is Microsoft's customer data platform (CDP). It exists to solve a problem nearly every mid-to-large customer-facing business has: the same customer is represented dozens of times across different systems, in different shapes, with overlapping but partial data. CI–Data ingests it all, resolves the identities, and produces a single unified customer profile downstream apps can use. ## Ingestion Connectors pull data from Dynamics 365 (Sales, Service, Finance, Commerce, Business Central), Microsoft 365, Azure Data Lake, Synapse, Snowflake, Salesforce, Adobe, and dozens of other systems — or through Dataverse for native sources. Source systems can be polled on a schedule or streamed via APIs. ## Unification The core engine. CI–Data takes multiple customer-shaped tables (each with names, addresses, emails, phone numbers) and runs **identity resolution** — rule-based, ML-assisted matching of records likely to be the same person or organisation. Output is a **unified customer profile** that links back to all the source records. Unification runs in three configurable stages: **source field mapping** (declaring which columns in each source mean "email", "phone", "name"), **deduplication** within each source, and **matching** across sources with ordered rules — exact match on email first, then fuzzy match on name plus postcode, and so on. Rule order matters enormously: a greedy fuzzy rule early in the sequence merges people who merely share a common name, and unpicking bad merges after downstream systems have consumed the profiles is genuinely painful. The working practice is to start with conservative exact-match rules, measure the unification rate, and loosen deliberately, reviewing samples of borderline merges each round. Expect this tuning to take weeks, not days — it is the actual work of a CI–Data implementation, and it's why "we'll just switch on the CDP" project plans slip. ## Enrichment Once unified, profiles can be **enriched** with first-party derived attributes (lifetime value, engagement score, churn risk) and third-party data (Microsoft's marketplace of providers — Acxiom, Experian, LinkedIn, weather, geographic). Enrichments are scheduled refresh jobs. ## Segments and measures **Segments** are query-built dynamic groups of unified customers ("high-value Swedish customers active in the last 30 days"). **Measures** are aggregate calculations ("total revenue per customer this quarter") attached to profiles. Both update as data flows through. ## AI predictions Out-of-the-box AI models predict **churn**, **lifetime value**, and **product recommendations**. Custom models can be brought in from Azure ML. ## Outputs Profiles, segments, and measures export to Customer Insights – Journeys (for marketing campaigns), Sales (as opportunity insights), Customer Service (for prioritisation and routing), advertising platforms (Meta, Google), and back to Dataverse for downstream automation. ## Real-time CI–Data supports both **batch** unification (the original mode, scheduled daily/hourly) and **real-time** signals (events streaming through as they happen, with profile updates within seconds). ## Relationship to Journeys, Dataverse, and Fabric Naming first, because Microsoft made it confusing: **Customer Insights** is sold as one product with two capabilities — **Data** (this article, the CDP) and **Journeys** (the marketing automation app, covered in [Customer Insights – Journeys explained](https://www.solvingdynamics365.com/guides/customer-insights-journeys-explained)). They share a licence but are architecturally distinct, and plenty of customers run Journeys against plain Dataverse contacts without ever implementing Data. Under the hood, CI–Data's storage and compute have been converging with **Microsoft Fabric** — profiles and enriched tables can live in OneLake and be queried from Fabric workloads directly, which matters if your analytics estate is already heading that way. If your problem is analytical ("build a customer 360 for reporting"), a lakehouse plus semantic model may serve better and cheaper; CI–Data earns its licence when the unified profile must flow back into *operational* systems — journeys, agent desktops, routing. That boundary is explored in [customer data platform vs data warehouse](https://www.solvingdynamics365.com/guides/customer-data-platform-vs-data-warehouse). ## Where it fits CI–Data shines when a business has multiple customer-facing systems whose data isn't natively joined. It is overkill for a single-system shop. Implementation is non-trivial — identity resolution rules need iteration to land cleanly — but the resulting unified profile transforms downstream segmentation and personalisation. Three honest prerequisites before buying: - **Source data quality.** Identity resolution cannot conjure matches from systems that never captured email or phone consistently. If the sources are dirty, budget a cleansing phase first — the CDP amplifies whatever it's fed. - **A named owner.** Unification rules, enrichment refreshes, and segment definitions drift without a steward. CI–Data is a product someone runs, not a project someone finishes. - **A consuming use case on day one.** The fastest failures are "build the 360 first, find uses later" programmes. Pick one concrete consumer — a suppression segment for [Journeys](https://www.solvingdynamics365.com/guides/customer-insights-journeys-explained), churn-risk flags on the service desktop — and implement toward it. More on the marketing-side plumbing in [real-time marketing data integration](https://www.solvingdynamics365.com/guides/real-time-marketing-data-integration). ### Frequently asked questions **What does Customer Insights – Data actually do?** It is a customer data platform: it ingests customer-shaped data from many systems, runs identity resolution to match records that represent the same person or organisation, and produces a unified customer profile that Journeys, Sales, Customer Service, and advertising platforms can act on. **How does unification work?** In three configurable stages — mapping source fields to common meanings such as email and phone, deduplicating within each source, then matching across sources with ordered rules (exact email first, fuzzy name plus postcode later). Rule order matters: a greedy fuzzy rule early in the sequence merges people who merely share a name. **How long does a Customer Insights – Data implementation take?** Tuning unification rules takes weeks, not days, and is the actual work of the project. Start with conservative exact-match rules, measure the unification rate, loosen deliberately, and review samples of borderline merges each round. **Should I use Customer Insights – Data or Microsoft Fabric for a customer 360?** If the need is analytical — reporting on customers — a lakehouse plus a semantic model is usually cheaper. Customer Insights – Data earns its licence when the unified profile must flow back into operational systems: journeys, agent desktops, routing. **What should be in place before buying it?** Source data that captured email and phone consistently, a named owner who runs unification rules and segments over time, and one concrete consuming use case on day one — a suppression segment, churn flags on the service desktop — rather than building the 360 first and finding uses later. --- # Customer Insights – Journeys explained Microsoft's marketing automation product — real-time journeys, segments, email, events, lead scoring, consent. Source: https://www.solvingdynamics365.com/guides/customer-insights-journeys-explained Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 Updated: 2026-08-30 **Customer Insights – Journeys** is Microsoft's marketing automation application — the successor to Dynamics 365 Marketing. It orchestrates multi-channel customer journeys, runs email campaigns and events, scores and qualifies leads, and hands them to [Dynamics 365 Sales](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-sales). It runs on [Dataverse](https://www.solvingdynamics365.com/guides/what-is-microsoft-dataverse) and shares the same Account, Contact, and Lead tables as the other Dynamics 365 CRM apps — which is the whole point. Marketing doesn't sync to the CRM; marketing *is in* the CRM. Two names cause endless confusion, so let's settle them first. **Customer Insights – Journeys** is the marketing automation app (journeys, email, events). **Customer Insights – Data** is a separate customer data platform (profile unification, measures, predictions) covered in [its own guide](https://www.solvingdynamics365.com/guides/customer-insights-data-explained). Microsoft sells them together under the single "Dynamics 365 Customer Insights" licence, but they are distinct products that install and work independently. The renaming history from Dynamics 365 Marketing to today's naming is untangled in [the marketing history and transition guide](https://www.solvingdynamics365.com/guides/dynamics-365-marketing-history-and-transition). ## Journeys: the core concept A **customer journey** is a multi-step path a contact or lead travels through over time. Each step is a trigger, a wait, a branch, or an action — send an email, send an SMS or push notification, create a task, fire a Power Automate flow, update a record. Journeys come in two starting shapes: **Segment-based journeys** start a defined audience down the path together — the classic campaign send, a monthly newsletter, a product launch sequence. **Trigger-based journeys** start one person at a time, the moment something happens: a form submission, an event registration, an abandoned cart signal, a custom event your own systems raise through the API. This is where marketing automation earns its name — a welcome sequence that starts the second someone signs up, a renewal journey that fires ninety days before a contract date. Branching is where journeys get interesting: split by attribute (send enterprise customers a different track), by behaviour (opened the last email or didn't), or by A/B test results with automatic winner selection. ## Real-time replaced outbound The product carries scar tissue worth understanding. The original Dynamics 365 Marketing shipped an **outbound** model — batch-oriented, list-based, slower. Microsoft rebuilt the engine as **real-time marketing**, ran the two side by side for years, and has since retired outbound; new environments are real-time only. If you find older blog posts describing customer journeys with tiles on a horizontal canvas, that's the dead outbound designer. The differences, and what a migration involves, are covered in [real-time vs outbound journeys](https://www.solvingdynamics365.com/guides/real-time-vs-outbound-journeys). Practical consequence: ignore any consultant proposal or tutorial that doesn't say which model it's describing. If it's outbound, it's history. ## Segments A **segment** is a dynamic, query-defined audience — "customers in Sweden with at least one purchase in the last 90 days and an open opportunity". Segments are built on Dataverse attributes and behavioural signals, refresh as data changes, and journeys targeting a segment automatically pick up new entrants. The query builder is genuinely capable and genuinely fiddly; [the segment builder guide](https://www.solvingdynamics365.com/guides/customer-insights-journeys-segment-builder) covers the mechanics, and [segmentation deep dive](https://www.solvingdynamics365.com/guides/customer-insights-segmentation-deep-dive) covers the design thinking. ## Email, forms, and personalisation The email designer is block-based with reusable content blocks, conditional content per recipient attribute, and A/B testing. Personalisation goes well beyond "Hi `{first name}`" — dynamic text can traverse Dataverse relationships, so an email can reference the recipient's account owner's name or the products on their latest order. The token syntax has real depth and real sharp edges; see [personalization tokens](https://www.solvingdynamics365.com/guides/customer-insights-journeys-personalization-tokens). Hosted **forms** capture inbound leads and registrations, mapping fields to Lead or Contact records with duplicate handling. Getting mail delivered at volume is its own discipline — DKIM, SPF, DMARC, dedicated sending domains, warm-up, and list hygiene — covered in [email deliverability for Customer Insights – Journeys](https://www.solvingdynamics365.com/guides/email-deliverability-for-customer-insights-journeys). ## Consent is first-class Real-time journeys enforce consent centrally: **consent records** per email address or phone number, per **purpose** (commercial, transactional), with **topics** for granular subscription management. A send simply will not go out to a contact without the right consent — the platform checks at send time, not at segment time. For European organisations living under GDPR this is one of the strongest arguments for the product, and it's also the part most often mis-designed on day one. Decide your purposes and topics before the first campaign, not after. ## Events and lead scoring Built-in **event management** covers in-person and webinar events: sessions, speakers, registration pages, capacity, waitlists, and Teams integration for virtual delivery. Registration and attendance flow back as journey triggers — attend the webinar, get the follow-up track; register and no-show, get the recording. Details in [event management](https://www.solvingdynamics365.com/guides/event-management-in-customer-insights-journeys) and [event orchestration](https://www.solvingdynamics365.com/guides/dynamics-365-marketing-event-orchestration). **Lead scoring** models combine demographic fit and behavioural engagement, and qualified leads route to sales queues automatically. Because Sales and Journeys share the same Lead table, the marketing-to-sales handoff is a stage change, not an integration project — the single strongest architectural argument for the product. ## Copilot Generative AI shows up in three useful places: content generation (subject lines, email body drafts, image suggestions), **query assist** (describe a segment in natural language, get the query), and journey suggestions. Treat it like a competent junior — good first drafts, always reviewed. The broader AI story across the family is in [Copilot across Dynamics 365](https://www.solvingdynamics365.com/guides/copilot-across-dynamics-365). ## Licensing Microsoft licenses Customer Insights per tenant, not per user: a base licence covers both Journeys and Data, with capacity measured in **interacted people** for Journeys (roughly: the people you actually engaged in the period) and unified profiles for Data. Additional capacity packs stack on top. The model rewards clean data — a bloated contact list of people you never contact costs storage, but the metered dimension is who you engage. Check current tiers on Microsoft's pricing page before budgeting; the numbers move. ## Where it stops Honest limits. High-volume B2C at the scale of tens of millions of daily sends is the territory of dedicated platforms like Braze or Salesforce Marketing Cloud. Deep content operations (DAM, brand portals, editorial workflow) need a separate system. Programmatic advertising isn't in the product. And organisations without any other Dynamics 365 or Power Platform footprint lose the product's main advantage — the shared data platform — and should weigh HubSpot-class alternatives seriously. Where it wins: any organisation already running Dynamics 365 Sales or Customer Service, where "marketing sees what sales sees" stops being an integration roadmap and starts being the default. ## Where to go next Orientation: [real-time vs outbound](https://www.solvingdynamics365.com/guides/real-time-vs-outbound-journeys), then [the segment builder](https://www.solvingdynamics365.com/guides/customer-insights-journeys-segment-builder). Building: [journey orchestration tips](https://www.solvingdynamics365.com/guides/journey-orchestration-tips-and-tricks) collects the field lessons. Architecture: [real-time marketing data integration](https://www.solvingdynamics365.com/guides/real-time-marketing-data-integration) covers feeding external signals in. And if your problem is fragmented customer data rather than campaign execution, start with [Customer Insights – Data](https://www.solvingdynamics365.com/guides/customer-insights-data-explained) instead. ### Frequently asked questions **What is the difference between Customer Insights – Journeys and Customer Insights – Data?** Journeys is the marketing automation app — customer journeys, email, SMS, events, forms, lead scoring. Data is a separate customer data platform that unifies profiles from many systems. Microsoft sells them under one Dynamics 365 Customer Insights licence, but they install and work independently, and many customers run Journeys without ever implementing Data. **Is Customer Insights – Journeys the same as Dynamics 365 Marketing?** It is the successor. Dynamics 365 Marketing was renamed, and its original outbound marketing engine has been retired in favour of real-time journeys; new environments are real-time only. Any tutorial that shows journeys as tiles on a horizontal canvas is describing the retired outbound designer. **What is the difference between segment-based and trigger-based journeys?** Segment-based journeys start a defined audience down the path together — a newsletter, a product launch sequence. Trigger-based journeys start one person at a time the moment something happens: a form submission, an event registration, an abandoned cart, or a custom event raised through the API. **How is Customer Insights licensed?** Per tenant rather than per user. A base licence covers both Journeys and Data, with capacity measured in interacted people for Journeys and unified profiles for Data; additional capacity packs stack on top. Check Microsoft's pricing page before budgeting — the tiers move. **When is Journeys the wrong choice?** For B2C sending at tens of millions of messages a day (Braze or Salesforce Marketing Cloud territory), for deep content operations that need a DAM, and for organisations with no other Dynamics 365 or Power Platform footprint — those lose the shared-data advantage and should weigh HubSpot-class tools seriously. --- # Customer Insights – Journeys vs HubSpot Microsoft's marketing automation against the most common alternative in Dynamics shops — where each wins, where the differences are real. Source: https://www.solvingdynamics365.com/guides/customer-insights-journeys-vs-hubspot Section: Customer Engagement / Customer Insights / Marketing Published: 2026-08-30 Updated: 2026-08-30 If you run [Dynamics 365 Sales](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-sales) and need marketing automation, the shortlist almost always comes down to two names: Microsoft's own **[Customer Insights – Journeys](https://www.solvingdynamics365.com/guides/customer-insights-journeys-explained)**, or **HubSpot Marketing Hub** connected to Dynamics through an integration. Both are serious products. The decision is not about which has more features — it is about where you want your marketing data to live, who will operate the tool, and how much integration you are willing to own. This guide walks the difference the way it surfaces in real evaluations. ## The architectural difference, which is the whole difference **Journeys runs *inside* your CRM.** It is a Dataverse app: it reads and writes the same Account, Contact, and Lead tables as Sales. A segment can filter on any CRM column — opportunity stage, owner, custom tables, case history — with no sync, because there is nothing to sync. When marketing qualifies a lead, the sales team sees it on the record they already work. **HubSpot runs *beside* your CRM.** It is its own platform with its own contact database, and it talks to Dynamics through a connector — HubSpot's native Dynamics integration, or middleware. The connector maps fields, syncs on a schedule or near-real time, and inevitably becomes a small system of its own: someone owns the field mappings, resolves sync conflicts, and answers "why does this contact exist twice?" Everything else in the comparison is downstream of this one fact. ## Where HubSpot wins - **Ease of use.** This is HubSpot's brand for a reason. A marketer can build an email, a landing page, and a nurture flow on day one without training. Journeys has improved a lot since the outbound era, but it still feels like a Microsoft business app — capable, denser, more configuration before the first send. - **The content and inbound toolkit.** Blogging, SEO recommendations, social publishing and listening, ad management, a built-in CMS, chatbots. Journeys has none of this — it is marketing *automation*, not a marketing *platform*. If your strategy is inbound content, HubSpot ships the whole toolchain. - **Time to value.** A HubSpot instance sends its first campaign in days. Journeys typically lands inside a broader Dynamics programme, with consent model, [deliverability setup](https://www.solvingdynamics365.com/guides/email-deliverability-for-customer-insights-journeys), and Dataverse security to configure first. - **Reporting out of the box.** HubSpot's funnel and attribution reporting is ready on day one. Journeys gives you analytics per journey and per email, but cross-programme reporting usually means Power BI work. - **Operating without IT.** HubSpot is genuinely runnable by a marketing team alone. Journeys assumes somebody nearby understands Dataverse. ## Where Journeys wins - **One database with Sales.** No connector, no field mappings, no duplicate contacts, no sync lag between a lead scoring action and the seller seeing it. In regulated industries, also one security model and one audit surface instead of two. - **Segmentation depth.** Because [segments](https://www.solvingdynamics365.com/guides/customer-insights-journeys-segment-builder) query Dataverse directly, you can target on anything your CRM knows — custom tables included. HubSpot can only segment on what the connector syncs, and every new attribute is a mapping change. - **Trigger-based journeys on CRM events.** A journey can start the moment any Dataverse record changes — case closed, contract signed, custom business event fired. Reproducing that in HubSpot means pushing events through the connector or API first. The [real-time model](https://www.solvingdynamics365.com/guides/real-time-vs-outbound-journeys) is built for exactly this. - **Events and webinars.** Journeys has real event management with native Teams webinar integration — registration to attendance data flowing straight into journeys. HubSpot's marketing events object is thinner. - **Licensing at CRM scale.** Journeys is priced on interacted people and includes attach pricing for existing Dynamics customers. HubSpot Marketing Hub Professional/Enterprise plus the contact-tier pricing plus the integration effort frequently costs more than teams expect once the database grows — though pricing changes on both sides, so model your own numbers rather than trusting anyone's blog post. - **The Microsoft roadmap.** Copilot features, Dataverse, Power Automate, [Customer Insights – Data](https://www.solvingdynamics365.com/guides/customer-insights-data-explained) for profile unification — betting on Journeys is betting on the stack you already bought. ## Where the differences don't matter Email builders, A/B testing, dynamic content, lead scoring, forms, basic nurture flows, consent management — both do all of it competently. No evaluation should turn on whether one of them "can send a newsletter." If a vendor demo spends its time here, it is avoiding the real question. ## How the decision actually gets made In practice this is rarely a feature bake-off. Three questions settle most evaluations: **Who operates it?** A standalone marketing team with no Dynamics admin support will be happier on HubSpot, full stop. A team embedded in a Dynamics-centric organisation, with admins who live in Dataverse, gets more from Journeys than HubSpot could deliver through a connector. **How CRM-entangled is your marketing?** If campaigns key off CRM state — pipeline stages, service events, custom-table data, B2B account motions — the shared database wins and Journeys is the right call. If marketing is mostly top-of-funnel content and capture, feeding leads over the wall, HubSpot's toolkit wins and the connector is good enough. **Is HubSpot already there?** Many evaluations are really "should we migrate off HubSpot now that we're on Dynamics?" Usually not immediately: a working HubSpot instance plus the native connector is a fine state, and forced migrations burn goodwill. The switch case appears when connector maintenance grinds, contact-tier costs climb, or CRM-triggered automation demand outgrows what syncs. One thing not to do: run both as peers long-term with marketing contacts split across them. Pick a system of record for marketing consent and engagement history, or reporting and compliance both turn to soup. ## The bottom line HubSpot is the better *standalone marketing platform*. Journeys is the better *marketing layer for a Dynamics CRM*. Decide which of those you are actually buying, and the product choice makes itself. If you land on Journeys, the [marketing learning path](https://www.solvingdynamics365.com/paths/marketing-with-customer-insights) takes you from orientation to running real campaigns. ### Frequently asked questions **What is the fundamental difference between Journeys and HubSpot?** Architecture. Journeys runs inside your CRM as a Dataverse app, reading the same Account, Contact and Lead tables as Sales with nothing to sync. HubSpot runs beside your CRM with its own contact database and a connector that someone has to own — field mappings, sync conflicts, duplicate contacts. **We already run HubSpot next to Dynamics — should we migrate?** Usually not immediately. HubSpot plus the native connector is a fine state, and forced migrations burn goodwill. The switch case appears when connector maintenance grinds, contact-tier costs climb, or you need automation triggered by CRM state that doesn't sync. **When does Journeys clearly win?** When campaigns key off CRM state — pipeline stages, service events, custom tables, B2B account motions. The shared database means a segment can filter on any CRM column with no sync layer. **When is HubSpot the better choice?** When a standalone marketing team without Dynamics admin support runs mostly top-of-funnel content and lead capture, feeding leads over the wall. HubSpot's ease of use wins there, and the connector is good enough. --- # Customer Insights segmentation — a deep dive How segmentation works in Dynamics 365 Customer Insights — Data and Journeys segments, ML-driven segments, refresh patterns. Source: https://www.solvingdynamics365.com/guides/customer-insights-segmentation-deep-dive Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 A segment is a defined audience — "customers in California who bought twice in the last 90 days" or "leads from Industry X with a job title containing 'Director'." Customer Insights is built around segmentation; everything from journey orchestration to analytics depends on well-designed segments. The technical mechanics are straightforward; the discipline of segment management — definition, governance, performance, evolution — is the harder problem. **The two Customer Insights products.** - **Customer Insights — Data** (formerly CDP) — the data unification layer; pulls from multiple sources, resolves identity, builds a unified customer profile. - **Customer Insights — Journeys** (formerly Marketing) — orchestration engine using segments to drive journeys (emails, SMS, push, in-app). Segments exist in both, but with different scope and capability. **Segment types.** - **Static** — a defined snapshot at a point in time; doesn't update. - **Dynamic** — query-based; refreshes against current data on a schedule (typically hourly or daily). - **Compound** — segments combining other segments (segment A AND segment B, or segment A NOT in segment B). - **AI-derived (Data)** — clustering or propensity models that produce segment-shaped output. Most production segments are dynamic — they need to reflect current customer state, not snapshots. **Segment query design.** - **Filter conditions** on unified customer profile attributes — demographic, behavioural, transactional. - **Time windows** — "in last 90 days", "in current quarter". - **Aggregations** — "customers with >3 purchases". - **Joins through related tables** — "customers whose company is in industry X". The query builder is visual but understanding the underlying data model matters — choosing the right attributes is the difference between accurate and noisy segments. **Refresh patterns.** - **Continuous refresh** — segments update as underlying data changes (near real-time). - **Scheduled refresh** — daily or hourly batch. - **Manual refresh** — on-demand. Continuous refresh is more expensive computationally; reserve for time-sensitive segments. Most marketing segments are fine with daily refresh. ## Membership counts Segments display current membership: - Total profiles in segment. - Trend over time. - Demographic breakdown. - Activity stats. Watching segment sizes change is a quick health check — a segment shrinking week-over-week may indicate a real trend or a data quality issue upstream. ## Using segments in journeys A segment is a journey's audience: - Trigger the journey when a profile enters the segment. - Loop through the journey while the profile remains. - Exit when no longer in segment, journey completes, or explicit unsubscribe. Segments inform entry points; behavioural triggers within the journey then personalise the flow. **AI-derived segments.** - **Lookalike segments** — find profiles similar to a seed. - **Churn prediction segments** — profiles likely to churn. - **Lifetime value segments** — predicted high-value profiles. - **Product affinity segments** — likely to buy product X. Built on Microsoft's underlying ML models or custom models trained on your data. Setup requires reasonable historical data volume (months of behaviour). ## Segment governance A common antipattern: hundreds of segments accumulate without ownership. Mitigations: - **Naming convention** — segment names indicate purpose, owner, refresh. - **Tagging** — by department, by use case. - **Lifecycle management** — segments that haven't driven action in 90 days marked for retirement. - **Owner accountability** — each segment has a designated owner. Without governance, segment proliferation overwhelms the platform. ## Performance considerations Segment refresh time depends on: - **Data volume** — larger profile sets take longer. - **Filter complexity** — joins and aggregations add cost. - **Refresh cadence** — more frequent = more total compute. For very large segments (millions of profiles) refreshing hourly, costs add up. Profile segment cost vs use value. ## Suppression segments A common pattern: "everyone except these people": - **Do-not-contact segment** — explicit opt-outs, complaints, bounces. - **Excluded for compliance** — recipients in restricted jurisdictions. - **Already in another journey** — avoid double-touch. Suppression layered before any send. Without it, GDPR/CAN-SPAM violations are easy. ## Cross-segment analytics Beyond using segments to send messages: - **Overlap analysis** — which profiles are in multiple segments. - **Conversion analysis** — segments driving the highest journey conversion. - **Trend analysis** — segment growth over time. These insights drive segment refinement. **Common pitfalls.** - **One giant "all customers" segment.** Default for lazy campaigns; no personalisation. - **Time-window drift.** "Last 90 days" was right when defined; now it should be "last 30 days"; never updated. - **Stale criteria.** Customer Insights model changed but segment query still references old attribute names; segment returns empty. - **No suppression hierarchy.** Customers receive multiple competing journeys; experience fragmented. - **Segment used cross-system without check.** Same segment definition exists in Dynamics, in a separate analytics tool, in Excel; they drift over time; reporting inconsistent. - **Performance ignored.** Segments refreshing too frequently; costs compound. ## Operational discipline Segmentation is a craft. Build segments thoughtfully, test them against expected counts, observe their behaviour over time, refine. Treat segments as living artefacts with owners and lifecycle, not as one-time creations. The teams that get value from Customer Insights are the ones that treat segments as products — designed, maintained, retired with intent. --- # Customer self-service in Dynamics 365 Finance and SCM How customer-facing portals integrate with F&O — order placement, account status, statements, and the patterns that drive customer satisfaction at scale. Source: https://www.solvingdynamics365.com/guides/customer-self-service-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 For B2B operations selling to many customers, **customer self-service** is increasingly table-stakes. Customers expect to see their orders, account balance, invoices, and shipping status without having to call. They expect to place repeat orders without sales rep involvement. Done well, customer self-service reduces customer-service cost and improves satisfaction simultaneously. ## The architecture F&O customer self-service is built on **Power Pages portals** sitting in front of F&O's customer-side data — orders, invoices, deliveries, statements, products. The portal authenticates customer users against their own organisation's identity provider (or local accounts), scopes data per the authenticated user's customer record, and exposes a curated set of capabilities. **Common self-service capabilities.** - **Order placement.** Browse the product catalogue with the customer's contracted prices; add to cart; submit as a sales order. The order arrives in F&O as a draft awaiting confirmation, or auto-confirmed for trusted customers. - **Order status.** View open and historical orders with line-level detail, shipping status, tracking numbers, expected delivery, invoice status. - **Reorder.** One-click reorder of previous orders, optionally with quantity adjustment. The most-used feature for repeat B2B customers. - **Saved orders / shopping lists.** Pre-built lists of frequently-ordered items the customer can use as templates. - **Quotes and approvals.** Receive sales quotes for approval; accept or reject; track quote-to-order conversion. - **Invoices and statements.** View posted invoices, download PDFs, view aged statements, see payment status. - **Payments.** Make online payments through integrated payment processors against open invoices. - **Returns.** Initiate a return request, get an RMA, track the return. - **Account profile.** Update contact information, shipping addresses, payment methods, communication preferences. - **Product information.** Detailed product specs, datasheets, manuals, certifications. ## Customer hierarchies B2B customers often have multiple buyers across multiple locations. The portal supports the hierarchy: a parent-company user sees orders for all child accounts; a location-specific user sees only their location's orders. Permission roles configure the scope. ## Contracted prices Pricing in the portal honours **sales agreements** and customer-specific price lists. The customer sees their negotiated price, not the public catalogue price. ## Inventory visibility Real-time stock availability shows on the product page — in-stock now, expected restock dates, alternative items. Customers can decide whether to order or wait. ## Catalogue management The catalogue exposed in the portal can be: - **Full catalogue** — every product the company sells. - **Customer-specific subset** — only products the customer is contracted to buy. - **Hierarchy-filtered** — different catalogues per customer tier or industry. Configuration controls per-customer visibility. ## Approval workflow inside the customer Many B2B customers require internal approval before submitting an order. The portal supports buyer roles where requesters submit, approvers approve, and only approved orders post to F&O. ## Integration with Sales Customer activity in the portal — quote views, abandoned carts, repeat-order patterns — can flow to Dynamics 365 Sales as signals for the account manager. ## Mobile The portal is responsive; mobile-friendly experience handles the on-the-go customer placing emergency reorders, viewing tracking, or paying invoices. **Common patterns.** - **Reorder-heavy customers** — distributors, wholesalers — get a stripped-down portal focused on fast reorder. - **Configure-to-order customers** — manufacturers, equipment buyers — get richer product configurators. - **Long-tail customers** — small-volume buyers — get self-service onboarding to reduce per-customer cost of acquisition. ## Operational reality The biggest portal mistake is launching without serious change management for customers. Customers who never used a portal need education and gentle onboarding. Pair launch with sales rep outreach to top customers; give them tutorials, video walkthroughs, and one-on-one support for the first weeks. --- # Customer Voice survey integration with Dynamics 365 How Customer Voice integrates with D365 Customer Service and Marketing — survey lifecycle, triggers, response capture, and the NPS / CSAT operational rhythms. Source: https://www.solvingdynamics365.com/guides/customer-voice-survey-integration Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 Asking customers what they think — and listening to the answers — is foundational to customer experience programs. **Customer Voice** (Microsoft's survey product, built on Forms Pro lineage) integrates with Dynamics 365 to capture feedback at moments of truth: after a case is resolved, after a purchase, after a service visit. Operational rhythm matters more than the tool itself. **What Customer Voice is.** - A web-based survey designer. - Built on Forms-style authoring. - Integrates with Dataverse for response storage. - Supports email, SMS, in-app survey delivery. - Analytics built in. **Survey types.** - **Net Promoter Score (NPS)** — "How likely to recommend, 0–10?" - **Customer Satisfaction (CSAT)** — typically 1–5 or smiley faces. - **Customer Effort Score (CES)** — "How easy was that?" - **Free-form questions** — open feedback. - **Multi-question structured surveys** — detailed. The choice depends on what you're measuring and how often. **Trigger patterns in Dynamics.** - **Case resolved** — CSAT survey sent automatically. - **Field service work order completed** — service satisfaction survey. - **Sales opportunity won** — post-sale NPS. - **Account renewal** — relationship survey. - **Anniversary milestones** — periodic relationship check. Power Automate flows trigger survey sends based on Dataverse events. **Survey distribution.** - **Email** — most common. - **SMS** — for mobile-first audiences. - **In-product link** — embedded in app. - **QR code** — for in-store or physical touchpoints. Multi-channel survey distribution maximises response rates. ## Personalisation Surveys include: - Customer name. - Reference to the specific case / order / event. - Branded look. - Pre-populated fields where possible (rating only one click). Personalised surveys have higher response rates. ## Response capture Customer submits: - Response stored in Dataverse. - Linked back to the source record (case, order, etc.). - Anonymous responses also supported. The linkage is essential: NPS without context is just a number. **Analytics.** - **Overall scores** — NPS, CSAT averages. - **Trend over time.** - **Per-segment** — by region, by product, by agent. - **Verbatim comments** — text analysis for themes. Customer Voice has built-in dashboards; Power BI extends. **Response rate.** - Email surveys typical 10–20%. - SMS sometimes higher. - In-product surveys can hit 30%+. - Incentives raise rates but may bias. Track response rate; declining rates signal survey fatigue or bad timing. ## Closing the loop Customer responds; what happens next? - **Detractor (NPS < 6)** — escalate; manager follow-up. - **Promoter (NPS 9-10)** — thank; opportunity for testimonial. - **Neutral** — analyse comments for improvement opportunities. Automated workflows ensure follow-up happens. ## Multi-language Surveys can be authored in multiple languages: - Detect customer's preferred language. - Send appropriate version. - Aggregated reporting across languages. ## Microsoft Forms Pro / Forms vs Customer Voice Some history: - **Microsoft Forms** — general-purpose form tool. - **Forms Pro** — formerly for business surveys; rebranded. - **Customer Voice** — current branding for Dynamics-integrated survey. The lineage matters when reading older documentation; capabilities consolidated under Customer Voice. **Integration with Dataverse.** - Customer Voice surveys defined in Dataverse-stored entities. - Responses written to Dataverse. - Standard reporting and Power BI access. - Workflow / Power Automate triggers. The Dataverse foundation means all the standard Dynamics extensibility applies. **Anonymous responses.** - Option to allow anonymous submissions. - For sensitive topics (employee surveys). - Anonymous responses can't trigger personalised follow-up. Choose carefully: anonymity vs personalisation trade-off. **Common pitfalls.** - **Survey too long.** Response rate drops with question count. - **No closure loop.** Customer responds; nothing happens; feedback wasted. - **Survey fatigue.** Same customers surveyed too often; ignored. - **Negative responses unfollowed.** Detractors not addressed; relationship deteriorates. - **No segmentation in analysis.** Single overall score; misses important patterns. - **No qualitative analysis.** Text comments ignored; rich insight wasted. **Best practices.** - **Short surveys.** 1-3 questions for transactional. - **Personalised triggers** — timing matches customer's moment. - **Closed-loop process** — defined response per outcome. - **Action ownership** — specific roles act on feedback. - **Periodic review** — survey design refresh based on response patterns. **Operational rhythm.** - **Daily** — review responses; trigger escalations. - **Weekly** — score trend monitoring. - **Monthly** — text analysis; theme identification. - **Quarterly** — survey program review; adjust questions and triggers. ## Strategic positioning Customer Voice is the survey tool of choice for organisations on Dynamics 365 — the integration depth makes triggering, linking, and analysing surveys efficient. The technical setup is straightforward; the operational discipline of using survey data is where value emerges. Surveys without follow-up are theatre; surveys driving systematic improvement compound into competitive advantage over years. Invest in the program design, not just the survey tool. --- # Customer Voice surveys in Dynamics 365 Microsoft Customer Voice — building, distributing, and acting on customer surveys integrated with Dynamics 365. Source: https://www.solvingdynamics365.com/guides/customer-voice-surveys Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 **Dynamics 365 Customer Voice** is Microsoft's customer-feedback platform. It collects survey responses, runs sentiment analysis, and feeds the data back into Dynamics 365 records — opportunities, cases, work orders, accounts — so the rest of the business can act on what customers actually say. For organisations that run NPS, CSAT, or post-interaction surveys, Customer Voice is the natural choice when the data should land in CRM. ## Building a survey Customer Voice surveys are built in a drag-and-drop designer with question types: short text, long text, choice (single or multi), Likert / rating, NPS, ranking, date, file upload. Conditional branching lets a survey adapt to earlier answers — a low rating triggers a follow-up reason question, while a high rating skips straight to a thank-you screen. ## Survey themes and branding Custom themes, logos, fonts, and colours match the survey to the company's brand. Multi-language surveys present the same survey in multiple languages, with translations stored alongside the original. **Distribution channels.** - **Email** — sent via Customer Voice's own mail or via Power Automate to Microsoft 365 mailboxes. - **Embedded link** — generated for inclusion in any external email, web page, SMS, or QR code. - **In-product / portal embedding** — embed the survey inside a Dynamics 365 form, a Power Pages portal, or any iframe-friendly host. - **SMS** — through Azure Communication Services or partner SMS gateways triggered by Power Automate. - **Teams** — bot-driven surveys delivered as adaptive cards in Teams chats. - **Power Automate flow** — flows triggered by Dataverse events fire the survey at the right moment (case resolved, opportunity won, work order completed). ## Triggering Best-practice surveys are *event-triggered* rather than periodic. Case resolved → send CSAT survey one hour later. Opportunity closed-won → send relationship survey two weeks later. Work order completed → send satisfaction survey same day. Power Automate flows orchestrate the timing and conditions. ## Response handling Each survey response creates a **survey response** record in Dataverse, linked to the originating record (case, opportunity, etc.) and to the contact. Responses include: - The structured answers. - Computed scores (overall, by category). - Sentiment analysis on free-text answers. - Time-to-respond and completion percentage. ## Actions from responses Power Automate flows trigger on survey responses to: - Create a follow-up case if a customer gave a low rating. - Notify an account manager if a key customer scored below threshold. - Update the contact's NPS score on their record. - Aggregate scores into dashboards for executive review. ## Analytics Built-in dashboards show response rate, score distribution, sentiment trend, and breakdown by survey, segment, or time period. Power BI templates extend the analytics with cross-system slicing (e.g. CSAT by product line, by region, by support agent). ## Anonymous vs identified Surveys can be anonymous (no contact linkage, no follow-up) or identified (linked to contact, follow-up enabled). The right choice depends on regulatory and trust considerations. **Practical use cases.** - Post-case CSAT. - Quarterly NPS. - Post-purchase customer experience. - Internal employee surveys (Customer Voice does this too). - Event feedback. - Win-loss analysis after closed opportunities. ## Licensing Customer Voice is sold per response volume — survey responses per month, with capacity tiers. Bundled with some Dynamics 365 SKUs. --- # Cutover planning for Dynamics 365 How to plan the production cutover for a Dynamics 365 implementation — the cutover playbook, data migration windows, parallel running. Source: https://www.solvingdynamics365.com/guides/cutover-planning-for-dynamics-365 Section: Implementation / Project execution Published: 2026-05-01 The cutover — the moment when a Dynamics 365 implementation goes from "configured and tested" to "live and used" — is one of the highest-pressure, highest-risk phases of any deployment. Hours and days matter; small details cause big problems; communication is essential. Cutover planning is the discipline of de-risking those days through detailed advance preparation. ## What "cutover" means The set of activities that transition the business from the old system to the new: - Final data migration to new system. - Legacy system shut-down (or read-only mode). - New system go-live. - Business operations resume on new system. - Stabilisation period (hypercare). Cutover is typically a multi-day event with carefully sequenced activities. ## Cutover playbook A detailed, time-sequenced document with: - **Activity list** — every step, in order. - **Time estimates** per step. - **Ownership** — who's responsible. - **Dependencies** — what must complete first. - **Validation** — how to verify each step succeeded. - **Rollback** — what to do if something fails. - **Decision points** — go/no-go gates with clear criteria. The playbook is rehearsed in mock cutover events before the real one. ## Mock cutovers Critical practice: - Run the full cutover playbook in a non-prod environment. - Time each activity. - Identify bottlenecks. - Test rollback at specific failure points. - Refine the playbook. A typical major implementation runs 2–3 mock cutovers before the real one. Each reveals issues that real cutover would magnify. **Data migration timing.** - **Full migration vs delta migration** — full = all historic data; delta = only recent. Driven by data volume and business need. - **Pre-cutover bulk migration** — most data migrated days/weeks before cutover. - **Cutover delta** — the last day's data moves during the cutover window. The delta minimises cutover window but adds complexity (cleanup logic, reconciliation). ## Cutover window Typical patterns: - **Long weekend** — Friday evening through Monday morning; 60 hours; most common. - **Single-day** — sufficient for very simple cutovers. - **Phased** — region by region or function by function; longer overall but smaller per-region disruption. The window is chosen for minimum business impact — when activity is naturally lowest. **Cutover phases.** - **Pre-cutover (week before)** — final preparations, data reconciliation, communication. - **Cutover start** — legacy system goes read-only; data extraction begins. - **Migration** — data moves to new system; verified. - **Validation** — business stakeholders review key reports. - **Go-live** — new system available to users. - **Hypercare (first 2–4 weeks post-go-live)** — heightened support presence. **Communication plan.** - **Pre-cutover communications** — what's happening, when, who's affected. - **During cutover updates** — status reports at planned milestones. - **Go-live announcement** — system available. - **Hypercare support contacts** — how to get help. - **Issue triage** — defined channels for reporting problems. Communication discipline reduces anxiety. Even when things go smoothly, regular updates keep stakeholders engaged. ## Parallel running Some implementations run old and new in parallel: - **Pure parallel** — every transaction in both systems; cross-check daily. - **Asymmetric parallel** — read-only legacy for reference; live operations on new. Parallel running de-risks but doubles operational cost. Used when: - High-stakes regulatory transitions. - Major architectural changes. - Specific reporting period needs reconciliation. Most projects don't run full parallel; they accept go-live risk in exchange for simpler operations. ## Hypercare The period immediately post-go-live: - **Dedicated support team** — implementation partner + internal team on standby. - **Daily stand-ups** — review issues, status, decisions. - **Triage process** — bugs prioritised; quick fixes deployed. - **User feedback loop** — listen carefully; small issues compound. - **Performance monitoring** — system under real load; surprises emerge. Typical hypercare duration: 2–4 weeks. After that, normal support model. ## Rollback decisions A point of no return is reached: - After data migration is complete, rollback means undoing many hours of work. - Going back to legacy means re-keying transactions made on new. - Cost of rollback grows hourly. Defined go/no-go criteria with quantified thresholds — "if open critical defects > N, abort." Without explicit thresholds, decisions become political. **Common cutover failures.** - **Data migration runs longer than expected.** Window blown; business returns Monday to incomplete system. - **Reference data inconsistencies.** Tax codes, currencies, calendars not aligned; transactions fail at first attempt. - **Integration not ready.** Third-party systems not switched over; data flows broken. - **User access wrong.** Half the users can't log in. - **Performance issues at scale.** Worked in test, fails under production load. - **Reports broken.** First month-end close discovers reports don't match. Each failure has cascading effects. The playbook should anticipate likely failures and have ready responses. **Validation checklist.** - All customers / accounts migrated. - Open orders / invoices reconciled to legacy totals. - Trial balance matches. - User roles assigned. - Integrations tested end-to-end. - Key reports validated. - Email and notifications working. - Mobile access functional. The list is built into the playbook; each item has an owner and validation method. **Common pitfalls.** - **Too little time for mock cutovers.** First real cutover surfaces issues that mocks would have caught. - **Communication too cautious.** Stakeholders don't know what's happening; rumours fill the void. - **No hypercare staffing.** Implementation team leaves after go-live; users have no support during the most critical period. - **Optimism about timing.** Activities take longer than estimated; window blown. - **Rollback never tested.** First rollback attempt is during a real incident; doesn't work cleanly. **Operational rhythm leading up to cutover.** - **T-90 days** — cutover plan drafted; mock cutover scheduled. - **T-60** — first mock cutover; refine. - **T-30** — second mock cutover; finalise. - **T-14** — content freeze on legacy data; final data scoping. - **T-7** — final user communications; final environment prep. - **T-0** — cutover executes. - **T+1 to T+14** — hypercare. - **T+30** — post-cutover retrospective. ## Strategic positioning Cutover is the moment where months or years of implementation work either land successfully or come undone. The investment in detailed planning, repeated rehearsal, and clear governance during the actual event is the difference between a smooth go-live and a chaotic one. Mature programmes treat cutover as a project within the project, with dedicated leadership, comprehensive planning, and unambiguous decision authority. The stakes warrant the investment. ## Where to go next The shape of the cutover follows from [phased vs big-bang go-live](https://www.solvingdynamics365.com/guides/phased-vs-big-bang-go-live); what follows it is [hypercare](https://www.solvingdynamics365.com/guides/hypercare-after-go-live) and [run-book operations](https://www.solvingdynamics365.com/guides/run-book-operations-after-dynamics-365-go-live). The heaviest task in the window is [data migration](https://www.solvingdynamics365.com/guides/data-migration-strategy-for-dynamics-365). One Business Central-specific cutover step people forget — job queue entries after a restore or copy — is in [job queue errors](https://www.solvingdynamics365.com/guides/business-central-job-queue-errors). --- # Cycle counting and physical inventory in Business Central How Business Central handles inventory counting — physical inventory journals, cycle counting, item counting periods, and the reconciliation discipline. Source: https://www.solvingdynamics365.com/guides/cycle-counting-and-physical-inventory-in-bc Section: Business Central / Inventory & warehouse Published: 2026-05-27 Inventory accuracy is operationally fundamental — a system that says 100 widgets on hand when the warehouse holds 87 produces wrong promises to customers, wrong picking instructions, wrong cost of goods sold. **Cycle counting** (frequent counting of small subsets) and **full physical inventory** (counting everything periodically) are the two practices Business Central supports for keeping inventory honest. ## Physical inventory journals The fundamental counting tool. A **physical inventory journal**: - **Header** — date, location, period. - **Lines** — one row per item being counted, with the system-recorded quantity and a field for the counted quantity. The flow: 1. **Calculate Inventory** action populates the journal with all items in scope (filtered by location, item, item category, bin). The system quantity is filled in. 2. **Print Count Sheets** — paper or PDF lists for warehouse workers to use during counting. 3. **Workers count** physical inventory and write counted quantities on the sheets. 4. **Enter counted quantities** into the journal (manually, via Excel import, or via mobile scanning). 5. **Calculate difference** — system quantity minus counted quantity per line. 6. **Investigate exceptions** — large variances get investigated before posting (could be a count error, a posting error, or genuine shrinkage). 7. **Post the journal** — adjustment entries hit the item ledger and value entries; the GL receives the variance offset to inventory adjustment accounts. ## Cycle counting Instead of counting everything at once (disruptive), cycle counting counts small subsets continuously — a few hundred SKUs every day, every week, rotating through the catalogue so every item is counted N times per year. Business Central supports cycle counting through **item counting periods**: - Each item has a counting period (Daily, Weekly, Monthly, Quarterly, Annually, or custom). - Items with the same period are counted on the same cycle. - The **Calculate Counting Period** routine identifies items due for counting today. - The user generates a physical inventory journal for those items, counts, and posts. ## ABC analysis and counting frequency Mature operations tier inventory by importance: - **A-class items** (high value or high velocity, ~10–20% of SKUs accounting for 70–80% of inventory value) — count weekly or monthly. - **B-class items** (medium) — count quarterly. - **C-class items** (low value, slow movers) — count annually. This focuses counting effort where accuracy matters most. The **ABC analysis report** in Business Central segments items; the **counting period** on each item card aligns. ## Mobile scanning For larger warehouses, manual paper-based counting is slow and error-prone. Mobile scanning via partner ISVs (Tasklet, Insight Works, Continia WMS): - Worker scans bin, then scans each item / quantity. - Data flows directly to the physical inventory journal in BC. - No paper, no transcription errors, faster cycle times. ## Locations and bin counting Multi-location operations need counting per location; bin-managed locations need counting per bin. The physical inventory journal supports filters for these scopes: - **Bin counting** — list every bin and its contents, count each bin separately. - **Stockpile counting** — for locations without bins, count items in aggregate. - **Cross-location counting** — same item across multiple locations counted together for the analytical view. ## Counting and item tracking Items with lot or serial tracking require **tracking-level counting** — count by lot or serial, not just total quantity. The journal supports tracking specifications; the counted quantity per lot / serial must match the system's tracking records. ## Reconciliation to GL Posted physical inventory adjustments hit: - Item ledger (quantity adjustment). - Value entry (cost adjustment per inventory layer). - GL: inventory account (debit / credit depending on direction) and inventory adjustment account (offset). After posting, the **Inventory Valuation** report should reconcile to the GL inventory balance. **Frequency and discipline.** - **Daily** cycle counting for high-velocity items. - **Weekly** cycle counting for moderate-velocity. - **Monthly** cycle counting for slow-movers. - **Annual full physical inventory** as the safety net (legal / audit requirement in some jurisdictions). Without ongoing cycle counting, accuracy drifts; with active cycle counting, full physical inventory becomes a confirmation rather than a surprise. **Common pitfalls.** - **Counting without investigating variances** — adjustments post without understanding why; root cause never fixed. - **Frozen mid-count discrepancies** — if posting / shipping continues during a count, the count is invalid. Pause activity per location. - **Tracking inconsistencies** — counted quantity doesn't match the lot / serial breakdown; partial-tracking adjustments are error-prone. ## Operational reality Inventory accuracy is unglamorous and continuous. Cycle counting is a daily discipline; full physical inventory is the annual safety net. Both compound — well-run operations have inventory variances under 1%; poorly-run operations have variances over 5% perpetually. --- # Data classification for Dynamics 365 How to classify data in Dynamics 365 to drive security, retention, and compliance decisions — classification tiers, where to record them. Source: https://www.solvingdynamics365.com/guides/data-classification-for-dynamics-365 Section: Implementation / Operations & support Published: 2026-05-01 Different data has different protection needs — public marketing content vs employee compensation vs customer credit card data. **Data classification** assigns each data element a sensitivity tier, driving security controls, retention rules, and compliance decisions. For Dynamics 365 deployments, classification is a programme spanning Dataverse, F&O, integrations, and the broader Microsoft Purview ecosystem. ## Classification tiers Most organisations use 3–4 tiers: - **Public** — intentionally shared externally. - **Internal** — for employees, not external. - **Confidential** — restricted internally; need-to-know. - **Highly Confidential / Restricted** — most sensitive; minimal access. Some add a "Personal" or "Regulated" tier for GDPR / HIPAA / PCI data. **Where classification lives.** - **Microsoft Purview Information Protection** — central labelling for M365 content (files, emails). - **Dataverse column-level classification** — Dataverse columns can be flagged with a data classification. - **F&O table / field properties** — some F&O fields are flagged as personal data for GDPR purposes. - **Custom classification fields** — extension fields capturing sensitivity per record. The challenge: making classification consistent across these surfaces. ## Classification at the column level In Dataverse, columns can be marked with a classification: - Personal data. - Financial data. - Health data. - Other regulated data. The classification surfaces in: - **GDPR reports** — what personal data does this table hold? - **DLP policies** — sensitive columns trigger additional protection. - **Audit logs** — access tracked. ## Personal data identification GDPR and similar regulations require identifying personal data: - Names, addresses, emails. - Identifiers (employee IDs, customer IDs). - IP addresses. - Behavioural data (clicks, purchases tied to a person). Dataverse provides a `Personal Information` flag at column level. Mark every personal data column; report compiles automatically. ## Classification at the record level Beyond column-level, individual records may have different sensitivity: - A customer account flagged as VIP — sensitive. - A standard customer — internal. - A test customer — public-equivalent. A `Sensitivity` choice column on records captures this; downstream filtering and access logic respects it. **Microsoft Purview integration.** - Purview sensitivity labels can be applied to Dataverse rows via integration. - Labelled content triggers Purview policies (DLP, retention, expiration). - Records can inherit labels from related content. The integration is still maturing; capabilities expand each wave. **Driving controls from classification.** - **Access** — restricted classifications require elevated roles. - **Audit** — high-classification access logged in detail. - **Encryption** — at-rest and in-transit; everything in Dataverse is encrypted, but additional keys for higher classifications via CMK. - **Retention** — different retention periods per classification. - **Geographic** — some classifications cannot leave specific regions. - **Sharing** — restricted classifications can't be shared externally. **Implementation pattern.** 1. **Define the classification tiers** — leadership decision; documented. 2. **Identify regulated categories** — GDPR personal data, PHI, PCI, etc. 3. **Inventory current data** — which Dataverse tables and F&O entities hold what. 4. **Map data to tiers** — every meaningful field classified. 5. **Implement controls** — security, retention, encryption. 6. **Train staff** — what each tier means operationally. 7. **Monitor** — periodic reclassification, drift detection. **Common pitfalls.** - **Over-classification.** Everything marked highly confidential; controls so strict business can't function. - **Under-classification.** Sensitive data not identified; exposure when later discovered. - **Classification static.** Classifications set at deployment, never reviewed; data nature changes but classification doesn't. - **No enforcement.** Classification exists in metadata; nothing actually limits behaviour. - **Cross-system inconsistency.** Same data classified differently in Dataverse vs F&O vs SharePoint. - **Training gap.** Staff don't understand what each classification means; behavioural inconsistency. **Regulated data specifics.** - **PCI (credit card)** — credit card numbers must never enter Dynamics directly; gateway tokenisation only. - **HIPAA (health)** — strict access controls; audit logs reviewed; encryption with CMK considered. - **GDPR (EU personal)** — right to erasure, right to access, right to portability — all need data inventory. - **SOX (financial)** — controls over financial systems; segregation of duties. Each regulated category has specific operational requirements beyond classification. ## Data residency Some classifications trigger residency: - "EU customer data" — must stay in EU regions. - "China data" — must stay in China. Dynamics 365 supports multi-region deployments; the classification tells you where the data should live. ## Right to erasure / data subject requests GDPR-style rights require: - Find all data about a subject. - Compile in portable form. - Delete after retention obligations exhausted. This is hard without classification — if you don't know which fields hold personal data, you can't fulfill the request. **Operational rhythm.** - **At record creation** — classification assigned (default or explicit). - **Quarterly review** — sampling-based classification accuracy check. - **Annual full audit** — comprehensive review. - **At policy change** — reclassification when new regulations or business rules emerge. ## Strategic positioning Data classification is the foundation of information security in Dynamics 365. Without it, every security and compliance decision happens reactively. With it embedded into the data model and processes, decisions become systematic. The investment is substantial — multi-month classification programme is typical — but the payback in compliance posture, breach prevention, and operational clarity is high. Most regulated organisations cannot defend their posture to auditors without it. --- # Data entities and the Data Management Framework How bulk data import, export, and integration work in Dynamics 365 Finance and SCM — entities, projects, and the recurring integration pattern. Source: https://www.solvingdynamics365.com/guides/dynamics-365-data-entities-and-dmf Section: Finance & SCM / Overview & platform Published: 2026-05-01 The **Data Management Framework (DMF)** is Dynamics 365 Finance and Supply Chain's tool for bulk import and export. Where Dual-write handles synchronous, transactional sync, DMF handles batch — initial migrations, large recurring loads, and exports for downstream systems. ## Data entities A **data entity** is a denormalised view of one or more underlying tables, presented as a single shape with stable field names. Microsoft ships hundreds — customer, vendor, item, sales order header, sales order line, sales tax, fixed asset, GL journal voucher, project transaction, and so on. Entities are versioned so consuming integrations don't break when the underlying database evolves. ## Data Management workspace The **Data Management** workspace in F&O is where users define **data projects** — collections of entities with mappings, filters, and source format (CSV, XML, Excel, ODBC) — and run import or export jobs. A project can be a one-off load or a recurring scheduled run. ## Import An import project maps incoming source columns to entity fields, validates the data, and either commits in bulk or stages for review. **Composite entities** import related tables together (e.g. sales order header + lines + charges as one transactional unit). The framework provides error handling: rows that fail validation are quarantined for correction without blocking the rest of the batch. ## Export An export project pulls entity data out as CSV, XML, or to an Azure SQL endpoint. Exports can be filtered, scheduled, and incremental (delta-only based on a change timestamp). ## Recurring integrations The **Recurring Integrations** API exposes data projects as HTTP endpoints, so external systems can `POST` import payloads or `GET` export results on a schedule. The pattern: external app pushes a CSV to the F&O endpoint every hour; F&O queues the import for processing. ## The BYOD pattern (deprecated) *Bring Your Own Database* exported entity data into a customer-owned Azure SQL Database. BYOD is being phased out in favour of **Synapse Link** and **Microsoft Fabric**, which stream F&O tables into a lakehouse without requiring data entities as the export shape. ## Performance DMF jobs can run in parallel threads, configurable per project. Large initial loads (millions of rows) are tuned with parallel processing, narrow batch sizes, and selective indexes. A reasonable initial customer migration loads in hours, not days, when tuned. ## Best practice Use Dual-write for synchronous CRM ↔ ERP sync, DMF for batch ETL and high-volume migrations, and Synapse Link or Fabric for analytics export. --- # Data integration for real-time marketing in Customer Insights — Journeys How real-time marketing journeys consume external data — trigger events, custom triggers from external sources. Source: https://www.solvingdynamics365.com/guides/real-time-marketing-data-integration Section: Integrations / Data movement Published: 2026-05-01 A journey responds to events. A high-quality journey responds to **the right events at the right moments**. That depends on data flowing into Customer Insights — Journeys from across the marketing and operational stack: ecommerce platforms, web analytics, mobile apps, transaction systems, support cases. Designing the data integration is half the work of building a marketing programme. **Event types.** - **System events** — built into Customer Insights — Journeys (email opened, link clicked, form submitted). - **Dataverse events** — record changes in any Dataverse table. - **Custom triggers** — externally defined events emitted from any source. Custom triggers are the integration extension point — anything that happens in any system can trigger a journey if it emits a custom trigger. **Custom trigger anatomy.** - **Trigger definition** — name, schema of properties. - **Properties** — typed fields (string, number, datetime, etc.). - **Audience binding** — how the trigger identifies the recipient. - **Description** — human-readable purpose. Example: a "Cart Abandoned" trigger with properties `cartValue`, `cartItems`, `abandonedAt`, identified by `customerId` mapping to a contact in Customer Insights. **Emitting a custom trigger.** - **Power Automate** — `Send a custom event` action. - **REST API** — direct POST to the journey API. - **Dataverse plug-in** — fires from server-side logic. - **Azure Function** — fires from custom event source. The pattern: source system emits trigger → journey processes immediately. **Authentication for trigger emission.** - API key (simpler, less secure). - Service principal OAuth (preferred for production). - Power Automate uses connector credentials. For high-volume emissions, rate limiting applies; design for graceful backoff. ## Unified profile from Customer Insights — Data When CI-Data is paired with CI-Journeys: - CI-Data unifies customer profiles across multiple sources (CRM, ecommerce, transactional). - The unified profile is the audience for journeys. - Profile attributes are usable in personalisation. Without CI-Data, CI-Journeys uses Dataverse contacts as the audience — simpler but less powerful for cross-system unification. **Common integration patterns.** - **Ecommerce → CI-Journeys** — order placed, cart abandoned, browsed but not purchased. - **Mobile app → CI-Journeys** — app opened, feature used, in-app conversion. - **Support system → CI-Journeys** — case opened, case resolved, NPS score. - **CRM (Dynamics or Salesforce) → CI-Journeys** — opportunity stage change, contract signed. - **Web analytics → CI-Journeys** — page viewed, video watched, content downloaded. Each integration is a source emitting custom triggers, mapped to the unified profile. ## Profile enrichment Beyond triggers, profile data flows from sources: - **Static attributes** — name, email, country. - **Behavioural** — engagement scores, recent activity. - **Transactional** — total spend, average order value. - **Inferred** — segments, propensity scores. CI-Data computes these; CI-Journeys consumes them. **Real-time vs batch.** - **Real-time triggers** — event arrives, journey starts within seconds. - **Batch updates** — profile attributes updated via daily refresh. Both are needed: real-time for event-driven engagement; batch for profile maintenance. ## Webhooks for ingestion A common pattern: - External system POSTs a webhook on event. - Azure Function receives, validates, transforms. - Azure Function calls CI-Journeys API with the custom trigger. The Azure Function provides: - Authentication abstraction. - Schema validation. - Idempotency. - Error handling and retry. Building this once and reusing for all integration points is more maintainable than per-source custom code. ## Identity resolution A challenge: matching event-source identity to the unified profile. - **Source identifies by email** → email match. - **Source identifies by external ID** → mapping table. - **Anonymous events** → cookie / device ID → eventual profile association. CI-Data has identity resolution logic; CI-Journeys benefits from it via the unified profile. ## Schema management Custom triggers have schemas: - **Versioning** — when adding properties, version the trigger. - **Required vs optional** — required properties block emission if missing. - **Documentation** — what each property means, what valid values are. Without governance, schemas drift; emitters and journeys get out of sync. **Volume and throttling.** - Custom trigger emission has rate limits. - High-volume scenarios need batching or queuing. - Marketing-grade volume (millions of events per day) needs careful architecture. **Common pitfalls.** - **No deduplication.** Same event emitted twice; recipient gets two journey instances. - **Identity mismatch.** Event has email but unified profile has phone; no association; journey doesn't fire. - **Schema drift.** Emitter changes property; journey breaks silently. - **No monitoring.** Events missing; journeys not firing; nobody notices until campaign metrics drop. - **Privacy missing.** Event includes personal data without proper consent; compliance issue. - **Source-side failures cascade.** Source system down; events lost; backfill complex. ## Privacy considerations Every event flowing into CI-Journeys may contain personal data: - **Consent** — recipient consented to processing. - **Retention** — events retained per policy. - **Purpose limitation** — events used only for the consented purposes. - **Subject access requests** — events included in DSARs. Build privacy into integration from day one; retrofit is hard. **Observability.** - **Trigger emission logs** — count, success rate, latency. - **Journey entry counts** — vs triggers emitted. - **Failure investigation** — when journeys don't fire as expected. ## Strategic positioning Marketing automation's value compounds with data quality and integration breadth. A journey responding to one event is fine; a journey responding to a coordinated set of behavioural and transactional events across the customer lifecycle is powerful. The investment in clean, reliable, observable data integration is what makes marketing programmes scale beyond simple email campaigns into orchestrated customer experiences. --- # Data lake export for Dynamics 365 Finance and Operations How F&O publishes data to Azure Data Lake — Bring Your Own Database (BYOD) legacy pattern, Export to Data Lake, Synapse Link for F&O, and Fabric Link for D365. Source: https://www.solvingdynamics365.com/guides/data-lake-export-for-dynamics-365-finance Section: Integrations / Data movement Published: 2026-05-01 For analytical workloads against Dynamics 365 Finance and Operations, the export-to-lake pattern has evolved through multiple iterations. Knowing which one is current — and which is deprecated — matters for new investments and existing migrations. **The progression.** - **BYOD (Bring Your Own Database)** — original pattern; F&O exports data entities to a customer-owned Azure SQL Database. Legacy; being phased out. - **Export to Data Lake** — wave 2 2020; replaces BYOD for ADLS-based analytics. Currently in maintenance mode. - **Synapse Link for Dataverse with F&O integration** — wave 2 2023+; surfaces F&O data through the Dataverse Synapse Link. - **Fabric Link for D365** — wave 2 2024+; the current strategic direction. For new deployments, target Fabric Link. For existing BYOD/Export to Data Lake, plan migration. ## BYOD (legacy) F&O exports selected data entities to an Azure SQL Database the customer provides: - Configurable per entity (full or incremental). - Scheduled refresh. - Customer's responsibility to manage the SQL Database. - Power BI, Power Query, or other tools connect to the SQL. Pros: SQL is familiar; customer controls. Cons: SQL cost; not modern lake-based; deprecation announced. ## Export to Data Lake F&O exports to Azure Data Lake Storage Gen2: - CSV files per entity. - Common Data Model (CDM) folder structure. - Refresh on schedule or near-continuous. - Synapse SQL serverless queries the files. Pros: Lake-native; columnar potential. Cons: CSV is suboptimal; CDM folder format somewhat dated; in maintenance mode. ## Fabric Link for D365 The current best-practice path. From the F&O side: - Configure Fabric Link in F&O admin. - Select entities to replicate. - Data lands in OneLake as Delta Parquet. - Available immediately in Fabric Lakehouse and Warehouse. Pros: Modern format; OneLake-native; Direct Lake-ready; integrated with Fabric semantic models. Cons: Fabric capacity required; newer feature evolving. ## Data scope Both Export to Data Lake and Fabric Link surface: - F&O data entities (the same ones used for integration). - Selectable per entity. - Both initial bulk and incremental updates. - Field-level granularity. The export catalog is large; choosing which entities to replicate is curation work. **Performance and latency.** - **BYOD** — refresh based on configured schedule, typically minutes to hours. - **Export to Data Lake** — similar; minutes between batch flushes. - **Fabric Link** — continuous delta; minutes from change to availability. For most reporting workloads, any of these is fast enough. Real-time operations against F&O data require different approaches. **Schema considerations.** - F&O entities are denormalised views over underlying tables. - Replication preserves the entity structure. - Joins between entities happen at query time in the lake. - Underlying F&O tables (e.g., CustTable, VendTable) are not directly replicated; only their entities. For some advanced scenarios, table-level replication via direct database access is needed; this is unsupported and avoided. **Query patterns.** - **Synapse SQL serverless** — `SELECT * FROM OPENROWSET(...)`. - **Fabric Warehouse** — T-SQL over OneLake Delta tables. - **Fabric Lakehouse** — SQL endpoint over Lakehouse. - **Spark notebooks** — for advanced transformations. - **Power BI** — semantic models in Direct Lake mode. The unified Fabric experience makes the queries simpler than the older Synapse Link pattern. **Combining F&O and Dataverse data.** - Customer 360 reporting needs F&O sales + Dataverse CRM data. - Both replicated to the same OneLake. - Join at query time across the two. - Single semantic model or warehouse model unifies them. This unification is the strategic value of OneLake — heterogeneous data sources made queryable as one. **Security.** - Lake-side security is file/folder based. - F&O row-level security doesn't carry over. - Sensitive entities need separate restricted containers or column-level masking. - Audit access to lake to ensure compliance. **Cost.** - **BYOD** — Azure SQL Database cost; meaningful. - **Export to Data Lake** — ADLS storage; relatively cheap. - **Fabric Link** — Fabric capacity consumption. Per gigabyte, the modern lake-based options are cheaper than BYOD's SQL. Fabric Link bundles cost into Fabric capacity, which has its own economics. **Migration paths.** - **BYOD to Fabric Link** — re-implement reports against Fabric Lakehouse; gradual cutover. - **Export to Data Lake to Fabric Link** — Microsoft provides guidance; migration tools emerging. - **Direct database access (unsupported) to Fabric Link** — refactor to entity-based; significant work. **Common pitfalls.** - **Sticking with BYOD past EOL.** Eventually unsupported; migration becomes forced. - **All entities replicated.** Storage and cost explode; query performance suffers from clutter. - **Schema changes in F&O broken downstream.** Pipeline picks up new fields; reports fail unless monitored. - **Performance not tuned.** Lake queries slow; complaints; investigation reveals partitioning or compression issues. - **No data lineage.** Reports reference replicated data without traceability to F&O source; auditor questions impossible to answer. **Operational rhythm.** - **Daily** — verify replication freshness; check for failures. - **Monthly** — review entity selection; retire unused replications. - **Quarterly** — performance review; cost analysis. - **Annually** — strategy review; align with Microsoft's direction. ## Strategic positioning F&O analytics has been a moving target across Microsoft's data strategy. The current direction is unambiguous: OneLake-based, Fabric-integrated. For organisations early in their F&O analytics journey, jump to Fabric Link directly. For organisations on BYOD or Export to Data Lake, plan migration on a 12–24 month horizon. The destination is clear; the path matters less than committing to start the journey. --- # Data loss prevention (DLP) policies in Power Platform How DLP policies in Power Platform restrict connector combinations across business and non-business data — policy design, environment scope. Source: https://www.solvingdynamics365.com/guides/dlp-policies-in-power-platform Section: Power Platform / ALM & governance Published: 2026-05-01 A maker building a Power Automate flow can connect to hundreds of services — Microsoft and third-party. Without governance, a flow could read from SharePoint (business data) and send to Twitter (public-facing) — accidentally exposing sensitive information. **Data Loss Prevention (DLP) policies** in Power Platform classify connectors into groups and restrict their combination within a single flow or app. Designed well, DLP prevents data leakage with minimal friction; designed poorly, it blocks legitimate work and drives shadow IT. ## The policy model Each policy: - **Scopes environments** — applies to specific environments or tenant-wide. - **Classifies each connector** into one of three groups: - **Business** — approved for business data. - **Non-Business** — not approved; commonly limited to specific use cases. - **Blocked** — cannot be used at all. A flow or app can use connectors only within one group, not across groups. So a flow with SharePoint (Business) cannot also use Twitter (Non-Business). **The three groups in detail.** - **Business** — Microsoft 365 connectors (SharePoint, Outlook, Teams), Dataverse, approved enterprise connectors (Salesforce, ServiceNow if approved by the org). - **Non-Business** — connectors approved for non-sensitive use (RSS, weather, Twitter for marketing). - **Blocked** — connectors not allowed at all (third-party file-sharing services with weak controls, untrusted endpoints). A connector defaults to one group; admins classify it explicitly. ## Custom connectors Connectors built in-house land in their own classification: - **Default group** — typically Business since they're built for business needs. - **Per-connector classification** — admins can override. A bring-your-own connector that hits an unapproved API can be blocked. **Tenant-wide vs environment-scoped.** - **Tenant-wide policy** — applies everywhere; default protection. - **Environment policy** — overrides tenant policy for a specific environment. Pattern: strict tenant policy by default; relaxed policy for sandbox / dev environments where experimentation is needed. ## Exemptions Critical for usability: - **Specific apps and flows can be exempted** from a policy. - **Service accounts** can have different policies. - **Admin override** for specific business needs. Without exemption mechanism, every edge case becomes a policy battle. ## HTTP connector specifics The generic HTTP connector is powerful and dangerous. DLP can: - **Block** entirely. - **Allow with URL pattern restrictions** — only HTTPS calls to specific domains. - **Allow with authentication restrictions** — only OAuth. Most regulated environments block generic HTTP outright and require specific connectors. **Policy enforcement.** - **At save time** — flow or app fails to save if it violates policy. - **At runtime** — running an existing flow violating policy halts. - **Existing flows** — when policy is tightened, existing flows that violate are suspended. The runtime suspension is operationally significant — sudden flow failures need maker notification and resolution path. **Maker experience.** - **Connector picker** shows which connectors are available in the current environment. - **Blocked connectors visible but greyed out** with explanation. - **Policy violation message** explains why a combination is rejected. Clear messaging reduces maker frustration; cryptic blocks generate support tickets. **Common policy patterns.** - **Strict tenant default + relaxed dev environments.** - **Per-business-unit policies** — different BUs have different acceptable use. - **Per-data-classification policies** — environments handling sensitive data have stricter policies. - **Layered policies** — multiple policies with priority order. **Reporting.** - **Policy adherence** — which flows/apps are compliant. - **Violation attempts** — what makers tried to do that was blocked. - **Exemption requests** — pipeline of pending approvals. The reporting is what makes DLP a programme, not just a config. Admins look at violation attempts to understand legitimate maker needs and adjust policy. ## DLP and Connector Action Controls A finer-grained mechanism: - Allow a connector but block specific actions. - "Use Twitter but not "Post Tweet." - "Use SharePoint but not delete site." Adds nuance but adds complexity; use when broad connector-level policy is insufficient. ## Sensitivity labels and DLP Microsoft Purview sensitivity labels integrate with Power Platform DLP: - Labelled content can have its handling restricted. - "Highly Confidential" labelled SharePoint files trigger additional DLP enforcement. For organisations with mature Microsoft information protection programmes, this integration deepens DLP. **Common pitfalls.** - **Default tenant policy too restrictive.** Makers can't build anything; complaints flood admin. - **Default tenant policy too permissive.** Data leaks happen. - **No exemption process.** Makers route around DLP by building outside Power Platform. - **Policy changes without communication.** Flows suddenly fail; makers blindsided. - **No reporting review.** Policy stays static; doesn't adapt to evolving maker needs. - **Maker training gap.** Makers don't understand DLP; mistakes compound. ## Operational rhythm Weekly violation review; monthly exemption decisions; quarterly policy refresh; annual strategic review. The policy should evolve — connectors come and go, business needs change, sensitivity classification shifts. ## Strategic positioning DLP is one of the most important governance levers in Power Platform. Without it, the maker community can technically and accidentally leak data. With it well-designed, the maker community has clear guardrails and can move fast within them. The investment in well-designed DLP pays back continuously; the cost of leakage is high. Managed Environments adds depth to DLP enforcement; for any regulated organisation, DLP is non-negotiable foundational governance. ## Where to go next DLP is applied per [environment](https://www.solvingdynamics365.com/guides/power-platform-environments) and enforced harder in [Managed Environments](https://www.solvingdynamics365.com/guides/managed-environments-in-power-platform); the [Center of Excellence starter kit](https://www.solvingdynamics365.com/guides/center-of-excellence-starter-kit) reports on it. [Custom connectors](https://www.solvingdynamics365.com/guides/custom-connectors-in-power-platform) need their own classification. The third-party tools DLP most often blocks are compared in [Power Automate vs Zapier](https://www.solvingdynamics365.com/guides/power-automate-vs-zapier). --- # Data migration into Business Central How to plan and run a Business Central data migration — what moves, what doesn't, and the tools that get you there. Source: https://www.solvingdynamics365.com/guides/business-central-data-migration Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-25 Data migration is usually the riskiest part of a Business Central implementation. The technology is fine; the discipline is hard. Here's how the project should run. ## What you typically migrate Master data first: chart of accounts, dimensions, customers, vendors, items (with prices, units of measure, costing methods), bank accounts, fixed assets, employees, and resources. Then opening balances: trial balance, open AR and AP transactions, open sales and purchase orders, inventory on hand by location, fixed-asset registers. Optionally, **historical posted documents** for legal or operational reference. ## What you usually don't migrate Years of detailed GL transactions — typically you load opening trial balances and keep the old system available read-only for history. Workflow history, sent emails, and report definitions are also typically left behind. The cost of moving deep history rarely pays back. ## The tools Microsoft ships two main paths. The **Data Migration wizard** (in BC under Assisted Setup) handles common sources — QuickBooks, Dynamics GP, generic Excel — with mapping templates. For larger or unusual migrations, **Configuration Packages** are the workhorse: you export the BC table structure as Excel, fill it in offline, validate, and import. Configuration Packages support related tables (customer + its address + its contacts in one package) and can be re-run iteratively. For high-volume or repeated runs, the **Business Central REST API** with a real ETL tool (Azure Data Factory, Power Automate, custom code) is the right answer. ## The cadence A typical project runs three migration cycles. **Cycle 1** is a structural dry run — load all master data, accept errors, find the messy fields. **Cycle 2** is a content dress rehearsal — clean data, opening balances, full validation by users. **Cycle 3** is the real cutover — final data export from the old system after period-end close, load into BC, reconcile, go live. ## Reconciliation is non-negotiable Trial balance ties to opening journal posted in BC. AR ageing ties to customer ledger entries. AP ageing ties to vendor ledger. Inventory on hand ties to item ledger valuation. The implementation isn't done until all four reconcile to the penny. ## Owner Data migration is the customer's job, with the partner's tooling. Pretending it's the partner's job is the most common reason migrations slip. --- # Data migration strategy for Dynamics 365 How to plan and run a data migration into Dynamics 365 — scope, tools, cycles, reconciliation, and the cultural side that breaks projects. Source: https://www.solvingdynamics365.com/guides/data-migration-strategy-for-dynamics-365 Section: Implementation / Project execution Published: 2026-05-01 Data migration is the silent killer of Dynamics 365 implementations. The technology is fine; the discipline is what fails. Most projects that slip do so because the migration plan is treated as an IT task instead of a business one. ## Scope decisions made early Pick a position on three big questions up front: 1. **How much history?** Trial balance only? Opening balances + 12 months of detail? Three years? Everything? More history adds time, cost, and risk; less history means consulting the legacy system for old enquiries. 2. **What's the cut?** Master data only, or transactional too? Open transactions (orders, invoices, balances) almost always migrate; closed transactions are often deferred to a legacy read-only archive. 3. **What's the cleanse strategy?** Migrate clean or migrate dirty? The honest answer is *cleanse before migration* — using the project as a cleanup forcing function — but it must be customer-led. ## The tools Each Dynamics 365 product has its preferred path: - **Business Central** — Configuration Packages, Data Migration wizard, REST API for high volume. - **Finance / SCM** — Data Management Framework (DMF) with data entities, recurring integration patterns for staged loads. - **CRM-side** — Dataverse Web API, Power Query Dataflows, Azure Data Factory for bulk, Power Automate for transformations. ## The cycles Plan three to four migration cycles minimum: 1. **Dry run 1** — structural test. Push everything, accept errors, find the messy fields. Surface unexpected mapping problems. 2. **Dry run 2** — content rehearsal with cleansed data. Users validate samples. 3. **Mock cutover** — full end-to-end including the cutover process, timing, and reconciliation. Identifies the slow steps in the real plan. 4. **Real cutover** — go-live. No surprises if cycles 1-3 were honest. ## Reconciliation Every migration ends with reconciliation: - Trial balance ties to opening journals posted in D365. - AR ageing ties to customer ledger. - AP ageing ties to vendor ledger. - Inventory on hand ties to item ledger valuation. - Open orders / WIP tie to their respective sub-ledgers. Migrate to the penny or migrate to a known reason for the variance. ## The cultural side Migration projects fail because: - The customer thinks the partner owns data quality. They don't; the customer does. - The cleanup work isn't resourced. It takes weeks per business area. - Source data is more fragmented and inconsistent than anyone admitted. - "We'll just clean it up after go-live" rarely happens. Address these in week one. ## Sign-off discipline Each cycle's reconciliation should be signed off by the controller (for finance), the warehouse lead (for inventory), the sales lead (for orders). Without sign-off, go-live ships uncertainty. ## Where to go next Product-specific mechanics: [Business Central data migration](https://www.solvingdynamics365.com/guides/business-central-data-migration), [the data management framework](https://www.solvingdynamics365.com/guides/data-management-framework-deep-dive) for Finance and Supply Chain, and [Dataverse data import templates](https://www.solvingdynamics365.com/guides/dataverse-data-import-templates). Test cycles need [test data management](https://www.solvingdynamics365.com/guides/test-data-management-for-dynamics-365), and the final load is the centrepiece of [cutover planning](https://www.solvingdynamics365.com/guides/cutover-planning-for-dynamics-365). --- # Data protection and compliance for Dynamics 365 How to address data protection and compliance requirements for Dynamics 365 — GDPR, HIPAA, SOX, industry regulations, and the operational practices. Source: https://www.solvingdynamics365.com/guides/dynamics-365-data-protection-and-compliance Section: Foundations / Security & compliance Published: 2026-05-01 Dynamics 365 holds customer data, employee data, financial data — all subject to varied data protection and compliance regulations. Failing to address these isn't just legal risk; it's brand and operational risk. **Data protection and compliance** in Dynamics 365 requires intentional design, ongoing operational discipline, and audit-ready documentation. **Key regulations.** - **GDPR** (EU) — broad personal data protection. - **CCPA / CPRA** (California) — US state privacy. - **HIPAA** (US healthcare) — PHI protection. - **PCI-DSS** — credit card data. - **SOX** (US financial) — controls over financial systems. - **GLBA** (US financial services) — customer financial info. - **PIPEDA** (Canada) — personal information. - **APP** (Australia) — Australian privacy principles. - **Country-specific** — many more. Each has specific requirements; multi-jurisdiction operations face all of them. **Microsoft's role and customer's role.** - **Microsoft** — operates the cloud platform; provides technical capabilities; meets infrastructure-level compliance. - **Customer** — configures, uses, governs data; meets organisational-level compliance. This shared responsibility model is fundamental. Microsoft can't comply on your behalf. **Microsoft compliance certifications.** - **ISO 27001, 27017, 27018** — security and cloud. - **SOC 1, 2, 3** — assurance. - **HIPAA BAA** — health data. - **GDPR DPA** — data protection. - **FedRAMP** — US government. - **CSA STAR** — cloud security. Foundational; verify Microsoft's certifications cover your regulatory obligations. **Customer responsibilities.** - Data classification. - Access controls. - Consent management. - Retention policies. - Right to access / erasure responses. - Breach response. - Documentation. - Training. - Vendor management. Each requires programme, not just configuration. **GDPR specifics for Dynamics.** - **Lawful basis** documented for processing personal data. - **Consent management** — where consent is the basis. - **DPIA** (Data Protection Impact Assessment) for high-risk processing. - **Records of processing activities (ROPA).** - **DPO** (Data Protection Officer) if required. - **Right to access** — subject access requests. - **Right to erasure** — delete on valid request. - **Right to portability** — provide data in machine-readable form. - **Breach notification** — 72-hour to authorities. Each obligation has operational implication; Dynamics supports but doesn't automate everything. ## Data subject access requests (DSARs) Operational process: - Receive request. - Verify identity. - Find all data about the subject across systems. - Compile. - Provide within regulated timeframe. For multi-system landscapes (Dynamics + external systems), DSAR is complex. Microsoft provides Privacy Compliance Manager tools. ## Right to erasure Similar complexity: - Find data. - Delete or anonymise. - Cascade across systems. - Document. - Respect exemptions (legal hold, etc.). Without process, requests overwhelm. **HIPAA specifics.** - **BAA** with Microsoft. - **Minimum necessary** principle — access only what's needed. - **Audit logs** for PHI access. - **Encryption** at rest and in transit. - **Breach response** with specific notifications. - **Workforce training.** For healthcare deployments, HIPAA is non-negotiable. **PCI-DSS.** - Credit card data must NEVER be stored in Dynamics. - Use tokenisation via payment processors (Stripe, etc.). - Tokens stored, not card numbers. - PCI scope minimised. For B2B services with card-on-file, tokenisation is the only acceptable pattern. ## Data classification As covered in [[data-classification-for-dynamics-365]]: - Public / Internal / Confidential / Restricted. - Personal data tagged. - Drives downstream controls. **Access controls.** - **Role-based access** — security roles in Dataverse. - **Field-level security** — restrict sensitive fields. - **Hierarchical security** — manager-direct-report. - **Conditional access** — based on device, location. - **MFA enforcement.** Layered defense; one mechanism alone insufficient. **Audit logging.** - **Dataverse audit** — record changes. - **Security audit** — login attempts. - **API audit** — programmatic access. - **Retention period** — per regulation requirements. Auditors verify logs exist; absence is finding. **Encryption.** - **At rest** — Microsoft default + optional customer-managed keys. - **In transit** — TLS standard. - **Specific fields** — for highest sensitivity. Default encryption sufficient for most; regulated industries may need CMK. **Data residency.** - **Where data is physically stored.** - **Where data may be processed.** - **Cross-border restrictions** for some jurisdictions. Microsoft offers regional deployments; select per requirements. **Vendor management.** - ISV apps process customer data. - Vendor compliance assessed. - Contracts include data handling terms. Third-party risk part of compliance picture. **Breach response.** - **Detection** — monitoring for anomalies. - **Containment.** - **Assessment** — what was affected. - **Notification** — to regulators and affected. - **Remediation.** - **Documentation.** Plan before breach; rehearse occasionally. **Records retention.** - Per regulation requirements. - Per business need. - Automated deletion of out-of-retention. - Legal hold capability. Records retention is required compliance; ad-hoc cleanup insufficient. **Common pitfalls.** - **Compliance as one-time project.** Compliance is ongoing. - **Documentation lags reality.** Inspectors find gaps. - **No training.** Staff create breaches. - **Vendor management informal.** Third parties bypass controls. - **No audit log review.** Logs exist; nobody looks. - **Right-to-erasure can't fulfil.** Data scattered across un-mapped systems. **Operational rhythm.** - **Daily** — security monitoring. - **Weekly** — DSAR queue. - **Monthly** — access reviews. - **Quarterly** — compliance posture. - **Annual** — audit, training refresh, policy review. ## Strategic positioning Data protection and compliance is foundational, not optional. For regulated industries, it's existential — non-compliance threatens the licence to operate. For all organisations, it's brand and trust. For decision-makers: - Treat compliance as ongoing programme. - Invest in dedicated capability (DPO, privacy officer). - Use Microsoft tools (Purview, Compliance Manager). - Document everything. - Train continuously. - Audit regularly. The investment is meaningful; the cost of non-compliance — fines, breach damage, reputation — is far greater. Build compliance into the system design, not bolted on later. --- # Data residency and compliance in Dynamics 365 Where Dynamics 365 data lives, how compliance certifications stack up, GDPR and country-specific rules, and the customer's responsibilities. Source: https://www.solvingdynamics365.com/guides/data-residency-and-compliance-in-dynamics-365 Section: Implementation / Operations & support Published: 2026-05-01 For most Dynamics 365 customers, compliance is non-negotiable: GDPR, country-specific data-protection laws, industry-specific regulations (HIPAA, FINRA, ISO 27001), and contractual obligations to customers. Microsoft has invested heavily in compliance certifications and data residency controls; using them well is a customer responsibility, not automatic. ## Data residency Dynamics 365 SaaS environments are pinned to a **region** at creation time — Europe, North America, Asia Pacific, UK, etc. Customer data stored in Dataverse, Business Central, and Finance/SCM lives in Microsoft data centres in that region. Microsoft does not move customer data between regions for operational reasons; specific cross-region situations (disaster recovery between paired regions) are documented. For customers with stricter requirements: - **Sovereign clouds.** Microsoft operates dedicated sovereign clouds: Microsoft Cloud for US Government (GCC, GCC High, DoD), Microsoft Cloud for German government, Microsoft Cloud for China (operated by 21Vianet). These have stronger residency guarantees, separate operational personnel, and often slower feature rollouts. Customers must qualify into these clouds. - **Customer-managed encryption keys.** For sensitive data, Dataverse supports **Customer Lockbox** controls — Microsoft engineers cannot access customer data without a customer-approved access request, logged and revocable. ## Microsoft compliance certifications Microsoft publishes the **Service Trust Portal** (servicetrust.microsoft.com) listing compliance certifications for each Dynamics 365 product. Most products certify for: - **ISO 27001 / 27017 / 27018** — security and cloud-data-protection management standards. - **SOC 1 Type 2 / SOC 2 Type 2 / SOC 3** — operational controls audits. - **GDPR** — EU general data protection regulation. - **HIPAA / HITECH** — US healthcare data (with Business Associate Agreement signed). - **FedRAMP High** — US federal authorisation. - **PCI-DSS** — payment card data (only for the specific services that handle cards). - **ISO 22301** — business continuity. - Many country-specific certifications (Japan FISC, Korea K-FSI, EU EBA, etc.). ## The customer's responsibility Microsoft certifies the *platform*; the customer is responsible for the **configuration** that uses it compliantly. Compliance issues most often arise from: - **Misconfigured access** — a Power Pages portal that grants too much data access; a security role too broad. - **Cross-region transfers** — exporting Dataverse data to a non-compliant Excel or Power BI workspace. - **Connector usage** — flows that send EU personal data to a non-EU SaaS service without proper safeguards. - **Custom code** — plug-ins or AL extensions that bypass standard logging and audit. ## GDPR considerations GDPR-specific operational requirements include: - **Right to access** — customers can request all personal data; Dynamics 365 has data-subject-rights export tools. - **Right to erasure** — customers can request deletion; the platform has bulk-delete jobs and per-record purge for personal data, with the caveat that some records (financial transactions) cannot be deleted for statutory reasons. - **Data Processing Agreement** — Microsoft's standard DPA covers Microsoft's role; customer-specific contractual addenda may apply. - **Privacy notices and consent** — captured per contact, honoured per record. ## Industry-specific Pharma, financial services, government, defence each have additional requirements. Microsoft's compliance pages document specific industry packages and shared-responsibility models. ## Audit support When external auditors evaluate the customer's Dynamics 365 environment, Microsoft provides audit-support packages — SOC reports, ISO certificates, compliance attestations — that the customer's auditor can rely on. Customers complement these with their own configuration documentation. ## Operating discipline Maintain a **compliance register** for the tenant: applicable regulations, the configuration that addresses each, the Microsoft certifications relied on, the responsibilities retained by the customer, and the review schedule. Update annually. --- # Data unification in Customer Insights — Data — a deep dive How Customer Insights — Data unifies customer records across sources — match rules, merge logic, golden record creation. Source: https://www.solvingdynamics365.com/guides/customer-insights-data-unification-deep-dive Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 A customer named "John Smith" in CRM, "J. Smith" in e-commerce, "John A. Smith" in loyalty — all the same person. Reconciling these into one unified profile is the core problem **Customer Insights — Data** (Microsoft's CDP) solves. Match rules, merge logic, and a unified profile produce the foundation for personalisation, analytics, and journey orchestration. ## The unification problem Multiple source systems each have their own customer records: - CRM has accounts and contacts. - E-commerce has user accounts. - Loyalty has members. - Support has cases linked to "Customer." - Marketing automation has subscribers. Each system identifies customers differently — by email, phone, customer ID, account ID. Reconciling means deciding which records in different systems refer to the same real person. **The CI-Data unification flow.** 1. **Ingest** sources — connectors pull data. 2. **Map** to a unified schema — standardise field meanings. 3. **Match** — identify candidates that are the same person. 4. **Merge** — combine matched records into one unified profile. 5. **Enrich** — augment with calculated and inferred attributes. 6. **Export** — push unified profile back to consuming systems. ## Match rules The match step uses configurable rules: - **Exact match on email** — strong signal. - **Exact match on phone** — strong. - **Fuzzy match on name** — weaker; can produce false positives. - **Address proximity** — for offline records. - **Combined matching** — name + email; name + phone; etc. Different match rules at different confidence levels. **Match confidence.** - **High confidence** — auto-merge. - **Medium confidence** — match candidate; flagged for review. - **Low confidence** — no merge. Thresholds configurable; tuning is iterative. ## Merge logic When two records match: - **Source priority** — which source wins per field? Email from CRM, phone from e-commerce? - **Most recent wins** — latest update preserved. - **Most complete wins** — non-null value preferred. Per-field merge rules; one field may have different rules than another. ## Survivorship rules Beyond merge: - **First name** — most recent. - **Email** — most recent verified. - **Phone** — verified preferred. - **Address** — most recent. - **Custom attributes** — per-attribute rules. The golden record is constructed field by field. ## Manual override When auto-merge gets it wrong: - Operator can split incorrectly merged profiles. - Manually merge profiles that didn't auto-match. - Block specific records from matching. The audit trail captures manual interventions. ## Match performance With millions of profiles, match runs are expensive: - **Initial unification** — bulk; can take hours. - **Incremental** — only new/changed records. - **Match in batch** — scheduled. Tuning frequency vs latency: hourly for high-volume, daily for moderate. **Enrichment.** - **Calculated attributes** — total purchases, recency, frequency, monetary. - **Inferred attributes** — lifetime value prediction, churn risk. - **External enrichment** — third-party data (demographics, firmographics). - **Behavioural enrichment** — derived from interactions. The enriched profile is the consumable artifact. **Common matching challenges.** - **Name variations** — Bill vs William vs W. - **Address differences** — "123 Main St" vs "123 Main Street". - **Multiple email addresses** per person. - **Identity over time** — names change (marriage), emails change. - **B2B vs B2C blending** — same person at work and home. Each requires specific match rule strategy. ## B2B unification Beyond person: - **Account** unification — different systems' company records. - **Account-contact** relationships preserved. - **Hierarchical accounts** — parent / subsidiary. CI-Data handles both B2C and B2B. **Match auditing.** - **Sample review** — periodic sample of matches to verify correctness. - **False positive rate** — over-matching. - **False negative rate** — under-matching. Audit drives match rule tuning. **Privacy and GDPR.** - **Right to know** — fulfilled from unified profile. - **Right to erasure** — must propagate to all sources. - **Consent** — tracked per source. - **DSAR** — combined data subject access request. CI-Data centralises this. **Common pitfalls.** - **Too-aggressive matching.** Different people merged; PII leakage. - **Too-conservative matching.** Duplicates persist; analytics noisy. - **Source schema drift.** New source field; not mapped; data missing. - **No audit.** Quality of unification unknown. - **Stale enrichment.** Calculated attributes not refreshed; misleading. - **Manual fixes lost.** Manual overrides don't persist through re-unification. **Operational rhythm.** - **Continuous / hourly** — incremental unification. - **Weekly** — match quality audit. - **Monthly** — rule tuning. - **Quarterly** — schema and source review. ## Strategic positioning Customer data unification is the foundation of customer-centric strategy. Without it, marketing is disjointed, service is impersonal, analytics is partial. With it, every consumer of customer data sees the same unified view — enabling consistent, personalised experiences. The investment is meaningful — months for initial unification — but the payoff compounds. CI-Data is Microsoft's CDP; for organisations on Dynamics 365 or Microsoft cloud, it's the natural choice. The technical setup is significant; the operational discipline of maintaining match quality and enrichment relevance is the longer commitment. --- # Dataverse alternate keys How alternate keys let Dataverse records be uniquely identified by business-meaningful values instead of GUIDs — for integration and lookup scenarios. Source: https://www.solvingdynamics365.com/guides/dataverse-alternate-keys Section: Customer Engagement / Dataverse platform Published: 2026-06-26 Every Dataverse record has a **GUID** as its primary identifier — a 128-bit unique value generated automatically. GUIDs are great for internal references but terrible for external integration: external systems rarely know your GUIDs but they do know business identifiers like email addresses, tax IDs, employee numbers, item codes. **Alternate keys** in Dataverse let records be uniquely identified by these business-meaningful values, dramatically simplifying integration and lookup scenarios. ## The model An **alternate key** is a defined uniqueness constraint on one or more columns of a table. Once configured: - Inserts / updates that violate the uniqueness fail with a clear error. - The Web API supports retrieval by the alternate key, not just by GUID. - Lookups via `Upsert` operations use the alternate key for matching. A table can have multiple alternate keys — each enforcing uniqueness on a different column combination. ## Example — Account by Tax ID Define an alternate key on the Account table over the **Tax ID** column. The constraint: - No two accounts can have the same Tax ID. - An integration receiving Tax ID "DK12345678" can query `/api/data/v9.2/accounts(taxid='DK12345678')` to get the account directly. - An `Upsert` operation with Tax ID as the match key inserts a new account if none exists, updates if one does. **Common alternate key patterns.** - **Contact by email** — uniqueness on Email Address. Standard for integration with email-based identification. - **Account by Tax ID / EIN / VAT number** — uniqueness on the country-specific tax identifier. - **Product by Product Number** — when integrating with an ERP that uses product numbers. - **Lead by external system ID** — when leads come from a marketing automation platform with its own IDs. - **Opportunity by Quote Number** — when external systems reference opportunities by a business quote number. - **Combined keys** — e.g. uniqueness on (Customer + Reference Number) for cases where neither alone is unique. **Setting up an alternate key.** 1. From the table's settings in the maker portal, add an alternate key. 2. Name it. 3. Choose the column(s) included. 4. Activate. 5. Dataverse runs a one-time job to validate existing data and create the index. If existing data violates the uniqueness, the activation fails with a list of conflicts to resolve first. **Integration benefits.** - **Cleaner Upsert** — external systems insert / update by business key; no need to query for GUID first. - **Reduced GUID exposure** — integrations don't need to track Dataverse GUIDs in their own systems. - **Match-based deduplication** — alternate keys prevent duplicate creation at integration time. ## Performance Alternate keys create unique indexes underneath; queries by alternate key are fast. The cost is index storage and a small write overhead on every insert / update to maintain the index. **Limits.** - **Activation can fail** if existing data has duplicates. Resolve duplicates first or activate against a clean migration. - **Some column types** are not supported (e.g. memo, multi-line text). Verify per type. - **GUID lookup is still required** for some scenarios — the Web API URL format for alternate-key lookup has specific encoding requirements. - **No partial indexes** — uniqueness applies across the whole table; can't say "unique only when Active = Yes". ## Status field considerations A common challenge: customers want "unique by email, but only for active contacts" — deactivated duplicates are tolerable. Alternate keys don't support filtered uniqueness. Workarounds: - Use the email + status code as a combined key (but this creates an odd uniqueness shape). - Implement uniqueness logic in a plug-in instead of an alternate key. - Accept that deactivated records still consume the unique value. **Common pitfalls.** - **Activation against dirty data** — failure surfaces all duplicates; resolution is data-cleanup work. - **Performance over-confidence** — alternate keys help specific queries but don't transform the table's general query performance. - **Schema lock-in** — once integrations depend on a specific alternate key, removing it is invasive. - **Multi-language collation** — alternate keys on text fields can have collation differences across regions; verify behaviour. ## Operational discipline Identify alternate-key candidates during schema design. Activate before significant data accumulates. Document the alternate keys in the integration documentation. Treat them as part of the Dataverse contract with external systems. ## When to use them Use alternate keys when: - An external system has a stable business identifier you'd otherwise have to look up. - Upsert operations need a non-GUID matching field. - Uniqueness is a genuine business constraint, not just a convenience. Don't use alternate keys for every column that "should" be unique in some sense — only where the business constraint is real and the integration value is clear. --- # Dataverse data import templates How to bulk-import data into Dataverse using import templates — the wizard, CSV/Excel formats, lookups by name, duplicate detection. Source: https://www.solvingdynamics365.com/guides/dataverse-data-import-templates Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Bulk-loading data into Dataverse — a list of contacts from a marketing event, the customer master from a legacy system, a one-off catalog refresh — is a common need. The **data import wizard** in model-driven apps and the **Excel templates** generated per table are the built-in answer. They're underused, often because users default to ad-hoc connector-based loads or scripts when the built-in tooling is simpler. ## The starting point: import template From any table's view in the model-driven app: 1. Open the table view. 2. Click `Export Template for Import` (or `Excel Templates → Download a Template`). 3. An Excel file is generated with all importable columns as headers. 4. Optional rows include sample data and lookups guidance. The template ensures column names match Dataverse's logical names — much harder to get wrong than freehand. ## Filling the template Users populate rows with data. Notes: - **Text columns** — plain text. - **Number columns** — numeric values, no formatting. - **Date columns** — ISO format (`yyyy-MM-dd`) or local format consistent with the user's regional settings. - **Choice columns** — the choice label (e.g., "Active"), not the numeric value. - **Lookup columns** — match by display name of the related record; system finds the record. - **Boolean** — `Yes/No`, `True/False`. **Import wizard.** 1. From the table view, `Import from Excel`. 2. Pick the populated template. 3. Wizard previews mapping. 4. Adjust mappings if needed (custom columns may need explicit mapping). 5. Configure duplicate detection and owner. 6. Submit. The import runs as a background **system job**. Progress and errors are visible in the Imports view. ## Lookup resolution When importing a sales order with `customerLookup = "Acme Corp"`: - The system searches the related table (Account, typically) for a row named "Acme Corp". - If exactly one match, the lookup is set. - If zero matches, the row fails with "Lookup not found." - If multiple matches, the row fails with "Ambiguous lookup." For unambiguous lookups, use a unique identifier (alternate key) in the lookup column rather than display name. ## Alternate keys A table can have one or more **alternate keys** — column combinations marked unique. Imports can reference rows by alternate key, removing display-name ambiguity. Common alternate keys: - Account: `accountnumber`. - Contact: `emailaddress1` (sometimes). - Product: `productnumber`. Setting up alternate keys for import-prone tables is a small investment that pays off forever. ## Duplicate detection During import, the system runs configured duplicate detection rules. Options: - **Allow duplicates** — bypass; risk of dirty data. - **Block duplicates** — fail rows that match existing records. - **Update on match** — modern option; update the existing record instead of inserting. For master data imports, the "update on match" pattern is the right answer — load the file as the source of truth, system reconciles. ## Performance Imports are batched but not super fast: - Hundreds to a few thousand rows per minute for moderate-complexity tables. - Plugins and workflows fire per row — heavy custom logic dramatically slows the import. - Async plugin executions queue up — can affect responsiveness during large imports. For very large imports (100K+ rows), use Dataverse's batch APIs or Azure Data Factory rather than the import wizard. ## Multi-table imports Importing related records (orders with order lines): - Import the parent first (orders). - Import the children second (order lines), referencing the parents by alternate key or display name. A single ZIP package with multiple Excel sheets, each mapped to a table, can be imported as a coordinated job. ## Error handling Failed rows show in the **Failures** view of the import job. Each error includes: - The row number in the source. - The column that failed. - A description (lookup not found, validation error, plugin exception). Iterate: fix the source file, re-import only the failed rows. Don't re-import the whole file unless you also want to update already-successful rows. ## Re-importing for updates Imports can update existing records: - Map a unique column (primary ID or alternate key) to the row identifier. - Configure "update on match." - Subsequent imports update fields the file specifies. Useful for incremental refreshes — load a delta file each day. **Common pitfalls.** - **Wrong locale for dates.** Mixed `MM/dd/yyyy` and `dd/MM/yyyy` rows; some import wrong without erroring. - **Lookup by name fails on whitespace differences.** "Acme Corp." vs "Acme Corp"; alternate keys help. - **Choice value mismatch.** Importing "Acitve" vs "Active"; fail. - **Owners not set.** Default owner is the importing user; mass imports leave one user owning thousands of records. - **Plugins crashing the import.** Heavy synchronous plugin on Create slows imports to a crawl; consider temporarily disabling, importing, re-enabling. - **No backup before import.** Botched import overwrites data; no recovery. Always backup or trial in a sandbox. ## Bulk delete after a botched import Bulk delete jobs can remove a recent import's rows; track each import's job ID for clean rollback. ## Operational rule For occasional master data refreshes and one-off loads, the import wizard with Excel templates is the right tool. For ongoing high-volume integrations, dedicated ETL (Dataverse data flows, Azure Data Factory, custom code via Web API) outperforms. Pick the tool that matches the cadence — wizard for ad-hoc, automated pipeline for recurring. --- # Dataverse data model fundamentals The Dataverse data model — tables, columns, relationships, choices, security roles, and how it sits under Dynamics 365 and the Power Platform. Source: https://www.solvingdynamics365.com/guides/dataverse-data-model-fundamentals Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Updated: 2026-08-31 **Microsoft Dataverse** is the shared, managed data platform that sits underneath Dynamics 365's CRM-side apps and the Power Platform. It looks superficially like a SQL database, but it's a higher-level model — with built-in security, audit, business rules, and APIs — designed to be the data layer of an application rather than just a store. ## Tables A **table** holds rows (records) of one logical entity — Account, Contact, Opportunity, plus tables you create. Tables have **standard** ones (Microsoft-provided), **custom** ones (you create), and **virtual** ones (data sourced from outside Dataverse but exposed as if local). Every table has a unique name, a display name, and a primary key (GUID by default). The first modelling decision on any project: reuse the standard tables or build custom ones? The strong default is to reuse. Account, Contact, Case, and the activity tables carry years of platform behaviour — duplicate detection, hierarchies, Outlook integration, out-of-the-box app support — that a custom `new_company` table forfeits entirely. Build custom tables for concepts Microsoft genuinely doesn't model (a Vessel, a Policy, an Inspection), not for renamed versions of things it does. The second decision is **ownership type**, set at creation and permanent: *user/team-owned* tables participate in row-level security (ownership, business units, sharing), while *organization-owned* tables are all-or-nothing per role. Reference data wants org-owned; anything with a "whose record is this?" question wants user-owned. ## Columns Columns are typed: text, number, decimal, date, choice (option set), lookup (foreign key), file, image, customer (polymorphic to Account or Contact), and several others. Required-ness is enforced by the platform. ## Relationships **1:N**, **N:1**, **N:N**, and **self-referential** relationships are all first-class. The platform also supports **polymorphic lookups** (a Customer column on Opportunity that can point to either Account or Contact). Relationships drive cascade behaviour: deleting a parent can cascade, restrict, or remove links to children. ## Choices and choice sets Picklists are modelled as **choices** (local to one column) or **choice sets** (reusable across columns and apps). Global choice sets are how you avoid duplicated Yes/No/Maybe lists across the schema. The recurring design argument: choice column or lookup to a reference table? Use a choice when the list is small, stable, and needs no attributes of its own (order status, priority). Use a lookup table when business users must maintain the list, when values carry data (a country with a VAT rate), or when the list will grow — adding a choice value is a schema change that travels through solutions and deployments, while adding a reference row is just data. Teams that hard-code volatile lists as choices end up shipping a solution deployment for every new value. ## Calculated and rollup columns Server-side computed columns: **calculated** (formula evaluated at read time) and **rollup** (aggregate across related rows, refreshed on a schedule). ## Business rules No-code field-level logic — set value, lock field, validate — defined per form. Run on the client and the server. ## Security Role-based security with **security roles** that grant table-level privileges (create, read, write, delete, append, append-to, assign, share). **Business units** scope rows; **teams** group users for shared ownership; **field-level security** restricts individual columns. ## Auditing and history Audit is a setting per table and per column; every change is recorded, viewable per record. ## APIs Dataverse exposes everything through OData v4 and a SOAP variant, with first-class SDKs for .NET, JavaScript, and Python. ## Storage tiers **Database** (default, fast, expensive), **file** (attachments, cheaper), **log** (audit, cheapest). Managing tier usage is the main cost lever for Dataverse capacity. For high-volume, low-value data — telemetry, event streams, IoT readings — [elastic tables](https://www.solvingdynamics365.com/guides/dataverse-elastic-tables) trade relational features for scale and cost, and belong in the model discussion before someone pours ten million sensor rows into a standard table. ## Solutions and naming Everything above is schema, and schema travels between environments in **solutions**. Two habits prevent permanent regret. First, create a proper **publisher** with a meaningful prefix before making anything — the prefix is baked into every logical name forever, and a schema full of `new_` columns marks a system nobody planned. Second, build in a dev environment and deploy as managed solutions; hand-editing schema directly in production works right up until it doesn't. The mechanics live in [ALM with managed solutions](https://www.solvingdynamics365.com/guides/power-platform-alm-with-managed-solutions). ## Design mistakes to avoid - **Rebuilding SQL habits.** Fully normalising into many narrow tables punishes you in Dataverse — every join is a lookup, every lookup is a form control and a security boundary. Model at the granularity users think in. - **One mega-table.** The opposite failure: a single table with 400 columns serving five loosely related processes. Forms slow down, security becomes unmanageable, and every team's change breaks another's. - **Ignoring ownership until security design.** Retrofitting row-level security onto org-owned tables means rebuilding them. Read the [security model](https://www.solvingdynamics365.com/guides/dataverse-security-model) *before* finalising tables, not after. - **Skipping alternate keys for integration.** If external systems reference records, define alternate keys on the natural identifiers up front — upserts against GUIDs alone force every integration to maintain its own mapping table. The data model outlives every app built on it. Apps get rebuilt in a season; a table structure with production data has real gravity — which is why the fundamentals here deserve more design time than any screen. For how the model surfaces to users, continue with [canvas apps vs model-driven apps](https://www.solvingdynamics365.com/guides/canvas-apps-vs-model-driven-apps). --- # Dataverse Organization Service vs Web API How the two Dataverse SDK surfaces differ — SOAP-era IOrganizationService vs the OData v4 Web API. Source: https://www.solvingdynamics365.com/guides/dataverse-organization-service-vs-web-api Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Dataverse exposes two programmatic surfaces with overlapping capability and very different ergonomics: the **Organization Service** (`IOrganizationService`, SDK-based, historically SOAP) and the **Web API** (REST/OData v4). Both are first-class; both will continue to be supported. Understanding when each fits is foundational for any developer writing code against Dataverse. **Organization Service.** - The classic SDK surface dating to Dynamics CRM. - Strongly-typed via `Microsoft.PowerPlatform.Dataverse.Client` package (recently rebranded from `Microsoft.Xrm.Sdk`). - Originally SOAP; current implementation uses HTTPS and a SOAP-compatible client. - Supports `Entity` records, `EntityCollection`, `QueryExpression`, `FetchExpression`. - The native API for **plugins** — plugins receive an `IOrganizationService` reference and operate through it. - C# / .NET first; limited support in other languages. **Web API.** - REST endpoints exposed at `/api/data/v9.2/` on every Dataverse environment. - OData v4 compliant; works with any HTTP client. - JSON request/response. - Action and function support for custom operations. - The native API for **client-side code** (model-driven app JavaScript, Power Pages Liquid extensions). - Cross-language: PowerShell, Python, JavaScript, Power Automate HTTP actions, anything that speaks HTTP. **When Organization Service wins.** - **Plugin development** — you have an `IOrganizationService` passed in; using it is natural. - **Bulk operations with .NET** — strongly typed collections and the SDK's batch APIs. - **Workflow assemblies** — custom workflow activities in .NET. - **Legacy code maintenance** — existing solutions built on it. **When Web API wins.** - **JavaScript / TypeScript** — model-driven app form scripts and ribbon commands. - **Non-.NET languages** — Python data scripts, Node.js services, PowerShell automation. - **External integrations** — third-party services calling Dataverse from outside. - **Power Automate** — built-in connector uses the Web API. - **Browser-based tools** — XrmToolBox alternatives. ## Performance Both surfaces ultimately route through the same Dataverse engine; raw performance is similar. Operational differences: - **Web API has clearer batching semantics** — `$batch` endpoint for multi-request bundles. - **Organization Service has `ExecuteMultiple`** for bundling .NET calls. - **Web API native streaming** for large result sets via `$skiptoken` paging. - **OData query string syntax** is more idiomatic in URL form than SOAP-era expression objects. **Authentication.** - Both support OAuth 2.0 via Microsoft Entra ID (Azure AD). - Service principals (application user) and user-context tokens supported on both. - Web API additionally easier to call from external systems given REST nature. **Common operations on both.** | Operation | Organization Service | Web API | |---|---|---| | Create record | `service.Create(entity)` | `POST /accounts` | | Update record | `service.Update(entity)` | `PATCH /accounts(id)` | | Delete record | `service.Delete(entityName, id)` | `DELETE /accounts(id)` | | Retrieve | `service.Retrieve(...)` | `GET /accounts(id)` | | Query | `RetrieveMultiple(QueryExpression)` | `GET /accounts?$filter=...` | | FetchXML | `RetrieveMultiple(FetchExpression)` | `GET /accounts?fetchXml=...` | | Bulk | `ExecuteMultiple` | `POST /$batch` | | Custom action | `Execute(OrganizationRequest)` | `POST /CustomAction` | ## FetchXML Both surfaces accept FetchXML — the Dataverse-native query language. For complex queries involving joins, aggregations, and link entities, FetchXML is more expressive than OData. Use it on either surface. ## Choosing in plugins Inside a plugin, `IOrganizationService` is what you have — use it. Calling the Web API from a plugin is technically possible but adds HTTP overhead unnecessarily. ## Choosing in JavaScript Inside a form script or web resource, the Web API is what's available — use it. Specifically `Xrm.WebApi.*` functions wrapping the Web API are idiomatic. **Choosing in external code.** - **.NET** — Organization Service via `ServiceClient` from `Microsoft.PowerPlatform.Dataverse.Client`. Cleaner code, types. - **Python / Node / PowerShell / curl** — Web API. No SDK, just HTTP and JSON. **OData specifics worth knowing.** - **$select** — pick columns to return. - **$expand** — include related records. - **$filter** — query criteria. - **$top, $skip** — paging. - **$orderby** — sort. - **MaxPageSize** header — server-side paging size. Composing these correctly is the difference between fast and slow Web API code. **Common pitfalls.** - **Mixing surfaces in one solution.** Some plugins call Web API, some use Organization Service; inconsistency. Pick a convention per project. - **Web API paging missed.** Without paging logic, large result sets return only first page; downstream code thinks data is complete. - **OAuth token expiry.** Tokens last 1 hour; long-running scripts need refresh logic. - **Locale and formatting.** Web API returns ISO timestamps; Organization Service returns .NET DateTime; conversion needs care. - **Schema name vs display name confusion.** Web API uses logical names (`new_customfield`); ensure correct casing. ## Operational rule Choose by language: .NET → Organization Service. Anything else → Web API. Both surfaces will remain supported indefinitely; investing in either is safe. The choice is about ergonomics, not capability. ### Frequently asked questions **Which API should I use from a plug-in?** The Organization Service. A plug-in receives an IOrganizationService reference; calling the Web API from inside it only adds HTTP overhead. **Which API should I use from JavaScript or an external system?** The Web API — REST and OData v4 at /api/data/v9.2/, callable from any HTTP client. Xrm.WebApi wraps it for model-driven form scripts, and Power Automate's Dataverse connector uses it too. **Is the Organization Service deprecated?** No. It lives on in the Microsoft.PowerPlatform.Dataverse.Client package with a SOAP-compatible client, and both surfaces will remain supported. The choice is about ergonomics per language, not capability. **How do I do bulk operations?** ExecuteMultiple on the Organization Service, or the $batch endpoint on the Web API. Both surfaces accept FetchXML for complex queries, and both need explicit paging for result sets beyond the first page. --- # Dataverse plug-in exceptions explained The Dataverse plug-in errors that recur on every project — ISV code aborted (0x80040265), missing privilege (0x80040220), sandbox timeout, worker crash, infinite loop depth, key not present, assembly load — with fixes. Source: https://www.solvingdynamics365.com/guides/dataverse-plugin-exceptions-explained Section: Customer Engagement / Troubleshooting Published: 2026-09-03 Plug-in errors surface in three places — the red dialog a user sees, the failed system job for an asynchronous step, and the Plug-in Trace Log — and the same handful of exceptions account for most of them. This reference lists them with the diagnostic path that finds the cause fastest. For what plug-ins are and how the pipeline works, start with [Dataverse plug-ins explained](https://www.solvingdynamics365.com/guides/dataverse-plug-ins-explained) and [the plug-in execution pipeline](https://www.solvingdynamics365.com/guides/dataverse-plugin-execution-pipeline). ## First: find the real message Every plug-in failure the user sees is wrapped. The dialog says something like "An error has occurred" with a Download Log File link; the log contains the exception chain, and the useful part is the innermost message and the plug-in type name. Get the log before doing anything else. For asynchronous steps, the System Jobs view (Settings > System Jobs, or the Power Platform admin centre) holds the same detail on the failed job. ## Errors the platform raises around your code ### "ISV code aborted the operation" — 0x80040265 (-2147220891) **Symptom.** The generic message when a plug-in throws. **Cause.** The plug-in threw an exception. If it threw `InvalidPluginExecutionException`, its message is shown to the user and this code is just the envelope. If it threw anything else — `NullReferenceException`, `KeyNotFoundException`, an HTTP exception — the platform wraps it and the user sees a .NET stack trace or an unhelpful summary. **Fix.** Read the inner message. Then make the plug-in throw `InvalidPluginExecutionException` with a human message for every expected failure, and catch-and-rethrow unexpected ones with context: `throw new InvalidPluginExecutionException($"Credit check failed for account {name}: {ex.Message}", ex);`. **Prevention.** A single try/catch around `Execute` that traces the full exception and rethrows as `InvalidPluginExecutionException` is the minimum every plug-in should have. ### "Principal user (Id=…, type=8) is missing prvXxx privilege" / "SecLib::AccessCheckEx failed" — 0x80040220 **Symptom.** The plug-in works for admins and fails for ordinary users, or fails only in production. **Cause.** Plug-ins run as the calling user unless the step is registered to run as a specific user. If the plug-in reads or writes a table the calling user cannot access — a configuration table, another business unit's records — the platform refuses with the missing privilege named in the message (`prvReadnew_config`, `prvWriteaccount`, and so on). **Fix.** Either grant the privilege to the users' security role, or register the step with Run in User's Context set to a service account that has it, or use `CreateOrganizationService(null)` for the system account when elevated access is deliberate. Never solve it by giving users System Administrator. **Prevention.** Decide per step whether it runs as the user or as the system; [impersonation in plug-ins](https://www.solvingdynamics365.com/guides/dataverse-impersonation-in-plugins) covers the trade-offs. Test with a real user role in every environment. ### "The plug-in execution failed because the operation has timed-out at the Sandbox Client" / "… ran for more than the maximum allowed time" **Symptom.** A synchronous plug-in fails after about two minutes; the user has been staring at a spinner. **Cause.** The sandbox enforces a two-minute limit per plug-in execution. External HTTP calls to a slow endpoint, a `RetrieveMultiple` over a large table without paging, a loop that updates thousands of rows one at a time, or a lock wait on a hot record. **Fix.** Move the work off the transaction: an asynchronous step, or a message to Service Bus consumed by an Azure Function — see [the outbox pattern with Service Bus](https://www.solvingdynamics365.com/guides/the-outbox-pattern-with-service-bus). For queries, add filters and paging; for bulk updates, use `ExecuteMultiple` or a batch job. **Prevention.** No external HTTP call in a synchronous plug-in without a short timeout (seconds, not minutes) and a fallback; [plug-ins vs Power Automate](https://www.solvingdynamics365.com/guides/integrating-with-dataverse-plug-ins-vs-power-automate) explains where the line is. ### "The plug-in execution failed because no Sandbox Worker processes are currently available" / "Sandbox Worker process crashed" **Symptom.** Intermittent failures across many plug-ins at once, often at busy times. **Cause.** The sandbox host is under memory or CPU pressure — a plug-in with a memory leak (static collections that grow, undisposed HttpClient instances), unbounded recursion, or simply too many concurrent heavy executions. **Fix.** Find the culprit through the Plug-in Trace Log timestamps and Application Insights; fix the leak. If load is genuine, spread it: asynchronous steps, batching, fewer steps per message. **Prevention.** Make `HttpClient` static and shared, never store request data in static fields, and load-test synchronous plug-ins before go-live. ### "This workflow job was canceled because the workflow that started it included an infinite loop. Correct the workflow logic and try again." **Symptom.** An update fails after a pause, with a message about workflows even though no workflow exists. **Cause.** Recursion. The plug-in's own `Update` fires the same step again (or a flow, or another plug-in, which updates the first record), and the platform cancels the chain when `context.Depth` passes 8. The message is shared with classic workflows. **Fix.** In a pre-operation step, set values on `context.InputParameters["Target"]` instead of calling `Update` — the change rides the same transaction and does not re-trigger. In post-operation steps, check `if (context.Depth > 1) return;` when the plug-in should only act on the original user change, and use filtering attributes so the step only fires when relevant columns change. **Prevention.** Register every step with filtering attributes, and document which plug-ins and flows write to which tables so loops are visible before they run. ## Errors inside your code ### "The given key was not present in the dictionary." **Symptom.** `KeyNotFoundException` wrapped as 0x80040265. **Cause.** `entity["new_field"]` or `entity.GetAttributeValue` on an attribute that is not in the Target — Update messages only carry the changed columns, and Create messages only the populated ones. Also `context.InputParameters["Target"]` on a message that has no Target (Delete carries an EntityReference), or a missing pre-image. **Fix.** Use `entity.Contains("new_field")` and `GetAttributeValue` (which returns default rather than throwing), and register a pre-image with the columns the plug-in needs to read. **Prevention.** Never assume the Target has a column; treat the pre-image as the source of truth for unchanged values. ### "Object reference not set to an instance of an object." **Symptom.** `NullReferenceException`. **Cause.** A lookup that returned null (`GetAttributeValue` on an empty lookup), a pre-image not registered on the step, a `Retrieve` with a column set that did not include the column, or an `OrganizationServiceContext` used after disposal. **Fix.** Null-check every attribute read; verify the step's image registration matches what the code expects; retrieve with explicit column sets that include everything used. **Prevention.** A small helper that reads attributes from Target-then-PreImage-then-default removes most of these. ### "Could not load file or assembly 'X' or one of its dependencies." **Symptom.** The plug-in fails immediately, before any trace line. **Cause.** The assembly references a NuGet package (Newtonsoft.Json, a client SDK) that was not deployed with it. Registered as a single assembly, plug-ins cannot load dependencies from disk. **Fix.** Deploy as a plug-in package (the NuGet-based packaging supported since 2022, via `pac plugin push` or the Plug-in Registration Tool's Register New Package), which carries dependent assemblies. The older answer was ILMerge; it still works but packages are the supported path. **Prevention.** Use plug-in packages from the start and pin dependency versions. ### "Sql error: Generic SQL error" / deadlock / "Sql timeout expired" — 0x80044150 **Symptom.** Intermittent failures on writes, more often under load. **Cause.** A SQL deadlock or lock timeout — two plug-ins updating the same rows in different orders, a long transaction holding locks while waiting on an external call, or a synchronous plug-in updating a parent record that many child operations also touch. **Fix.** Retry once on this specific error in callers that can; shorten the transaction; remove external calls from it; touch parent records last. **Prevention.** Consistent lock ordering across plug-ins and shorter synchronous steps. ## Registration and deployment errors ### "Plug-in assembly does not contain the required types" / "The plug-in type X is not registered" **Cause.** The class was renamed or moved namespace, and the registration still points at the old type name; or the class is not public, does not implement `IPlugin`, or was excluded from the build. **Fix.** Update the assembly in the registration tool (it re-reads types) and re-register steps for renamed classes. ### "Unable to register assembly: version has changed" / update fails with dependent steps **Cause.** The assembly's `AssemblyVersion` changed — Dataverse treats major/minor version changes as a new assembly and refuses to update in place while steps exist. **Fix.** Keep `AssemblyVersion` fixed (use `AssemblyFileVersion` for build numbers), or unregister and re-register steps as part of the deployment. **Prevention.** Deploy through solutions with the assembly and steps together, and never bump `AssemblyVersion` for a release. ## The diagnostic order that works 1. Get the exact inner message from the log file or the failed system job. 2. Check the Plug-in Trace Log for the plug-in's own trace lines around that timestamp. 3. Reproduce with the profiler and replay in Visual Studio with the real context. 4. If it is intermittent, correlate with Application Insights and the other plug-ins and flows on the same table. [Dataverse tracing and logging](https://www.solvingdynamics365.com/guides/dataverse-tracing-and-logging) sets up steps 2 and 4; [the Plug-in Registration Tool deep dive](https://www.solvingdynamics365.com/guides/plug-in-registration-tool-deep-dive) covers step 3. The API-level errors a plug-in might receive from its own service calls — privilege, duplicate, throttling — are in [Dataverse Web API errors](https://www.solvingdynamics365.com/guides/dataverse-web-api-errors-explained). ### Frequently asked questions **What does 'ISV code aborted the operation' (0x80040265) mean?** A plug-in threw an exception and the platform rolled back the operation. It is the generic wrapper; the real message is the InvalidPluginExecutionException text the plug-in threw — or, if the plug-in threw any other exception type, the .NET message buried inside the error details. Throw InvalidPluginExecutionException with a clear message so users see the cause, not the wrapper. **Why does my plug-in time out after two minutes?** Plug-ins run in the sandbox with a hard two-minute execution limit per step. Anything that can approach it — external HTTP calls, large RetrieveMultiple loops, bulk updates — belongs in an asynchronous step, an Azure Function behind a Service Bus queue, or a batch process, not inside the user's transaction. **What causes 'This workflow job was canceled because the workflow that started it included an infinite loop'?** Recursion. A plug-in on Update updates the same record (or another record with a plug-in that updates the first), each update fires the plug-in again, and the platform kills the chain when context.Depth exceeds 8. Check context.Depth at the top of Execute and exit early, and use pre-operation steps that modify the Target instead of a second Update call. **How do I see what my plug-in actually did?** Register a plug-in profiler session in the Plug-in Registration Tool and replay the captured context in Visual Studio, or enable the Plug-in Trace Log (Settings > Administration > System Settings) and write ITracingService.Trace lines — they appear in the trace log even when the plug-in succeeds, if the setting is set to All. --- # Dataverse plug-ins explained How Dataverse plug-ins work — pipeline stages, sync vs async, registration, debugging, and when to use a plug-in vs a Power Automate flow. Source: https://www.solvingdynamics365.com/guides/dataverse-plug-ins-explained Section: Customer Engagement / Dataverse platform Published: 2026-05-01 A **Dataverse plug-in** is a piece of .NET code that runs server-side in response to Dataverse events. Plug-ins are the most powerful customisation mechanism in the CRM-side Dynamics 365 stack — they run in the same transaction as the originating operation, can read and modify the entire context, and can call any external service. They are also the most demanding mechanism, with operational realities that Power Automate flows usually let you avoid. ## The event pipeline Every Dataverse operation (Create, Update, Delete, Associate, etc.) runs through a defined pipeline with four stages where plug-ins can register: 1. **Pre-validation** (stage 10) — runs *outside* the database transaction, before any validation. Used for plug-ins that need to inspect or modify the request before security or duplicate-detection runs. Common for caller-context-based logic. 2. **Pre-operation** (stage 20) — runs *inside* the transaction, before the database write. Used to modify the input target (e.g. compute a derived field that should be stored), or to throw an exception to cancel the operation. 3. **Main operation** — the database write itself. No custom plug-ins here. 4. **Post-operation** (stage 40) — runs *inside* the transaction, after the database write. Used to do follow-on work that should be transactional with the main operation: write a related record, raise a notification, call an external API (carefully). ## Synchronous vs asynchronous Plug-ins register as either: - **Synchronous** — runs immediately, blocks the user's request until complete. Failures roll back the transaction. Use for operations that must complete before the user moves on, or that need transactional rollback semantics. - **Asynchronous** — queued for later execution by the async service. Failures are retried; the user doesn't wait. Use for follow-on work that doesn't need to complete synchronously: notifications, integrations, indexing. ## The execution context Each plug-in receives an **IPluginExecutionContext** with the originating message, the target entity, the user, the depth (to prevent infinite recursion if plug-ins trigger each other), and **shared variables** for inter-plug-in data passing. ## Registration Plug-ins are packaged as signed .NET assemblies and registered through the **Plug-in Registration Tool** or via solution import. Registration includes: assembly, plug-in class, message (Create/Update/etc.), entity, stage, filtering attributes (only fire when these fields change), and async flag. **When to use plug-ins vs Power Automate flows.** - **Use plug-ins** when: - The logic must be in the same transaction as the originating operation. - Performance demands milliseconds rather than seconds. - You need access to the pre/post images of the entity. - You need to throw exceptions to cancel the operation cleanly. - **Use Power Automate flows** when: - The logic is asynchronous and orchestration-heavy. - It crosses systems through connectors. - It involves human approval. - Maintenance is by low-code makers, not developers. In modern practice, flows replace many plug-ins; plug-ins survive for transactional, performance-sensitive, server-only logic. ## Debugging Plug-ins are notoriously hard to debug. The Plug-in Registration Tool supports **plug-in profiling** that captures runtime context and lets you replay it locally in Visual Studio. Trace logs are visible in the **Plug-in Trace Log** if enabled. ## Operational caveats Synchronous plug-ins block the user; slow plug-ins make the system feel slow. Asynchronous plug-ins compete for the async service queue; bursty volume can backlog. External API calls from inside plug-ins risk timeouts; wrap them or move to async. ## Where to go next Next: [the plug-in execution pipeline](https://www.solvingdynamics365.com/guides/dataverse-plugin-execution-pipeline) for exactly what runs when, [plug-in exceptions explained](https://www.solvingdynamics365.com/guides/dataverse-plugin-exceptions-explained) for the errors you will meet, and [plug-ins vs Power Automate](https://www.solvingdynamics365.com/guides/integrating-with-dataverse-plug-ins-vs-power-automate) for the decision that precedes writing one. [The Plug-in Registration Tool](https://www.solvingdynamics365.com/guides/plug-in-registration-tool-deep-dive) covers registration and profiling; [impersonation in plug-ins](https://www.solvingdynamics365.com/guides/dataverse-impersonation-in-plugins) covers running as someone else. ### Frequently asked questions **What are the stages of the Dataverse plug-in pipeline?** Pre-validation (stage 10) runs outside the database transaction before security and duplicate detection; pre-operation (stage 20) runs inside the transaction before the write and can modify the target or cancel the operation; post-operation (stage 40) runs inside the transaction after the write for transactional follow-on work. **When should I use a plug-in instead of a Power Automate flow?** When the logic must run in the same transaction as the triggering operation, needs to complete in milliseconds, needs pre- and post-images, or must throw an exception to cancel the operation cleanly. Flows win for asynchronous orchestration, cross-system connectors, human approvals, and anything a low-code maker will maintain. **What is the difference between synchronous and asynchronous plug-ins?** Synchronous plug-ins block the user's request until they finish, and a failure rolls back the transaction. Asynchronous plug-ins queue for the async service, retry on failure, and do not make the user wait — the right choice for notifications, integrations, and indexing. **How do I debug a Dataverse plug-in?** Use the Plug-in Registration Tool's profiler to capture the runtime context and replay it locally in Visual Studio, and enable the Plug-in Trace Log to see trace output. Keep external API calls out of synchronous plug-ins or wrap them tightly — a timeout there freezes the user. --- # Dataverse plug-ins vs Power Automate for integrations: when to use which The decision between a C# plug-in and a Power Automate flow for integration logic in Dataverse — transactions, latency, throughput, ownership. Source: https://www.solvingdynamics365.com/guides/integrating-with-dataverse-plug-ins-vs-power-automate Section: Integrations / Architecture patterns Published: 2026-09-02 Every Dataverse project reaches the moment where something needs to happen when a record changes, and someone has to decide whether that something is a plug-in or a flow. Both can call external systems, both can update Dataverse, and both have partisans. The decision is not about skill or taste. It is about where the logic needs to run relative to the database transaction, how fast it must be, how much of it there is, and who will own it in three years. ## The one difference that decides most cases A plug-in registered synchronously runs inside the Dataverse transaction. If it throws, the user's save fails and nothing is written. A Power Automate flow runs after the transaction has committed, on its own schedule, with no ability to stop the save. That single fact sorts a surprising amount of integration logic. If the external system must agree before the record is allowed to exist (a credit check before an order is created, a tax engine validation before an invoice is saved, an address validation before an account is committed), it is a synchronous plug-in. Nothing else can veto the save. See [the plug-in execution pipeline](https://www.solvingdynamics365.com/guides/dataverse-plugin-execution-pipeline) for what runs when. If the external system just needs to hear about the change (notify a shipping system, push a contact to a marketing tool, log to a warehouse), it is a flow, or an asynchronous plug-in, or better still an event on a queue. Blocking the user's save while a marketing API answers is a design error, however it is implemented. ## When plug-ins win - **Veto logic** as above. - **Latency-sensitive updates** that the user expects to see immediately on the same form, such as a calculated field derived from an external rate. - **High volume.** Thousands of record changes an hour will exhaust Power Automate's run and action limits and cost real money per run. A plug-in costs nothing per execution. - **Complex logic** that is painful to express in a visual designer: recursion, heavy string handling, anything with more than a handful of branches. - **Impersonation and elevated operations** that need to run as a specific user or bypass a user's permissions in a controlled way; see [impersonation in plug-ins](https://www.solvingdynamics365.com/guides/dataverse-impersonation-in-plugins). ## When Power Automate wins - **Fire-and-forget notifications** to external systems where a delay of seconds to minutes is fine. - **Connector-heavy work.** If the job is "put a row in SharePoint, send a Teams message, and create a ticket in ServiceNow", the connectors exist and the flow is done in an hour. The equivalent plug-in involves three authentication schemes and three SDKs. - **Approval and human-in-the-loop processes.** Plug-ins cannot wait for a person. - **Scheduled work** on a cadence rather than on an event. Plug-ins do not have timers. - **Ownership by makers.** If the team that will maintain this is functional rather than developer, a flow they can read beats a plug-in they cannot. ## The trap in the middle Asynchronous plug-ins occupy the space between the two: code, but off-transaction, executed by the async service with retries. They are the right choice for post-commit logic that is too heavy or too frequent for flows, and the wrong choice when what you actually want is a durable queue, because the async service is not one. For anything that crosses a system boundary and must not be lost, the honest pattern is plug-in writes to a Service Bus queue or an outbox table, and a consumer does the integration; see [the outbox pattern with Service Bus](https://www.solvingdynamics365.com/guides/the-outbox-pattern-with-service-bus). The other trap is calling an external HTTP endpoint from a synchronous plug-in "just this once". The two-minute execution limit, the sandbox restrictions, and the fact that a slow third party now slows every user save mean this should be a last resort with a tight timeout, not a habit. ## Low-code plug-ins Dataverse also offers [low-code plug-ins](https://www.solvingdynamics365.com/guides/low-code-plug-ins-in-dataverse) written in Power Fx, which run in the transaction like C# plug-ins but are authored by makers. They cover simple validation and calculation well and are not yet a serious integration tool; the external-call story is through connectors and is limited. Treat them as a third option for the light end of the plug-in use cases, not as a replacement for either. ## Cost and licensing Flows consume Power Platform request limits and, depending on licensing, per-flow or per-user entitlements. Plug-ins consume Dataverse API request allowances but no per-run charge. At low volume the difference is invisible; at high volume flows become the expensive option and the throttled one. ## Testability and ALM Plug-ins have unit tests, source control, and a build pipeline, if the team sets them up, and are deployed in solutions like anything else. Flows live in solutions too, can be exported and imported, but testing is largely manual and version history is thin. A regulated environment that needs auditable change control tends to lean plug-in for anything critical. See [solution import and export pipelines](https://www.solvingdynamics365.com/guides/solution-import-export-pipelines). ## A working rule Inside the transaction, or high volume, or complex: plug-in. After the transaction, connector-shaped, human-involved, or maker-owned: flow. Crossing a system boundary with data that must not be lost: neither directly; queue it. If two people on a project disagree, the disagreement is almost always because they have not agreed which of those buckets the requirement is in. ## Stability verdict Both tools are mature and neither is going anywhere. The unstable part is the boundary: teams that build integrations as flows because it was quick, then hit limits, then rewrite as plug-ins, then find they wanted a queue. Decide the bucket first. For the underlying mechanics, see [Dataverse plug-ins explained](https://www.solvingdynamics365.com/guides/dataverse-plug-ins-explained) and [Power Automate connectors for Dynamics 365](https://www.solvingdynamics365.com/guides/power-automate-connectors-for-dynamics-365). ### Frequently asked questions **What is the one difference that decides most cases?** A synchronous plug-in runs inside the Dataverse transaction and can veto the save; a Power Automate flow runs after the commit and cannot. If an external system must agree before the record exists — credit check, tax validation, address validation — it is a plug-in. **When does Power Automate win?** Fire-and-forget notifications, connector-heavy work across SharePoint, Teams, and ServiceNow, approvals and human-in-the-loop steps, scheduled jobs, and anything a functional maker will own. Plug-ins cannot wait for a person and have no timers. **What about asynchronous plug-ins?** They suit post-commit logic too heavy or too frequent for flows, but the async service is not a durable queue. For anything crossing a system boundary that must not be lost, write to a Service Bus queue or an outbox table and let a consumer integrate. **How do costs compare at volume?** Flows consume Power Platform request limits and per-run entitlements and become expensive and throttled at thousands of changes an hour. Plug-ins consume Dataverse API allowances with no per-execution charge. --- # Dataverse row-level security for Entra ID B2B guest users How to give partners, contractors, and customers direct Dynamics 365 access as Entra B2B guests without exposing more than their own rows — licensing. Source: https://www.solvingdynamics365.com/guides/integrating-dataverse-security-with-entra-b2b-guests Section: Integrations / API & identity Published: 2026-09-02 A distributor needs to see the opportunities they are working with you on. A contractor needs to update the work orders assigned to their crew. A large customer wants their own project manager in your project system. Each of these people is outside your organisation, and the tempting shortcut is to invite them as an Entra ID B2B guest and give them a Dynamics 365 licence. It can work well. It can also become the audit finding of the year, because guests inherit the same Dataverse security model as employees, and that model only restricts what you tell it to. ## What a B2B guest is in Dataverse terms An Entra B2B guest is an external identity, from another Entra tenant or a consumer account, invited into your tenant. Once invited, the guest can be assigned a Dynamics 365 or Power Apps licence and added to a Dataverse environment like any user. Inside Dataverse there is no such thing as a "guest": they are a system user with security roles, a business unit, and team memberships, and they see exactly what those grant. The word "guest" is an Entra concept, not a Dataverse one. That is the point to internalise. If a guest is given the standard Salesperson role, they see every account and opportunity the role grants, across the whole business unit. Nothing about being external limits them. ## Building the fence Row-level security for guests comes from the same three tools as for anyone else, used deliberately. **A dedicated business unit per external organisation.** Create a business unit for each partner or customer that gets guests, place the guests in it, and give them roles whose read and write privileges are set to Business Unit depth, not Organization. They then see only rows owned by users or teams in their business unit. This is the coarsest and most reliable fence, and it is the one to start with. See [hierarchical security](https://www.solvingdynamics365.com/guides/hierarchical-security-in-dataverse) for how depth works. **Ownership by a team in that business unit.** Rows the guests should see must be owned by, or shared with, something in their business unit. The usual pattern is an owner team per partner; when an opportunity is assigned to that partner, the owner is set to the team, and the guests see it. Rows owned by your employees in the root business unit are invisible to the guest, which is what you want. See [owner teams vs access teams](https://www.solvingdynamics365.com/guides/owner-teams-vs-access-teams-in-dataverse). **Access teams for row-by-row sharing.** When a guest should see one specific record without owning it (a project they are staffed on, a case they are consulted on), an access team template on the table lets you add them to that row alone. This is finer-grained and more work to administer; use it for exceptions, not for the bulk of access. Then close the side doors. Guests should have no privileges on tables they do not need, including the ones the standard roles grant liberally: notes, activities, connections, and the system tables that leak names. Column-level security hides fields such as margins and internal notes; see [field-level security](https://www.solvingdynamics365.com/guides/field-level-security-in-dataverse). And check the app: a model-driven app shared with the guest shows every table in its sitemap that the role permits, so build a separate, minimal app for external users. ## Conditional access and device posture Guests arrive from devices and networks you do not manage. Entra conditional access policies can require multifactor authentication for guests, restrict them to browser access, block downloads, or require the partner's tenant to satisfy cross-tenant trust settings. Apply a guest-specific policy; the employee policy assumptions do not hold. Our guide on [Dynamics 365 and conditional access](https://www.solvingdynamics365.com/guides/dynamics-365-and-conditional-access) covers the mechanics. ## Licensing A guest using a model-driven Dynamics 365 app needs the same licence an employee would for that app. There is no guest discount. For a handful of partner managers that is fine. For hundreds of contractor field technicians it is not, and the licence bill becomes the argument for a portal instead. ## When guests are the wrong tool Guests suit a small number of trusted, named external users who need the full app experience and will be trained on it. They do not suit large populations, anonymous or self-registering users, or anyone whose access must be scoped to their own data by design rather than by administration. For those, the alternatives are [Power Pages](https://www.solvingdynamics365.com/guides/power-pages-for-customer-portals) with Entra External ID or B2C authentication, where table permissions scope access to the signed-in contact's own rows and the licensing is per authenticated user or per capacity, or a custom application in front of the Dataverse API with its own authorisation. See [Entra External ID for customer access](https://www.solvingdynamics365.com/guides/entra-external-id-for-customer-access) for the identity side. The rule of thumb: named partners inside the app, populations through a portal. ## What breaks in practice Guests placed in the root business unit "for now". Standard roles copied and assigned without trimming. Records reassigned from a partner team to an employee, which removes the partner's visibility with no warning. Guests whose home tenant deprovisions them but who remain licensed and enabled in yours; tie guest lifecycle to a review process. Reports and Power BI dashboards shared to guests that bypass Dataverse security entirely. ## Stability verdict The security model itself is stable and does exactly what it is configured to. The instability is administrative: every new partner needs a business unit, a team, a role check, and an app share, and the first time someone skips a step a guest sees too much. Automate the onboarding with a flow or a script, review guest access quarterly, and keep the population small. For the model behind all of this, read [the Dataverse security model](https://www.solvingdynamics365.com/guides/dataverse-security-model). --- # Dataverse search vs Quick Find The two search mechanisms in Dataverse — what each does, when to use which, and the configuration that makes them useful. Source: https://www.solvingdynamics365.com/guides/dataverse-search-vs-quick-find Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Dataverse has two search mechanisms that users encounter daily — **Dataverse search** (the global, modern search) and **Quick Find** (the older, per-view search). They look superficially similar but have substantially different mechanics, performance characteristics, and ideal use cases. **Dataverse search (formerly Relevance Search).** The modern search experience. Built on **Azure Cognitive Search** under the hood. Indexes content asynchronously and serves queries through the dedicated search service. Characteristics: - **Fast** — Azure-powered search returns results in milliseconds even on millions of records. - **Global** — searches across all configured tables and columns at once. - **Relevance-ranked** — results returned by relevance score, not just alphabetical match. - **Fuzzy matching** — handles typos, partial matches, word stems. - **Faceted filtering** — results can be filtered by table, owner, date. - **Indexed asynchronously** — there's a lag between data change and index update (typically seconds to minutes). - **Specific configured fields** — admins choose which tables and which fields are indexed. **Quick Find.** The traditional search box on each view. Built directly on Dataverse's SQL search. Characteristics: - **Always current** — searches the live database; no indexing lag. - **Per-table only** — searches the current view's underlying table. - **Exact-match-oriented** — wildcard matching (*query*) on specific columns; less forgiving than Dataverse search. - **Slower at scale** — direct DB scan on large tables can be slow. - **No relevance ranking** — results returned in the view's sort order. - **Configurable per table** — *Quick Find View* per table defines which columns to search. **When to use which.** - **Dataverse search** for: global discovery ("find anything about Karen Smith"), cross-table search, typo tolerance, ranked results, modern UX. - **Quick Find** for: live-current data (no indexing lag), per-view filtering, specific column-bounded search, simple exact-match needs. **Configuration — Dataverse search.** Per environment: - **Enabled or disabled** at the environment level. - **Tables enabled for search** — admins pick which tables are indexed. Default includes Accounts, Contacts, Activities, etc.; custom tables need explicit enabling. - **Columns enabled** — per table, which columns are indexed. Names, descriptions, primary fields by default; admins extend. - **Privileges** — security roles control which users have access to Dataverse search. After enabling new tables or columns, an **initial index** has to build — can take hours for large tables. **Configuration — Quick Find.** Per table: - **Quick Find View** — a special view that defines: - Which columns are searched. - Which columns are returned in results. - Default sort order. Editing the Quick Find View adds or removes searchable columns. **Common pitfalls.** - **Dataverse search not enabled** — users complain that "search doesn't find anything"; admins haven't enabled it on relevant tables. - **Wrong columns indexed** — searches don't return what users expect because the field they're searching isn't indexed. - **Stale index** — recent record changes don't appear in Dataverse search results because the index hasn't refreshed. Usually transient; chronic lag suggests an indexing issue. - **Quick Find too broad** — searching too many columns slows the query. Tune to the columns users actually search. ## The mobile experience The Power Apps mobile app uses Dataverse search by default for its global search box. The seller in the field saying "search doesn't work" is almost always a Dataverse search configuration issue, not a mobile-specific problem. ## Power Apps canvas apps Canvas apps can call both search mechanisms through Dataverse connectors. For typed-ahead search-as-you-type, Dataverse search is the right pattern; for narrow filtered list searches, the standard `Filter()` function on a Dataverse table is sufficient. ## Operational discipline Enable Dataverse search on every meaningful table; verify the right columns are indexed; ensure users have appropriate security to use it. Quick Find tunes per-table for users' common searches. Both are configuration, not customisation — get them right early. ### Frequently asked questions **What is the difference between Dataverse search and Quick Find?** Dataverse search is the global, Azure-powered index across configured tables with relevance ranking and fuzzy matching, refreshed asynchronously. Quick Find is the per-view search box that hits the live database on the columns in the table's Quick Find View — always current, exact-match oriented, slower on large tables. **Why does Dataverse search not find a recently created record?** Index lag. Changes reach the search index seconds to minutes after they are saved. Chronic lag suggests an indexing problem worth raising with support. **Why does search return nothing for a custom table?** Dataverse search must be enabled per table and the right columns indexed. Custom tables are not indexed by default, and the initial index build for a large table can take hours. **Which search does the mobile app use?** Dataverse search. When a field seller says search does not work on mobile, it is almost always a Dataverse search configuration issue rather than a mobile problem. --- # Dataverse secrets and Azure Key Vault integration How to store and use secrets in Dataverse — environment variables for secrets, Azure Key Vault references. Source: https://www.solvingdynamics365.com/guides/dataverse-secrets-and-key-vault-integration Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Solutions in Dataverse often need secrets — API keys for connectors, OAuth client credentials, encryption keys, database passwords. Hard-coding secrets in code is a security violation; the modern pattern uses **environment variables** with **Azure Key Vault** integration for production-grade secret management. ## The historical pain Pre-environment-variables: - API keys hard-coded in plug-in code. - Connection strings in configuration tables. - Different secrets per environment, manually swapped. Issues: secrets in source control, hard rotation, audit gaps. ## Environment variables A Dataverse-native mechanism for per-environment values: - **Definition** — the variable shape, name, datatype. - **Value** — per-environment value. - Used in flows, plug-ins, Power Apps via the connection reference / environment variable system. For non-sensitive values (URLs, thresholds), use String type. For secrets, use **Secret** type backed by Key Vault. **Secret-type environment variables.** - Definition specifies datatype: Secret. - Value isn't stored directly in Dataverse; references a Key Vault secret. - The reference includes Key Vault URL, secret name, version. At runtime, when code needs the secret, Dataverse fetches it from Key Vault using a service principal granted Key Vault access. **Setup.** 1. **Azure Key Vault** provisioned in your tenant. 2. **Service principal** for Dataverse granted `get` permission on the vault's secrets. 3. **Secret stored** in Key Vault. 4. **Environment variable** created in Dataverse referencing the Key Vault secret. 5. **Solutions** reference the environment variable, not the secret directly. **Why Key Vault.** - **Centralised secret management** — IT controls; not in solution. - **Rotation** — change in Key Vault; no Dataverse change. - **Audit** — Key Vault audits all access. - **Geographic isolation** — secrets stay in Azure region. - **Compliance** — easier to demonstrate proper secret handling. **Using secrets in plug-ins.** ```csharp var secretValue = await GetSecretFromKeyVault("apiKey"); ``` Plug-in's service-to-service authentication retrieves the secret on demand. **Using secrets in Power Automate.** - Reference environment variable in actions. - Connector retrieves secret at runtime. - Action uses without exposing in flow's visible content. ## Using secrets in canvas apps Limited support; typically secrets shouldn't flow client-side. ## Solution-aware secrets Environment variables go in solutions: - Definition included. - Default value optional (for sandbox / development). - Per-environment value set during deployment. This is the ALM pattern: solution exports with definitions; importing solution prompts for per-environment values. **Rotation strategy.** - **Periodic rotation** — every N months per policy. - **Compromised secret rotation** — immediately on suspected breach. - **Process** — new version in Key Vault → environment variable picks up new version automatically. If the version is explicitly specified in the env var, you'd update the env var to point to new version. ## Comparison with Power Platform connection references Different concepts: - **Connection reference** — abstract connector connection; bound to a real connection per environment. - **Environment variable** — value (or secret) per environment. Often combined: a connection reference for "SQL Server" uses an environment variable for "ConnectionString" secret. **Compliance considerations.** - **GDPR** — secrets handling included in privacy impact assessment. - **SOC 2** — secret management practices audited. - **HIPAA** — extra rigour for healthcare data. - **PCI-DSS** — strict secret handling. Key Vault meets these compliance standards more easily than custom solutions. **Performance.** - Secret retrieval adds latency (call to Key Vault). - Mitigate via: - Cache secret in memory for session (with appropriate TTL). - Single retrieval per process / per flow run. - Don't retrieve secret per record in a loop. ## Local development When developing plug-ins locally: - Dev environment uses non-prod Key Vault. - Service principal has access to dev secrets only. - No prod secrets ever in dev environment. **Common pitfalls.** - **Hard-coded secrets in plug-in code.** Backwards practice; rotate to environment variables. - **Secrets in solution XML.** Visible in source control; rotate immediately. - **No rotation discipline.** Secrets unchanged for years; compromise risk. - **Wrong Key Vault permissions.** Service principal lacks access; runtime failures. - **Caching secrets too long.** Rotated secret not picked up; failures after rotation. - **Mixing dev / prod Key Vaults.** Dev code accidentally hits prod Key Vault; permission errors. ## Migration From hard-coded secrets to Key Vault: 1. Provision Key Vault and store secrets. 2. Create environment variables. 3. Update code to read from environment variables. 4. Deploy. 5. Remove old hard-coded values. 6. Rotate the secrets (because they may have leaked during the transition). ## Strategic positioning Secret management is foundational security. Dataverse + Key Vault gives a clean, scalable pattern that meets compliance standards. For new solutions, this pattern is the default; for legacy solutions, migrating is technical debt worth paying down. The investment is moderate; the security and compliance benefits are substantial. Solution architecture in 2026 simply doesn't include hard-coded secrets — that pattern is no longer acceptable in production. --- # Dataverse solution import errors Why Dataverse solution imports fail — missing dependencies, managed cannot overwrite unmanaged, version lower than installed, language not installed, connection reference and environment variable prompts, invalid flows, solution checker blocks. Source: https://www.solvingdynamics365.com/guides/dataverse-solution-import-errors Section: Customer Engagement / Troubleshooting Published: 2026-09-03 Solution import is where ALM problems become visible. The error messages are long, the real cause is usually in the last sentence, and the fix is almost always in the source environment or the target's history rather than in the solution file. This reference lists the failures in the order they occur during an import — dependencies, version and layering, components, connections, and post-import — with what to do about each. For the model behind it, see [Power Platform ALM with managed solutions](https://www.solvingdynamics365.com/guides/power-platform-alm-with-managed-solutions) and [solution patches vs upgrades](https://www.solvingdynamics365.com/guides/solution-patches-vs-solution-upgrades). ## Getting the real message The import dialog shows a summary; the Details link and the downloadable XML log hold the component-by-component result. Find the first row with an error — later errors are usually consequences of it. For pipeline imports (`pac solution import`, Power Platform Build Tools), the same log is in the task output. ## Dependencies ### "The solution import failed because of a missing dependency: … requires solution 'X' version 'N' or higher" **Cause.** A component references something the target does not have — a base solution from your own team, a Microsoft application (Dynamics 365 Sales, Customer Service, Field Service), an ISV solution, or a component that was moved between solutions in the source. **Fix.** Import the named solution at the named version or higher first. If the dependency is on a component you moved between your own solutions, either export both together or restore the component to its original solution. **Prevention.** One dependency graph per environment, documented; pipelines that deploy solutions in dependency order. [Solution dependencies and managed layer conflicts](https://www.solvingdynamics365.com/guides/solution-dependencies-and-managed-layer-conflicts) covers the design. ### "Cannot delete component because it is required by another component" / dependencies during upgrade **Cause.** An upgrade removes a component that something outside the solution — an unmanaged form, a flow, another solution — still uses. **Fix.** Open the component's Show dependencies in the target, remove or update the dependents, then retry. Stage-for-upgrade lets you inspect before applying. ## Version and layering ### "The solution version being imported is lower than the version installed" **Cause.** Managed solutions cannot go backwards. A pipeline picked up an older artefact, or a developer exported without bumping the version. **Fix.** Increment the version in the source and re-export. **Prevention.** Let the pipeline set the version from the build number. ### "A managed solution cannot overwrite the X component with Id=… which has an unmanaged base instance" **Cause.** The component exists in the target as unmanaged — created by hand, or by an unmanaged import during early development — and a managed solution from the same publisher now wants to own it. **Fix.** Delete the unmanaged component in the target (check dependencies first) and re-import. If the target is production and the unmanaged component holds data (a table), the cleanup is a project: export the data, delete, import managed, reload. **Prevention.** Never import unmanaged into test or production; unmanaged is for development environments only. ### Import succeeds but the change does not appear **Cause.** An unmanaged (active) customisation in the target sits above the managed layer and shadows it — someone edited the form, view, or column directly in production. The Solution layers view on the component shows the stack. **Fix.** Remove the active customisation on that component (Remove active customizations in the layers pane) so the managed layer shows through. **Prevention.** No hand edits in test or production, enforced by Managed Environments and security roles. ### "The publisher of the solution does not match" / prefix conflicts **Cause.** Components created under a different publisher prefix than the solution's, or two solutions from different publishers trying to own the same component. **Fix.** Keep one publisher per team and create components inside the solution so they inherit its prefix. ## Components ### "Import failed: the language for the solution is not installed" / language code errors **Cause.** The solution carries labels for a language (for example 1053 Swedish) that is not enabled in the target. **Fix.** Enable the language in the target environment's settings, wait for provisioning, retry. ### "The attribute type cannot be changed" / "Cannot change the data type of column X" **Cause.** The column's type or length was changed in the source in a way managed solutions cannot apply — type changes are not supported, and some length reductions are refused. **Fix.** Create a new column, migrate data, and obsolete the old one. ### "Cannot import solution because it contains a component that is not solution-aware" / canvas app or flow fails to import **Cause.** A canvas app or flow referenced by the solution lives outside solutions in the source, or references a connector, environment variable, or custom connector that is missing in the target. **Fix.** Add the component to the solution in the source; ensure custom connectors and environment variable definitions ship in a base solution. ### "Flow client error returned with status code Bad Request and status InvalidOpenApiFlow" / "The workflow with id X cannot be imported" **Cause.** The flow definition references something the target cannot resolve — a connector not available or blocked by DLP, a child flow not yet imported, an environment variable without a value, or an action from a connector version that differs. **Fix.** Read the inner message: it names the action and the missing reference. Import child flows first, set environment variables, check the DLP policy. ### Plug-in assembly or step errors: "The plug-in type X is not registered" / "Assembly version has changed" **Cause.** The assembly in the solution has a different `AssemblyVersion` than the one installed, or a step references a type that no longer exists. **Fix.** Keep `AssemblyVersion` fixed across releases; remove steps for deleted types before exporting. [Dataverse plug-in exceptions](https://www.solvingdynamics365.com/guides/dataverse-plugin-exceptions-explained) covers the registration rules. ### Solution checker blocks the import (Managed Environments) **Cause.** The target environment enforces solution checker at Block, and the solution has critical or high findings. **Fix.** Run the checker in the source, fix the findings, re-export; or lower enforcement to Warn for an emergency deployment with sign-off. [Solution checker and app checker](https://www.solvingdynamics365.com/guides/solution-checker-and-app-checker) lists the rule categories. ## Connections and environment variables ### Import pauses at "Connection references" / flows imported turned off **Cause.** The solution contains connection references without a connection in the target, or environment variables without a current value. The importer prompts interactively; in a pipeline it fails unless the values are supplied in a deployment settings file. **Fix.** Create connections under a service account in the target and supply them on import; provide environment variable values through the deployment settings file (`pac solution create-settings` generates it). Flows imported without connections are switched off — turn them on after connections are set. **Prevention.** [Connection references and environment variables](https://www.solvingdynamics365.com/guides/connection-references-and-environment-variables) and [solution import and export pipelines](https://www.solvingdynamics365.com/guides/solution-import-export-pipelines) cover the unattended pattern. ### "Environment variable value is missing" at runtime after a clean import **Cause.** A default value was set in the source but no current value in the target, and the default was excluded from the export (the recommended setting). **Fix.** Set the current value in the target; never rely on defaults for environment-specific settings. ## Post-import ### "Publish all customizations" fails / "Invalid XML" **Cause.** A form XML or sitemap that is invalid after merging layers — usually an unmanaged edit that conflicts with the imported form. **Fix.** Remove the active customisation on the component and publish again. ### Import timed out / "The import is taking longer than expected" **Cause.** Large solutions with many tables and flows exceed the synchronous import window; the import usually continues in the background. **Fix.** Wait and check the solution history before retrying; use asynchronous import (`--async`) in pipelines and split very large solutions into layers. ### Data lost after upgrade **Cause.** An upgrade that removed a table or column removes the data with it; a patch cannot remove components, an upgrade can and does. **Fix.** Restore from a pre-import backup — which is why a backup before every production import is the rule. [Solution history and rollback strategies](https://www.solvingdynamics365.com/guides/solution-history-and-rollback-strategies) covers the safety net. ## The order that avoids most of this Base solution with tables, publisher, environment variable definitions, and custom connectors first; feature solutions that depend on it second; flows and canvas apps in the feature solution that owns their tables; deployment settings files per environment; stage-for-upgrade in production with a backup taken first. Teams that deploy in that order see connection prompts and missing-dependency errors on the first import and rarely again. ### Frequently asked questions **What does 'A managed solution cannot overwrite a component that has an unmanaged base instance' mean?** The target environment already has that component — a table, column, form, flow — as an unmanaged customisation, and a managed solution cannot take ownership of it. Either delete the unmanaged component in the target (after checking nothing depends on it), or, if the target was built by hand before solutions were adopted, plan a one-time cleanup to move it under managed control. **How do I fix 'The solution import failed because of a missing dependency'?** The message names the required solution and version. Import that solution into the target first — at that version or higher — then retry. Dependencies are usually a base solution from the same team, a Microsoft app such as Dynamics 365 Sales, or an ISV package. **Why does import fail with 'version is lower than the currently installed version'?** Managed solutions only move forward. Bump the solution version in the source environment before exporting, and make the pipeline increment it automatically so a stale export can never overwrite a newer one. **Why does import stop and ask for connections?** The solution contains connection references or environment variables with no current value in the target. That prompt is by design; supply connections owned by a service account and values for this environment, or pre-create them so imports run unattended in a pipeline. --- # Dataverse storage types explained How Dataverse storage is metered — Database, File, and Log capacity — what counts toward each, the implications of exceeding allocation. Source: https://www.solvingdynamics365.com/guides/dataverse-storage-types-explained Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Dataverse storage isn't one number; it's three separate categories — **Database**, **File**, and **Log** — each metered and billed separately. Understanding what goes where and how to control growth is essential for any production deployment, especially as data accumulates over years. **The three categories.** - **Database** — relational data: standard tables, columns, indexes, plug-in step storage. - **File** — large binary content: attachments, image columns, file columns. - **Log** — audit logs, plug-in trace logs. Each has its own entitlement based on the tenant's licences. **What counts as Database.** - All row data. - Indexes. - Plug-in steps and assemblies. - Some metadata. For text content stored in standard columns, it counts as Database. Standard relational data. **What counts as File.** - Attachments (file binary content). - Image columns. - File columns (a column type that stores files directly). - Some other binary storage. File storage is typically the fastest-growing category for any production environment with attachments. Users upload PDFs, photos, documents — they accumulate quickly. **What counts as Log.** - Audit history records — who changed what when. - Plug-in trace logs. Log can grow rapidly if audit is broadly enabled. **Entitlements.** - Each tenant gets some baseline allocation. - More licences (more Dynamics 365 base licences) = more allocation. - Per-licence allocation: typically GB per licence per type. - Tenant total = sum of per-licence allocations + any add-on purchases. The exact numbers shift; check current Microsoft documentation. Roughly: - ~250 MB Database per licence (for Dynamics 365 base licences). - ~2 GB File per licence. - ~2 GB Log per licence. Plus a baseline tenant allocation. Mid-size deployments may have hundreds of GB available; large enterprises terabytes. ## Capacity reports In Power Platform admin centre: - **Capacity** page shows current usage per category. - Per-environment breakdown. - Trend over time. Watch the trend; capacity should grow predictably, not explosively. **What happens at exceeding.** - **Approaching limit (90%+)** — alerts to admins. - **Exceeded** — Microsoft may restrict new data creation; eventual operations affected. - **Persistent overage** — purchase additional capacity or reduce usage. The grace period varies; don't rely on tolerance. ## Add-on capacity Microsoft sells capacity packs: - **Database** — per GB per month. - **File** — per GB per month, cheaper than Database. - **Log** — per GB per month. File is cheapest per GB; encourage moving large content to File-typed columns rather than text columns. **Controlling Database growth.** - **Bulk delete** old records — old leads, completed cases, expired campaigns. - **Archive** to external store — Synapse Link to ADLS for long-term retention. - **Index efficiency** — remove unused indexes. - **Trim plug-in steps** — old, unused plug-ins still count. **Controlling File growth.** - **Move attachments to OneDrive / SharePoint** — link instead of embed. - **Compress images** before upload. - **File retention policies** — auto-delete old attachments. - **Audit attachment usage** — large files rarely accessed are candidates for archive. For a mature tenant, File can be the dominant cost; aggressive management pays back. **Controlling Log growth.** - **Selective audit** — only audit tables that need it. - **Audit retention** — auto-delete logs older than N months. - **Audit categorisation** — fewer events per table reduces log volume. For organisations not in regulated industries, broad audit is often overkill. **Storage tier comparison.** | Type | Use | Cost / GB | Growth rate | |---|---|---|---| | Database | Standard data | Highest | Moderate | | File | Binary content | Moderate | Fast | | Log | Audit / traces | Cheapest | Variable | For optimisation, focus on Database (most expensive), then File (highest growth), then Log. ## Auditing storage Periodically: - Top tables by row count. - Top columns by storage. - Top file attachments by size. - Audit log volume. These reveal where capacity is going. **Strategic moves.** - **Long-term data → external lake.** Synapse Link or Fabric Link replicates to lake; Dataverse retains operational data only. - **Attachments → SharePoint.** Link-based; SharePoint storage often cheaper and bundled with M365. - **Old data → archived.** Use bulk delete after archive confirmed. - **Capacity planning per project** — new initiatives estimate storage impact. **Common pitfalls.** - **Capacity surprise.** Bills exceed budget; nobody was watching. - **Audit on everything.** Log grows fast; auditor doesn't need it all. - **Attachments unmanaged.** File usage balloons. - **No archival strategy.** Old data accumulates forever. - **Capacity reports ignored.** Trend not monitored; preventable issues become crises. **Operational rhythm.** - **Monthly** — capacity review. - **Quarterly** — audit retention and cleanup. - **Annually** — strategic review of growth trajectory and add-on needs. ## Strategic positioning Storage isn't free; ignoring it leads to surprise costs and operational restrictions. Active management — categorisation, retention policies, archival strategy — keeps costs predictable and Dataverse performant. The teams that get this right have boring storage stories; the teams that don't have surprise bills and emergency cleanups. The cost of attention is small; the cost of neglect compounds. --- # Dataverse Web API errors explained Dataverse Web API errors by code — 0x80040217 does not exist, 0x80040220 privilege, 0x80040333 duplicate, 0x80040237 duplicate key, 0x80048d19 payload, 0x80072322 throttling, @odata.bind mistakes — with fixes. Source: https://www.solvingdynamics365.com/guides/dataverse-web-api-errors-explained Section: Customer Engagement / Troubleshooting Published: 2026-09-03 Dataverse returns errors as a JSON body with a `code` (a hex value like `0x80040217`), a `message`, and often a link. The hex code is the stable identifier — messages get reworded, codes do not — and this reference is organised by it. It covers the errors integration developers, flow builders, and plug-in authors meet most. For the API itself, see [Dataverse organization service vs Web API](https://www.solvingdynamics365.com/guides/dataverse-organization-service-vs-web-api) and [batch operations in the Dataverse Web API](https://www.solvingdynamics365.com/guides/batch-operations-in-the-dataverse-web-api). ## Reading an error ```json { "error": { "code": "0x80040217", "message": "account With Id = 3a9f… Does Not Exist" } } ``` HTTP status tells you the family (400 bad request, 401 unauthenticated, 403 forbidden, 404 not found, 412 precondition, 429 throttled, 500 server); the `code` tells you which specific rule fired. Log both plus the `x-ms-service-request-id` response header for support. ## Authentication ### 401 — "Bearer token is missing or invalid" / "IDX10214: Audience validation failed" **Cause.** No token, an expired token, or a token for the wrong audience. The scope must be `https://.crm.dynamics.com/.default` for the specific environment; a Graph token or a token for another environment fails. **Fix.** Request the token for the environment URL; refresh before the one-hour expiry. ### 401/403 — "The user is not a member of the organization" / user disabled **Cause.** The identity is valid in Entra but has no user row in this environment — a service principal that was never added as an application user, or a user without a licence or security role in this environment. **Fix.** Add the app registration as an application user in the Power Platform admin centre and assign a security role; for people, check licence assignment and environment security group membership. **Prevention.** Application users per environment are part of every environment's setup checklist — [Power Platform environments](https://www.solvingdynamics365.com/guides/power-platform-environments). ### 403 — 0x80040220 "Principal user (Id=…) is missing prvXxx privilege" / "SecLib::AccessCheckEx failed" **Cause.** The caller's security roles do not grant that privilege on that table at that scope — `prvReadaccount`, `prvCreatenew_order`, `prvAppendToaccount` (needed to set a lookup to it), `prvAssign`, `prvShare`. Append and AppendTo are the ones everyone forgets: setting a lookup needs Append on the child and AppendTo on the parent. **Fix.** Add the privilege to the role, or run as a user who has it. [Dataverse security model](https://www.solvingdynamics365.com/guides/dataverse-security-model) explains scopes. ## Addressing and payload ### 404 — "Resource not found for the segment 'X'" **Cause.** The entity set name in the URL is wrong — it is the plural logical collection name (`accounts`, `contacts`, `new_orders`), and custom tables use the publisher prefix. Also raised for a misspelt navigation property in `$expand`. **Fix.** Check the entity set name in `/api/data/v9.2/` (the service document lists them) or in the table's properties in the maker portal. ### 400 — "Could not find a property named 'X' on type 'Microsoft.Dynamics.CRM.account'" **Cause.** A column name in `$select`, `$filter`, `$orderby`, or `$expand` that is not the lowercase logical name. Lookups in `$select` and `$filter` use the `_name_value` form; navigation properties in `$expand` use the schema name of the relationship. **Fix.** Use logical names from the table's Columns view; for lookups, `_parentcustomerid_value`. ### 404 — 0x80040217 "X With Id = … Does Not Exist" / 0x80060891 "Entity 'X' With Id = … Does Not Exist" **Cause.** The row was deleted, the GUID belongs to a different table, or the caller cannot see it — Dataverse returns not-found rather than forbidden for rows outside the user's read scope, which sends people looking for a data problem when it is a security one. **Fix.** Confirm the GUID and table; then check the caller's read scope (user, business unit, organisation) on that table. ### 400 — 0x80048d19 "Error identified in Payload provided by the user for Entity: 'X'" / "An undeclared property 'X' which only has property annotations in the payload but no property value was found" **Cause.** The JSON body contains a property Dataverse does not accept: a misspelt or wrong-case logical name, a display name, a read-only column (`createdon`, `_x_value`), or a lookup set without `@odata.bind`. The "undeclared property" variant is almost always a lookup written as `new_customer@odata.bind` when the navigation property is `new_Customer@odata.bind` (schema name, case-sensitive) — or the reverse. **Fix.** Set lookups with the navigation property's exact schema name: `"parentcustomerid_account@odata.bind": "/accounts(guid)"`. Remove read-only columns from the body. Check every property against `$metadata`. **Prevention.** Generate request bodies from metadata rather than typing them; test in the browser's developer tools with `Xrm.WebApi.createRecord` where the errors are the same but faster to iterate. ### 400 — "CRM do not support direct update of Entity Reference properties, Use Navigation properties instead." **Cause.** Setting a lookup by writing the GUID to `_parentcustomerid_value` or to the attribute name. **Fix.** Use `@odata.bind` as above. ### 400 — "The date-time format for X is invalid" / "Cannot convert the literal 'X' to the expected type 'Edm.DateTimeOffset'" **Cause.** Dates not in ISO 8601 (`2026-09-03T00:00:00Z`), or a date-only column given a time, or a locale-formatted string. **Fix.** ISO 8601 with a `Z` or offset; date-only columns take `2026-09-03`. ### 400 — "A validation error occurred. The value of 'X' on record of type 'Y' is outside the valid range." / choice value not valid **Cause.** An integer for a choice column that is not one of its options, or a number outside the column's min/max. **Fix.** Use the option's integer value from the column definition, not its label. ### 413 / "The request is too large" / "Maximum number of requests per batch exceeded" **Cause.** A `$batch` with more than 1,000 operations, or a payload above the request size limit. **Fix.** Chunk batches; keep change sets small so one failure does not roll back a thousand. ## Business rules and keys ### 400 — 0x80040333 "A record was not created or updated because a duplicate of the current record already exists." **Cause.** A duplicate detection rule matched an existing row (same email on contact, same name on account). **Fix.** If the duplicate is genuine, merge or update the existing row. If the write is deliberate, send `MSCRM.SuppressDuplicateDetection: true`. Consider whether the integration should use an alternate key upsert instead. ### 400 — 0x80040237 "Cannot insert duplicate key." **Cause.** An alternate key (unique index) already has a row with that value — an integration creating a row that exists, or two integrations racing. **Fix.** Use the alternate key in the URL with PATCH (`/accounts(new_externalid='ABC')`), which upserts. [Dataverse alternate keys](https://www.solvingdynamics365.com/guides/dataverse-alternate-keys) covers the design. ### 400 — 0x80040265 "ISV code aborted the operation" / a custom message **Cause.** A plug-in threw. The message is the plug-in's; the code is the envelope. **Fix.** [Dataverse plug-in exceptions](https://www.solvingdynamics365.com/guides/dataverse-plugin-exceptions-explained). ### 400 — business rule or required column: "You must provide a value for required field 'X'" / "Attribute: X … is not a valid attribute" **Cause.** Business-required columns and business rules apply to the API too. **Fix.** Supply the column; disable or scope the business rule if the API should bypass it. ### 412 — "The version of the existing record doesn't match the RowVersion property provided" **Cause.** An `If-Match` header with a stale etag. **Fix.** Re-read and retry; omit `If-Match` for last-write-wins. ## Throttling and limits ### 429 — 0x80072322 "Number of requests exceeded the limit of 6000 over time window of 300 seconds." ### 429 — 0x80072321 "Combined execution time of incoming requests exceeded limit of 1,200,000 milliseconds over time window of 300 seconds." ### 429 — 0x80072326 "Number of concurrent requests exceeded the limit of 52." **Cause.** Service protection limits per user (or per application user) per five-minute window: requests, execution time, and concurrency. Loops that call the API per row, unbounded parallelism, and `RetrieveMultiple` without paging all get here. **Fix.** Honour `Retry-After` with exponential backoff; reduce calls with `$select`, `$expand`, and batches; keep concurrency under the limit; spread heavy loads across application users only when the work is genuinely independent. **Prevention.** Design integrations around the limits from day one; the [polling vs push](https://www.solvingdynamics365.com/guides/polling-vs-push-patterns-for-dynamics-365) and [change tracking](https://www.solvingdynamics365.com/guides/change-tracking-in-dataverse) guides cover reducing calls at the source. ### "Sql error: Generic SQL error" — 0x80044150 / "Sql timeout expired" / deadlock **Cause.** Lock contention on hot rows or tables, a query without selective filters on a large table, or a synchronous plug-in holding a transaction. **Fix.** Retry once; add filters on indexed columns; shorten transactions. ### "Maximum request length exceeded" / attachments **Cause.** File and image uploads above the configured size; use the chunked file upload endpoints for large files. ## Query errors ### "The 'X' operator is not supported for the type" / "Function 'contains' is not supported on this property" **Cause.** An OData operator on a column type that does not support it — `contains` on a lookup, arithmetic on a choice. **Fix.** Filter on `_x_value` for lookups; use FetchXML for anything the OData translation cannot express — [FetchXML vs OData](https://www.solvingdynamics365.com/guides/fetchxml-vs-odata-in-dataverse). ### Only 5,000 rows returned / `@odata.nextLink` **Cause.** Paging. The response includes `@odata.nextLink` when more rows exist; callers that ignore it get a partial dataset with no error. **Fix.** Follow `nextLink` until absent; set `Prefer: odata.maxpagesize` to control page size. ## When it is not the Web API's fault Errors from a plug-in, a business rule, or a synchronous flow are surfaced through the API with their own messages inside the same envelope; the code above tells you which layer. And an error that only appears for some users and not others is a security-role problem until proven otherwise — [Dataverse security model](https://www.solvingdynamics365.com/guides/dataverse-security-model) and [field-level security](https://www.solvingdynamics365.com/guides/field-level-security-in-dataverse) are where to look. ### Frequently asked questions **How do I set a lookup through the Dataverse Web API?** With the navigation property and @odata.bind, not the attribute name: "parentcustomerid_account@odata.bind": "/accounts(guid)". Sending the GUID in _parentcustomerid_value or the attribute directly produces 'CRM do not support direct update of Entity Reference properties' or a 0x80048d19 payload error. **What does 0x80048d19 'Error identified in Payload provided by the user' mean?** The JSON body has a property Dataverse does not recognise for that table — a misspelt logical name, wrong case, a display name, a lookup set without @odata.bind, or a property that only exists on another table. The message that follows usually names the undeclared property. **What is the difference between 0x80040333 and 0x80040237?** 0x80040333 is a duplicate detection rule firing — a configured rule matched an existing row, and you can bypass it per request with the MSCRM.SuppressDuplicateDetection header if that is intended. 0x80040237 is a hard alternate-key violation — a row with that key already exists and the write is refused; use an upsert against the key instead. **Why do I get 429 or 0x80072322 under load?** Service protection limits per user: 6,000 requests, 20 minutes of execution time, and 52 concurrent requests per five-minute window. Batch, reduce calls, parallelise across users or app users where appropriate, and honour the Retry-After header with backoff. --- # Deferrals in Business Central How Business Central spreads revenue and expense across periods using deferral templates — annual subscriptions, prepaid contracts. Source: https://www.solvingdynamics365.com/guides/deferrals-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 **Deferrals** in Business Central spread revenue or expense across multiple accounting periods, automating what would otherwise be manual journal entries every month. The typical use case: a customer pays for a twelve-month subscription up front, but the revenue should be recognised one month at a time over the year. Or a company prepays a twelve-month insurance premium, and the expense should be recognised one month at a time. ## Deferral templates A **deferral template** defines: - The **deferral account** — the balance-sheet account where the deferred amount lives temporarily (deferred revenue liability for income, prepaid expense asset for outflow). - The **calculation method** — *Straight-Line*, *Equal per Period*, *Days per Period*, *User-Defined*. - The **number of periods** to spread across. - The **start date** — beginning of period, end of period, or based on the document date. - The **default GL accounts** for revenue or expense recognition. Templates are reused across many transactions, so you set them up once. ## Applying a deferral On a sales invoice, sales credit memo, purchase invoice, purchase credit memo, or G/L journal line, the user attaches a deferral template (or the template defaults from the item or GL account). At posting, Business Central: 1. Posts the full transaction amount to the **deferral account** (not the regular revenue/expense account). 2. Generates the deferral schedule — one ledger entry per period with the calculated amount. 3. Books the period entries automatically: the deferral account is reduced and the recognition account (revenue or expense) is increased, period by period. ## The deferral schedule view Each posted document with a deferral has a viewable schedule showing every recognition entry and its status (posted, pending, reversed). Useful for audit and for explaining numbers to controllers who are new to the mechanism. ## Reversals and adjustments A deferral can be reversed by posting a credit memo or G/L correction that triggers the reverse schedule. Partial cancellations and mid-stream changes are supported but require care — adjusting the underlying template doesn't retroactively change already-posted documents. ## Job and project use Project-related deferrals work alongside the WIP module, which has its own revenue and cost recognition mechanism for percentage-of-completion projects. Use deferrals for time-bound straight-line recognition; use WIP journals for milestone-driven recognition. ## Reporting Standard reports show: - Deferral movement per period (recognised, remaining, total). - Deferral schedules per document for audit. - Deferral balance by account at any date. These reconcile to the balance-sheet deferral accounts and validate the period-end financial statements. **Limits.** - Deferrals are time-based, not event-based — straight-line, not "recognise when the customer uses 50% of their entitlement". For event-based recognition, customers either post manual journals or use Subscription Billing (in BC's newer feature set). - Deferrals don't model complex ASC 606 / IFRS 15 contracts with multiple performance obligations. For those, customers move to **Dynamics 365 Finance Subscription Billing** or a specialist tool. ## Common use cases Annual subscriptions, prepaid insurance, annual licence fees, prepaid rent, deferred set-up fees, multi-period support contracts. --- # Demand planning in Dynamics 365 Supply Chain Microsoft's Demand Planning module — statistical forecasting, collaboration, scenarios, and the path from forecast to MRP. Source: https://www.solvingdynamics365.com/guides/dynamics-365-demand-planning Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 **Demand Planning** is Dynamics 365 Supply Chain Management's modern forecasting module, built natively on the Power Platform with embedded AI. It replaces an older, less-loved Demand Forecasting tool with a cleaner UX and a real planner workspace. ## The model A demand plan is structured around **dimensions** — typically item, location, customer or channel, and time bucket — and **measures** — historical sales, statistical forecast, collaborative forecast, final consensus forecast. Planners work in a grid that pivots across the dimensions, much like a planning spreadsheet, but backed by versioning, audit, and AI. ## Data inputs Historical sales transactions flow in from F&O. External signals (marketing campaigns, promotional plans, weather, macroeconomic indicators) can be loaded as additional measures through Dataverse or Power Automate. Open orders, planned orders, and inventory positions are pulled live from F&O for sanity checks. ## Statistical forecasting Built-in **forecasting models** include moving averages, exponential smoothing, ARIMA, and ML-based ensembles. Planners run the engine for a horizon, evaluate accuracy against held-out history (MAPE, WAPE), and select the best-fit model per item-location. The system can also recommend a model per series. ## Collaboration Sales and operations planning (S&OP) requires multiple stakeholders to contribute. Demand Planning supports **collaborative inputs** — sales teams override the statistical forecast for known opportunities; marketing layers campaign uplifts; finance applies budget alignment. Each contribution is tracked and the final consensus is calculated. ## Scenarios Planners can clone a baseline forecast into **what-if scenarios** — promotional uplift, supply constraint, market expansion — and compare side by side without disturbing the production plan. ## Outputs The final consensus forecast publishes to F&O as forecast lines that feed **master planning** (the supply-side engine). Forecast lines respect time fences, lead-time offsets, and consumption rules so MRP doesn't double-count actual orders against the forecast. ## Workflow Built-in approval workflow routes the published forecast through configurable approvers before it lands in F&O. ## Reporting Power BI templates ship with the module, covering forecast accuracy, bias, drift, and consensus variance. ## Where it stops Sophisticated S&OE (sales and operations execution), causal modelling, or supply-side scenario engines often combine Demand Planning with a third-party tool. For mid-market manufacturing and distribution, the built-in module is fully sufficient. --- # Designing dimensions in Business Central How to design a dimension structure that supports the reporting you actually need — global vs shortcut, mandatory rules, defaults, and combinations. Source: https://www.solvingdynamics365.com/guides/business-central-dimensions-design Section: Business Central / Finance & accounting Published: 2026-05-01 Updated: 2026-08-25 Dimensions are the analytical lens of Business Central. Designed well, they let you run any management report from the GL without ever multiplying the chart of accounts. Designed badly, they turn into an unenforced mess that everyone reports around. The design is one of the most consequential decisions in an implementation. ## Global vs shortcut Business Central has up to eight **global dimensions** — every transaction can carry a value for each of them, and they're filterable everywhere. Of those, two are **shortcut dimensions** that appear as columns on every transactional document (sales order line, purchase invoice line, journal line), making them easy to set. The other six global dimensions are still attached to every transaction but require an extra click to set; pick the two that are most operationally relevant as the shortcuts. ## Choosing dimensions Start from the management reports you want. Common dimensions: **Department / Cost Centre** (the unit owning the spend), **Project** (for project-billable businesses), **Customer Group** or **Region** (for sales analysis), **Salesperson** (for commissions), **Brand** or **Product Line** (for marketing roll-ups). Don't reach for dimensions that simply replicate data already on the transaction — date, customer number, item number all flow naturally; reporting them needs no dimension. ## Default values Master records — customers, vendors, items, GL accounts, employees, locations — can default dimension values onto the transactions they appear on. Configure defaults so that the right values get set automatically; manual setting should be the exception. ## Default rules **Mandatory** rules force a dimension value to be present before posting (typical for Department). **Same Code** rules force a dimension to match another dimension's value (rare; typical use is two related dimensions that should never disagree). **No Code** rules block a dimension on certain accounts (e.g. balance sheet accounts shouldn't carry a Project dimension). ## Dimension combinations A separate matrix defines which combinations of dimension values are valid (e.g. Project X is only valid with Department A). Combinations are powerful but get heavy to maintain — use sparingly. ## Renaming and deleting Dimension values can be merged or renamed; once they've been used on posted transactions, they cannot be deleted. So plan the initial coding scheme to leave space (e.g. number gaps) for future expansion. ## Don't reach eight Companies that use all eight global dimensions are usually under-using their chart of accounts. Aim for four to six clean dimensions and a tidy CoA. ## Where to go next Dimensions feed everything downstream: the [finance module](https://www.solvingdynamics365.com/guides/business-central-finance-module), [financial reports and account schedules](https://www.solvingdynamics365.com/guides/business-central-account-schedules-and-financial-reports), and [multi-company setup](https://www.solvingdynamics365.com/guides/business-central-multi-company-setup) all assume the structure is right. The companion decision is [posting groups](https://www.solvingdynamics365.com/guides/posting-groups-in-business-central), and the errors a bad dimension setup produces at posting time are decoded in [journal and document posting errors](https://www.solvingdynamics365.com/guides/business-central-journal-and-document-posting-errors). --- # Direct debits (SEPA and others) in Business Central How Business Central handles customer direct debits — SEPA mandates, collection runs, R-transaction handling, and integration with bank file formats. Source: https://www.solvingdynamics365.com/guides/direct-debits-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 For subscription businesses, utilities, fitness clubs, and any other operation that wants predictable cash collection without chasing customer payments, **direct debit** is the canonical mechanism. The customer authorises the seller (once, via a signed mandate) to withdraw amounts from their bank account on a published schedule. Business Central supports the workflow end-to-end with **SEPA Direct Debit** built in for the European market and configurable formats for other jurisdictions. **The model.** - **Mandate** — a customer's authorisation, identified uniquely. SEPA mandates use a **Unique Mandate Reference (UMR)** and capture date of signature, type (one-off vs recurring), and parameters. - **Direct Debit Collection** — a batch of customer ledger entries (open invoices) to be collected on a specific date. - **Direct Debit Collection Entries** — the individual line items inside a collection, one per invoice or per customer. - **Bank Export File** — the structured XML the customer's bank can process — for SEPA, the *pain.008* schema. ## Mandate management Each direct-debit customer needs an active mandate. The mandate is set up: - The customer signs an authorisation (paper, e-signature, or portal-based digital consent). - The user creates a *SEPA Direct Debit Mandate* on the customer card with the UMR, signature date, status (Active, Closed, Cancelled), and parameters (recurring vs one-off, *FRST* vs *RCUR* vs *FNAL* schemes for first / recurring / final). - The mandate ties to a specific customer bank account. ## Collection runs The **Create Direct Debit Collection** routine: 1. Filters open customer ledger entries by criteria (customers with active mandates, due dates within range, payment method = Direct Debit). 2. Proposes a collection batch. 3. The user reviews and adjusts — exclude customers in dispute, defer specific entries, change amounts. 4. The user **Exports** the collection as a bank file (SEPA pain.008). 5. The bank file is uploaded to the bank for processing. ## Posting the collection When the bank confirms successful collection (typically 2–5 business days for SEPA), the user **posts** the collection in BC, which: - Applies the collected amounts to the customer ledger entries. - Reduces outstanding AR. - Posts the corresponding bank account ledger entry (or accrues to a *direct debit suspense* account pending final settlement). ## R-transactions (return transactions) Banks return failed direct debits — customer disputed, account closed, insufficient funds, mandate not recognised. SEPA defines **R-transactions** with reason codes. BC's direct debit handling reverses returned collections, sets the ledger entries back to open, optionally raises an alert for collections follow-up, and may charge an R-transaction fee back to the customer. **Other jurisdictions.** - **UK** — Bacs Direct Debit Instruction (DDI). Different scheme than SEPA; requires Bacs-approved bureau or own SUN. BC supports through partner ISVs. - **US** — ACH debits (NACHA format). Pull-payment ACH similar to direct debit. - **Nordics** — country-specific schemes (Autogiro in Sweden, Direkte Debet in Norway, etc.). Local ISV connectors handle the formats. - **Australia** — Direct Debit Request (DDR), bank-specific. ## Lifecycle and notifications Mature direct debit programmes notify customers in advance of collection (some jurisdictions require it — SEPA Core mandates 14-day notification by default). Power Automate flows can send pre-notice emails based on the proposed collection batch. **Compliance.** - **SEPA scheme rulebook** — mandate format, advance notice, R-transaction handling, recovery rights. - **Country-specific consumer-protection rules** — recovery windows, dispute procedures, regulatory notifications. - **GDPR for mandate storage** — store mandates with appropriate retention and protection. ## Operational reality Direct debit is high-leverage for the right business: collections cost a fraction of invoice-chase. But mandate hygiene matters — invalid mandates cause R-transactions, which damage bank relationships and customer trust. Manage actively. --- # Disaster recovery and backups in Dynamics 365 How Microsoft handles backup and disaster recovery for Dynamics 365 — point-in-time restore, regional pairing, RPO/RTO, and what customers should do on top. Source: https://www.solvingdynamics365.com/guides/disaster-recovery-and-backups-in-dynamics-365 Section: Implementation / Operations & support Published: 2026-05-01 A common Dynamics 365 customer question — "what happens if Microsoft's data centre goes down" — has a well-defined answer. The platform's disaster recovery is built in, but several customer responsibilities sit on top, and several customer-side scenarios (logical corruption, accidental deletion) aren't covered by Microsoft's automatic measures. **Backups — what Microsoft does automatically.** - **Dataverse / Dynamics 365 CRM-side apps.** Continuous backup with **28 days of point-in-time restore** at the environment level. Production environments are protected; sandboxes have shorter retention. - **Business Central.** Backup retention of 28 days; **point-in-time restore** self-service from the BC admin centre to any moment in the past 28 days. Restores land as a new environment alongside the live one — manual cutover is the customer's choice. - **Finance and Supply Chain.** Production environments have **database backup** with restore through Microsoft support. Sandboxes can be **point-in-time-refreshed** from production via LCS. Restore is restoration to a *new environment* — the live environment continues running. The customer chooses whether to switch over, copy data forward, or treat the restored environment as a side-by-side reference. **Regional disaster recovery.** - Microsoft pairs Azure regions (e.g. North Europe ↔ West Europe) for disaster recovery. - In a regional outage, Microsoft fails Dynamics 365 services over to the paired region. **Recovery Point Objective (RPO)** is typically less than 15 minutes — data loss in a regional failure is bounded to the last 15 minutes of activity. **Recovery Time Objective (RTO)** is typically less than 12 hours for full restoration. - These numbers are published in Microsoft's Service Level Agreements; specific products may vary. - Customers don't need to do anything to trigger regional DR — Microsoft handles it. **What backups don't cover.** - **User error** — someone bulk-deletes a thousand records by accident. The records are gone from the live environment but recoverable from the 28-day point-in-time backup. - **Logical corruption** — a bad import overwrites correct data with wrong data. Point-in-time backup lets you go back to before the import. - **Long-term archive.** 28 days is enough for most operational mistakes, but if regulatory retention requires 7+ years, the customer must export data separately to an archive (Azure Data Lake, OneLake, on-prem archive). Microsoft's backup is not the regulatory retention solution. - **Cross-environment corruption.** A poison message processed across many environments via integration. Each environment must be assessed and restored individually. **Customer responsibilities.** 1. **Solution and configuration backups.** Solutions (managed export packages) should be version-controlled in source control. AL extensions, X++ code, Power Apps, flows — all stored in Git, deployable from CI/CD. Microsoft's backups protect the platform; your code is your responsibility. 2. **Data exports for archive.** Schedule periodic exports of Dataverse data to a customer-owned archive — Azure Data Lake, OneLake, or another store. Use **Synapse Link for Dataverse** for continuous near-real-time export. 3. **Test the restore.** Periodically — annually at minimum — actually run a restore drill on a sandbox to verify the process works and the team knows how to execute it. 4. **Operational runbook.** Document the steps for restore in different scenarios: bulk-deletion recovery, logical corruption recovery, regional DR drill response, full re-implementation worst-case. 5. **Vendor-controlled environments.** For BC SaaS and F&O, the customer doesn't own the infrastructure — Microsoft does. The customer's runbook focuses on what the customer can do (request a restore, copy environments, redirect integrations), not on what Microsoft owns. ## Communication During a Microsoft-side outage, monitor the **Microsoft 365 Service Health** page and the **Tenant Admin Centre** for status. Communicate to internal users; don't speculate on causes or timelines. ## Practical advice Most "disaster" scenarios are user error or logical corruption, not regional outages. Optimise your operational runbook for the common cases. --- # Discounts and pricing in Dynamics 365 Commerce How Commerce handles retail pricing and discounting — base prices, trade agreements, discount engines, and the rules that govern complex promotional logic. Source: https://www.solvingdynamics365.com/guides/discounts-and-pricing-in-commerce Section: Finance & SCM / Retail & commerce Published: 2026-05-01 Retail pricing is some of the most complex logic in any ERP. A customer scanning a product at the till should see the right price, with the right active promotion, with the right customer-tier discount, with the right tax — all computed in milliseconds. Dynamics 365 Commerce has one of the most sophisticated discount engines in mid-to-large retail; understanding it is essential to deploying it well. ## Base price hierarchy Every product has a price determined by walking a hierarchy: 1. **Trade agreement** — customer-specific or customer-group-specific pricing. 2. **Channel-specific price** — the store / e-commerce site's overriding price for the product. 3. **Sales price** on the product master. The most specific applicable rule wins. Customer-specific overrides channel-specific; channel-specific overrides master. ## Trade agreements **Trade agreements** are pricing and discount rules attached to: - **Item** + **Customer** combinations. - **Item group** + **Customer group** combinations. - **All items** + **All customers** (broad rules). - Date ranges per rule (promotional pricing with effective dates). A customer can have many trade agreement lines; the engine picks the best applicable price or discount automatically. ## Discount engines Beyond base prices, **discounts** apply additional reductions: - **Simple discount** — fixed % off or fixed amount off. - **Quantity-based discount** — buy 3, get 10% off. - **Mix-and-match discount** — buy any 3 items from category X, pay for 2. - **Threshold discount** — spend over €100 and get 15% off the total. - **Multiple-buy discount** — buy product A and get product B at discount. Each discount has: - **Discount code** — unique identifier. - **Validity period** — start and end dates. - **Concurrency** — can this discount stack with others (e.g. customer loyalty + promotional discount) or is it exclusive. - **Channel filter** — which channels (stores, e-commerce, B2B) the discount applies to. - **Customer filter** — which customer groups. - **Item filter** — which items or categories. ## Concurrency When multiple discounts apply to a transaction, the engine evaluates **concurrency** — which can combine and which are exclusive. Configurable per discount; typical patterns: - Loyalty discount stacks with promotional discount (additive). - Customer-tier discount and promotional discount: most specific wins (no stacking). - Manager override: replaces all other discounts. ## Loyalty Loyalty programs integrate with the discount engine: - **Tier-based** — Bronze members get 5%, Silver 10%, Gold 15%. - **Point accrual and redemption** — earn points on purchases; redeem points as discount. - **Birthday rewards** — special offers around customer birthdays. - **Threshold-based** — spend €X this quarter and earn a discount. ## Coupons **Coupons** are codes the customer enters or presents at checkout (manual entry, barcode scan, mobile-app reveal). The coupon validates against rules (one-time use, multi-use, customer-specific, channel-specific) and applies its associated discount. ## Tax interaction Tax in retail is complex (sales tax in the US, VAT in EU, GST elsewhere). The pricing engine handles tax-inclusive or tax-exclusive pricing per channel, with tax computed on either the gross or net price based on configuration. ## Performance The engine runs at the till in real time; it must compute correctly in milliseconds. The store-level cache holds active prices and discounts so offline operations don't lose pricing. **Common pitfalls.** - **Discount stacking surprise** — too-generous concurrency lets every discount stack, eroding margin. - **Conflicting trade agreements** — overlapping rules without clear precedence produce inconsistent prices. - **Expired discounts not removed** — old promotions linger and confuse staff. - **Customer-tier overrides** — VIP customers' tier discount unintentionally overridden by a generic promotional discount. ## Operational discipline Test every promotion at the till before going live. Document concurrency rules clearly. Review the discount catalogue quarterly to retire stale rules. The engine is powerful enough to do almost anything; that's the danger as much as the strength. --- # Discrete vs process vs lean manufacturing in F&O How Dynamics 365 Supply Chain supports three manufacturing modes — what each one is, when they apply, and how they coexist in a single tenant. Source: https://www.solvingdynamics365.com/guides/discrete-vs-process-vs-lean-manufacturing-in-f-and-o Section: Finance & SCM / Manufacturing Published: 2026-05-01 Dynamics 365 Supply Chain Management supports three distinct manufacturing modes — **discrete**, **process**, and **lean** — that can coexist in a single tenant on a single environment. Choosing which mode applies per item drives the entire production-execution behaviour for that item. Many F&O customers run two modes side by side, with each suiting different production lines or business divisions. ## Discrete manufacturing The classic batch production model. Used for products that are *built* — assembled from discrete components into discrete finished units. Examples: vehicles, electronics, furniture, machinery, medical devices, consumer goods packaging. - **Production BOMs** define the components. - **Routings** define operations on work centres. - **Production orders** execute the build, with consumption journals capturing material usage and output journals capturing finished units. - **Cost** flows component-by-component into WIP, then into the finished item on completion. Discrete is appropriate when each finished unit is countable and tracked individually (e.g. one car, one laptop, one chair). The production order pattern matches the work: a planned quantity, components consumed, finished units output. ## Process manufacturing For products that are *made* through chemical, biological, or physical processes. Examples: food, beverage, pharma, chemicals, cosmetics, paint, lubricants. Different from discrete because: - **Formulas** replace production BOMs. Formulas have proportional ingredients that scale with batch size, plus yield factors (a 1000 kg batch input doesn't necessarily produce 1000 kg of output). - **Co-products and by-products** — a single batch can produce multiple finished items simultaneously (process meat: cuts, trimmings, bone-meal byproduct). The cost allocation across co-products is itself a configuration concern. - **Catch weight** — items priced per unit but inventoried by weight (one cheese wheel = 1 piece but variable kg). Critical for meat, fish, cheese, produce. - **Batch attributes** — fat %, alcohol %, pH, brix — attached to each batch, available for pricing, picking, and customer-spec filtering. - **Shelf life** — manufacturing date and expiry date per batch, with FEFO (first expired first out) picking. - **Quality** — process industries have substantial quality testing; integrated quality management associates test results with batches. Process is appropriate when output is continuous, with variability per batch, with co-products / by-products, with shelf-life concerns. ## Lean manufacturing A different paradigm — pull-based replenishment, kanban-style. Used in repetitive manufacturing environments where the same products are made continuously: automotive, electronics, fast-moving consumer goods. - **Production flows** define the steps in a value stream. - **Kanban rules** define what triggers replenishment — withdrawal kanbans (move material from inventory to consumption point), production kanbans (start production when WIP runs low). - **Kanban cards** are visual or electronic signals that drive operations without large planned production orders. - **Heijunka boards** balance production to demand. Lean is the right pattern when production is high-volume, repetitive, and where small batches with frequent replenishment fit operations better than large MRP-driven production orders. ## Mixing modes A single F&O tenant can run all three. A consumer-goods manufacturer might make the chemicals (process), assemble the packaging (discrete), and run the packaging line (lean). Each item is tagged with its **production type** that drives the engine's behaviour for that item. ## Cost accounting across modes Standard cost works across all three; actual cost works across all three. The cost reconciliation at period close treats each mode's WIP, components, and outputs correctly. **Common pitfalls.** - **Wrong production type for the item** — using discrete for a process-style operation produces no useful planning; using process for a discrete item over-engineers. - **No clear conversion factor** for catch weight — products mispriced or mis-stocked. - **Mixed-mode plants without clear policy** — operators confused about which orders to handle which way. ## Operational reality The implementation work scales with the number of modes used. Single-mode operations land cleanly; multi-mode operations need substantially more design, training, and ongoing process discipline. ### Frequently asked questions **Can one Supply Chain Management environment run discrete, process, and lean manufacturing at once?** Yes. Each item carries a production type that drives the engine's behaviour, so a consumer-goods manufacturer can make chemicals in process mode, assemble packaging in discrete mode, and run the packaging line lean, all on one site. **What is the difference between a production BOM and a formula?** A production BOM lists discrete components for a countable finished unit. A formula has proportional ingredients that scale with batch size, yield factors, co-products and by-products, and often catch-weight and shelf-life handling — the process manufacturing model. **When is lean manufacturing the right mode?** For high-volume, repetitive production where kanban-driven pull replenishment fits better than large MRP-planned production orders — automotive, electronics, fast-moving consumer goods. Production flows and kanban rules replace planned orders. **What is catch weight?** Items priced per unit but inventoried by weight — a cheese wheel is one piece but a variable number of kilograms. It is essential for meat, fish, cheese, and produce, and a missing conversion factor is a classic process-manufacturing implementation error. --- # Document attachments in Business Central How Business Central stores attached files — the Attached Documents pattern, OneDrive and SharePoint integration, retention. Source: https://www.solvingdynamics365.com/guides/document-attachments-in-business-central Section: Business Central / Admin & ops Published: 2026-05-01 Every record in Business Central can carry attached files — a scanned invoice on a purchase invoice, a contract on a customer, a CAD drawing on an item. BC provides several mechanisms with different storage, retention, and licensing characteristics. The decisions matter: at scale, attachments are the dominant tenant size driver. ## The factbox pattern Most BC pages display an **Attachments** factbox on the right. Adding a file uploads it into the **Tenant Media** table, linked via a **Document Attachment** record to the source document. The attachment stays bound to the original document; if the document is archived or posted, the attachment moves with it. ## Storage in the tenant database Files saved via the Attachments factbox land in the BC tenant database. Pros: no external service, naturally backed up with the tenant, single security model. Cons: tenant storage is metered and not cheap at scale (typically 80GB included, then per-GB charges); large attachment volumes inflate the tenant footprint and slow backups. ## OneDrive integration With **Open in OneDrive** and **Share via OneDrive** features, BC links documents stored in the user's OneDrive for Business. The file lives in OneDrive, BC stores only a link. Pros: no tenant storage cost; OneDrive licensing is already there for M365 users; collaborative editing for free. Cons: the link breaks if the file is moved or the owning user leaves; OneDrive personal scope creates governance complexity. ## SharePoint integration Often layered via custom code or AppSource extensions, SharePoint storage is the enterprise pattern. The file lives in a SharePoint document library; BC stores a link plus metadata. Pros: enterprise document management features (retention, eDiscovery, version history); centralised governance. Cons: requires SharePoint setup, library structure, permissions design. ## Item attachments Items carry a dedicated **Item Attribute** and `Item Reference` framework plus standard document attachments. Product images, spec sheets, safety data sheets — typically attached at item level. For larger image needs, item images are stored separately with a thumbnail in BC and the full image on a CDN. ## Linked vs embedded Two patterns: - **Embedded** — the file binary is stored inside BC. Self-contained but storage-heavy. - **Linked** — only a URL or reference is stored; the binary lives elsewhere (OneDrive, SharePoint, Azure Blob). Most production BC tenants over a year old benefit from linked storage; embedded is fine for low-volume scenarios. ## Incoming documents A separate but related feature, **Incoming Documents** is a list of inbound files (vendor invoices, expense receipts) that haven't yet been processed into a purchase invoice. Workflow: 1. File arrives by email, OCR feed, or upload. 2. An Incoming Document record is created. 3. Operator reviews, optionally runs OCR (Continia, Continia Document Capture, or AppSource), and creates a purchase invoice from the document. 4. The incoming document remains attached to the resulting invoice. This is the AP automation gateway in BC. ## Retention and deletion Attachments have no built-in retention rules — they stay until manually deleted. For SOX or GDPR-relevant data, attachments must be included in retention policies: - Power Automate flows can periodically delete attachments older than X years. - Manual archival to SharePoint with retention labels is the enterprise approach. - BC's data archival tools (introduced wave-by-wave) may automate this in future. ## Versioning No native version history in BC attachments — replacing a file overwrites. SharePoint integration brings versioning. For compliance-heavy environments, this is a strong argument for SharePoint over embedded storage. ## Mobile capture BC's mobile and tablet apps support attachment capture — photograph a receipt and it attaches to the expense or purchase invoice. The image goes through OCR if configured. ## Security model Attachments inherit the host record's permissions. If a user can read the purchase invoice, they can read the attachment. For sensitive documents (contracts, salary letters), check that BC's record-level permissions match your information classification. **Common pitfalls.** - **Database bloat.** Years of attachments at high volume → multi-TB tenant → backup and refresh pain. Architect for external storage early. - **Broken OneDrive links.** Departed users; the rebuild of links is manual. Use SharePoint or service-account OneDrive for shared business documents. - **OCR confidence ignored.** OCR misreads → wrong invoice data flows through; always include a verification step before posting. - **No retention discipline.** GDPR requests then become an attachment audit. Plan retention from day one. ## Operational rule For low-volume tenants (under 5 GB of attachments after a year), embedded storage is simplest. For higher volume or compliance needs, design a hybrid pattern — operational attachments embedded, archived attachments in SharePoint, links instead of binaries where possible. --- # Document layouts and report design in Business Central Customising invoices, statements, and other Business Central documents — Word and RDLC layouts, per-customer and per-language selection, and PDF generation. Source: https://www.solvingdynamics365.com/guides/document-layouts-and-report-design-in-business-central Section: Business Central / Compliance & localisation Published: 2026-05-01 Customer-facing documents — invoices, quotes, statements, packing slips, order confirmations, purchase orders — are usually the first thing a Business Central implementation needs to brand and tune. Microsoft makes this accessible: most documents use **Word-based layouts** that non-developers can edit, with the older **RDLC layouts** still supported for legacy and complex needs. ## Report and document objects Each printable document is a Business Central *report object* — a metadata-defined dataset (the report's variables and structure) paired with one or more **layouts** that visualise the data. Out of the box, each common report has both an RDLC and a Word layout available; users pick which is active for their company. ## Word layouts The modern path. A Word layout is a `.docx` file containing the report layout — fonts, logos, colours, headers, footers, table structure — with **content controls** for the data fields. Editing it requires no developer; a marketing or finance team member opens it in Word, adjusts the design, saves, and uploads to Business Central. Multiple Word layouts per report are supported, so an invoice can have *Standard*, *Pro Forma*, and *Service* variants. ## RDLC layouts The older path, edited in Microsoft Report Builder or Visual Studio. More powerful for complex tabular content, charts, and conditional rendering — but requires technical skill and access to design tools. Most customers leave Microsoft's RDLC layouts as a fallback and do their customisations in Word. ## Per-customer layouts A specific customer can be assigned a custom report layout via the **Document Layouts** page on the customer card. The same logic supports per-vendor layouts. Useful when a major customer demands a specific format or language. ## Per-language layouts Each layout can be attached to a language code, so a customer with `language code = SV` gets the Swedish invoice layout automatically when their invoice is printed; a customer with `language code = DE` gets the German one. The translation file underneath the report provides translated labels. ## PDF generation Posted documents are emailed or stored as PDF by default. The PDF is generated server-side from the layout. Inline attachments (the customer's PO, a delivery note) can be merged into the PDF at sending time using *Email Body Layouts* in conjunction with the document layout. ## Email body layouts A separate Word template defines the *body* of the email that sends the document — different from the attached PDF. So an invoice email can have a friendly Word-templated message body with the formal invoice PDF attached. ## Reporting (analytical) For analytical reports (sales by salesperson, inventory ageing, P&L), the path increasingly favours **Power BI** over RDLC. Word-based document layouts are for transactional documents; analytical reports live in Power BI for interactivity and modern design. **Limits.** - Word layouts don't support some complex tabular calculations that RDLC can handle; for those, RDLC remains the fallback. - Very heavy graphics (multi-column billing summary with charts) push against Word's design ceiling. - HTML email body composition has constraints; complex HTML often renders inconsistently across mail clients. ## Operational tip Build a small library of standard email body layouts (transactional, payment reminder, statement) and keep them under version control alongside the AL extensions. --- # Document templates and Word mail merge in Dynamics 365 How to generate Word and Excel documents from Dataverse records — document templates, mail merge, and the customer-facing document workflow. Source: https://www.solvingdynamics365.com/guides/document-templates-and-word-mail-merge Section: Customer Engagement / Dataverse platform Published: 2026-05-01 For customer-facing documents — proposals, contracts, statements, certificates, personalised letters — Dynamics 365 generates Word and Excel files from **document templates** bound to record data. The mechanism replaces what used to be manual Excel exports and copy-paste, producing consistent, branded documents with one click. ## Document templates A **document template** is a Word or Excel file with **placeholder content controls** that bind to Dataverse fields. The user creates a record (an Opportunity, a Quote, an Order, a Customer), clicks *Word template* or *Excel template*, picks a template, and the system generates a personalised file with the record's data filled in. **Creating a Word template.** 1. From the record page, click *Word Templates → Create Word Template*. 2. Choose the source entity (Account, Opportunity, etc.) and related entities to include (Contacts on the Account, Opportunity Products, etc.). 3. Download the template skeleton — a `.docx` with the XML schema for the chosen data. 4. Open in Microsoft Word. The **XML Mapping Pane** (Developer tab → XML Mapping) shows the available fields from the selected entities. 5. Design the document layout — headings, paragraphs, tables, images, branding. 6. Drag fields from the XML Mapping Pane to insert content controls. A `{!Name}` placeholder for the customer name; a `{!Total Amount}` for the opportunity value; a repeating section for line items. 7. Save the template. 8. Upload back to Dynamics 365. The template is now available for that record type. Selecting it generates a personalised document. **Excel templates** work similarly — for analytical or spreadsheet-style outputs. ## System templates vs personal templates Templates can be **system-wide** (available to all users with permission) or **personal** (visible only to the creator). System templates are governed through solution lifecycle. **Common use cases.** - **Sales quote PDF** — Word template that renders a branded quote document from an Opportunity's products and prices. - **Statement of work** — long-form document with sections personalised to the customer and engagement. - **Welcome letter** — personalised onboarding letter to new customers. - **Service report** — a Word template summarising completed cases or work orders for the customer. - **Certificates** — training completion, compliance certifications, audit attestations. - **Inspection reports** — Field Service inspection results rendered as a customer-facing PDF. **Limits.** - **Single record at a time** typically — Word templates target one record (and its related records), not bulk lists. - **Limited formatting flexibility** — Word's content controls don't support arbitrary advanced layouts. Heavy graphic design is awkward. - **Performance on large repeating sections** — a template iterating over 10,000 line items will be slow. - **No e-signature integration native** — generate the document, then send to DocuSign / Adobe Sign / similar. ## Mail merge (legacy) Older Dynamics CRM versions had a **mail merge** feature explicitly for bulk personalised letters / emails from a list of records. This has been largely deprecated in favour of: - **Customer Insights – Journeys** for marketing-grade bulk personalised email. - **Word templates with Power Automate flow** for bulk PDF generation (a flow iterates records, generates a document per record, distributes). The pattern for "generate 500 personalised letters" today: build a flow that loops the records, calls the Word template service, attaches the resulting file to each record, optionally emails. ## Power Automate integration Modern bulk-document patterns use Power Automate: - **Trigger** — a button on a view, a scheduled run, or a Dataverse event. - **Action: Populate a Word template** — supply a template and the source record data. - **Action: Convert to PDF** (optional) — for distribution. - **Action: Send email with attachment** or attach to the source record. This pattern combines Word templates with flow logic to handle the bulk case. ## Branding consistency A useful pattern: build a small library of Word templates for the company — 5–10 templates covering the major customer-facing scenarios — branded consistently. Maintain centrally in a solution; users select from the library rather than rolling their own. **Common pitfalls.** - **Template references fields that don't exist** — if the schema changes, templates break silently. - **Repeating sections without proper grouping** — generate documents missing line items or with duplicated data. - **Heavy templates exceeding limits** — very large documents may fail to generate. ## Operational reality Word templates are the unglamorous workhorse of customer document generation. Built well, they save hours per week per sales / service rep. --- # Documentation strategies for Dynamics 365 implementations What to document, who reads it, and how to keep documentation current — functional design, runbooks, training materials. Source: https://www.solvingdynamics365.com/guides/documentation-strategies-for-dynamics-365 Section: Implementation / Operations & support Published: 2026-05-01 Documentation is the most procrastinated, most undervalued, and most regretted artefact of every Dynamics 365 implementation. Teams produce too much of the wrong kind, too little of the right kind, and let it rot once go-live ends. A clear documentation strategy — what's needed for whom and how it stays current — turns documentation from a chore into a working asset. **The audiences.** - **End users** — need task-level "how do I do X?" guides. - **Power users / champions** — need conceptual + task-level + troubleshooting. - **Support staff** — need runbooks for common issues, escalation paths. - **Administrators** — need configuration references, environment topology. - **Developers / extenders** — need architecture, integration interfaces, code conventions. - **Auditors** — need traceability: design decisions, security model, compliance posture. - **Future implementers** — need to understand why it's set up this way. Each audience benefits from different documentation; one document can't serve all. **Document types.** - **Functional Design Document (FDD)** — what the system does for each business process. - **Technical Design Document (TDD)** — how it does it (architecture, customisations, integrations). - **Configuration workbook** — every parameter setting and why. - **Training materials** — user-facing how-tos, role-based. - **Runbooks** — step-by-step procedures for operations. - **Architecture diagrams** — visual representations. - **Data dictionary** — every entity and field documented. - **Integration specs** — interface definitions. - **Security model** — roles, BUs, teams, permissions. - **Change log** — what changed over time, why. - **Lessons learned** — post-project retrospectives. Not every project needs all of these; scale to project complexity. **Where documentation lives.** - **Microsoft Loop** — collaborative pages; great for living docs. - **SharePoint / OneNote** — common for stable docs. - **Confluence** — outside Microsoft, common in development teams. - **Markdown in repo** — for technical docs near the code. - **Word + SharePoint** — traditional; works but harder to maintain. - **In-product help** — link to documentation from app. Choose tools the team will actually use; the best documentation system is one with low friction. **Living vs static.** - **Living docs** — continuously updated; reflect current state. - **Static docs** — snapshot at a point in time (e.g., signed-off FDD at end of design phase). Some documents are intentionally static (audit trail of design decisions); others must live. Mixing the two without clarity creates confusion. ## Functional design documents Per business process: - **Process narrative** — what the process does in plain English. - **Roles involved** — who does what. - **System flow** — screens visited, actions taken. - **Business rules** — validation, calculation logic. - **Edge cases** — exception handling. - **Reports / outputs** — what the process produces. - **Decisions and rationale** — why this approach. FDDs are most valuable when they capture the "why" — the rationale future maintainers won't otherwise have. ## Runbooks Operational documents: - **Title** — clear description of the procedure. - **When to use** — trigger conditions. - **Prerequisites** — access, tools, info needed. - **Steps** — numbered, atomic. - **Validation** — how to confirm success. - **Rollback** — if something goes wrong. - **Escalation** — who to call. Examples: monthly close runbook, payment journal procedure, year-end inventory close, environment refresh. **Documentation cadence.** - **During design** — FDDs created and signed off. - **During build** — TDDs maintained as code evolves. - **At UAT** — training materials drafted. - **At go-live** — runbooks finalised; user guides published. - **Post-go-live** — ongoing updates; lessons learned captured. ## Keeping documentation current The chronic problem. Mitigations: - **Ownership** — each document has a named owner. - **Review cadence** — quarterly review at minimum. - **Triggered updates** — process changes trigger documentation update. - **Documentation in definition of done** — code/config changes require doc updates before "done." - **Audit** — periodically sample-check accuracy. Without these, docs drift from reality within months. ## Documentation as code For technical documentation: - Store in git alongside source. - Update with PRs reviewed alongside code. - Generate from code where possible (data dictionary from schema). This pattern produces highest-quality technical docs but requires git-comfortable team. **AI-assisted documentation.** - **Drafting from screenshots** — AI converts demos into draft how-tos. - **Summarising** — long FDDs summarised into key points. - **Translation** — multilingual docs at scale. - **Q&A over docs** — Microsoft Copilot or custom search. AI accelerates documentation creation but doesn't replace the human judgement of what matters. **Training materials.** - **Video walkthroughs** — for visual learners. - **Step-by-step quick reference** — for power users. - **FAQs** — for common confusions. - **Cheat sheets** — printable summaries. - **Sandbox exercises** — hands-on practice. For wide-rollout deployments, training materials are essential and often outsourced to specialist firms. **Common pitfalls.** - **Documentation as project deliverable only.** Created at end of project, never updated; obsolete in 6 months. - **Wrong audience.** Technical docs written for execs; FDDs written for developers. - **Over-documentation.** Hundreds of pages nobody reads; signal lost in noise. - **Under-documentation of decisions.** Choice made without rationale; future maintainers can't tell why. - **Tooling sprawl.** Docs scattered across SharePoint, Confluence, OneNote, email, individual hard drives; nothing findable. - **No search.** Without search, even good docs go unused. ## Strategic positioning Documentation is a cumulative investment. Each well-maintained document compounds value as users find it, as audits succeed, as new staff onboard quickly. Each poorly-maintained document erodes trust as people discover stale information. The strategic question is which documents to maintain; the operational discipline is keeping them current. Most teams get this wrong — too much, too stale, too unfindable. The teams that get it right invest in fewer documents, kept current, easy to find. Less is more if "less" is reliable. --- # Donor management with Customer Insights and Dynamics 365 Sales How nonprofits run donor management on Dynamics 365 — the constituent data model, gifts, pledges and recurring giving, major-gift pipelines in Sales. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits-donor-management Section: Industries / Nonprofit Published: 2026-09-02 Donor management is a CRM problem with three twists: the "customer" is a constituent who may be a donor, a volunteer, a beneficiary, and a board member at once; the "sale" is a gift with tax and restriction attributes; and the relationship is measured in decades, not quarters. Dynamics 365 handles it through **Sales** for the pipeline, **Customer Insights** for segmentation and journeys, and Dataverse for the constituent model — with the **Cloud for Nonprofit** data model on top if the organisation adopts it. This guide covers the patterns that work and the parts that need a partner. For the industry overview see [Dynamics 365 for nonprofits](https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits); for what Cloud for Nonprofit adds, [Microsoft Cloud for Nonprofit](https://www.solvingdynamics365.com/guides/microsoft-cloud-for-nonprofit). ## The constituent model Start from the person, not the donation. A constituent is a contact; organisations are accounts; and the roles a constituent plays are relationship records, not separate contact records. The single most damaging shortcut in nonprofit CRM is a "Donors" table separate from "Volunteers" separate from "Event attendees", because within a year the same person is in all three with different addresses. Design decisions that matter early: - **Households.** Couples give jointly, receive one mailing, and are acknowledged together. Model a household as an account of a specific type with contacts as members, or use the Cloud for Nonprofit data model's household concept. Either works; picking neither leads to duplicate acknowledgements. - **Preferred contact and solicitation preferences** on the contact, including do-not-solicit and channel preferences, enforced by journeys and mailing exports rather than remembered by staff. - **Duplicate detection** switched on from day one, with rules on email and on name plus postcode; the [duplicate detection](https://www.solvingdynamics365.com/guides/duplicate-detection-rules-in-dataverse) guide covers the mechanics. Donor data arrives from many sources — online forms, event lists, legacy imports — and merges are far cheaper before the second gift than after the tenth. ## Gifts, pledges, and recurring giving A gift is its own table, not an opportunity. It carries amount, date, fund or designation, campaign and appeal, payment method, soft credits, tribute information, and receipt status. Cloud for Nonprofit's data model provides this; organisations building without it should create the table rather than repurposing opportunities, which lack the attributes and carry pipeline semantics that confuse reporting. Pledges are commitments with a schedule; recurring gifts are open-ended instructions. Both generate expected gifts that are matched to actual receipts. The matching is where payment processing comes in, and it is where the product stops: card and direct-debit processing, recurring payment management, and online donation forms are partner territory. The established nonprofit ISVs on Dataverse provide the forms and processor connectors and write gifts back; the choice of ISV is effectively the choice of payment flow. Receipting — tax receipts in Canada, Gift Aid declarations and claims in the UK, year-end statements in the US — is country-specific and also partner or extension work. Do not underestimate it; Gift Aid alone has a claim file format, declaration validity rules, and audit requirements that justify a mature ISV. ## Major gifts: use the Sales pipeline Major-gift fundraising is genuinely a sales process — identification, qualification, cultivation, solicitation, stewardship — and **Dynamics 365 Sales** fits it without contortion. Opportunities model prospective major gifts with expected amount, probability, and close date; a business process flow encodes the moves-management stages; activities capture every touchpoint; and the pipeline view gives the development director the forecast. Sequences in the sales accelerator can prompt the next move. Keep the opportunity for the *prospect*; when the gift lands, create the gift record and close the opportunity as won. Sales licensing for the major-gifts team only, with Team Member or nonprofit-priced licences for everyone else, keeps the cost reasonable. ## Stewardship and segmentation **Customer Insights – Data** unifies giving history with engagement data — email, events, volunteering, web — and calculates measures such as recency, frequency, and lifetime value, and segments such as lapsed regular donors or first-time donors due a second ask. The [segmentation deep dive](https://www.solvingdynamics365.com/guides/customer-insights-segmentation-deep-dive) covers the mechanics. For most nonprofits, a dozen well-defined segments beat an elaborate model. **Customer Insights – Journeys** runs the stewardship: the thank-you sequence after a first gift, the anniversary touch, the lapsed-donor reactivation, the giving-day campaign. Journeys respects the consent model, which matters under GDPR and equivalent regimes for nonprofits that fundraise internationally, and event management in Journeys covers galas and runs. The [event orchestration](https://www.solvingdynamics365.com/guides/dynamics-365-marketing-event-orchestration) guide covers events. Journeys is licensed by contacts and interactions, and a nonprofit with a large low-value supporter base should size that before committing. ## Campaigns, appeals, and attribution Every gift should carry the campaign and appeal that produced it, because fundraising reporting is return on appeal. Journeys and forms can stamp the source; imports must be mapped to it; staff entering gifts must be required to pick one. Power BI over gifts by campaign, appeal, segment, and fund is the standard reporting layer, and the one dashboard that must exist before go-live is gifts by appeal versus cost of appeal. ## The finance boundary Donor management is not the ledger. Gifts are summarised into batches and posted to Business Central or Finance as journals by fund, designation, and GL account — daily or weekly, reconciled to bank receipts. The CRM holds the donor detail; the ledger holds the accounting. Organisations that try to make the CRM the ledger, or the ledger the CRM, end up with neither. The [fund accounting](https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits-fund-accounting) guide covers the ledger side; the integration is typically a Power Automate flow or the ISV's posting engine. ## Where Dynamics 365 is the right choice Nonprofits already on Microsoft 365, with a major-gifts programme that benefits from a real pipeline, and with the appetite to own their data model, get a lot from this stack — especially with nonprofit pricing. Small charities whose need is online donations, receipts, and a mailing list are better served by a packaged nonprofit CRM, and should be told so. And any organisation building on the Cloud for Nonprofit components should verify the current status of each component with Microsoft before designing around it; the portfolio has been reshaped more than once. --- # Drop shipments and special orders in Business Central How Business Central links sales orders to purchase orders for drop-ship and special-order fulfilment — the requisition worksheet, the linkage, and the gotchas. Source: https://www.solvingdynamics365.com/guides/drop-shipments-and-special-orders Section: Foundations Published: 2026-05-01 For distributors and resellers, fulfilling customer orders without holding inventory is a real cost-of-doing-business advantage. Business Central supports two related patterns natively: **drop shipments** and **special orders**. ## Drop shipments A drop shipment is a sales transaction where the goods never enter the seller's warehouse. The vendor ships directly to the customer. From the seller's perspective: a sales order is placed, a corresponding purchase order is placed with the vendor, the vendor ships, the seller invoices the customer, and the vendor invoices the seller. No item ledger inbound entries for the seller; no warehouse handling. ## Special orders A special order is similar — a sales order driving a purchase order — but the goods *do* enter the seller's warehouse first before being shipped to the customer. The seller takes possession briefly. Used for items that must be inspected, repackaged, kitted, or labelled before shipping. **The mechanism — drop shipment.** 1. On a sales order line, the user marks **Drop Shipment**. The line stops behaving like a normal sales line — it doesn't try to ship from inventory. 2. The user runs the **Requisition Worksheet** with the drop-shipment view, which lists sales lines marked for drop shipment. 3. The user assigns a vendor and runs **Carry Out Action Message**, which creates a purchase order linked to the sales line. 4. On the purchase order, the **Drop Shipment** field is set, and the **Ship-to** address auto-populates from the sales order's ship-to. 5. When the vendor confirms shipment, the user posts the purchase receipt — which simultaneously posts the sales shipment (no inventory entries, just the matching ledger movements). 6. Both invoices post against the related documents normally. **The mechanism — special order.** 1. On a sales order line, the user runs **Special Order** from the Functions menu. 2. The system creates a purchase order linked to the sales line, with the seller's warehouse as ship-to. 3. The purchase order receives normally, into stock. 4. When the goods are ready, the sales shipment is posted normally — but the link to the purchase order ensures the inbound and outbound transactions are reconciled cost-accurately. ## Why the linkage matters Without the link, you could just create a purchase order manually for each sales order and it would *kind of* work. The linkage adds: - **Cost accuracy.** The purchase cost flows to the sales line's COGS automatically when posted. - **Reservation.** The incoming purchase is reserved for the sales line, so warehouse staff can't accidentally allocate it elsewhere. - **Visibility.** Both documents show the linked counterpart; status, dates, and quantities reconcile. - **Cancellation safety.** If the sales order is cancelled, the purchase order is flagged for review. **Pitfalls.** - **Partial deliveries** require careful matching — the sales and purchase quantities must align or the linkage gets confused. - **Currency mismatches** between sales (customer currency) and purchase (vendor currency) need FX handling; supported but adds reconciliation effort. - **Returns** of drop-shipped goods are awkward — the goods may or may not come back to the seller's warehouse. Handle by case. ## Reporting A standard *Drop Shipment Status* report shows open sales-purchase pairs; useful in customer service for "where's my order" responses. --- # Drop-ship patterns in Dynamics 365 Supply Chain Management How drop shipping works in Dynamics 365 Supply Chain Management — direct delivery linking a sales line to a purchase order. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-distributors-drop-ship-patterns Section: Industries / Distribution Published: 2026-09-02 Drop shipping — selling an item the distributor never touches, shipped by the supplier straight to the customer — is a margin-preserving way to widen a catalogue without widening a warehouse. In Supply Chain Management it is called **direct delivery**, and it is a well-worn feature with some sharp edges around invoicing order, cancellations, and returns. This guide covers the single-entity pattern, the intercompany variant, and the operational rules that stop drop-ship from becoming a reconciliation problem. For Business Central, the [drop shipments and special orders](https://www.solvingdynamics365.com/guides/drop-shipments-and-special-orders) guide covers the equivalent. ## The single-entity pattern A sales order line is marked for direct delivery. From the sales order, the *Direct delivery* action creates a purchase order to the chosen vendor for that line, with the customer's delivery address as the PO's delivery address and a link between the two lines. When the vendor ships and the PO is receipted, the linked sales line's packing slip is posted automatically, so the customer's delivery is recorded without a warehouse ever seeing the goods. The customer invoice is then posted from the sales order as normal. Setup decisions: - **Which items are drop-ship candidates.** There is no item-level "always direct deliver" switch in the standard product; the choice is made on the sales line, and many distributors add a small extension or a default from the item's default order settings to pre-mark lines for non-stocked items. Marking a stocked item for direct delivery is allowed and occasionally right. - **Which vendor.** The direct delivery form proposes the item's primary vendor and lets the user change it. Distributors with several drop-ship suppliers per item need the vendor selection to be conscious, not defaulted. - **Warehouse.** The line still needs a site and warehouse for accounting and planning. A dedicated "direct delivery" warehouse keeps the transactions out of the physical warehouse's on-hand and makes them easy to report on. Do not use the main warehouse. ## The invoicing sequence The PO receipt posts the sales packing slip. It does not post the sales invoice, and the vendor invoice may arrive before, after, or never in the same period. The sequence that keeps margin reporting honest: 1. Vendor ships; vendor's shipping confirmation triggers the PO receipt (see below for how that confirmation arrives). 2. Sales packing slip posts automatically. Revenue is not yet recognised; the packing slip creates the delivered-not-invoiced position. 3. Customer invoice posts, on the distributor's normal invoicing cadence. Revenue recognised, cost of goods sold at the PO price. 4. Vendor invoice matched to the PO when it arrives, with any price difference posting as purchase price variance. The failure mode is invoicing the customer before the vendor has shipped, because the order looks "done" once the PO exists. Configure the sales order invoicing to require a packing slip, and train the desk that a direct-delivery line is not invoiceable until the vendor confirms. ## Getting the vendor's shipment confirmation This is the operational weak point. The PO receipt is what drives the whole chain, and somebody has to post it when the vendor ships. Options, from weakest to strongest: - **Email from the vendor, keyed by AP or the sales desk.** Common, slow, and error-prone. Fine for low volume. - **Vendor collaboration.** The vendor sees the PO in the vendor collaboration portal, confirms it, and can update delivery dates; it does not post receipts, but it gives visibility. The [vendor collaboration](https://www.solvingdynamics365.com/guides/vendor-collaboration-in-f-and-o) guide covers it. - **EDI advance shipping notice** from the vendor, mapped to a product receipt through an EDI ISV. The right answer for high-volume drop-ship with large suppliers. - **A Power Automate flow** reading a structured shipping notification (a portal form, a carrier webhook) and posting the receipt via the data entities. Cheaper than EDI for mid-volume, and fragile if the notification format changes. Whatever the mechanism, tracking numbers should land on the sales order so customer service can answer "where is it" without calling the vendor. The standard packing slip has a field for it; the integration must fill it. ## Cancellations and changes Direct delivery links the sales line and the PO line for quantities and dates, but the link is not a two-way sync of every change. If the customer cancels, the sales line is cancelled and the PO line must be cancelled separately — with the vendor's agreement, which is a commercial conversation the system does not have. If the vendor ships less, the PO is partially receipted, the sales packing slip posts for the shipped quantity, and the remainder stays open on both documents. A daily review of open direct-delivery PO lines against their sales lines is standard housekeeping; a small Power BI page or a periodic report catches the drift. ## Returns A customer return of a drop-shipped item is a return order against the sales order, but the goods should not come back to the distributor. The clean options are return-to-vendor, where the customer ships back to the vendor and the distributor raises a credit note and a purchase return, or a return to the distributor's warehouse followed by a separate purchase return. The product supports both flows; it does not link them automatically, and the return warehouse should again be the dedicated direct-delivery warehouse so that returned drop-ship stock is not accidentally counted as sellable on-hand. ## Intercompany direct delivery Groups that sell in one legal entity and buy in another use **intercompany direct delivery**: the selling entity's sales order creates an intercompany PO to the supplying entity, which creates an intercompany sales order there, and the supplying entity's shipment to the end customer cascades packing slips back up the chain. It works, and the [intercompany trade](https://www.solvingdynamics365.com/guides/intercompany-trade-in-f-and-o) guide covers the setup. The extra rules for direct delivery: the end customer's address must be carried through the chain, the intercompany parameters must allow direct delivery, and the invoicing sequence has one more step (the intercompany invoice) that must precede the external one for consolidated margin to be right. ## Planning and reporting Master planning ignores direct-delivery lines for warehouse coverage, which is correct — there is no stock to plan — but means demand history from drop-ship sales is not in the forecast base by default. Distributors deciding whether to start stocking a drop-ship item need a report over direct-delivery sales lines, not over inventory transactions. Margin by vendor on drop-ship lines is the other report worth building early, because drop-ship suppliers' prices drift and nobody notices until the quarter closes. --- # Dual-write integration between F&O and Dataverse How Microsoft's Dual-write framework synchronises Finance/SCM data with Dataverse — table maps, initial sync, and operational realities. Source: https://www.solvingdynamics365.com/guides/dynamics-365-dual-write-integration Section: Finance & SCM / Overview & platform Published: 2026-05-01 **Dual-write** is Microsoft's near-real-time integration between **Dynamics 365 Finance and Supply Chain Management** (the F&O apps) and **Microsoft Dataverse** (under the CRM apps and the Power Platform). It exists because F&O has its own database that's not Dataverse, so customers running both CRM and ERP need the same Account, Contact, Product, and Order tables to stay in sync between the two systems. ## The model Dual-write defines **maps** — pairs of tables, one in F&O and one in Dataverse, with a field-level mapping between them. Microsoft ships dozens of standard maps (customer, vendor, product, sales order, sales invoice, employee, work order, project). Custom maps can extend the standard ones or add net-new tables. ## Direction Each map declares a *direction*: F&O → Dataverse, Dataverse → F&O, or bi-directional. Bi-directional is common for customer-facing entities (a customer added in Sales appears in Finance, and vice versa). Master data with a single authority (e.g. items maintained in F&O) is typically one-directional. ## Near-real-time Dual-write fires synchronously on save in each system. A successful F&O save also writes to Dataverse and waits for the acknowledgment; a Dataverse save writes to F&O. If the partner system is unavailable, the save fails or queues for retry, depending on the map's configuration. ## Initial sync Before live operation, an **initial sync** copies historical data in bulk in one direction (typically F&O → Dataverse). Initial sync is a sizeable operation for large datasets and is run from LCS. ## Plays well with CDM Dataverse tables in dual-write are aligned with the Common Data Model, so the same Dataverse Account is shared across Dual-write to F&O, Customer Insights, Sales, and Customer Service. **Pitfalls.** - **Latency under load.** A burst of F&O posting can backlog Dual-write, with downstream apps seeing data minutes after the source. Monitor the queue. - **Schema drift.** Map definitions must track schema changes in both F&O and Dataverse. A new required field on either side breaks the map until updated. - **Validation differences.** Both systems have their own validation; rejected writes need a retry strategy. ## Where it fits Dual-write is the canonical choice for customers running F&O alongside CRM-side D365 apps. For F&O integrations that don't need Dataverse — pure ERP-to-ERP, ERP-to-EDI — use the Data Management Framework or the F&O REST API instead. ## Where to go next When it misbehaves, [dual-write troubleshooting patterns](https://www.solvingdynamics365.com/guides/integrating-with-dual-write-troubleshooting-patterns) gives the diagnostic order and [dual-write sync errors](https://www.solvingdynamics365.com/guides/dynamics-365-dual-write-sync-errors) decodes the messages. [Master data services vs dual-write](https://www.solvingdynamics365.com/guides/master-data-services-vs-dual-write) covers the alternatives, [how Dynamics 365 apps connect](https://www.solvingdynamics365.com/guides/how-dynamics-365-apps-connect) the architectural context, and [what is Microsoft Dataverse](https://www.solvingdynamics365.com/guides/what-is-microsoft-dataverse) the platform on the other side. --- # Dual-write sync errors Dual-write errors between Finance and Operations and Dataverse decoded — lookup not found, company missing, integration key conflicts, validation failures, app user privilege, maps not running, schema mismatch — with fixes. Source: https://www.solvingdynamics365.com/guides/dynamics-365-dual-write-sync-errors Section: Finance & SCM / Troubleshooting Published: 2026-09-03 Dual-write errors have a shape: a specific message on one side of the integration, a cause on the other, and a fix that is almost always about setup order, reference data, or the application user rather than about the map itself. This reference lists the messages that recur, where each appears, and what to do. The diagnostic method — reference data before transactions, one map at a time — is in [dual-write troubleshooting patterns](https://www.solvingdynamics365.com/guides/integrating-with-dual-write-troubleshooting-patterns); the architecture in [Dynamics 365 dual-write integration](https://www.solvingdynamics365.com/guides/dynamics-365-dual-write-integration). ## Where to look - **Initial sync:** in Finance and Operations, Data management > Dual-write > select the map > Execution details. Each run shows rows processed and rows failed with the error per row. - **Live sync, F&O to Dataverse:** the Dual-write errors table in Dataverse (Integration Errors view in the Dual-write admin experience), plus the Dataverse async operation log for plug-in failures on the receiving table. - **Live sync, Dataverse to F&O:** the F&O side logs the failed write against the business event / integration log; the Dataverse row keeps a sync status. - **Map state:** Dual-write page in F&O or the Dual-write admin app in Dataverse — Running, Not running, Paused, and the error count. ## Setup and dependency errors ### "Referenced record not found" / "Lookup value for field X could not be resolved" / "Could not find target row" **Symptom.** Customer, product, or order rows fail in initial or live sync naming a lookup field. **Cause.** The referenced row — currency, unit of measure, customer group, payment terms, site, warehouse, sales tax group — does not exist in the target because its map has not run, or ran with a filter that excluded it. Dual-write does not create references on the fly. **Fix.** Run the reference-data maps first in the documented dependency order (legal entities and companies, then currencies, units, countries and other reference tables, then parties, customers, vendors, products, then transactions). Re-run the failing map. **Prevention.** Initial sync one map at a time, verifying each is clean before the next, and never run a transactional map before its references. ### "Company X does not exist in Dataverse" / "cdm_company not found" / the company lookup is empty **Symptom.** Everything fails for one legal entity. **Cause.** The Company (cdm_company) map has not run for that legal entity, or a row was created in Dataverse without a company value. Nearly every dual-write table carries a company lookup. **Fix.** Run the Companies map first; on Dataverse forms for synced tables, default the company field and make it required with a business rule. ### "Integration key" / "An item with the same key has already been added" / alternate key violation 0x80040237 **Symptom.** Rows fail with duplicate-key messages, or duplicates appear on one side. **Cause.** The same business record exists on both sides from earlier manual entry or a previous integration, with keys that do not match the map's integration key. Dual-write cannot decide they are the same record. **Fix.** Decide the master per table, align keys with a one-off data fix (update the Dataverse alternate key values to match F&O's, or vice versa), delete the orphaned duplicates, then re-run initial sync for that map. **Prevention.** Clean both sides before the first sync; [Dataverse alternate keys](https://www.solvingdynamics365.com/guides/dataverse-alternate-keys) covers how the keys work. ### Number sequences: rows created in Dataverse fail in F&O with a blank or rejected number **Cause.** A record created on the Dataverse side arrives in F&O without an F&O-generated number, and the F&O number sequence for that record type is not configured for the way the map supplies the key (manual entry not allowed, or the Dataverse autonumber not set up). **Fix.** Follow Microsoft's per-entity guidance on number sequences for dual-write — typically configuring the number sequence to accept the value the map provides, or generating the number in Dataverse with an autonumber column that matches the F&O format. ## Validation errors ### "Validation failed" / "Field X must be filled in" / "Cannot edit a record in Table (Y). Field Z must be filled in." **Symptom.** Live sync writes fail with F&O or Dataverse field validation messages. **Cause.** The target enforces a mandatory field the source did not supply — business-required columns in Dataverse, mandatory fields on the F&O entity, or a value F&O's validation rejects (an address without a country, a customer group not in the target company). Legacy data that F&O tolerated in place fails when it is re-validated on the way out. **Fix.** Read the field named. Either map a source for it, set a default in the map (the transform column), or cleanse the source data. For F&O data quality, filter the map to exclude offending rows until they are fixed. **Prevention.** Validate mandatory fields on both sides before enabling a map; align required-field rules across the two systems. ### "The record is being modified by another process" / concurrency and conflict errors **Cause.** Both sides changed the same row within the sync window, or a plug-in or flow on the Dataverse side updates the row dual-write just wrote, which loops back. **Fix.** Check the conflict resolution setting on the map; find plug-ins and flows on the synced table that write to it and exclude dual-write's application user from their triggers (check the initiating user, or use a filtering attribute). **Prevention.** Design plug-ins and flows on synced tables knowing dual-write writes to them — see [master data services vs dual-write](https://www.solvingdynamics365.com/guides/master-data-services-vs-dual-write) for the loop pattern. ### "Value is not valid for option set" / choice mismatch **Cause.** The map's value transformation between an F&O enum and a Dataverse choice is incomplete — a new enum value on one side without a matching choice on the other. **Fix.** Add the value to the transform on the map and, if needed, the choice in Dataverse. ## Security and application user ### "Principal user is missing prvXxx privilege" — 0x80040220 / "Access denied" on the Dataverse side **Symptom.** A map fails entirely, or fails for one table, with a privilege error. **Cause.** The dual-write application user in Dataverse lacks the privilege. A custom table added to a map without updating the app user's role, a field-level security profile that excludes the app user, a new security role assignment that removed a needed one, or the app user disabled. **Fix.** Check the application user's roles (the Dual-write app user roles Microsoft installs, plus a custom role for custom tables) and any field-level security profiles on the table; enable the user if disabled. **Prevention.** Every custom table added to a map comes with a role change for the app user. [Dataverse security model](https://www.solvingdynamics365.com/guides/dataverse-security-model) covers roles and profiles. ### "The user is not a member of the organization" / 401 from Dataverse **Cause.** The application user was removed from the environment, or the environment was copied and the app user was not recreated. **Fix.** Recreate the application user for the dual-write app registration and assign roles; relink the environments if the copy broke the link. ### Authorisation errors on the F&O side **Cause.** The Dataverse-side integration identity is not registered in F&O's Microsoft Entra applications, or lacks the security role for the entities in the map. **Fix.** Register the app in F&O under System administration > Microsoft Entra applications with an appropriate user and role. ## Map state and schema ### Map shows Not running / stops after errors **Symptom.** Live sync silently stopped; the map's state is Not running. **Cause.** Dual-write stops a map after a schema change on either side, after an environment refresh, upgrade, or F&O service update, or when the live-sync error threshold is hit. **Fix.** Open the map, use Refresh tables (or Refresh entities) to pick up schema changes, review and resolve the logged errors, then Run. Maps do not restart themselves. **Prevention.** Put "check dual-write map states" in the post-update checklist for every F&O service update and Dataverse solution deployment — [One Version and updates](https://www.solvingdynamics365.com/guides/dynamics-365-one-version-and-updates) covers the cadence. ### "Field X does not exist in entity Y" / "Column not found" after adding a field **Cause.** A field was added to the F&O entity or the Dataverse table and the map's cached schema is stale; or a custom field was added to a map but the entity extension was not deployed to this environment. **Fix.** Refresh the map's schema, add the mapping, deploy the entity extension, restart. ### Initial sync times out or stalls **Cause.** Volume: a large table synced in one batch during a busy period competes with F&O batch jobs and the Dataverse async service. **Fix.** Filter initial sync by legal entity, date range, or group and run batches in a quiet window; skip initial sync for maps whose data already matches and start live sync only. ### Environment link errors: "Environments are not linked" / "The linked environment does not match" **Cause.** An F&O environment was refreshed from another (production to sandbox), and the dual-write link now points at the wrong Dataverse environment, or vice versa. **Fix.** Unlink and relink the correct pair from Lifecycle Services / the Power Platform admin centre; recreate the application user; refresh and restart maps. Never relink a sandbox to production Dataverse. **Prevention.** A refresh checklist that includes dual-write relinking; [Dynamics 365 Finance environments and LCS](https://www.solvingdynamics365.com/guides/dynamics-365-finance-environments-and-lcs) covers the refresh process. ## Reading the pattern If many maps fail at once, it is the application user, the environment link, or a company row. If one map fails for every row, it is a schema or reference-data problem. If a map fails for a few rows, it is data quality or a key conflict. If a map worked and then stopped, it is a schema change, an update, or an error threshold. Start with which of those four you have, and the specific message above will confirm it. ### Frequently asked questions **Where do dual-write errors appear?** Three places: the map's Execution details in the Dual-write page in Finance and Operations for initial sync; the Dual-write errors table in Dataverse and the Integration Errors view for live sync in that direction; and the F&O business event and batch logs for live sync from Dataverse to F&O. Check the side that received the write. **What does 'lookup not found' or 'referenced record does not exist' mean in dual-write?** The row a lookup points at — currency, customer group, unit, site, warehouse, payment terms — has not been synced to the target yet. Dual-write is strict about lookups. Sync the reference maps first in Microsoft's documented dependency order, then re-run the failing map. **Why does a map that worked yesterday fail today with a privilege error?** The dual-write application user in Dataverse lost a privilege — a new custom table was added to a map without the app user's role covering it, a field-level security profile was added, or the app user was disabled. Check the Dual-write app user's roles and the table's field-level security before anything else. **Why is the map in a Not running state?** Maps stop after a schema change on either side, after an error threshold on live sync, or after an environment refresh or upgrade. Refresh the entities in the map to pick up the schema, resolve the logged errors, and start the map again — it does not restart itself. --- # Dual-write troubleshooting patterns The failures that recur on every dual-write implementation between Finance and Operations and Dataverse — initial sync stalls, map errors, reference data gaps. Source: https://www.solvingdynamics365.com/guides/integrating-with-dual-write-troubleshooting-patterns Section: Integrations / Resilience & ops Published: 2026-09-02 Dual-write works, in the sense that once it is running cleanly it keeps customers, products, and orders aligned between Finance and Operations and Dataverse with very little attention. Getting it to run cleanly is the part that consumes weeks, and the same handful of failures account for most of that time. This guide is about those failures and the order in which to look for them. For what dual-write is and when to use it at all, start with [Dynamics 365 dual-write integration](https://www.solvingdynamics365.com/guides/dynamics-365-dual-write-integration) and [master data services vs dual-write](https://www.solvingdynamics365.com/guides/master-data-services-vs-dual-write). ## First principle: reference data before transactional data Almost every dual-write failure in a new environment is a reference-data failure wearing a transactional disguise. A customer map fails because the customer group does not exist in Dataverse. A sales order map fails because the currency, the unit of measure, or the site was never synced. Dual-write is strict about lookups: if the row a lookup points to has not been synced, the record fails. Microsoft publishes the map dependency order. Follow it literally: legal entities and companies, then currencies, units, countries and other reference tables, then parties and customers and vendors, then products, then transactions. Run initial sync in that order, one map at a time for the first pass, and check each one is clean before starting the next. Running everything at once and then reading the error log is slower, not faster. ## Initial sync failures Initial sync stalls or fails for a small number of reasons. **Volume.** Large tables time out. The fix is to sync in batches by filter (by legal entity, by date range, by customer group) rather than the whole table, and to run initial sync during a quiet window for F&O, since it competes with batch jobs. **Lookup gaps** as above. The error message names the missing reference; go and sync that map first. **Data quality on the F&O side.** Customers with blank mandatory fields, products without a default unit, records that would fail F&O's own validation if re-entered. Dual-write applies validation on write, and legacy data that F&O tolerated in place fails on the way out. Cleanse first or filter the map to exclude the offenders and deal with them separately. **Integration key conflicts.** If the same customer exists in both systems from earlier manual entry and the keys do not match, initial sync either creates duplicates or fails on alternate-key violations. Decide which system is authoritative per table before the first sync, and align keys with a one-off data fix. ## Live sync failures Once live, failures surface in the dual-write error log and in the Dataverse integration error tables. The recurring ones: **Company context.** F&O records belong to a legal entity; Dataverse rows carry a company lookup. A user creating an account in Dataverse without a company, or with the wrong one, fails the write to F&O. The fix is usually a default company on the Dataverse form and, in mixed landscapes, a business rule that makes it mandatory. **Ownership and security.** The integration user needs rights on both sides. A new table added to a map, a new security role, or a field-level security profile on Dataverse can silently block writes. When a map that worked yesterday fails today, check permissions before anything else. **Field mappings after customisation.** A new mandatory field on either side, added by a developer who did not know dual-write existed, fails every write until the map is updated with a default or a transformation. Dual-write map changes go through the same ALM as everything else; treat them as part of the release. **Concurrent edits.** Both systems can write the same record within seconds, and dual-write is not a conflict resolver. Choose a system of record per table and enforce it with read-only forms or field security on the other side; see the [master data services comparison](https://www.solvingdynamics365.com/guides/master-data-services-vs-dual-write) for the reasoning. **Environment lifecycle.** A refreshed sandbox, a restored Dataverse environment, or an F&O database movement breaks the link. Relinking and re-running initial sync for affected maps is part of any refresh runbook. ## A diagnostic order that works 1. Is the environment link healthy? Check the dual-write admin page in Finance and Operations for the connection state before reading any error. 2. Is the map running? A stopped map fails silently from the user's perspective. 3. What does the error say, exactly? Dual-write errors are verbose and usually name the table and field. Read to the end. 4. Does the referenced lookup exist on the target side? If not, sync it. 5. Did anything change: a security role, a new field, a solution import, an F&O update? Correlate with the change calendar. 6. Reproduce with one record through the UI, with the integration user's permissions, and watch the error in real time. ## Operational hygiene Alert on the error tables rather than waiting for users. A small Power Automate flow that emails when the Dataverse integration error count rises is cheap. Review and clear the error log weekly; an error log with ten thousand stale entries hides the new ones. Keep a document of which maps are active, which are customised, and why. Version the map customisations with the solution. Performance-wise, dual-write adds latency to saves on both sides because the write is synchronous. Users notice on tables with heavy maps. Keep maps lean, avoid mapping fields nobody uses, and test save times on the busiest forms with dual-write on. ## What dual-write is not for High-volume transactional data. Mapping every inventory transaction or every journal line through dual-write will hurt both systems. Use it for master data and the handful of documents that need to be visible on both sides, and use [Synapse Link](https://www.solvingdynamics365.com/guides/azure-synapse-link-for-dataverse) or an eventing pipeline for the rest. ## Stability verdict Stable once the reference-data foundation is right and the system-of-record rules are enforced. Unstable, and permanently noisy, when it is switched on over unclean data or asked to arbitrate between two systems that both think they own the customer. --- # Duplicate detection rules in Dataverse How Dataverse's duplicate detection works — rules, matching algorithms, behaviour on create/update, and the maintenance discipline that keeps data clean. Source: https://www.solvingdynamics365.com/guides/duplicate-detection-rules-in-dataverse Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Duplicate records are the death of a CRM. The same customer captured three times produces fractured pipeline reporting, conflicting account ownership, repeated outreach to the same contact, and angry sales reps. Dataverse's **duplicate detection** mechanism catches duplicates at creation time and during data imports, giving users the chance to merge or recognise existing records. ## The model **Duplicate detection rules** define what counts as a duplicate. Each rule: - **Targets a base entity** — Account, Contact, Lead, or any custom table. - **Compares to a matching entity** — usually the same table, sometimes a different one (Account vs Lead for lead-to-account matching). - **Conditions** — field-by-field criteria for what makes records "duplicates": - Exact match. - Same first N characters. - Same last N characters. - Same N characters (case-insensitive). - Phonetic match (sounds-like). - Specific other operators. A rule can have multiple conditions combined — e.g. "Email Address exact match AND First Name same first 3 characters" identifies duplicates with very high confidence. **Sample rules.** - **Account by name** — exact match on Account Name. Generous; many companies have similar names. - **Account by primary email** — exact match on Primary Email. Stricter; if two records share an email, they're the same. - **Contact by email** — exact match on Email. The most reliable contact-matching rule. - **Contact by name** — fuzzy: First Name + Last Name + Phone match. - **Lead by company + email** — exact match on Company Name AND Email. ## Behaviour on create When a user (or an integration) creates a new record, the system evaluates active duplicate detection rules. If a match is found: - **Synchronous (form)** — a warning dialog appears with the matched record(s) and options: keep both, abandon the new record, edit the new record. - **Asynchronous (API / import)** — the record creation either fails (default behaviour) or proceeds with a flag, depending on the API call's `SuppressDuplicateDetection` parameter. ## Behaviour on update Updates can also trigger duplicate detection — saving a record can find that the updated record now duplicates an existing one. Configurable per rule whether to run on update or only on create. ## Bulk duplicate detection Beyond inline detection at create time, **duplicate detection jobs** can scan an entire table against a rule retrospectively — identifying existing duplicates not caught during creation. The job produces a list of duplicate pairs; users review and merge. ## Merging Dataverse's **merge** function takes two records and combines them — preserving one as the master, transferring related records (activities, opportunities, cases) from the duplicate to the master, then deleting the duplicate. Field-by-field, the user chooses which value wins (usually master's). Audit trail records the merge. **Limits.** - **Performance** — too many active rules slow record creation. Tune to the rules that matter; retire what's noise. - **No real-time deduplication during high-volume imports** — large data imports with duplicate detection enabled can be substantially slower than imports without. For initial data migration, often the cleaner pattern is to deduplicate the source data, import without detection, then enable detection going forward. - **Cross-table matching limitations** — matching a Lead against existing Contacts is supported but the configuration is fiddly. - **No fuzzy-string matching beyond the built-in operators** — for sophisticated matching, use AI Builder or external deduplication tools. ## Customer Insights – Data alternative For organisations needing serious deduplication across many systems, **Customer Insights – Data** does enterprise-grade identity resolution with ML-assisted matching across multi-source data. Dataverse's duplicate detection is good for in-Dataverse hygiene; CI–Data is for cross-system unified-customer-profile work. **Operational discipline.** - **Define rules early** — before users start creating records in earnest. Retroactive deduplication is expensive. - **Tune rules with real data** — too-strict rules miss legitimate duplicates; too-loose rules block legitimate distinct records (two genuinely different customers with similar names). - **Run periodic duplicate detection jobs** — monthly or quarterly to catch what slipped through. - **Review and merge regularly** — duplicates that exist but aren't merged are noise. - **Train users** — when the warning dialog appears, "keep both" is rarely the right answer. Train users to recognise and merge. **Common pitfalls.** - **Disabled for performance** — admins turn off duplicate detection during a migration and never re-enable. - **Wrong rules for the data** — rules don't match the real-world overlap patterns; duplicates accumulate undetected. - **Merge cascades not understood** — users panic when a merge deletes a record without realising the activities and opportunities transferred. Train. ## Operational reality Data hygiene compounds. Five minutes daily of duplicate management beats hours of forensic clean-up quarterly. --- # Dynamics 365 2026 wave 2: what's coming, and why there's no release plan The October 2026 update cycle is the first without a formal release wave plan — what Microsoft changed, what still ships. Source: https://www.solvingdynamics365.com/guides/dynamics-365-2026-wave-2-release-highlights Section: Foundations Published: 2026-08-30 If you went looking for the "2026 release wave 2 plan" document this summer and came up empty, you didn't miss it. There isn't one, and there isn't going to be one. In August 2026 Microsoft announced that Dynamics 365, Power Platform, and Dataverse roadmap content is moving to the company-wide AI at Work roadmap, and that the twice-yearly release plan documents are being retired. The 2026 wave 1 plan was the last of its kind. This guide covers what actually changed, what still ships this October, and how to run your update planning now that the ritual you built it around is gone. ## The wave model, briefly Since 2018, Dynamics 365 and the Power Platform have shipped on a public two-wave rhythm: wave 1 covering April through September, wave 2 covering October through March. Each wave came with a formal release plan published months ahead, an early access window roughly two months before general availability, and a mandatory-update model that meant every environment got the wave eventually whether you opted in early or not. The model had real value: you could read, in one document, everything Microsoft planned to ship across Sales, Customer Service, Finance, Supply Chain, Business Central, and the Power Platform, with target dates and preview/GA status per feature. Implementation teams timed regression testing to the early access windows. It was predictable, and predictability is worth a lot in ERP. ## What Microsoft announced in August 2026 The changes, concretely: - **No more release plans.** From September 2026, new Dynamics 365, Power Platform, and Dataverse capabilities are published to the AI at Work roadmap — the successor to the Microsoft 365 roadmap — instead of wave plan documents. Disclosure becomes continuous rather than twice-yearly. - **The Release Planner retires on November 15, 2026.** Existing roadmap items are being migrated to the new roadmap before then. - **Old plans stay up for reference.** The published release plans, including 2026 wave 1, remain on Microsoft Learn as historical documents. Microsoft's stated reason is one destination for roadmap content across business applications, productivity, and AI. The less charitable read — which plenty of the partner community voiced immediately — is that continuous disclosure means no single moment where a thin wave invites side-by-side comparison with the last one. Both things can be true. ## What still ships in October Here is the part that matters operationally: **the update cadence has not changed.** The retirement is a change to how Microsoft communicates the roadmap, not to how the products ship. - **Business Central version 29** is still expected in October 2026, on the usual April/October major-release rhythm. Based on what Microsoft has signalled and partner reporting, expect the emphasis to continue where version 28 left off: Copilot and agent capabilities, supply chain and warehousing refinements, and compliance/e-invoicing coverage. Treat any specific feature list you read before the release hits early access as provisional — without a wave plan, third-party summaries are doing more guessing than they used to. - **Finance and Supply Chain Management** continue on the One Version continuous-update model, which was already monthly-ish and never really fit the wave framing anyway. - **The customer engagement apps and Power Platform** keep shipping previews and GA features continuously, now announced through the AI at Work roadmap as they land. Early access windows for the October updates still exist per product; they're just announced per product rather than as one coordinated wave event. ## Hype versus shipped: how to read the new roadmap The wave plans had a discipline problem in their final years, and it's fair to carry that scepticism forward: features were announced with preview dates that slipped, "planned" features quietly vanished between plan revisions, and the Copilot/agent items in particular tended to be described in the plan as more finished than they were in the product. The 2025 and 2026 wave 1 plans were heavy on agentic AI framing; the features that reliably arrived in GA form were the unglamorous ones — compliance, performance, warehousing, platform governance. Continuous disclosure makes this pattern easier to hide and harder to audit, so adjust how you read: - **Trust GA status, not announcements.** A roadmap entry means intent. Only "generally available" means you can build a project plan on it. - **Preview features are demos.** Useful for evaluation, not for training material or cutover plans. This was true under the wave model and is truer now. - **Watch the message center, not the marketing blog.** Admin-impacting changes (deprecations, mandatory changes, behaviour switches) come through the Microsoft 365 message center regardless of the roadmap format. ## What to change in your own process If your organisation timed testing and training around the two wave moments, you need a replacement rhythm, because Microsoft no longer provides one: 1. **Keep the April/October beats for BC.** Major Business Central releases still land then, so your regression-test calendar can stay put. 2. **Set a roadmap review cadence.** Someone should scan the AI at Work roadmap, filtered to your products, monthly or quarterly. The information still exists; it just no longer arrives as one readable document. 3. **Subscribe to per-product release notes.** Business Central's "what's new," the F&O One Version release notes, and the customer engagement release announcements are now the primary sources rather than summaries of a plan you already read. 4. **Budget review time you used to get for free.** Reading one wave plan twice a year was cheap. Continuous monitoring is a standing task — small, but real, and worth assigning to a named person. ## The honest summary Nothing about the software you run changes in October 2026. Business Central 29 ships, F&O keeps updating, the CRM apps keep shipping features. What's gone is the twice-yearly document that let you see the whole roadmap in one sitting and hold Microsoft to it six months later. That's a genuine loss for planning discipline, dressed as a convenience. Plan your own cadence, read GA status cynically, and keep your regression calendar anchored to the release dates that still exist. ## Where to go next The mechanics that still govern every tenant are in [Business Central release waves](https://www.solvingdynamics365.com/guides/business-central-release-waves) and [One Version and updates](https://www.solvingdynamics365.com/guides/dynamics-365-one-version-and-updates) for Finance and Supply Chain. Keeping extensions healthy through each update is [upgrading AL code across BC versions](https://www.solvingdynamics365.com/guides/upgrading-al-code-across-bc-versions); the organisational side is [release management for Dynamics 365](https://www.solvingdynamics365.com/guides/release-management-for-dynamics-365) and [roadmap considerations](https://www.solvingdynamics365.com/guides/dynamics-365-roadmap-considerations). ### Frequently asked questions **Is there a 2026 release wave 2 plan?** No. In August 2026 Microsoft announced that Dynamics 365, Power Platform, and Dataverse roadmap content moves to the company-wide AI at Work roadmap and that the twice-yearly release plan documents are retired; 2026 wave 1 was the last. The Release Planner retires on 15 November 2026. **Does that change what ships in October 2026?** No. The update cadence is unchanged: Business Central version 29 is expected in October on the usual April/October rhythm, Finance and Supply Chain stay on One Version continuous updates, and the customer engagement apps and Power Platform keep shipping continuously. **Where do I find the roadmap now?** The AI at Work roadmap filtered to your products, per-product release notes (Business Central's what's new, the F&O One Version notes, customer engagement announcements), and the Microsoft 365 message center for admin-impacting changes and deprecations. **How should we plan updates without wave plans?** Keep the April and October regression beats for Business Central, assign someone to review the roadmap monthly or quarterly, subscribe to per-product release notes, and trust only generally-available status — preview features are demos, not cutover material. --- # Dynamics 365 and Azure OpenAI How Azure OpenAI powers AI features in Dynamics 365 — under-the-hood model usage, custom AI scenarios, and the patterns for integrating LLMs with Dynamics. Source: https://www.solvingdynamics365.com/guides/dynamics-365-and-azure-openai Section: Foundations / AI & Copilot Published: 2026-05-01 The AI features users see in Dynamics 365 — Copilot in Sales, Service, Finance, Supply Chain — are powered by **Azure OpenAI**. Behind the friendly Copilot UX, GPT-4 and successor models process requests, generate responses, and reason about business data. Understanding Azure OpenAI's role helps both with using existing AI features and building custom ones. **Azure OpenAI overview.** - Microsoft's hosted version of OpenAI's models. - Available models: GPT-4, GPT-4 Turbo, GPT-4o, GPT-4.5, embeddings models, image models. - Runs in Azure regions. - Enterprise governance — private networking, content filtering, data residency. - Same underlying models as OpenAI's API but with Microsoft compliance and integration. **How Dynamics uses it.** - **Copilot in Sales** — opportunity summarisation, email drafting. - **Copilot in Customer Service** — case summaries, response drafting, knowledge search. - **Copilot in Finance** — variance narratives, exception explanations. - **Copilot in Supply Chain** — exception management, recommendation explanations. - **Customer Insights** — copilot-assisted segment creation. - **Document AI** — invoice and document processing. Each feature uses Azure OpenAI behind the scenes with appropriate context. ## Grounding Critical for accurate AI in Dynamics: - AI prompted with relevant Dynamics data. - "Summarise this opportunity" includes the opportunity data. - "Draft a response" includes case context. - Avoids hallucination. Without grounding, AI generates plausible but wrong responses. **Retrieval-augmented generation (RAG).** - Question received. - Search relevant context (records, KB articles). - Pass context + question to LLM. - LLM generates response from context. Standard pattern; most Copilot features use it. **Privacy and data handling.** - **Customer data NOT used** for model training (Microsoft commitment). - **Data stays in tenant** for the request. - **Encrypted in transit and at rest.** - **Logged briefly** for abuse prevention. The data handling is a key part of why enterprises trust Azure OpenAI over consumer ChatGPT. **Content filtering.** - **Built-in safety filters** — hate speech, violence, sexual content. - **Adjustable severity.** - **Custom filters** possible. Ensures appropriate output for business contexts. ## Custom AI scenarios Beyond built-in Copilot, organisations build custom: - **AI Builder** integrates Azure OpenAI for prompts. - **Power Automate** + Azure OpenAI for custom AI flows. - **Custom apps** call Azure OpenAI directly. - **Plug-ins** can invoke AI logic. **Common custom scenarios.** - **Summarisation** — long documents, meeting transcripts. - **Categorisation** — classify support tickets. - **Sentiment analysis** — customer feedback. - **Generation** — draft proposals, emails, reports. - **Translation** — multilingual content. - **Extraction** — pull structured data from unstructured. ## Prompt engineering The art of getting useful output: - **Clear instructions.** - **Examples** (few-shot learning). - **Constraints** — format, length, tone. - **Role-setting** — "You are an expert at..." - **Step-by-step reasoning** for complex tasks. Production prompts are tested, refined, versioned. ## Token economics Pricing model: - **Per-token** — input + output tokens. - **Prices vary** by model (GPT-4 more expensive than GPT-4o). - **Volume** matters — large enterprises consume significant tokens. For high-volume AI features, cost modelling essential. **Latency.** - **Sub-second** for short prompts. - **Seconds** for longer. - **Streaming** reduces perceived latency. UX accommodates AI latency through loading states or streamed responses. ## Function calling / tool use Modern feature: - LLM can invoke defined functions. - "Tell me about this customer" → LLM calls `getCustomer(id)` → uses result. - Enables LLM to access data and take actions. Copilot for Dynamics uses tool calling extensively. **Model selection.** - **GPT-4** — most capable; expensive; slower. - **GPT-4o** — capable; faster; cheaper. - **GPT-3.5** — limited reasoning; very cheap; very fast. Match model to task; not everything needs top model. **Fine-tuning.** - Customise models with your data (limited). - For specific terminology, style. - Most Dynamics use cases don't need fine-tuning; prompting suffices. ## Embeddings Separate model type: - Convert text to vectors. - Vectors searchable by similarity. - Foundation for RAG. Azure OpenAI provides embedding models. ## Vector databases Pair with embeddings: - **Azure AI Search** — Microsoft's vector-capable search. - **Cosmos DB with vector support.** - **Specialty vector DBs** — Pinecone, Weaviate. For semantic search and RAG patterns. **Common pitfalls.** - **Hallucination unchecked.** AI outputs not verified; wrong information propagated. - **No prompt versioning.** Tweaks made; can't roll back. - **Cost surprises.** High volume; unexpected bills. - **Sensitive data in prompts.** Compliance issues. - **No human review.** AI outputs treated as gospel. - **Prompt injection vulnerable.** User input overrides instructions. **Best practices.** - **Always verify critical outputs.** - **Version prompts** with code. - **Monitor token consumption.** - **Sanitise inputs.** - **Trust user inputs as data, not instructions** — prompt injection mitigation. - **Test extensively** before production. - **Human-in-the-loop** for high-stakes decisions. **Audit and compliance.** - AI-generated content tagged. - Audit log of AI invocations. - Output review. - Compliance with sector regulations. Healthcare, financial services have specific AI compliance requirements emerging. ## Strategic positioning Azure OpenAI is the AI foundation across Microsoft cloud, including Dynamics 365. For organisations on Microsoft, it's the natural choice for both built-in AI features and custom AI scenarios. For decision-makers: - Use built-in Copilot features. - Build custom AI where business value exists. - Govern AI use thoughtfully. - Invest in prompt engineering capability. - Monitor cost and output quality. AI is increasingly integrated into business operations. The organisations that use it intentionally — with verification, governance, and quality control — gain advantage. Those that use it carelessly create reputational and operational risk. Treat AI as powerful but fallible; build process around it. --- # Dynamics 365 and Conditional Access How Conditional Access protects Dynamics 365 — policy patterns, MFA, device compliance, location-based controls, and the Zero Trust patterns. Source: https://www.solvingdynamics365.com/guides/dynamics-365-and-conditional-access Section: Foundations / Security & compliance Published: 2026-05-01 Authenticating users into Dynamics 365 isn't a single yes-or-no decision; modern security demands contextual evaluation. **Conditional Access** (CA) in Microsoft Entra ID applies policies based on who, where, what device, and what risk — granting or denying access accordingly. For Dynamics 365 deployments of any sensitivity, conditional access is foundational. **The Conditional Access concept.** - Signal: user identity, device, location, application, risk. - Policy: rules that evaluate signal. - Decision: allow, allow with conditions (MFA, device compliance), block. The policy engine evaluates each sign-in attempt. **Common signals.** - **User / group** — who. - **Application** — Dynamics 365 or specific app. - **Device** — managed / unmanaged, compliant / not. - **Location** — IP range, country. - **Sign-in risk** — based on behavioural anomalies. - **User risk** — flagged accounts. - **Client app** — browser, mobile app, legacy. Combine signals to define policy. **Common policies for Dynamics.** - **Require MFA for all Dynamics access.** - **Block legacy authentication** (no SMTP basic auth). - **Require compliant device** for sensitive scenarios. - **Block sign-in from certain countries.** - **Require Hybrid Azure AD-joined** for admin. - **Step up authentication** for high-risk apps or sessions. Each policy targets specific risk. **MFA enforcement.** - **Always required** — strongest. - **Required when conditions met** — risk-based. - **Methods** — authenticator app preferred over SMS. For Dynamics 365 production environments, MFA should be table stakes. **Device compliance.** - **Microsoft Intune** evaluates devices. - **Compliant** — meets policies (encryption, version, etc.). - **Conditional Access** can require compliant. - **Non-compliant** — blocked or limited. For BYOD scenarios, device compliance balances enablement and security. **Location-based.** - **Named locations** — trusted IP ranges (office networks). - **Country-based** — block sign-ins from specific countries. - **Travel detection** — impossible-travel risk. For organisations with defined geographic operations, location signals strong. **Risk-based.** - **Sign-in risk** — this login attempt's risk. - **User risk** — accumulated risk score. - **Microsoft Entra ID Protection** provides signals. For high-risk sign-ins, additional verification or block. **Application targeting.** - **All cloud apps** — broad. - **Specific apps** — Dynamics, Power Apps, specific. - **Excluded apps.** Granular per-app policies possible. **User / group targeting.** - **All users** — broad. - **Specific groups** — admins, finance team. - **Excluded** — emergency access accounts, service principals. Most policies target groups; admins typically have stricter policies. **Emergency access accounts.** - **Break-glass accounts** for emergencies. - **Excluded from MFA policies** typically. - **Closely monitored.** - **Strong protection** (FIDO key, complex password). Without break-glass, locked-out admins can't recover. **Service principal handling.** - **Service accounts / managed identities** don't do MFA. - **Excluded** from user-targeted policies. - **Different security model** — credential rotation, access scoping. Common misconfiguration: service principal access blocked by MFA policy. **App protection policies.** - **Within app** — restrictions like no copy/paste to personal apps. - **Combines with CA** for layered defense. ## Modern authentication Required for CA to work: - **Legacy auth** bypasses CA. - **Disabling legacy** — important step. - **Modern apps** — OAuth-based. Without disabling legacy, CA can be bypassed by attackers. **Authentication context.** - **Step-up authentication** for sensitive actions within an app. - **Microsoft Defender for Cloud Apps** integration. - **Re-authenticate** for high-stakes operations. Modern pattern; not all apps support yet. **Common policy bundles.** - **Baseline** — MFA for admins, block legacy auth. - **Standard** — MFA for all users, compliant device for sensitive. - **Advanced** — risk-based, conditional, app-protection-aware. Adopt bundles incrementally. **Reporting and monitoring.** - **Sign-in logs** — every authentication. - **Policy results** — which policies fired. - **Blocked sign-ins** — what was prevented. - **MFA challenges** — frequency, success rate. Visibility into CA effectiveness; alerts for unusual patterns. **Testing policies.** - **Report-only mode** — see what would happen without enforcing. - **What If tool** — simulate specific sign-in. - **Pilot groups** — limited rollout. Test before broad enforcement; CA misconfigurations can lock users out. **Common pitfalls.** - **Locked-out admins.** No break-glass; emergency response delayed. - **Service principal blocked.** Automation breaks. - **Legacy auth still enabled.** CA bypassed. - **Policy overreach.** Legitimate users blocked. - **No monitoring.** Issues hidden. - **Policy proliferation.** Hard to understand combined effect. **Best practices.** - **Start with baseline** policies. - **Layer in advanced** policies based on risk. - **Test in report-only** before enforce. - **Maintain break-glass accounts.** - **Monitor sign-in logs.** - **Review policies periodically.** - **Document each policy's purpose.** **Zero Trust alignment.** - Verify explicitly — every request. - Least privilege. - Assume breach. Conditional Access operationalises Zero Trust for sign-in. ## Customer / partner access External users: - **Guest users** in tenant. - **CA policies** apply. - **B2B collaboration.** - **Power Pages users** different model. External access requires its own policy set. **Operational rhythm.** - **Daily** — sign-in log review. - **Weekly** — incident investigation. - **Monthly** — policy effectiveness review. - **Quarterly** — comprehensive CA audit. ## Strategic positioning Conditional Access is foundational for modern Dynamics 365 security. The setup is one-time; the operational discipline is ongoing. For decision-makers: - Enforce MFA broadly. - Block legacy authentication. - Require device compliance for sensitive scenarios. - Monitor and refine policies. The investment is modest licensing and policy work; the security benefit is substantial. Without CA, sign-in security is the password — insufficient in current threat environment. With CA, security is contextual, layered, defensible. --- # Dynamics 365 and Microsoft Defender How Microsoft Defender protects Dynamics 365 environments — Defender for Cloud, Defender for Cloud Apps, Defender for Identity, and threat detection patterns. Source: https://www.solvingdynamics365.com/guides/dynamics-365-and-microsoft-defender Section: Foundations / Security & compliance Published: 2026-05-01 Dynamics 365 environments hold sensitive business data — financial, customer, employee. Protecting them requires layered security including threat detection. **Microsoft Defender** is Microsoft's unified security family covering identity, devices, cloud, applications, data. For Dynamics 365, several Defender products provide protection. **The Defender family.** - **Microsoft Defender for Cloud** — Azure resource security. - **Microsoft Defender for Cloud Apps** (formerly MCAS) — SaaS application security. - **Microsoft Defender for Identity** (formerly ATP) — identity threats. - **Microsoft Defender XDR** — extended detection and response across. - **Microsoft Defender for Endpoint** — device security. - **Microsoft Defender for Office 365** — email and collaboration security. Coordinated platform; pieces work together. **Defender for Cloud Apps and Dynamics.** - Discovers SaaS apps in use. - Monitors usage for risky behaviour. - Applies session controls. - Detects shadow IT. - Protects Dynamics 365 sessions. For Dynamics 365 specifically, Defender for Cloud Apps adds: - Real-time session monitoring. - Conditional access policies (cookie restrictions, downloads). - Activity-based alerts. - Anomaly detection. ## Session control example "Users on personal devices can read Dynamics but not download bulk data" — implemented via Defender for Cloud Apps reverse proxy. **Defender for Identity.** - Monitors Entra ID for compromise indicators. - Detects credential theft, lateral movement. - Behavioural analytics on user accounts. - Alerts security team. Dynamics 365 access depends on Entra ID; protecting the identity is protecting Dynamics. **Defender XDR.** - Aggregates signals across products. - Correlates incidents. - Recommends response. - Single pane for security team. For sophisticated security operations, XDR is the operational surface. **Common threats to Dynamics 365.** - **Compromised user credentials** — most common. - **Phishing** — leading to credential theft. - **Brute force attempts.** - **Insider threats** — privileged users misusing access. - **API abuse** — programmatic access exfiltration. - **Malware on user devices** — keylogging credentials. Each has different detection and mitigation patterns. **Defender for Cloud Apps capabilities for Dynamics.** - **Activity logging** — granular user activity. - **Anomaly detection** — unusual location, time, data access. - **Alerts** — risky behaviour flagged. - **Policies** — block / monitor specific activities. - **Cloud discovery** — find unsanctioned cloud apps. For Dynamics admins, the visibility is substantial. **Conditional access integration.** - **Conditional access policies** in Entra ID. - **Defender risk signals** inform decisions. - **Risk-based** — high-risk login requires additional verification. - **Compliant device required** — block from unmanaged. Modern Zero Trust patterns. **Anomaly detection examples.** - **Impossible travel** — login from two distant locations in short time. - **Unusual hours** — login at 3 AM. - **Mass download** — pulling many records. - **Privilege escalation.** - **New admin role.** Each generates alert; security team reviews. **Investigation tools.** - **User activity timeline.** - **Cross-product correlation.** - **Affected resources.** - **Recommended actions.** For security analysts investigating incidents. ## Insider risk management Within Purview but related: - Detect risky internal behaviour. - Privileged user monitoring. - Data movement patterns. Combined with Defender for behavioural surface. **Response capabilities.** - **Block user** — disable account. - **Force password reset.** - **Revoke sessions.** - **Quarantine device.** - **Block specific activity.** Coordinated response across Defender products. **Integration with SIEM.** - **Microsoft Sentinel** — Microsoft's SIEM. - Defender signals flow to Sentinel. - SIEM correlates across. - SOAR (Security Orchestration, Automation, Response) for automated response. For security operations centres, Sentinel + Defender is the modern stack. **Compliance value.** - Audit logs for regulatory needs. - Demonstrate controls for SOC 2, ISO 27001. - Incident response evidence. Defender contributes to compliance posture. **Pricing.** - Various SKUs and bundles. - Microsoft 365 E5 includes much. - Specific Defender products separately licensed. - Volume affects pricing. For comprehensive coverage, plan for meaningful licence investment. **Coverage of common scenarios.** - **Account compromise** — caught by Defender for Identity + Defender for Cloud Apps. - **Data exfiltration** — Defender for Cloud Apps activity alerts. - **Malicious insider** — anomaly detection + Insider Risk Management. - **Phishing leading to access** — Defender for O365 + risk-based access. **Common pitfalls.** - **Alerts ignored.** Defender generates alerts; security team overwhelmed. - **No SOC** — alerts created, nobody investigates. - **Policies misconfigured.** False positives erode trust. - **Visibility without action.** See risks; no response process. - **Defender not licensed.** Visibility gap. **Operational rhythm.** - **24/7** for SOC operations. - **Daily** alert triage. - **Weekly** posture review. - **Monthly** policy adjustments. - **Per incident** response and learn. **Best practices.** - **Enable relevant Defender products.** - **Tune policies** to reduce noise. - **Define response procedures.** - **Train SOC team.** - **Integrate with SIEM** for correlation. - **Periodic red-team testing.** **Cross-cloud considerations.** - Dynamics may integrate with non-Azure systems. - Defender for Cloud Apps protects many SaaS. - Multi-cloud visibility expanding. ## Strategic positioning Modern Dynamics 365 security includes Defender; without it, threat detection is shallow. The integration with broader Microsoft cloud (M365, Entra ID, Azure) means coordinated security posture. For decision-makers: - Evaluate Defender coverage for Dynamics. - Invest in SOC capability to use the tools. - Build response procedures. - Test regularly via red-team / tabletop exercises. - Treat security as operational discipline, not configuration. The investment is meaningful; the threat environment justifies. Modern attackers target SaaS environments; Dynamics 365 is in the crosshairs. Defender raises the security bar; the operational discipline of using it raises it further. --- # Dynamics 365 and Microsoft Purview How Microsoft Purview integrates with Dynamics 365 for unified data governance — sensitivity labels, data loss prevention, audit, retention. Source: https://www.solvingdynamics365.com/guides/dynamics-365-and-microsoft-purview Section: Foundations / Security & compliance Published: 2026-05-01 **Microsoft Purview** is Microsoft's unified data governance and compliance platform — encompassing what was previously Azure Purview (data catalog) and Microsoft 365 Compliance (sensitivity labels, DLP, eDiscovery). For Dynamics 365 customers, Purview provides governance capabilities that span Dynamics, M365, Azure, and external data sources. **What Purview offers.** - **Data Map / Catalog** — discover and catalog data across sources. - **Data classification** — automated identification of sensitive data. - **Sensitivity labels** — Microsoft-wide labelling system. - **Data Loss Prevention (DLP)** — prevent inappropriate data sharing. - **Information Protection** — encryption and rights management. - **eDiscovery** — find data for legal / regulatory holds. - **Audit and compliance.** - **Insider risk management.** A broad platform covering many governance needs. **How Dynamics 365 integrates.** - **Dataverse content** can be classified and labelled. - **Sensitivity labels** apply to Dataverse records (emerging). - **DLP policies** apply to Power Platform. - **Audit data** from Dynamics flows to Purview audit. - **eDiscovery** can search Dynamics data. Integration depth varies; expanding per release. **Sensitivity labels in practice.** - Defined in Purview (Confidential, Highly Confidential, etc.). - Applied to documents, emails, and increasingly Dataverse data. - Drive downstream protection — encryption, sharing restrictions. Consistent classification across Microsoft cloud. ## DLP for Power Platform As covered in [[dlp-policies-in-power-platform]]: - Connector classification. - Restriction on connector combinations. - Tenant-wide policies. Purview-managed DLP policies for broader Microsoft 365 coexist; Power Platform DLP is separate but integrated. **Information protection.** - **Encryption** — at-rest and in-transit. - **Rights management** — restrict who can open, edit, forward. - **Watermarks** — visible reminders. For Dynamics-generated documents (invoices, reports), can apply protection. **Data Map / Catalog.** - Scan data sources. - Build catalog of datasets. - Tag for ownership, classification. - Searchable. For organisations with data in many places (Dataverse, F&O, lakes, SQL), the catalog is the discovery layer. **Catalog covers.** - Azure SQL. - Synapse / Fabric. - Data Lake. - Increasingly Dataverse. - Third-party connectors. Centralised view of data assets. **Lineage.** - Where did this data come from? - What transformations applied? - Where does it go? Critical for compliance investigation and impact analysis. **Audit integration.** - **Dynamics audit logs** → Purview audit. - **Search across audit data.** - **Long-term retention.** For compliance audits, centralised audit is essential. **eDiscovery.** - **Legal hold** on relevant data. - **Search across content** including Dynamics, Exchange, SharePoint, OneDrive. - **Export for production.** - **Audit trail** of eDiscovery activities. For organisations facing litigation, eDiscovery is operational capability. **Insider risk management.** - Detect potentially risky user behaviour. - Data exfiltration patterns. - Compliance violations. - Privileged-user monitoring. For sensitive data environments, insider risk is real threat. **Compliance Manager.** - Built into Purview. - Maps controls to regulations (GDPR, HIPAA, etc.). - Tracks compliance posture. - Implementation guidance. For programmes managing multiple compliance frameworks, Compliance Manager is dashboard. **Configuration in Purview.** - Centralised admin portal (admin.microsoft.com → Purview). - Policies defined. - Applied across products. - Monitored centrally. The unified administration is the headline benefit. **Licensing.** - Purview has multiple SKUs. - Microsoft 365 E5 includes much. - Dynamics-specific Purview features evolving. - Separate licensing for some advanced features. Plan licensing per organisational needs. **Integration patterns.** - **Sensitivity label propagation** — apply in Word / Excel; carry through to Dataverse. - **DLP enforcement** — across products. - **Audit aggregation** — single audit log. The cross-product integration is the strategic value. ## Privacy compliance manager Within Purview: - DSAR fulfillment helper. - Data subject finder across services. - Privacy assessment tools. For privacy operations, centralised tooling. **Records management.** - Retention policies defined. - Applied to documents, emails, Dataverse content. - Automated deletion at end of retention. - Legal hold overrides. For records retention compliance, Purview enables. **Common pitfalls.** - **Underused capability.** Purview licensed but only partially used. - **Sensitivity labels not adopted.** Documents unclassified; protection inconsistent. - **DLP policies overly broad.** Productivity hit. - **No retention strategy.** Data accumulates; legal exposure. - **Audit logs unmonitored.** Data exists; insight not extracted. - **Implementation expertise gap.** Purview is complex; needs specialist. **Best practices.** - **Start with classification.** Foundation for everything else. - **Phased adoption** of Purview features. - **Train users** on sensitivity labels. - **Monitor adoption** — labels actually applied? - **Periodic policy review** — adjust based on incident learnings. **Organisational implications.** - **Privacy officer / DPO** owns programme. - **Security team** operates technical controls. - **Compliance team** ensures regulatory alignment. - **Business owners** classify their data. Purview supports cross-functional governance. ## Strategic positioning Microsoft Purview is the unifying governance and compliance platform for Microsoft cloud, increasingly including Dynamics 365 deeply. For organisations on Microsoft cloud, Purview is the natural choice; standalone third-party tools have specific niches but Purview integration depth wins for breadth. For decision-makers: - Evaluate Purview alongside existing licensing. - Plan phased adoption of capabilities. - Invest in implementation expertise. - Build operational rhythm around governance. - Connect Purview to organisational compliance programme. The investment is substantial; the regulatory and risk landscape demands it. For any organisation with meaningful data sensitivity, Purview adoption is increasingly table stakes, not optional. Dynamics 365 customers benefit from the integration as both platforms evolve. --- # Dynamics 365 and the Microsoft Teams platform How Microsoft Teams serves as the productivity surface for Dynamics 365 — embedded apps, chat with context, meetings, Power Apps in Teams. Source: https://www.solvingdynamics365.com/guides/dynamics-365-and-microsoft-teams-platform Section: Foundations / Productivity & UX Published: 2026-05-01 For organisations standardising on Microsoft 365, **Teams** is the connective tissue across all productivity work — chat, meetings, files, calls. Dynamics 365 integrates deeply with Teams to make CRM and ERP context available inside collaborative work. The integration goes beyond surface-level; deployed well, Teams + Dynamics is the unified productivity experience modern organisations expect. **Integration surfaces.** - **Record pinning** — Dynamics records as Teams tabs. - **Chat with context** — converse about records. - **Meetings with Dynamics context** — meetings linked to records. - **Adaptive cards** — Dynamics events posted as cards. - **Power Apps embedded** as Teams tabs. - **Approvals in Teams** — Power Automate-generated. - **Copilot integration** — across Teams and Dynamics. - **Customer engagement via Teams** — for Contact Center. Multiple integration points; each adds value. **Record pinning.** - Pin a Dynamics account, opportunity, or case to a Teams channel. - Channel members access the record. - Conversations about the record happen in the channel. - Updates in Dynamics reflect in the pin. Pattern: deal team works in a Teams channel pinned to the opportunity. **Chat with context.** - From a Dynamics record, start a Teams chat. - Recipients suggested based on record (owner, stakeholders). - Link to record automatically. Eliminates the "I'll send you the URL" friction. **Meetings + Dynamics.** - **Calendar invites** can reference Dynamics records. - **Meeting summaries** post back to records. - **Recording analysis** by Sales Conversation Intelligence. For sales meetings, the link to opportunities reduces post-meeting note-taking. ## Adaptive cards Dynamics events to Teams: - "New high-value opportunity created" → card in sales channel. - "Case escalated to manager" → notification. - "Approval needed" → actionable card. Cards include buttons — approve, view, dismiss — for inline action. **Power Apps in Teams.** - Canvas apps run as Teams tabs. - Model-driven apps embedded. - Per-team apps for specific workflows. Examples: timesheet app in Teams, expense submission, ticket lookup. **Power Automate approvals.** - Flow generates approval. - Approver sees in Teams. - Approve or reject in Teams chat. - Workflow continues. For approval-heavy organisations, this is canonical pattern. ## Customer Service in Teams Contact center use: - **Customer chat** routed to agent's Teams. - **Agent collaboration** with peers and supervisors during conversation. - **Subject matter expert** consulted via Teams chat. - **Internal handoff** seamless. For complex service interactions, Teams collaboration improves quality. **Voice integration.** - **Teams Phone** with Direct Routing or Calling Plans. - **Contact Center on Teams** — full contact center experience. - **Click-to-call** from Dynamics records. Convergence of CRM, communication, and collaboration. ## Microsoft Copilot Conversation across both: - "Summarise this opportunity" — surfaces from Dynamics. - "What's the customer's recent activity?" — queries Dynamics. - "Draft an email about this case" — combines context. Copilot blurs product boundaries. **Microsoft Loop integration.** - Loop components in Teams chat. - Some Dynamics integration emerging. - Collaborative components shared. The unified productivity vision; integration maturing. **Implementation considerations.** - **Licensing** — both Teams and Dynamics required. - **Permissions** — Teams users need Dynamics permissions for embedded experiences. - **Information architecture** — which channels, which apps, which records. - **Training** — Teams users + Dynamics users. Plan deployment intentionally. **Adoption patterns.** - **Start with high-frequency workflow** — sales opportunity reviews, case escalation. - **Train both audiences** — Teams users on Dynamics features, Dynamics users on Teams patterns. - **Champions** — early adopters demonstrate value. - **Measure** — usage of integrations. Without intentional adoption, integration features sit unused. **Use cases that work well.** - **Deal team collaboration** — channel per opportunity for major deals. - **Service escalation** — case channels for complex situations. - **Approval flows** — in Teams, where approvers already are. - **Knowledge sharing** — KB articles linked from chat. - **Customer escalation rooms** — for critical incidents. **Use cases that may not.** - **Heavy data manipulation** — Teams tabs are constrained. - **Complex form interactions** — better in native Dynamics. - **Long-form analysis** — Teams not the right surface. Match integration depth to use case. **Performance.** - **Embedded experiences** — same performance as standalone. - **Cross-product queries** — slightly slower than direct. - **Notification volume** — manage to prevent fatigue. **Common pitfalls.** - **Over-notification.** Every Dynamics change posts to Teams; channels become noise. - **Wrong channel pins.** Records pinned where ignored. - **Permission gaps.** Teams user can't actually access pinned Dynamics record. - **No adoption drive.** Integrations enabled; nobody uses. - **Conversation history vs Dynamics activity.** Where's the record? Confusion. **Best practices.** - **Selective notifications** — only high-signal events. - **Channel design** intentional. - **Permissions aligned.** - **Train and champion.** - **Measure usage; refine.** ## Strategic positioning For Microsoft-aligned organisations, Teams + Dynamics integration is the productivity vision. The capabilities exist; the operational design determines value. For decision-makers: - Plan integrations alongside Dynamics deployment. - Choose specific workflows for embedded experiences. - Invest in adoption. - Measure usage. - Iterate. The investment is moderate (configuration, training); the productivity benefit is measurable through reduced context-switching. For organisations not strongly Teams-aligned, forcing the integration is less effective; for Teams-centric ones, it's a meaningful productivity uplift. --- # Dynamics 365 and the Power Platform How the Power Platform extends, automates, analyses, and surfaces AI on top of every Dynamics 365 app. Source: https://www.solvingdynamics365.com/guides/dynamics-365-and-power-platform Section: Foundations / Platform overview Published: 2026-05-01 Updated: 2026-08-30 The Power Platform is the low-code, AI-first extensibility layer for everything Microsoft does in business applications. For Dynamics 365 customers it's not really optional — every non-trivial implementation involves at least one Power Platform component, and most involve all of them. Understanding where Dynamics 365 ends and the Power Platform begins is the single most useful piece of architecture knowledge a project sponsor can carry, because it decides how customisations get built, who can build them, and what they cost. ## Dataverse: the foundation Start at the bottom. **Dataverse** is the shared data platform underneath: tables, relationships, role-based security, business rules, auditing, and a Web API. Dynamics 365's CRM-side apps (Sales, Customer Service, Field Service, Project Operations) run *on* Dataverse — their entire data model lives there. The ERP-side apps (Business Central, Finance and Operations) run on their own platforms and integrate *with* Dataverse via Dual-write, virtual tables, or APIs. This split explains most of the "why doesn't X just work with Y" questions in the ecosystem; the details are in [what is Microsoft Dataverse](https://www.solvingdynamics365.com/guides/what-is-microsoft-dataverse). ## Power Apps Used to build custom business apps in two flavours: **model-driven**, which is the same framework the CRM apps are themselves built on (forms, views, business process flows over Dataverse), and **canvas**, a free-form drag-and-drop builder for purpose-built mobile and tablet front ends. Dynamics 365 CRM-side apps *are* model-driven Power Apps with a pre-built schema and licensing — which is why a Dynamics customisation and a custom Power App are built with the same tools by the same people. When to configure the bought app versus build your own is its own decision — see [Power Apps vs Dynamics 365 CRM](https://www.solvingdynamics365.com/guides/power-apps-vs-dynamics-365-crm). ## Power Automate Workflow and robotic process automation. Cloud flows run on triggers and schedules across hundreds of connectors; desktop flows automate legacy applications via UI. The most common Dynamics 365 uses: replacing custom plug-ins with low-code flows, automating approvals, and bridging Dynamics 365 to non-Microsoft systems. The discipline that matters: flows are real software. They need error handling, ownership, and ALM like everything else — the graveyard of failed automation is full of flows built in a personal environment by someone who left. ## Power BI Self-service analytics and dashboards. Dynamics 365 ships pre-built Power BI apps for Sales, Customer Service, Finance, Business Central, Supply Chain, and Field Service — genuinely useful starting points, though every serious deployment ends up building its own semantic model. For deeper analytics, **Microsoft Fabric** integration streams Dataverse and F&O data into a lakehouse where it can be combined with non-Microsoft data without hand-built ETL. ## Copilot Studio Used to build AI agents — chatbots and agentic assistants — that read and write Dynamics 365 via standard connectors and Dataverse. Increasingly the way customers deflect call-centre volume, build self-service, and embed generative AI into internal apps. Treat agent projects like software projects with testing and guardrails, not like configuration switches; [building agents with Copilot Studio](https://www.solvingdynamics365.com/guides/building-agents-with-copilot-studio) covers the reality. ## Power Pages External-facing portals built on Dataverse, used for customer self-service, B2B partner extranets, public-sector citizen services, and event sites. Anywhere someone outside your Entra ID tenant needs to see or submit CRM data, Power Pages is the Microsoft answer. ## Licensing Most Power Platform usage is included with a Dynamics 365 license *for the apps that user is licensed for* — a Sales user can run flows and model-driven apps within the Sales context. Standalone Power Apps and Power Automate licenses cover use beyond that bundled scope, and this boundary is where surprise costs live: a "small" custom app for non-Dynamics users, a flow using premium connectors run by unlicensed staff, or Dataverse capacity consumed by attachments. Have someone own the licensing question per solution, before it ships. ## Governance: the part that decides success The Power Platform's superpower — anyone can build — is also its failure mode. The platform ships with the controls: **Managed Environments**, DLP policies, environment strategies, solution-based ALM, and the Center of Excellence toolkit. Companies that treat these as day-one infrastructure get a healthy maker ecosystem on top of their Dynamics investment; companies that skip them get four hundred orphaned apps and a compliance headache. Start with [Power Platform environments](https://www.solvingdynamics365.com/guides/power-platform-environments) and [DLP policies](https://www.solvingdynamics365.com/guides/dlp-policies-in-power-platform), and put governance in place while the app count is still small — retrofitting it later is an archaeology project. ### Frequently asked questions **Do I need the Power Platform to run Dynamics 365?** In practice, yes. Every non-trivial implementation uses at least one component — flows for automation, model-driven customisation, Power BI reporting, Copilot Studio agents, or Power Pages portals — and most use all of them. **Are the Dynamics 365 CRM apps really Power Apps?** Yes. Sales, Customer Service, Field Service, and Project Operations are model-driven Power Apps with a pre-built schema and licensing on Dataverse, which is why Dynamics customisations and custom Power Apps are built with the same tools by the same people. **What Power Platform usage does a Dynamics 365 licence include?** Use within the licensed app's context — a Sales user can run flows and model-driven apps against Sales data. Custom apps for non-Dynamics users, premium connectors run by unlicensed staff, and Dataverse capacity consumed by attachments are where surprise costs live. **What governance should be in place from day one?** Environment strategy, DLP policies, Managed Environments where the maker community is wide, solution-based ALM, and the Center of Excellence toolkit. Retrofitting governance after hundreds of apps exist is an archaeology project. --- # Dynamics 365 Commerce explained Microsoft's unified retail platform — head office, store POS, e-commerce, omnichannel order management, and clienteling — and who it's actually for. Source: https://www.solvingdynamics365.com/guides/dynamics-365-commerce-explained Section: Finance & SCM / Retail & commerce Published: 2026-05-01 Updated: 2026-08-30 **Dynamics 365 Commerce** is Microsoft's unified retail application, descended from the Dynamics AX Retail module (and briefly named Dynamics 365 for Retail — that history is in [its own guide](https://www.solvingdynamics365.com/guides/dynamics-365-for-retail)). It is a full retail platform: head-office merchandising, store point-of-sale, e-commerce, call centre, omnichannel order management, and customer engagement — all running on the same data model as [Finance](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-finance) and [Supply Chain Management](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-supply-chain). That last clause is the entire pitch. Most retail stacks are a federation: one vendor's POS, another's e-commerce, a third's OMS, an ERP behind them, and a career's worth of integration glue between. Commerce collapses the stack — the item you merchandise, the price you promote, the stock you promise, and the ledger you post to are one system. Whether that consolidation is worth the implementation effort is the real evaluation question, and this guide tries to give you enough shape to answer it. ## The architecture in one paragraph Commerce is not a monolith sitting inside F&O. Head office lives in F&O; the channels — stores, e-commerce, call centre — talk to a **Commerce Scale Unit (CSU)**, a channel-facing runtime that serves the Retail Server APIs, holds the channel database, and keeps trading even when head office is busy or briefly unreachable. Data moves between head office and channels through **Commerce Data Exchange (CDX)** — scheduled distribution jobs pushing products, prices, and assortments down, and pulling transactions up for statement posting. Understanding this hub-and-spoke shape explains most of Commerce's operational behaviour, including why a price change doesn't hit the tills the second you save it. The data flows are covered in depth in [retail channel data management](https://www.solvingdynamics365.com/guides/retail-channel-data-management). ## Head office Merchandising is managed centrally in F&O: category hierarchies, product attributes, catalogues, **assortments** (which products each channel carries), pricing, and promotions. Store operations — shifts, cash management, statement posting back to the general ledger — are configured here too; the operational day-to-day is covered in [store operations](https://www.solvingdynamics365.com/guides/dynamics-365-commerce-store-operations). The discount engine deserves its reputation: threshold, quantity, mix-and-match, and tender-based discounts with concurrency rules deciding what happens when several apply at once. Powerful, and easy to configure into unprofitability — see [discounts and pricing in Commerce](https://www.solvingdynamics365.com/guides/discounts-and-pricing-in-commerce). ## Point of sale The current POS client is the **Store Commerce app**, which superseded the older Modern POS; a browser-based variant covers thin-client scenarios. The POS works offline against a channel-side database and syncs when connectivity returns — essential for stores in flaky-network reality. Hardware (cash drawers, printers, scanners, payment terminals) connects through the Hardware Station. The full POS story, including device management across hundreds of stores, is in [Modern POS in Dynamics 365 Commerce](https://www.solvingdynamics365.com/guides/modern-pos-in-dynamics-365-commerce). The same client doubles as a **clienteling** tool: associates pull up cross-channel purchase history, preferences, and wish lists, and act on them mid-conversation — the till as a service tool, not just a payment terminal. See [clienteling in Dynamics 365 Commerce](https://www.solvingdynamics365.com/guides/clienteling-in-dynamics-365-commerce). ## E-commerce Commerce ships a managed e-commerce platform: content management with a visual site builder, B2C storefronts, B2B portals with account hierarchies and catalogue-based pricing, search, and checkout — deployed as part of the Commerce environment. In practice the market splits: mid-market retailers run the built-in storefront; larger ones go **headless**, keeping Commerce as the engine (products, prices, inventory, orders through the CSU APIs) and building the front end on their own stack. Both are legitimate; the headless route costs more and frees your front-end roadmap from Microsoft's release cadence. ## Call centre and omnichannel orders The **call centre** channel gives phone-order teams a keyboard-optimised order entry experience with the same pricing and promotions as every other channel — plus retail-specific machinery like catalogue source codes and continuity orders. Details in [the Commerce call centre guide](https://www.solvingdynamics365.com/guides/dynamics-365-commerce-call-center). Across channels, one order can be fulfilled any way the customer wants: buy online, pick up in store; return in store what was bought online; ship from store when the warehouse is out. Cross-channel inventory visibility comes from Supply Chain Management, and order orchestration is configurable rather than hard-coded. ## Loyalty Multi-tier loyalty with points accrual and redemption rules configured centrally and honoured across every channel — the store, the web shop, and the call centre read the same balance. Design decisions and gotchas are in the [retail loyalty deep dive](https://www.solvingdynamics365.com/guides/retail-loyalty-program-deep-dive). ## Who it's for — and who it isn't Commerce targets mid-size to large retailers — roughly the 10-stores-to-thousands range — that want omnichannel from one platform and are (or are becoming) an F&O shop, since Commerce presumes the F&O foundation. Grocery, fashion, speciality, and increasingly B2B-heavy distributors selling through portals all fit. Microsoft packages the retail story, with Commerce at its centre, under [Microsoft Cloud for Retail](https://www.solvingdynamics365.com/guides/microsoft-cloud-for-retail). Who it isn't for: a 3-store retailer or an e-commerce-only brand. That profile fits [Business Central](https://www.solvingdynamics365.com/guides/what-is-business-central) plus a retail ISV or a Shopify-class storefront at a fraction of the cost and timeline. And at the very top end, global retailers sometimes keep a specialist OMS or POS estate and use F&O behind it — a legitimate architecture, just not the unified one. Licensing follows the F&O pattern: per-user Commerce licences on the operations side, with e-commerce and scale-unit capacity as add-ons. Budget the implementation in quarters, not weeks — this is an ERP-grade project with stores attached. ## The trade-off The honest summary: Commerce is a substantial commitment — multi-month to multi-year, with real infrastructure and partner-skill requirements — and the payoff is genuine omnichannel from one database, which point-solution stacks chronically promise and rarely deliver. If you're already committed to F&O and run real stores, it belongs on the shortlist. If you're not, the F&O prerequisite is the first decision to make — start with [Business Central vs Finance and Operations](https://www.solvingdynamics365.com/guides/business-central-vs-finance-and-operations). ### Frequently asked questions **What is a Commerce Scale Unit?** The channel-facing runtime that serves the Retail Server APIs and holds the channel database, so stores, e-commerce, and the call centre keep trading even when head office in Finance and Operations is busy or unreachable. Data moves between the two through Commerce Data Exchange distribution jobs. **Why does a price change not appear at the till immediately?** Because Commerce is hub-and-spoke. Prices, products, and assortments reach channels through scheduled Commerce Data Exchange jobs, and transactions come back the same way for statement posting. Timing follows the job schedule, not the save button. **Does Dynamics 365 Commerce require Finance and Operations?** Yes. Head office — merchandising, pricing, assortments, statement posting — lives in Finance and Operations, and Commerce presumes that foundation. A retailer not already committed to F&O has to make that decision first. **Should I use the built-in e-commerce storefront or go headless?** Mid-market retailers typically run the built-in storefront. Larger ones go headless, keeping Commerce as the engine for products, prices, inventory, and orders through the Commerce Scale Unit APIs while building their own front end — more expensive, but it frees the front-end roadmap from Microsoft's release cadence. **Is Commerce right for a small retailer?** No. A three-store retailer or an e-commerce-only brand is better served by Business Central plus a retail ISV or a Shopify-class storefront. Commerce targets roughly ten stores to thousands and should be budgeted in quarters, not weeks. --- # Dynamics 365 Contact Center explained Microsoft's standalone Contact Center offering — voice, digital channels, agent workspace, Copilot integration. Source: https://www.solvingdynamics365.com/guides/dynamics-365-contact-center-explained Section: Customer Engagement / Customer Service Published: 2026-05-01 **Dynamics 365 Contact Center** is Microsoft's standalone, Copilot-first contact centre product launched in 2024. It packages voice, digital channels, agent workspace, AI-driven routing and Copilot features into a discrete SKU that can be deployed alongside or instead of Dynamics 365 Customer Service. Understanding what it offers — and how it relates to Customer Service with Omnichannel — clarifies the choice for organisations evaluating contact-centre platforms. ## The positioning Microsoft has long sold contact centre capabilities as part of Customer Service Enterprise + Omnichannel add-on. Contact Center is the standalone version — same underlying capability stack, distinct SKU and positioning. The strategic intent: compete with Five9, Genesys, NICE, Talkdesk in pure contact-centre deals. **What's in Contact Center.** - **Voice** — inbound and outbound calling via Azure Communication Services, with IVR, queues, routing. - **Digital channels** — chat, SMS, social, email, WhatsApp. - **Unified routing** — ML-driven assignment to skilled agents. - **Agent workspace** — modern multi-session UI. - **Copilot** — call summarisation, draft responses, knowledge surfacing. - **Quality management** — call recording, sentiment, coaching. - **Workforce management** — forecasting, scheduling, intraday adherence (in roadmap). - **Analytics** — operational dashboards. The product covers the typical contact-centre operational lifecycle. ## Voice infrastructure Built on Azure Communication Services: - **Inbound numbers** — PSTN numbers from Microsoft or BYO via SIP. - **IVR** — natural-language interactive voice response. - **Queues** — by skill, priority, language. - **Routing** — assigns to best-matched available agent. - **Recording** — full call recording with consent management. - **Quality monitoring** — supervisors listen in or whisper. Voice quality and reliability are at Azure cloud scale; latency and audio quality are competitive with established CCaaS vendors. ## Digital channels Native: - **Live chat** — embed in customer's site or app. - **SMS** — two-way. - **WhatsApp Business** — via Twilio or 360dialog integration. - **Facebook Messenger.** - **Apple Messages for Business.** - **Email.** Each channel handled in the unified workspace; agents handle multiple conversations across channels. **Copilot capabilities.** - **Real-time call assist** — summarise call so far, suggest responses, surface relevant knowledge. - **Post-call summary** — auto-generated case wrap-up. - **Sentiment alerts** — supervisor notified when sentiment turns negative. - **Draft response** — for digital channels. The Copilot integration is the headline differentiator vs older contact-centre platforms. ## Routing engine ML-based unified routing: - Inputs: customer profile, urgency, language, skill needed, priority. - Output: best-matched agent (with skill, availability, recent performance). - Learns over time from resolution outcomes. For voice, IVR data feeds the routing decision; for digital, the conversation start informs. ## Customer 360 view When an interaction lands, the workspace shows: - Customer profile. - Recent interactions (across channels). - Open cases. - Account context (from CRM integration). - Sentiment trend. - AI-suggested actions. The agent has full context in one pane, no system-hopping. ## Integration with Customer Service Contact Center and Customer Service share underlying Dataverse: - **Cases** unify both. - **Knowledge base** shared. - **Account/contact data** common. - **Reporting** consolidated. A typical deployment: existing Customer Service customers add Contact Center for the voice and AI capabilities; new customers can buy Contact Center standalone. ## Contact Center vs Customer Service + Omnichannel Functionally significant overlap. Differences: - **Contact Center is the "modernised" packaging** — built around Copilot from the start. - **Pricing** — different SKUs and bundles. - **Channels** — Contact Center includes voice; Customer Service Enterprise doesn't natively. - **Workforce management** — Contact Center has more roadmap commitment here. In 2026, the two products are converging in capability. The choice is mainly licensing and SKU bundle related. **Deployment considerations.** - **PSTN numbers** — porting from existing carrier or buying new; takes weeks for porting. - **IVR design** — natural language IVR is good but needs tuning to local languages. - **Agent training** — modern workspace is different from legacy CC systems; budget training. - **Network requirements** — voice quality needs adequate bandwidth and QoS. - **Compliance** — call recording laws vary by jurisdiction; consent management is critical. **Common pitfalls.** - **Buy without commitment.** Treating Contact Center as a feature add rather than a contact-centre programme; minimal ROI. - **IVR over-engineered.** Customers prefer fewer menu options; complex IVRs frustrate. - **Copilot trusted blindly.** Suggestions need agent review; agents who paste verbatim AI output sometimes embarrass themselves. - **No quality programme.** Recordings happen, no one reviews; coaching dies. - **Skipped workforce management.** Manual scheduling on spreadsheets while the system has WFM capability. ## Strategic positioning Microsoft Contact Center is a credible CCaaS option for organisations already on Dynamics 365 or M365. The integration with existing customer data and the Copilot-first approach differentiate it from legacy CCaaS. For pure contact-centre buyers without Microsoft footprint, alternatives (Genesys, NICE, Five9) may have more vertical-specific features. For Microsoft-aligned organisations, Contact Center is increasingly the natural choice — particularly given the speed of Copilot evolution. ## Where to go next The product it packages is [Dynamics 365 Customer Service](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-customer-service), and the SKU decision is worked through in [omnichannel licensing](https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-omnichannel-licensing) with prices on the [Customer Service pricing page](https://www.solvingdynamics365.com/pricing/customer-service). The voice channel in depth is [omnichannel voice](https://www.solvingdynamics365.com/guides/omnichannel-voice-in-customer-service). Against the wider market, see [Customer Service vs Zendesk](https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-vs-zendesk). ### Frequently asked questions **What is the difference between Dynamics 365 Contact Center and Customer Service with Omnichannel?** The same underlying capability stack in different packaging. Contact Center is the standalone, Copilot-first SKU that includes voice, digital channels, unified routing, and the agent workspace; Customer Service Enterprise needs channel add-ons for the same reach. In 2026 the two converge in capability, so the choice is mostly about licensing and bundle shape. **Can Dynamics 365 Contact Center be used with a non-Microsoft CRM?** Yes. It is positioned as a standalone CCaaS product competing with Genesys, NICE, Five9, and Talkdesk and can sit on top of other CRMs, although the deepest integration is with Dynamics 365 Customer Service on shared Dataverse. **What runs the voice channel?** Azure Communication Services. Inbound PSTN numbers come from Microsoft or via SIP from your own carrier, IVR is natural-language, calls are recorded with consent management, and supervisors can listen in or whisper. Porting numbers from an existing carrier takes weeks — plan for it. **What does Copilot do in Contact Center?** Real-time call assist (summary so far, suggested responses, surfaced knowledge), automatic post-call summaries for case wrap-up, sentiment alerts to supervisors, and draft responses on digital channels. Agents should review suggestions rather than paste them verbatim. --- # Dynamics 365 Customer Service vs ServiceNow Dynamics 365 Customer Service vs ServiceNow Customer Service Management — platform philosophy, case-to-fulfilment workflow, pricing, CRM context, field service, and fit. Source: https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-vs-servicenow Section: Customer Engagement / Comparisons Published: 2026-09-03 ServiceNow shows up against Dynamics 365 Customer Service in a specific kind of deal: a large organisation that already runs ServiceNow for IT and asks whether Customer Service Management should be the customer-facing desk too. The answer depends on what a "case" means in that organisation — a conversation with a customer on a shared CRM record, or a unit of enterprise work that has to be orchestrated across many teams. ## What each product is **ServiceNow Customer Service Management (CSM)** is the customer-facing service application on the Now Platform, the same platform that runs ServiceNow ITSM, ITOM, HR, and field service. Its model is the case connected to the enterprise: a customer case can spawn tasks, changes, problems, and work orders across internal teams, with the Now Platform's workflow, SLA, and knowledge engines underneath, Now Assist for generative AI, and a proactive, account-and-asset-centric data model. It is licensed per fulfiller user, quoted, and sold direct by ServiceNow with partners for implementation. **Dynamics 365 Customer Service** is Microsoft's case management and omnichannel platform on Dataverse: cases, queues, unified routing, SLAs, entitlements, knowledge, the agent workspace, channels through add-ins or the Contact Center SKU, and Copilot throughout. It shares Account and Contact rows with Sales, Field Service, and Customer Insights, integrates natively with Microsoft 365, and is extended through the Power Platform. See [what is Dynamics 365 Customer Service](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-customer-service). ## Head to head | Area | ServiceNow CSM | Dynamics 365 Customer Service | | --- | --- | --- | | Platform | Now Platform (shared with ITSM, HR, field service) | Dataverse (shared with Sales, Field Service, Customer Insights) | | Core strength | Orchestrating case resolution across enterprise teams and systems | Customer conversation on a shared CRM record; omnichannel | | Pricing | Per fulfiller user, quoted; enterprise-scale contracts | $50 Professional, $105 Enterprise, $195 Premium, $110 Contact Center per user per month (2026 list); channel add-ins | | Workflow | Flow Designer, ITSM-grade task, change, and problem workflows | Business process flows, Power Automate, unified routing, plug-ins | | Omnichannel | Messaging, chat, voice via partners and Now Platform integrations | Chat, SMS, social, WhatsApp, voice on Azure Communication Services; Contact Center | | Field service | ServiceNow Field Service Management on the same platform | Dynamics 365 Field Service on the same Dataverse | | Knowledge | Knowledge Management with AI search, shared with ITSM | Knowledge base with versions, translations, federated search | | AI | Now Assist: summarisation, resolution notes, generative search, virtual agent | Copilot: case summary, draft replies, knowledge search; Copilot Studio agents; supervisor intelligence | | Self-service | Service Portal, Employee/Customer Center, Virtual Agent | Power Pages portals, Copilot Studio agents | | CRM context | Account, contact, and asset model; not a sales CRM | Same record as Dynamics 365 Sales; full CRM context | | Reporting | Performance Analytics | Customer Service Analytics in Power BI, Dataverse for custom | | Governance | Platform ACLs, update sets, instance management | Dataverse security roles, solutions, Managed Environments | | Best fit | Enterprises already on ServiceNow whose customer cases require cross-enterprise orchestration | Microsoft shops; B2B and B2C support tied to sales, field service, and ERP | ## Where ServiceNow wins **Case-to-fulfilment orchestration.** When resolving a customer case means a network engineer makes a change, a product team fixes a defect, operations ships a replacement, and finance issues a credit, ServiceNow runs all of it as connected work on one platform with ITSM-grade discipline. Customer Service escalates to Field Service natively and to other systems through Power Automate, which is capable but is integration rather than platform. **One platform for internal and external service.** Organisations already running ServiceNow ITSM and HR get customer service on the same platform, same workflow engine, same knowledge base, same admins. That marginal-cost and marginal-skill argument is ServiceNow's strongest. **Asset and install-base centricity.** CSM's model of accounts, contacts, sold products, and install base suits complex B2B — telecoms, high-tech, manufacturers with serviced equipment — where the case is about a thing at a site. **Proactive service.** Tying cases to monitored services and assets, and opening cases before the customer calls, is native to a platform that also runs operations management. ## Where Dynamics 365 Customer Service wins **The customer record.** A case on the same Account and Contact row that Sales owns, Customer Insights markets to, and Field Service dispatches against. For organisations where support is part of the customer relationship rather than a fulfilment engine, this is decisive. **Omnichannel and the contact centre.** Native voice on Azure Communication Services, digital messaging, WhatsApp, unified routing with ML classification, and the standalone Contact Center SKU. ServiceNow's contact-centre story leans on partners. **Price and packaging.** A published list price per user with a clear tier structure against a quoted enterprise platform. For an organisation without ServiceNow already, CSM is rarely the cheaper answer. The [Customer Service pricing page](https://www.solvingdynamics365.com/pricing/customer-service) has current figures. **Microsoft 365 and Copilot.** Teams collaboration from the case, SharePoint knowledge, Outlook, and Copilot with context across Dynamics 365 apps. Copilot Studio agents that act — create cases, check orders in Business Central or Finance, book technicians — with hand-off. **Power Platform extensibility.** Model-driven apps, Power Automate, Power Apps, and Power Pages let a functional team extend Customer Service without the platform-developer skill set ServiceNow scripting usually needs. ## Where the differences do not matter Case creation from email and web, queues, SLAs with escalation, knowledge articles, agent dashboards, CSAT. Both do the fundamentals well; neither loses a support desk on the basics. ## How the decision usually gets made **What is already there.** ServiceNow for ITSM points at evaluating CSM seriously; Microsoft 365 plus Dynamics 365 Sales or an ERP points firmly at Customer Service. **What a case is.** A customer conversation that occasionally escalates: Customer Service. A unit of cross-enterprise work with multi-team fulfilment: ServiceNow. **Who the customers are.** B2B with complex install bases and enterprise fulfilment: ServiceNow has the edge. B2B with contracts, entitlements, and field visits on a CRM record, or B2C at contact-centre volume: Customer Service. **Cost.** Get both quotes over five years. ServiceNow's marginal cost for existing platform customers can be low; its list cost for new customers usually is not. ## Coexistence The most common enterprise outcome is both: ServiceNow for IT and internal service, Customer Service for customer support on the CRM. Copilot for Service reads ServiceNow, federated knowledge search spans both, and connectors on each side are mature. Decide which system masters the customer record and which masters the work, and integrate on that line — [integration patterns for Dynamics 365 CRM](https://www.solvingdynamics365.com/guides/integration-patterns-for-dynamics-365-crm) covers the mechanics. ## The short version ServiceNow CSM is the stronger choice for enterprises already on the Now Platform whose customer cases are really cross-enterprise work orders. Dynamics 365 Customer Service is the stronger choice for organisations whose support lives on a shared customer record with sales, marketing, field service, and the ERP, and for anyone building a contact centre in a Microsoft shop. For the help-desk end of the market, [Customer Service vs Zendesk](https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-vs-zendesk) is the comparison to read; for the field-service half of the ServiceNow conversation, [what is Dynamics 365 Field Service](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-field-service) covers Microsoft's answer to ServiceNow FSM. ### Frequently asked questions **What is the difference between ServiceNow CSM and Dynamics 365 Customer Service?** ServiceNow Customer Service Management is the customer-facing application on the Now Platform, whose strength is orchestrating work across the enterprise — case to engineering, operations, field, and finance — with ITSM-grade workflow. Dynamics 365 Customer Service is the case and omnichannel app on Dataverse, whose strength is the shared customer record with Sales, Field Service, and the Microsoft 365 stack. **Which is more expensive?** ServiceNow, at list. CSM is quoted per fulfiller user and enterprise deals routinely land well above Dynamics 365 Customer Service Enterprise's $105 per user per month (2026). ServiceNow customers usually already own the platform for IT, which changes the marginal cost; for a company without ServiceNow, CSM is rarely the cheaper option. **Which is better for B2B support with complex fulfilment?** ServiceNow, when the resolution of a customer case genuinely requires orchestrated work across many internal teams and systems — network changes, engineering fixes, multi-department approvals. Dynamics 365 Customer Service handles escalation to field service natively and to other Dynamics apps through Dataverse; for orchestration beyond that it leans on Power Automate. **Can the two coexist?** Commonly. Many organisations run ServiceNow for ITSM and internal service while running Dynamics 365 Customer Service for customer support on the CRM record. Copilot for Service and Microsoft's federated knowledge search can read ServiceNow, and both platforms have mature integration connectors. --- # Dynamics 365 Customer Service vs Zendesk Dynamics 365 Customer Service vs Zendesk — setup speed, pricing, channels, AI agents, CRM depth, and which one fits a support team of your size and shape. Source: https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-vs-zendesk Section: Customer Engagement / Comparisons Published: 2026-09-03 Zendesk is the help desk most support leaders have used somewhere in their careers, and Dynamics 365 Customer Service is the one they meet when their company already runs Microsoft. The comparison is about depth versus speed, packaging versus platform, and whether support is a standalone function or part of a customer record that sales, field service, and finance share. ## What each product is **Zendesk** is a cloud customer service platform built around the ticket. Zendesk Suite bundles email, web form, chat and messaging, social channels, voice (Zendesk Talk), a help centre, community, AI agents, and reporting, in tiers from Team through Growth and Professional to Enterprise, priced per agent per month. It is famous for fast setup, a clean agent interface, a large marketplace (1,500+ apps), and strong B2C and SMB adoption. Zendesk Sell is a light CRM alongside; most Zendesk customers run a separate CRM. **Dynamics 365 Customer Service** is Microsoft's case management and omnichannel platform on Dataverse. Its core is the case with queues, routing rules, unified routing, SLAs, entitlements, knowledge management, and the Customer Service workspace; channels — chat, SMS, social, WhatsApp, voice on Azure Communication Services — come as add-ins or through the standalone Contact Center SKU. It shares the Account and Contact rows with Sales, Field Service, and Customer Insights, integrates natively with Microsoft 365 and Teams, and carries Copilot throughout. See [what is Dynamics 365 Customer Service](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-customer-service). ## Head to head | Area | Zendesk | Dynamics 365 Customer Service | | --- | --- | --- | | Core object | Ticket | Case, on a shared Dataverse Account and Contact | | Pricing (2026 list) | Suite Team through Enterprise, roughly $55–$115+ per agent per month annual; AI add-ons | Professional $50, Enterprise $105, Premium $195, Contact Center $110 per user per month; channel add-ins ≈ $75–90 | | Setup | Days to weeks, self-serve | Weeks to months, usually partner-led | | Channels | Email, web, chat, messaging, social, voice bundled in Suite | Email and one channel on Professional; chat, SMS, social, WhatsApp, voice as add-ins on Enterprise; all bundled in Premium and Contact Center | | Routing | Skills-based routing, triggers, automations | Routing rules plus ML-based unified routing with skills and capacity | | SLAs and entitlements | SLA policies per ticket | Multiple KPI clocks per case, business calendars, entitlements with contract balances per customer and channel | | Knowledge | Help centre (Guide), AI-suggested articles | Knowledge base with versions, translations, internal/external visibility, federated search | | AI | AI agents, agent copilot, intelligent triage | Copilot case summary, draft replies, knowledge search, conversation summary; Copilot Studio agents; supervisor sentiment and intelligence | | Self-service | Help centre, community, messaging bots | Power Pages portal, Copilot Studio agents with hand-off | | CRM integration | Marketplace connectors to Salesforce, HubSpot, Dynamics | Native — same database as Sales and Field Service | | Reporting | Explore dashboards | Out-of-the-box dashboards, Customer Service Analytics in Power BI, Dataverse for custom | | Customisation | Apps framework, triggers, marketplace | Model-driven apps, Power Automate, plug-ins, Power Apps, AppSource | | Best fit | B2C, SMB, standalone support teams | B2B, Microsoft shops, support that connects to sales, field, and ERP | ## Where Zendesk wins **Time to value.** A support team of ten can be on Zendesk with email, chat, a help centre, and macros within a week, without a partner. Customer Service expects a project. **Agent experience out of the box.** The ticket view, macros, views, and triggers are refined over fifteen years and need little configuration. Customer Service's workspace is capable but is a model-driven app that is configured rather than adopted. **Packaging.** Suite includes the messaging channels. On Customer Service the channels are add-ins on Enterprise, and the bill for a full omnichannel deployment needs a spreadsheet — see [omnichannel licensing](https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-omnichannel-licensing). **B2C at volume.** High-volume consumer support with simple tickets, self-service deflection, and messaging channels is where Zendesk grew up and where its AI agents pay off fastest. **Marketplace.** 1,500+ apps that install in minutes cover a lot of integration ground that on Customer Service becomes a Power Automate flow or a connector configuration. ## Where Dynamics 365 Customer Service wins **The shared customer record.** A case sits on the same Account row the sales team owns and the field technician's work order references. Escalating a case to a site visit, seeing a customer's open opportunities, or applying an entitlement from a contract Business Central invoiced happens without integration. For B2B support this is the whole argument. **Entitlements and SLAs.** Contract balances per customer, product, and channel; multiple SLA clocks per case with business calendars, warning thresholds, and escalations. Zendesk's SLA policies are good; entitlements are not in its vocabulary. **Unified routing.** ML classification plus skills, capacity, and availability-based assignment on top of rule-based queue routing scales to large, specialised support estates. **Copilot with context.** Case summaries, draft replies, and knowledge search are table stakes on both; the difference is what the AI can see. Copilot in Customer Service reads the customer's history across Dynamics 365 apps, and Copilot Studio agents can act — create a case, check an order in the ERP, book a technician — with hand-off to a human carrying the transcript. **Microsoft 365 and Teams.** Agents collaborate in Teams from the case, supervisors coach in Teams, and knowledge lives in SharePoint. For Microsoft shops, Zendesk is another tab. **Enterprise governance.** Dataverse security roles, field-level security, audit, Purview, and solution-based ALM across dev, test, and production. ## Where the differences do not matter Email-to-case, web forms, a knowledge base, macros and templates, basic SLAs, dashboards, CSAT surveys. Both do the fundamentals well; no support team fails on ticket handling on either. ## How the decision usually gets made **Stack.** Microsoft 365 plus Dynamics 365 Sales or Business Central points firmly at Customer Service; no Microsoft commitment points at Zendesk. **B2B or B2C.** Contract-based B2B support with entitlements, escalations to field service, and account context: Customer Service. High-volume B2C with simple tickets and deflection: Zendesk. **Team size and urgency.** A small team that needs a help desk this month: Zendesk. A support organisation that is part of a wider customer platform rollout: Customer Service. **Cost.** Model the full channel mix at list: Zendesk Suite versus Customer Service Enterprise plus add-ins or Contact Center. The [Customer Service pricing page](https://www.solvingdynamics365.com/pricing/customer-service) has the current figures. Usage — voice minutes, messages, AI — comes on top of both. ## Migrating between them Zendesk to Customer Service is the more common direction and happens when a company consolidates on Microsoft or when support needs to join sales and field service on one record. Tickets, users, organisations, and help centre articles export through Zendesk's API and map to cases, contacts, accounts, and knowledge articles; macros and triggers are rebuilt as templates, business rules, and flows. Budget the routing and SLA design, not the data move. ## The short version Zendesk is the faster, simpler, better-packaged help desk for B2C and SMB support that stands on its own. Dynamics 365 Customer Service is the deeper platform for B2B support that lives on a shared customer record with sales, field service, and the ERP, especially in Microsoft shops. If the alternative on your shortlist is ServiceNow rather than Zendesk, [Customer Service vs ServiceNow](https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-vs-servicenow) draws that line, and [Customer Service vs Contact Center](https://www.solvingdynamics365.com/guides/dynamics-365-contact-center-explained) covers Microsoft's own packaging choice. ### Frequently asked questions **Is Zendesk cheaper than Dynamics 365 Customer Service?** At list, roughly comparable at the tiers most teams buy — Zendesk Suite Professional and Dynamics 365 Customer Service Enterprise both sit around $100–115 per agent per month as of 2026 — but the packaging differs. Zendesk Suite bundles messaging channels; Customer Service Enterprise needs channel add-ins for chat, SMS, social, and voice. Zendesk's entry tiers are cheaper than Customer Service Professional for a small team. **Which is faster to set up?** Zendesk, by weeks. A small support team can be live on Zendesk in days with email, a help centre, and chat. Customer Service is a Dataverse application that expects configuration of queues, routing, SLAs, entitlements, and security roles — a partner-led project of weeks to months, with much more depth at the end of it. **Which has better AI?** Both have serious AI. Zendesk's AI agents and agent copilot are mature and simple to switch on. Microsoft's Copilot in Customer Service — case summaries, draft replies, knowledge search, conversation summaries — plus Copilot Studio agents win when the AI needs CRM, ERP, and Microsoft 365 context behind it, which is where most B2B service value is. **Who should choose Zendesk?** B2C and SMB support teams, companies without a Microsoft footprint, teams that want a help desk running this month, and organisations whose support is separate from sales and operations. Microsoft shops, B2B support with entitlements and SLAs per contract, and anyone whose cases turn into field work or orders should look at Customer Service. --- # Dynamics 365 edition comparison How to compare Dynamics 365 editions across products — Essential / Premium tiers, Business Central tiers, F&O tiers, and the decision frameworks per scenario. Source: https://www.solvingdynamics365.com/guides/dynamics-365-edition-comparison Section: Foundations / Platform overview Published: 2026-05-01 Dynamics 365 isn't one product; it's a portfolio with multiple editions per app. **Edition comparison** matters because the right edition fits the use case at the right cost; the wrong edition either over-pays or under-delivers. Buyers should understand the tiers before committing. **Business Central editions.** - **Essentials** — core finance, sales, purchasing, inventory. - **Premium** — Essentials + manufacturing + service management. - **Team Member** — light-use; read mostly, limited create / update. - **Device** — for shared shop floor. Most BC customers run Essentials; Premium for manufacturers and service organisations. **Sales editions.** - **Sales Professional** — basic CRM. - **Sales Enterprise** — full sales features, including business process flows, sales acceleration. - **Sales Premium** — Enterprise + Conversation Intelligence, predictive features. - **Relationship Sales** — Enterprise + LinkedIn Sales Navigator. Most Sales customers run Enterprise; Premium for AI-rich operations. **Customer Service editions.** - **Customer Service Professional** — basic case management. - **Customer Service Enterprise** — full features. - **Contact Center** — voice + digital + AI. - **Premium** add-ons — additional AI. Enterprise for most; Contact Center for call-centre focused. **Field Service editions.** - **Field Service** — single edition currently. - **Optional add-ons** for IoT, Mixed Reality, etc. Less tier complexity than other modules. **Finance and Operations.** - **Finance** — financial management. - **Supply Chain Management** — operations. - **Commerce** — retail. - **Project Operations** — services. - **Human Resources** — HR. Each licensed separately; combinations common. **Customer Insights.** - **Customer Insights — Data** — CDP. - **Customer Insights — Journeys** — marketing automation. Separate but related; often bought together. ## Project Operations editions As covered in [[project-operations-deployment-types]]: - **Lite** — Dataverse only. - **Resource / Non-Stocked** — hybrid. - **F&O Integrated** — full ERP-grade. Three deployment shapes with different capabilities. **Comparing within products.** - **Sales Professional vs Enterprise** — Professional has limited customisation, no business process flows beyond standard. - **Customer Service Professional vs Enterprise** — Professional misses many enterprise features. For most production deployments, Enterprise tier is the right starting point. **Edition limitations.** - **Professional editions** — capped on customisation, integration depth. - **Team Member** — restricted to specific operations. - **Device** — shared, limited user-specific features. Read the "what's included" matrix carefully. ## Add-ons Beyond editions: - **AI Builder credits.** - **Power Pages capacity.** - **Storage capacity.** - **Additional environments.** - **Premium connectors.** - **Specific feature add-ons.** Add-ons compound cost; budget carefully. **Microsoft 365 prerequisites.** - Most Dynamics 365 requires M365 base licence. - Specific products require specific M365 features. - Bundling sometimes simpler. **Edition selection per role.** - **Sales executive** — Sales Enterprise probably. - **Service agent** — Customer Service Enterprise. - **Sales operations** — Sales Enterprise + Team Member analytics. - **Finance team** — Finance + appropriate add-ons. - **Casual contributor** — Team Member. Right-size per role; don't over-license. **Comparison considerations.** - **Feature completeness** — what's included. - **Customisation depth** — what can be modified. - **Integration capability** — what can connect. - **AI features** — Premium tier benefits. - **Compliance features** — some advanced in higher tiers. **Lifecycle considerations.** - Editions evolve over time. - New features added (sometimes to base, sometimes to higher tier). - Microsoft may rebrand tiers. Plan with awareness that tiers move. **Cost differentials.** - Professional → Enterprise — typically 1.5-2x. - Enterprise → Premium — typically 1.3-1.5x. For large user counts, tier choice has material impact. **Volume discounts.** - **Enterprise Agreement** — volume discounts. - **CSP** — partner-supplied. - **Direct online** — list price. For 100+ users, EA negotiation beneficial. ## Industry cloud bundling As covered for various industries: - Microsoft Cloud for Financial Services, Healthcare, Retail, Manufacturing, Nonprofit, Sustainability. - Specific bundles for industry. - Sometimes commercial advantage. Evaluate industry cloud bundling for fit. **Common pitfalls.** - **Over-purchasing Premium.** AI features not used. - **Under-purchasing.** Professional too limited; Enterprise needed. - **Wrong edition for role.** Team Member can't do what role needs. - **No usage review.** Licences stay over-tier for years. - **Bundling overlooked.** Industry cloud could save cost. **Right-sizing strategy.** - **Initial estimate** at procurement. - **Annual review** of usage. - **Adjust** based on patterns. Licences are flexible; review and adjust. **Approach for new deployments.** 1. **Map roles** to required features. 2. **Identify edition** per role. 3. **Estimate user counts** per edition. 4. **Compare bundles** vs piecemeal. 5. **Engage partner / Microsoft** for proposal. 6. **Negotiate.** **Comparison documents.** - Microsoft publishes detailed feature matrices per product. - Partners maintain comparison guides. - Self-service in admin portals. The information exists; using it requires effort. **Common decision frameworks.** - **Use what's already licensed** — if M365 includes some Dynamics features, leverage. - **Right-tier per role** — not one-size-fits-all. - **Plan for growth** — initial tier may need bump in 12-24 months. ## Strategic positioning Edition selection is one of the recurring decisions in Dynamics 365 ownership. Each tier has its place; matching tier to use case requires understanding both. For decision-makers: - Engage partner / Microsoft for guidance. - Right-size per role. - Annual review. - Adjust based on usage. The investment in thoughtful edition selection — and ongoing rightsizing — saves material cost over years. Default to over-purchasing wastes money; default to under-purchasing causes user friction. Aim for the right fit, with periodic adjustment. ## Where to go next For the licence mechanics behind the tiers, read [Dynamics 365 licensing explained](https://www.solvingdynamics365.com/guides/dynamics-365-licensing-explained) and the dated list prices on the [pricing pages](https://www.solvingdynamics365.com/pricing). Business Central's tier rules are in [Business Central pricing tiers explained](https://www.solvingdynamics365.com/guides/business-central-pricing-tiers-explained), the Sales Premium question in [Sales Premium features](https://www.solvingdynamics365.com/guides/dynamics-365-sales-premium-features), and keeping tiers honest over time in [licence optimisation](https://www.solvingdynamics365.com/guides/license-optimisation-for-dynamics-365). If the tier question is really a product question, start with [how to choose the right Dynamics 365 product](https://www.solvingdynamics365.com/guides/how-to-choose-the-right-dynamics-365-product). ### Frequently asked questions **Which edition do most organisations end up on?** Enterprise. Sales Enterprise and Customer Service Enterprise are the working baseline for production deployments; Professional editions cap customisation and integration depth, and Premium tiers add AI features many teams never use. **What is the difference between Business Central Essentials and Premium?** Essentials covers finance, sales, purchasing, and inventory; Premium adds manufacturing and service management. Most customers run Essentials; manufacturers and service organisations take Premium — for every full user in the tenant, since the two cannot be mixed. **How much more do higher tiers cost?** Roughly 1.5–2x from Professional to Enterprise and 1.3–1.5x from Enterprise to Premium on list price. At large user counts the tier choice is a material line, and Enterprise Agreements or CSP partners discount from list for 100+ users. **How often should licence tiers be reviewed?** Annually at minimum. Licences are flexible, editions evolve, and features move between tiers; organisations that never review stay over-tiered for years. --- # Dynamics 365 Finance environments and Lifecycle Services How environments work in Dynamics 365 Finance and Supply Chain — Tier 1 through Tier 5, the role of Lifecycle Services, and the move to managed environments. Source: https://www.solvingdynamics365.com/guides/dynamics-365-finance-environments-and-lcs Section: Finance & SCM / Finance Published: 2026-05-01 Updated: 2026-08-31 Environments in Dynamics 365 Finance and Supply Chain Management (collectively, the *Finance and Operations* apps) are more involved than in Business Central. They're sized as named **tiers**, provisioned through **Lifecycle Services (LCS)**, and operated under a mixed responsibility model that customers and partners both need to understand. ## Environment tiers Sandboxes are sized by tier, where the tier indicates infrastructure scale rather than just function: - **Tier 1** — a single-box development environment running on one Azure VM. Suitable for code work, not for realistic data volumes or concurrent users. - **Tier 2** — a multi-box, high-availability sandbox close to production scale, used for UAT, load testing, and golden-config builds. Every Finance/SCM project gets at least one Tier 2. - **Tier 3, 4, 5** — progressively larger sandboxes for very large customers. - **Production** — Microsoft-managed, high-availability, with a defined SLA. A typical mid-size project runs one production, two Tier 2 sandboxes (UAT plus a golden-configuration build), and a handful of Tier 1 dev boxes — one per developer, since Tier 1 machines don't share well. Large programmes add a dedicated Tier 2+ for performance testing with production-scale data. The tier decision is hard to reverse cheaply, so size the topology during contracting, not after: it appears on the licence bill. ## Provisioning Tier 1 sandboxes can be self-deployed from LCS in hours. Tier 2+ sandboxes and production are provisioned by Microsoft as part of FastTrack onboarding, with paperwork and lead times. ## Lifecycle Services (LCS) LCS is the cloud portal where customers and partners manage F&O implementations — project workspaces, environment requests, deployment of code packages, application of platform updates, support ticket management, the Business Process Modeller, the BPM-Task Recorder integration, and asset libraries. Every Finance/SCM environment is registered to an LCS project. ## Deployable packages Custom code, configuration, and reports flow through LCS as **deployable packages** built from Visual Studio. A package is uploaded to LCS, then applied to an environment by an authorised user. There is no direct dev → prod publish; everything goes through the staged process. ## Database refresh LCS handles **point-in-time copy** of production to sandbox for testing with real data, with golden-record masking for sensitive fields. The reverse path (sandbox → prod) is limited and tightly controlled. ## Database refresh discipline Two practices separate calm projects from chaotic ones. First, schedule refreshes on a cadence (monthly UAT refresh is common) rather than on demand — every refresh wipes sandbox-only data, users' saved views, and any test setup, so surprise refreshes burn tester goodwill fast. Second, script the post-refresh steps: re-pointing integration endpoints away from production URLs, disabling outbound email and batch jobs that would fire against real customers, and re-applying test accounts. A production-copy sandbox that still holds live payment-file configurations is an incident waiting to happen. This is a core part of [test data management](https://www.solvingdynamics365.com/guides/test-data-management-for-dynamics-365). ## The move away from LCS The direction of travel is unambiguous: F&O environments are becoming ordinary Power Platform environments. New deployments increasingly land in the **unified admin experience**, where environments are created and managed from the Power Platform admin centre, run on Dataverse-linked infrastructure, and pick up capabilities the classic model lacked — self-service copy and restore, Power Platform-style backup, and one security and ALM story across F&O and Dataverse. LCS remains real for the large installed base — deployable packages, existing project workspaces, and Tier 2+ operations still live there — but treat any new capability investment in LCS-specific tooling with suspicion. For a new implementation, ask the partner explicitly which model the project will deploy on; the answer changes the run-book you'll operate for years. See [run-book operations after go-live](https://www.solvingdynamics365.com/guides/run-book-operations-after-dynamics-365-go-live) for what that operating rhythm includes. ## Environments and One Version Every environment rides the same continuously-updated application under the [One Version](https://www.solvingdynamics365.com/guides/dynamics-365-one-version-and-updates) policy. Practical consequence: updates are applied sandbox-first, and the update calendar becomes part of environment planning — a UAT cycle that straddles a platform update tests two different versions unless you pin the schedule deliberately. Keep at least one sandbox a version ahead of production during update windows, and fold the update rhythm into [release management](https://www.solvingdynamics365.com/guides/release-management-for-dynamics-365). ## Cost Sandboxes beyond a minimum included set are paid add-ons — a Tier 2 is a material line item, which is why topology belongs in the commercial negotiation. Resist the temptation to save money by sharing one Tier 2 between UAT and golden configuration on an active project; the scheduling collisions cost more than the environment. Plan environment topology and SKUs early, alongside the wider [environment strategy](https://www.solvingdynamics365.com/guides/environment-strategy-for-dynamics-365-projects). --- # Dynamics 365 for 3PL and logistics How Dynamics 365 fits third-party logistics, warehousing, and freight forwarding — operational visibility, customer engagement, billing complexity. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-3pl-and-logistics Section: Industries Published: 2026-08-19 Third-party logistics (3PL) — companies that warehouse, fulfil, and ship goods on behalf of clients — combines complex operational coordination, multi-client billing, asset-heavy facilities, and a constant tension between operational margin and service-level commitments. Dynamics 365 plays specific roles alongside the specialist platforms that dominate logistics operations. **Where Dynamics 365 fits in 3PL.** - **Sales and customer engagement** — Dynamics 365 Sales for the relationship with shipper clients and prospect pursuit. - **Customer service** — Customer Service for shipper support, exception handling, claims management. - **Customer Insights** — unified view of shipper performance, profitability, behaviour across services. - **Finance and operations** — Finance / Business Central for corporate accounting, billing, AP. - **Field service** — for facility-side maintenance, last-mile delivery dispatching (where 3PL handles their own fleet). - **Marketing** — Customer Insights – Journeys for shipper retention and upsell campaigns. ## Where Dynamics 365 doesn't fit (without ISVs) Logistics-specific operational systems dominate: - **Warehouse Management System (WMS)** — Manhattan, Blue Yonder, Korber, Infor, Oracle. Handles slotting, picking, packing, shipping, returns. Dynamics 365 SCM has an enterprise WMS module that competes here for some 3PLs, but specialists often have edge. - **Transportation Management System (TMS)** — Mercurygate, MercuryGate / Mercury Returns, Manhattan Active, Oracle TMS. Carrier rating, routing, load planning, freight settlement. - **Order Management System (OMS)** — for handling client orders across channels and warehouses. - **Yard management, dock scheduling, labour management** — specialist platforms within larger facilities. - **Customer-facing tracking portals** — typically purpose-built mobile and web apps; Dynamics 365 may surface data into them. Dynamics 365 integrates with these; doesn't replace them. **Common patterns.** ## Client onboarding New 3PL clients trigger a multi-step onboarding workflow: - Sales closes the deal (Dynamics 365 Sales). - Finance sets up the billing (Finance / Business Central). - Operations team configures the WMS for the new client's items / locations / SLAs. - Customer-facing tracking access provisioned (typically external identity through Entra External ID). - Integration endpoints established (EDI, API, customer-facing portals). Dynamics 365 orchestrates the onboarding workflow; the operational systems get their data. ## Client billing 3PL billing is famously complex: - **Per-pallet storage** — daily / weekly / monthly storage charges. - **Per-pick fees** — per pick / per order / per line. - **Receiving fees** — per inbound shipment / pallet / line. - **Value-added services** — labelling, kitting, returns processing, refurbishment. - **Special handling** — high-value, hazmat, refrigerated. - **Pass-through carrier costs** — outbound shipping at carrier rate plus markup. - **Storage tiers** — different rates for different storage types (ambient, chilled, frozen, secure). Dynamics 365 Finance handles the billing aggregation, but specialist 3PL billing platforms exist for the operational depth. Many 3PLs run a specialist billing system feeding Finance / Business Central for AR and GL. ## Customer-facing portals 3PL clients want visibility: - Real-time inventory by SKU. - Order status and tracking. - Receipt visibility (when do my goods arrive?). - Performance reports (on-time, accuracy, claims). - Self-service order placement. - Document repository (proof of delivery, customs). Built on Power Pages with Dataverse integration to the WMS / TMS / OMS for live operational data. ## Performance and SLA management 3PL contracts include service-level agreements: - Order accuracy ≥ 99.5%. - On-time shipment ≥ 98%. - Inventory accuracy ≥ 99.9%. Performance against SLAs drives client satisfaction, contract renewal, and (sometimes) penalty / bonus payments. Dynamics 365 Customer Service tracks SLA-related cases; Power BI / Fabric dashboards aggregate operational data. ## Returns processing Returns are operationally complex — receive, inspect, classify (return to stock, return to vendor, dispose), restock, process credit. Specialist returns platforms exist; Dynamics 365 supports the customer-facing case management and credit memo generation. ## E-commerce fulfilment specifically 3PLs fulfilling for e-commerce brands face: - High order volume (potentially millions of orders annually). - Mixed channel inbound (shipper's webshop, marketplaces, retail returns). - Tight delivery SLAs (next-day, same-day). - Brand-specific packaging. - Returns rates of 20-30%. Dynamics 365 + specialist e-commerce-fulfilment WMS is the typical pattern. **Architecture.** - **WMS** — operational system of record for inventory and warehouse operations. - **TMS** — operational system of record for transport. - **Dynamics 365 Sales** — client relationships and pipeline. - **Dynamics 365 Customer Service** — client support, SLA management, claims. - **Dynamics 365 Finance / BC** — corporate accounting, AR, AP. - **Power Pages portal** — client-facing visibility. - **Microsoft Fabric** — analytics combining operational and financial data. - **Customer Insights** — unified client view; profitability per client; behaviour patterns. **Common challenges.** - **Multi-client data isolation** — each shipper's data must be isolated from others; security model design is critical. - **High-volume integrations** — operational systems generate millions of events; integration architecture must scale. - **Customer expectation management** — shippers want real-time visibility; underlying systems may not provide it cleanly. - **Margin compression** — 3PL margins are tight; technology investment must drive operational efficiency or pricing competitiveness. ## Operational reality 3PL Dynamics 365 implementations are integration-intensive and customer-engagement-focused. The value sits in the relationship and visibility layers above the technical operational systems. --- # Dynamics 365 for aerospace How Dynamics 365 serves aerospace — manufacturing, MRO, supply chain compliance, traceability, and the integration with industry-specific systems. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-aerospace Section: Industries Published: 2026-05-01 The aerospace industry — commercial aircraft, defence, space — operates with intense regulatory scrutiny, deep supply chains, long product lifecycles, and traceability demands far exceeding most industries. Dynamics 365 plays meaningful roles in aerospace operations, primarily in the commercial and supporting layers, alongside specialised industry systems. **Aerospace sub-sectors.** - **Commercial aircraft manufacturing** — Boeing, Airbus, regional jet builders. - **Defence aviation** — military aircraft, drones. - **Space** — satellites, launch vehicles. - **MRO (maintenance, repair, overhaul)** — service. - **Aerospace suppliers** — components, materials. Each has distinct requirements; Dynamics fits different scenarios in each. **Where Dynamics fits.** - **Manufacturing operations** — F&O for production, especially component manufacture. - **Supply chain** — multi-tier supplier management. - **MRO operations** — Field Service for aircraft maintenance. - **Sales and CRM** — relationship management with airlines / governments. - **HR** — workforce management. - **Finance** — financial reporting. **Where industry-specific dominates.** - **PLM (Product Lifecycle Management)** — Siemens Teamcenter, PTC Windchill, Dassault Enovia. - **MES (Manufacturing Execution)** — shop floor systems. - **Quality systems** — eQMS for AS9100 compliance. - **CAD/CAM** — engineering tools. Dynamics integrates with these for commercial and financial data. ## AS9100 / AS9120 compliance Aerospace quality standards: - Beyond ISO 9001 — additional aerospace-specific requirements. - Documented processes. - Traceability of every part. - Configuration management. - Risk management. - Counterfeit parts prevention. D365 supports the data capture and reporting; auditors look at process and evidence. ## Traceability Every part must be traceable: - Lot / serial of raw material. - Through manufacturing operations. - To assembled aircraft. - For decades — aircraft live 30+ years. F&O's item tracking + careful operational discipline. For deep traceability beyond F&O, PLM and MES carry the load. ## Configuration management Aircraft configuration is complex: - "Build state" of each aircraft. - Variants per customer. - Changes over service life. - Documentation tied to specific configurations. Dynamics handles operational records; PLM owns the configuration master. **Long-cycle production.** - Aircraft build time — months to years. - Construction in progress (CIP) accounting. - Progress billing. - Cost accumulation per tail number. F&O's project module handles this; cost categories tied to aircraft. **Defence specifics.** - **ITAR (International Traffic in Arms Regulations)** — US export control. - **EAR (Export Administration Regulations)** — broader controls. - **CMMC** — cybersecurity maturity. - **Security clearances** — for personnel. - **Government cost accounting** — DCAA / FAR compliance for contract pricing. Specialised extensions and processes layered on Dynamics for these. ## MRO operations Aircraft maintenance: - Scheduled (per flight hours, per cycles). - Unscheduled (defects). - Heavy checks (multi-week deep maintenance). - Field Service handles work order workflow. Each aircraft is a complex asset hierarchy; sub-systems independently maintained. ## Supply chain Aerospace supply chains are deep: - Multi-tier (OEM → tier-1 → tier-2 → ...). - Long lead times. - Strict supplier qualification. - Counterfeit prevention. F&O's supplier management handles operational; aerospace-specific qualification often in separate systems. **Industrial IoT.** - **Sensor-equipped aircraft** generate massive telemetry. - **Predictive maintenance** from telemetry. - **Condition-based maintenance** triggered by sensors. Integration with IoT platforms (Azure IoT, specialised aerospace platforms); Field Service consumes alerts. ## ERP scope What F&O typically handles in aerospace: - Procurement. - Inventory (operational). - Order management. - Production execution (with MES integration). - Financial accounting. - HR. Engineering, deep design, deep configuration — typically external systems. **Common partner solutions.** - **AppSource aerospace extensions.** - **Boundary partners specialising in aerospace.** - **PLM integration partners** — bridge F&O ↔ Teamcenter / Windchill. Aerospace deployments require specialised partner skills. **Common pitfalls.** - **Trying to do PLM in F&O.** Wrong tool; specialised PLM essential. - **Underestimating compliance.** AS9100 audit failures are expensive. - **Configuration management gaps.** Aircraft built but config undocumented; service impossible. - **Long-term data retention.** Aircraft data needed for decades; ensure archival. - **ITAR violations.** Wrong people accessing controlled data. **Operational rhythm.** - **Production execution daily.** - **MRO continuous.** - **Compliance audits annual or per cycle.** - **Contract reviews per program lifecycle.** ## Strategic positioning Dynamics 365 is viable for aerospace's commercial and supporting operations. The deep industry-specific work (engineering, configuration, MES, eQMS) sits in specialised tools. The architecture is integration-heavy; Dynamics is one component among many. For organisations entering aerospace or extending in scope: - Pair Dynamics with specialised aerospace partners. - Design integration architecture early. - Invest in compliance discipline. - Plan for decades-long product lifecycles. The investment is meaningful; the regulated nature of aerospace doesn't allow shortcuts. Done well, Dynamics + specialised systems produces a robust enterprise platform that meets the demanding standards of the industry. --- # Dynamics 365 for agriculture How Dynamics 365 fits agriculture and agribusiness — crop and livestock tracking, traceability, seasonal accounting, commodity pricing. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-agriculture Section: Industries Published: 2026-05-01 Agriculture is one of the older industries Microsoft Dynamics 365 serves, but it remains one of the more niche. The core ERP foundations are there — finance, inventory, sales, procurement — but agriculture's specific needs (crop cycles, livestock tracking, weather-driven planning, commodity pricing, traceability for food safety) live primarily in partner ISVs layered on top. **Why agriculture is non-standard.** - **Inventory units shift constantly** — by weight, volume, count, head; catch-weight common. - **Seasonal cycles** — planting, harvest, storage, sale; revenue patterns concentrated. - **Long lead times** — capital-intensive equipment, multi-year crop rotations. - **Commodity pricing** — prices fluctuate daily, hedging common. - **Traceability mandates** — track from farm to fork; FSMA, EU regulations. - **Subsidies and grants** — government programmes complicate financial reporting. - **Weather and biology** — outside operational control; planning must accommodate. Standard ERP doesn't model these natively; agriculture-specific configuration or extensions fill the gaps. **Core Dynamics 365 fits.** - **Business Central** — for smaller agriculture operations. - **Finance and Supply Chain Management** — for larger agribusiness. - **Customer Insights / Customer Engagement** — for cooperatives and grower relationships. - **Field Service** — for equipment service operations. ## Crop tracking Modelling crops as items: - **Crop variety** as item; field locations as warehouses. - **Planting** as production order with inputs (seed, fertiliser, labour) and expected output. - **Growing periods** with weather and treatment logs. - **Harvest** as production output. - **Quality grading** at harvest. Partner extensions add field-level mapping, GIS integration, satellite imagery, prescription maps for variable-rate application. ## Livestock tracking Animals as inventory: - **Animal records** as serialised items. - **Birth, weight gain, breeding** as transactions. - **Veterinary treatments** tracked. - **Sale or slaughter** as outbound. Compliance requires individual identification (ear tags, RFID) and full lifecycle history; specialty livestock systems integrate with Dynamics for accounting. **Commodity pricing and contracts.** - **Spot pricing** — current market. - **Forward contracts** — locked-in price for future delivery. - **Hedging** — financial instruments to manage price risk. - **Storage agreements** — keep grain in elevator, deliver later. Dynamics 365 supports the financial side; commodity-specific risk management often layered via specialty tools. ## Traceability From input source to consumer: - **Seed lot** → planting → harvest lot → processing → sale. - **Animal birth** → treatments → slaughter → product → distribution. - **Recall workflow** — given an issue, identify affected products and customers. The traceability chain depends on lot/serial tracking throughout — Business Central and F&O both support this; the operational discipline determines actual usefulness. ## Field operations Modern agriculture is data-rich: - **GPS-guided equipment** — tractors, harvesters logging position and activity. - **Yield monitors** — measure output per acre during harvest. - **Soil sampling** — fertility maps. - **Satellite / drone imagery** — crop health. Integration with farm management systems (Trimble, John Deere Operations Center, Climate FieldView) brings field data into Dynamics for analysis and decision-making. **Equipment and fleet.** - **Tractors, combines, planters** — capital equipment. - **Trucks, trailers** — transport. - **Irrigation systems** — infrastructure. - **Maintenance schedules** — preventive maintenance. - **Field hours tracking** — for cost allocation. Field Service module fits well; the equipment is the customer asset; preventive maintenance is calendar-driven. **Seasonal accounting considerations.** - **WIP for growing crops** — cost accumulates through the season; revenue at sale. - **Inventory valuation** — by lot, by location, by quality grade. - **Subsidies and government payments** — booked separately for transparency. - **Crop insurance** — premium, claim, settlement; project accounting fits. **Compliance.** - **FSMA (US food safety)** — preventive controls, traceability. - **EU food law** — Reg 178/2002 traceability. - **GAP (Good Agricultural Practices)** — voluntary but increasingly required. - **Organic certification** — chain of custody. - **Animal welfare standards.** Dynamics 365 supports the data capture and reporting; auditor walkthroughs require operational discipline beyond the system. ## Cooperatives Agricultural cooperatives — farmers pool resources: - Members deliver crops; cooperative markets jointly. - Patronage refunds returned based on member volume. - Member equity tracked separately from working capital. F&O and Business Central support, but coop-specific accounting often requires partner extensions. **Partner ecosystem.** - **NextEDI** — agriculture-specific Business Central extension. - **Edisys** — crop and livestock additions. - **Custom partner solutions** — many regional specialists. For agriculture deployments, partner selection matters more than for generic deployments — the depth of agriculture-specific capability comes from partners. **Common pitfalls.** - **Generic ERP forced to fit.** Crop cycles, livestock tracking, commodity contracts don't map naturally; customisation cost. - **Partner extension too narrow.** Solves crops but not livestock, or vice versa. - **Integration with farm management ignored.** Field data lives in another system; Dynamics has no visibility. - **Seasonal cash flow not planned.** Working capital projections miss the seasonality. - **Compliance reporting ad-hoc.** FSMA requires structure; ad-hoc tracking fails the next audit. ## Strategic positioning Dynamics 365 is viable for agriculture but requires: - Realistic scope — what does Dynamics handle, what does partner ISV or specialty system handle. - Partner selection — agriculture-specific expertise matters. - Integration architecture — farm management, GIS, weather, equipment data flowing. - Operational discipline — traceability and compliance need ongoing attention. For mid-market and larger agribusiness, Dynamics 365 + agriculture partner extensions + field integrations is a workable architecture. For specialised needs (commodity trading, large-scale precision agriculture, specific livestock production), dedicated industry platforms may exceed Dynamics's depth. Choose based on whether Dynamics's ERP foundation, combined with partner uplift, meets the requirements better than alternatives. --- # Dynamics 365 for airlines How Dynamics 365 serves airlines — passenger CRM, loyalty, ground operations, MRO, and integration with airline industry systems such as PSS and MRO platforms. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-airlines Section: Industries Published: 2026-05-01 Airlines run on a stack of highly specialised industry systems — Passenger Service Systems (PSS), revenue management, crew planning, MRO. Dynamics 365 plays specific supporting roles, particularly in customer relationship management, loyalty engagement, ground operations, and back-office finance. **Airline operational systems.** - **PSS (Passenger Service System)** — reservations, ticketing, departure control. Amadeus, Sabre, NIIT. - **Revenue Management** — pricing and yield. PROS, Sabre Yield Management. - **Crew Planning** — pairings, rosters. Specialised systems. - **MRO** — aircraft maintenance. AMOS, Trax, AeroBase. - **Flight Operations** — dispatching, weather. - **Ground handling** — turnaround coordination. Dynamics 365 is not a PSS replacement; it complements. **Where Dynamics fits.** - **Passenger CRM** — frequent flyer relationship beyond loyalty program. - **Customer Service** — contact centre operations. - **Customer Insights** — passenger 360. - **Marketing** — personalised offers, journey orchestration. - **Ground operations** — staff scheduling, equipment management. - **MRO field service** — for line maintenance work orders. - **Procurement** — non-aircraft procurement. - **Finance** — back-office financial reporting. ## Passenger CRM Beyond loyalty points: - Complete passenger profile across bookings. - Service interactions across channels. - Complaint and compliment history. - Preferences (seat, meal, language). - Lifetime value. Customer Insights — Data unifies; Dataverse profiles consumed. ## Loyalty program integration Airlines have sophisticated loyalty: - Tier qualification (annual miles / segments). - Status benefits. - Earning and redemption. - Partner integrations (other airlines, credit cards, hotels). Specialised loyalty systems often handle; Dynamics surfaces the data. ## Contact centre Airlines run large contact centres: - Booking changes. - Disruption handling. - Complaints. - Special service requests. Customer Service Workspace + Contact Center fits well; integration with PSS for real-time booking data. ## Disruption management When flights cancelled / delayed: - Affected passenger identification. - Communication. - Rebooking. - Compensation processing. Dynamics handles communication and case management; PSS handles rebooking. **Marketing personalisation.** - **Triggered journeys** — booking confirmed → pre-flight series. - **Lifecycle** — first-time flyer onboarding. - **Win-back** — lapsed customers. - **Cross-sell** — destinations, partner products. Customer Insights — Journeys orchestrates; data from PSS, loyalty, behavioural. ## Service recovery When something goes wrong: - Customer complaint received. - Investigation. - Compensation decision. - Service recovery offer. Customer Service tracks; integration with PSS for booking context. ## Ancillary revenue Bag fees, seat selection, meals: - Cross-channel offer integration. - Per-passenger pricing. - Marketing journeys to suggest. Specialised ancillary systems handle pricing; Dynamics for customer-facing marketing. ## Ground operations Airport staff: - Equipment tracking (tugs, baggage equipment). - Maintenance work orders. - Staff scheduling. Field Service handles equipment; HR handles staffing. **MRO line maintenance.** - Routine checks between flights. - Quick fixes. - Work orders for issues. Field Service captures; deep MRO in specialised systems for heavy maintenance. ## Crew issues Crew management generally specialised: - Federal Aviation Regulations (FAR) compliance. - Union contracts. - Complex pairing rules. Dynamics not a replacement; HR module for crew records. **Compliance considerations.** - **GDPR** — passenger personal data. - **PCI-DSS** — payment data. - **TSA / aviation security** — regulated information. - **Country-specific aviation rules.** Standard Dynamics security with airline-specific overlays. ## Real-time integration with PSS Critical: - Booking status real-time. - Flight operational status. - Passenger journey progress. Integration architecture is key; latency unacceptable. **Common partner solutions.** - **Boundary partners specialising in aviation.** - **Some PSS vendors offer Dynamics integration accelerators.** For airline deployments, aviation experience essential. **Common pitfalls.** - **Trying to do PSS in Dynamics.** Impossible; specialised systems are integral. - **No unified passenger view.** Each system has its own customer record. - **Disruption communication manual.** Mass cancellation events overwhelm. - **Loyalty disconnected from CRM.** Loyalty members not visible to service agents. - **Cost of integration underestimated.** Airline system integrations are complex. **Operational rhythm.** - **24/7 ops.** - **Per-flight cycles.** - **Daily customer service queue.** - **Continuous marketing journeys.** ## Strategic positioning Dynamics 365 fits the customer-experience and back-office layers of airline operations. Core flight, crew, and revenue management remain in specialised industry systems. The architecture is integration-dense. For airline decision-makers: - Define which functions Dynamics handles, which stay in PSS / specialty. - Plan integration architecture deliberately. - Choose partners with aviation experience. - Invest in passenger 360 — the customer-experience competitive advantage. The investment varies by ambition; the airline's brand experience is increasingly digital, and Dynamics is a strong platform for the customer-facing side of that experience. --- # Dynamics 365 for automotive How Dynamics 365 fits the automotive industry — OEM, dealer, supplier scenarios — connected vehicle, dealer management. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-automotive Section: Industries Published: 2026-08-21 Automotive — vehicle manufacturers (OEMs), tier-1 / tier-2 suppliers, automotive dealers, fleet operators — is one of the most software-intensive industries with strict supply-chain discipline, deep regulatory requirements, and increasingly connected-vehicle data. Dynamics 365 plays specific roles across this complex landscape. **Where Dynamics 365 fits in automotive.** **OEMs (vehicle manufacturers).** - **Customer engagement** — Dynamics 365 Sales and Customer Insights for end-customer relationships beyond the dealer; direct-to-consumer brands, fleet sales, large-corporate sales. - **Service relationship** — Customer Service for owner support, recall coordination, owner-facing communications. - **Connected vehicle data** — vehicles emit telemetry through Azure IoT; Connected Field Service and Customer Insights aggregate the data. - **Dealer relationship management** — Sales / Customer Service for managing the dealer network; performance tracking, training programmes. - **Marketing** — Customer Insights – Journeys for owner engagement, loyalty, model launches. **Suppliers (tier-1 / tier-2).** - **OEM customer management** — Sales managing relationships with OEM purchasing teams. - **Manufacturing** — Dynamics 365 Supply Chain for production, especially configure-to-order discrete manufacturing. - **Quality management** — APQP, PPAP, FMEA processes; supply-chain quality systems (often partner ISVs on F&O). - **EDI** — heavy EDI volume with OEM customers; specialist EDI partners typical. - **Finance** — F&O for corporate finance. **Dealers.** - **Dealer Management Systems (DMS)** — CDK Global, Reynolds & Reynolds, Cox Automotive (DealerSocket), specialist platforms. The system of record for dealer operations. - **Dynamics 365 Sales** — sometimes used as CRM layer alongside DMS for sophisticated CRM functionality. - **Customer Service** — for owner support after sale. ## Where Dynamics 365 doesn't fit Several automotive-specific systems remain specialist: - **DMS** — Dealer Management Systems handle dealer operations end-to-end (inventory, F&I, service department, parts). - **CAD / PLM** — for engineering and product design. - **MES / shop-floor systems** — production execution beneath the ERP. - **Connected vehicle platforms** — OEMs typically run dedicated platforms (Microsoft Connected Vehicle Platform on Azure, vendor-specific systems). - **Telematics service providers** — for fleet operators, specialist platforms. ## Industry Cloud for Automotive Microsoft has partnerships with automotive OEMs and provides industry accelerators: - Dealer engagement frameworks. - Connected-vehicle reference architectures on Azure. - Manufacturing-supplier templates for SCM. - Customer experience accelerators. **Common patterns.** ## Dealer-OEM coordination Large OEMs manage hundreds or thousands of dealers globally. Dynamics 365 Sales runs the dealer relationship — performance metrics, training records, marketing-fund usage, regional support. Dealer Management Systems remain the operational platform; Dynamics 365 provides the OEM-side oversight. ## Recall management Vehicle recalls require coordinating across: - Owner identification (which vehicles are affected). - Owner notification (legal communication). - Dealer service preparation (parts, technicians). - Owner appointment scheduling. - Tracking completion (regulatory reporting). Customer Service + Field Service coordinate the workflow; the connected-vehicle / customer database identifies affected owners. ## Owner relationship beyond the sale Modern OEMs want direct relationships with owners (historically the dealer owned the customer relationship). Customer Insights aggregates owner data — vehicle ownership, service history, complaints, brand engagement. Direct marketing engages owners for service reminders, brand loyalty, next-vehicle purchase. ## Connected vehicle New vehicles emit telemetry — usage patterns, fault codes, maintenance signals. Connected Field Service triggers proactive maintenance based on anomaly detection; Customer Insights aggregates the data for owner profiling. ## Subscription mobility OEMs increasingly offer vehicle subscriptions, fleet leasing, mobility services. Subscription Billing modules handle the recurring revenue; CRM tracks customer relationship across services. ## Supplier quality Automotive supply chain has rigorous quality standards — IATF 16949, APQP, PPAP, 8D problem-solving. Specialist quality modules on F&O (often partner ISVs) handle PPAP submissions, FMEA records, change control. ## EDI dominance Automotive trades heavily over EDI — OEM-to-supplier release schedules, delivery schedules, ASNs, invoices. Suppliers need robust EDI with multi-OEM trading partner support. Specialist EDI platforms or partner-built F&O extensions handle the operational complexity. **Regulatory considerations.** - **Safety regulations** — UNECE regulations, FMVSS in US, country-specific. - **Emissions** — strict CO₂ and pollutant regulations driving electric-vehicle transition. - **Data privacy** — connected vehicle data raises GDPR-grade obligations. - **Cybersecurity** — UN R155 for vehicle cybersecurity certification. - **Product liability** — extensive recall and traceability requirements. **Architecture pattern.** - **F&O** — supplier-side ERP backbone. - **Dealer Management System** — dealer operational system. - **Connected vehicle platform** — Azure-based for OEMs. - **Dynamics 365 Sales / Service** — OEM-customer relationship management. - **Customer Insights** — unified customer view across owner / vehicle / service. - **Power Pages portals** — dealer extranets, owner self-service. - **Microsoft Fabric** — analytics combining the above. ## Operational reality Automotive Dynamics 365 implementations are integration-rich and industry-specific. The value sits in the customer-engagement and supplier-management layers above the deeply specialised industry systems. Partner with implementation firms that have automotive industry depth; the implementation cost-benefit doesn't favour generic delivery. --- # Dynamics 365 for banking How Dynamics 365 serves banking — retail banking, commercial banking, wealth management — with CRM, marketing, customer service. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-banking Section: Industries Published: 2026-05-01 Banking is one of the most heavily regulated, customer-relationship-driven industries. Dynamics 365 plays a substantial role on the customer-facing side — relationship management, marketing, service — while core banking systems (FIS, Temenos, Finastra, Fiserv) handle accounts, transactions, and regulatory accounting. Knowing the boundary is essential for sensible banking deployments. **Banking sub-sectors.** - **Retail banking** — consumer checking, savings, mortgages, credit cards. - **Commercial banking** — business accounts, lending, treasury services. - **Wealth management** — investment advice, portfolio management. - **Corporate / investment banking** — M&A, capital markets. - **Insurance** — adjacent; separate but related. Dynamics 365 fits the relationship-management layer across these. **Where Dynamics fits.** - **CRM** — relationship managers, branch staff, call centre agents. - **Customer Service** — contact centre operations. - **Customer Insights** — customer 360 across products. - **Marketing** — campaign and journey orchestration. - **Field Service** — for branch operations or commercial outreach. - **Sales acceleration** — for relationship managers pursuing wallet share. **Where core banking dominates.** - **Account and transaction ledger** — FIS, Temenos, etc. - **Risk management** — specialised risk platforms. - **Anti-money laundering (AML)** — Actimize, NICE. - **Treasury** — specialty. - **Card processing** — Visa / Mastercard processors. Dynamics integrates with these for customer view; doesn't replace. ## Customer 360 view Critical for banking: - All products customer holds (across product lines). - All transactions / interactions. - Risk profile. - Lifetime value. - Household relationships. - Eligibility for additional products. Customer Insights — Data unifies the various systems; Dataverse profiles consume. ## Banker-customer relationship Especially for commercial / wealth: - Relationship manager assignments. - Contact history. - Strategic account plans. - Cross-sell opportunities. CRM is the natural surface for this; Sales / Sales Premium fits. ## Microsoft Cloud for Financial Services Microsoft's industry cloud overlay: - Pre-built data models for banking. - Compliance and regulatory frameworks. - Industry-specific connectors. - Specialised security configurations. Layered on Dynamics 365 for banking-specific value. **Compliance considerations.** - **KYC (Know Your Customer)** — onboarding due diligence. - **AML** — transaction monitoring. - **GDPR / data privacy** — personal data protection. - **PCI-DSS** — card data handling. - **SOX** — financial controls. - **Basel III / IV** — capital requirements. - **CCAR, DFAST** — US stress testing. Each adds requirements; Dynamics supports relevant aspects via Microsoft Cloud for Financial Services patterns. **Marketing and journeys.** - **Onboarding** — new customer journey. - **Cross-sell** — based on customer life events. - **Retention** — predict churn; act. - **Compliance-aware** — communications respect customer preferences and regulations. Strict regulations on customer communication; consent management critical. **Branch operations.** - Branch staff use Dynamics for customer view. - Transactions still in core banking. - Loan origination workflows can blend core + Dynamics. **Call centre.** - Customer Service + Contact Center for inbound. - Integration with core banking for transaction lookups. - Authentication and verification flows. - Compliance recording. Banking call centres have heavy compliance overlay. ## Mortgage origination A specific workflow: - Application capture (Power Pages / Dynamics). - Document collection. - Credit decision integration. - Underwriting. - Closing. - Service handover. Many mortgage-specific platforms exist; Dynamics often the CRM layer. ## Commercial lending Different dynamics: - Relationship banker drives. - Complex credit decisions. - Custom loan structures. - Ongoing portfolio management. Project Operations sometimes fits for complex deal lifecycle. **Wealth management.** - Advisor-client relationships. - Investment policy statements. - Portfolio performance discussions. - Compliance documentation. Dynamics supports advisor workflow; portfolio data from custodial systems. **Open banking and APIs.** - Customer-initiated data sharing. - Third-party fintech access. - API management. Dynamics integrates via APIs; Azure API Management handles broader API strategy. **Data residency and regulation.** - Customer data often must remain in country. - Microsoft offers regional clouds. - Cross-border transfers regulated. Deployment region selection matters for banking. **Common pitfalls.** - **Underestimating integration.** Core banking integration is complex; budget appropriately. - **Compliance after the fact.** Compliance designed in from start; bolted on later is painful. - **Customer data scattered.** Multiple systems with same customer; unification gap. - **No event-driven flow.** Customer events in core banking don't trigger CRM; missed opportunities. - **Generic Dynamics partner.** Banking-specific expertise matters. **Operational rhythm.** - **Daily ops** in branches and call centres. - **Monthly compliance reporting.** - **Quarterly regulatory submissions.** - **Annual audits.** ## Strategic positioning Banking is a strong fit for Dynamics 365's customer-facing capabilities, particularly via Microsoft Cloud for Financial Services. The integration with core banking is the architectural focus; Dynamics doesn't replace core banking but extends customer experience above it. For banking decision-makers: - Choose partner with banking domain depth. - Plan integration architecture early. - Invest in compliance from day one. - Treat Microsoft Cloud for Financial Services as accelerator. The investment is substantial; the regulated nature demands rigour. Done well, Dynamics elevates the customer relationship beyond what core banking alone provides. --- # Dynamics 365 for construction How Dynamics 365 fits construction — project accounting, job costing, equipment management, payroll integration. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-construction Section: Industries Published: 2026-05-01 Construction is a project-driven, asset-heavy, schedule-pressured industry with specific software requirements around job costing, progress billing, equipment management, and labour. Dynamics 365 fits through **Business Central + a construction ISV** at SMB and **Project Operations + Finance + a construction ISV** at enterprise. ## The shape of construction software Every construction firm needs: - **Job (project) management** — cost capture, budget vs actual, change orders, retention. - **Estimating** — bids on prospective work, often with assemblies and cost libraries. - **Subcontractor management** — contracts, change orders, payments with retention, lien releases. - **Progress billing** — milestones, percentage-of-completion, retention release. - **Equipment management** — owned equipment costs allocated to jobs. - **Labour** — time capture per job per cost code, payroll integration. - **Service and warranty** — post-construction service contracts on completed projects. - **Regulatory** — building codes, safety, licensing, prevailing wage (US). Dynamics 365 base products cover finance, inventory, basic projects; **construction ISVs** layer on the vertical specifics. ## Business Central + construction ISV For mid-sized contractors (under 250 users, single-country, conventional construction), BC plus a construction-vertical ISV is the common fit. Popular construction ISVs on BC AppSource include: - ProArc, Project Pro, Construction WMS, Dynamics 365 Business Central Construction by Aptean, Continia, and several regional specialists. These add: job cost ledger structured for construction (cost codes, cost types, job phases), progress billing with retention, subcontractor management with sworn-statement-style payment compliance, equipment fleet tracking, and integration with estimating and project scheduling tools. ## Project Operations + Finance for enterprise construction Larger contractors with multi-site operations move to the enterprise stack. Project Operations runs the project lifecycle — opportunity, contract, WBS, resourcing, time, expense, billing. Finance handles general ledger, AP/AR, and consolidations. SCM may join if inventory and equipment are managed at scale. **Project Operations for construction quirks.** - **Cost codes** — construction's cost code structure (typically MasterFormat in the US, or industry-equivalent elsewhere) needs to flow through every cost transaction. - **Change orders** — formal contractual amendments with approval workflow, budget impact, and revised billing schedule. - **Retention** — billing typically holds back 10% until acceptance; AR tracks the retained amount until release on milestones or project completion. - **Schedule of values** — the contract's billing breakdown by line item, used for AIA-style progress billing in the US. ## Estimating Dynamics 365 doesn't ship a construction estimator; the standard pattern is to integrate Microsoft Excel templates (for smaller firms) or a specialist estimator (Sage Estimating, OnScreen Takeoff, Bluebeam, ProEst) — passing won bids into Project Operations as project budgets. ## Equipment management Internal equipment (cranes, excavators, concrete pumps) is treated as a resource with hourly cost rates, scheduled to jobs, with maintenance tracked through Field Service or the equipment-management module of the ISV. ## Payroll and union compliance Most construction firms run payroll through a specialist (ADP, Paylocity, region-specific providers) integrated with HR. Union dues, prevailing wage, and complex shift premiums typically live in the payroll system, not in Dynamics 365. ## Mobile Field supervisors and labour foremen capture time and progress from mobile devices. Field Service mobile app or custom Power Apps cover this. ## Where it stops Very specialised verticals — heavy civil, oil and gas construction, marine construction — sometimes have ERP options purpose-built for them. For mainstream commercial and residential construction, Dynamics 365 + construction ISV is the right answer. ## Where to go next The SMB path runs on [Business Central projects](https://www.solvingdynamics365.com/guides/business-central-projects) with [WIP and recognition for jobs](https://www.solvingdynamics365.com/guides/wip-and-recognition-for-jobs-in-bc) and a construction ISV from the [add-on landscape](https://www.solvingdynamics365.com/guides/common-business-central-isv-addons); the enterprise path on [Project Operations](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-project-operations). The competitor with a shipped construction edition is compared in [Business Central vs Acumatica](https://www.solvingdynamics365.com/guides/business-central-vs-acumatica). --- # Dynamics 365 for education How Dynamics 365 fits higher education and K-12 — student lifecycle, alumni relations, fundraising, and Microsoft's Industry Cloud accelerators. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-education Section: Industries Published: 2026-05-01 Education is one of Microsoft's strongest verticals — most universities and schools already run Microsoft 365 — and Dynamics 365 extends the relationship into student, alumni, and institutional management. The specific shape of Dynamics 365's role differs from corporate use cases, with student-lifecycle and relationship-management at the heart. **Where Dynamics 365 fits in education.** - **Recruitment and admissions** — Dynamics 365 Sales (customised for student recruitment) and Marketing for prospective-student engagement, application tracking, decision workflow, yield management. - **Student services** — Customer Service for case management, advising appointments, financial-aid queries, accommodation services. - **Alumni relations** — Sales and Customer Insights for alumni engagement, event management, donor cultivation. - **Advancement and fundraising** — gift recording, donor pipeline management, campaign tracking. - **Career services** — relationship management with employers, job placement tracking. - **Operations** — facilities management (Field Service), procurement (Business Central or F&O for the financial back office). ## Where Dynamics 365 doesn't fit Student Information Systems (SIS) — Banner, Workday Student, Ellucian, Anthology, PeopleSoft — remain the system-of-record for enrolment, grades, transcripts, degree-audit. Dynamics 365 integrates with the SIS but doesn't replace it. Learning Management Systems (Canvas, Blackboard, Moodle) similarly stay outside Dynamics 365. ## Microsoft Industry Cloud for Education Provides: - **Data models** — Student, Application, Programme, Course (lightweight, oriented toward recruitment / advancement / engagement rather than full academic record). - **Recruitment templates** — admissions funnel, application processing, decision workflow. - **Advancement templates** — donor pipeline, gift recording, campaign management. - **Power BI dashboards** — recruitment funnel, application status, financial-aid analytics. - **Microsoft School Data Sync** — integration with student information systems and identity for student/staff data. **The student lifecycle.** 1. **Prospect** — high-school students exploring colleges; engagement through Customer Insights – Journeys (campaigns, email, SMS, events). 2. **Inquirer** — submitted an information request; in the funnel. 3. **Applicant** — formal application submitted. 4. **Admitted** — accepted; cultivation to convert to enrolled. 5. **Enrolled** — converts to SIS record; Dynamics 365 continues to manage non-academic relationship (advising, services, satisfaction surveys). 6. **Graduate** — relationship persists. 7. **Alumni** — engagement, donor cultivation, event participation, philanthropic relationship. Dynamics 365 supports the full lifecycle; the SIS owns the academic / enrolment record specifically. **Recruitment-specific features.** - **Major / programme of interest tracking** — prospects tagged with intended fields of study. - **Counsellor assignment** — each prospect gets a recruiter for their territory or programme. - **Event tracking** — campus visits, open houses, virtual events; attendance correlated with enrolment. - **Application status updates** — automated email when application moves through stages. - **Yield campaigns** — targeted outreach to admitted students to convert decision. **Advancement-specific features.** - **Gift recording** — donations linked to constituents with full lifecycle tracking. - **Pledge management** — multi-year giving commitments with reminder workflows. - **Donor pipeline** — major-gift cultivation tracked as opportunities. - **Campaign management** — capital campaigns with goal tracking and donor segmentation. - **Recognition and stewardship** — automated touch points to thank and inform donors. **Compliance considerations.** - **FERPA (US)** — student-record privacy law constraining what can be shared and accessed. - **GDPR (EU)** — student / parent personal data. - **State and country-specific** — varies widely. Configure audit, retention, and access controls in line with the applicable regulations. ## Common architecture pattern Universities typically run: - **SIS** — Banner / Workday / Ellucian as the academic system of record. - **Dynamics 365** — for recruitment, advancement, alumni, services that aren't academic. - **Microsoft 365** — student and staff productivity. - **Microsoft Teams for Education** — classroom collaboration, virtual meetings. - **Power Platform** — student portals, faculty workflows, custom apps. - **Microsoft Fabric** — analytics combining all of the above. ## Operational reality Education implementations are stakeholder-heavy — admissions, advancement, alumni, marketing, IT, often academic-side observers. Strong governance and patient change management matter more than in many other verticals. ## Where to go next The two integration problems every institution meets are covered in [SIS integration](https://www.solvingdynamics365.com/guides/dynamics-365-for-education-sis-integration) and [alumni engagement](https://www.solvingdynamics365.com/guides/dynamics-365-for-education-alumni-engagement). The marketing engine is [Customer Insights – Journeys](https://www.solvingdynamics365.com/guides/customer-insights-journeys-explained), the portal layer is [Power Pages](https://www.solvingdynamics365.com/guides/power-pages-for-customer-portals), and the nearest sibling sector is [nonprofits](https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits). --- # Dynamics 365 for energy How Dynamics 365 serves the energy sector — utilities, renewables, oil and gas — with field service, project operations, customer engagement. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-energy Section: Industries Published: 2026-05-01 The energy sector spans extraction (oil and gas), generation (utilities, renewables), distribution (grid operators), and retail (customer-facing energy suppliers). Each sub-sector has distinct requirements. Dynamics 365 fits some scenarios better than others; understanding where helps customers evaluate the platform realistically. **The sub-sectors.** - **Upstream oil and gas** — exploration, drilling, production. - **Midstream** — pipelines, refining, transport. - **Downstream** — retail fuel distribution. - **Utilities** — power generation, transmission, distribution to consumers. - **Renewables** — wind, solar, hydro generation and supply. - **Energy retail** — supplier-customer relationship. Dynamics 365 is most relevant for downstream operations, customer-facing utilities, renewables operations, and energy retail; less natural fit for deep upstream specialty work. ## Field Service for utilities and renewables Service organisations maintaining equipment in the field: - **Wind farms** — service technicians traveling between turbines. - **Solar installations** — preventive and corrective maintenance. - **Substations and distribution** — utility maintenance. - **Gas line servicing** — utility company technicians. Field Service handles work orders, scheduling, technician dispatch, parts management, customer assets, IoT-driven preventive maintenance. ## Connected Field Service for predictive maintenance Critical for high-value assets: - **Wind turbine** — vibration, generator performance, gearbox temperature. - **Solar inverter** — DC and AC performance metrics. - **Transformer** — temperature, oil quality. - **Compressor** — pressure, RPM, vibration. IoT data flowing into Dynamics triggers maintenance work orders ahead of failure. The economics for energy assets (downtime cost, equipment cost) justify the IoT investment. ## Customer Engagement for energy retail Energy suppliers managing customer accounts: - **Account management** — multi-property, multi-meter accounts. - **Billing inquiries** — case management. - **Service requests** — connect, disconnect, transfer. - **Customer self-service portal** — Power Pages-based. Energy retail customer service has high volume; Dynamics 365 Customer Service handles the operational scale. ## Customer Insights for energy customers Modern energy retail invests in customer experience: - **Segmentation** — high-value, vulnerable, price-sensitive. - **Journey orchestration** — onboarding, retention, renewal. - **Cross-channel communication** — email, SMS, in-app, smart device. - **Loyalty programmes.** The customer-centric capabilities make Dynamics competitive with energy-specific CIS platforms. ## Project Operations for capital projects Energy companies have massive capital project portfolios: - **New solar farm** — multi-year build. - **Substation upgrade.** - **Pipeline extension.** - **Plant maintenance shutdown.** Project Operations handles project planning, resource allocation, time and expense, billing for engineering services, and project accounting. **Finance and Supply Chain Management for operations.** - **Procurement** — high-value contracts, long lead times. - **Inventory** — spare parts at remote locations. - **Maintenance MRO** — supplier relationships for critical components. - **Financial reporting** — by asset, by project, by region. Standard F&O capabilities apply with energy-specific configuration. **Industry-specific requirements.** - **Asset-centric accounting** — every wind turbine, transformer, solar inverter as a tracked asset. - **Regulatory reporting** — FERC, NERC (US), European TSOs, country-specific regulators. - **Settlement** — wholesale market settlement; can be complex. - **Renewable energy certificates (RECs)** — tracking and trading. - **Capacity markets** — for utilities. - **Tariff complexity** — variable pricing structures. Many of these fit poorly into generic ERP without specialty extensions or external systems. **Common partner solutions.** - **Sicon (UK)** — energy sector extensions. - **Cosmo Consult (Europe)** — energy and utilities expertise. - **Specific country partners** — local utility regulations. For serious energy deployments, partner specialisation is essential. **Integration patterns.** - **SCADA systems** — supervisory control and data acquisition; the operational technology side. - **EAM systems** — Enterprise Asset Management for deep asset hierarchies; Dynamics has reasonable capability but specialists (IBM Maximo, SAP PM) often used. - **Energy market platforms** — wholesale market interfaces. - **Smart meters** — millions of devices; meter data management often separate, with summarised data flowing to Dynamics. ## Sustainability and ESG Energy is at the centre of climate discussions: - **Emissions tracking** — Scope 1, 2, 3 emissions per asset, per project. - **Renewable percentage** — for utilities and retailers. - **Sustainability reporting** — TCFD, CDP, GRI. Microsoft Sustainability Manager (separate product but tied to Dataverse) handles much of this. ## Energy transition implications The industry is transforming: - **Renewable shift** — generation portfolio mixing. - **Distributed energy** — rooftop solar, behind-the-meter batteries. - **EVs and demand-side management** — new customer interactions. - **Microgrids.** Dynamics 365 must adapt — customer-centric, data-rich, IoT-integrated. The platform's flexibility supports the transition. **Common pitfalls.** - **Wrong product fit.** Trying to use Dynamics for deep upstream operations; misalignment. - **No partner expertise.** Generic Dynamics partner without energy domain; long implementation. - **SCADA integration ignored.** Operational technology data not flowing; Dynamics only sees commercial side. - **Regulatory reporting incomplete.** Reports need specific format; ad-hoc reporting fails audit. - **Asset hierarchy mis-modelled.** Energy assets have deep hierarchies (substation → bay → equipment); model carefully. ## Strategic positioning Dynamics 365 for energy works well for: - Customer-facing utility and retail operations. - Field service for distributed energy assets. - Capital project management. - Customer engagement and CX. It works less well for: - Deep operational technology (use specialty SCADA + Dataverse integration). - Heavy upstream activities (specialty industry platforms more common). - Complex wholesale energy trading (specialty platforms again). For most modern energy customer-centric deployments, Dynamics 365 is a strong choice; combined with partner extensions and specialty integrations, it covers the breadth most energy organisations need. --- # Dynamics 365 for financial services How Dynamics 365 fits banking, insurance, and wealth management — Microsoft Cloud for Financial Services, regulatory and compliance considerations. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-financial-services Section: Industries Published: 2026-05-01 Financial services — retail banking, commercial banking, insurance, wealth management, capital markets — is one of Microsoft's strategic industries with a dedicated **Microsoft Cloud for Financial Services** offering. Dynamics 365 plays specific roles in the architecture; specialist platforms cover others; understanding the boundary is essential. **Where Dynamics 365 fits in financial services.** - **Customer engagement and onboarding** — Sales for relationship management, Customer Service for service interactions, Customer Insights for unified customer view across products and channels. - **Advisor / banker productivity** — Outlook + Teams integration with Copilot for Sales surfacing customer data inside the banker's daily workflow. - **Marketing** — Customer Insights – Journeys for compliance-aware customer outreach. - **Operations** — operational workflows, claims-handling for insurance, KYC / KYB onboarding orchestration. - **Compliance and audit** — Microsoft Purview for governance, Dataverse audit trails. ## Where Dynamics 365 doesn't fit Core banking systems (FIS, Temenos, Finastra), core insurance policy administration (Guidewire, Duck Creek), trading systems, ledger-of-record financial systems are *not* replaced by Dynamics 365. These specialist platforms remain; Dynamics 365 integrates with them. ## Microsoft Cloud for Financial Services Provides: - **Data models** aligned with banking and insurance data standards. - **Onboarding accelerators** for KYC, KYB, anti-money-laundering workflow. - **Customer 360** — unified view across products, channels, interactions. - **Banker / advisor desktop** — integrated workspace combining Outlook, Teams, and Dynamics 365. - **Customer-facing experiences** — Power Pages portals for customer self-service. - **AI accelerators** — Copilot agents for common financial-services tasks. **Regulatory considerations.** - **GDPR** — EU customer-data protection. - **PCI-DSS** — for any service handling cardholder data. - **SOX** — US public-company financial reporting. - **MiFID II** — EU investment-services regulation requiring detailed interaction recording. - **Basel / Solvency II** — capital regulations affecting reporting requirements. - **FCA / PRA / SEC** — country-specific financial conduct regulators. - **HIPAA-equivalent for health-insurance lines.** Microsoft's compliance pages document certifications applicable to financial services. The customer's responsibility is configuring Dynamics 365 in line with regulatory requirements — audit trails, retention, encryption, access controls. ## KYC and AML Customer onboarding for financial products requires Know Your Customer (identity verification) and Anti-Money-Laundering (transaction screening) checks. Dynamics 365 + Power Automate orchestrates the workflow — capture documents, call screening services (LexisNexis, Refinitiv, Dow Jones), surface results to underwriters, audit-trail every decision. The screening calls go to specialist providers, not Microsoft. ## Claims handling (insurance) Dynamics 365 Customer Service customised for insurance claims: - Claim intake from policyholders via portal, phone, mobile app. - Triage and assignment to adjusters. - Investigation, evidence gathering, photo upload, expert involvement. - Approval workflow with payment processing. - Fraud detection alerts integrated into the workflow. - Customer-facing status updates. ## Wealth management For advisors managing client portfolios: - Client relationship and household management in Dynamics 365 Sales. - Portfolio data sourced from specialist platforms; aggregated views in Customer Insights. - Compliance-recorded client communications (MiFID II requires interaction recording). - Suitability assessments captured as structured forms. ## Common architecture pattern Most financial services customers run: - **Core banking / policy / trading platform** — the system of record for financial transactions. - **Dynamics 365 for customer relationship and operations** — overlays the core with engagement and workflow. - **Microsoft Fabric** — for analytics combining customer and financial data. - **Microsoft Purview** — for compliance governance. - **Azure** for the broader integration tier. ## Operational reality Financial services implementations are heavy on compliance, integration, and validation. Budget realistically and engage Microsoft's industry-cloud accelerators rather than building from scratch — they exist for good reason. ## Where to go next Microsoft's packaging is [Microsoft Cloud for Financial Services](https://www.solvingdynamics365.com/guides/microsoft-cloud-for-financial-services); the onboarding process is in [KYC onboarding](https://www.solvingdynamics365.com/guides/dynamics-365-for-financial-services-kyc-onboarding). Sub-sector guides: [banking](https://www.solvingdynamics365.com/guides/dynamics-365-for-banking) and [insurance](https://www.solvingdynamics365.com/guides/dynamics-365-for-insurance). The identity controls regulators ask about are in [conditional access](https://www.solvingdynamics365.com/guides/dynamics-365-and-conditional-access). --- # Dynamics 365 for food and beverage How Dynamics 365 fits food and beverage manufacturing and distribution — batch traceability, catch weight, expiry, regulatory. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-food-and-beverage Section: Industries Published: 2026-05-01 Food and beverage is a demanding ERP vertical: tight margins, complex recipes, batch-level traceability, expiry dates, allergens, regulatory reporting, seasonality, and high-volume distribution. Dynamics 365 fits the vertical through **Supply Chain Management** at the enterprise end and **Business Central plus food-and-beverage ISVs** at SMB. ## Dynamics 365 Supply Chain Management for food Out of the box, SCM provides: - **Formula-based production** — process manufacturing with proportional ingredients, scaling, yields, and co-products / by-products (e.g. a wheat process produces flour and bran simultaneously). - **Catch weight** — items priced and sold per unit (e.g. piece) but inventoried by another measure (e.g. weight per piece varies). Critical for meat, fish, cheese, produce. - **Batch attributes** — properties of a batch (fat %, alcohol %, brix, pH) that drive grading, pricing, and routing. Inventory can be filtered by attribute (e.g. ship only batches above 4.5% fat for a specific customer specification). - **Shelf life and expiry tracking** — each batch carries a manufacturing date and best-before / use-by date. Picking automatically prioritises soon-to-expire stock (FEFO — First Expired First Out). - **Allergen tracking** — each item carries allergen flags; downstream products inherit; reporting and label printing reflect them. - **Quality management** — sample plans, non-conformance, hold-and-release for failed batches. ## Business Central for food (SMB) BC's manufacturing and inventory cover discrete food production reasonably; **food-and-beverage ISV add-ons** (BoF, Aptean Food, Insight Works, Sana for B2B) fill the gaps — recipe scaling, batch traceability, allergens, expiry, customer-specific specifications. The pattern: BC base + a food-vertical ISV is common for under-200-user food manufacturers. ## Regulatory Food regulations are jurisdiction-specific and exacting: - **HACCP** — hazard analysis and critical control points; documented in quality plans and inspections. - **FSMA (US)**, **EU Food Information Regulation**, **Codex Alimentarius** — labelling, allergen, nutritional disclosure requirements. - **Country-specific recall**, **trace-forward**, **trace-backward** capabilities — given a batch, identify every customer who received it; given a contaminated input, identify every finished batch produced from it. SCM does this natively through item-tracing reports. ## Traceability End-to-end batch traceability is non-negotiable in food. Capture batches at every transfer point — raw material receipt, production consumption, finished output, customer ship, retailer receipt. F&O's batch tracking and item tracing make this a configuration exercise rather than a custom build, but the operational discipline of *actually* recording batches at every step is the hard part. ## Demand planning Seasonal patterns, promotion-driven spikes, weather sensitivity. SCM's **Demand Planning** module is suitable; many food customers add specialist demand-sensing tools. ## Pricing Trade allowances and rebates are heavy in food retail — slotting fees, end-cap promotions, volume rebates. SCM's **Trade Allowance Management** addresses many; specialist TPM tools (Sales BI, ToolsGroup, Vistex) for the most complex. ## E-commerce Food B2B (selling to restaurants, retailers, distributors) increasingly uses portals — Sana Commerce, Power Pages B2B portals, custom-built integrations to BC or F&O. Allergen filters, batch-traceable order history, contract pricing. ## Where it stops Very high-volume meat processing, complex wine production with appellation rules, or pharmaceutical-grade traceability sometimes go beyond what SCM does natively. Industry ISVs cover most; in extreme cases customers add MES on top. ## Operational reality Food implementations are heavy on the manufacturing, batch tracking, and quality streams. Budget time and discipline accordingly. --- # Dynamics 365 for government contracting How Dynamics 365 fits government contractors — DCAA / FAR compliance, project accounting, indirect rates, and the specifics of selling to government customers. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-government-contracting Section: Industries Published: 2026-05-01 Government contracting — companies that sell to federal, state, or local governments — has accounting and compliance requirements that go far beyond commercial business. **Dynamics 365 Finance and Operations** handles many of these requirements; some need specialty partner extensions; some need integration with government-specific systems. Understanding the landscape is essential for any GovCon Dynamics deployment. **The regulatory framework (US focus).** - **DCAA (Defense Contract Audit Agency)** — audits contractors for compliance. - **FAR (Federal Acquisition Regulation)** — governs federal procurement. - **DFARS (Defense FAR Supplement)** — additional rules for DoD contracts. - **CAS (Cost Accounting Standards)** — required cost accounting practices. - **TINA (Truth in Negotiations Act)** — disclosure requirements. Each adds requirements to how costs are recorded, allocated, and reported. **Project accounting requirements.** - **Job costing at the work breakdown structure level** — track costs per task, not just per project. - **Direct vs indirect cost separation** — direct cost flows to specific projects; indirect aggregated for allocation. - **Cost categories** — labour, materials, subcontracts, ODC (other direct costs), overhead, G&A, fees. - **Cost element tracking** — per cost element across the WBS. F&O's project module supports this with care in configuration; specialty extensions deepen the capability. ## Indirect rate calculation A signature GovCon requirement: - **Pool costs** — overhead, G&A, fringe accumulated. - **Allocation bases** — direct labour, total cost input, etc. - **Provisional rates** — used during the year. - **Actual rates** — calculated annually. - **Variance billing** — true-up to actual. Indirect rates determine recoverable cost from government contracts; getting them right matters financially. **Contract types.** - **Firm Fixed Price (FFP)** — set price; risk on contractor. - **Cost Plus Fixed Fee (CPFF)** — costs reimbursed plus fixed fee. - **Cost Plus Incentive Fee (CPIF)** — costs plus fee based on performance. - **Time and Materials (T&M)** — billed hours and materials. - **Indefinite Delivery / Indefinite Quantity (IDIQ)** — umbrella contract with task orders. Each contract type has different billing, revenue recognition, and risk patterns. **Cost element tracking.** - **Each transaction tagged** with cost element. - **Reports by element across projects.** - **Allocations to indirect cost pools** based on configured rules. This is more granular than standard F&O cost categorisation; specialty extensions add the depth. **Project billing.** - **Fixed price** — invoice on milestones. - **Cost reimbursable** — invoice for actual costs plus fee. - **T&M** — invoice for hours and materials. - **Public Voucher (SF1034)** — federal billing form. Generating government-compliant invoices and supporting documentation is a specific capability; partner extensions often add formatted SF1034 output. **Subcontractor management.** - **Subcontracts within contracts** — subcontractor costs roll up. - **Flow-down clauses** — prime contract terms flow to subcontractors. - **Subcontractor compliance** — subcontractors must meet certain prime contractor requirements. **Compliance reporting.** - **Incurred Cost Submission (ICS)** — annual filing of actual cost data. - **Forward Pricing Rate Proposal (FPRP)** — predicted future indirect rates. - **Cost / Pricing data** for proposals. - **EVM (Earned Value Management)** — for major contracts. Reports must be in government-specified formats; specialty tools help. **Cyber compliance.** - **CMMC (Cybersecurity Maturity Model Certification)** — required for DoD contractors. - **NIST 800-171** — cybersecurity standard. - **FedRAMP** — for cloud services to government. These affect IT infrastructure choices including Dynamics 365 deployment: - **GCC (Government Community Cloud)** — for federal government data. - **GCC High** — for CUI (Controlled Unclassified Information). - **DoD IL5** — for higher sensitivity. Microsoft offers Dynamics 365 in these clouds with FedRAMP authorisation. **Workforce specifics.** - **Cleared personnel** — security clearances tracked. - **Site-specific workers** — for classified facilities. - **Subcontracted personnel** — different from FTE in many compliance contexts. D365 HR handles employee records; cleared personnel often need additional tracking and access controls. **Common partner solutions.** - **Wipfli, BST, Unanet** — GovCon-specific functionality on top of F&O. - **Deltek** — major GovCon-specific ERP; Dynamics 365 is sometimes implemented alongside or as an alternative. - **Specific cyber compliance partners** — for CMMC and similar. For serious GovCon deployments, partner expertise is essential — generic Dynamics partners often miss the compliance nuances. ## International government contractors Outside the US, similar but country-specific: - **UK MOD / GovS 015 (procurement standards).** - **EU defence procurement directive.** - **Canadian Department of National Defence.** The patterns are similar; specifics vary. **Common pitfalls.** - **Standard F&O without GovCon extensions.** Indirect rates manual; incurred cost submissions painful. - **Wrong cloud.** Federal data in commercial cloud; compliance breach. - **Subcontract management informal.** Flow-down compliance verified only at audit. - **Audit-trail gaps.** Cost recording without sufficient evidence; DCAA findings. - **CMMC underestimated.** Compliance project longer than expected. **Operational rhythm.** - **Monthly** — indirect rate reconciliation; incurred cost data check. - **Quarterly** — provisional rate review. - **Annual** — ICS preparation; rate true-up. - **Per contract** — billing cycle aligned to contract terms. ## Strategic positioning Dynamics 365 for GovCon is viable with the right partner and right configuration. The platform isn't natively GovCon-aware — it's a general-purpose ERP — but its flexibility supports the requirements with appropriate extensions and process discipline. For organisations choosing between Deltek (GovCon-specific) and Dynamics + partner: Deltek has out-of-the-box GovCon capability; Dynamics requires more configuration but offers broader Microsoft ecosystem integration. For smaller GovCons, Deltek may be simpler; for organisations already on Microsoft stack or needing the breadth, Dynamics + GovCon partner is competitive. The compliance bar is high; cutting corners fails audits and risks contracts. Invest in the right partner; invest in process discipline; invest in the right cloud. The payback is the ability to compete reliably for government contracts. ## Where to go next The platform capabilities are in [public sector features](https://www.solvingdynamics365.com/guides/dynamics-365-public-sector-features), with process guides on [procurement transparency](https://www.solvingdynamics365.com/guides/dynamics-365-for-public-sector-procurement-transparency) and [vendor performance](https://www.solvingdynamics365.com/guides/dynamics-365-for-public-sector-vendor-performance). Spending controls are [budget control in F&O](https://www.solvingdynamics365.com/guides/budget-control-in-f-and-o); the sovereignty questions are in [data residency and compliance](https://www.solvingdynamics365.com/guides/data-residency-and-compliance-in-dynamics-365). --- # Dynamics 365 for healthcare How Dynamics 365 fits healthcare providers and payers — the Microsoft Cloud for Healthcare, patient engagement, supply chain, and the regulatory considerations. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-healthcare Section: Industries Published: 2026-05-01 Healthcare is one of Microsoft's strategic verticals, with a dedicated **Microsoft Cloud for Healthcare** offering that builds healthcare-specific data models and accelerators on top of Dynamics 365, Power Platform, Azure, and Microsoft 365. For health providers, payers, life sciences companies, and medical device manufacturers, the platform plays specific roles. **Where Dynamics 365 fits in healthcare.** - **Patient engagement** — not the clinical record, but the relationship around it: appointment scheduling, outreach, communications, post-visit surveys, care-team coordination. Dynamics 365 Customer Service and Sales (configured with healthcare schemas) are the right tools. - **Provider revenue cycle and supply chain** — Finance and Supply Chain Management for the financial back office: procurement of medical supplies, equipment management, inventory across hospitals/clinics, payables. - **Workforce** — Human Resources for staff onboarding, credentialling, scheduling integration. - **Field operations** — Field Service for medical equipment maintenance contracts, in-home care visits, lab-pickup logistics. - **Marketing and outreach** — Customer Insights – Journeys for member communications (payers), patient education (providers), donor outreach (nonprofit health systems). ## Where Dynamics 365 doesn't fit Critically, the **electronic health record (EHR)** — Epic, Cerner, Allscripts, Athena — is *not* replaced by Dynamics 365. EHRs are clinical systems with deep regulatory certification and clinical-workflow specificity. Dynamics 365 integrates with the EHR via HL7 / FHIR / specific connectors but does not replicate the EHR's role. ## Microsoft Cloud for Healthcare This accelerator adds healthcare-specific: - **Data models** — Patient, Care Plan, Encounter, Practitioner, Healthcare Service, Healthcare Facility — aligned with FHIR (Fast Healthcare Interoperability Resources) standard for interoperability with EHRs. - **Power Apps** — patient access apps, virtual visit coordination, care management tools. - **Power Automate templates** — appointment-reminder flows, post-discharge follow-up, lab-result notifications. - **Power BI templates** — patient engagement metrics, operational dashboards. - **Healthcare Bot** templates — Copilot Studio agents pre-configured for triage, symptom checking, FAQ. ## Regulatory Healthcare has specific compliance requirements: - **HIPAA (US)** — patient data privacy and security. Microsoft signs Business Associate Agreements (BAAs); the platform supports HIPAA-compliant configuration but configuration is the customer's responsibility. - **GDPR (EU)** — patient consent, right to erasure, data residency. - **Country-specific health data laws** — vary widely. - **Medical device regulations (FDA, CE, MDR)** — when Dynamics 365 is part of a medical device's workflow, regulatory implications apply. Microsoft publishes compliance documentation and certifications relevant to healthcare. Customers must still validate their specific configuration meets the applicable regulations. **Common implementation patterns.** - **Hospital CRM** — Sales and Customer Service for outreach, patient relations, fundraising; integrated with the EHR via FHIR for patient context. - **Payer member portal** — Power Pages portal on top of Dataverse with healthcare schema, plus Customer Service for member-services agents. - **Medical device manufacturer** — Field Service for device installation, maintenance, recall management; Sales for the commercial side; SCM for production and distribution. - **Pharma sales force** — Sales with industry-specific customisations for HCP (healthcare professional) targeting, sample tracking, and PhRMA-code compliance. - **Home health agency** — Field Service for visit scheduling, mobile capture of care notes, integration with care plan and billing. ## Integration architecture The standard pattern is Dataverse as the operational data hub for Dynamics 365 work, with FHIR APIs for EHR interop, Azure Health Data Services for healthcare-specific analytics, and Microsoft Fabric for combined analytics across CRM and clinical data. ## Where to start A specific use case (patient outreach, equipment maintenance, member engagement) — not "implement Dynamics 365 for healthcare". The accelerator helps; the specific business problem is what drives value. ## Where to go next Microsoft's packaging is [Microsoft Cloud for Healthcare](https://www.solvingdynamics365.com/guides/microsoft-cloud-for-healthcare). Process guides: [patient engagement](https://www.solvingdynamics365.com/guides/dynamics-365-for-healthcare-patient-engagement) and [HIPAA-regulated customer service](https://www.solvingdynamics365.com/guides/dynamics-365-for-healthcare-hipaa-customer-service); for regulated manufacturing, [GxP validation](https://www.solvingdynamics365.com/guides/dynamics-365-for-life-sciences-gxp-validation). The compliance foundation is [data protection and compliance](https://www.solvingdynamics365.com/guides/dynamics-365-data-protection-and-compliance). --- # Dynamics 365 for hospitality How Dynamics 365 fits hotels, restaurants, and hospitality groups — guest engagement, loyalty, operations. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-hospitality Section: Industries Published: 2026-05-15 Hospitality — hotels, restaurants, hotel groups, resorts, casinos, food-service chains — combines high-volume guest interactions, complex operational coordination, and brand-experience expectations. Dynamics 365 plays specific roles alongside the deeply specialised platforms (PMS for hotels, POS for restaurants) that dominate hospitality. **Where Dynamics 365 fits in hospitality.** - **Guest engagement** — Dynamics 365 Sales for relationships with corporate accounts and major group bookings, Customer Service for guest support, Customer Insights for the unified guest profile across stays / channels / brands. - **Marketing** — Customer Insights – Journeys for guest segmentation, personalised offers, loyalty communications, post-stay surveys. - **Loyalty programmes** — typically a specialist loyalty platform (Marriott Bonvoy, IHG One Rewards, etc. for hotel chains), but Dynamics 365 Customer Insights integrates for cross-property guest understanding. - **Corporate / group sales** — Dynamics 365 Sales for negotiated rates with corporate accounts, group bookings (weddings, conferences), MICE (meetings, incentives, conferences, events) sales. - **Vendor and supplier management** — Sales / Customer Service for relationships with food suppliers, beverage distributors, service contractors. - **Procurement and AP** — Finance / Business Central for purchasing across the property portfolio. - **Maintenance and engineering** — Field Service for dispatching maintenance technicians to guest rooms, common areas, equipment. - **Sustainability tracking** — Microsoft Sustainability Manager for property emissions; increasingly required for ESG disclosures. ## Where Dynamics 365 doesn't fit Several hospitality-specific functions are dominated by specialist platforms: - **Property Management System (PMS)** — Opera (Oracle Hospitality), Mews, Cloudbeds, Apaleo, Protel for hotels. Handles room inventory, reservations, check-in/out, room assignments, folio billing. The system of record for guest stays. - **Point of Sale (POS)** — Aloha (NCR), Toast, Simphony (Oracle), Lightspeed, Square for restaurants. Handles orders, payments, kitchen routing, table management. The system of record for in-venue transactions. - **Channel management** — SiteMinder, Cloudbeds, Booking.com extranet, Expedia partner central for distributing inventory to OTAs. Specialist platforms. - **Revenue management** — IDeaS, Duetto, Atomize for dynamic pricing optimisation. Specialist platforms. - **Spa and ancillary** — Book4Time, SpaSoft for spa management. Specialist. Dynamics 365 integrates with these systems; doesn't replace them. **Common architecture patterns.** - **Hotel group / chain** — PMS at each property; Dynamics 365 Sales for corporate sales team; Customer Insights for the cross-property unified guest profile; Customer Insights – Journeys for guest marketing; Finance for corporate accounting; Field Service for maintenance. - **Restaurant chain** — POS at each restaurant; Dynamics 365 Customer Service for centralised customer support; Customer Insights for loyalty programme analytics; Finance / Business Central for corporate accounting; Field Service for equipment maintenance. - **Resort / mixed-use** — PMS for accommodation; POS for F&B; spa-management platform for spa; Dynamics 365 for the unified guest experience layer across them. ## Guest unified profile — the strategic use case The biggest Dynamics 365 value in hospitality often comes from **Customer Insights – Data**. The problem: each property's PMS knows the guest's stays there; each restaurant's POS knows the guest's meals there; the loyalty programme knows redemptions; the spa booking platform knows treatments. The guest is the same person, but the data is scattered. CI–Data unifies the profile — combining all sources, identity-resolving across them, producing the single "this is who this guest is" record with full history. Downstream: - **Sales** sees the high-value guest's full footprint when negotiating corporate rates. - **Customer Service** has full context when the guest calls. - **Marketing** can segment based on actual cross-property behaviour. - **Property staff** with appropriate access see the guest's preferences for personalised service. ## Personalisation From the unified profile: - Welcome offers tailored to the guest's history. - Room preferences honoured (pillow type, room temperature, allergens). - Dietary requirements communicated to F&B operations. - Significant dates noted (anniversary, birthday) for surprises. ## Mobile and digital guest experience Guest-facing apps (typically built on Power Apps canvas, integrated with PMS via APIs) offer: - Mobile check-in / check-out. - Digital room key. - Room service ordering. - Spa / activity booking. - Concierge requests. - Bill viewing. ## Marketing automation Customer Insights – Journeys handles: - **Pre-stay** — booking confirmation, upsell offers, check-in instructions. - **In-stay** — room-service offers, activity suggestions, real-time issue follow-up. - **Post-stay** — thank you, review request, loyalty promotion. Triggered by PMS events (booking confirmed, check-in, check-out, etc.) integrated to Dataverse. ## Operational reality Hospitality is integration-rich. The Dynamics 365 architecture earns its value when it cleanly integrates with the specialist platforms — PMS, POS, loyalty, channel management — rather than trying to replace them. Plan the integration story alongside the apps. --- # Dynamics 365 for insurance How Dynamics 365 fits insurance carriers, brokers, and MGAs — agent / broker engagement, policy lifecycle support, claims, and customer service. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-insurance Section: Industries Published: 2026-05-01 Insurance — life, property and casualty, health, specialty — is a heavily regulated, deeply systemised industry. Dynamics 365 plays specific roles alongside the specialist platforms that handle policy administration, underwriting, and claims-core operations. **Where Dynamics 365 fits in insurance.** - **Agent and broker engagement** — Dynamics 365 Sales (configured for insurance) for relationship management with the broker network or direct sales force. - **Customer engagement** — Customer Service for policyholder service, complaint handling, simple service requests. - **Marketing** — Customer Insights for unified customer view across products and Customer Insights – Journeys for compliance-aware customer outreach. - **Claims customer service** — first-notice-of-loss capture, claims-status communication, customer-facing claims portal — separate from the claims back-office core. - **Underwriting workflow** — non-core underwriting workflow (assignment, document collection, decision routing) where the rating engine is in the policy admin system but the workflow orchestration sits in Dynamics 365. - **Distribution management** — broker / agent recruitment, training, performance management. ## Where Dynamics 365 doesn't fit Several insurance-specific systems remain specialist: - **Policy administration systems** — Guidewire PolicyCenter, Duck Creek Policy, Sapiens, Majesco. The system of record for policy data, premium calculation, billing, regulatory reporting. - **Underwriting / rating engines** — proprietary or vendor-supplied actuarial engines that calculate premium. - **Claims-core platforms** — Guidewire ClaimCenter, Duck Creek Claims. The system of record for claim transactions, reserves, payments. - **Reinsurance management** — specialist platforms for ceded reinsurance accounting. - **Actuarial reserving** — specialist tools for actuarial work. Dynamics 365 integrates with these systems; doesn't replace them. **Common patterns.** - **Producer (broker / agent) management.** Dynamics 365 Sales tracks the relationship with every producer. Performance metrics — policies sold, retention rate, loss ratio — surface from policy admin into Dataverse. Training tracking, licensing-currency monitoring, commission visibility all live in CRM. - **Customer portal.** Power Pages portal lets policyholders view policies, request quotes, file claims, view documents, update beneficiary information, pay premiums. The portal integrates with policy admin and claims systems for the underlying data. - **First Notice of Loss (FNOL).** Customer reports a claim through any channel — phone, web, mobile app, chatbot. Dynamics 365 Customer Service captures the FNOL with structured data and creates a case. The case routes to a claim-handler or auto-creates the claim in the claims-core system via integration. - **Quote and bind workflow.** For commercial lines especially, quoting often involves a workflow before the rating engine — capture exposures, route for underwriter review, request additional information, repeat with subjectivities resolved. Dynamics 365 + Power Automate orchestrates the workflow; the rating engine calculates premium. - **Renewal motion.** Policy renewals are an annual sales motion. Dynamics 365 Sales drives the renewal campaign with retention-at-risk indicators, automated outreach, broker collaboration. ## Microsoft Industry Cloud for Insurance Accelerator providing: - **Data models** aligned with insurance industry concepts. - **Underwriting workflow accelerators**. - **Claims management accelerators**. - **Broker collaboration portal**. - **Compliance accelerators**. **Regulatory considerations.** - **Insurance-conduct regulations** — IDD (EU), state insurance commissioners (US), FCA (UK), local regulators in most jurisdictions. Suitability, transparency, complaint-handling, data-protection. - **Solvency II (EU)** — capital and reporting regulation; affects how data flows from policy admin to actuarial. - **GDPR** — broad privacy obligations. - **Anti-money-laundering** — for life insurance and pension products. Microsoft compliance certifications applicable; insurance-specific configuration is the customer's responsibility. **Common architecture pattern.** - **Policy admin platform** — system of record for policies, premium, billing. - **Claims-core platform** — system of record for claims. - **Dynamics 365** — agent / broker / customer relationship management and workflow. - **Microsoft Fabric** — analytics combining all of the above. - **Microsoft Purview** — compliance governance. ## Operational reality Insurance implementations are integration-heavy. Spend serious design time on what flows between Dynamics 365 and the policy / claims systems, with reconciliation discipline so the two never drift. --- # Dynamics 365 for manufacturing How Dynamics 365 fits manufacturing — Business Central vs Supply Chain Management, discrete vs process, and the typical software stack. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-manufacturing Section: Industries Published: 2026-05-01 Manufacturing is one of Dynamics 365's deepest verticals. Microsoft offers two distinct paths depending on the size and complexity of the operation: **Business Central Premium** for SMB manufacturing, and **Dynamics 365 Supply Chain Management** for enterprise. Choosing the right one early is essential. ## Business Central Premium The right fit for SMB manufacturers — typically under a couple of hundred employees, single-site or small multi-site, discrete or light process. Capabilities cover production BOMs (with versioning), routings with work and machine centres, MRP via the planning worksheet, production order lifecycle (planned → firm-planned → released → finished), consumption and output journals, subcontracting, and assembly orders for kit-style work. Service Management (in Premium) covers after-sales install/maintain operations. Where BC manufacturing fits: assembly, light process (food, cosmetics), make-to-order job shops, custom equipment, kits. Where it gets tight: complex multi-step process recipes, sub-assembly nesting more than two or three levels deep, finite scheduling at shop-floor level, high-volume scheduling complexity, regulatory traceability beyond batch/lot tracking. ## Dynamics 365 Supply Chain Management The right fit for enterprise manufacturing. Discrete, process (formula-based), and lean modes can coexist. Master planning runs on Planning Optimization at scale. Manufacturing execution covers complex BOM structures, multi-mode production, batch attributes, catch weight (for variable-yield process), engineering change management, advanced quality, asset management (maintenance work orders), and tight integration to Demand Planning for forecast-driven supply. ## Common add-ons Both BC and SCM are typically extended for manufacturing operations: - **Shop-floor data collection** — MES integration or partner apps for production logging. - **Finite scheduling** — Production Scheduling Add-In, MRP/CRP combiners, or third-party APS. - **Quality management** — non-conformance, supplier quality, calibration tracking. - **Engineering change orders** — for high-control engineering-led businesses. - **PLM integration** — connectors to PTC Windchill, Siemens Teamcenter, Autodesk Vault for product master synchronisation. - **Traceability** — regulated industries (food, pharma, aerospace, medical devices) need richer traceability than the base; partner extensions deliver. ## Cross-cutting Both paths share the same Power Platform, Microsoft 365, Power BI, and Copilot story. Both integrate with Field Service for after-sales, with Customer Insights for marketing, and with Project Operations for service-and-install businesses. ## Where to start Manufacturers in the 50–250 employee band start with BC Premium and may grow into SCM over time. 250+ headcount or genuinely complex operations start in SCM. Either way, expect the manufacturing scope of an implementation to be the longest and most carefully tested component. ## Where to go next Product depth: [Business Central manufacturing](https://www.solvingdynamics365.com/guides/business-central-manufacturing) for the SMB tier and [discrete vs process vs lean in F&O](https://www.solvingdynamics365.com/guides/discrete-vs-process-vs-lean-manufacturing-in-f-and-o) for the enterprise tier. Process guides: [shop floor control](https://www.solvingdynamics365.com/guides/dynamics-365-for-manufacturing-shop-floor-control) and [engineer-to-order and configure-to-order](https://www.solvingdynamics365.com/guides/dynamics-365-for-manufacturing-eto-and-cto). Microsoft's packaging is [Microsoft Cloud for Manufacturing](https://www.solvingdynamics365.com/guides/microsoft-cloud-for-manufacturing). --- # Dynamics 365 for media and entertainment How Dynamics 365 fits media companies — publishers, broadcasters, streaming services, sports — advertising sales, audience engagement, rights management. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-media-and-entertainment Section: Industries Published: 2026-08-23 Media and entertainment — broadcasters, publishers, streaming services, sports leagues and clubs, music labels, film studios — combines complex revenue streams (advertising, subscriptions, syndication, licensing), audience engagement at consumer scale, intellectual property management, and a constantly disrupted business model. Dynamics 365 plays specific roles in the media stack. **Where Dynamics 365 fits in media.** - **B2B advertising sales** — Dynamics 365 Sales for the advertiser / agency relationships; complex deal structures with multiple media products bundled. - **Subscription customer engagement** — Customer Service for subscriber support; Customer Insights for unified subscriber view across products. - **Audience marketing** — Customer Insights – Journeys for engagement, retention, win-back campaigns. - **Talent and contributor management** — Sales / Customer Service for the relationship with on-air talent, freelancers, contributors. - **Sponsorship management** — Sales for sponsor relationships, integration with rights / inventory systems. - **Field service** — for technical operations (transmission infrastructure, IT for events / venues). - **Corporate finance** — Finance / Business Central for the corporate back office. ## Where Dynamics 365 doesn't fit Several media-specific systems dominate: - **Ad sales / inventory management** — operative systems like Operative, Imagine, FreeWheel, Smart, MediaOcean. Programmatic ad platforms (DSPs / SSPs). The system of record for what ad spots / digital impressions are sold to whom at what price. - **Subscription / subscriber management** — billing platforms (Zuora, Stripe Billing, specialist platforms) for high-volume subscription operations. - **Content management / DAM** — digital asset management for media files. Specialist platforms. - **Editorial / publishing systems** — for newspapers, magazines, online publishers. - **Broadcast automation** — for traffic, scheduling, playout. Highly specialised. - **Royalty / rights management** — for music, film, TV, sports IP. Specialist platforms. Dynamics 365 integrates with these; doesn't replace them. **Common patterns.** ## B2B ad sales Selling advertising to brands / agencies involves: - **Pipeline management** — opportunities for upcoming campaigns; multi-quarter visibility. - **Multi-product proposals** — TV spots + digital + sponsored content + experiential bundled into one deal. - **Inventory checks** — does the inventory exist for the proposed package? Integration to ad inventory systems. - **Pricing complexity** — rate cards, package discounts, agency commissions, make-good provisions. - **Approval workflows** — large deals require legal / leadership sign-off. - **Contract generation** — Word-templated contracts with merge from CRM data. - **Revenue recognition** — campaigns deliver over time; revenue recognises per ASC 606 / IFRS 15. Dynamics 365 Sales runs the pipeline; specialist ad systems handle the inventory; Finance handles revenue recognition. ## Subscriber engagement Streaming services, news subscriptions, sports memberships: - **Subscriber acquisition** — Customer Insights – Journeys for acquisition campaigns; integration to subscriber DB. - **Onboarding** — welcome series, product education, engagement nudging. - **Retention** — predict churn (Customer Insights – Data); intervene with personalised offers. - **Win-back** — campaigns to lapsed subscribers. - **Subscriber service** — Customer Service for support; integration to subscriber DB and content systems for context. ## Sports clubs and leagues Operationally rich: - **Ticket sales** — through specialist ticketing platforms; Dynamics 365 CRM as the relationship layer. - **Hospitality and corporate boxes** — Sales for premium-experience sales. - **Sponsorship management** — Sales for sponsor relationships, deliverables, performance reporting. - **Player and staff management** — HR for the organisation; specialist platforms for athlete performance. - **Fan engagement** — Customer Insights for unified fan profile; CI – Journeys for marketing. - **Merchandise** — separate e-commerce platforms; CRM ties the fan to merchandise behaviour. **Newspapers and online publishers.** - **Subscriber management** — recurring revenue management. - **Advertiser sales** — print, digital, podcast ad sales. - **Reader engagement** — paywall, registration, content recommendation. - **Editorial systems** — specialist CMS / production systems. ## Content licensing Distributors selling content rights (film studios licensing to streaming services, music labels licensing tracks): - **Rights deals** — complex contracts with territory, channel, duration restrictions. - **Royalty calculation** — based on usage / impressions / sales. - **Counterparty management** — long-term relationships with platforms. Dynamics 365 Sales manages the relationship; specialist rights-management platforms handle the operational complexity. ## Customer Insights as the unification layer Media companies typically have customer data scattered across: - Subscription system (paying subscribers). - Marketing automation (campaign engagement). - Ad serving (ad-side audience). - Content consumption (what they watched / read / listened). - App analytics (mobile behaviour). - Loyalty / membership (engagement). CI – Data unifies the picture; downstream uses include programmatic ad targeting, personalisation, churn prediction. **Architecture pattern.** - **Ad inventory and trafficking** — specialist platform. - **Subscriber DB / billing** — specialist platform. - **Content / DAM** — specialist platform. - **Dynamics 365 Sales / Service** — B2B advertiser relationships, sponsor management, subscriber service. - **Customer Insights** — unified audience view across products and channels. - **Customer Insights – Journeys** — audience marketing. - **Microsoft Fabric** — analytics combining audience, content, monetisation data. ## Operational reality Media Dynamics 365 implementations are characterised by deep integration to industry-specific platforms. The value sits in the audience unification, B2B relationship management, and marketing layers. Don't expect Dynamics 365 to replace the highly specialised ad / subscription / rights systems; design the architecture to make them work together. --- # Dynamics 365 for mining How Dynamics 365 serves the mining sector — equipment-heavy operations, contractor management, royalty accounting. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-mining Section: Industries Published: 2026-05-01 Mining is an asset-heavy, contractor-heavy, regulation-heavy industry where Dynamics 365 plays a meaningful role in the commercial and supporting operations, but where specialty systems (fleet management, mining geology, real-time operational technology) dominate the core extraction work. Understanding the boundary is essential for sensible deployments. **Where Dynamics fits in mining.** - **Commercial operations** — sales of refined product to customers. - **Procurement and supply chain** — long lead times, high-value parts. - **Maintenance management** — heavy equipment uptime is critical. - **Field service** — remote mine site servicing. - **Project Operations** — capital projects, exploration. - **Finance** — royalty accounting, multi-currency, multi-jurisdiction. - **HR** — workforce, including contractor management. - **Sustainability** — emissions, water, tailings, community. **Where specialty systems dominate.** - **Mine planning** — Maptek Vulcan, Hexagon MineSight, Datamine. - **Fleet management** — Cat MineStar, Wenco, Modular Mining. - **Geological data** — assays, drillholes, ore bodies. - **Plant control / SCADA** — for mineral processing. These integrate with Dynamics for commercial and financial reporting but operate independently for day-to-day operations. ## Heavy equipment management Mining trucks, shovels, excavators, drills are some of the most expensive equipment in any industry: - **Asset cost** — millions per vehicle. - **Daily utilisation cost** — tens of thousands per day per truck. - **Maintenance cost** — significant fraction of opex. - **Downtime cost** — production loss. Dynamics 365 Field Service + Asset Management module handles preventive and corrective maintenance: - Calendar-based PM schedules. - Hours-based PM (every 500 operating hours). - Predictive maintenance from IoT data. - Parts management across remote sites. ## Contractor management Mining is heavily contracted: - **Mining contractors** — third parties operating equipment, sometimes the whole mining function. - **Construction contractors** — for capital projects. - **Specialty contractors** — drilling, blasting, surveying. Each contractor relationship involves: - Contract management. - Compliance verification (safety, insurance). - Workforce tracking. - Billing and payment. - Performance management. Project Operations handles project work; vendor management in F&O handles the commercial side; specialty workforce-tracking systems integrate. ## Royalty accounting Mineral royalties are common: - **Government royalties** — paid to country/state/province based on production volume. - **Private royalties** — to land owners or holders of mineral rights. - **Joint venture interests** — shared production allocated by interest. Royalty calculation requires: - Production volumes per mineral. - Market prices per period. - Currency conversion. - Tax treatment. Specialty extensions on F&O handle royalty automation; without them, manual journals each period. ## Multi-currency and multi-jurisdiction Mining companies operate across countries: - **Cost reporting** — in functional currency per entity. - **Consolidation** — to parent currency. - **Transfer pricing** — between affiliated entities. - **Country-specific compliance** — varies widely. F&O's intercompany features and consolidation support this. Cross-jurisdiction nuances often require partner expertise per country. **Supply chain complexity.** - **Remote locations** — mines often far from suppliers. - **Long lead times** — months for some equipment parts. - **Stockholding** — significant spare parts inventory at site. - **Procurement complexity** — capital and operational procurement together. - **Logistics** — transportation across difficult terrain. F&O's full supply chain functionality supports this, with planning sometimes augmented by mining-specific extensions for site replenishment optimisation. ## Customer engagement for product sales Mining sells to: - **Smelters and processors** — bulk commodity sales. - **Trading houses** — intermediaries. - **End industrial buyers** — direct relationships. Sales contracts often: - Multi-year offtake agreements. - Price formulas (linked to market indices). - Quality specifications. - Delivery schedules. Customer Engagement + Sales handles the commercial side; complex contract management may layer specialty CLM (Contract Lifecycle Management) tools. ## Environmental, Social, Governance (ESG) Mining faces intense ESG scrutiny: - **Emissions tracking** — Scope 1, 2, 3. - **Water usage** — local stress and discharge quality. - **Tailings management** — high-stakes; recent disasters elevated industry attention. - **Community engagement** — social license to operate. - **Indigenous rights** — first nation consultations. Microsoft Sustainability Manager + custom processes in Dataverse support ESG data management; reporting feeds into corporate sustainability reports. ## Health and safety Mining is among the most hazardous industries: - **Incident tracking** — every incident logged, investigated, root cause. - **Near-miss reporting** — leading indicator. - **Safety training records** — required certifications. - **Equipment inspections** — pre-shift, daily. Dynamics handles records and workflow; specialty EHS systems often integrated for in-depth analysis. **Common partner solutions.** - **PolyMet (Wipfli, others)** — mining-specific Business Central extensions. - **Royalty management partners** — specialty royalty calculation. - **Country-specific** — mining is regionally regulated. **Common pitfalls.** - **Trying to do mine planning in Dynamics.** Specialty systems are deeper. - **Underestimating royalty complexity.** Manual processes seem fine until volume scales. - **Fleet management ignored.** Equipment uptime is critical; Dynamics Field Service alone insufficient for fleet-grade operations. - **ESG data scattered.** Reports compiled manually from multiple systems; effort high, quality variable. - **Contractor management gaps.** Compliance lapses lead to incidents and liability. ## Strategic positioning Dynamics 365 in mining occupies the commercial and supporting operations layer; specialty mining systems handle the operational technology. Successful deployments understand this boundary and architect integrations rather than trying to force Dynamics into roles it's not designed for. For mid-sized mining companies, Dynamics covers a broad swath of needs cost-effectively; for the largest, it's typically one component among many specialty platforms. The investment is meaningful but pays back through: - Operational efficiency in maintenance and procurement. - Cleaner financial reporting across multi-jurisdiction operations. - Better contractor management. - Improved ESG data and reporting. Choose partners with mining domain expertise; generic Dynamics partners often underestimate the industry-specific demands. --- # Dynamics 365 for nonprofits How Dynamics 365 fits nonprofit organisations — fund accounting, donor management, grants, and the Microsoft Nonprofits offering. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits Section: Industries Published: 2026-05-01 Nonprofits have a distinctive software shape: fund accounting rather than for-profit P&L, donor management with stewardship cadences, grant tracking with restricted-use compliance, and a chronic tension between programme delivery and administrative overhead. Microsoft addresses this through a combination of standard Dynamics 365 products, the **Cloud for Nonprofit** offering, and a strong partner ecosystem. ## Microsoft Cloud for Nonprofit Microsoft publishes a Cloud for Nonprofit accelerator that adds nonprofit-specific data models, applications, and templates on top of Dynamics 365: - **Constituent management** — donors, members, volunteers, beneficiaries on Dataverse. - **Donation management** — pledges, gifts, recurring donations, gift acknowledgment. - **Volunteer management** — sign-ups, hours tracking, recognition. - **Award and grant management** — both incoming (received grants) and outgoing (grants you award). - **Program impact tracking** — outcomes, beneficiaries served, program effectiveness reporting. The accelerator is a Dataverse solution; nonprofits with Sales or Customer Service can install it on their existing environment. ## Fund accounting Nonprofits in the US, UK, and elsewhere typically need fund accounting — tracking income, expense, and balances by restricted vs unrestricted funds. **Dynamics 365 Finance** with Public Sector features handles enterprise fund accounting natively. **Business Central** plus a nonprofit ISV (Serenic Navigator, Catapult ERP, Sparkrock) adds fund-accounting capability for SMB nonprofits. ## Donor management **Dynamics 365 Sales**, configured with the Cloud for Nonprofit constituent model, runs donor relationship management — donor profiles, contribution history, communication preferences, cultivation tracking, major-gift pipelines (a sales pipeline for fundraising). Larger nonprofits often add a specialist fundraising platform (Salesforce.org, Raiser's Edge, Bonterra) and integrate. ## Grants management Outgoing grants — for foundations and re-granting organisations — are tracked as projects, with applications, approvals, disbursement schedules, reporting requirements, and outcomes. Incoming restricted grants link the income to designated funds. ## Volunteer management Volunteer hours, role assignments, training, and recognition. Often delivered through Power Apps over the Cloud for Nonprofit data model, with mobile capture for in-field volunteers. ## Pricing Microsoft offers **substantial nonprofit pricing discounts** on Dynamics 365 and the Power Platform for qualifying organisations — often 60% off the commercial list price, plus the donated Microsoft 365 grants for some smaller organisations. Always check Cloud for Nonprofit eligibility before signing commercial pricing. ## Integration with finance Donations recorded in CRM flow to the back-office accounting system. Many nonprofits run BC plus a fundraising CRM (either Cloud for Nonprofit on Dataverse, or a specialist platform). ## Where to start A small nonprofit (under 50 staff) often does well with **Business Central + Cloud for Nonprofit on Sales + Power BI for reporting**. Larger nonprofits step up to **Finance + Cloud for Nonprofit + Customer Insights**. The accelerator is the constant. ## Where to go next Microsoft's packaging is [Microsoft Cloud for Nonprofit](https://www.solvingdynamics365.com/guides/microsoft-cloud-for-nonprofit). The three processes that decide fit each have a guide: [fund accounting](https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits-fund-accounting), [donor management](https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits-donor-management), and [grant tracking](https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits-grant-tracking). The finance system most often on the same shortlist is compared in [Business Central vs Sage Intacct](https://www.solvingdynamics365.com/guides/business-central-vs-sage-intacct). --- # Dynamics 365 for pharma and life sciences How Dynamics 365 fits pharma manufacturers, distributors, and biotech — GxP-aware manufacturing, regulated traceability, HCP/HCO engagement. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-pharma-and-life-sciences Section: Industries Published: 2026-05-01 Pharma and life sciences combines manufacturing, distribution, and customer engagement under some of the strictest regulatory and quality requirements of any industry. Dynamics 365 covers parts of the picture; specialist tools cover others; the joint architecture is where most of the value sits. **Where Dynamics 365 fits.** - **Manufacturing and supply chain** — Supply Chain Management for production with formula-based recipes, batch-level traceability, expiry tracking, quality control, and warehouse operations. - **HCP/HCO engagement** — Dynamics 365 Sales (often with a life sciences ISV like Veeva-equivalent or Microsoft's Industry Cloud accelerators) for managing relationships with healthcare professionals (HCPs) and healthcare organisations (HCOs), including PhRMA-code-compliant sampling and call reporting. - **Customer service** — Customer Service for medical information enquiries, adverse-event-report intake, customer escalations. - **Clinical-trial-adjacent operations** — site supply, patient kit logistics, investigator-site relationship management (not the EDC system itself). - **Field service** — for equipment serviced at hospitals or labs, including cold-chain monitoring of diagnostic devices. ## Where Dynamics 365 doesn't fit The clinical operations stack — EDC (electronic data capture), CTMS (clinical trial management), regulatory submissions, pharmacovigilance core systems — uses specialist platforms (Veeva, Medidata, Oracle Health Sciences, Argus). Dynamics 365 integrates with these but doesn't replace them. ## Microsoft Industry Cloud for Life Sciences The healthcare-and-life-sciences-accelerator extension provides data models and accelerators specific to clinical research, R&D collaboration, manufacturing visibility, and HCP engagement. ## GxP and validation Pharma manufacturing operates under GxP (Good Manufacturing Practice, Good Laboratory Practice, etc.) regulations enforced by the FDA, EMA, and equivalents. Software supporting GxP processes must be **validated** — a documented process showing the system performs as intended and is under change control. Dynamics 365's role in GxP processes (releasing batches, recording quality data, controlling formulations) requires: - **Validation documentation** — IQ/OQ/PQ protocols, traceability matrices. - **Change control** — every configuration change tracked, tested, and approved. - **Audit trails** — immutable record of changes to GxP-relevant data. - **Electronic signatures** — 21 CFR Part 11 compliance for FDA-regulated operations. Power Platform supports electronic-signature workflows; the configuration matters. Customers running F&O for GxP manufacturing partner with specialist validation consultants to produce the required documentation. ## Traceability Pharma supply chains require serial-level traceability — every package serialised with a unique identifier (e.g. GS1 SGTIN), aggregated into cases and pallets, with chain-of-custody recorded at every transfer. Regulations like the US **DSCSA**, EU **FMD**, and equivalents require this. F&O's batch and serial tracking covers parts; specialist serialisation platforms (RfXcel, TraceLink) handle the rest, integrated with F&O. ## Cold chain Many pharma products require temperature-controlled storage and transport. SCM's transportation and inventory management track the products; IoT integration through Connected Field Service captures real-time temperature telemetry; deviations trigger alerts and investigations. ## HCP sampling PhRMA Code (US) and equivalents require detailed sampling records — every sample drawn, every sample distributed, signature of the receiving HCP. Sales applications configured for pharma capture this. Specialist HCP-sampling ISVs exist for the most demanding configurations. ## Adverse event reporting Customer Service can intake adverse-event reports (a regulatory obligation), routing them to the customer's pharmacovigilance system for case processing and submission. ## The architecture pattern Most pharma customers run F&O for the GxP-relevant manufacturing and distribution, Dynamics 365 CRM apps for the commercial and customer-engagement side, and specialist platforms for the deep clinical and regulatory operations — with disciplined integration between them. ## Operational reality Pharma implementations are heavy on validation, change control, and audit. Budget time and discipline accordingly. --- # Dynamics 365 for professional services How Dynamics 365 fits professional services — Project Operations, Sales, time/expense, billing, and the integration with Business Central or Finance. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-professional-services Section: Industries Published: 2026-05-01 Professional services — consulting firms, agencies, IT services, engineering services, architects, accountants — have a specific software shape: they sell people's time, deliver against project plans, capture time and expense, bill complex contracts, and report on utilisation and margin. Dynamics 365 covers it through the combination of **Sales**, **Project Operations**, and either **Business Central** or **Finance** for the back office. **The shape.** - **Sales** runs the opportunity pipeline — prospects, qualified opportunities, won deals, lost analysis. - **Project Operations** handles the project lifecycle from contract to delivery — WBS, resourcing, time and expense, milestone billing. - **Business Central** (for SMB firms) or **Finance** (for larger firms) takes the resulting invoices into general ledger and AR. The integration between these is configured, not custom — Microsoft ships standard integrations for the common patterns. ## Sales side Pursuit of services deals through opportunities, with quoting that includes project phases, named or generic resources, expected hours per role, and pricing. Quotes can include retainers, milestone schedules, capped time-and-materials, and fixed-price components in the same contract. ## Resourcing A **resource hub** in Project Operations shows availability by skill, location, cost rate, and time. Resource managers assign named resources to confirmed projects; sales pre-assigns generic roles to pipeline opportunities for capacity planning. ## Time and expense Consultants enter time on a weekly **time sheet** against project tasks, with billable/non-billable classification. Expenses come in with receipt photos, policy compliance (per-diem limits, mileage rates), approval workflow, and reimbursement integration. ## Billing The hard part of professional services software. Project Operations supports complex billing scenarios: time-and-materials with capped budgets, milestone-based invoicing, retainer drawdown, fixed-price with progress recognition, and combinations on a single contract. Invoices stage through review and then post to BC or Finance for collection. ## Revenue recognition ASC 606 / IFRS 15 compliance. Project Operations defers and recognises revenue per the contract's performance obligations — straight-line for retainers, percentage-of-completion for fixed-price, on-billing for T&M. The financial postings land in the GL through the back-office system. ## Utilisation and margin reporting Pre-built Power BI dashboards cover the metrics professional services firms live by: billable utilisation per consultant, project margin, backlog, revenue per FTE, time-to-bill. **Variants.** - Small/medium firms (under 50 consultants) often start with **BC + Project Operations Lite** — simpler, faster to deploy, BC as the accounting backbone. - Larger firms move to **Finance + Project Operations** with the F&O accounting stack. - Pure consulting/agency teams without complex back-office needs sometimes run **Sales + Project Operations** alone, with a simple accounting integration to QuickBooks or Xero. ## Where the value compounds Tying the Sales pipeline to Project Operations resourcing means revenue forecasts are real — based on actual people-availability, not optimistic spreadsheets. ## Where to go next The core product is [Project Operations](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-project-operations), with [time and expense](https://www.solvingdynamics365.com/guides/project-operations-time-and-expense) as the daily surface. The two finance questions services firms fight over are covered in [revenue recognition](https://www.solvingdynamics365.com/guides/dynamics-365-for-professional-services-revenue-recognition) and [utilisation reporting](https://www.solvingdynamics365.com/guides/dynamics-365-for-professional-services-utilization-reporting). Smaller firms often start on [Business Central projects](https://www.solvingdynamics365.com/guides/business-central-projects). --- # Dynamics 365 for railways How Dynamics 365 serves railway operators — passenger CRM, freight, rolling stock maintenance, station operations. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-railways Section: Industries Published: 2026-05-01 Railway operations — passenger trains, freight, infrastructure — combine asset-intensive operations with customer-facing service. Dynamics 365 plays meaningful roles in customer relationship management, freight commercial operations, asset management, and back-office functions, alongside specialised railway systems for operations, signalling, and traffic management. **Railway sub-sectors.** - **Passenger rail** — commuter, intercity, high-speed. - **Freight rail** — bulk, intermodal. - **Infrastructure** — track, signalling, stations. - **Rolling stock manufacturing** — vehicle builders. - **MRO** — maintenance services. Dynamics 365 fits different scenarios in each. **Where Dynamics fits.** - **Passenger CRM** — frequent traveller relationship. - **Customer Service** — case handling, complaints. - **Freight commercial** — booking, shipping, billing. - **Field Service** — for station and infrastructure maintenance. - **Asset Management** — rolling stock as customer assets. - **Procurement and supply chain** — for parts and operations. - **Finance** — financial reporting. **Where railway-specific dominates.** - **Traffic management** — control centres, signalling. - **Train operations** — dispatching, scheduling. - **Rolling stock maintenance** — specialised RAM systems. - **Track and infrastructure** — engineering systems. - **Ticketing and reservations** — specialised passenger systems. Dynamics integrates with these but doesn't replace. **Passenger experience.** - **CRM** — frequent traveller management. - **Customer Service** — service disruptions, complaints, lost property. - **Marketing** — promotional campaigns, loyalty. - **Customer Insights** — passenger 360. - **Self-service portal** — Power Pages-based. Modern passenger rail competes on experience; CRM-driven personalisation matters. **Freight operations.** - **Customer onboarding** — shipper relationships. - **Quote / booking** for freight movements. - **Shipment tracking** integration. - **Billing** — freight invoice generation. - **Customer service** — for shippers. F&O for back-office financial; Dynamics CRM for relationships. ## Rolling stock as asset Each train / locomotive / coach: - Customer Asset record. - Asset hierarchy (locomotive → engine → components). - Maintenance schedules. - Lifecycle cost tracking. - IoT integration for condition monitoring. Field Service handles operationally; specialised RAM systems for engineering deep work. ## Predictive maintenance Sensor-equipped rolling stock: - Vibration, temperature, wear data. - Predictive algorithms identify pending issues. - Maintenance work orders triggered. Connected Field Service integrates; specialised railway analytics complement. **Station operations.** - Station as a property. - Cleaning, maintenance, security work orders. - Retail tenants management. - Passenger flow analytics. Field Service + property management approach. **Compliance.** - **Safety regulations** — country-specific railway authorities. - **Equipment certifications.** - **Driver / engineer certifications.** - **Accident reporting** — incidents tracked. - **Environmental compliance.** Dynamics supports record-keeping; specialised compliance tooling for analysis. **Ticketing integration.** - Specialised ticketing systems (passenger reservations, mobile ticketing). - Integration to Dynamics for customer profile and revenue. - Loyalty integration. Real-time integration for status / disruption handling. ## Disruption management Service disruption — train cancelled or delayed: - Affected passengers identified. - Communications sent. - Compensation processing. - Operational re-planning in traffic management systems. Dynamics handles passenger-side; operational systems handle operational. **Multi-operator scenarios.** - Multiple operators on shared infrastructure. - Inter-operator settlement. - Different CRM systems integrated. Common in deregulated markets (UK, parts of EU); architectural challenge. **Sustainability.** - Rail is one of lowest-carbon transport modes. - Emissions per passenger-km / tonne-km tracking. - Reporting to passengers and regulators. Microsoft Sustainability Manager + rail-specific reporting. **Stations as assets.** - Major stations = significant real estate. - Tenants, retail, services. - Property management overlay. Specialised property management often layered. **Common partner solutions.** - **Rail-specific Dynamics partners** — limited but growing. - **Integration partners** for ticketing / RAM systems. Rail-specific expertise valuable but harder to find than mainstream industries. **Common pitfalls.** - **Trying to do traffic management in Dynamics.** Wrong tool; real-time signalling separate. - **Passenger data silos.** Multiple systems with passenger records; unification gap. - **Asset hierarchy oversimplified.** Rolling stock complex; flat model loses value. - **Disruption communication manual.** Mass cancellation events overwhelm without automation. - **Compliance after the fact.** Bolted on; expensive to retrofit. **Operational rhythm.** - **24/7 ops** — passenger trains. - **Continuous freight** — week-round. - **Maintenance cycles** — scheduled and condition-based. - **Monthly / quarterly compliance reporting.** ## Strategic positioning Rail is a complex industry with operational technology (signalling, traffic management) at its core. Dynamics 365 fits the customer-facing, commercial, and back-office layers; specialised systems handle operations. The architecture is integration-rich. For rail decision-makers: - Define which functions Dynamics handles vs operational systems. - Plan integration carefully — operational data real-time. - Choose partners with rail or transport experience. - Invest in passenger experience — increasingly the competitive dimension. The investment varies by operation type; passenger rail particularly benefits from modern CRM and customer engagement, where many rail operators lag mainstream industries. Dynamics is competitive choice for closing that gap. --- # Dynamics 365 for real estate How Dynamics 365 fits commercial and residential real estate — property management, lease accounting, tenant engagement, and the ISV ecosystem. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-real-estate Section: Industries Published: 2026-05-13 Real estate combines asset-heavy operations, complex tenant relationships, lease accounting with IFRS 16 / ASC 842 obligations, regulatory layers, and increasingly customer-experience expectations. Dynamics 365 plays specific roles in the real-estate software stack alongside specialist property-management platforms. **Where Dynamics 365 fits in real estate.** - **Lease accounting** — IFRS 16 / ASC 842 right-of-use assets and lease liabilities, with Dynamics 365 Finance's Asset Leasing module (see the IFRS 16 guide). The financial reporting side of leases. - **Tenant relationship management** — Dynamics 365 Sales for prospect-to-tenant pipeline, Customer Service for tenant support, Customer Insights for unified tenant profile. - **Vendor and contractor management** — Sales / Customer Service for the relationships with the trades and service providers that maintain properties. - **Maintenance and field service** — Field Service for dispatching maintenance technicians to properties, with the asset (property unit, equipment) modelled in the asset hierarchy. - **Sustainability tracking** — Microsoft Sustainability Manager for building emissions tracking, increasingly required by ESG regulations. - **Procurement and AP** — Finance / Business Central for purchasing supplies, services, capital projects. - **Investor relations** — Sales / Customer Service for capital-partner relationships (in fund-based or REIT structures). ## Where Dynamics 365 doesn't fit (without ISVs) Several real-estate-specific functions are typically not in core Dynamics 365: - **Lease administration** — the operational management of leases (move-ins, move-outs, renewals, rent rolls, escalations, common-area maintenance reconciliations). Specialist platforms — Yardi, MRI, RealPage, AppFolio — dominate this space. - **Property accounting** — many real-estate accounting requirements (tenant subsidies, escrow accounting, common-area expenses, rebillable charges) are specialised. Yardi / MRI handle these natively. - **Construction and project management** — capital projects to develop or renovate properties; specialist tools (Procore, ProjectMate, or generic project tools). - **Investment / fund management** — for REITs and real-estate private equity, specialist platforms manage investor relations, capital calls, distributions, fund accounting. ## Microsoft + real estate ISVs A number of Dynamics 365-native ISVs target real estate: - Property-management modules built on Dataverse for SMB property managers. - Lease-administration modules integrated with Finance's lease accounting. - Tenant-portal templates on Power Pages. - Facility-management add-ons for commercial real estate. For mid-to-large operators, the typical architecture is: - **Yardi / MRI / RealPage** as the property-management system of record. - **Dynamics 365 Finance** for corporate accounting and IFRS 16 lease accounting on the lessee side. - **Dynamics 365 Sales / Customer Service** for prospect and tenant relationship management. - **Field Service** for property maintenance dispatch. - **Power BI / Fabric** for integrated portfolio analytics combining property data and financial data. **Tenant engagement.** - **Tenant portal** on Power Pages — view lease, submit maintenance requests, pay rent, view invoices, request services. Increasingly expected by tenants in both commercial and residential markets. - **Mobile app** for residents — built on Power Apps canvas, integrated with the property-management system for real-time data. - **Customer service** — tenant support requests routed through Dynamics 365 Customer Service with the property and tenant context. ## Lease accounting specifically For real-estate companies, two sides of lease accounting matter: - **Lessor side** — accounting for the leases they grant to tenants. Revenue recognition, deferred rent, free-rent periods, tenant improvement allowances. Typically handled in the property-management system. - **Lessee side** — the company's own office leases, vehicle leases, equipment leases. IFRS 16 / ASC 842 capitalisation. Handled in Dynamics 365 Finance's Asset Leasing. ## Sustainability Increasingly material: - **Building emissions** — Scope 1 (on-site fuel, vehicles), Scope 2 (grid electricity), Scope 3 (tenant emissions, embodied carbon). Microsoft Sustainability Manager integrates. - **ESG reporting** — CSRD in the EU, similar emerging requirements globally. - **Energy performance** — for buildings under EPC / LEED / similar certifications. **Common architecture pattern.** - **Property management system** (Yardi / MRI / RealPage / similar) — system of record for properties, leases, tenants, rent. - **Dynamics 365 Finance** — corporate accounting, AP, AR, group consolidations. - **Dynamics 365 CRM** — relationships beyond the property-management system's scope. - **Field Service** — property maintenance. - **Microsoft Fabric** — integrated portfolio analytics. ## Operational reality Real estate implementations are integration-heavy. Don't expect Dynamics 365 alone to be the answer; design the architecture to bridge property management with corporate finance and customer relationships. --- # Dynamics 365 for rental businesses How Dynamics 365 supports rental businesses — equipment hire, vehicle rental, party hire, IT rental — with rental-specific extensions, asset tracking. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-rental-businesses Section: Industries Published: 2026-05-01 Rental businesses — companies that lease equipment, vehicles, tools, party supplies, IT, or anything else — operate on different principles than sales businesses. The same physical asset rents many times over its life; revenue accrues over rental duration; maintenance and downtime are operational core. Dynamics 365 doesn't have a native rental module but supports rental through field service patterns, project operations, and partner extensions. **Rental business characteristics.** - **Inventory as fleet** — each item is a serialised asset, not a fungible product. - **Time-based revenue** — daily, weekly, monthly rates. - **Reservations** — customers book for future periods. - **Outbound and return** — physical movement out and back. - **Maintenance between rentals** — inspection, cleaning, repair. - **Damage and wear** — assessed at return. - **Mid-rental issues** — service calls during rental. - **Long lifecycles** — equipment depreciates over years of rentals. These differ from sales meaningfully; standard product / inventory configuration doesn't capture them naturally. **Rental sub-sectors.** - **Construction equipment rental** — heavy machinery on contract terms. - **Vehicle / truck rental** — short-term and long-term hire. - **Party / event rental** — tables, chairs, marquees, kitchen. - **IT and AV rental** — laptops, displays, conference equipment. - **Tool rental** — handheld tools, smaller equipment. - **Specialty rental** — medical equipment, lab equipment, sporting goods. Each has nuances; partner extensions specialise. **Partner solutions for Dynamics 365.** - **DynaRent** — rental on Business Central; long-standing. - **Rental Service Center** — rental for F&O. - **Various regional specialists.** For serious rental deployments, partner solution is the path; building rental capability from scratch on standard D365 is rarely cost-effective. **Core rental data model.** - **Rental item** — the physical asset; serialised; tracks status (available, rented out, maintenance, retired). - **Rental contract / agreement** — what's being rented, by whom, when, at what rate. - **Rental reservation** — booking for future period. - **Outbound delivery** — physical handoff. - **Return** — physical receipt; inspection. - **Service activities** — maintenance between rentals. - **Damage assessment** — at return; billable to customer if applicable. ## Availability calendars A central rental concept: - Each asset has a calendar. - Periods marked as reserved, rented, available, maintenance. - New reservations check against the calendar. - Conflicts flagged. For fleet-scale operations (hundreds or thousands of similar assets), availability calculation is volume-aware — "I need 5 widgets next Tuesday" doesn't tie to specific assets until pick. **Pricing.** - **Daily / weekly / monthly rates** — different rates per period length. - **Distance-based** (for vehicles). - **Usage-based** (for some equipment — engine hours, miles). - **Discount structures** — long-term discounts, customer loyalty. - **Insurance and damage waivers** — additional line items. - **Delivery and pickup charges.** Pricing engines for rental need to handle the matrix of these inputs. **Outbound and return processes.** - **Outbound checklist** — equipment condition documented (photos, signatures). - **Customer signatures** — accept condition. - **Fuel level, mileage** — vehicle-specific. - **Return inspection** — condition comparison. - **Damage assessment** — billable items added to invoice. Mobile-friendly workflows essential — operations happen at depots and customer sites, not in offices. **Maintenance integration.** - **Between rentals** — inspect, clean, repair, restock. - **Scheduled maintenance** — by hours, miles, calendar. - **Reactive maintenance** — mid-rental service calls. Field Service capabilities apply; the rental partner extension typically extends Field Service for rental-specific patterns. **Invoicing.** - **Period-based** — monthly invoice for rentals active in the month. - **Contract-end** — invoice on return. - **Pre-paid** — upfront for short rentals. - **Recurring** — for long-term rentals. The variety needs flexible billing configuration. **Asset lifecycle.** - **Acquired** — purchased or leased to the rental company. - **Available** — ready for rent. - **Rented out.** - **Returned / maintenance.** - **Retired** — sold or scrapped at end of useful life. Tracking lifecycle state per asset enables fleet management decisions. ## Resale of rental assets Common business model: - Rental fleet refreshed periodically. - Older equipment sold to recover residual value. - Sale revenue separate from rental revenue. The integration with sales workflows transitions assets from rental fleet to disposal sale. **Utilisation metrics.** - **% time rented vs available** — the headline metric. - **Revenue per asset** — by category, by location. - **ROI per asset class** — informs purchasing. - **Days to next rental** — pipeline metric. Utilisation analysis drives fleet sizing decisions and equipment purchases. **Reservation engine specifics.** - **Hard vs soft reservations** — confirmed vs tentative. - **Reservation expiration** — soft holds expire if not confirmed. - **Substitution logic** — if requested specific asset unavailable, propose alternative. - **Multi-asset bookings** — book 5 things for a party; some availability per asset class. **Integration with the broader stack.** - **CRM** — customer relationships; preferred equipment, lifetime value. - **Finance** — revenue, AR, asset depreciation. - **Field Service** — maintenance and delivery. - **IoT** — telematics from rental vehicles and equipment. **Common pitfalls.** - **Generic D365 without rental extension.** Rental concepts forced into sales orders; reservations awkward. - **Calendar accuracy.** Calendars drift from reality; overbooking; customer disappointment. - **Maintenance backlog.** Returned equipment piles up unmaintained; availability drops. - **Damage assessment subjective.** Different staff assess differently; customer disputes. - **Pricing complexity.** Pricing matrix not properly modelled; under- or over-charging. - **No utilisation tracking.** Fleet sizing decisions made on intuition. ## Strategic positioning Dynamics 365 + rental partner extension is a viable choice for rental businesses. The depth of partner solution matters; evaluate carefully: - Industry fit (construction vs party vs vehicle vs IT). - Geographic coverage (regulatory differences). - Integration breadth (with CRM, Field Service, Finance). - Mobile capability (operations happen in the field). - Customer / dealer portal (Power Pages-based or partner-provided). For specialised rental businesses (large construction equipment, specialised AV), dedicated industry platforms compete. For broad rental categories with Microsoft footprint, Dynamics + partner is competitive. The choice depends on partner depth and existing tech investment. Rental is one of those niches where the right partner makes or breaks the deployment. Invest in partner selection; rental capability isn't a generic Dynamics consultant's strength. --- # Dynamics 365 for retail How Dynamics 365 fits retail — Commerce for omnichannel, Business Central for SMB retailers, and the typical retail stack. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-retail Section: Industries Published: 2026-05-01 Retail is one of Dynamics 365's most complete and most demanding verticals. Microsoft offers two distinct retail paths: **Dynamics 365 Commerce** for omnichannel mid-to-enterprise retail, and **Business Central + retail ISVs** for SMB retailers. ## Dynamics 365 Commerce Microsoft's full omnichannel retail platform, built on the Finance and Operations stack. Capabilities span: - **Head office merchandising** — product hierarchy, assortments, channel pricing, promotions, multi-currency. - **In-store POS** — Modern POS for Windows tills and Cloud POS for browsers; both work offline with local store databases and sync to head office. Hardware support for cash drawers, receipt printers, scanners, and payment terminals. - **E-commerce** — first-party platform with content management, B2C storefronts, B2B portals, search, and configurable themes. Many customers replace the front end with a headless approach using Commerce APIs. - **Omnichannel order management** — buy online pick up in store, ship from store, return anywhere, multi-channel inventory visibility. - **Clienteling** — store-associate tools that show customer profile, history, preferences, and personalised recommendations. - **Loyalty** — multi-tier programs, points, redemption, and cross-channel application. Commerce is the right answer for retailers running 10 to thousands of stores, with serious omnichannel ambitions and the scale to support an enterprise implementation. ## Business Central plus retail ISVs For SMB retailers (one to fifty or so stores, simpler omnichannel needs), BC plus a retail ISV is usually the right fit. Common ISV partners deliver POS apps that run on tablets or PC tills, e-commerce connectors (Shopify is Microsoft's first-party option; partner connectors exist for WooCommerce, Magento, BigCommerce), and lightweight clienteling. ## E-commerce SMB retailers most commonly run Shopify or WooCommerce as the storefront and connect to BC via the first-party Shopify connector or an ISV connector. The integration covers product catalog publishing, order import, inventory sync, and payment matching. ## Inventory Retail demands accurate, real-time inventory visibility. BC and SCM both support multi-location inventory; Commerce adds in-store, store-back-of-house, and warehouse with serial/lot tracking. Cycle counting via mobile scanning is standard. ## Customer engagement Retail customers expect personalised experiences. Marketing campaigns run through **Customer Insights – Journeys**; customer data platforms unify in-store, e-commerce, and loyalty data through **Customer Insights – Data**. ## Payments and tax Retail payment processors are integrated through certified connectors. Tax handling for retail is complex (sales tax in the US, VAT/GST elsewhere) and typically uses a tax engine like Avalara or Vertex on top of the standard BC/SCM tax module. ## Where the wins come from Retail succeeds when checkout is fast, inventory is accurate, and customer history follows the customer across channels. Optimise for those three. ## Where to go next The enterprise platform is [Dynamics 365 Commerce](https://www.solvingdynamics365.com/guides/dynamics-365-commerce-explained), and its architecture is [unified commerce](https://www.solvingdynamics365.com/guides/dynamics-365-for-retail-unified-commerce-architecture) with process guides such as [click and collect](https://www.solvingdynamics365.com/guides/dynamics-365-for-retail-click-and-collect). For smaller retailers, [integrating Business Central with Shopify](https://www.solvingdynamics365.com/guides/integrating-business-central-with-shopify) is the common shape. Microsoft's packaging is [Microsoft Cloud for Retail](https://www.solvingdynamics365.com/guides/microsoft-cloud-for-retail). --- # Dynamics 365 for shipping and maritime How Dynamics 365 serves shipping and maritime — vessel operations, port logistics, customs, freight forwarding. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-shipping-and-maritime Section: Industries Published: 2026-05-01 The shipping and maritime industry — ocean cargo, port operations, freight forwarding, vessel management — moves global commerce. Dynamics 365 plays roles in commercial operations, financial reporting, and customer-facing operations; specialised maritime systems handle vessel-specific operations, port management, and customs. **Industry sub-sectors.** - **Ocean carriers** — container lines, bulk shipping, tankers. - **Freight forwarders** — coordinate cargo movement. - **Port operators** — terminals and stevedoring. - **Shipping agencies** — local representation. - **Marine insurance.** - **Vessel management** — chartering, crewing, technical. Dynamics fits across these in varying ways. **Where Dynamics fits.** - **Commercial sales** — chartering, booking, customer relationships. - **Customer Service** — claim handling, customer queries. - **Finance** — freight billing, revenue recognition, multi-currency. - **HR** — workforce, especially for office staff. - **Procurement** — fuel, parts, services. - **Project Operations** — for project cargo or unique voyages. **Where maritime-specific dominates.** - **Vessel operations** — port calls, voyage planning, fuel optimisation. - **Container tracking** — global container fleet management. - **Cargo handling** — terminal operations. - **Customs** — country-specific clearance. - **Bunkering** — fuel logistics. - **Crew management** — STCW compliance, certifications. Dynamics integrates with these but doesn't replace. **Common partner solutions.** - **DBS Software** — maritime-focused Dynamics extensions. - **Industry-specific shipping platforms** — CargoWise, Inttra (legacy). - **Custom integrations** for chartering systems. For serious maritime deployments, specialist partner expertise essential. ## Freight forwarding A subset where Dynamics fits more directly: - **Customer relationships** (shipper, consignee). - **Quote-to-cash** for forwarding services. - **Service management** for customs / brokerage. - **Profitability per shipment.** F&O + Project Operations can model freight forwarder operations effectively. ## Multi-currency at scale Maritime is intrinsically multi-currency: - Freight rates in USD typically. - Costs in many local currencies. - FX hedging. - Currency exposure reporting. F&O's currency handling supports; specialty treasury for hedging. ## Bunkering Fuel: - Major cost (often 30%+ of vessel operating cost). - Multiple suppliers and ports. - Price volatility. - Procurement optimisation. Specialty bunker procurement tools layer on Dynamics for vessel operators. **Maritime regulations.** - **IMO (International Maritime Organisation)** — global rules. - **MARPOL** — pollution prevention. - **SOLAS** — safety. - **ISM Code** — safety management. - **Sulphur cap and emissions.** - **Sanctions compliance** — economic sanctions on routes / cargo. Compliance integrates with vessel operations; reporting captured in Dynamics or specialty systems. **Vessel as cost centre.** - Each vessel as a Dynamics project or cost centre. - Costs tracked. - Revenue per voyage. - Profitability per vessel. The structure depends on the operation; charter vs owned vs leased differ. ## Cargo claims When cargo damaged: - Claim created (Customer Service case). - Investigation. - Surveyor involvement. - Settlement or dispute. Dynamics + specialty claims systems for high-volume operators. ## Port operations Different domain: - Terminal management systems (TOS) primary. - Dynamics for commercial / customer / financial. - Integration between them. For pure port operators, TOS is core; Dynamics adjacent. **Booking and quote management.** - Customer requests freight quote. - Quote with rates, sailings, transit time. - Booking confirmation. - Documentation (BL, manifest). Dynamics Sales handles quote workflow; documentation often in specialty systems. ## Tracking integration Customers want shipment visibility: - Container tracking from carriers. - Vessel location. - ETA updates. Real-time integrations expose data through customer portals (Power Pages). **Sustainability and emissions.** - IMO carbon intensity rules. - Per-voyage emissions calculation. - ESG reporting. Microsoft Sustainability Manager fits; maritime-specific tooling complements. **Common pitfalls.** - **Trying to do TOS in F&O.** Wrong tool; container handling is real-time operations. - **Quote-to-invoice gaps.** Quotes informal, invoices manual; pricing leakage. - **No vessel profitability view.** P&L by vessel hard to derive. - **Sanctions screening missed.** Embargoed countries / parties; legal exposure. - **Documentation silos.** Trade documents scattered across systems. **Operational rhythm.** - **Daily ops** — booking, tracking, customer service. - **Per-voyage** — profitability calculation. - **Monthly** — financial reporting. - **Quarterly** — strategic and regulatory. ## Strategic positioning Maritime is a complex, specialised industry where Dynamics 365 plays a meaningful but not dominant role. The right architecture integrates Dynamics with specialty maritime systems; each plays to its strength. For maritime decision-makers: - Define which functions Dynamics handles, which use specialty systems. - Choose maritime-experienced partners. - Plan integration architecture upfront. - Address compliance throughout, not as afterthought. The investment is meaningful; the operational complexity rewards careful design. Dynamics enables modern customer experience and clean financial reporting in an industry where many incumbents run on legacy systems — competitive edge for those who modernise. --- # Dynamics 365 for telecommunications How Dynamics 365 fits telecom operators — subscriber management, billing complexity, network operations, B2B sales. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-telecommunications Section: Industries Published: 2026-08-17 Telecommunications — mobile operators, fixed-line carriers, internet service providers, cable operators — combines massive consumer-grade subscriber bases, complex billing, network-asset-heavy operations, B2B enterprise sales, and intensifying competition. Dynamics 365 plays specific roles alongside the deeply specialised industry platforms that dominate telecom. **Where Dynamics 365 fits in telecom.** - **B2B customer relationship management** — Dynamics 365 Sales for enterprise customer accounts; the relationship layer above the technical service. - **Customer service** — Customer Service for support interactions; high-volume contact centre operations using Customer Service Voice / Omnichannel. - **Field service** — Dynamics 365 Field Service for technician dispatching — installations, repairs, customer-premises equipment maintenance. - **Sales force productivity** — Sales accelerator, Copilot for Sales, Customer Insights for enterprise-account engagement. - **Marketing and acquisition** — Customer Insights – Journeys for retention campaigns, upsell campaigns, churn prevention. - **Procurement and corporate operations** — Finance and Supply Chain Management for corporate back office; not the network OSS / billing. - **Vendor management** — Sales and AP for partner ecosystem (equipment vendors, content partners, channel partners). ## Where Dynamics 365 doesn't fit Telecom-specific systems dominate the operational stack: - **BSS (Business Support Systems)** — customer information system, rating and billing, order management, charging. Examples: Amdocs, Ericsson, Netcracker, CSG Systems. The system of record for subscribers and consumption-based billing. - **OSS (Operations Support Systems)** — network inventory, service activation, fault management, performance monitoring. Examples: Ciena, Nokia, Comarch. - **Mediation and rating** — high-volume real-time charging at network scale (millions of events per second). Specialist platforms with appropriate scale. - **Service activation** — automated provisioning to network equipment. Specialist. - **Customer self-service apps** — typically purpose-built mobile apps owned by the operator; Dynamics 365 may surface customer data into them but doesn't replace them. Dynamics 365 integrates with these systems; doesn't replace them. ## Microsoft Industry Cloud for Telecommunications Microsoft has invested in industry accelerators. Provides: - **Data models** aligned with telecom industry concepts (subscriber, account, service, plan, contract). - **Customer 360 accelerator** — unified view across CRM, billing, service. - **B2B telecom-specific sales process templates.** - **Integration patterns** to TM Forum standards. **Common patterns.** ## B2B account management Large enterprise customers — multi-national businesses with thousands of sites, government accounts, large institutions — represent disproportionate revenue. Dynamics 365 Sales runs their relationship: dedicated account managers, complex deal structures, multi-year contracts, MSAs and SOWs, services-led engagements. ## Mass-market customer service Consumer subscribers generate enormous service volume — billing questions, technical issues, service changes, complaints. Dynamics 365 Customer Service with omnichannel handles the contact centre; integration to BSS provides subscriber context; routing optimises for skill, language, priority. ## Network field service Telcos dispatch enormous field workforces — installing fibre, replacing equipment, fixing outages. Dynamics 365 Field Service runs the operational scheduling; integration to OSS provides network-side context; technicians use mobile apps with offline capability for site work. ## Customer Insights Telco subscriber data spans many systems — billing, CRM, network usage, marketing campaigns, app analytics. **Customer Insights – Data** unifies the picture; downstream uses include churn prediction, next-best-offer marketing, account health scoring. ## Win-back and retention Churn is the biggest financial lever in telco. Marketing-automation campaigns targeting at-risk customers (Customer Insights – Journeys with churn-prediction inputs from CI – Data) deliver retention offers at scale. **Regulatory considerations.** - **Customer-protection regulations** — telcos are heavily regulated; transparency, billing accuracy, complaint handling, vulnerable customer treatment. - **Privacy regulations** — extensive customer data triggers GDPR-equivalent obligations in most jurisdictions. - **Lawful intercept and data retention** — government-mandated capabilities in many countries. - **Network neutrality and content** — varying obligations by jurisdiction. - **Critical infrastructure** — telecom networks are designated critical infrastructure in many countries; cyber-security obligations apply. **Architecture pattern.** - **BSS** — system of record for subscribers, billing, charging. - **OSS** — system of record for network operations. - **Dynamics 365** — relationship, service, field-service, marketing layer. - **Customer Insights** — unified customer view bridging operational silos. - **Microsoft Fabric** — analytics combining the above. ## Operational reality Telecom Dynamics 365 implementations are integration-heavy; the value comes from the customer-experience layer above the technical operational systems. Don't expect Dynamics 365 alone to run the business; design the architecture that bridges customer engagement with technical operations. --- # Dynamics 365 for utilities How Dynamics 365 fits the utilities sector — customer service, field service, asset management, and integration with industry-specific systems. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-utilities Section: Industries Published: 2026-05-01 Utilities — electricity, gas, water, telecoms — combine high-volume customer service, asset-heavy operations, regulatory complexity, and increasingly the demands of clean-energy transition. Dynamics 365 plays specific roles in the utility software stack, with specialist platforms covering others. **Where Dynamics 365 fits in utilities.** - **Customer service** — high-volume customer-service operations: outage reporting, billing queries, service-change requests, complaint handling. Dynamics 365 Customer Service with omnichannel voice / chat / SMS handles the scale. - **Field service** — dispatching engineers for repairs, meter installations, inspections, new connections. Dynamics 365 Field Service with Connected Field Service and IoT integration is well-suited. - **Asset management** — pole, transformer, pipeline, substation, equipment lifecycle. Dynamics 365 Supply Chain Asset Management module handles this depth. - **Sales / B2B account management** — for commercial / industrial customers with negotiated contracts. Dynamics 365 Sales for the relationship side. - **Outage management coordination** — Customer Service workspace as the operational hub during outages, with field service dispatching repair crews. ## Where Dynamics 365 doesn't fit Several utility-specific systems remain specialist: - **Meter Data Management (MDM)** — handles meter reads, billing-grade interval data. Specialist platforms (Itron, Landis+Gyr, Oracle Utilities Meter Solution). - **Customer Information Systems (CIS) / Billing** — the system of record for utility billing. Oracle CC&B, SAP IS-U, Itron, etc. Major utilities use these; Dynamics 365 integrates with them. - **SCADA / EMS / DMS** — operational technology for grid management. Specialist platforms (GE Grid Solutions, Siemens, ABB). - **Geographic Information Systems (GIS)** — asset location and network topology. Esri ArcGIS is the dominant platform. - **Energy trading and risk management (ETRM)** — for utilities that trade energy. Dynamics 365 integrates with these; doesn't replace them. **Common patterns.** - **Omnichannel customer service** — utilities receive vast call volumes during outages. Dynamics 365 Customer Service with omnichannel voice, IVR, and chat handles the load; Copilot suggests responses; smart-routing escalates urgent cases. - **Outage management.** During major events (storms, infrastructure failures), the customer-service workspace becomes the central coordination point. Integration with OMS (Outage Management Systems) feeds outage data into Dynamics 365 so agents see real-time status. Customers calling get accurate ETAs. - **Connected Field Service.** Smart meters and IoT-instrumented equipment send telemetry. Anomalies (voltage swings, gas leaks, low water pressure) trigger work orders that dispatch engineers proactively, often before customers notice. - **Meter installation campaigns.** Mass meter rollouts (smart meter programmes) coordinate through Field Service for the appointment-and-installation logistics, with the meter data flowing to MDM for the energy-data layer. - **New connection workflow.** Customers requesting new service (new building, change of address) flow through a multi-step workflow: application, eligibility, surveys, work-order creation, installation, billing setup. **Regulatory considerations.** - **Customer-protection regulations** — most jurisdictions have strict rules around disconnection, vulnerable customer treatment, complaint handling, response times. Configure SLAs and workflows in line. - **Privacy regulations** — energy-consumption data is personal data under GDPR-equivalents; consent and retention matter. - **Critical infrastructure regulations** — increasingly utilities are designated critical infrastructure with security and resilience requirements (NIS2 in the EU, sector-specific in other regions). - **Carbon and renewable-energy reporting** — sustainability reporting requirements applicable to utilities. **Microsoft Cloud for Sustainability** integrates with utility operations for the emissions tracking side. ## Workforce and union considerations Utility field workforces are often unionised with complex shift premiums, overtime rules, and safety protocols. Field Service scheduling needs to honour these; integration with HR / payroll systems for the contractual side matters. ## Operational reality Utility implementations are slow, regulated, and risk-averse. Pilot carefully; validate extensively; budget realistically. The reward is operational efficiency in an industry where customer experience increasingly differentiates. --- # Dynamics 365 for wholesale distribution How Dynamics 365 fits wholesale distribution — multi-channel order capture, warehouse, e-commerce, EDI, and supplier integration. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-wholesale-distribution Section: Industries Published: 2026-05-01 Wholesale distribution sits naturally on Dynamics 365 — the data model (items, customers, vendors, orders) and the standard processes (order-to-cash, procure-to-pay, replenishment, warehouse) line up cleanly with how distributors actually work. The product choice and the add-on stack are what differ. **Product fit.** - **Business Central** is the natural choice for SMB distributors — under 200 users, regional or single-country, moderate SKU counts (under 50,000), single-warehouse or small multi-warehouse. - **Dynamics 365 Supply Chain Management** is the right answer for enterprise distribution — multi-country, very high SKU counts, complex demand planning, multi-warehouse with finite capacity, regulated industries. ## Multi-channel order capture Distributors typically receive orders from many directions: direct sales reps, customer service phone, e-commerce (B2B portals), EDI (large retail and OEM customers), marketplace integrations (Amazon, eBay), and direct API from large customers. Both BC and SCM consolidate these into a single sales order pipeline. ## B2B e-commerce A growing slice of distribution revenue. Customers expect a portal with their own pricing, account hierarchy, credit limits, order history, real-time stock visibility, and the ability to re-order quickly. Common architectures: BC + Sana Commerce, BC + Optimizely B2B, BC + custom Power Pages, or SCM + Dynamics 365 Commerce in B2B mode. ## Warehouse Distribution warehouses run from simple to highly automated. BC scales from basic posting to directed put-away and pick with bin-level control; SCM adds full enterprise WMS with handheld scanning, wave management, license plates, and slotting. Often combined with a 3PL or carrier connector (DHL, UPS, FedEx, PostNord, Bring, Schenker) via AppSource. ## EDI Wholesale to large retailers and OEMs almost always involves EDI. ISV solutions (Lanham, EDICOM, TIE Kinetix) handle trading-partner setup, document maps, and chargeback monitoring. Plan for ongoing partner onboarding effort. ## Pricing complexity Distributors often have customer-specific pricing, volume discounts, contract pricing, promotional pricing, and rebates. BC handles moderate complexity natively; complex schemes (multi-tier rebates, accruals, claims) typically need an AppSource add-on or move the customer into SCM where the trade allowance module covers more. ## Supplier integration Drop-ship, vendor-managed inventory, supplier portals, and supplier EDI for purchase orders and ASNs are standard expectations in mid-sized distribution. BC and SCM both support drop-ship natively; VMI and supplier portals usually come from ISVs. ## Demand planning SMB distributors often run the planning worksheet manually; mid-to-large distributors layer Demand Planning (in SCM) or an external forecasting tool for proper statistical forecasts feeding MRP. ## Where the wins come from Distribution implementations succeed when the order capture is fast, the warehouse is responsive, and the data flows cleanly to customer service for "where's my order" calls. Optimise for those three. ## Where to go next The process guides go deeper: [quote-to-cash for distributors](https://www.solvingdynamics365.com/guides/dynamics-365-for-distributors-quote-to-cash), [multi-warehouse fulfilment](https://www.solvingdynamics365.com/guides/dynamics-365-for-distributors-multi-warehouse-fulfilment), and [drop-ship patterns](https://www.solvingdynamics365.com/guides/dynamics-365-for-distributors-drop-ship-patterns). The two capabilities every distributor asks about first are [EDI with Business Central](https://www.solvingdynamics365.com/guides/edi-with-business-central) and [inventory and warehouse](https://www.solvingdynamics365.com/guides/business-central-inventory-and-warehouse). --- # Dynamics 365 licensing explained The whole Dynamics 365 licensing model in one place — base and attach licences, per-user tiers, Team Members, device licences. Source: https://www.solvingdynamics365.com/guides/dynamics-365-licensing-explained Section: Foundations Published: 2026-08-31 Dynamics 365 licensing is one model applied to three quite different product families, and most confusion comes from mixing up which family's rules you're reading about. This guide is the umbrella: the shared base-and-attach model, how each family tiers its users, and a picker table for matching licences to what people actually do. The authoritative source is Microsoft's [Dynamics 365 Licensing Guide](https://www.microsoft.com/en-us/licensing/product-licensing/dynamics365), a PDF re-issued several times a year — every number below is a rough 2026 range, not a quote. ## The base + attach model Every full user needs exactly one **base licence** — the first Dynamics 365 app they use, at full list price. Any further qualifying apps for the same user are **attach licences** at a flat, heavily discounted rate (roughly $20–30 per user per month, versus $65–210 for a base). Two rules do all the work: 1. **The most expensive app must be the base.** A user who needs Finance and Sales licenses Finance as base and attaches Sales — not the other way round. 2. **Base and attach are per user, not per team.** Attach pricing never applies to a second *person*; it applies to a second *app* on the same person. Base + attach is where mixed CRM-and-ERP shops either save or waste real money. Model it per user before accepting any quote — the difference between "everyone gets two bases" and a correct attach structure is routinely five figures a year at even modest headcounts. ## Three families, three licensing personalities **Business Central** (SMB ERP) is the simplest: two full-user SKUs — Essentials and Premium — plus Team Member, Device, and a free External Accountant licence. One hard rule: all full users in a tenant must be on the *same* SKU. Full users run roughly $70–110 per user per month. The detail lives in [Business Central licensing and pricing](https://www.solvingdynamics365.com/guides/business-central-licensing-and-pricing) and [Business Central pricing tiers explained](https://www.solvingdynamics365.com/guides/business-central-pricing-tiers-explained). **Customer Engagement** (Sales, Customer Service, Field Service, Customer Insights) tiers by capability: Professional SKUs (cheaper, capped features, can't mix with Enterprise in the same tenant for the same app), Enterprise (the default), and Premium (Enterprise plus the AI bundle). Expect roughly $65–105 for Professional/Enterprise bases and meaningfully more for Premium. Channel add-ons complicate service scenarios — see [omnichannel licensing for Customer Service](https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-omnichannel-licensing). **Finance and Operations** (Finance, Supply Chain Management, Commerce, Project Operations) has the highest per-user prices — roughly $180–210+ per base — but also the richest set of reduced-access options: Activity users (limited transactions), Device licences for shared shop-floor and warehouse terminals, and Team Members. F&O also carries minimum purchase requirements for the first app, which is why it rarely makes sense below the mid-market — a point covered in the [edition comparison](https://www.solvingdynamics365.com/guides/dynamics-365-edition-comparison). ## The license picker Find the row that describes what the person actually *does* — not their job title: | The person… | Business Central | Customer Engagement | Finance & Operations | | --- | --- | --- | --- | | Works in the app daily, creates and posts records | Essentials (or Premium if the tenant uses manufacturing / service mgmt) | App base licence — Enterprise unless Professional's caps genuinely fit | Full user base (Finance, SCM, Commerce, or Project Operations) | | Already has a base, needs a second app | Attach the second app | Attach the second app | Attach the second app | | Enters time/expenses, approves, reads reports | Team Member | Team Member | Team Member | | Occasionally records simple transactions only | Team Member rarely stretches this far — usually Essentials | Team Member (check the entitlement list) | Activity user | | Shares a terminal with colleagues (POS, shop floor, warehouse) | Device licence | Device licence (Field Service / retail scenarios) | Operations Device | | Is an external accountant | External Accountant (free) | n/a | n/a | | Is a customer or supplier using a portal | Not individually licensed — Power Pages capacity | Not individually licensed — Power Pages capacity | Not individually licensed — Power Pages capacity | | Only consumes dashboards | No licence — Power BI instead | No licence — Power BI instead | No licence — Power BI instead | Three habits keep the table honest. First, licence the *behaviour*, not the org chart — "manager" is not a licence type. Second, re-check twice a year: people drift from full use into approval-only, and [licence optimisation](https://www.solvingdynamics365.com/guides/license-optimisation-for-dynamics-365) is mostly harvesting that drift. Third, treat Team Member as a compliance boundary, not a discount trick — Microsoft has tightened its enforcement steadily, and a Team Member quietly posting journals is the most common audit finding across all three families. ## What the licence does not include The per-user fee is the visible part. Budget separately for: - **Dataverse and F&O storage** beyond the pooled entitlement — database capacity is the expensive tier, and attachments belong in cheaper file storage. - **Power Platform** — standalone Power Apps, premium Power Automate connectors, and Power Pages capacity are licensed separately; the Power Apps rights *included* with a Dynamics licence only cover apps in the same environment extending the licensed app. - **Copilot and AI** — some AI features ride along with Premium tiers, Microsoft 365 Copilot is always a separate licence, and the boundary moves every release; the current state is tracked in [licensing updates for Dynamics 365 in 2026](https://www.solvingdynamics365.com/guides/licensing-updates-for-dynamics-365-in-2026). - **Additional environments** — extra production environments are paid add-ons in every family. For how licences fit the full cost picture — implementation, ISVs, integration, run — see [TCO modelling](https://www.solvingdynamics365.com/guides/dynamics-365-tco-modelling), and for negotiating the ongoing bill, the [renewal strategy guide](https://www.solvingdynamics365.com/guides/dynamics-365-renewal-strategy). ## How to buy Same channels as the rest of Microsoft's cloud: direct online at list price, through a CSP partner (most common for Dynamics, since you likely have an implementation partner anyway), or on an Enterprise Agreement / MCA-E at volume. Discounts are negotiated, not published, and they concentrate on the big-ticket F&O SKUs. If you're still deciding *which* apps to license in the first place, start with [how to choose the right Dynamics 365 product](https://www.solvingdynamics365.com/guides/how-to-choose-the-right-dynamics-365-product) — the licence follows the product decision, never the reverse. ### Frequently asked questions **What is the difference between a base and an attach licence?** Every user's first Dynamics 365 app is their base licence at full price. Additional qualifying apps for the same user are attach licences at a heavily reduced flat rate. The rule that saves money: the most expensive app a user needs must be the base. **Can one user mix Business Central and Customer Engagement licences?** Yes. Attach licensing works across the families — a user with a Sales Enterprise base can attach Business Central Essentials, and vice versa. The base must be the higher-priced of the two. **Is the Team Member licence enough for managers who just approve things?** Usually, yes. Team Member covers reading data, approvals, time and expense entry, and updating the user's own records. It does not cover posting transactions, processing orders, or general data entry — that requires a full licence. **Where are the official prices?** Microsoft publishes list prices on the Dynamics 365 pricing page and the full entitlement rules in the Dynamics 365 Licensing Guide PDF, updated several times a year. Always check the current guide before signing — numbers in third-party articles (including this one) age quickly. --- # Dynamics 365 Marketing history and the transition to Customer Insights — Journeys The product genealogy from Dynamics Marketing through Marketo-era reorg to Customer Insights — Journeys — what was renamed, what was changed. Source: https://www.solvingdynamics365.com/guides/dynamics-365-marketing-history-and-transition Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 The product now called **Customer Insights — Journeys** has had multiple names and identities over the past decade: Dynamics Marketing, Dynamics 365 Marketing, real-time marketing, and finally its current branding. Knowing the history matters when reading older documentation, evaluating ISV add-ons, or troubleshooting customisations carried forward from prior versions. ## The early era — Marketing Pilot and ClickDimensions Before Microsoft had a first-party marketing automation product, the Dynamics ecosystem relied on partners — most notably ClickDimensions, which embedded marketing automation features in Dynamics CRM. Many CRM-era customers still run ClickDimensions and similar partner apps. ## Microsoft Dynamics Marketing (MDM) Acquired in 2014 from MarketingPilot, Microsoft Dynamics Marketing was the first first-party Microsoft entry. Capabilities included email marketing, lead scoring, marketing resource management. The product struggled — feature overlap with ClickDimensions, complex integration with Dynamics CRM, customer adoption slow. Microsoft sunset MDM in 2018. ## Dynamics 365 for Marketing Launched 2018; rebuilt from the ground up on the Common Data Service (now Dataverse). Features: - Email marketing with personalisation. - Customer journeys (outbound). - Lead scoring. - Event management. - LinkedIn integration. Initially targeted SMB; evolved toward enterprise capability. Renamed Dynamics 365 Marketing. ## The real-time marketing pivot Around 2021, Microsoft introduced **real-time marketing** alongside the existing **outbound marketing**: - **Outbound** — traditional segmented campaign approach; pre-2021 design. - **Real-time** — event-triggered, behavioural journeys with cross-channel orchestration. For several years, both modes coexisted in the product. Outbound was older but feature-rich; real-time was newer but powerful. Customers ran both, navigating overlapping but distinct toolsets. ## The merger into Customer Insights In 2023, Microsoft restructured: - **Dynamics 365 Marketing** + **Customer Insights** = **Customer Insights — Data + Journeys**. - **Customer Insights — Data** is the CDP capability (formerly standalone Customer Insights). - **Customer Insights — Journeys** is the marketing automation capability (formerly Dynamics 365 Marketing). The pricing and SKUs were repackaged. Both modules can be licensed standalone or together; customers without both get partial capability. ## The outbound deprecation Microsoft has been clear that outbound marketing is deprecated. Real-time is the future. Specifically: - Outbound features won't get new investment. - Bug fixes continue but new features land in real-time. - Existing outbound journeys continue running; customers should plan migration. - A documented timeline for outbound's end-of-life — typically multi-year sunset. For new customers in 2026, real-time only — outbound is no longer the default. **Migration considerations.** - **Segmentation logic** — different model between outbound and real-time; recreate segments. - **Email templates** — reusable, but may need re-validation against real-time renderer. - **Customer journeys** — rebuild as triggered or segment-driven journeys; not a simple lift. - **Forms** — real-time forms differ from outbound forms. - **Personalisation** — real-time uses unified profile from Customer Insights; outbound uses Dataverse fields directly. Plan months for a migration of a meaningful marketing programme. **Capabilities now (Customer Insights — Journeys).** - **Trigger-based and segment-based journeys.** - **Multi-channel orchestration** — email, SMS, push, in-app. - **Real-time personalisation** with Customer Insights — Data integration. - **Lead generation** — forms, landing pages, lead capture. - **Lead scoring** — ML-based and rule-based. - **Event marketing** — webinars, in-person events, registration. - **Analytics** — journey performance, conversion attribution. - **Compliance** — consent management, GDPR/CAN-SPAM, opt-out handling. **Integration with the broader stack.** - **Customer Insights — Data** is the customer profile source. - **Dataverse** holds related Dynamics 365 records (accounts, contacts, opportunities). - **Power Pages** for landing pages. - **Power Automate** for journey extension steps. - **LinkedIn Sales Navigator** for B2B leads. **Common pitfalls during transition.** - **Late migration start.** Customers wait until outbound deprecation deadline; rushed migration. - **Feature gap assumptions.** Some outbound features don't exist 1:1 in real-time; alternative patterns needed. - **Lost historical data.** Outbound journey analytics not directly accessible from real-time; export before deprecation. - **Training gap.** Marketing team trained on outbound; real-time UX different; productivity dip without retraining. - **Integration breakages.** Outbound-specific connectors and APIs differ from real-time; integrations need rework. ## Strategic positioning Customer Insights — Journeys is Microsoft's strategic marketing automation product. Investment is heavy, Copilot integration is deep, the underlying technology is competitive with Salesforce Marketing Cloud and Adobe Experience Cloud. The transition story is messy but the destination is robust. For new deployments, start on real-time. For existing outbound deployments, plan migration; don't wait for forced deprecation. The longer outbound runs, the more migration debt accumulates. --- # Dynamics 365 mobile strategy How to plan mobile capabilities for Dynamics 365 — app choices, offline strategy, security, device management. Source: https://www.solvingdynamics365.com/guides/dynamics-365-mobile-strategy Section: Foundations / Productivity & UX Published: 2026-05-01 A Dynamics 365 deployment without a mobile strategy is incomplete — much of the workforce is away from desks, and modern expectations include mobile access. **Mobile strategy** spans which apps, which devices, which scenarios, security, and ongoing management. Done well, mobile extends Dynamics's reach; done poorly, mobile becomes a frustrating second-class experience. **Mobile apps in the Dynamics ecosystem.** - **Dynamics 365 Sales mobile** — purpose-built for sales reps. - **Dynamics 365 Field Service mobile** — for technicians. - **Dynamics 365 (general)** — model-driven app access. - **Power Apps mobile** — for canvas apps. - **Microsoft Power Pages** — mobile-responsive websites for external users. - **Microsoft Teams** — collaboration with Dynamics integration. - **Microsoft Outlook** — email + Dynamics context. Each serves different scenarios. **Mobile scenarios.** - **Sales reps** — pre-meeting prep, quick lookup, activity capture. - **Field technicians** — work order execution, offline support. - **Managers** — approvals, dashboard glance. - **Customers** — self-service portal access. - **Executives** — analytics dashboards. Each scenario has different mobile requirements. **Native apps vs responsive web.** - **Native apps** — built for mobile platforms; better experience. - **Responsive web** — browser-based; works anywhere. Native apps for high-engagement scenarios; web for occasional use. **Offline support.** - **Sales mobile** — partial offline capabilities. - **Field Service mobile** — strong offline support; essential for field. - **Model-driven apps** — limited offline. - **Canvas apps** — offline configurable. For field operations, offline is non-negotiable; for office staff, often optional. **Device strategy.** - **Corporate devices** — IT-managed, controlled. - **BYOD (Bring Your Own Device)** — user-owned, mixed control. - **CYOD (Choose Your Own Device)** — from corporate list. Each has security and management implications. **Mobile Device Management (MDM).** - **Microsoft Intune** — Microsoft's MDM solution. - **Enrolment** — devices registered. - **Compliance policies** — version, encryption, PIN. - **App protection** — separate work / personal data. - **Remote wipe** — for lost devices. For corporate-managed mobile, MDM is foundational. **App protection policies.** - **Conditional access** — only compliant devices access Dynamics. - **Data leak prevention** — restrict copy/paste, share between apps. - **Encryption** at app level. - **PIN required** for app access. Layered defense without requiring full device management. **Authentication on mobile.** - **SSO** via Entra ID. - **Biometric** — Face ID, fingerprint. - **MFA** with authenticator app. - **Conditional access** based on risk. User experience and security balance. **Notifications.** - **Push notifications** — for approvals, urgent items. - **In-app badges** — counters for pending items. - **Email-based** — for non-time-sensitive. Notification fatigue is real; tune carefully. **Performance considerations.** - **Network conditions** vary — design for slow / intermittent. - **Battery** — mobile use depletes phone. - **Data plan** — heavy syncs cost. Mobile UX accommodates these constraints. **Offline-first design.** - Functionality works offline. - Sync when online. - Conflict resolution at sync. For field scenarios, offline-first is the right pattern. **Mobile-specific UX patterns.** - **Thumb-friendly tap targets.** - **Single-handed operation** where possible. - **Voice input** for note capture. - **Camera integration** for receipts, photos. - **Location awareness** for field service. Mobile is not "desktop on phone"; design accordingly. **Customisation for mobile.** - Forms optimised for mobile rendering. - Some fields hidden on small screens. - Different command bars. - Lighter-weight views. Desktop-only forms create poor mobile experience. **Adoption challenges.** - **Rep resistance** to additional reporting. - **Limited features** vs desktop. - **Training gap.** - **Connectivity issues** in field. Each barrier requires attention. **Adoption strategies.** - **Quick wins first** — surface clear time-saver features. - **Manager modelling** — managers use mobile visibly. - **Champion network** — early adopters demonstrate. - **Continuous improvement** — listen to user feedback. **Measurement.** - **Active mobile users** vs all users. - **Mobile sessions per user.** - **Activity logged via mobile.** - **Feature usage** breakdown. Adoption metrics reveal what's working. **Multi-platform support.** - **iOS** and **Android** required. - **Windows mobile** deprecated. - **iPad / tablet** support for power users. Cover the platforms your workforce actually uses. **Common pitfalls.** - **Mobile as afterthought.** Built for desktop; mobile second-class. - **No offline strategy** in field scenarios. - **No MDM/MAM.** Sensitive data on uncontrolled devices. - **Heavy forms.** Desktop forms shrunk. - **No measurement of adoption.** - **Notification overload** — users disable. **Operational rhythm.** - **Daily** — mobile users using. - **Weekly** — feedback collection. - **Monthly** — adoption metrics review. - **Quarterly** — strategic adjustments. **Mobile security incidents.** - Lost device. - Compromised credentials on mobile. - Phishing via mobile email. - Malicious app installed. Plan response procedures; mobile is significant attack surface. ## Strategic positioning Mobile is no longer an "add-on" to Dynamics 365; it's increasingly the primary surface for many roles. Sales reps, field technicians, managers all rely on mobile. For decision-makers: - Plan mobile strategy alongside desktop. - Invest in adoption. - Secure with MDM/MAM. - Optimise UX for mobile specifically. - Measure and iterate. The investment is meaningful; the workforce expects modern mobile. Done well, mobile extends Dynamics's reach into every moment of the workday. Done poorly, mobile is a source of frustration that drives users to find workarounds outside the system. --- # Dynamics 365 renewal strategy How to manage Dynamics 365 contract renewals — preparation, negotiation, true-up, rightsizing, and the patterns that get value from renewal moments. Source: https://www.solvingdynamics365.com/guides/dynamics-365-renewal-strategy Section: Foundations / Platform overview Published: 2026-05-01 Dynamics 365 contracts come up for renewal — typically annually for direct online, every 1-3 years for Enterprise Agreement. **Renewal** is not just a paperwork exercise; it's the moment to right-size, renegotiate, and align licensing with actual usage. Done well, renewals capture savings and optimize the licence footprint; done poorly, they auto-renew obsolete patterns. **Renewal moments to plan for.** - **6+ months before** — start review. - **3-6 months before** — internal analysis. - **1-3 months before** — negotiation. - **Renewal date** — execute. - **Post-renewal** — measure outcomes. Don't wait until renewal week. ## Usage analysis The data foundation: - **Active users per licence type.** - **Inactive licences** — assigned but unused. - **Feature usage** — which premium features actually used. - **Capacity usage** — storage, AI Builder, etc. - **Power Pages logins.** - **Trend over contract period.** Each metric informs renewal decisions. **Inactive licence identification.** - Licence assigned, no recent login. - Microsoft admin centre exposes this. - Significant cost saving opportunity. For 100+ user deployments, inactive licences often material. ## Tier appropriateness Per user: - Are they using features at their tier? - Could a lower tier serve them? - Or are they constrained by their tier (should upgrade)? Mature renewal includes tier analysis per user. **Premium feature usage.** - **Sales Premium AI features** — Conversation Intelligence in use? - **Customer Service Premium** — Copilot features adopted? - **Manufacturing in BC Premium** — used or just licensed? Without usage, Premium pays for capability not consumed. **Add-on usage.** - **AI Builder credits** — consuming, banking, or unused? - **Power Pages sessions** — at, below, or above quota? - **Capacity overage** — paying for storage? Reconcile add-on consumption with provisioning. **Renewal vs migration.** - **Renewal as-is** — same licences. - **Renewal with adjustment** — rightsized. - **Migration to different SKU** — different product mix. - **Move to industry cloud** — bundled industry-specific. Renewal is moment to consider strategic shifts. **Microsoft's incentives.** - Microsoft wants growth. - Multi-year commitments incentivised. - Industry cloud upsell. - Larger commitments → larger discounts. Knowing Microsoft's incentives informs negotiation. **Negotiation levers.** - **Multi-year commitment** for discount. - **Volume increase** commitment. - **Industry cloud adoption.** - **Cross-product bundling.** - **Reference customer status.** Each can yield concessions; partners often help navigate. **Enterprise Agreement (EA) vs subscription.** - **EA** — typically 3-year commitment with discounts. - **Subscription** — annual, simpler. - **CSP (Cloud Solution Provider)** — partner-mediated, flexible terms. For large customers, EA usually best. ## Microsoft's published pricing Starting point: - List prices public. - Volume discounts not. - Specific bundles negotiable. Don't accept list price for material commitments. **Partner involvement.** - CSP partner manages contracts. - Direct customers manage with Microsoft account team. - Partners often offer better service / similar economics. For complex commercial situations, partner advisor helpful. ## True-up For EA: - Annual reconciliation of actual usage. - Pay for additional users / capacity above commitment. - Cannot reduce mid-term (typically). True-up timing important; usage growth costs. **Capacity overage.** - Storage, AI credits, sessions. - Calculated at end of period. - Add-on capacity purchasable. Monitor consumption; address before renewal if material. **Strategic moves at renewal.** - **Consolidate vendors** — Microsoft might displace others. - **Industry cloud adoption.** - **Premium tier evaluation.** - **License optimisation** — rightsizing. Renewals are leverage; use them. **Risk: auto-renewal.** - Many contracts auto-renew if no action. - Sometimes at higher prices. - Notice periods often required to terminate. Track notice deadlines; don't miss them. **Renewal checklist.** - 6 months out: usage analysis begins. - 4 months: internal stakeholders aligned. - 3 months: meet with partner / Microsoft. - 2 months: receive proposals. - 1 month: negotiate. - Renewal: execute. - Post-renewal: monitor for issues. **Common pitfalls.** - **No usage analysis.** Renewal at status quo. - **Inactive licences ignored.** Material savings missed. - **Premium without usage.** Paying for unused features. - **Late preparation.** No leverage in negotiation. - **No alternative considered.** Microsoft knows you're committed. - **Auto-renewal surprise.** Higher price; missed notice. **Best practices.** - **Annual cadence** even if multi-year contract. - **Usage tracking** ongoing. - **Right-size aggressively.** - **Plan negotiation** thoughtfully. - **Consider alternatives** before renewing. - **Document outcome** for institutional memory. **Pricing trends.** - Microsoft price increases happen. - New features may move between tiers. - Industry cloud pricing evolves. Renewal is moment to anchor pricing for future periods. **Multi-year vs annual.** - **Multi-year**: discount, less administrative. - **Annual**: flexibility, fewer surprises. Choose based on confidence in fit. **Vendor consolidation.** - Multiple SaaS vendors with Microsoft alternatives? - Renewal moment to consolidate. - Microsoft happy to displace competitors. ## Strategic positioning Renewals are recurring opportunities for cost optimisation. The mature approach treats every renewal as evaluation rather than rubber-stamp. For decision-makers: - Plan ahead. - Analyse usage rigorously. - Engage partner / Microsoft strategically. - Negotiate firmly. - Document for future. The savings from rigorous renewal management compound over years. The teams that treat renewal seriously pay less; the teams that auto-renew pay more. The discipline is the difference. --- # Dynamics 365 roadmap considerations How to plan multi-year roadmaps for Dynamics 365 — release waves, deprecation timelines, AI integration. Source: https://www.solvingdynamics365.com/guides/dynamics-365-roadmap-considerations Section: Foundations / Platform overview Published: 2026-05-01 Dynamics 365 evolves continuously — two release waves per year, monthly updates, periodic strategic shifts. Building your organisation's Dynamics roadmap requires understanding Microsoft's direction, anticipating changes, and planning multi-year investments. Done well, the roadmap aligns with where the platform is heading; done poorly, you build into obsolete patterns. **Microsoft's release cadence.** - **Two waves per year** — April and October. - **Wave plan** published months ahead. - **Continuous updates** monthly. - **Major shifts** announced strategically. Predictable cadence; plan around it. **Where Microsoft is investing.** - **AI / Copilot** — heavy investment across all products. - **Industry clouds** — vertical-specific bundles. - **Microsoft Fabric integration** — analytics. - **Power Platform expansion.** - **Customer Insights — Journeys** — replacing outbound marketing. - **Customer Service Workspace** + Contact Center. - **Sustainability.** The pattern of investment indicates strategic direction. **Where Microsoft is divesting.** - **Legacy patterns** — C/AL, classic CRM client, older marketing. - **Outbound marketing** — deprecated in favour of real-time. - **On-premises** — minimal new investment. - **Some niche modules** that didn't scale. Investments in deprecated areas have limited horizon. **Reading the wave plans.** - **Public release plans** announced ~6 months ahead. - **Per-product feature lists.** - **Preview vs GA timing.** - **Deprecation notices.** Roadmap planning starts from these. **Per-product roadmaps.** - **Business Central** — quarterly minor + wave major. - **F&O / SCM** — wave-based. - **Customer Engagement apps** — wave-based. - **Power Platform** — continuous. - **Fabric** — continuous. Different cadences; coordinated overall. **Customer roadmap building.** - **Where are we today** — current state. - **Where do we want to be** — vision. - **What Microsoft's adding** — capabilities coming. - **What's deprecated** — must migrate. - **Sequence** — what comes when. Multi-year view; aligned with Microsoft's direction. **Common roadmap themes.** - **AI / Copilot adoption.** - **Customer 360 / Customer Insights — Data.** - **Industry cloud adoption.** - **Fabric for analytics.** - **Replacement of outbound marketing.** - **Sustainability programme.** Each major theme is multi-year journey. **Deprecation handling.** - **Notice typically 1-2 years** ahead. - **Migration tooling** often provided. - **Customer-specific timelines** for transition. - **Risk of waiting** — last-minute panic. Track deprecations actively; plan migrations. **Major recent deprecations (as of 2026).** - **Dynamics Marketing outbound** — phased out in favour of Customer Insights — Journeys. - **C/AL in Business Central** — long deprecated. - **Some older Sales features** — replaced by sales acceleration. - **Older portal versions** — replaced by Power Pages. Each had migration path; plan ahead. **Upcoming themes (looking ahead).** - **Deeper AI integration** — Copilot across more workflows. - **Autonomous agents** — proactive, multi-step automation. - **Fabric becoming dominant** for analytics. - **Continued industry cloud expansion.** - **Sustainability mandates** — ESG reporting becoming standard. Watch Microsoft Ignite, Build, Inspire events for direction. **Customer alignment.** - **Stay current** with at least N-1 version. - **Adopt new features** that fit. - **Plan migrations** for deprecated. - **Modernise customisations** for current patterns. The "stay current" discipline pays back over years. **Cost of falling behind.** - **Larger jumps** more expensive than incremental. - **Lost productivity** from outdated patterns. - **Security gaps.** - **Eventually forced migration** at worst time. Lagging is rarely cost-effective long-term. **Pace of adoption.** - **Bleeding edge** — preview, beta features. Risk vs early advantage. - **Early adopter** — GA features quickly. Balance. - **Mainstream** — stable, well-documented. Conservative. - **Laggard** — only when forced. High risk. Most enterprises target mainstream with selective early adoption. **Multi-year planning horizon.** - **3-year roadmap** typical. - **Annual review and adjust.** - **Quarterly tactical.** - **Aligned with budget cycles.** The roadmap is living document. **Roadmap stakeholders.** - **CIO / IT leadership** — strategic direction. - **Business leaders** — what capabilities needed. - **Architecture** — technical feasibility. - **Operations** — what's manageable. - **Finance** — what's affordable. Cross-functional alignment. **Engaging with Microsoft.** - **Account team** — relationship. - **Product groups** — feedback channels. - **Customer Advisory Boards** — strategic input. - **TAP (Technology Adoption Program)** — early access. For larger customers, engagement deepens. **Common roadmap pitfalls.** - **Year-by-year tactical** — no multi-year view. - **Vendor-driven** — Microsoft sells; customer buys reactively. - **Stale roadmap** — created once, never updated. - **Ignoring deprecations** until forced. - **No cross-functional alignment.** - **Bleeding edge adoption** without business reason. **Roadmap maintenance cadence.** - **Quarterly review.** - **Annual major refresh.** - **Per Microsoft wave** — update for new capabilities. - **Pre-major-decision** — review for alignment. **Investment classification.** - **Maintenance** — keep operating. - **Enhancement** — incremental improvement. - **Strategic** — major capability addition. - **Transformation** — significant change. Roadmap budget split across categories. **Risk on the roadmap.** - **Bet too early** — preview feature deprecated. - **Bet too late** — competitor advantage. - **Bet wrong direction** — Microsoft pivot. Manage risk via portfolio approach; don't bet everything on one direction. ## Strategic positioning A clear Dynamics 365 roadmap aligns the organisation's investment with the platform's evolution. The investment in maintaining the roadmap is small; the cost of operating without one is misaligned investments and reactive scrambles. For decision-makers: - Build multi-year roadmap. - Stay aligned with Microsoft's direction. - Plan deprecation migrations proactively. - Review and adjust regularly. - Engage Microsoft strategically. The Dynamics 365 platform is too valuable and changes too quickly to operate without a roadmap. The discipline of having one — and using it to inform decisions — separates organisations that get sustained value from those that struggle with constant catch-up. --- # Dynamics 365 ROI measurement How to measure return on investment for Dynamics 365 — defining benefits, baselines, attribution, and the patterns that produce defensible ROI calculations. Source: https://www.solvingdynamics365.com/guides/dynamics-365-roi-measurement Section: Foundations / Platform overview Published: 2026-05-01 Approving a Dynamics 365 investment requires expected return; demonstrating value post-implementation requires measured return. **ROI measurement** quantifies what the system actually delivered against what it cost. Done honestly, it informs future investments; done poorly, it becomes marketing exercise that misleads decisions. ## The ROI formula Simple: ``` ROI = (Benefit - Cost) / Cost × 100% ``` Concept clear; measurement difficult. **Defining benefits.** - **Cost reduction** — labour saved, vendors decommissioned, errors avoided. - **Revenue increase** — new sales, faster conversion, less churn. - **Risk avoidance** — compliance, breach prevention. - **Productivity** — time saved per person. - **Strategic enabling** — capabilities for future growth. Each warrants quantification with baseline. ## Baselines Critical: - **Current state metrics** captured before. - **Without baseline**, can't measure improvement. - **Multiple data points** — survey, time studies, system metrics. The baseline determines what "improvement" means. **Measuring cost reduction.** - **Decommissioned systems** — vendor invoices. - **Reduced manual labour** — time studies before / after. - **Error rate reduction** — defects × cost per defect. - **Reduced overtime** — payroll comparison. Direct, measurable; easiest to defend. **Measuring revenue impact.** - **Win rate** before / after. - **Cycle time** before / after. - **Average deal size** trends. - **Cross-sell / upsell** rates. - **Customer retention** rates. Harder to attribute solely to Dynamics; need rigour. **Measuring productivity.** - **Time per task** before / after. - **Tasks completed** per period. - **Self-service** vs assisted ratios. - **Per-rep / per-agent throughput.** Aggregate across users for total productivity. **Measuring risk avoidance.** - **Compliance audit** results. - **Security incidents** rate. - **Breach prevention** — hypothetical avoided. - **Better controls** demonstrated. Often harder to quantify; sometimes only via expert judgment. **Attribution challenges.** - **Multiple changes simultaneous.** Dynamics + new processes + new training. - **Hard to isolate** Dynamics's specific contribution. - **Confounding variables** — market changes, leadership changes. Honest ROI acknowledges attribution difficulty. **Mitigating attribution.** - **Control groups** if feasible. - **Time-series analysis** — trend before vs after. - **User surveys** — what changed for them. - **Specific feature usage tied to outcomes.** Multiple techniques converge on credible attribution. **ROI time horizon.** - **Year 1** — typically negative; costs high, benefits ramping. - **Year 2-3** — breakeven. - **Year 4-5** — positive ROI accumulates. Annual ROI calculation misleading early; 3-5 year cumulative honest. **Quantitative vs qualitative benefits.** - **Quantitative** — measurable, attestable. - **Qualitative** — improved customer experience, better data, employee satisfaction. Both matter; report appropriately. **ROI estimation pre-implementation.** - **Use case-by-use case estimation.** - **Vendor / partner estimates** — often optimistic. - **Internal benchmark** — what others achieved. - **Sensitivity** — range, not point estimate. For approval, range with confidence levels. **Post-implementation measurement.** - **Define metrics** at start. - **Measure baseline.** - **Track over time.** - **Compare to expectations.** - **Report periodically.** Without measurement, ROI claims are unsubstantiated. **Hidden costs to subtract.** - Productivity dip during transition. - Change management cost. - Ongoing customisation maintenance. - Operations team cost. True ROI subtracts these. **Hidden benefits to include.** - **Improved morale** — turnover savings. - **Better data** — better decisions. - **Future enablement** — easier to add capabilities. Some intangible but real. **Common ROI patterns.** - **Service ticket resolution time** — measurable. - **Sales cycle time** — measurable. - **Inventory turn improvement.** - **Procurement compliance** — fewer maverick. - **Customer satisfaction** — NPS / CSAT. Each has well-known measurement approach. **Reporting ROI.** - **Annual review** for executive audience. - **Project completion review** at go-live + 1 year. - **Component ROI** per feature / use case. - **Continuous metrics dashboard.** Multiple lenses; different audiences. **Common pitfalls.** - **Vendor-supplied ROI accepted.** Often optimistic. - **No baseline.** Improvement unmeasurable. - **Attribution generous.** Everything credited to Dynamics. - **Hidden costs ignored.** Net benefit overstated. - **No follow-up measurement.** Estimated but never verified. - **Soft benefits only.** Hard data missing. **Honest ROI characteristics.** - **Quantitative where possible.** - **Conservative attribution.** - **All costs included.** - **Baseline documented.** - **Periodic re-measurement.** - **Transparent methodology.** **Microsoft / partner case studies.** - Often quoted ROI metrics. - Investigate methodology. - Adjust for your context. Useful benchmarks; not definitive. **Per-feature ROI.** - **Conversation Intelligence ROI** — measurable. - **Predictive lead scoring ROI** — measurable. - **AI-assisted email drafting ROI.** Granular ROI guides feature investment. **ROI for renewals.** - Renewal moment includes ROI review. - Demonstrated ROI justifies investment. - Lacking ROI signals scope rethinking. ## Strategic positioning ROI measurement is the financial discipline that justifies Dynamics investments and informs evolution. Without it, sponsorship erodes over time. For decision-makers: - Define benefits and baselines upfront. - Measure rigorously. - Report honestly. - Use to inform decisions. The investment in measurement is small; the credibility benefit is substantial. The teams that measure honestly maintain sponsor confidence and make data-informed decisions; the teams that don't lose credibility and face budget pressure at renewals. ROI isn't optional for serious Dynamics 365 investments. --- # Dynamics 365 Sales mobile experience How the Dynamics 365 Sales mobile app supports field salespeople — offline capability, voice features, AI integration, and the patterns for adoption. Source: https://www.solvingdynamics365.com/guides/dynamics-365-sales-mobile-experience Section: Customer Engagement / Sales Published: 2026-05-01 Salespeople spend much of their time away from a desk — at customer sites, in cars between meetings, at industry events. The **Dynamics 365 Sales mobile app** is designed for these moments — quick access to records, voice-driven data capture, and offline resilience. Adoption hinges on whether the mobile experience genuinely saves time or just duplicates the desktop frustrations. **Two app generations.** - **Dynamics 365 mobile (classic)** — model-driven app on mobile. Familiar but heavy. - **Sales mobile app** — purpose-built for sales scenarios. Lighter, focused. The Sales mobile app is the modern path; the classic still exists for power users. **Core features.** - **Account / contact lookup** — find customer fast. - **Meeting preparation** — pre-meeting briefing. - **Activity capture** — log calls, meetings, notes. - **Opportunity status** — view and update. - **Email integration** — Outlook tied. - **Calendar integration.** - **Voice notes.** Designed for mobile-natural interactions, not desktop-shrunk forms. ## Offline mode Critical for field reality: - Pre-cached data — customer subset selected for offline. - Capture data offline — synced when connectivity returns. - Conflict resolution — handled at sync. The offline experience requires planning — what data each rep needs cached. ## Pre-meeting briefing AI-driven: - Upcoming meeting detected. - Brief on the customer auto-generated — recent activity, open opportunities, key contacts. - Agent suggests talking points. Saves the rep prep time; valuable for back-to-back meeting days. **Voice capture.** - Speak notes; transcribed and saved. - Talk while driving (hands-free). - Captures conversation snippets. Reduces the friction of activity logging — barrier-low data capture. ## AI-assisted email drafting From mobile: - Copilot drafts follow-up email based on meeting notes. - Rep reviews and sends. - Quick turnaround. The pattern: rep speaks notes; AI drafts email; rep edits; sends. All from phone. ## Quick lookup Common pattern: - Rep about to walk into a meeting. - Pulls up contact in mobile app. - Reviews recent interactions, last conversation. - Walks in informed. The 30-second pre-meeting look matters. ## Activity logging Post-meeting: - Speak quick note about what happened. - Save against contact / opportunity. - Set follow-up task. The discipline reduces the dreaded "log activities at end of week" problem. **Adoption challenges.** - **Rep resistance** — mobile feels like more reporting overhead. - **Limited features** vs desktop — power users frustrated. - **Sync delays** — offline mode less seamless than expected. - **Battery drain** — heavy use depletes phone. - **Data plan usage** — significant for image / large data syncs. Each barrier requires attention; ignoring them suppresses adoption. **Adoption patterns that work.** - **Manager-driven** — managers use mobile to track team activity. - **Quick wins** — emphasise time-saving features (voice notes, pre-meeting briefing). - **Training** — quick how-to videos. - **Champions** — early adopter reps demonstrate value. - **Continuous improvement** — listen to rep feedback; iterate. Mobile adoption isn't automatic; treat as a change management exercise. ## Integration with Sales Premium AI When licensed: - Conversation intelligence on mobile. - Predictive scores visible. - Relationship analytics surfaced. The Premium features extend mobile capabilities. **Customization for mobile.** - Forms can be optimised for mobile rendering. - Some fields hidden on mobile, shown on desktop. - Different action buttons. For complex CRM, the desktop form may overwhelm mobile; mobile-specific layouts simplify. **Security on mobile.** - **Mobile device management (MDM)** — enrolment via Intune. - **Conditional access** — verify device compliance. - **Remote wipe** — when device lost. - **Data loss prevention** — restrict export. Sales data is sensitive; mobile security non-negotiable. **Multi-language.** - App supports multiple languages. - UI translates per device locale. - Data remains in original language. **Performance.** - App optimised for moderate-spec phones. - Older devices may struggle. - Network conditions affect responsiveness. For old corporate phones, modernisation may be needed. **Common pitfalls.** - **Treating mobile as add-on.** Built for desktop; mobile second-class; bad UX. - **Heavy forms.** Desktop forms shrunk to phone; unusable. - **Offline mode not tested.** Field reality reveals issues. - **No champion network.** Roll out and hope. - **Activity capture friction.** Reps avoid; data gap. - **No analytics on adoption.** Don't know who uses, who doesn't. **Adoption metrics.** - Mobile sessions per user per week. - Activity logged via mobile vs desktop. - Feature usage breakdown. - Time saved (self-reported). These reveal whether mobile is working. ## Strategic positioning Mobile sales is essential for field-based sales operations. The Dynamics 365 Sales mobile app is the canonical surface; adoption is the differentiator. Mature deployments treat mobile as a first-class channel — invested in, trained, supported. The teams that get this right have salespeople capturing data routinely from the field; the teams that don't have salespeople doing data entry late on Friday and producing thin pipeline insight. The investment pays back in sales productivity if adoption holds. --- # Dynamics 365 Sales Premium features What the Sales Premium SKU adds over Sales Enterprise — Conversation Intelligence, Relationship Analytics, predictive forecasting. Source: https://www.solvingdynamics365.com/guides/dynamics-365-sales-premium-features Section: Customer Engagement / Sales Published: 2026-05-01 Dynamics 365 Sales comes in two main commercial flavours: **Sales Enterprise** (the standard SKU most customers run) and **Sales Premium** (an upper tier that adds AI-driven features). Premium isn't a cosmetic upgrade — the additional features change what's possible in coaching, forecasting, and relationship intelligence. Whether it's worth the licence delta is a question of usage discipline more than feature value. ## What's in Enterprise The baseline: - Accounts, contacts, leads, opportunities, quotes, orders. - Forecasting (configurable, basic). - Email integration with Outlook. - Sales acceleration features — focused list, sequences, work list. - Goal management, territories. - Dataverse and Power Platform integration. - Reports and dashboards. For a mid-market sales team, Enterprise covers the operational basics. **What Premium adds.** - **Conversation Intelligence** — captures and analyses sales calls and meetings. - **Predictive Lead Scoring** — ML-based lead ranking. - **Predictive Opportunity Scoring** — likelihood-to-close per opportunity. - **Premium forecasting** — predictive forecast in addition to manual. - **Relationship Analytics** — engagement scores, relationship health. - **Premium AI** — additional Copilot-driven features. These are AI-heavy features. They work but only if reps' activity data flows into Dynamics — emails captured, meetings logged, calls connected. ## Conversation Intelligence Records sales calls (Teams meetings, Zoom via integration, or dedicated dialler) and analyses: - **Talk-to-listen ratio** — was the rep talking too much? - **Topic detection** — what was discussed (competitor mentions, product features, pricing). - **Action items** — extracted automatically. - **Sentiment** — customer sentiment trajectory. - **Coaching scorecards** — managers review with reps. Setup involves connecting the meeting platform, configuring keywords, and training the model on your sales process. Adoption is the main challenge: reps must be on calls that are recorded, and many reps initially resist recording. ## Predictive Lead Scoring ML model trained on historical lead conversion data: - Inputs: lead attributes (industry, source, geography, BANT fields, engagement history). - Output: a score 0–100 indicating likelihood to convert. - Refresh: model retrains periodically as more historical outcomes accumulate. For high-volume marketing-sourced leads, scoring is a triage tool — focus high-score leads, deprioritise low-score. Without high lead volume, the value is muted. ## Predictive Opportunity Scoring Similar to lead scoring but for opportunities: - Score on win probability. - Drivers of the score (engagement frequency, deal size, stage progression speed). - "Why this score" insight shown to the rep. Coaching value: reps see which deals look likely vs which look stalled — guides time investment. ## Predictive forecasting Integrates ML-derived numbers into forecast views: - Predicted commit vs manual commit. - Variance analysis: where rep judgment diverges from model. Best used as a sanity check on the rep-driven forecast, not a replacement. ## Relationship Analytics Computes a **relationship health score** per account / contact: - Activity frequency. - Sentiment. - Engagement coverage (how many people in the account are engaged). - Pipeline activity. Trend visible over time — a health score declining is a leading indicator of deal risk or churn. ## Premium AI features Various Copilot-driven additions: - AI-drafted emails based on opportunity context. - AI-summarised account briefings. - AI-driven next-best-action suggestions. These overlap with Microsoft 365 Copilot but are deeper integrated with Sales data. ## Licensing math Premium typically lists around 1.5× Enterprise pricing — material per-user. The decision frame: - **Are AI features adopted in practice?** A team that doesn't review call analytics or act on opportunity scores gets no value. - **Is the data quality sufficient for ML?** Predictive features depend on clean opportunity history; thin data = noisy predictions. - **Is the sales motion conducive?** Conversation Intelligence works best when sales calls dominate the motion; if it's transactional/self-serve, less value. For teams with disciplined activity capture and a willingness to use the analytical output, Premium pays back. For teams that won't change behaviour, it's a tax. **Adoption levers.** - **Manager-driven coaching** based on Conversation Intelligence — without manager engagement, recordings pile up unwatched. - **Lead-scoring-driven workflows** — automate "high score → priority queue" or sequences trigger differently. - **Opportunity score in deal reviews** — leaders explicitly compare predicted vs committed. The pattern: tie premium features to actual operational decisions, not "interesting reports." **Common pitfalls.** - **Buying Premium without changing how the team works.** Features unused, money wasted. - **Conversation Intelligence privacy concerns.** Some regions require consent; legal review essential. - **Predictive scores treated as gospel.** ML output is probabilistic; over-reliance erodes rep judgment. - **Data thin.** New deployment, no historical outcomes; predictive features need 6–12 months before they're useful. - **Manager skill gap.** Premium gives managers more data; managers need training to use it for coaching, not just reporting. ## Operational rule Sales Enterprise is the right default. Upgrade to Premium when: - Sales team has consistent activity capture for 6+ months. - Managers are skilled at coaching with data. - Leadership commits to acting on premium feature outputs. The Premium features genuinely add capability — but capability not exercised is cost without return. --- # Dynamics 365 Sales vs Salesforce Sales Cloud Dynamics 365 Sales vs Salesforce Sales Cloud: where each wins, where the differences are real, and how the decision usually gets made in practice. Source: https://www.solvingdynamics365.com/guides/dynamics-365-sales-vs-salesforce Section: Customer Engagement / Sales Published: 2026-08-27 Updated: 2026-08-27 The Dynamics 365 Sales vs Salesforce Sales Cloud choice comes up in almost every enterprise CRM conversation, and the honest answer is that both are capable platforms that will run a serious sales organisation. The difference is not usually about raw features; it is about where the wider IT stack already is, what the CRM has to integrate with downstream, and what the total cost looks like over the deployment lifetime. This guide walks the difference in the shape that surfaces in real deals. ## Where each wins **Salesforce wins on:** - Depth of the sales-specific feature set. Forecasting, quoting (CPQ), commissions (Spiff / Xactly), enablement (Salesforce Enablement, formerly myTrailhead). Each of these is either best-in-class in Salesforce's own portfolio or has the deepest AppExchange integration story. - The ISV ecosystem — 5,000+ apps on AppExchange, with strong offerings in categories where Microsoft's ecosystem is smaller (data enrichment, sales engagement, ABM tooling, dialer integration). - Developer-community depth. Twenty years of Salesforce means a large, easy-to-hire developer community with clear certification paths. - Marketing Cloud (via the Salesforce Data Cloud + Marketing Cloud Engagement stack). Microsoft has Customer Insights but the gap on marketing depth is real for account-based motion and lifecycle marketing. - The industry-cloud story is more mature — Financial Services Cloud, Health Cloud, Manufacturing Cloud are shipping products with real customers. **Dynamics 365 wins on:** - Integration into Microsoft 365 and Teams. Copilot for Sales inside Outlook is the standout — sellers do their work in Outlook, not the CRM, and the CRM record where the seller lives is the CRM they use. - The wider Microsoft business apps story. Sales + Business Central or Finance and Operations under one platform, one identity, one data model. For customers who need CRM plus ERP from one vendor, Dynamics 365 wins by default. - Copilot integration. Both platforms have AI stories; Microsoft's Copilot integration is deeper into the productivity surface where sellers actually work. - Pricing for existing Microsoft-shop customers. Attach licensing and E5-style bundles make CRM cheaper when the customer already runs Microsoft 365 and Azure. - Governance for regulated industries running heavily on Microsoft. Compliance, data residency, and sovereign cloud coverage are more integrated when the CRM is on the same platform as email and files. ## Where the differences don't matter For most core sales-operations workflows — pipeline management, forecasting, account and contact management, opportunity tracking, activity capture, basic quoting, dashboards — both platforms will handle the workload. The seller experience feels different (different UI, different terminology) but the underlying capability is comparable. A migration between the two never fails because one platform "can't do it." Where the differences don't matter, the decision is not usually made on features. It is made on: ## How the decision usually gets made **Existing tech stack.** The single strongest predictor. A Microsoft-shop customer running M365 E5, Teams heavily, and Azure infrastructure defaults toward Dynamics 365. A customer running Google Workspace, AWS, and a mix of best-of-breed SaaS defaults toward Salesforce. **Existing CRM.** Migrating off an incumbent CRM is expensive. If Salesforce is already in production and working, the bar for switching to Dynamics 365 is high (and vice versa). Migrations happen — the highest-frequency paths are Salesforce-to-Dynamics-365 for cost consolidation and Dynamics-365-to-Salesforce for CRM-specific feature depth — but they are big projects. **ERP context.** Deploying CRM alongside a new ERP or Finance and Operations rollout typically favours Dynamics 365 for the single-vendor integration story. Deploying CRM into a customer with SAP ERP as the incumbent typically favours Salesforce, because Salesforce's SAP integration story is more mature and better supported by the SI ecosystem. **Internal skill set.** A company with a Salesforce Center of Excellence and 30 certified admins does not walk away from that investment. A company with a Power Platform CoE and 30 Dataverse-fluent makers does not walk away from that either. **Vendor negotiation.** Both Microsoft and Salesforce discount aggressively on enterprise deals. The list-price story is not the ordering-price story. The actual TCO depends on the deal negotiated. ## Where the marketing gets it wrong Two marketing claims that overstate the case: **"Copilot for Sales works with Salesforce too."** It does — Microsoft sells a version of Copilot for Sales that connects to Salesforce CRM. It's real. But it is not as deeply integrated as the Dynamics 365 version, and if you're evaluating "how much do I need the Microsoft Copilot experience," the honest answer is that it works better on Dynamics 365. **"Salesforce's platform is more open."** Both platforms have rich APIs, rich metadata, rich developer surfaces, rich AppExchange / AppSource ecosystems. The "more open" claim doesn't survive a technical evaluation. What is genuinely different is the developer-community *size* and *maturity* — Salesforce has more. ## Migration considerations For customers thinking about the migration in either direction: **Salesforce to Dynamics 365** typically happens for cost consolidation (Microsoft-shop customer that already licences E5 sees Dynamics 365 as cheaper) or for wider integration (CRM plus ERP plus productivity plus Copilot on one platform). Real projects: 9–18 months for a mid-market rollout, longer for enterprise. Data model differences (Lead vs Contact conventions, Opportunity structure, custom object depth) require careful mapping. **Dynamics 365 to Salesforce** typically happens for CRM-specific feature depth (marketing depth, enablement, industry cloud fit), or for cultural / organisational fit ("we're a Salesforce shop now"). Similar effort. The Salesforce migration tools and SI capability for this direction are more mature. Neither migration should be undertaken casually. If the incumbent CRM is working, the ROI of a switch is often lower than the ROI of investing in getting the most from the incumbent. ## The short version Both platforms will run a serious sales organisation. The decision is rarely about features; it is about existing stack fit, ERP context, existing skill investment, and total cost. For Microsoft-shop customers with CRM plus ERP plus productivity ambitions, Dynamics 365 usually wins. For customers whose motion is CRM-centric with best-of-breed everything else, Salesforce still wins. The middle ground is genuinely mixed. Don't switch without a specific requirement the incumbent can't meet. If you're greenfield, the existing tech stack fit is the most reliable tiebreaker. ## Where to go next For the Microsoft side in depth, [what is Dynamics 365 Sales](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-sales) and [Copilot for Sales features](https://www.solvingdynamics365.com/guides/copilot-for-sales-features). If the answer is coexistence rather than replacement, [integrating Dynamics 365 Sales with Salesforce](https://www.solvingdynamics365.com/guides/integrating-dynamics-365-sales-with-salesforce) covers the patterns. Licensing and current list prices are in [Dynamics 365 licensing explained](https://www.solvingdynamics365.com/guides/dynamics-365-licensing-explained) and on the [Sales pricing page](https://www.solvingdynamics365.com/pricing/sales). The service-side equivalent of this comparison is [Customer Service vs Zendesk](https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-vs-zendesk). ### Frequently asked questions **Which has better features, Dynamics 365 Sales or Salesforce?** For core sales operations — pipeline, forecasting, accounts, opportunities, dashboards — capability is comparable and migrations never fail because one platform can't do it. Salesforce is deeper on sales-specific tooling (CPQ, enablement, the AppExchange ecosystem); Dynamics 365 is deeper on Microsoft 365, Teams and Copilot integration. **What is the strongest predictor of which CRM a company picks?** The existing tech stack. A Microsoft-shop customer on M365 E5, Teams and Azure defaults to Dynamics 365; a Google Workspace / AWS / best-of-breed shop defaults to Salesforce. **Does Copilot for Sales work with Salesforce?** Yes — Microsoft sells a version that connects to Salesforce CRM, and it is real. But it is not as deeply integrated as the Dynamics 365 version, so if the Copilot experience matters to the evaluation, it works better on Dynamics 365. **Should we migrate from Salesforce to Dynamics 365?** Not without a specific requirement the incumbent can't meet. Migrations run 9-18 months for mid-market and happen mainly for cost consolidation or the single-vendor CRM-plus-ERP story. If the incumbent CRM is working, investing in it usually beats switching. --- # Dynamics 365 TCO modelling How to model total cost of ownership for Dynamics 365 — license, implementation, operations, evolution, and the 5-year picture. Source: https://www.solvingdynamics365.com/guides/dynamics-365-tco-modelling Section: Foundations / Platform overview Published: 2026-05-01 The headline cost of Dynamics 365 — per-user licence — is only part of the picture. **Total Cost of Ownership (TCO)** over 5 years includes implementation, integration, customisation maintenance, operations, training, and evolution. Building an honest TCO model exposes the real investment; without it, organisations underestimate cost by significant margins. **The TCO components.** - **Software licences** — ongoing subscription. - **Implementation** — one-time but significant. - **Integration** — initial + ongoing. - **Customisation** — build + maintain. - **Infrastructure** — Azure consumption, additional services. - **Operations** — admin, support staff. - **Training** — initial + ongoing. - **Evolution** — periodic enhancements. - **Compliance / security operations.** - **Vendor management.** Each compounds; total dwarfs licence cost. **Typical TCO breakdown over 5 years.** - **Licences**: 25-40%. - **Implementation**: 20-30%. - **Operations**: 20-30%. - **Evolution / customisation**: 10-15%. - **Other** (training, integration, etc.): 5-15%. Specific ratios vary; pattern is consistent. **Year 1 vs ongoing.** - **Year 1**: heaviest. Implementation cost concentrated. - **Years 2-5**: lower. Mostly licences + operations + evolution. The 5-year average is meaningfully lower than Year 1. **License cost model.** - **Per-user, per-month** typically. - **Volume discounts** for larger deployments. - **Enterprise Agreement** further discounts. - **Add-ons** — additional capacity. Estimate users × edition × period. **Implementation cost factors.** - **Scope** — modules, processes. - **Complexity** — customisation depth. - **Migration** — data and systems. - **Number of users** to train. - **Geographic spread.** - **Industry-specific requirements.** Mid-market: $500K-$2M typical. Enterprise: multiples. **Operations cost factors.** - **Internal admin** — 0.5-2 FTE typical. - **Partner support** — typically retainer. - **Microsoft premier support** — for enterprises. - **Training refresh** — ongoing. Operations is steady-state cost; underestimated by many. **Customisation maintenance.** - Customisations age. - New requirements add more. - Some customisations need rebuild as platform evolves. - 10-20% of original customisation cost annually for maintenance. The "free customisation forever" myth costs organisations real money. **Microsoft platform evolution.** - **Two waves per year** — features added. - **Some breaking** — require adjustment. - **Most additive** — opt in if useful. Plan for keeping up; lagging accumulates debt. **Integration cost.** - **Initial integration** — significant. - **Ongoing maintenance** — schema changes, version updates. - **Connector licences** — premium connectors cost. - **Custom integration** — most maintenance. Integrations are technical debt accumulator if not maintained. **Hidden costs.** - **Productivity dip** during transition. - **Change management.** - **External consulting** for specific issues. - **Compliance audits.** - **Data quality remediation.** These exist; budgeting for them matters. **Soft benefits / cost avoidance.** - **Decommissioned legacy** — savings. - **Productivity improvement** — measurable. - **Better decisions** from data. - **Reduced manual work.** These offset cost; quantify for ROI calculation. **TCO modelling techniques.** - **Spreadsheet model** — line items per year. - **Sensitivity analysis** — what if user count grows X%. - **Scenario modelling** — best case, expected, worst. Simple spreadsheet sufficient for most; specialised tools for enterprise. **Common modelling errors.** - **Underestimating implementation.** Partner low-balls; actuals exceed. - **No customisation maintenance.** Built once; forgotten. - **No operational team cost.** Assumes existing staff absorb. - **No evolution cost.** Assume zero ongoing build. - **No training refresh.** Train once, never again. - **No data migration cost.** "Just lift and shift." - **No integration cost.** "It's just an API call." Each adds material cost; missing them creates surprise. **TCO vs ROI.** - **TCO** — total cost. - **ROI** — return on the investment. - **Net benefit** — ROI minus TCO. Both needed for business case. ## Comparison TCO Sometimes: - **Stay on legacy** TCO. - **Migrate to Dynamics** TCO. - **Difference** is the case. Honest comparison includes legacy operating cost going forward. **Industry benchmarks.** - **Per-user cost** for similar organisations. - **Cost per process implemented.** - **Implementation cost** as % of annual revenue. Benchmarks help validate estimates. **Reviewing TCO.** - **Annually** — actuals vs forecast. - **Pre-renewal** — informs renewal strategy. - **Pre-major change** — investment decisions. TCO is living model, not one-time estimate. **Cost optimisation strategies.** - **Rightsize licences** continuously. - **Retire unused customisations.** - **Consolidate integrations.** - **Standardise on supported patterns** vs custom. Each saves cost without reducing capability. **Partner role in TCO.** - **Implementation phase** — bulk of partner cost. - **Steady-state** — retainer or per-project. - **Periodic enhancements** — incremental. Partner relationships span the TCO lifecycle. **Microsoft pricing trajectory.** - Periodic price increases. - Plan for 3-5% annual inflation in licence cost. - Sometimes larger adjustments. Build in pricing escalation in multi-year models. ## Strategic positioning TCO modelling is foundational financial discipline for Dynamics 365 ownership. Without it, organisations make decisions on incomplete information. For decision-makers: - Build TCO model upfront. - Update annually with actuals. - Use for renewal and investment decisions. - Share with executive sponsors. The model isn't decoration; it informs strategic choices about Dynamics. The teams that maintain TCO models make better investment decisions; the teams that don't repeatedly face surprise costs and difficult conversations about budget overruns. ## Where to go next The licence line of the model comes from [Dynamics 365 licensing explained](https://www.solvingdynamics365.com/guides/dynamics-365-licensing-explained) and the dated figures on the [pricing pages](https://www.solvingdynamics365.com/pricing); keeping it honest after year one is [licence optimisation](https://www.solvingdynamics365.com/guides/license-optimisation-for-dynamics-365). The benefit side is covered in [ROI measurement](https://www.solvingdynamics365.com/guides/dynamics-365-roi-measurement), the negotiation moment in [renewal strategy](https://www.solvingdynamics365.com/guides/dynamics-365-renewal-strategy), and the largest year-one line — the partner — in [choosing a Dynamics 365 partner](https://www.solvingdynamics365.com/guides/choosing-a-dynamics-365-partner). ### Frequently asked questions **What share of five-year Dynamics 365 TCO is licences?** Typically 25–40%. Implementation runs 20–30%, operations 20–30%, evolution and customisation maintenance 10–15%, and training, integration, and other costs 5–15%. The licence line is rarely the biggest number. **How much does customisation cost to maintain?** Roughly 10–20% of the original build cost every year, because customisations age, release waves change the platform, and some need rebuilding. The free-customisation-forever assumption is the most common modelling error. **What is a typical mid-market implementation cost?** Roughly $500K to $2M for mid-market, and multiples of that for enterprise, driven by module scope, customisation depth, data migration, user count, geography, and industry requirements. **How should licence inflation be modelled?** Plan for 3–5% annual increases in licence cost with occasional larger adjustments, and build the escalation into any multi-year model rather than holding year-one prices flat. --- # Dynamics 365 vs SAP The two enterprise ERP conversations that actually happen — S/4HANA vs Finance & Operations, and Business One vs Business Central — where each side wins. Source: https://www.solvingdynamics365.com/guides/dynamics-365-vs-sap Section: Foundations Published: 2026-08-31 "Dynamics 365 vs SAP" is really two different conversations wearing one name, and the first job in any evaluation is working out which one you're having. SAP and Microsoft each sell a big-enterprise ERP and an SMB ERP, and the honest comparisons run product to product: - **SAP S/4HANA vs [Dynamics 365 Finance](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-finance) + [Supply Chain Management](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-supply-chain)** — the enterprise conversation. - **SAP Business One vs [Business Central](https://www.solvingdynamics365.com/guides/what-is-business-central)** — the SMB and lower-mid-market conversation. Cross-tier comparisons ("Business Central vs S/4HANA") are category errors that only appear in vendor slide decks. This guide takes the two real match-ups in turn, then the part that actually decides deals. ## The enterprise conversation: S/4HANA vs Finance & Operations **Where SAP wins.** Depth and reach at the top of the market. S/4HANA is the system of record for a large share of the world's biggest manufacturers, energy companies, and conglomerates, and it shows in the functional ceiling: industry solutions with decades of accumulated edge-case handling, extremely mature multi-entity financial consolidation at massive scale, and process depth in areas like process manufacturing, plant maintenance, and global trade that F&O matches only partially. If your requirements sound like "40 manufacturing plants, five regulatory regimes, hard real-time integration to shop-floor systems", SAP's reference list is simply longer. The surrounding ecosystem — consultancies, trained users, template libraries — is the deepest in the industry, for better and for worse. **Where Dynamics 365 wins.** The stack around the ERP. F&O sits natively next to [the Power Platform](https://www.solvingdynamics365.com/guides/finance-and-operations-and-the-power-platform), Microsoft 365, Azure, and the Dataverse-based CRM apps — so extending a process with a Power App, automating with Power Automate, reporting through Power BI, or grounding Copilot on business data uses the platform your organisation already licenses and your IT team already knows. User experience is a consistent advantage in evaluations: F&O and especially the surrounding apps feel like the Microsoft software people use all day, which shows up later as lower training cost and better adoption. Microsoft's [One Version model](https://www.solvingdynamics365.com/guides/dynamics-365-one-version-and-updates) keeps every customer current with continuous updates — a real contrast with the SAP world's version-migration projects. And commercially, Microsoft is typically the more flexible party in mid-enterprise deals, because it's the challenger there. **Where they tie.** Both are capable core ERPs — general ledger, procure-to-pay, order-to-cash, inventory, production — and no mid-size or large business fails with either because the software couldn't post an invoice. Both also share the same honest weakness: implementation success depends overwhelmingly on the partner and the customer's own discipline, not the product. A badly-run S/4HANA project and a badly-run F&O project fail identically. ## The SMB conversation: Business One vs Business Central This one is less symmetrical. SAP Business One is a solid product with a loyal partner channel, but it's a separate codebase from S/4HANA — choosing it buys the SAP logo, not the SAP enterprise platform — and its cloud story arrived later and less natively than Business Central's SaaS model. Business Central brings the modern argument set: true multi-tenant SaaS, twice-yearly automatic updates, the AL extension model instead of database customisation, native Power Platform and Microsoft 365 integration, [Copilot features included in the licence](https://www.solvingdynamics365.com/guides/copilot-in-business-central), and AppSource's growing ISV catalogue. In most straight evaluations at this tier, Business Central wins on platform trajectory and total cost of running, and Business One wins where a specific localisation, industry micro-vertical, or incumbent partner relationship carries the deal. There's a reason the migration flow runs mostly one way — covered in [migrating from SAP Business One to Business Central](https://www.solvingdynamics365.com/guides/migrating-from-sap-business-one-to-business-central). ## How the decision actually gets made The same forces that decide [the Salesforce comparison](https://www.solvingdynamics365.com/guides/dynamics-365-sales-vs-salesforce) decide this one: - **Incumbency and the surrounding stack.** A global enterprise with twenty years of SAP process assets, SAP-trained staff, and SAP-integrated satellites rarely leaves over feature comparisons; the switching cost dwarfs any licence delta. Symmetrically, a Microsoft-stack organisation choosing its first serious ERP leans Dynamics before the demo starts. - **The ECC deadline.** SAP's end of mainstream ECC maintenance is the industry's great forcing function: the move to S/4HANA is a re-implementation, which means every ECC customer is, briefly, a prospect for everyone. This is when Dynamics 365 gets its enterprise at-bats — the argument being "if we must re-implement anyway, compare the destinations, not the logos". - **Two-tier ERP.** The most common way Dynamics enters SAP houses: corporate consolidation stays on S/4HANA while subsidiaries, new markets, and acquisitions run Business Central or F&O — cheaper, faster to stand up per entity, and integrated upward for reporting. Two-tier is a legitimate architecture, not a compromise, and both vendors quietly sell it. - **People supply.** SAP skills are plentiful globally but expensive and concentrated in enterprise consultancies; Dynamics skills are broader in the mid-market. Check your region and industry rather than the global picture — your project runs on the consultants you can actually hire, a point that belongs in [partner selection](https://www.solvingdynamics365.com/guides/choosing-a-dynamics-365-partner) regardless of vendor. ## The honest bottom line At the very top of the market, SAP remains the default and Dynamics 365 the credible challenger that wins on stack synergy, user experience, and commercial terms — most often via divisions and two-tier footholds rather than headquarters rip-and-replace. In the mid-market, Dynamics 365 is at least an equal and frequently the stronger default, with the Microsoft platform story doing the heavy lifting. In the SMB tier, Business Central has the momentum and the more modern architecture. And in every tier, the variance *within* each vendor's projects — scope discipline, data quality, partner quality, [change management](https://www.solvingdynamics365.com/guides/change-management-for-dynamics-365) — is larger than the variance between the vendors. Pick the platform that fits your stack and your people; then spend your energy on the implementation, because that's where these projects are actually won or lost. ### Frequently asked questions **Is Dynamics 365 or SAP the bigger ERP?** SAP is the larger ERP vendor by enterprise market share, and S/4HANA runs more of the world's largest corporations. Dynamics 365 has its strength in the mid-market and in divisions of large enterprises, where Business Central and Finance & Operations compete strongly. **Which is cheaper, Dynamics 365 or SAP?** At the SMB end, Business Central is usually significantly cheaper than SAP Business One to implement and run in the cloud. At the enterprise end, licence lists matter less than implementation and integration cost, where both platforms support multi-year, multi-million projects — the delta depends far more on scope discipline than on vendor. **Can Dynamics 365 replace SAP in a large enterprise?** Yes, and it happens — but the common pattern is not a global rip-and-replace. Dynamics 365 more often wins the two-tier play: corporate stays on SAP while subsidiaries and acquired companies run Business Central or Finance & Operations, integrated upward. **What happens with SAP ECC support ending?** SAP's announced end of mainstream maintenance for ECC forces every ECC customer into a migration decision — mostly to S/4HANA, but it is the single biggest window in which Dynamics 365 gets evaluated as the alternative, because the move to S/4HANA is itself a major re-implementation rather than an upgrade. --- # EDI with Business Central How EDI integration works with Business Central — direct EDI vendors, AppSource connectors, document mapping, and the trade partner setup. Source: https://www.solvingdynamics365.com/guides/edi-with-business-central Section: Integrations / Data movement Published: 2026-05-01 EDI — Electronic Data Interchange — remains the backbone of B2B trading between manufacturers, distributors, and retailers. Business Central doesn't ship EDI capability out of the box, but the integration story is well-established and based on a small number of patterns. ## The shape of EDI Trading partners exchange structured business documents — purchase orders (850), order acknowledgments (855), advance ship notices / ASNs (856), invoices (810) in the American X12 format, or **ORDERS, ORDRSP, DESADV, INVOIC** in EDIFACT. Documents travel over **AS2, SFTP, VAN, or AS4** transport. Each trading partner has slightly different requirements; standardised on paper, varied in practice. ## The Business Central path Three real options. 1. **AppSource EDI connectors.** Several ISVs publish packaged EDI modules — *Lanham EDI*, *EDICOM for BC*, *Pagero, TIE Kinetix*, others — that install into Business Central and provide a configuration UI for partner setup, message mapping, document send/receive, and audit. The most common pattern for SMBs. The connector handles transport, parsing, mapping, and integration with BC's sales/purchase document objects. 2. **External EDI service providers.** Use a dedicated EDI service (SPS Commerce, OpenText GXS, IBM Sterling, TrueCommerce) that handles transport and translation, and integrate to BC via a lightweight bridge — typically file drops, REST API, or an ISV connector. Common when the trading partners require an established EDI provider, or when the volume is too high for in-platform processing. 3. **Custom integration.** Write AL code or a Logic Apps workflow that translates EDI documents to BC records. Cheap to start, painful to maintain across hundreds of partner-specific variations. Rarely the right answer beyond a very small footprint. ## Trading partner setup For each partner, the EDI module captures: the trading partner's EDI identifier (DUNS, GLN, custom code), the document types exchanged (PO, ASN, Invoice), the maps from partner format to BC document fields, sequence number ranges, time-of-day expectations, and acknowledgment requirements. ## Inbound POs A partner sends an 850/ORDERS. The EDI module receives it, validates, and creates a **sales order** in BC with the partner as the customer. Item-number mapping (partner's part number → BC item number) is critical and partner-specific. Errors stage for review. ## Outbound ASNs and Invoices When BC posts a shipment, the EDI module generates an 856/DESADV and sends it; same for invoices. ## Compliance Retail and automotive partners often impose **chargebacks** for late or malformed EDI — slipped ASNs after shipment, missing fields, incorrect GTINs. Monitoring and exception handling are non-negotiable. ## Operational reality EDI is unglamorous infrastructure. Budget for ongoing partner onboarding and map maintenance — every partner is a small project. --- # Elastic tables in Dataverse How Dataverse's elastic tables differ from standard tables — Azure Cosmos DB backend, write performance, query trade-offs. Source: https://www.solvingdynamics365.com/guides/dataverse-elastic-tables Section: Customer Engagement / Dataverse platform Published: 2026-05-01 For most Dataverse use, the answer is "use a standard table." But for scenarios with very high write throughput, very large row counts, or schema flexibility needs, **elastic tables** offer a different storage backend with different trade-offs. Knowing when each fits is part of being effective in Dataverse architecture. ## Standard tables Backed by Azure SQL Database. The properties: - Strong relational integrity. - Full FetchXML and OData query support. - Sophisticated workflow, plugin, business rule extensibility. - Throughput limits in the hundreds to low thousands of writes per second per table. - Sized in the millions of rows comfortably; tens of millions with care; hundreds of millions slows down. This is the default and the right answer for ~95% of business data. ## Elastic tables Backed by Azure Cosmos DB (NoSQL document store) underneath the Dataverse abstraction. The properties: - Massive write throughput (tens of thousands of writes per second). - Practically unlimited row counts (billions feasible). - Schema flexibility — columns can vary per row to a degree. - Limited query language — no joins, simpler filtering. - Limited extensibility — fewer plugin/workflow events. - Time-to-live (TTL) per row for automatic expiration. **When elastic tables make sense.** - **IoT telemetry and sensor data** — high-frequency device readings. - **Audit logs and event streams** — append-mostly workloads. - **Session and cache data** — short-lived data with TTL. - **Transaction logs from external systems** — bulk ingestion. - **AI conversation transcripts** — high-volume, ephemeral data. **When standard tables remain the right choice.** - **Master data** (accounts, contacts, products). - **Transactional records** that participate in business processes. - **Data needing complex queries** (joins, aggregations, calculated columns). - **Data needing extensive workflow / plugin extensibility.** - **Most CRM-style entities.** ## Creating an elastic table In the maker portal: 1. New table → Advanced options → Table type: **Elastic**. 2. Define columns. 3. Configure partition key (more on this below). 4. Save and publish. The table appears alongside standard tables but with different capabilities. ## Partition key Elastic tables require a **partition key** column. This is how Cosmos DB physically distributes data across nodes. Good partition keys: - Have high cardinality (many distinct values). - Distribute load evenly (no "hot partition"). - Match common query patterns (queries within a partition are fast). A bad partition key concentrates all writes on one partition, defeating the throughput advantage. Picking it well is the single most important elastic table decision. **Query patterns.** - **Single-row read by primary key** — fastest. - **Within-partition queries** — fast, comparable to standard. - **Cross-partition queries** — slow, expensive in RU/s terms. - **Aggregations** — limited; do them in Power BI or a downstream pipeline. The mental model: elastic tables are great for "ingest fast, look up by key, never join." ## Time-to-live (TTL) Each row can have a TTL column; Cosmos automatically deletes rows past their expiration. For ephemeral data (session logs, temporary captures), TTL eliminates the housekeeping work of periodic cleanup jobs. ## Limited business logic Elastic tables support fewer: - **Plugins** — limited events. - **Workflows** — limited operations. - **Business rules** — limited support. - **Real-time flows** — limited triggers. For most elastic use cases (high-volume ingest), this is fine — business logic should happen downstream, not on the ingest path. ## Cost model Cosmos DB pricing is **request unit (RU)** based. Reads and writes consume RUs; throughput is provisioned. Dataverse abstracts this but the cost scales with throughput, not just storage. Elastic table cost can be substantial under high load — budget accordingly. ## Migration Standard ↔ elastic isn't a switch; data needs migration. Plan the table type at design time. **Integration with the rest of Dataverse.** - **Foreign keys** to standard tables work in limited ways — elastic doesn't enforce relationships the way standard does. - **Reports and Power BI** read elastic data via standard Dataverse connectors. - **Power Automate** can trigger on elastic table changes. **Common pitfalls.** - **Using elastic for general business data.** "It's faster" reasoning, but workflows, joins, and audit needs make it inappropriate. - **Bad partition key choice.** Hot partition → throughput collapses; redesign required. - **Forgetting RU cost.** High-throughput scenarios incur material cost; monitor and budget. - **Treating elastic as drop-in standard.** Queries fail or perform terribly; rewrites needed. - **No TTL on temporal data.** Rows accumulate forever; cost rises. ## Operational recommendation Default to standard tables. Move to elastic tables only when standard performance limits are demonstrably reached or when the use case clearly matches the elastic strength profile (high-volume ingest, ephemeral data, simple queries). The hybrid pattern — elastic for ingest, replicate aggregations to standard for query and reporting — works well at scale. --- # Electronic document sending in Business Central How Business Central sends electronic documents — PEPPOL, country-specific formats, document exchange services, and the operational rhythms of e-invoicing. Source: https://www.solvingdynamics365.com/guides/business-central-electronic-document-sending Section: Business Central / Sales & purchasing Published: 2026-05-01 Updated: 2026-08-25 Many countries mandate **electronic invoicing** — invoices transmitted in structured formats (XML, UBL, PEPPOL) rather than PDF or paper. Business Central supports this through its **Document Sending** framework, **PEPPOL** integration, and country-specific localisation packs. For organisations operating in regulated jurisdictions, e-invoicing isn't optional. **The regulatory landscape.** - **Italy** — SDI (Sistema di Interscambio) mandatory B2B and B2G since 2019. - **France** — Chorus Pro for B2G; B2B mandate phasing in. - **Spain** — TicketBAI in Basque Country; broader e-invoicing rolling out. - **Poland** — KSeF mandatory. - **Mexico** — CFDI for years. - **Brazil** — Nota Fiscal Eletrônica. - **EU broadly** — moving toward mandatory by mid/late 2020s. - **Singapore, India, etc.** — various mandates. Each country has unique formats and submission routes; Microsoft and partners maintain localisations. ## PEPPOL The **Pan-European Public Procurement OnLine** network: - Open standard for B2G and B2B e-invoicing. - UBL-based document format. - Network of certified Access Points routing documents. - Mandated for B2G in many EU countries. BC integrates with PEPPOL via certified access point providers (Comgate, Pagero, others). ## Document Sending Profiles In BC, **Document Sending Profile** records define how documents are sent: - **Email** — PDF attachment. - **Disk** — save to local file. - **Printer** — print. - **Electronic Document** — XML format, often UBL or country-specific. - **Email & Electronic Document** — both. Assigned per customer or vendor; documents respect the assignment when posted. **Configuring electronic format.** - **Electronic Document Format** record defines the XML schema. - **Data Exchange Definition** maps BC fields to XML elements. - Country-specific formats pre-built; custom formats possible. **Sending workflow.** 1. Sales invoice posted. 2. Sending profile = Electronic Document. 3. BC generates the XML. 4. XML sent via configured method (PEPPOL access point, government portal, email). 5. Delivery confirmation captured. **Country-specific extensions.** - **Italy** — Microsoft Italy localisation handles SDI submission and FatturaPA format. - **France** — Microsoft France localisation + Chorus Pro integration. - **Spain** — TicketBAI compliance via partner extensions. - **Mexico** — partner extensions for CFDI generation and SAT submission. For each country, choose between Microsoft localisation, partner extensions, or third-party service. ## Third-party e-invoicing services Providers like Pagero, Tungsten, Tradeshift offer: - Multi-country compliance from one vendor. - Format translation. - Delivery and confirmation tracking. - Archive. BC integrates via API or file exchange. ## Receiving electronic documents Reverse side: - Vendor invoices arrive electronically. - Captured via Incoming Documents. - OCR + electronic format parsing. - Converted to purchase invoices. The Continia Document Capture extension is widely used for this. ## Government archiving Some jurisdictions require electronic invoice archival: - 7–10 years retention. - Government-accessible. - Tamper-evident. Service providers handle this; BC's role is delivery, not necessarily archival. **Failure handling.** - Government portal rejects invoice — operator must fix and resubmit. - Format validation fails — investigation and fix. - Customer/vendor identity wrong — VAT registration mismatch. Each error type has a workflow; documented procedures essential. ## Digital signatures Some formats require signed XML: - Certificate from certified provider. - Signing applied before transmission. - BC handles via partner extensions or third-party. **Operational rhythm.** - **Real-time** — most e-invoicing is real-time per posted invoice. - **Daily reconciliation** — verify all sent invoices acknowledged. - **Monthly summary** — compliance reports. **Common pitfalls.** - **Underestimating implementation cost.** First e-invoicing country can take 2–3 months. - **Customer / vendor master data gaps.** VAT number wrong; invoice rejected. - **Format version drift.** Government updates format; BC localisation lags; invoices rejected. - **No fallback for portal outages.** Government portal down; invoices accumulate. - **Archiving missed.** Required retention not implemented; audit findings. ## Strategic positioning E-invoicing is now table stakes for B2B operations in regulated jurisdictions. BC supports it through Microsoft localisations and partner extensions; the choice between Microsoft-direct and partner depends on country coverage and feature depth. Plan for compliance proactively — last-minute scrambles before mandates are expensive and error-prone. The investment is structural; e-invoicing isn't going away — every developed market is on the trajectory toward mandatory. --- # Electronic Reporting (ER) in Finance & Operations How the Electronic Reporting framework in Dynamics 365 Finance and SCM generates statutory filings, e-invoices. Source: https://www.solvingdynamics365.com/guides/electronic-reporting-in-f-and-o Section: Finance & SCM Published: 2026-08-31 Every jurisdiction wants something structured out of your ERP — a VAT return in the tax authority's XML, an e-invoice in the national schema, a payment file your bank will accept, a SAF-T audit export. Historically that meant hard-coded, per-country report code that only Microsoft or a developer could change. [Electronic Reporting (ER)](https://www.solvingdynamics365.com/glossary/electronic-reporting) is Dynamics 365 Finance and Supply Chain Management's answer: a configurable engine where the *format* of an output is data, not code — versioned configurations that can be imported, extended, and updated without touching X++. If you run F&O in more than one country, ER is not optional plumbing; it's the layer your statutory compliance actually lives in, and it deserves a named owner. ## The three-layer configuration model An ER solution is a small stack of configurations, each a separate, versioned artefact: 1. **Data model** — an abstract, business-level description of the information a document needs (an "invoice" with parties, lines, taxes), independent of both F&O's tables and the output format. 2. **Model mapping** — binds the data model to real F&O data sources: tables, entities, calculated fields. This is the layer that knows where amounts and VAT numbers live. 3. **Format** — describes the physical output (XML elements, JSON structure, fixed-width positions, Excel or Word layouts for configurable business documents like customer invoices) and maps each node back to the data model. The separation is the point. When a tax authority revises its schema, only the format changes; when you customise a table, only the mapping needs attention. Formats also support **derived configurations**: you extend Microsoft's format with your changes in a child version, and when Microsoft ships an update you *rebase* rather than re-implement — the same upgrade-safe philosophy as AL extensions or F&O's own extension model, applied to file layouts. ER runs in both directions. Outbound covers the statutory catalogue — VAT declarations (UK MTD among them, feeding [the F&O tax engine](https://www.solvingdynamics365.com/guides/the-f-and-o-tax-engine)), EU sales lists and [Intrastat](https://www.solvingdynamics365.com/guides/intrastat-reporting-in-f-and-o), SAF-T, e-invoicing formats like Italy's SDI or Mexico's CFDI, and payment files from SEPA credit transfers to [positive pay](https://www.solvingdynamics365.com/guides/positive-pay-files-in-f-and-o). Inbound lets the same machinery *parse* structured files — bank statements (camt.053), payment returns — into F&O. ## Where configurations come from Almost never from you. Microsoft maintains hundreds of localisation configurations and publishes them through a **global repository**, historically surfaced via LCS and the Regulatory Configuration Service and now consolidated under the **Globalization Studio** umbrella in the product itself. The working model is: import Microsoft's configuration for your country and document type, and only create a derived version if you genuinely need a deviation (a bank that wants a non-standard reference field, a customer-specific e-invoice extension). Each configuration carries a **configuration provider** identity. Leave Microsoft's configurations owned by Microsoft and put your derived versions under your own provider — it's what makes "which of this is ours?" answerable two years later. ## Running ER without drowning The framework is sound; the operational failure modes are predictable: - **Version drift.** Tax authorities and banks change schemas on their schedule, and Microsoft ships updated configurations continuously — outside the application release cadence. If nobody watches for updates, you find out from a rejected filing. Make checking for new versions of your active configurations a monthly task with a named owner, and treat configuration updates like small changes: import to a sandbox, test with real documents, then promote. - **Configurations are not in your ALM pipeline by default.** They move as exported XML files or repository imports, not in the deployable package. Decide deliberately how they travel from sandbox to production — who exports, who imports, where the file is archived — or production quietly runs a different version than what was tested. - **Editing Microsoft's version directly.** Change the base configuration instead of a derived one and the next Microsoft update becomes a merge headache or an overwrite. Derive, always. - **Treating ER as a developer-only tool.** The format designer is genuinely usable by a strong functional consultant, and the people who understand the statutory requirement are usually functional. Teams that route every ER tweak through X++ developers pay in both queue time and translation errors. ## When ER is the wrong tool ER excels at structured, document-shaped, compliance-driven outputs. It is not a BI layer — analytical reporting belongs in the [Finance reporting stack](https://www.solvingdynamics365.com/guides/dynamics-365-finance-reporting-tools) — and it's not an integration platform: recurring high-volume data exchange with other systems is [DMF and data entities](https://www.solvingdynamics365.com/guides/data-management-framework-deep-dive) territory, and event-driven integration belongs to the platform's messaging patterns. The rule of thumb: if a government, bank, or trading partner prescribes the file's exact shape, ER; if you control both ends, use the integration surfaces built for it. The strategic reason to invest a little in ER literacy: e-invoicing and digital reporting mandates are spreading, country by country, and each new mandate lands on this framework. An implementation that knows how to import, derive, test, and promote ER configurations absorbs the next mandate as routine maintenance; one that doesn't turns each into a mini-project. --- # Email deliverability for Customer Insights – Journeys How to set up email deliverability in Customer Insights – Journeys — sending domain, DKIM/SPF/DMARC, IP warm-up, and reputation management. Source: https://www.solvingdynamics365.com/guides/email-deliverability-for-customer-insights-journeys Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 Email deliverability — the fraction of emails that actually land in the recipient's inbox rather than spam — is the single largest determinant of marketing email ROI. Customer Insights – Journeys gives you the tools; the configuration discipline is the customer's responsibility. ## The sending architecture Customer Insights – Journeys sends through Microsoft's email infrastructure with the customer's **sending domain** as the visible "from" address. The mechanics: - Email comes *from* `marketing@customer.com` (or whatever sender the customer configures). - But it's *sent through* Microsoft's mail servers — not the customer's own mail relay. - DNS records on `customer.com` tell receiving servers that Microsoft's servers are authorised to send on behalf of customer.com. **The required DNS records.** - **SPF (Sender Policy Framework)** — a TXT record listing IPs/domains authorised to send for the domain. Customer Insights – Journeys provides the include statements to add. - **DKIM (DomainKeys Identified Mail)** — cryptographic signing of outgoing email. Microsoft generates a key pair; the customer adds the public key as a DNS TXT record. Each outgoing email is signed with the private key; receiving servers verify the signature against the published public key. - **DMARC (Domain-based Message Authentication, Reporting & Conformance)** — a policy DNS record declaring what should happen to email that fails SPF/DKIM (none / quarantine / reject) and where to send aggregate reports. Without all three, deliverability suffers across major email providers (Gmail, Outlook, Apple Mail, Yahoo). Setting them up before first send is non-negotiable. ## Sending subdomain Best practice is to send marketing email from a **dedicated subdomain** (e.g. `mail.customer.com` or `news.customer.com`), separate from transactional and personal email on the main domain. A reputation problem on the marketing subdomain doesn't poison the main domain. Microsoft recommends and supports this pattern. ## IP warm-up New sending IPs have no reputation; sending high volume from a cold IP triggers spam-folder routing. Warming up: 1. Week 1: 1,000–5,000 emails to highly-engaged contacts only. 2. Week 2–3: gradually increase to full volume, prioritising contacts likely to open and click. 3. Avoid bursts to unverified addresses early in the warm-up. The platform handles the IP pool; the customer's responsibility is content quality and list hygiene during the warm-up window. ## List hygiene Major drivers of deliverability collapse: - **High bounce rate** — sending to invalid addresses signals you don't manage your list. Validate addresses on capture; remove repeated hard bounces. - **Spam complaints** — recipients clicking "report spam" damages reputation. Make unsubscribe prominent; honour it instantly. - **Low engagement** — Gmail and Outlook downrank senders whose recipients consistently ignore the mail. Suppress disengaged contacts after configurable periods. ## Content quality Email content drives spam-filter scoring: - **Subject lines** — avoid spammy phrasing ("FREE!!!", "100% guaranteed", excessive punctuation, all caps). - **Image-to-text ratio** — image-only emails get flagged; balance with real text content. - **Links** — too many, or links to dubious domains, hurt scoring. - **Unsubscribe link** — required by CAN-SPAM, GDPR, and similar regulations. Customer Insights – Journeys auto-inserts; ensure it works. ## Monitoring Built-in dashboards track delivery rate, bounce rate, open rate, click rate, spam-complaint rate per send. **Postmaster Tools** (Gmail, Microsoft) provide additional signal. Anomalies require investigation — sudden drops are usually configuration issues or reputation problems. ## Operational reality Deliverability is a discipline, not a one-time setup. Audit DNS records quarterly; review engagement metrics weekly; act on bounces and complaints monthly. --- # Email engagement and tracking in Dynamics 365 Sales How email tracking works in Dynamics 365 Sales — opens, clicks, server-side sync, the Outlook add-in, and where the data lives. Source: https://www.solvingdynamics365.com/guides/email-engagement-and-tracking-in-sales Section: Customer Engagement / Sales Published: 2026-05-01 Email tracking is one of the oldest and stickiest features in CRM, and Dynamics 365 Sales does it in two complementary ways: **server-side synchronisation** with Exchange Online for automatic capture and tracking, and **email engagement** signals for opens, clicks, and attachment views. ## Server-side sync (SSS) SSS is the modern, recommended way to connect Exchange Online mailboxes to Dataverse. Once enabled per user (typically via tenant-wide configuration), every email sent or received that involves a tracked CRM contact or lead is automatically created as an Email record in Dataverse. The sync is bidirectional, runs without an Outlook client open, and includes calendar appointments and tasks. ## Tracking Tracking rules govern *which* emails get pulled into CRM. The default is **automatic** for emails involving tracked contacts; users can manually track ad-hoc emails through the Outlook add-in. Folder tracking (a designated Outlook folder triggers tracking) is also supported. ## The Outlook add-in The **Dynamics 365 App for Outlook** runs inside Outlook web and desktop, showing a side pane with related CRM data: contact, account, recent activities, open cases or opportunities. The user can track or untrack the current email, set its regarding object (the CRM record it relates to), and quickly create new CRM records from email content. Combined with **Copilot for Sales**, the same pane offers AI-drafted replies and meeting briefings. ## Email engagement A separate (optional) feature adds tracking pixels and link wrappers to outgoing emails so the system records **opens**, **clicks**, **replies**, and **attachment views**. Sellers see signals on the opportunity timeline ("Karen opened your proposal three times") and can configure follow-up reminders. ## Privacy Email engagement is opt-in per organisation and per email. The tracking pixel can be disabled when recipients require it; Microsoft is increasingly conservative about tracking practices to comply with GDPR and similar regulations. Recipients can see they're being tracked in some configurations. ## Mail merge alternative **Sales accelerator sequences** and **Customer Insights – Journeys** are the modern alternatives to bulk send-and-track. The seller-driven Outlook flow is for one-to-one selling; campaigns belong in marketing. ## Storage Tracked emails live in Dataverse with full content, including attachments. Mailbox-scale email volume can drive Dataverse storage cost — manage retention with bulk-delete jobs or move attachments to file storage. ## Common gotcha SSS configuration is fiddly the first time (mailbox approvals, M365 admin steps, test cycles). Allow a day for setup and verification on a new tenant. Once stable, it Just Works for years. --- # Email setup and outgoing email in Business Central How Business Central sends email — email accounts, scenarios, templates, and the integration with Microsoft 365. Source: https://www.solvingdynamics365.com/guides/email-setup-and-outgoing-email-in-business-central Section: Business Central / Compliance & localisation Published: 2026-05-01 Business Central sends a lot of email: posted invoices to customers, payment reminders, statements, approval requests, document attachments to vendors. The configuration that makes this work — and works *reliably*, with the right *from* address per situation — is more nuanced than a casual user might assume. ## Email accounts An **email account** in Business Central is a configured outgoing email channel. Each account has a name, an email address, a description, and a provider. Multiple accounts can be configured — common patterns: a *general* account (info@company.com), an *AR* account (ar@company.com), an *AP* account (ap@company.com), a *sales* account (sales@company.com). ## Email providers Business Central supports several providers: - **Microsoft 365** — the recommended provider for tenants on Microsoft 365. Uses the signed-in user's mailbox (or a shared mailbox) via Graph API. No SMTP setup required. - **Microsoft 365 (Shared Mailbox)** — sends from a shared mailbox the user has access to. The pattern for departmental email (ar@company.com sent on behalf by individual users). - **SMTP** — for tenants using non-Microsoft mail (Google Workspace, on-premise Exchange, generic SMTP). Requires server, port, authentication. - **Current User** — uses whoever is signed in. - **Custom email connector apps** — partners ship AppSource extensions for additional providers (SendGrid, Mailgun, third-party SMTP relays). ## Email scenarios Each email-sending situation in Business Central is a **scenario** — Posted Sales Invoice, Posted Sales Credit Memo, Statement, Reminder, Posted Purchase Order, Approval, etc. Each scenario can be mapped to a specific email account. The wiring lets posted invoices go from ar@, purchase orders from buyer@, statements from accounts@. ## Email body templates A **body layout** is a Word-based template that defines the email body when a document is sent. Templates can be: - **Default** — used when no specific template is configured. - **Per scenario** — specific template for invoices, separate for statements. - **Per language** — Swedish-language invoices use the Swedish body; German-language invoices use the German body. Templates support merge fields (customer name, document number, due date, total amount) that resolve at send time. ## Attachments Posted documents are attached as PDF. Multiple attachments can be added — a cover letter PDF, a logo, an additional information sheet — through the configured email layouts. ## Email logs Every sent email is logged with timestamp, sender, recipient, subject, attachments, and status (sent, failed, queued). The log retains for the configured retention window and is the audit trail for "did the customer get this invoice?". ## Send Later Posted documents can be queued in **Send Later** rather than sent immediately, with a single batch send at end of day. Useful for organisations that want invoice sends bundled into one outgoing flow. ## Email Inbox (incoming email) A separate, opt-in feature reads a configured shared mailbox for incoming documents. AP teams use it to flow vendor invoices into the Incoming Documents queue without manual upload. See the Incoming Documents guide for the deeper flow. **Common pitfalls.** - **Send-as permissions on shared mailboxes** — must be granted in Microsoft 365 admin centre, or sends fail mysteriously. - **DKIM / SPF / DMARC** — wrong DNS for the sending domain lands invoices in customer spam folders. Verify with the tenant admin. - **Single hard-coded sender** — every email leaves the same address regardless of context. Customer service responses to ar@'s reminder go to a noise inbox. Configure scenarios deliberately. ## Best practice Three to five email accounts mapped to scenarios is enough for most SMBs. Test sending to a real customer mailbox during go-live; don't trust internal test loops alone. --- # Email templates and bulk email in Dynamics 365 Sales How email templates, signatures, and bulk email work in Dynamics 365 Sales — and where Customer Insights – Journeys is the better answer. Source: https://www.solvingdynamics365.com/guides/email-templates-and-bulk-email-in-sales Section: Customer Engagement / Sales Published: 2026-05-01 Sellers send a lot of email — and a substantial slice is repeatable: introductions, follow-ups, meeting confirmations, proposal-attached cover notes, renewal reminders. Dynamics 365 Sales ships **email templates** and basic bulk-email capability for these. For anything beyond seller-driven personal email, Customer Insights – Journeys is the better tool. ## Email templates A template is a reusable email body with placeholder slots that fill in from CRM data — `{!fullname}`, `{!account.name}`, `{!opportunity.estimatedclosedate}`. When a seller sends from a template, the placeholders resolve to the values for the specific record. Templates can: - Be **personal** (one seller's own) or **organisational** (shared). - Include the seller's signature. - Embed attachments. - Be linked to specific entity types — opportunity templates surface on opportunity records, lead templates on leads. ## Signatures Each seller has one or more email signatures, attached automatically when sending from Dynamics 365. Signatures support placeholders for the seller's name, title, phone — pulled from the user record — and can include images, social links, and disclaimers. ## Where templates fit The right tool for: - Repeat one-to-one selling emails ("nice to meet you", "thanks for the meeting", "here's the proposal"). - Confirmation emails sent from CRM-driven workflows (lead-acknowledgment auto-replies). - Renewal and milestone-driven outreach where the content needs to be tracked back to CRM. ## Quick campaigns Dynamics 365 Sales includes a **quick campaign** feature for *one-time* small bulk sends — pick a marketing list (a saved view), select an email template, send to everyone on the list, track responses. It's the lightweight option when 200 emails need to go out for an event reminder. Quick campaigns are NOT a marketing-automation tool — they have: - No journey orchestration. - No A/B testing. - No opens / clicks at marketing-grade tracking. - No suppression list management. - Limited deliverability scaling. Use quick campaigns for occasional small sends. For anything else, use Journeys. ## Customer Insights – Journeys The proper tool for any structured outbound marketing or operational nurture: journeys with multi-step orchestration, segmentation, A/B testing, opens/clicks/engagement metrics, deliverability monitoring, suppression lists, DKIM/SPF setup, and compliance with marketing regulations. The cost is a separate licence and a non-trivial implementation. ## The boundary A useful rule: - **Outbound to one customer at a time, by a seller** — Sales email templates. - **Outbound to a list with engagement tracking and orchestration** — Customer Insights – Journeys. Drawing this boundary clearly avoids sellers using quick campaigns for what should be a marketing operation, and avoids marketing teams running campaigns from CRM at sub-scale. ## Compliance Even seller-driven email needs basic compliance: - **Suppression** — Dynamics 365 honours the contact's `donotbulkemail` flag for quick campaigns. - **GDPR / regulatory consent** — track and honour. Sales is *not* exempt from consent rules. - **CAN-SPAM / equivalents** — include unsubscribe and physical address in bulk sends. **Common pitfalls.** - **Templates that hard-code a stale signature** — update signatures separately and templates pull them dynamically. - **Templates that include broken merge fields** — test by sending to a real test record; placeholders that didn't resolve send "{!fullname}" to the customer. - **Using quick campaigns as marketing automation** — capabilities don't match expectations. ## Operational discipline Keep a library of 10–20 organisational templates well-named and maintained; let sellers own personal templates for their own variations. --- # Endless aisle and cross-store inventory in Dynamics 365 Commerce How Dynamics 365 Commerce supports endless-aisle selling — customer orders from the POS, cross-store inventory lookup, deposits. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-retail-endless-aisle Section: Industries / Retail Published: 2026-09-02 Endless aisle is the promise that a store never loses a sale to a stock-out: if the item is not on the shelf, the associate sells it anyway and it ships from a warehouse or another store. It is a retail strategy rather than a feature, but it maps onto a specific set of **Dynamics 365 Commerce** capabilities, and the ones it does not map onto are worth knowing before the project is scoped. ## The core mechanism: customer orders at the POS Commerce's POS does not only ring up cash-and-carry sales. It creates **customer orders** — sales orders in headquarters that originate in a store — with a delivery mode of ship-to-customer, pick up at this store later, or pick up at another store. The associate adds products, chooses delivery, takes a deposit, and the order flows to headquarters for fulfilment exactly as an e-commerce order would. That single capability is most of endless aisle. The rest is configuration and operations: - **Deposit policy.** Headquarters sets a default deposit percentage per store and whether associates can override it. Full payment up front simplifies accounting but hurts conversion; zero deposit invites no-shows on pickups. Most retailers land on a percentage for pickup orders and full payment for ship-to-home. - **Which products are orderable.** Assortment governs what a store can sell, including items it never stocks. An "extended range" assortment assigned to all stores is the usual pattern, separate from the physical range each store carries. - **Product content on the register.** Selling something the customer cannot touch needs images, attributes, and rich descriptions on the POS. These come from the product master and media in headquarters; if the merchandising team has not loaded them, the associate is selling from a product number. ## Cross-store inventory lookup The associate needs to answer "do we have it anywhere?" in seconds. The Store Commerce app's **inventory lookup** queries availability across stores and warehouses through the Commerce Scale Unit, and the accuracy question is the same one that dogs click-and-collect: store on-hand is only as good as statement posting and counting. For retailers on Supply Chain Management, the **Inventory Visibility** add-in improves this materially — it maintains a near-real-time on-hand picture across channels and legal entities and exposes it to the POS and storefront. It is a separately configured add-in, not something that switches on by default, and it has its own data-model decisions (which dimensions to track, which soft reservations to honour). Plan for it as a workstream. Without it, the lookup still works; it just reflects headquarters as of the last sync and can lie at peak. ## Fulfilment from somewhere else Once the customer order exists, fulfilment is a headquarters problem. Ship-from-warehouse orders go through normal sales-order release and warehouse picking. Pickup-at-another-store or ship-from-another-store orders can be routed by **distributed order management** if it is configured, or simply appear in that store's order-fulfilment queue in the Store Commerce app. The organisational decisions here outweigh the technical ones: - **Which store gets the sale credit** — the selling store or the fulfilling store. Commerce records both the originating channel and the fulfilment location, so reporting can go either way, but store managers will argue about it. Decide once, publish it, and build the Power BI measure accordingly. - **Who bears the shipping cost** on a ship-from-store order. Commerce can charge the customer through delivery charges; absorbing it is a merchandising decision that shows up in margin reports. - **Stock transfer versus sale.** Do not model "sell it from the other store" as a transfer order followed by a local sale. It creates two documents, doubles the picking work, and breaks the customer's order history. Use the customer order. ## Kiosks and self-service This is where the product stops. Commerce has no first-party kiosk application. The options are a locked-down Store Commerce register in a self-service visual profile (workable for simple flows, awkward for payment), the e-commerce storefront in kiosk mode on a tablet (common and cheap, but it is an online order rather than a store transaction), or a partner kiosk product built on the Commerce SDK. The storefront-on-a-tablet route is usually the right first move because it reuses everything already built for online. ## Payments and returns Deposits and balance payments run through the same payment connector as the rest of the POS. The tricky case is a customer order created in one store, paid in part, and collected in another: the balance payment happens at collection, on the collecting store's terminal, against the original order. Commerce supports it; make sure the acquirer's connector does before promising it. Returns of endless-aisle orders follow the standard cross-channel return path — any store can return against the headquarters order. That is worth stating in staff training, because associates tend to assume an order they did not create cannot be refunded on their till. ## Business Central retailers Endless aisle on **Business Central** depends entirely on the POS ISV. Most of the established BC retail add-ons support customer orders from the till with a deposit and ship-from-warehouse fulfilment; cross-store lookup and fulfilment vary widely. Ask the vendor to demonstrate the specific flow — a customer order at store A, collected at store B, with the balance paid at B — rather than accepting "yes, we do endless aisle". ## Sequencing Retailers that succeed with endless aisle usually do it in this order: fix store stock accuracy, load product content, switch on customer orders with a deposit policy, add cross-store lookup, then add DOM and kiosks if the volumes justify them. Doing it in the opposite order — kiosks first — produces impressive demos and a queue of orders that cannot be fulfilled. --- # Engineer-to-order and configure-to-order in Dynamics 365 How Dynamics 365 handles configure-to-order and engineer-to-order manufacturing — the constraint-based product configurator. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-manufacturing-eto-and-cto Section: Industries / Manufacturing Published: 2026-09-02 Make-to-stock manufacturers have a bill of materials before they have an order. Configure-to-order (CTO) and engineer-to-order (ETO) manufacturers do not: the order defines the product. That inversion is what makes these modes hard for ERP, and Dynamics 365 handles the two very differently. CTO is well served in Supply Chain Management by a real product configurator. ETO is served by combining projects, production, and engineering change — capable, but assembled from parts rather than delivered as a single feature. ## Configure-to-order CTO means the product is a fixed set of options — a pump with a choice of motors, seals, and flanges — and every valid combination can be expressed as rules. The customer picks; the system generates the BOM, route, and price. **Supply Chain Management** does this with the **constraint-based product configuration** model. You define a product model with components, attributes, constraints (expressions or table constraints that say which combinations are valid), BOM lines and route operations conditioned on attribute values, and optionally a price model that adds up option prices. On a sales order line for the configurable item, the user runs the configurator, answers the questions, and the system creates a configured variant with its own BOM and route. Master planning and production then treat it as an ordinary item. Practical guidance from CTO implementations: - **Model the product family, not the catalogue.** A configurator with two hundred attributes for one pump family is a maintenance burden nobody will keep current. Start with the options that actually vary, and put rarely-used ones in a free-text "special request" that routes to engineering. - **Decide who owns the model.** Product engineering owns the rules; sales owns the questions and the order in which they are asked; finance owns the price model. Without named owners the model drifts from the real product within a year. - **Test with real quotes.** Take the last fifty configured orders from the legacy system and reproduce them. Every mismatch is either a modelling gap or a case where the old system let sales order something that cannot be built. - **Reuse configured variants.** The configurator can reuse an existing variant when the same answers are given, which keeps the item master from filling up with duplicates. Turn it on. **Business Central** has item variants and assembly or production BOMs but no constraint-based configurator. For a handful of options, variants and a per-variant BOM work. Beyond that, CTO on BC means a configurator ISV — several exist on AppSource — or a CPQ front end that generates the BOM and pushes it in. Ask any ISV to show a configured sales line becoming a production order without manual re-keying; that is the step where thin solutions break. ## Engineer-to-order ETO means the product is designed, at least in part, after the order is won — a piece of process equipment, a control panel, a special vehicle. There is engineering lead time inside the delivery lead time, cost is tracked per order, and the BOM changes while the order is in progress. In Supply Chain Management, the working pattern is: 1. **A project per order** in Project management and accounting, with the sales order linked to it. All cost — engineering hours, purchased items, production — posts to the project, which gives per-order WIP, margin, and revenue recognition. 2. **Item requirements or project-linked production orders** for the things to be built. Production orders created from the project carry its dimensions and post their costs to it. 3. **Engineering versions and change orders** through the **Engineering Change Management** add-in, which gives released products a version, a formal change request and change order process, and controlled release of new versions into the operational legal entity. Without it, BOM versioning alone works but there is no workflow around a mid-order design change. 4. **Estimates and forecasts on the project** to track budget against actual as engineering discovers what the job really needs. What to be honest about: - The project module in F&O is finance-shaped. Engineers will not plan in it. Real engineering planning lives in a PLM or CAD system, and the item and BOM data flows in through a PLM integration — partner connectors exist for the major PLM products, and Engineering Change Management is designed as the landing point for that data. - Dynamics 365 **Project Operations** on Dataverse is not the tool for ETO manufacturing. It is for services projects; it does not drive production orders or inventory. ETO manufacturers who are also on Project Operations for services work end up with two project systems, which is uncomfortable but sometimes correct. - Percentage-of-completion revenue on long ETO jobs works through the project's estimate and revenue recognition process. It needs finance to define cost templates and completion methods early, or WIP will be unexplainable at the first audit. Business Central can do simple ETO with projects, production orders posted against the project, and manual BOM edits. The lack of engineering change control and the lighter project costing mean a business whose orders routinely change design mid-flight will strain it; a business doing a few bespoke jobs a month with stable designs after order will be fine. ## Hybrids Most real manufacturers are a mix: a configurable standard range with an ETO "special" path for the ten percent that does not fit. The clean way to model it in Supply Chain Management is a configured variant as the starting BOM, copied to a project-specific BOM version when engineering has to intervene. It preserves the configurator's economics for the standard ninety percent and gives the specials a proper cost home. ## Where to start CTO: build the configurator model for one product family end to end, from sales line to shipped order, before touching the second family. ETO: get the project-to-production cost flow and WIP reporting right on one live job before automating engineering change. In both modes the first mistake is modelling the whole catalogue before anyone has shipped an order through the new flow. --- # Entitlements in Customer Service How entitlements work in Dynamics 365 Customer Service — service contracts, balance tracking, channel scope, and the integration with SLAs and routing. Source: https://www.solvingdynamics365.com/guides/entitlements-in-customer-service Section: Customer Engagement / Customer Service Published: 2026-05-01 **Entitlements** in Dynamics 365 Customer Service represent what a customer is entitled to — the contractual scope of their service relationship. They're how support organisations enforce contract terms automatically: this customer paid for 24/7 support; this customer gets only email; this customer has 10 incidents remaining on their contract; this customer's premium SLA expires next month. ## The model An **entitlement** record carries: - **Customer** — the account or contact who has the entitlement. - **Products** — which products the entitlement covers (e.g. only premium-tier software, not consumer-tier). - **Start and end dates** — the validity period. - **Channels** — which channels are covered (phone, email, chat, SMS). - **Entitlement terms** — what's purchased: number of incidents, support hours, or coverage type (per-incident, per-period, unlimited). - **Restricted contacts** — optional list of specific named contacts authorised to use this entitlement. - **SLA** — the SLA that applies to cases under this entitlement. - **Status** — Draft, Active, Cancelled, Expired, Renewed. **Allocation types.** - **Per-incident** — a number of cases the customer can open. - **Per-period (hours)** — total support hours per period. - **Per-period (incidents)** — total cases per period. - **Unlimited** — no quantity restriction. Allocations decrement as cases consume them; once exhausted, new cases either block or require explicit override. ## Case association When a case is created, the system matches it to the most applicable entitlement based on customer, product, channel, and current date. The active entitlement is recorded on the case, drives the SLA assignment, and decrements the remaining allocation. ## Manual override Agents can override the entitlement on a case if business rules warrant — e.g. accept an over-quota case as a customer-satisfaction gesture. Overrides are logged for audit. ## Multi-entitlement scenarios A customer can have multiple active entitlements (different products, different terms). The matching logic picks the most specific one for each case; ties default to oldest start date or to a configured priority. ## Lifecycle and renewal Entitlements have a renewal date. Power Automate flows can trigger renewal workflows N days before expiry — notify the account manager, generate a renewal opportunity in Sales, propose new terms. Mature support orgs treat entitlement renewal as a sales motion, not an administrative one. ## Reporting Entitlement reporting answers: - Which customers are near depletion (sales upsell trigger). - Which entitlements are about to expire (renewal motion). - Average utilisation per customer / per tier (pricing analysis). - High-touch customers (potential health-of-account signal). ## Integration with Sales Entitlements often originate as contracts in Dynamics 365 Sales — closed-won opportunities for support contracts create the corresponding entitlement records in Customer Service. Power Automate flows or built-in integrations handle the handoff. **Common patterns.** - **Tiered support** — Bronze (basic email, 30 incidents/year), Silver (phone + email, 100/year, 4-hour SLA), Gold (24/7 omnichannel, unlimited incidents, 1-hour SLA, named CSM). - **OEM-style** — entitlement scoped per product, per channel, with strict tracking for warranty-period cases. - **Pay-per-incident** — entitlements track a balance that the customer tops up; once depleted, cases either block or charge. ## Limits Sophisticated subscription billing with mid-period entitlement changes, prorations, and bundled-product allocations may need a specialist tool — Dynamics 365's Subscription Billing on F&O, or a dedicated subscription-management platform integrated with Customer Service. ## Operational reality Entitlements are operational discipline. Configured well, they enforce contractual terms invisibly and surface upsell / renewal moments. Ignored, they're forgotten records that don't reflect actual service delivery. --- # Entra External ID for customer access How Microsoft Entra External ID provides customer-grade identity for Power Pages portals and external Dynamics 365 access — sign-up flows, branding. Source: https://www.solvingdynamics365.com/guides/entra-external-id-for-customer-access Section: Integrations / API & identity Published: 2026-08-03 For customer-facing portals built on Power Pages — or any scenario where external users need to authenticate to access Dynamics 365 resources — the identity provider is **Microsoft Entra External ID**. Successor to **Azure AD B2C**, External ID provides customer-grade identity: branded sign-up flows, social identity, MFA, and the scale to handle millions of consumer users without overloading the workforce-focused Microsoft Entra ID directory. **The model.** External ID is a separate tenant from your workforce Entra ID: - **Workforce tenant** — employees, contractors, internal users. The standard Microsoft 365 / Entra ID directory. - **External tenant** — customers, partners, citizens. Separated for isolation, scale, and customer-grade flows. Users in the external tenant don't have Microsoft 365 licenses, internal access, or workforce identity overhead. They exist purely as external identities for accessing customer-facing resources. ## Identity providers External ID accepts identity from multiple sources: - **Email / password** — locally-managed accounts. - **Microsoft account** — using a personal Microsoft account. - **Google, Facebook, Apple, LinkedIn, Twitter** — social identity providers. - **Any OpenID Connect / SAML 2.0 provider** — for federated identity from a partner organisation. Customers sign up with whichever identity works for them; the External ID maintains a unified user record. ## User flows A **user flow** is a configured authentication / registration experience: - **Sign-up and sign-in flow** — the most common; users register or sign in. - **Sign-up only** — for registration-only scenarios. - **Password reset** — self-service password reset. - **Profile editing** — let users update their own data. Each flow has configurable steps — attributes to collect, MFA requirements, consent screens, branding. ## Branding External ID supports per-application branding: - Custom logo and colours. - Custom HTML pages for sign-in / sign-up. - Multi-language support. - Custom domain (e.g. `auth.contoso.com`) instead of the Microsoft-default URL. Customers see a branded experience that feels like part of your product, not a Microsoft service. ## MFA Configurable per user flow: - **Always required** — high-security scenarios. - **Conditional** — based on risk signals, location, sensitive operations. - **Optional** — user can enable. MFA methods include SMS, email OTP, authenticator apps. ## Custom attributes Beyond standard attributes (email, name), define custom attributes for capture at sign-up: - Company name. - Customer reference number. - Region / language. - Communication preferences. - Custom JSON for complex data. Stored on the External ID user; flows back to the integrated systems (Power Pages, Dataverse) on authentication. ## Custom policies For advanced scenarios beyond user-flow capability, External ID supports **custom policies** — XML-based identity orchestration that can include: - Multi-step verification (email + phone + ID document). - Integration with external identity verification services. - Complex conditional logic. - Custom claims transformation. Custom policies are powerful but complex; reserve for genuine business needs. ## Integration with Power Pages Power Pages portals can use External ID as their identity provider: 1. In the Power Pages site settings, configure External ID as an authentication provider. 2. Map the External ID flow to portal sign-in / sign-up paths. 3. Map External ID attributes to Power Pages contact records (Dataverse). 4. Portal authenticated sessions get Dataverse-side identity automatically. The pattern: customer signs up through External ID; their record creates / matches a Contact in Dataverse; they get portal access scoped to their data. **Migration from Azure AD B2C.** External ID is the modern successor to **Azure AD B2C**. Microsoft has signaled long-term migration paths: - B2C tenants continue running. - New external-identity scenarios should target External ID. - Migration tools assist moving B2C user populations to External ID. For existing B2C-based Power Pages or custom-app deployments, gradual migration over months is the typical path. ## Pricing External ID is billed by **monthly active user (MAU)** — the number of unique external users authenticating in the month. Tiers offer different feature levels; sized per expected user scale. **Security and compliance.** - **GDPR compliance** — External ID handles customer PII with appropriate controls. - **Audit logs** — sign-in events, profile changes, MFA events. - **Conditional Access** — apply policies based on risk signals. - **Identity Protection** — Microsoft detects unusual sign-in patterns. **Common pitfalls.** - **B2C used where External ID would suit** — older docs still reference B2C; for new builds, prefer External ID. - **Branding skipped** — users see "Sign in with Microsoft" branding; jarring. - **No MFA on customer access** — increases account-takeover risk. - **Attribute structure not thought through** — adding attributes after launch is more friction than getting them right upfront. ## Operational reality External ID is the canonical answer for customer-facing identity in the Microsoft cloud. Plan for it deliberately; treat it as production infrastructure; tune branding and flows based on user feedback. --- # Environment strategy for Dynamics 365 projects How to design dev / test / UAT / production environment topology for a Dynamics 365 implementation — naming conventions, refresh cadence, data isolation. Source: https://www.solvingdynamics365.com/guides/environment-strategy-for-dynamics-365-projects Section: Implementation / Operations & support Published: 2026-05-01 A Dynamics 365 implementation involves multiple environments — separating active development from testing from production is non-negotiable. The shape of that environment topology — how many, what for, when refreshed, who has access — shapes both delivery speed and operational safety. Too few environments and changes collide; too many and overhead dominates. **The canonical environments.** - **Developer** — per-developer or shared dev environment where new work happens. - **Build / Integration** — central environment where features are merged and integrated. - **Test (SIT)** — system integration testing. - **UAT** — user acceptance testing with stakeholders. - **Pre-production / Staging** — production-like rehearsal. - **Production** — live system. - **Training / Sandbox** — for training and exploration. Not every project needs all of these. Small projects (one team, < 5 developers) may collapse Test and UAT. Large projects (multiple teams, regulated industries) need all of them plus more. **Sizing per team scale.** - **Solo or small team** — Dev → UAT → Prod (3 envs). - **Mid-size team** — Dev → Build → UAT → Prod (4 envs). - **Large enterprise** — Dev → Build → SIT → UAT → Pre-prod → Prod + Training (7+ envs). The cost of each environment scales with the licence model (Dataverse environments per tenant, F&O sandbox tiers). Don't proliferate without need. ## Per-developer environments Power Platform Managed Environments can auto-provision personal developer environments per maker: - Isolation from peers' experimentation. - Lower-risk learning. - Pre-production deployments happen via promoted solutions only. For Dataverse-heavy work, personal envs work well; for F&O, the model is different (developer VMs, branch-based ALM). ## Refresh cadence Lower environments need refreshed data from production periodically: - **UAT** — refreshed at start of each UAT cycle; otherwise data drifts from current production. - **SIT / Test** — refreshed when major data shape changes happen. - **Dev** — usually retains its own working data; refreshed when developers need recent production-like data. - **Pre-prod** — refreshed close to each production deployment. Refresh isn't free; it overwrites the target environment's data, including in-progress work. Schedule and communicate. ## Data masking Production data refreshed to lower environments may need masking: - **Customer PII** — names, addresses, emails redacted or anonymised. - **Financial data** — sensitive amounts obfuscated. - **Credentials** — passwords, keys cleared. - **Regulatory data** — health, financial, depending on context. Without masking, GDPR or HIPAA compliance is at risk. F&O has limited native masking; Dataverse refresh options improving over time. ## Promotion path Solutions flow upward: ``` Dev → Build → SIT → UAT → Pre-prod → Prod ``` Each promotion is a one-way operation: bug discovered in UAT is fixed in Dev, re-promoted forward. Never patch in upstream environments — drift becomes unmanageable. ## Configuration vs data Two types of artefacts: - **Configuration** — schemas, processes, code. Lives in solutions; promoted via pipeline. - **Data** — actual records. Lives in environment; copied via DMF / data export. These move on different schedules and through different mechanisms. **Naming conventions.** - Environment URL slugs include purpose and ownership: `acme-d365-dev`, `acme-d365-uat`, `acme-d365-prod`. - F&O tier names indicate purpose: `Tier1-Build`, `Tier2-SAT`, `Tier3-UAT`. - Power Platform display names match. Clear naming prevents confusion under pressure ("which environment is this?"). **Access control per environment.** - **Dev** — open to developers, possibly to testers, restricted from end users. - **UAT** — UAT participants, business analysts, project managers. - **Pre-prod** — production-equivalent access (limited). - **Prod** — end users, support staff. Production should be more locked-down than upstream environments; the goal is "any change to prod goes through a controlled pipeline." **F&O tier specifics.** - **Tier 1 (developer)** — single-user dev environment. - **Tier 2 (build / test)** — multi-user test; smaller scale. - **Tier 3+** — larger tier; user testing scale. - **Tier 5 (UAT-equivalent)** — production-like. - **Production** — actual prod. Each tier has size and cost; choose minimum tier that supports the use. **Dataverse environment types.** - **Production** — for real workloads. - **Sandbox** — copy or fresh; can be refreshed from production. - **Default** — tenant-wide; should be deprecated in favour of routed environments. - **Trial** — short-lived experiments. - **Developer (per user)** — Managed Environments auto-provisioned. **Common pitfalls.** - **Too few environments.** Dev and prod only; UAT happens in dev; testing pollutes development. - **Too many environments.** 12 environments; nobody knows which one has what; promotion broken. - **Refresh chaos.** Lower environments refreshed inconsistently; impossible to reproduce issues across environments. - **Pipeline gaps.** Some solutions promote via pipeline, some by hand; drift between environments. - **Production access too broad.** Developers can edit prod; emergency changes bypass the pipeline; drift accumulates. - **Cost ignored.** Each environment has licence cost; F&O tiers are expensive; budget surprised. **Operational rhythm.** - **Per sprint** — solutions promote from Dev → Build. - **Per UAT cycle** — promote to UAT; refresh UAT data. - **Per release** — promote through Pre-prod to Prod. - **Quarterly** — review environment topology; retire unused. ## Strategic positioning Environment strategy seems administrative but is foundational. A team with a clean, documented environment topology delivers reliably; a team without one fights fires constantly. Get the strategy right at project kick-off; revisit at major milestones; resist the temptation to add or skip environments under time pressure. The discipline pays back over the project lifetime. ## Where to go next The product-specific mechanics are in [Power Platform environments](https://www.solvingdynamics365.com/guides/power-platform-environments), [Business Central environments](https://www.solvingdynamics365.com/guides/business-central-environments), and [Finance environments and LCS](https://www.solvingdynamics365.com/guides/dynamics-365-finance-environments-and-lcs). Filling them safely is [test data management](https://www.solvingdynamics365.com/guides/test-data-management-for-dynamics-365); moving change between them is [solution import and export pipelines](https://www.solvingdynamics365.com/guides/solution-import-export-pipelines). --- # Environment variables in Dataverse — a deep dive How environment variables work in Dataverse solutions — datatypes, default values, secret references, deployment patterns, and ALM best practices. Source: https://www.solvingdynamics365.com/guides/dataverse-environment-variables-deep-dive Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Environment variables are Dataverse's mechanism for per-environment configuration: URLs, thresholds, feature flags, secrets. A solution defines the variables; each environment supplies values. Used well, they decouple environment-specific configuration from solution content, making ALM clean and deployment predictable. **The two records per variable.** - **Environment Variable Definition** — the variable's name, datatype, default value, description. - **Environment Variable Value** — the value for this specific environment. The definition is solution-aware (moves between environments); the value is per-environment (stays where you set it). **Datatypes.** - **String** — text. - **Number** — integer. - **Boolean** — true/false. - **DateTime** — date and time. - **JSON** — structured data. - **Secret** — reference to Azure Key Vault secret. The datatype determines how values are entered and validated. ## Default values A definition can specify a default: - Used when no environment-specific value exists. - Useful for development environments that don't need explicit setting. - Production should always have explicit values (never rely on defaults). **Using environment variables.** **In Power Automate:** ``` @{environmentVariables('myVarName')} ``` **In Power Apps canvas:** ``` EnvironmentVariable.myVarName ``` **In plug-ins:** Read via Dataverse API at runtime. **In flow conditions:** Reference variable to drive branching. ## Per-environment values After importing a solution: - New variables appear unbound to environment-specific values. - Admin must set values for the target environment. - Solution import wizard prompts for new variables (with defaults shown). This is the deployment moment where ops team supplies per-environment configuration. ## Solution layering Variables are managed-solution-aware: - Variable definition in a solution → managed; can't be edited at environment. - Variable value at environment → unmanaged; environment admin sets. - Updates to variable definition flow through solution upgrades. **Variables vs hardcoded values.** - **Hardcoded URL** — changes require code change. - **Variable URL** — changes per environment without code. Anything that varies between environments should be a variable. **Variables vs connection references.** - **Variable** — values (URLs, thresholds, feature flags). - **Connection reference** — abstract connection bindings to specific connections per environment. They serve different purposes; both decouple environment specifics. ## Secret-type variables As covered in [[dataverse-secrets-and-key-vault-integration]]: - Definition declares datatype as Secret. - Value references Key Vault. - Runtime fetches actual secret. For production secrets, this is the canonical pattern. **Common variables in real solutions.** - **External API URL** — varies between sandbox and production. - **Feature flag** — enable/disable specific features. - **Email sender address** — varies per environment. - **Tenant identifier** — for multi-tenant logic. - **API timeout values** — tuning per environment. - **Email recipient list** — for notifications. ## JSON variables For complex configuration: ```json { "endpoints": { "primary": "https://...", "fallback": "https://..." }, "timeouts": { "default": 30, "long": 300 } } ``` Parse in code at use time. Useful for tightly-related configuration values. **Variable scope.** - Environment variables are environment-scoped, not solution-scoped. - All solutions in the environment share variables. - Naming conventions matter to avoid collisions. **Naming conventions.** - `mySolution_apiUrl` — prefixed by solution publisher. - Camel case or snake case — be consistent. - Avoid generic names like `apiUrl` (collision risk). **ALM deployment patterns.** - **Solution package + variables** — variables defined in solution; values set per-environment post-import. - **Pipelines** — automated; variables values from pipeline configuration. - **Documentation** — list of variables and per-environment values. The deployment runbook lists every variable to verify after solution import. **Common pitfalls.** - **Default values relied on in production.** Default fires; behaviour wrong. - **No documentation of variables.** New ops team can't determine what to set. - **Hardcoded values bypassing variables.** Same problem variables were meant to solve. - **Variable value missed during deployment.** Variable undefined; runtime fails. - **Naming collisions across solutions.** Two solutions need the same logical config; choose one as authoritative. - **Sensitive values in non-Secret type.** Plain-text secret in a String variable; security gap. ## Migration to environment variables From hardcoded: 1. Identify hardcoded values across solution. 2. Group into logical variables. 3. Create environment variable definitions. 4. Update code/flows to read from variables. 5. Set values per environment. 6. Test. 7. Deploy. This refactoring pays back continuously across future deployments. **Best practices.** - **One variable per logical configuration value.** Don't over-pack into JSON. - **Documented and described.** Future operators understand purpose. - **Validated values.** Where possible, validate format / range. - **Audit changes.** Variable values are operational config; track changes. - **Convention over flexibility.** Standard naming, standard usage patterns. ## Strategic positioning Environment variables are the unsung hero of Dataverse ALM. Solutions become portable; deployments become repeatable; configuration is decoupled from code. Mature deployments use environment variables liberally; immature ones have hardcoded environment-specific values scattered through code. The investment in variable discipline is moderate; the payback is in every deployment, every incident, every audit. Treat environment variables as a foundational pattern, not an optional convenience. --- # Error monitoring patterns for Power Automate How to monitor Power Automate flows in production — Run History, alerts, Application Insights integration, and operational patterns for catching failures fast. Source: https://www.solvingdynamics365.com/guides/power-automate-error-monitoring Section: Power Platform / Power Automate Published: 2026-05-01 A Power Automate flow that fails silently is worse than no flow at all — users assume the work is done; data drifts; problems compound. Production-grade flows need **monitoring** that catches failures fast, alerts the right people, and provides actionable diagnostic context. ## The Run History The primary surface: - Per-flow page showing recent runs. - Status: Succeeded / Failed / Cancelled / Running. - Per-run drill-down to action details. - Inputs and outputs per action. - Error messages. Run history is essential for troubleshooting. Limitation: visible per flow; doesn't aggregate across flows naturally. ## Failure alerts In flow settings: - Email notifications on failure. - Specify recipient address. Easy to set up; the bare minimum. But: - Easily ignored emails. - One alert per failure, no aggregation. - No diff between transient and persistent. For production, more sophisticated alerting needed. ## Power Platform admin centre Cross-flow visibility: - All flows in environment. - Failure rates. - Recent failures. - Trend graphs. Useful for admin visibility; less actionable than flow-specific. ## Application Insights integration The robust path: - Flow emits to App Insights via custom connector or HTTP action. - Failure events captured. - Custom dashboards. - Sophisticated alerts. Setup more complex but the right answer for serious operations. ## Structured logging in flows Emit consistent log records: - **Flow start** — log run ID, trigger context. - **Key checkpoints** — major state changes. - **External calls** — request and response (sanitised). - **Exceptions** — caught errors with context. Log to a dedicated table in Dataverse or to App Insights. ## Try-Catch patterns Configure scope actions: - **Try scope** — main logic. - **Catch scope** — error handler; runs if Try fails. - **Finally scope** — runs always. Configure run-after settings to implement try-catch-finally semantics. Catch logs the error and notifies; finally cleans up. **Idempotency for retry.** - Flows may retry automatically or manually. - Each step should be idempotent — same input → same outcome whether run once or many. - Without idempotency, retries cause duplicates. **Failure categories.** - **Transient** — network blip, throttling, temporary downstream. - **Persistent** — schema mismatch, permission issue, logic bug. - **Data-specific** — bad data triggers different path. Different categories need different responses. **Triage workflow.** 1. Failure alert fires. 2. Operator reviews flow run. 3. Categorise the failure. 4. **Transient** — retry; maybe nothing else needed. 5. **Persistent** — fix code; rerun. 6. **Data-specific** — quarantine bad data; fix; rerun. Without triage discipline, all failures get treated equally. ## Alert fatigue A common problem: - Too many alerts; team ignores them. - Each alert costs attention. - Important alerts buried. Mitigate: - Group similar alerts (one alert for 100 same-error failures). - Severity-based routing (critical to phone, warning to inbox). - Auto-resolution for known transient. ## Dashboards Visualise flow health: - Failure rate over time. - Top failing flows. - Failures by error type. - Runtime trends. Power BI or Application Insights dashboards work; refresh regularly. ## On-call rotation For business-critical flows: - Defined on-call schedule. - Pager-style alerts route to current on-call. - Escalation if no response within minutes. - Incident retrospective post-resolution. For most teams, lighter touch suffices; for SLA-driven services, on-call is real ops. **Flow run retention.** - Default 28-day retention. - Older runs purged. - For compliance, archive externally before purge. If you need run history for a year, export periodically. **Common flow failures.** - **Throttling from connectors** — rate limit hit. - **Connection expired** — auth token invalid. - **Schema change in source data** — flow expects old format. - **Concurrency / race conditions** — two flows on same record. - **Conditional logic gap** — unexpected branch. Each has typical signature; learn to recognise. **Common pitfalls.** - **No failure handler.** Flow fails silently; data inconsistent. - **Catch eats all errors.** Errors caught, logged, swallowed; flow appears successful. - **No alerting.** Failures pile up unseen. - **Per-flow monitoring only.** Cross-flow patterns invisible. - **Run history overwhelm.** 1000 failures; no prioritisation. - **Slow flows.** Successful but slow; user complaints; no perf monitoring. **Best practices.** - **Production flow has failure handler.** Always. - **Failure handler captures context.** Log enough to diagnose. - **Alerts go somewhere actionable** — Teams channel, ops queue. - **Periodic flow audit.** Which flows fail often? Why? Fix. - **Document failure scenarios** per flow. **Performance monitoring.** - Flow run duration tracked over time. - Alert if duration exceeds baseline by 2x. - Optimise slow steps. Slow flows degrade user experience and risk timeouts. ## Strategic positioning Power Automate flows in production need operational discipline equal to other production systems. The monitoring tooling has matured; the discipline to use it varies. For mission-critical flows (payments, customer-facing automations, compliance), invest in App Insights integration, structured logging, and on-call. For internal automations, lighter touch suffices but still better than nothing. The cost of ignoring production flow health: cascading failures, eroded trust, eventually-discovered data corruption. The cost of paying attention: ongoing operational investment but predictable, reliable automation. --- # Event Grid with Dataverse How Azure Event Grid integrates with Dataverse — schema, subscribers, when to use Event Grid vs Service Bus, and operational patterns. Source: https://www.solvingdynamics365.com/guides/event-grid-with-dataverse Section: Integrations / Eventing & messaging Published: 2026-05-01 **Azure Event Grid** is Microsoft's pub/sub eventing service for cloud-scale fan-out. Where Service Bus is durable queueing for transactional messaging, Event Grid is lightweight, high-throughput, multi-subscriber event distribution. Dataverse supports publishing change events to Event Grid, giving access to a fundamentally different integration pattern than the older Service Bus path. ## The model Each Dataverse change event is published to an **Event Grid topic** as a structured event message. Multiple **subscribers** can independently subscribe to the topic with their own filters. Each subscriber receives the events it filtered for, processed independently of all other subscribers. If a subscriber is down, the others are unaffected; if a subscriber is fast, the others don't slow it. ## Event schema Dataverse-emitted events follow the CloudEvents v1.0 schema with a Dataverse-specific data payload: ```json { "id": "GUID", "source": "dataverse-environment-url", "type": "Microsoft.Dataverse.RecordCreated", "time": "ISO timestamp", "data": { "entity": "account", "recordId": "GUID", "userId": "GUID", "changes": { ... } } } ``` The event metadata is intentionally lightweight — most subscribers fetch the actual record from Dataverse on receipt rather than relying on the event payload alone. ## Subscribers Event Grid supports many subscriber types out of the box: - **Azure Functions** — most common. Trigger on event, process, ack. - **Logic Apps** — event triggers a Logic App workflow. - **Webhook** — HTTP endpoint that receives the event POST. - **Service Bus queue or topic** — chain Event Grid to durable queueing for resilient processing. - **Event Hubs** — high-throughput streaming. - **Storage queues** — for simple low-cost queueing. - **Hybrid Connections** — on-premise endpoints. ## Filtering Subscribers can filter events on type, entity name, or attribute values. So one subscriber processes only Account changes; another processes only changes where Status = "Active". Reduces the work each subscriber needs to do. ## Reliability Event Grid retries failed deliveries with exponential backoff for up to 24 hours by default (configurable). After exhausting retries, events can be sent to a **dead-letter storage account** for inspection. But Event Grid is not durable to the same level as Service Bus — multi-day outages of a subscriber are not the right use case. ## Throughput Event Grid scales to millions of events per second. Suitable for very high-volume Dataverse change streams where Service Bus would be over-provisioned or under-performant. ## Pricing Pay-per-million-events. Generally cheaper than Service Bus at high volume. **Service Bus vs Event Grid for Dataverse.** - **Service Bus**: durable, ordered, point-to-point or limited pub/sub, moderate scale. Right for transactional integrations where every message must be processed by exactly one consumer, eventually, even after outages. - **Event Grid**: pub/sub at scale, many subscribers, eventual consistency, near-real-time, lightweight. Right for fan-out scenarios where many systems should be notified of changes — analytics, search index updates, cache invalidation, low-volume side processes. ## Hybrid pattern Many architectures use both: Event Grid for fan-out to subscribers that care, with one Event Grid subscriber being a Service Bus queue for the transactional consumer. ## Operational reality Event Grid integrations look elegant on paper but require disciplined subscriber operation — every subscriber must be observable, with dead-letter handling and alerting. Without that discipline, dropped events go unnoticed. ## Choosing for Dynamics 365 For most Dataverse integrations, Service Bus is the safer default. Reach for Event Grid when: - You need many independent subscribers. - Throughput is high enough that Service Bus economics get unfavourable. - Subscribers are lightweight processors that don't need durable queueing. --- # Event management in Customer Insights – Journeys How to plan, register, and run events in Customer Insights – Journeys — sessions, speakers, registration pages, capacity, and the Teams Events integration. Source: https://www.solvingdynamics365.com/guides/event-management-in-customer-insights-journeys Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 Customer Insights – Journeys (the successor to Dynamics 365 Marketing) ships first-class **event management** for in-person, virtual, and hybrid events — from product launches and customer conferences to small webinars and partner roadshows. It is one of the genuine differentiators of the marketing module. ## The event record An event in Customer Insights – Journeys is a Dataverse record with: - **Name, type, format** — in-person, virtual, hybrid. - **Start and end dates / times** — across time zones with timezone handling. - **Venue** — for in-person, links to a venue master record with rooms; for virtual, the platform (typically Microsoft Teams Events). - **Capacity** — overall limit, plus per-session capacities. - **Registration window** — open and close dates for sign-up. - **Owner, team, business unit** — for security and ownership. ## Sessions and tracks Multi-day or multi-track events have **sessions** — individual presentations with start time, room, speaker, capacity, and optional pre-requisites. Sessions can be organised into **tracks** for attendee filtering ("technical track", "executive track"). ## Speakers A **speaker** record represents a presenter — internal employees or external guests. Speakers are linked to sessions, with photos, bios, and contact info. The speaker schedule view shows who's presenting when across the event. ## Registration pages Registration is captured through forms (see the Lead Capture guide) hosted as **registration pages**. The page can be: - Microsoft-hosted with a unique URL. - Embedded on the customer's website. - Branded with custom themes, logos, fonts. Registration captures attendee info, session selections (for multi-track), payment if applicable, dietary requirements, accessibility needs. ## Confirmation and reminders A **real-time journey** typically fires on registration: 1. Send confirmation email immediately. 2. Send reminder 1 week before. 3. Send "starting tomorrow" reminder the day before. 4. Send "starting in 1 hour" the morning of. 5. Send post-event survey one day after. Each is configurable; cancellation flows handle changes. ## Capacity and waitlist When a session or event hits capacity, registration moves to a **waitlist**. Cancellations auto-promote waitlisted attendees in order. Capacity controls per session prevent over-booking. ## Microsoft Teams Events integration Virtual and hybrid events integrate with **Microsoft Teams Events** for the streaming side: - Each session can spawn a Teams meeting / webinar / live event with a custom registration link. - Attendee registration in Customer Insights – Journeys translates to the Teams registration list. - Recording captures from Teams and links back to the session. This integration is what makes the event management practical for serious virtual programmes. ## Check-in and badge printing For in-person events, a **mobile check-in app** scans attendee QR codes (from the confirmation email) and marks attendance. Badge printing integration (via partner connectors) prints on arrival. ## Event websites A dedicated **event website** template (often built on Power Pages) gives attendees a landing page with agenda, speakers, sponsors, FAQs, and personalised login to their registered sessions. ## Analytics and ROI Post-event reporting: - **Registration vs attendance** — show-up rate per channel, per source. - **Session attendance** — popular sessions, drop-off rates. - **Lead generation** — qualified leads from event attendees. - **Pipeline influence** — opportunities created or accelerated by event attendance. - **NPS / CSAT** — from post-event surveys. ## Limits Very large conferences (10,000+ attendees, complex logistics, sponsor expo, full event-app experience) may need specialist platforms like Cvent, Bizzabo, Hopin alongside or instead of Customer Insights – Journeys. For most B2B customer events from 50 to a few thousand attendees, the built-in event management is sufficient. ## Operational reality Event management is unforgiving — botched registration emails are seen by every potential customer. Pilot the registration flow end-to-end before opening to attendees. --- # Event orchestration in Customer Insights — Journeys How Customer Insights — Journeys handles event management — webinar planning, registration, attendance tracking, follow-up automation. Source: https://www.solvingdynamics365.com/guides/dynamics-365-marketing-event-orchestration Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 A marketing webinar with 500 registrants generates significant content and follow-up complexity — invitations, reminders, attendance tracking, post-event nurture. **Event orchestration** in Customer Insights — Journeys structures this lifecycle, from event creation through post-event analytics. For organisations running regular webinars, conferences, or hybrid events, the capability matters. ## Event entity Captures: - Title, description, dates. - Type — webinar, in-person, hybrid. - Capacity. - Speakers / agenda. - Sessions if multi-track. - Registration form. - Pricing if paid. **Event types.** - **Webinar** — virtual; via Teams Live Events, Webex, On24, custom platforms. - **In-person** — physical venue. - **Hybrid** — both virtual and physical attendance. Each type has slightly different orchestration patterns. **Registration flow.** 1. Marketing creates event in Customer Insights — Journeys. 2. Registration page published — Power Pages or marketing-supplied. 3. Customer registers; record created in Dataverse. 4. Confirmation email sent. 5. Calendar invite generated. The registration experience is the first touch; design matters. **Pre-event communications.** - **Confirmation** — immediate. - **Reminders** — 1 week before, 1 day before, 1 hour before. - **Speaker spotlights** — for high-profile events. - **Pre-event content** — preparation reading. Configurable journey orchestrates the sequence. **Day-of event.** - **Login link** sent to attendees. - **Reminder** at start time. - **Late registrant** handling. - **Tech support** contact published. The day-of execution is where things go wrong; tested flows essential. **Attendance tracking.** - **Logged in?** captured. - **Time in session** tracked. - **Engagement events** — questions asked, polls answered. - **Drop-off points** — when did attendees leave. For Teams-integrated events, attendance data flows automatically. For others, manual import or API integration. **Post-event flow.** - **Thank you** email to attendees. - **Recording** link to attendees and registrants who couldn't make it. - **Resources** — slides, additional content. - **Survey** — feedback. - **Next step CTAs** — book a demo, contact sales. The post-event window is when conversion happens; orchestration captures it. **Multi-session events.** - Conference with multiple talks. - Registrant picks sessions of interest. - Per-session attendance tracking. - Different follow-up per session attended. Complex but powerful for full conference experiences. **Teams Live Events / Teams Meetings integration.** - Event linked to Teams. - Registration list synced. - Attendance data flows back automatically. For Microsoft-centric organisations, this integration eliminates manual reconciliation. **ON24 / Webex / Zoom integration.** - Connector-based. - Registration synced. - Attendance data imported. Each platform has its own integration; quality varies. **Sponsor and speaker management.** - Sponsors as records. - Speakers as records. - Sessions tied to speakers. - Sponsorship deliverables tracked. For paid events, this management is operational core. **Pricing and registration management.** - Free vs paid. - Tiered pricing. - Promo codes. - Group discounts. Integration with payment gateways (Stripe, etc.) for paid events. **Capacity management.** - Capacity caps per event. - Waitlist when full. - Notify on cancellation. For in-person, capacity is hard limit; webinar typically softer. **Reporting.** - **Registration count.** - **Attendance rate.** - **Engagement metrics.** - **Pipeline influenced** — opportunities from event attendees. - **Cost per attendee / cost per opportunity.** ROI reporting closes the loop with sales. **Multi-event campaigns.** - Event series — multiple related events. - Cross-event attendee analysis. - Multi-touch attribution. **Common pitfalls.** - **Manual data reconciliation.** Attendance data not auto-synced; spreadsheets. - **Late confirmation email.** Registrant unsure if registration worked. - **No reminder cadence.** Forgotten registrants; low attendance. - **Generic post-event email.** Engaged vs not-engaged treated identically. - **No post-event analysis.** Event happened; nobody analyses ROI. - **Survey ignored.** Asked but not actioned. **Best practices.** - **Define journey before creating event.** Don't improvise. - **Test the full flow.** Confirmation, reminders, day-of. - **Mobile-friendly registration.** - **Multiple reminder touches.** - **Distinct post-event journeys** for attendees vs no-shows. - **Pipeline integration** — link to opportunities. **Operational rhythm.** - **Pre-event** — registration tracking, reminder optimisation. - **Day-of** — operations focus on execution. - **Post-event** — analytics review, content distribution, opportunity flow. - **Post-mortem** — what worked, what didn't, lessons for next. ## Strategic positioning Events are significant marketing investments — webinar production cost, conference logistics, speaker honoraria all add up. Event orchestration scales the impact: every registered, every attended, every engaged customer captured for systematic follow-up. Without orchestration, manual processes lose data; with it, events become a reliable pipeline source. Mature marketing organisations treat event orchestration as discipline equal to email campaigns; investing in the workflows pays back across the event calendar. --- # Event-driven architecture for Dynamics 365 How to design event-driven integrations around Dynamics 365 — event sources, brokers, consumers, and the patterns that keep systems loosely coupled. Source: https://www.solvingdynamics365.com/guides/event-driven-architecture-for-dynamics-365 Section: Integrations / Architecture patterns Published: 2026-05-01 A traditional integration calls Dynamics 365 API when data is needed; an event-driven integration is notified when Dynamics 365 changes happen. The shift from request-response to event-driven enables loose coupling, scalability, and real-time reactivity. For complex multi-system landscapes, event-driven architecture (EDA) often outperforms point-to-point integration. **Request-response vs event-driven.** - **Request-response** — caller pulls; tight coupling; synchronous. - **Event-driven** — source pushes; loose coupling; asynchronous. Different problem domains favour different approaches; understanding both helps. **Event-driven components.** - **Event source** — produces events (Dynamics, F&O, external systems). - **Event broker** — routes events (Event Grid, Service Bus). - **Event consumer** — reacts to events. - **Event store** — historical record. Each component does one job; clean separation. **Event types from Dynamics 365.** - **Record changes** — Create, Update, Delete in Dataverse. - **Business events** — F&O business events (workflow completed, etc.). - **Custom events** — emitted by plug-ins or workflows. - **System events** — login, error, etc. Rich event sources; selecting which to publish is configuration choice. **Brokers and patterns.** - **Azure Event Grid** — publish-subscribe; many subscribers per event. - **Azure Service Bus** — queues and topics; reliable delivery. - **Apache Kafka / Confluent** — high-throughput streaming. - **Microsoft Fabric Eventstream** — for analytical workloads. Each has positioning; choose by reliability, throughput, durability needs. **Pub/sub pattern.** - Source publishes event. - Broker notifies all subscribers. - Subscribers process independently. - Adding new subscriber requires no source change. This loose coupling is the headline benefit. **Queue pattern.** - Source publishes to queue. - One consumer processes each message. - Load-balanced if multiple consumers. - Message preserved until processed. For ordered, reliable, single-consumer scenarios. **Event schemas.** - **Defined schema** — known structure. - **Versioned** — schemas evolve. - **Documented** — consumers understand. CloudEvents is a common standardised format; preferred for new designs. **Producer responsibilities.** - **Emit reliably** — even if downstream busy. - **Include context** — IDs, timestamps, source identification. - **Maintain schema** — version changes communicated. - **Idempotency hints** — duplicate detection support. **Consumer responsibilities.** - **Subscribe to relevant events.** - **Process idempotently** — handle duplicates. - **Respect ordering** where needed. - **Handle failures gracefully** — retry, dead-letter. Each side has obligations to make the architecture work. ## Event sourcing A specific pattern: - Store all state changes as events. - Reconstruct current state by replaying events. - Time-travel — see state at any past point. Powerful but heavier; not always needed. ## CQRS (Command Query Responsibility Segregation) Related: - Commands (writes) and queries (reads) separate. - Write side may use events. - Read side optimised for queries. For complex domains with heavy read traffic. **Sagas for distributed transactions.** - Long-running, multi-system process. - Compensating actions if a step fails. - Replaces 2PC (two-phase commit) for distributed. Common pattern for cross-system workflows in Dynamics 365 ecosystem. ## Idempotency Critical: - Events delivered at-least-once. - Duplicates inevitable. - Consumer must handle. Patterns: - **Idempotency key** — same event has same key. - **Inbox table** — track processed events. - **State-based logic** — set state, not increment. Without idempotency, retries cause duplicates. **Event ordering.** - **Strict ordering** — events processed in order published. - **Out-of-order** — order doesn't matter. Strict ordering more expensive; often unnecessary for business logic. **Backpressure.** - Source produces faster than consumer can process. - Queue grows. - Consumer falls behind. Handle via: - **More consumer instances** — scale out. - **Consumer optimisation** — faster processing. - **Producer throttling** — slow source. - **Buffering with TTL** — drop old. **Dead-letter handling.** - Failed messages quarantined. - Investigation and resubmission. - Critical for reliability. Covered in [[message-replay-and-poison-queue-handling-for-d365]]. **Observability.** - **Tracing** — request flow across services. - **Event metrics** — published, consumed, failed. - **Latency** — end-to-end timing. - **Correlation IDs** — link related events. Without observability, debugging event-driven systems is hard. **Common pitfalls.** - **Tight coupling sneaking in.** Consumer needs producer's internal details. - **Schema drift.** Producer changes; consumers break. - **No idempotency.** Duplicates cause data corruption. - **Loose ordering assumed.** Order-dependent logic; bugs surface randomly. - **No dead-letter strategy.** Failed events disappear. - **Synchronous assumptions in async system.** Caller expects immediate result; doesn't get one. **When event-driven wins.** - Many systems consume same data. - Sources are external / hard to call. - Volume is high; pulling expensive. - Loose coupling enables independent evolution. - Real-time matters. **When request-response wins.** - Specific, well-known consumer. - Strong consistency requirement. - Simple query patterns. - Small scale. Both have place; not religious choice. ## Hybrid common Most real architectures: - Some integrations event-driven. - Some request-response. - Pragmatic per integration. ## Strategic positioning Event-driven architecture is the maturing pattern for modern enterprise integration. Dynamics 365 supports it well via plug-ins, business events, and integration with Azure messaging. For organisations with multi-system landscapes, investing in event-driven patterns produces more scalable, maintainable integrations. For architects: - Identify where event-driven fits. - Standardise on a broker. - Establish schema discipline. - Build observability. - Document patterns for re-use. The investment is in foundational infrastructure and patterns; the payback compounds as new integrations leverage the platform. Greenfield architectures should consider event-driven from start; existing point-to-point can refactor gradually. --- # Eventually consistent integrations with Dynamics 365 How to design and operate eventually-consistent integrations — consistency vs availability trade-offs, conflict resolution, and the UX implications. Source: https://www.solvingdynamics365.com/guides/eventually-consistent-integrations-with-dynamics-365 Section: Integrations / Architecture patterns Published: 2026-05-01 Distributed systems often can't guarantee strong consistency without sacrificing availability or performance. **Eventually consistent** systems accept temporary inconsistency in exchange for resilience and scale. For Dynamics 365 integrating with other systems, understanding eventual consistency — when it's acceptable and how to operate it — is essential. **The consistency spectrum.** - **Strong consistency** — all reads see most recent write, immediately. - **Eventual consistency** — all replicas converge eventually. - **Causal consistency** — if A caused B, B isn't seen before A. - **Read-your-own-writes** — user sees their own changes. - **Session consistency** — within a session, consistent view. Different models suit different scenarios. ## The CAP theorem In distributed systems, choose two of three: - **Consistency** — all reads see latest write. - **Availability** — system responds even during partition. - **Partition tolerance** — works despite network failures. Most modern systems are AP (available, partition-tolerant) with eventual consistency. **Where eventual consistency works.** - **Analytics replication** — minutes of lag fine. - **Reporting dashboards** — slight delay acceptable. - **Search indexes** — index can lag behind source. - **CRM master data sync** — typical multi-system sync. **Where eventual consistency hurts.** - **Financial transactions** — bank balance must be accurate. - **Inventory commitments** — overselling unacceptable. - **Real-time decisions** — fraud screening. - **User-visible immediate feedback.** For these, design for consistency, even at cost of availability or scale. **Convergence time.** - **Real-time** — seconds. - **Near-real-time** — minute to few minutes. - **Batch** — hours. Acceptable convergence varies by use case. ## Conflict resolution When two updates conflict: - **Last-write-wins** — based on timestamp. - **Source-priority** — one system always wins. - **Custom logic** — business rules decide. - **Manual** — escalate to human. Each has trade-offs; clear policy beats ambiguous handling. **Last-write-wins risks.** - Clock skew between systems. - Conflicting concurrent updates. - "Lost update" — one update overwrites another. Use timestamps from authoritative source; or use version vectors / CRDTs for advanced cases. **Idempotency for eventual consistency.** - Same operation may apply twice. - Receiver must handle. - Patterns: idempotency key, state-based. Without idempotency, retries during reconciliation cause issues. ## Reconciliation Periodic process: - Compare source vs replica. - Identify discrepancies. - Resolve. Healthy eventually-consistent systems have ongoing reconciliation; not assumed correct. ## Compensating transactions When operation fails partway: - Undo what was done. - Restore consistent state. - Saga pattern formalises this. Saga in distributed transactions; covered in saga pattern guide. **User experience implications.** - **"Submit and see result later"** — UX makes lag acceptable. - **Optimistic UI** — show as if successful; reconcile if not. - **Status indicators** — "Processing"; clear feedback. UX design accommodates eventual consistency. **Read-your-own-writes.** - After user updates, they see updated value. - Crucial for user trust. - Achievable with eventual consistency through routing (read from same replica) or pin-to-source. Often the minimum acceptable consistency. **Patterns to mitigate eventual consistency UX problems.** - **Refresh after action** — re-fetch post-write. - **Local state** — keep client's view consistent. - **Wait and verify** — for critical operations. - **Acknowledge before consistent** — but communicate clearly. **Dynamics 365 specifics.** - **Dataverse to Dataverse cross-environment** — eventual. - **Dataverse to F&O via dual-write** — near-real-time. - **Dataverse to Synapse/Fabric** — eventual (minutes). - **Dataverse to external via API** — depends on integration. Each integration has its consistency characteristic; document and respect. **Testing eventually consistent systems.** - **Race condition tests** — concurrent updates. - **Lag tests** — verify within tolerance. - **Reconciliation tests** — discrepancies caught. - **Failure mode tests** — what happens if convergence fails. Specialised testing for distributed correctness. **Monitoring.** - **Replication lag** — current delay. - **Reconciliation discrepancies.** - **Convergence success rate.** Alert when lag exceeds threshold or discrepancies persist. **Common pitfalls.** - **Assuming strong consistency.** Code breaks under eventual. - **No reconciliation.** Drift accumulates. - **No conflict resolution policy.** Ad-hoc resolution; data corruption. - **UX assumes immediate visibility.** User confused. - **No monitoring of lag.** Issues invisible until significant. **Design principles.** - **Embrace asynchrony.** Don't fight it. - **Idempotent operations.** - **Clear conflict policy.** - **Periodic reconciliation.** - **User-visible status.** - **Monitor convergence.** ## Trade-off conversation Stakeholders need to understand: - Strong consistency → more cost, less scale. - Eventual → cheaper, scalable, but lag. Make the trade-off explicit; surprise eventual is bad UX. ## Strategic positioning Eventually consistent systems are the default for modern distributed architectures. Understanding when this is appropriate — and when it isn't — is core architectural skill. For architects: - Identify consistency requirements per use case. - Design for the right model. - Build conflict resolution, idempotency, reconciliation. - UX accommodates lag. - Monitor convergence. The discipline produces robust, scalable integrations that handle real-world distributed-system challenges. The alternative — assuming strong consistency everywhere — produces architectures that don't scale and code that breaks under load. Choose eventual consistency consciously where appropriate; design for it accordingly. --- # Expense management in Project Operations How expense reporting works in Dynamics 365 Project Operations — categories, policies, receipts, approval, and reimbursement integration. Source: https://www.solvingdynamics365.com/guides/expense-management-in-project-operations Section: Customer Engagement / Project Operations Published: 2026-05-01 For services businesses, employee expenses on customer engagements are both a billing input and an operational cost — they need capture, policy enforcement, reimbursement, and project posting all coordinated. **Expense management** in Project Operations covers the cycle. ## The expense report A submitter creates an **expense report** holding multiple expense lines for a date range or project context. Each line has: - **Date** — when the expense occurred. - **Category** — Travel, Meals, Lodging, Equipment, Mileage, Other. - **Amount and currency** — the expense itself, with currency. - **Description** — narrative. - **Project / task / customer** — the billing context. - **Billable flag** — should this be billed to the customer? Defaulted from policy, can be overridden. - **Receipt attachment** — image or PDF of the receipt. - **Merchant** — the vendor name (often extracted automatically from receipt OCR). ## Expense categories and policies **Expense categories** map to GL accounts for accounting. Each category carries **policy rules**: - **Per-diem limits** — daily caps per category (e.g. €40 lunch). - **Pre-approval requirements** — certain categories need approval before incurring (large equipment). - **Documentation requirements** — receipts mandatory above threshold. - **Allowed billable status** — some categories never billable to customers (e.g. private travel). Submitting an out-of-policy expense triggers an exception flag for approver attention. ## Receipt OCR and AI Builder A modern pattern: take a photo of the receipt with the mobile app, AI Builder's receipt-reading model extracts merchant, date, amount, line items, and auto-populates the expense line. The submitter reviews, adjusts, and submits. ## Approval workflow Submitted expense reports route through approval: 1. **Direct manager** — first reviewer. 2. **Project manager** — for project-billable expenses. 3. **Finance** — for high-value or out-of-policy expenses. Approval can be parallel or sequential per the configured policy. Each step records the approver, timestamp, comments. ## Mileage A specific category for travel by personal vehicle, calculated as kilometres × rate. Configurable rates per country, per period. Integrated with GPS-tracked mileage capture in the mobile app — the journey from customer A to customer B logs automatically. ## Credit cards Corporate credit card statements can import into Project Operations, with each transaction either auto-matched to a submitted expense or flagged for the submitter to attach a receipt and categorise. ## Billing integration Approved expenses marked billable flow into the project's billable plan. The next project invoice run can include billable expenses, either as separate line items or aggregated into a single "expenses" line, configurable per contract. ## Reimbursement integration Approved expenses generate **payables** to the employee — either through HR / payroll for direct reimbursement, or through AP as a vendor invoice. The integration with the customer's payroll or AP system handles the actual payment. **Reporting.** - **Expense by project, by customer, by category** — for project profitability. - **Per-employee expense trends** — for compliance and cost control. - **Policy violations** — frequent out-of-policy patterns. - **Pending approval ageing** — to keep approvals moving. **Common pitfalls.** - **No receipt discipline** — submissions with missing receipts complicate audit. Configure receipts as required. - **Wrong project context** — expenses posted to wrong project hide true profitability. Train staff. - **Slow approval cycle** — expenses pending approval for weeks demoralise submitters and complicate cash flow. Set service-level expectations on approvers. - **Billable / non-billable defaults wrong** — over-billing customers or under-billing your own organisation. Verify policies. ## Limits Sophisticated corporate-card programs with complex feeds, multi-card reconciliation, and audit-grade compliance may layer specialist tools like Concur, Coupa, or Expensify integrated with Project Operations. For mainstream services businesses, the built-in expense management is sufficient. --- # FastTrack for Dynamics 365 Microsoft's FastTrack program for Dynamics 365 — eligibility, what's offered, key engagements, and how to make the most of it. Source: https://www.solvingdynamics365.com/guides/fasttrack-for-dynamics-365 Section: Implementation / Methodology Published: 2026-05-01 **FastTrack for Dynamics 365** is Microsoft's customer-facing engineering and advisory program. It's free to qualifying customers (a small ask of the eligibility criteria), delivers genuine value through proper engagement, and is hugely underused by customers who could benefit. ## Eligibility Microsoft publishes thresholds, but in practice FastTrack engages with customers running: - Dynamics 365 Finance / Supply Chain / Commerce - Dynamics 365 Customer Engagement at scale (Sales / Customer Service / Field Service / Marketing) - Business Central in some scenarios (more limited) Thresholds are typically expressed in licence counts or commercial scope. Microsoft account teams and partners can advise. ## Who's involved FastTrack is staffed by Microsoft engineers, architects, and program managers — not consultants. They don't replace the implementation partner; they sit alongside, providing advisory and engineering-team escalation. ## What's offered A FastTrack engagement typically includes: - **Project alignment** — a kickoff to understand scope, timeline, and risks. - **Architecture design reviews** — feedback on integration patterns, data migration plans, and customisation strategies. - **Solution Blueprint Reviews (SBRs)** — formal checkpoint reviews against the Success by Design rubric. - **Go-Live Readiness Review (GLRR)** — readiness check ahead of go-live with documented findings. - **Workshops** — on specific topics (e.g. data migration, performance, security). - **Engineering escalation** — access to product engineering for blocker investigations. ## The format Engagements are mostly remote, calendar-driven, and time-bounded. Customers and partners attend; Microsoft FastTrack engineers facilitate, review, and document. ## Where it really pays off FastTrack adds the most value: - When the implementation pushes platform limits (large scale, complex integration, custom code volume). - When the customer is new to Dynamics 365 and needs an outside-the-partner sanity check. - When the partner is new to a specific Dynamics 365 product and could use experienced ears. - For data migration strategy on large volumes. ## How to make the most of it Engage *early*, not after the design is locked. Bring honest problem statements, not vendor-pleasing slides. Have the customer business owner in the room, not just IT. ## What it doesn't do FastTrack doesn't replace the partner, doesn't write code for you, doesn't deliver training, and doesn't manage your project. It is advisory and review-oriented. ## Beyond FastTrack: paid offerings Microsoft Consulting Services and the Microsoft Industry Solutions Delivery team offer paid advisory and delivery services for customers needing more hands-on engagement than FastTrack provides. ## The hidden value A documented SBR finding from FastTrack saying "this design is high-risk" carries weight in customer governance that internal voices struggle to match. Use it. --- # FetchXML vs OData in Dataverse Two query languages for Dataverse — what each does, performance and capability differences, and when to choose which. Source: https://www.solvingdynamics365.com/guides/fetchxml-vs-odata-in-dataverse Section: Integrations / API & identity Published: 2026-05-01 Dataverse exposes its data through two distinct query languages: **FetchXML** (the older, Dataverse-native XML format) and **OData** (the standard REST-style query syntax used by most modern API consumers). Both can return the same underlying data; choosing the right one depends on the use case. **FetchXML.** FetchXML is Microsoft's XML-based query language for Dataverse. Used by: - **Advanced Find** in the Dynamics 365 UI — what users see when building filtered views. - **Views** stored in Dataverse — view definitions are FetchXML under the hood. - **Plug-ins** doing complex queries via the SDK. - **Power Automate Dataverse "List rows" action** can use FetchXML for advanced filtering. - **SSRS reports** historically (now Power BI replaces SSRS). **Strengths:** - **Complex queries** — group-by, aggregate, hierarchical filtering with nested unions, complex join logic. More expressive than OData for analytical queries. - **Native to Dataverse** — uses Dataverse-specific concepts like Link-Entity, Filter expressions, Order-By. - **Aggregations** — count, sum, avg, min, max within a single query. - **Distinct** — explicit DISTINCT support. **Weaknesses:** - **Verbose XML** — substantial markup for non-trivial queries. - **Dataverse-specific** — doesn't translate to other systems. - **Documentation** outside Microsoft's official sites is sparser. - **Limited 5000-record default page** — extends with paging. **OData (Web API).** OData is the standard REST query syntax exposed by Dataverse's **Web API** (the `/api/data/v9.x/` endpoint). Used by: - **Modern integrations** — anything calling Dataverse from external systems. - **Power Automate flows** — most common pattern. - **Custom JavaScript** on forms (`Xrm.WebApi`). - **Power BI direct query** to Dataverse. - **Mobile apps** and SDKs. **Strengths:** - **Standard syntax** — `$filter`, `$select`, `$expand`, `$orderby`, `$top`, `$skip` are familiar to anyone with OData experience. - **Concise** — URL-encoded query parameters; no XML. - **HTTP-native** — works directly from REST clients, browsers, Postman. - **Documented broadly** — OData standard documentation plus Dataverse-specific extensions. - **Modern toolchain** — most SDKs and HTTP libraries support it natively. **Weaknesses:** - **Less expressive for complex analytics** — aggregations supported but more limited than FetchXML. - **Some Dataverse-specific operations** are awkward in OData (e.g. complex link-entity joins). - **Filter expression syntax** — quite expressive but doesn't support every FetchXML pattern. **Choosing.** Use **FetchXML** when: - You're working with advanced-find or views (the platform uses FetchXML there). - The query is highly analytical — group-by, aggregates, complex joins. - You're inside a plug-in or other Dataverse SDK context. Use **OData** when: - Calling Dataverse from an external system. - Writing a Power Automate flow's "List rows" action with simple filtering. - Writing JavaScript on a form to fetch related records. - Building a Power BI direct-query dataset. - Anything modern and HTTP-driven. ## Conversion The Dataverse SDK can convert FetchXML to OData and vice versa for many patterns, but not all. Some advanced FetchXML patterns don't translate to OData; some OData patterns don't translate efficiently to FetchXML. ## Performance For equivalent queries, FetchXML and OData both compile to the same underlying SQL. Performance differences are typically negligible. Both honour Dataverse's indexes and security filters identically. ## The Dataverse Query Designer Several community tools (XrmToolBox plug-ins, "FetchXML Builder", "OData Query Designer") let you build queries visually and emit either format. Useful when you know the data but aren't fluent in either syntax. ## Mixing approaches in one solution A non-trivial integration might use both: - The flow's main filter is OData (simpler, in Power Automate's Dataverse action). - A complex secondary query uses FetchXML (passed to "List rows" with a *Fetch XML Query* parameter). Both can be used side by side without conflict. **Common pitfalls.** - **Hand-writing complex FetchXML without the tools** — error-prone XML. - **OData $expand without $select** — fetches all expanded fields, blowing up payload size. - **Filtering on calculated columns** — neither query language indexes calculated columns efficiently. Use rollup or stored values. - **No paging on bulk queries** — OData and FetchXML both default to 5000-record pages; explicit paging is required for larger sets. ## Operational reality Most modern Dataverse integration work uses OData. FetchXML remains relevant for analytical work, view-based queries, and SDK-level customisation. Pick deliberately per use case; don't fight the tool. ### Frequently asked questions **When should I use FetchXML instead of OData?** For analytical queries with group-by, aggregates, distinct, and complex link-entity joins, inside plug-ins or SDK code, and wherever the platform already uses it — views and Advanced Find are FetchXML underneath. **Which is faster, FetchXML or OData?** Neither in practice. Both compile to the same underlying SQL, honour the same indexes and security filters, and perform equivalently for equivalent queries. **Can I use FetchXML in Power Automate?** Yes. The Dataverse List rows action accepts a Fetch XML Query parameter for advanced filtering, and it can sit alongside OData filters in the same flow. **What are the common query mistakes?** Using $expand without $select and pulling every related column, filtering on calculated columns that neither language indexes well, hand-writing complex FetchXML without a builder tool, and forgetting that both default to 5,000-row pages. --- # Field Service and Customer Service integration How Field Service and Customer Service work together — case-to-work-order escalation, unified customer view, agent handoff, and the shared Dataverse foundation. Source: https://www.solvingdynamics365.com/guides/field-service-customer-service-integration Section: Customer Engagement / Customer Service Published: 2026-05-01 A customer calls about a broken HVAC. The contact centre agent opens a case. Investigation reveals an on-site technician is needed. A work order is created from the case; technician is dispatched. After service, work order closes; case closes; customer is satisfied. This **Customer Service ↔ Field Service** integration is one of the most common Dynamics 365 patterns, and one of the most operationally important. **The shared foundation.** - Both run on Dataverse. - Customer / account / contact records shared. - Common knowledge base. - Unified user model. - Same Power Platform extensibility. The integration isn't a separate product; it's a built-in unification within the Dynamics 365 family. **Case-to-work-order flow.** 1. Customer Service case captures the customer's report. 2. Agent diagnoses; determines field service needed. 3. Creates work order from case (action button). 4. Work order pre-populated with case data: customer, asset, description. 5. Case status updates to "In Field Service". 6. Field Service workflow takes over. ## The reverse: work-order-to-case Sometimes a field technician discovers an issue requiring office-side handling: - Service uncovered something else. - Customer dispute over scope. - Billing question. Technician notes; case created back to Customer Service for handling. **Linked records.** - Case ↔ Work Order is a link, not a merge. - Each retains its own lifecycle. - Status of one informs but doesn't dictate the other. For reporting and analytics, linkage enables end-to-end view (call to resolution). **Agent handoff.** - Customer Service agent → Field Service dispatcher → Technician. - Each handoff is a transition in record ownership. - Notes carry forward; full context preserved. Notifications at each handoff keep the customer informed. ## Customer 360 view From either app, the same customer is visible: - Open cases. - Open work orders. - Recent service history. - Asset list. - Service contracts. - Communication history. This is the unified view — agents in either domain see what's happening across both. **Case types that route to Field Service.** - **Equipment failure** — technician dispatch. - **Installation request** — new equipment setup. - **Inspection** — routine site visit. - **Repair after warranty** — paid service call. Configuration determines which case types trigger field service workflow. **Workflow automation.** - **Auto-create work order** — when case categorised as "field service required". - **Auto-route** — to appropriate technician queue. - **Status sync** — work order status updates case. - **Closure cascade** — closing work order closes related case. Power Automate flows orchestrate; standard templates exist. **SLA management across both.** - Case has SLA — time to resolution. - Work order has SLA — time to dispatch, time to complete. - Both must be tracked. - One overall SLA from customer's perspective (case raised to resolution). Complex but essential for service operations with commitments. **Knowledge base usage in both.** - Customer Service agent searches KB to potentially resolve without dispatch. - Field Service technician searches KB at the customer site for procedure. - Same KB serves both. KM (Knowledge Management) discipline benefits both surfaces. **Service contracts and billable services.** - Customer's contract determines coverage. - Work order references contract. - Billable items charged; covered items not. - Customer Service agent knows contract status. Unified across the products. ## Returns and Reverse Logistics For physical goods: - Customer returns defective product (Customer Service handled). - Field Service may collect or arrange courier. - Linkages tracked. **Reporting across both.** - **First call resolution rate** — case resolved without dispatch. - **Dispatch rate** — % cases escalating to work order. - **End-to-end resolution time** — case open to resolved. - **Customer satisfaction** — survey post-resolution. These integrated metrics drive service operations decisions. **Common pitfalls.** - **No standard escalation criteria.** Each agent decides; inconsistent. - **Case stays open through work order.** Or closes prematurely; reporting wrong. - **Customer messaged twice.** Once from each side; communication fragmented. - **Knowledge silos.** Service teams maintain separate KB; redundancy. - **Different SLAs not aligned.** Customer sees one experience but internal SLAs treated separately. **Best practices.** - **Defined escalation criteria** — when does case become work order? - **Single customer-facing communication** per resolution flow. - **Unified KB** — one source. - **Cross-trained agents** — understand both sides. - **Joint dashboards** — leadership sees both. ## Omnichannel integration Voice / chat / email all converge: - Customer chats; agent escalates to work order. - Customer calls; agent dispatches. - Customer emails; case → work order. All in unified workspace. **Operational rhythm.** - **Real-time** — case / work order updates. - **Daily** — queue review. - **Weekly** — case-to-work-order conversion analysis. - **Monthly** — leadership review of integrated metrics. ## Strategic positioning Customer Service + Field Service integration is the modern service operating model. The technical integration is built-in; the operational design (process flows, role responsibilities, KPIs) must be intentional. The competitive advantage isn't from having both products but from the seamless customer experience their integration enables. Invest in process design as much as technical configuration; the customer never sees the distinction between the two apps — they should never need to. --- # Field Service vs Project Operations Field Service vs Project Operations: both track and bill work at customer sites on Dynamics 365 — which app fits which business, and when you need both. Source: https://www.solvingdynamics365.com/guides/field-service-vs-project-operations Section: Customer Engagement / Field Service Published: 2026-08-27 Updated: 2026-08-27 Field Service and Project Operations look similar from a distance — both schedule people to do work for customers, both track time, both invoice for what was done. Every services-heavy Dynamics 365 conversation eventually asks which one is right, and the honest answer is that they solve different problems. This guide walks the difference in a shape that helps the decision. ## The two mental models **Field Service** is built around the **work order** — a discrete, dispatched unit of work with a schedule, a technician, an asset, a location, and a completion. The unit of value is a visit or a series of visits. Even a maintenance agreement that runs for years is executed as many individual work orders. **Project Operations** is built around the **project** — a bounded engagement with phases, deliverables, a team, and a budget-to-completion. The unit of value is a project outcome. Time and expenses are tracked against project tasks; billing runs on contract terms; margin is measured project by project. If the mental model your business uses is "we dispatch people to jobs and they close each job," Field Service is the right architectural fit. If the mental model is "we deliver projects with defined outcomes over weeks or months," Project Operations is the right fit. ## Where each wins **Field Service wins when:** - Work is dispatched to a technician who arrives, does the work, and closes it — often within a day, sometimes across a small number of visits. - The asset being worked on matters — service history, warranty, model, serial, location. - Scheduling optimisation across many technicians and many bookings is a first-class business problem (RSO, skill-based routing, travel-time-aware planning). - Truck-stock inventory of parts is meaningful. - Preventive maintenance and IoT-driven work-order generation are part of the story. - Typical customers: equipment manufacturers with maintenance contracts, facilities management, utilities, telecoms, medical-device servicing, home-service businesses. **Project Operations wins when:** - Work is a bounded project with deliverables, a scope, and a defined completion. - The team is a mix of roles working together over weeks or months, not individual technicians dispatching independently. - Billing terms are contract-driven (fixed-price milestones, capped T&M, retainers) rather than per-visit. - Resource utilisation across a bench (billable hours per consultant) is the primary operational KPI. - Project margin (revenue minus consultant cost minus expenses) is the primary financial KPI. - Typical customers: consulting firms, agencies, IT services firms, engineering practices, architecture firms. ## Where the boundary blurs Two customer types genuinely sit near the line and either product can work. **Complex maintenance projects.** A three-week shutdown at an industrial plant to refurbish major equipment — dispatched crew, coordinated across trades, hundreds of individual tasks, a project-level budget. Field Service can model this through complex work orders; Project Operations can model it through a project with team assignments. If the same crew is dispatched to daily maintenance the rest of the year, Field Service is probably the right platform overall. If the equipment refurbishment is a rare project-shaped engagement in an otherwise project-driven business, Project Operations is right. **Installation-heavy services businesses.** A firm that sells and installs equipment (industrial machinery, IT infrastructure, HVAC systems) has both project-shaped work (design, deliver, install) and field-shaped work (ongoing maintenance, break-fix). This is the classic **run both** scenario. ## Running both For customers who genuinely need both, they can coexist cleanly. Both apps run on Dataverse, share Account and Contact tables, share Sales as the front-end sales motion, and integrate to the same back-office ERP (BC or F&O). The pattern that works: - **Project Operations** for the installation project. The customer's opportunity is a mix of hardware (billed as material) and services (design, integration, commissioning). The project runs through to handover. - **Field Service** for the post-handover maintenance contract. On handover, a customer asset is registered, a maintenance agreement is created, and preventive maintenance work orders start flowing on the contracted cadence. - **Both** feed the same customer timeline in Dataverse. The customer sees one account manager, one billing relationship, one support entry point. Licensing works — Field Service Enterprise and Project Operations are separate licences per user, but attach licensing keeps the cost of a user who lives in both apps reasonable. The users who cross between the two apps (delivery leads, account managers) are usually a small subset of the total headcount; most Field Service users don't touch Project Operations and vice versa. ## Where each would be a mismatch **Trying to run projects in Field Service.** Field Service can model a multi-day, multi-task engagement through work order groups. Below a certain complexity it works. Above it, you hit the ceiling — no project-level budget, no bench utilisation reporting, no milestone billing, no revenue recognition. Once the "project" concept becomes central, Field Service is fighting the shape of the work. **Trying to run dispatched service in Project Operations.** Project Operations does not have a schedule board, RSO, mobile technician app, or an asset model. Building a services business that dispatches technicians to hundreds of small jobs on Project Operations means recreating the missing pieces — not a fight worth picking. **Trying to use one for both across the whole business.** This is the most common mistake. A CIO decides "we'll standardise on one product to save licence cost" and forces the wrong shape onto half the workflow. The productivity hit on the mis-matched half outweighs the licence savings by a large margin. ## The short version Field Service is dispatch, work orders, assets, technicians. Project Operations is projects, teams, milestones, utilisation. If the business does one shape, pick the matching product. If the business genuinely does both — installation projects followed by ongoing maintenance is the archetype — run both, because they coexist cleanly and forcing one to do the other's job costs more than the licence saved. ## Where to go next Each product in depth: [what is Dynamics 365 Field Service](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-field-service) and [what is Project Operations](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-project-operations). The operational heart of each is [the work order lifecycle](https://www.solvingdynamics365.com/guides/work-order-lifecycle-in-field-service) and [Project Operations deployment types](https://www.solvingdynamics365.com/guides/project-operations-deployment-types); the scheduling engine they share is [Resource Scheduling Optimization](https://www.solvingdynamics365.com/guides/resource-scheduling-optimization). ### Frequently asked questions **What is the core difference between Field Service and Project Operations?** The unit of work. Field Service is built around the work order — a discrete dispatched visit with a schedule, technician, asset and location. Project Operations is built around the project — a bounded engagement with phases, budget, team, and margin measured to completion. **Can we run both products together?** Yes, and installation-heavy services businesses often should: project-shaped work (design, deliver, install) in Project Operations and field-shaped work (maintenance, break-fix) in Field Service, on the same Dataverse. **Why not standardise on one product to save licence cost?** Because forcing the wrong shape onto half the workflow costs more than the licences save. Field Service has no project budgets, milestone billing or revenue recognition; Project Operations has no schedule board, technician mobile app or asset model. **Can Field Service handle a large multi-week job?** Up to a point — complex work orders and work order groups can model a shutdown or refurbishment. Once project-level budgets, utilisation and milestone billing become central, you have hit Field Service's ceiling and the work is project-shaped. --- # Field-level security in Dataverse How field-level security restricts column access in Dataverse — profiles, members, encrypted-field behaviour, and the trade-offs vs other security mechanisms. Source: https://www.solvingdynamics365.com/guides/field-level-security-in-dataverse Section: Customer Engagement / Dataverse platform Published: 2026-06-30 Beyond row-level security from security roles, Dataverse supports **[field-level security (FLS)](https://www.solvingdynamics365.com/glossary/field-level-security)** — restricting access to specific columns within a row. Some users can see and edit a row but cannot see sensitive columns like Salary, SSN, Credit Score, Internal Notes. FLS is the platform's answer for selective column-level access. ## Profile-based Field-level security operates through **field security profiles** — named groupings of users and teams who get specific access to specific protected fields: 1. **Mark a field as Field-Level Secured.** Each column has a "Secured" property; enabling it marks the column as FLS-protected. 2. **Create a field security profile.** A profile lists which secured fields it covers and what access (Read, Update, Create) is granted. 3. **Assign users and teams to the profile.** Only profile members get the specified access. By default, when a field is marked secured, *no one* can access it except System Administrators and members of profiles that explicitly grant access. **Common use cases.** - **HR data** — Salary, Performance Rating, Disciplinary Notes on the Worker / Employee table. Visible to HR profile; hidden from line managers. - **Customer Financial Data** — Credit Score, Internal Risk Assessment, Lifetime Value on the Account table. Visible to credit / finance profiles; hidden from regular sales. - **PII / Sensitive Personal Data** — SSN, Date of Birth, Bank Account on the Contact table. Visible to compliance / payroll; hidden from everyone else. - **Internal Comments** — sensitive internal-only notes on customer-facing records. Visible to certain roles; hidden from the customer-facing team. **How the platform enforces.** - **Form rendering** — secured fields render blank (or as "********") for users without access. - **API responses** — secured fields are stripped from API responses to unauthorised users. - **Reports and views** — secured fields don't appear in lists, search, or exports for unauthorised users. - **Audit log** — changes to secured fields can be tracked, but the audit log itself can be restricted to admins. ## Profile composition A user can be in multiple profiles; access is additive. A user in both "HR Read" and "HR Update" profiles for the Salary field can read and update; another user in only "HR Read" can read but not update. ## Profile-specific data masks Modern profile configurations support **data masking** — partial visibility: - Show only the last 4 digits of an SSN to support agents. - Show only the year of birth to marketing. - Show only the bank's country code, not the full IBAN. Masking is configured per profile; sophisticated rendering control. ## Plugin and integration access Server-side code accessing secured fields: - **Plug-ins** running as a specific user — respect that user's field-level security. To bypass, the plug-in runs as System or a service user with full access. - **Power Automate flows** — respect the flow owner's permissions, including FLS. - **Custom integrations** — respect the authenticated user's permissions. The pattern: integration service principals typically get full access; per-user contexts respect FLS. ## Mobile and the offline cache The offline cache in mobile Power Apps respects FLS: - Secured fields not visible to the user are not cached. - The local SQLite database stores only what the user can access. Important for compliance — secured data not stored on the user's device. **FLS vs row-level vs business-unit security.** - **Field-level** — restricts which *columns* a user sees within a record they have row access to. - **Row-level (security role + scope)** — restricts which *records* the user sees at all. - **Business unit / hierarchy** — coarse scoping by organisational position. All three layer together. A user sees rows their security role allows, with their assigned columns within those rows, restricted further by business unit / hierarchy. ## Performance FLS adds processing overhead to every query — the platform must check each user's profile membership and strip restricted fields from responses. For tables with many secured fields and complex profile structures, performance can degrade. Audit on busy tables. **Limits.** - **Number of secured fields per table** is bounded — Microsoft has limits (typically dozens, not thousands). - **Some field types** have specific FLS behaviour — file fields, image fields may behave differently. - **Calculated columns** that depend on secured fields are also restricted automatically. - **Audit logging of secured field changes** may require explicit configuration. **Common pitfalls.** - **Over-restriction** — users can't perform their job because FLS hides fields they need. Iterate based on user feedback. - **Profile sprawl** — many overlapping profiles become hard to administer. Consolidate. - **No FLS where it should be** — sensitive data exposed to broad audiences. Audit periodically. - **FLS not in offline cache configuration** — offline apps still expose secured data. Verify. ## Operational reality Use FLS for genuinely sensitive columns. Don't reach for it for general access control — that's what security roles are for. The layered model is the right approach. --- # Finance and Operations and the Power Platform How Dynamics 365 Finance and Supply Chain extend through the Power Platform — virtual entities, Power Automate, Power Apps, and AI Builder. Source: https://www.solvingdynamics365.com/guides/finance-and-operations-and-the-power-platform Section: Finance & SCM / Overview & platform Published: 2026-05-01 Dynamics 365 Finance and Supply Chain Management (F&O) didn't start life on the Power Platform — they were built on their own database and their own X++ runtime, and they remain there today. But Microsoft has, over several years, wired the Power Platform deeply into F&O so customers can extend, automate, and analyse without writing X++. ## Virtual entities F&O exposes its data entities to Dataverse as **virtual entities** — they look and behave like Dataverse tables but live in the F&O database. Power Apps, Power Automate, Copilot Studio, and Power BI can all read and (where supported) write through them. Virtual entities don't replicate data, so there's no latency or storage cost beyond F&O itself; the trade-off is that operations are bounded by F&O API throughput. ## Power Automate The Power Automate connector for F&O supports common operations on data entities. The most useful pattern: trigger a flow on an event in another system (a Slack message, a Form submission, a Logic Apps webhook) and create/update an F&O record without writing custom code. Heavy bulk work still belongs in DMF, but transactional automation is right at home in flows. ## Power Apps Canvas Power Apps over F&O virtual entities deliver purpose-built front ends — expense submission on mobile, warehouse-floor look-ups, executive dashboards — without putting the heavy F&O UI in front of a casual user. ## Embedded apps F&O pages can **embed Power Apps inline**, so an extension on a vendor card might show a canvas app fetching from an external system, with the same single sign-on. The reverse is also true: F&O views embed in model-driven Power Apps over Dataverse. ## AI Builder AI models trained in **AI Builder** (object detection, form processing, prediction) are callable from Power Automate flows that read or write F&O data. The classic use case: scan vendor invoices, extract line data with form processing, post the result as a draft vendor invoice in F&O. ## Microsoft Fabric F&O data flows into **OneLake** through Microsoft's **Synapse Link** for analytics, where Power BI and other Fabric tools query it without touching F&O. This is replacing the older Export to Data Lake (Synapse) and BYOD patterns. ## Copilot F&O ships with embedded copilots for finance and supply chain tasks; customers extend the experience with **Copilot Studio** agents that combine F&O data with other systems. ## Net effect Modern F&O implementations layer the Power Platform on top instead of building X++ where they can. It's faster, cheaper, and survives Service Updates better. --- # Financial dimensions in Dynamics 365 Finance How financial dimensions work in Dynamics 365 Finance — global dimensions, account structures, default dimensions. Source: https://www.solvingdynamics365.com/guides/financial-dimensions-in-dynamics-365-finance Section: Finance & SCM / Finance Published: 2026-05-01 Where Business Central has up to eight global dimensions, **Dynamics 365 Finance** allows up to ten **financial dimensions**, with a richer account-structure model on top. Designing the dimension framework is one of the most consequential decisions of any F&O implementation — it sets the reporting flexibility for the next decade. ## Financial dimensions Each dimension represents an analytical axis — Department, Cost Centre, Project, Region, Brand, Activity, etc. Dimensions have *values* (the codes within the dimension) and metadata (descriptions, defaults, validations). **Two flavours of dimensions.** - **Custom dimensions** — codes maintained in the dimension table. Used for axes that don't naturally exist as Dataverse-like entities (Cost Centre, Activity, Project Code if not using full Project Operations). - **Entity-backed dimensions** — the dimension is sourced from an existing F&O entity (Customer, Vendor, Item, Worker, Project). The dimension value *is* the entity's ID. Powerful: a Customer dimension means transactions automatically tag the customer without manual entry. Common entity-backed dimensions: Customer, Vendor, Site, Warehouse, Worker, Project. ## Account structures This is where F&O surpasses BC. An **account structure** defines, for a given GL posting, which dimensions are required and in what combination. The structure is a set of **segments** where each segment lists allowed values and the relationships between segments. Example: an account structure might specify that for revenue accounts (411xxx), the Department segment must come from a list of operational departments, and the Project segment must be non-empty. For balance-sheet accounts (1xxx), no Project is allowed. The system enforces the structure at posting time — wrong combinations are blocked. ## Advanced rules Beyond the basic account structure, **advanced rules** add conditional logic: when a specific account is used, require additional dimensions or constrain values. Used for compliance and statutory regimes that require dimension scrutiny on specific account types. ## Default financial dimensions Each master record (Customer, Vendor, Item, GL Account, Worker, Project, Site) carries **default financial dimensions** that flow onto transactions where the master is used. Defaults can be **fixed** (cannot be overridden) or **flexible** (the user can override at the transaction line). ## Default priority When multiple masters appear on the same transaction (a sales line involves customer, item, salesperson), the **default priority** rules decide which master's defaults win for each dimension. Configure these carefully — wrong priority assigns the wrong cost centre on every transaction. ## Derived dimensions F&O can derive a dimension value from a formula or lookup — e.g. derive Region from the Customer's address. Reduces manual entry; introduces dependencies. ## Reporting dimensions When reporting, dimensions can be: - **Flat-rolled** — view spending across all dimensions on a single account, summed. - **Sliced** — view spending broken down across one or more dimensions side by side. - **Combined** — multiple dimensions intersect in pivot-style reports. Both Financial Reporting and Power BI consume the dimension structure. **Design discipline.** - Start from the management reports the business needs. Work backwards to the dimensions required. - Don't reach for ten dimensions when six will do. More dimensions slow performance and increase data-entry burden. - Document the dimension semantics — what each value means, what counts as a valid combination — so the design survives staff turnover. - Revisit annually — dimension values that haven't been used in 12 months are usually candidates for deactivation. ## Where to go next Dimensions are set up per [legal entity](https://www.solvingdynamics365.com/guides/legal-entity-setup-in-f-and-o) and exercised on every [general journal entry](https://www.solvingdynamics365.com/guides/general-journal-entry-workflow-in-f-and-o); they are what [budget control](https://www.solvingdynamics365.com/guides/budget-control-in-f-and-o) enforces against and what the [reporting tools](https://www.solvingdynamics365.com/guides/dynamics-365-finance-reporting-tools) slice by. For the Business Central counterpart — a different model with a similar purpose — see [dimensions design in Business Central](https://www.solvingdynamics365.com/guides/business-central-dimensions-design). --- # Fiscal calendar setup in Dynamics 365 Finance How fiscal calendars are configured in F&O — periods, years, multiple calendars per ledger, and the implications for posting, closing, and reporting. Source: https://www.solvingdynamics365.com/guides/fiscal-calendar-setup-in-f-and-o Section: Finance & SCM / Finance Published: 2026-06-22 Every legal entity in Dynamics 365 Finance posts transactions against a **fiscal calendar** that defines its accounting periods. Configuring fiscal calendars correctly at implementation is one of those decisions that's mundane to make and painful to reverse — the calendar shapes period close, reporting, and posting permissions for years. **The model.** - **Fiscal calendar** — a top-level container of fiscal years. - **Fiscal year** — typically 12 months but can be longer or shorter (e.g. a stub year during transitions). Has a start date and end date. - **Period** — a month within the year (typically), with start and end dates and a closing offset for the close window. - **Module-specific status per period** — each module (General Ledger, Inventory, Bank, Fixed Assets, etc.) can have its own period status (Open, On Hold, Closed) per period. ## Multiple calendars F&O supports multiple fiscal calendars in one environment: - **Statutory calendar** — the calendar aligned to local tax / regulatory periods. - **Group reporting calendar** — the calendar aligned to the parent company's reporting cadence (often different from the subsidiary's statutory calendar). - **Tax calendar** — for jurisdictions requiring a separate tax calendar. Each ledger references one fiscal calendar; multiple ledgers can share a calendar. **Fiscal year structure.** - **Calendar year** — Jan-Dec. Most common in commercial contexts. - **Non-calendar year** — e.g. April-March (UK statutory for some sectors, Japan), July-June (Australian government, some commercial), August-July, etc. - **52/53-week year** — retailers and some industries use 13 four-week periods plus an occasional extra week year. Microsoft supports this via dedicated configurations. - **Stub year** — when transitioning between fiscal-year structures, a stub year of unusual length (e.g. 3 months, 15 months) bridges. **Period structure.** - **12 calendar months** — standard. - **13 four-week periods** — for 52/53-week retailers. - **52 weeks** — granular retail. - **52 weeks + Period 13** — for 4-4-5 retail accounting calendars. ## Open and close per module A period can be: - **Open** for all modules — transactions can post anywhere. - **Closed** for GL but **Open** for Inventory — finance has locked the period but warehouse adjustments still allowed. - **Closed** entirely — no posting in any module. - **On hold** — only privileged users can post; used for the close window. This module-level granularity supports the typical close sequence: close sub-ledgers in order, lock GL last. **Year-end implications.** - **Fiscal year boundary** is when **year-end close** runs (income statement closed to retained earnings). - **Period 12 close** is the last regular period; reports for the year typically run through this. - **Closing date entries** post on the special closing-date pseudo-position (after regular Period 12 transactions but before fiscal year boundary). - **New fiscal year** must exist (be created) before posting in it can happen. ## Adjusting periods Some configurations include an **adjusting period** after Period 12 specifically for year-end adjustments (audit adjustments, accruals identified post-close). The adjusting period has its own date range and posting controls. ## Closing offset Each period has a **closing offset** — how many days after the period end the close window remains open. Configurable per period; controls when the period auto-closes if not manually closed first. ## Multi-entity considerations Multi-entity groups face calendar complexity: - **Same calendar across entities** — simplest; close all entities together; consolidate cleanly. - **Different calendars per entity** — common when subsidiaries have local statutory calendars; close happens per entity; consolidation has timing offsets. - **Parallel statutory and group calendars** — each entity reports on its statutory calendar to local authorities and on the group calendar for consolidation. Requires careful configuration. **Configuration discipline.** 1. **Get the fiscal calendar right at implementation.** Changing it later is invasive. 2. **Create future fiscal years well in advance** — at least a year ahead, ideally two. 3. **Document the close cadence per period** — when each sub-ledger closes, when GL closes, when adjusting period opens / closes. 4. **Communicate close-window restrictions** to users; surprise posting failures are demoralising. **Common pitfalls.** - **Missing future fiscal years** — first posting in a new year fails because the year doesn't exist yet. - **Wrong calendar attached to a new entity** — entity reports on a calendar that doesn't match its statutory requirements. - **Module status drift** — sub-ledgers closed but GL still open lets late posts hit the wrong period. - **Statutory vs reporting calendar confusion** — entity's statutory date is correct but the group sees a different "as-at" date. ## Operational reality Fiscal calendar setup is a one-time architectural decision with lasting impact. Engage the controller and the implementation partner together; verify against statutory requirements per entity; document the resulting configuration. --- # Fit-gap analysis for Dynamics 365 How to perform fit-gap analysis for a Dynamics 365 implementation — comparing requirements to standard capabilities, categorising gaps. Source: https://www.solvingdynamics365.com/guides/fit-gap-analysis-for-dynamics-365 Section: Implementation / Project execution Published: 2026-05-01 A fit-gap analysis compares business requirements to standard Dynamics 365 capabilities, identifying what fits out-of-the-box and what doesn't. The output drives critical decisions: configure, customise, integrate, buy ISV solution, or change the business process. Done well, fit-gap is the bridge between requirements gathering and design; done poorly, it becomes a battleground of scope and budget. **The fit-gap framework.** For each requirement, classify: - **Fit** — standard Dynamics 365 supports it as-is. - **Configure** — standard with parameter / setup adjustments. - **Customise** — requires development (plug-in, custom code). - **Integrate** — needs connection to external system. - **Process change** — business process should adapt to system rather than vice versa. - **ISV solution** — third-party app fills gap. - **Out of scope** — won't be addressed. This categorisation drives the implementation path for each requirement. **Why fit-gap matters.** - **Cost** — customisation more expensive than configuration. - **Time** — standard faster than custom. - **Maintainability** — customisations require ongoing support. - **Upgrade impact** — heavy customisation complicates upgrades. - **Risk** — custom code has bugs. Bias toward fit; customise only when business value clearly justifies. **The process.** 1. **Requirements list** — output of requirements gathering. 2. **Standard capability research** — what Dynamics does out-of-box. 3. **Gap identification** — what's missing. 4. **Solution proposal** — how to address each gap. 5. **Cost / benefit per gap** — quantify. 6. **Decision per gap** — what we'll do. 7. **Updated requirements** — final scope. ## Standard capability research Sources: - Microsoft documentation. - AppSource marketplace. - Partner expertise. - Demonstrations. - Sandbox exploration. The team doing fit-gap must know what Dynamics does — not assume. **Gap categorisation by severity.** - **Critical** — process can't operate without it. - **Significant** — workaround exists but painful. - **Nice-to-have** — improvements only. Critical gaps must be resolved; nice-to-have can be deferred or rejected. **Solution options per gap.** - **Configure** — change parameter / setup. - **Personalise** — UI adjustment per user. - **Customise** — code-based extension. - **Workflow** — Power Automate orchestration. - **External integration** — connect to specialist system. - **ISV solution** — partner app from AppSource. - **Process redesign** — change how business works. - **Accept gap** — live with the workaround. Each option has cost / benefit profile. **Configure vs customise.** - **Configure** — uses Dynamics's parameter and setup mechanisms. - **Customise** — adds new code, new entities, new business logic via development. Configure is faster, cheaper, more upgrade-safe. Default to configure; customise only when configure can't. **ISV solution evaluation.** - **AppSource browse** — find candidates. - **Vendor demos.** - **Reference checks.** - **Cost — both licensing and integration.** - **Update / support model.** - **Acquisition risk** — small ISV might not be around in 5 years. For specialised industry needs, ISV often the right answer. **Process redesign as option.** - The business wants to do X because that's how they've always done X. - Dynamics does it differently but well. - Could the business adopt Dynamics's way? Process redesign saves customisation cost; requires change management investment. **Cost-benefit per gap.** - **Cost of customisation** — development, testing, ongoing maintenance. - **Cost of workaround** — manual effort. - **Cost of process change** — change management. - **Cost of integration** — development and operations. - **Cost of ISV** — licensing and integration. Quantify in time and money; subjective for some. ## Pareto analysis Often: - 20% of gaps are "must address." - 80% have viable alternatives. - Focus customisation effort on the critical 20%. This focuses scope and budget where it matters most. **Customisation principles.** - **Standard extension points** — events, plug-ins, low-code, not base code modification. - **Solution-aware** — packaged for ALM. - **Testable.** - **Documented.** Quality customisations are maintainable; quick-and-dirty becomes technical debt. **Output of fit-gap.** - **Gap log** — every requirement with disposition. - **Customisation list** — what gets built. - **ISV list** — what gets purchased. - **Integration list** — what connects. - **Process change list** — what business adapts. - **Budget impact** — total cost picture. ## Sign-off Stakeholders agree: - What's in scope. - What's out. - What's customised. - What's standard. This sign-off prevents later "but we said we needed X" disputes. **Common pitfalls.** - **Customising what standard does.** Partner doesn't know standard capability; recommends custom. - **Ignoring customisation cost over lifecycle.** Build cost is start; ongoing maintenance is years. - **Over-customisation pride.** "Our way is special" — usually it isn't. - **Forgetting upgrade impact.** Heavy customisations complicate every future upgrade. - **ISV impulse purchase.** Without due diligence, ISV mistakes are common. ## Bias for the standard A core implementation philosophy: - Assume Dynamics's way is reasonable. - Customise only with clear business case. - Standardise where possible. The "Microsoft did a lot of thinking about this" perspective often produces better outcomes than "we know better." **Periodic re-evaluation.** - Each release adds capabilities. - Customisations may now be standard. - Periodic review identifies retirement candidates. Over project lifetime, customisation count should be flat or decreasing, not growing. ## Strategic positioning Fit-gap analysis is where implementation scope becomes concrete. The quality of the analysis directly affects cost, timeline, and maintainability. Partners and customers should align on bias — toward standard — with explicit justification for each deviation. For decision-makers: - Demand thorough fit-gap. - Question every customisation. - Track customisations as technical debt. - Refresh fit-gap periodically. The discipline pays back continuously through cleaner upgrades, easier support, and lower total cost of ownership. --- # Fixed assets in Business Central, in depth How Business Central tracks fixed assets — depreciation books, acquisition, disposal, write-down, and the link to FA insurance and maintenance. Source: https://www.solvingdynamics365.com/guides/business-central-fixed-assets-in-depth Section: Business Central / Finance & accounting Published: 2026-05-01 Updated: 2026-08-25 The Fixed Assets module in Business Central is comprehensive enough for most small and mid-sized businesses, including organisations with multiple parallel depreciation requirements (e.g. local GAAP plus IFRS). ## The asset card Each fixed asset is a card with description, classification, location, responsible employee, vendor, and one or more attached *depreciation books*. Asset numbers can be generated via a number series or imposed from outside. ## Depreciation books A **depreciation book** holds the depreciation method, useful life, salvage value, and posting accounts for an asset. The same asset can be attached to multiple books in parallel — one for statutory accounts, one for tax, one for IFRS — each with different methods and lives. Books can be configured to post to the GL or to track values without posting. ## Methods Built-in methods include straight-line, declining-balance 1 and 2, DB1/SL combined, manual, and user-defined. Mid-month, full-month, and half-year conventions are supported. For specialist methods (units of production, double-declining variants), customers add an extension. ## Acquisition Assets are acquired through a **fixed-asset journal**, an **FA G/L journal**, or directly from a purchase invoice line where the line type is set to *Fixed Asset*. The integration with purchase invoices is the modern pattern — it captures vendor, vat, and the acquisition in one document. ## Depreciation runs The **Calculate Depreciation** batch job creates journal lines for the period; users review and post them. Depreciation is calculated to the day, so partial-period acquisitions and disposals work correctly. ## Write-downs and appreciations Asset values can be adjusted up or down through FA journals; the system posts the offsetting entry to user-defined accounts. ## Disposal Disposing an asset is a single journal entry with the proceeds amount; the system automatically posts the cost reversal, accumulated depreciation reversal, and gain or loss. Partial disposals and asset transfers between locations or departments are supported. ## FA Insurance and Maintenance Optional sub-modules track insurance policies and coverage values against assets, and record maintenance events and costs. Both are useful audit trails but neither replaces a CMMS for asset-heavy organisations. ## Reporting Standard FA reports cover register, additions, disposals, depreciation schedules, and book values; everything reconciles back to the GL via the FA posting groups. --- # Fixed assets in Dynamics 365 Finance and Operations How F&O handles fixed assets — books, depreciation profiles, acquisitions, disposals, and the integration with project, purchase, and tax accounting. Source: https://www.solvingdynamics365.com/guides/fixed-assets-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 A factory machine, a server rack, an office building, a fleet of trucks — fixed assets are capital expenditures depreciated over their useful life. F&O's **Fixed Assets** module captures the full lifecycle: acquisition, depreciation, revaluation, disposal — with multi-book support for parallel tax and financial reporting. **Core entities.** - **Fixed Asset** — the asset record. - **Asset Group** — grouping for default depreciation profiles, accounts. - **Book** — a "view" of the asset with its own depreciation method. - **Depreciation Profile** — straight-line, declining-balance, etc. - **Depreciation Convention** — half-year, full-month, etc. ## Multi-book architecture A single asset can have multiple books: - **Current (current book)** — financial reporting per GAAP/IFRS. - **Tax (tax book)** — tax depreciation per local rules. - **Statutory** — country-specific reporting. - **Custom** — managerial purposes. Each book has its own depreciation method, life, and posting. The asset accumulates value differently per book. ## Why multi-book matters Tax rules and accounting rules diverge: - Tax may allow accelerated depreciation (Section 179, bonus depreciation in US). - Accounting may require straight-line for matching. - Different lives, different methods. Without multi-book, you'd run separate systems for tax and accounting. F&O integrates both. **Depreciation methods.** - **Straight-line** — equal amount per period. - **Declining balance** — higher early, lower later. - **Sum-of-years digits** — accelerated. - **Units of production** — based on usage. - **Manual** — operator enters. Each method's parameters configured per profile; profiles assigned to asset books. ## Acquisition When an asset is acquired: - **From purchase order** — receipt creates asset acquisition. - **Manual entry** — fixed asset journal directly. - **From project** — capitalised from a project's costs. - **From inventory** — inventory transferred to fixed assets. Each path posts: - Asset value to balance sheet (debit). - Vendor payable or cash (credit). ## Depreciation runs A periodic batch: 1. Identify assets with active depreciation. 2. Calculate depreciation per book per period. 3. Post depreciation expense (debit) and accumulated depreciation (credit). Run monthly typically; some assets require daily for short-lived items. ## Asset revaluation Adjustments after initial recording: - **Write-up** — increase value (asset improvement, market revaluation). - **Write-down** — decrease (impairment). Posted via specific journals; affects future depreciation. ## Disposal When an asset is retired or sold: - **Sale** — asset value out, sales price in, gain/loss to P&L. - **Scrap** — asset value out, loss to P&L. - **Transfer** — to another entity or fund. The disposal journal handles the accounting; tax book may show different gain/loss than current book. ## Asset groups and default values Asset groups simplify configuration: - All "Buildings" — straight-line 30 years. - All "Computers" — straight-line 3 years. - All "Vehicles" — declining-balance 5 years. New assets inherit defaults from their group; can be overridden per asset. ## Integration with projects For long-build assets: - Construction in progress (CIP) accumulates project costs. - On completion, CIP transfers to fixed asset. - Depreciation starts from in-service date. This handles building, manufacturing line install, multi-month asset constructions. **Integration with maintenance.** - Service work orders posted against the asset. - Maintenance costs tracked; not capitalised (usually). - Asset uptime / utilisation tracked. For mining, manufacturing, fleet operations, this integration matters. **Tax depreciation specifics.** - **US** — MACRS (Modified Accelerated Cost Recovery System) classes, bonus depreciation, Section 179. - **EU** — country-specific rules. - **Asia-Pacific** — varies. F&O's tax book handles local rules with appropriate localisations. ## Component depreciation (IFRS) IFRS requires separate depreciation of significant components: - A building's roof depreciated differently than the building shell. - F&O supports parent-child asset structures for components. Component accounting adds complexity but is required for IFRS-reporting entities. ## Mass disposal and mass acquisition For fleet operations: - 50 trucks acquired together — mass acquisition. - 30 retired together — mass disposal. Batch journals handle these efficiently. **Reporting.** - **Asset register** — full list of active assets with values. - **Depreciation forecast** — future depreciation by period. - **Disposal report** — gains/losses. - **Asset transactions** — full ledger per asset. For auditors, the asset register is the canonical source; reconciles to balance sheet. **Common pitfalls.** - **Tax book missed.** Only current book set up; tax depreciation manual; compliance risk. - **Acquisitions through wrong path.** Direct journal entries bypass asset module; asset register incomplete. - **Disposals not posted.** Asset still depreciating after sale; balance sheet wrong. - **Component accounting skipped.** IFRS non-compliance for buildings and complex assets. - **In-service date missing.** Depreciation starts wrong; period overstates. ## Strategic positioning Fixed asset accounting is a core finance discipline. F&O's module is comprehensive and handles most scenarios; for very complex environments (oil and gas with depletion accounting, real estate with multiple component layers, government with fund accounting), specialty extensions or external systems may complement. For most enterprises, F&O Fixed Assets handles the lifecycle natively with appropriate setup. The investment in configuring books, profiles, and conventions at deployment pays back through automated, audit-ready depreciation processing for years. --- # Foreign currency revaluation in Business Central How Business Central revalues open foreign-currency balances at period-end — Adjust Exchange Rates, the unrealised gain/loss accounts. Source: https://www.solvingdynamics365.com/guides/foreign-currency-revaluation-in-bc Section: Business Central / Finance & accounting Published: 2026-05-01 A company that invoices in EUR but reports in USD owns FX exposure on every unpaid invoice. At period-end, accounting standards (IFRS, US GAAP) require those open balances to be **revalued** to the closing rate, with the difference recognised as an unrealised gain or loss. Business Central handles this through the **Adjust Exchange Rates** batch. **Realised vs unrealised FX.** - **Realised FX gain/loss** — happens at the moment of settlement (payment). If a customer paid EUR 100 invoice that was booked at $1.10 = $110 but the payment converted at $1.08 = $108, the $2 difference is a realised loss. Booked at posting time of the application. - **Unrealised FX gain/loss** — happens at period-end revaluation of *unsettled* balances. An open EUR 100 invoice booked at $1.10 = $110 with a closing rate of $1.12 implies the receivable is now worth $112; the $2 difference is unrealised gain. Booked by Adjust Exchange Rates. The distinction matters for both accounting presentation and tax — many jurisdictions tax realised gains but not unrealised. ## Adjust Exchange Rates Navigation: `Finance → Currencies → Adjust Exchange Rates`. The batch: 1. Reads each open customer ledger entry, vendor ledger entry, bank ledger entry, and G/L entry on foreign-currency accounts. 2. Compares the original recorded exchange rate against the closing rate as of the parameter `Posting Date`. 3. For each entry, computes the FX delta in LCY. 4. Posts an entry to the unrealised gain or unrealised loss account (set on the **Currency** card). 5. On the next adjustment, reverses the prior unrealised entry and posts the new one — the unrealised position is always the latest snapshot. ## Currency card setup Each currency requires these G/L accounts: - **Unrealised Gains Acc.** — credit account for upward revaluation. - **Unrealised Losses Acc.** — debit account for downward revaluation. - **Realized Gains Acc.** — for settlement gains. - **Realized Losses Acc.** — for settlement losses. Many companies use a single P&L line (FX gain/loss, net) but maintain separate G/L accounts for cleaner audit trail. ## Exchange rate maintenance The batch only works if exchange rates are current. The **Currency Exchange Rate** table holds dated rate records per currency pair. Three sources: - **Manual entry** — daily/weekly, by a finance team. - **Microsoft's exchange rate service** — pulls rates from a configured provider (often Open Exchange Rates). - **Custom feeds** — Power Automate flow pulling from a treasury system or rate provider, then writing via the BC API. Closing rates for revaluation are usually the rate at end of period — populate before running Adjust Exchange Rates. **Which entries get adjusted.** - **Customer / vendor ledger entries** — adjusted if `Open = Yes` (unsettled). - **Bank ledger entries** — bank balance in foreign currency revalued every period. - **G/L entries on FX accounts** — accounts flagged with a non-LCY currency revalue. Closed entries (fully applied invoice and payment) are not revalued because the gain/loss is already realised. ## Reporting impact Unrealised FX appears in the P&L under FX gain/loss. The balance sheet picks up the LCY revaluation in the customer / vendor / bank balances. The next period, the prior unrealised reverses and a new value posts — net effect is the change since last revaluation. ## Statutory and tax nuances Some jurisdictions defer unrealised FX for tax purposes (US Subpart F has specific rules; many other countries follow IFRS unrealised treatment). The G/L mapping should distinguish unrealised from realised so the tax computation can exclude unrealised correctly. **Common pitfalls.** - **Skipping revaluation.** Financial statements show open balances at original rates; auditor adjustment at year-end. - **Wrong closing rate.** Using an average rate instead of period-end rate is a common error; check policy. - **Revaluing already-settled entries.** Shouldn't happen but errors in application status can cause it; ensure applications are clean before running. - **G/L account contamination.** Manual entries on the unrealised accounts during the period confuse the revaluation reversal logic. Don't post manually to FX accounts. - **No revaluation on bank accounts.** A bank in EUR carries USD valuation that drifts; forgetting to revalue understates or overstates cash. ## Operational rhythm Run Adjust Exchange Rates as a step in the monthly close: after AR/AP have been finalised but before reporting. A repeatable runbook including current rates entry and post-adjustment validation prevents close-day fire drills. --- # Form extensions in Dynamics 365 Finance and Operations How to extend forms in F&O — extending standard forms, adding controls and groups, handling events, and avoiding common form-extension pitfalls. Source: https://www.solvingdynamics365.com/guides/f-and-o-form-extensions Section: Finance & SCM / AL & X++ development Published: 2026-05-01 Forms in F&O are the visible surfaces of the application — pages users interact with. Adding a field to a vendor card, a new button to a sales order, custom logic on field changes — all of these are done through **form extensions**. They're a core extensibility mechanism; mastering them is essential for productive F&O development. ## The extension model F&O doesn't allow modifying the standard form directly. Instead: - Create a **Form Extension** object in your model. - Reference the standard form being extended. - Add controls, change properties, add event handlers. - At runtime, F&O renders the standard form plus the extension's contributions. This enables Microsoft to update the standard form without breaking your additions. **What you can extend.** - **Add new controls** — fields, buttons, groups, tabs. - **Move controls** within the layout (with limitations). - **Change properties** of existing controls (caption, visibility). - **Add event handlers** — pre/post on form methods. - **Add data sources** — additional tables joined. - **Add menu items** to the form's command bar. **What you cannot do.** - **Delete standard controls.** Hide via Visible = No; cannot remove. - **Reorder major sections** freely; some constraints. - **Override standard methods completely** — you can extend via Chain of Command but not replace. The constraints maintain forward compatibility. **Adding a field.** 1. Create form extension for the form. 2. Add an Extension control of type Field. 3. Bind to a data source field (either standard or your custom table extension). 4. Position via the design surface. The extension's controls are visually merged with the standard form at runtime. ## Adding a tab page Common pattern: - Add a `Tab` control. - Add `TabPage` for new tab. - Inside, group controls relevant to the new functionality. Place tabs in a logical position — typically after standard tabs. **Adding a button.** - Add a `Button` control. - Bind to a menu item action (which targets a class with main method). - Set position, caption, image. The button's click invokes the menu item; the menu item invokes a class method. ## Event handlers in form extensions When you need code triggered by form events: ```x++ class MyFormEventHandler { [FormDataSourceEventHandler(formDataSourceStr(CustTable, CustTable), FormDataSourceEventType::Written)] public static void CustTable_OnWritten(FormDataSource sender, FormDataSourceEventArgs e) { // logic when CustTable is written } } ``` Decorators specify the form, data source, and event. Methods are static. **Common form events.** - **OnInit / OnInitializing** — form startup. - **OnActivated** — when form becomes active. - **OnClosing** — closing. - **OnFieldModified** — field changed. - **OnDataSourceWritten** — record saved. - **OnClicked** — control clicked. Each has specific signature and use case. ## Chain of Command on form controls For overriding behaviour: ```x++ [ExtensionOf(formStr(CustTable))] final class CustTable_Extension { public void clicked() { // pre-logic next clicked(); // post-logic } } ``` `next clicked()` invokes the original method; logic wraps it. ## Data source extensions Add a new table to the form's data sources: - Link to existing data source via join. - New table accessible from form context. - New controls bind to the new data source. Useful when standard form's data set is insufficient. ## Visibility and enablement Often more useful than adding new controls: - Hide a button users shouldn't use. - Disable based on record state. - Show / hide tabs based on permissions. These small UX changes can significantly improve user experience. ## Form patterns F&O has standard form patterns: - **List page** — grid with filters. - **Details master** — single record with sections and tabs. - **Transaction details** — header + lines. - **Workspace** — KPI-driven landing page. Extending forms requires understanding the pattern; e.g., adding a tab to a list page works differently than to a details form. **Form personalisation vs extension.** - **Personalisation** — per-user; users adjust their views. - **Extension** — per-tenant code; everyone sees. Don't use extensions for things users could personalise; reserve for true customisation needs. **Performance considerations.** - **Heavy event handlers** slow form opening. - **Cross-table queries** in handlers — careful. - **Lazy load** patterns — show data only when tab is opened. **Common pitfalls.** - **Overcomplicated extensions.** Many extensions stacking; form behaviour unpredictable. - **Hidden controls.** Setting Visible=No without context; users confused. - **Event handler not firing.** Wrong event signature; debugging confused. - **Conflicting extensions.** Two extensions modify same control; last one wins (sometimes). - **No labels.** Custom controls without labels; non-accessible. - **Permission gaps.** New controls visible to users who shouldn't see them; security review. ## Testing Form extensions should be tested: - Open form in each role. - Verify visibility / enablement. - Test event handlers. - Performance on opening. Manual testing essential; automated UI testing is heavier in F&O. **Best practices.** - **One extension per functional area** — don't stuff everything in one extension. - **Document the extension** — what it adds, why. - **Clear naming** — `CustTable_Extension_LoyaltyFields` vs cryptic. - **Version per release** — tied to your codebase versioning. ## Strategic positioning Form extensions are how F&O is tailored to specific business needs. They're a core developer skill. Mastery includes understanding the extension model, the event system, the form patterns, and the maintenance discipline. Over a project's lifetime, accumulated form extensions become significant code; treating them with the same engineering rigour as any production code — review, testing, documentation — keeps the customisation maintainable. Without discipline, accumulated extensions become a tangle no one wants to touch. --- # Form scripting with the Client API How to write JavaScript form handlers in Dynamics 365 — the Client API, event handlers, common patterns, and the rules for maintainable code. Source: https://www.solvingdynamics365.com/guides/form-scripting-with-the-client-api Section: Customer Engagement / Dataverse platform Published: 2026-05-01 For Dynamics 365 model-driven apps, complex client-side logic — beyond what business rules can express — lives in **JavaScript** running on the form, using the **Client API**. Used well, scripting handles validation, dynamic UI behaviour, calls to other tables, and integration with external services. Used badly, it produces unmaintainable code that breaks across platform updates. ## The Client API Microsoft's `Xrm` global object provides the JavaScript API for interacting with the form: - **`formContext`** — the current form, with methods to get / set field values, control visibility, raise notifications, save the form. - **`Xrm.WebApi`** — make calls to Dataverse's Web API to read / write records. - **`Xrm.Navigation`** — open records, dialogs, alerts, confirmations. - **`Xrm.Utility`** — utility methods (open quick create, show progress indicator). - **`Xrm.Page` (deprecated)** — older equivalent of formContext; new code should not use it. The Client API is the *only supported* way to interact with the form from JavaScript. Direct DOM manipulation is unsupported and will break. ## Event handlers JavaScript runs in response to form events: - **OnLoad** — when the form opens. - **OnSave** — when the user saves. - **OnChange** — when a specific field changes. - **TabStateChange** — when a tab is collapsed / expanded. - **OnReadyStateComplete** — when the form is fully rendered. - **PreSearch** — before a lookup search executes (to apply additional filters). Handlers are registered through the form designer, pointing to a function name in a registered web resource. ## Web resources JavaScript files are uploaded as **web resources** to the solution — versioned, deployable, source-controllable. Best practice: - One JavaScript file per major table or feature. - Wrap code in a namespace object to avoid global pollution. - Use TypeScript for type safety, compile to JavaScript at build time. **Common patterns.** - **Conditional required fields.** OnChange of one field, set required level of another field via `setRequiredLevel()`. - **Dynamic visibility.** Show / hide sections, tabs, or fields based on field values. - **Validation beyond business rules.** Complex multi-field validation; raise a notification with `formContext.ui.setFormNotification()`. - **Cross-table fetch.** OnLoad, query a related table via `Xrm.WebApi.retrieveMultipleRecords()`, populate a UI element. - **Cascade defaults.** OnChange of Account lookup, fetch the Account's default Payment Terms and populate them on the current record. - **External API calls.** OnSave, validate against an external service (address verification, tax-ID validation). - **Lookup filtering.** PreSearch on a lookup, apply a custom filter via `addCustomFilter()` so users only pick valid related records. **Performance.** - **OnLoad weight matters** — heavy initialisation slows form opening. Defer non-critical work to OnChange or async load. - **Limit OnChange handlers** — handlers on every field with cascading logic produce slow user experiences. - **Async API calls** — use `await` and promises; never block the UI thread. - **Cache repeated lookups** — fetching the same related data multiple times wastes API calls. **Maintenance and platform updates.** - **API versioning** — the Client API has versioned methods; use the recommended current versions. - **Deprecation tracking** — Microsoft deprecates older API methods; review release notes per wave for affected code. - **Avoid undocumented behaviour** — relying on DOM structure or non-API internals is the express route to broken code after a platform update. **Debugging.** - Browser developer tools — Sources tab to step through scripts. - `console.log()` — for trace logging during development. - **Forms debug mode** — query string parameter that enables verbose logging. - Test in unmanaged dev solution; deploy as managed. **Common pitfalls.** - **Calling Web API in OnLoad without await** — race conditions where UI renders before data arrives. Use async/await properly. - **Manipulating the DOM directly** — works today, breaks tomorrow when Microsoft changes the rendered structure. - **Hard-coded GUIDs** — magic GUIDs for security roles, business units, etc. break when solutions deploy across environments. - **No error handling** — uncaught exceptions in handlers produce silent failures users notice as "weird behaviour". **When not to use Client API JavaScript.** - Simple field-level logic → business rules. - Server-side validation (cannot be bypassed) → plug-ins or workflow. - Cross-system integration → Power Automate flows or plug-ins. - Multi-step business processes → business process flows. ## Operational discipline Source-control JavaScript like any code. Code review changes. Version solutions. Maintain a catalogue of handlers per table. --- # Formula columns in Dataverse How Dataverse formula columns work — Power Fx expressions evaluated at query time, the differences from calculated and rollup columns. Source: https://www.solvingdynamics365.com/guides/dataverse-formula-columns Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Dataverse offers three flavours of derived columns: **calculated**, **rollup**, and **formula**. The formula column is the newest, using Power Fx (the same expression language as canvas apps) and evaluating at query time. Understanding when each fits avoids the common trap of using the wrong tool. **Quick comparison.** - **Calculated columns** — server-side formula, evaluated when reading the row. Limited to a subset of operators; classic since 2015. - **Rollup columns** — aggregations over related child records (SUM, COUNT, etc.). Evaluated by a background job (every hour by default). - **Formula columns** — Power Fx expression, evaluated at query time. Supports a richer expression language; introduced 2022. ## Formula columns deeper dive The Power Fx expression operates on the current row's columns and (limited) related-row columns. When the row is queried — through an API, a view, a form — the formula is evaluated and the value returned. The result is **not** stored; every read recomputes it. ## Setup In the maker portal: 1. New column → Data type: matches the formula's output (Text, Number, Decimal, DateTime, Yes/No, etc.). 2. Type the Power Fx expression in the formula box. 3. Power Fx provides Intellisense for table columns. 4. Save. **Supported Power Fx features.** - **Arithmetic** — `+ - * /`, mathematical functions. - **Text operations** — `Concatenate`, `Left`, `Right`, `Mid`, `Upper`, `Lower`, `Trim`. - **Logical** — `If`, `And`, `Or`, `Not`, `Switch`. - **Date/time** — `DateAdd`, `DateDiff`, `Now`, `Today`. - **Lookup field access** — `customerLookup.Name`. - **Related entity columns** — limited; lookup to parent's column allowed. **Not supported (or limited).** - **Aggregations over child collections** — `Sum(Orders, Amount)` doesn't work in formula columns; use rollup. - **Complex multi-level traversal** — formula sees the current row and its direct lookups, not deep relationships. - **External data calls** — no API calls in formulas. - **Recursion / loops** — straightforward expressions only. - **Volatile functions** — `Now()` works but is reevaluated each query; can affect caching. **Compared to calculated columns.** - **Calculated** uses a different, smaller expression syntax. - **Calculated** can be used in Advanced Find filters; **formula** has limited filter support depending on output type. - **Calculated** has stricter recalculation behaviour. The trend: Microsoft is investing in formula columns, not calculated. New work should prefer formula unless a specific calculated capability is needed. **Compared to rollup columns.** - **Rollup** aggregates child records (number of related cases, sum of related order amounts). - **Formula** doesn't aggregate over children — but can reference a single related lookup. If you need "total order value per account," that's rollup. If you need "account display name = name + ' (' + city + ')'," that's formula. **Performance considerations.** - **Formula columns are recomputed on every read.** For high-volume queries, this adds cost. For small datasets or rare queries, it's negligible. - **Filtering on a formula column** can prevent the database from using indexes — full table scans result. - **Sorting on a formula column** has similar limitations. For columns used heavily in queries and views, a stored calculated column (with traditional pre-computation) or a plugin that maintains a real column may outperform formula columns. ## Dependencies Formula columns reference other columns. If a referenced column is renamed or deleted, the formula breaks. Maker portal warns; the formula may need to be rewritten. Maintenance discipline: when changing a column referenced in formulas, audit all dependents first. **Use cases.** - **Display names** — concatenations, prefixed labels, status-friendly text. - **Date math** — days until due, days since created. - **Categorisations** — case priority based on type and severity logic. - **Currency display** — combined currency code and amount. - **Computed flags** — booleans based on row state. **Common pitfalls.** - **Trying to aggregate over children.** Formula doesn't support this; use rollup. - **Performance impact in large lists.** Slow views, slow exports; consider whether the column needs to be a formula or could be stored. - **Circular reference attempts.** Formula A references B, B references A — rejected at save time. - **Power Fx differences from canvas Power Fx.** Some functions available in canvas apps aren't in formula columns; check the documentation when porting. - **Decimal precision.** Formula output precision can differ from source; double-check rounding. ## Operational guidance Default to formula columns for new derived data needs. Reserve calculated columns for legacy maintenance or specific behaviour they exclusively support. Reserve rollup columns for parent-child aggregation. The clarity of using the right tool keeps the data model maintainable. --- # Functional design documents for Dynamics 365 How to structure an effective FDD — sections that capture the business process, the system behaviour, the decisions and rationale, and the test scenarios. Source: https://www.solvingdynamics365.com/guides/functional-design-documents-for-dynamics-365 Section: Implementation / Project execution Published: 2026-05-01 A Functional Design Document (FDD) is the bridge between business requirements and technical configuration. Done well, it captures what the system needs to do for a specific business process, in language the business can read, and in detail the technical team can build. Done poorly, it's bloated, vague, or both — adding cost without yielding clarity. **The audience and purpose.** - **Business stakeholders** sign off on the design. - **Configuration team** uses it as the build specification. - **Testers** use it to derive test cases. - **Auditors** use it as evidence of designed-and-approved process. - **Future maintainers** read it to understand why things are as they are. The FDD serves all of these — which is why one-size-fits-all templates struggle. Layered structure helps. ## Per-process scope An FDD covers one business process — "Customer Onboarding," "Vendor Invoice Processing," "Sales Order to Cash." Not the whole implementation. Discrete, focused FDDs are more useful than monolithic ones. **Standard sections.** **1. Overview.** One page: - Process name. - Purpose — what business outcome. - In scope / out of scope. - Stakeholders. - Related processes. This page sets context; readers continue or stop based on relevance. **2. As-is process.** Current state: - Steps in the existing process. - Pain points being addressed. - Volumes and frequencies. For a greenfield implementation, "as-is" may be Excel spreadsheets and email; capture the reality. **3. To-be process.** The designed future state: - High-level flow narrative. - Roles and responsibilities. - Touchpoints with other processes. - Key decisions / business rules. **4. Detailed flow.** Step by step: - Each step with role, action, system entity affected. - Outcomes and exceptions per step. - Screens / forms involved. - Decision branches. A swim-lane diagram or BPMN flow visualises this; the text describes the detail. **5. Business rules.** Explicit rules: - Validation rules. - Calculation logic. - Approval thresholds. - Routing logic. Numbered rules with examples; the test team derives test cases from this. **6. Data model.** The entities involved: - Which Dataverse tables or F&O entities. - Custom columns to add. - Relationships. - Field-level requirements (mandatory, default values). The data dictionary cross-references; the FDD describes the use. **7. Security model.** Who can do what: - Roles involved. - Privileges required per role. - Record-level access rules. - Approval workflow ownership. **8. Integrations.** Cross-system touch: - Inbound — what flows in, when, format. - Outbound — what flows out, when, format. - Frequency and volume. - Failure handling. **9. Reports and outputs.** What the process produces: - Reports — KPIs and lists. - Documents — invoices, statements, contracts. - Notifications — emails, in-app alerts. **10. Edge cases and exceptions.** What goes wrong: - High-value transactions. - Cross-border / multi-currency. - Disputes and corrections. - Bulk operations. - Concurrency conflicts. Specifically called out so design doesn't ignore them. **11. Open questions / decisions pending.** What's unresolved: - Specific questions for stakeholders. - Trade-offs to discuss. Keeping these visible avoids decisions getting forgotten. **12. Decisions and rationale.** What was decided and why: - Specific choice made. - Alternatives considered. - Rationale. - Decision maker and date. This is the most-valuable-and-most-omitted section. Future maintainers benefit enormously from "why" history. **13. Test scenarios.** Test cases derived from the design: - Happy path. - Edge cases. - Failure modes. - Performance scenarios. The test team uses this directly. **14. Training implications.** Who needs to learn what: - Affected roles. - New skills required. - Training material types. **Specific gotchas to avoid.** - **Vague language.** "Should be flexible" — what does that mean operationally? Use specific, testable statements. - **Implementation details bleeding in.** "Configure column X to Y" — that's TDD territory. FDD describes what, not how. - **Missing edge cases.** Only happy path documented; production hits the edge cases on day one. - **No traceability.** Requirements don't map to design sections; can't tell what's covered. - **No version control.** FDD revised silently; team works from different versions. ## Sign-off discipline FDDs are signed off at the end of design phase: - Business stakeholders sign for design correctness. - Technical lead signs for feasibility. - Project sponsor signs for scope alignment. Sign-off doesn't mean "frozen forever" — changes happen — but changes after sign-off go through a change control process. ## FDD vs requirements Two layers: - **Business requirements document (BRD)** — what the business needs at a high level. - **FDD** — how the system fulfills those requirements. BRD comes from the business; FDD is the analyst's translation into system terms. ## Length FDDs should be as long as needed but not longer. A typical process FDD is 10–30 pages. Anything beyond 50 pages is probably bloated or scoping multiple processes. **Format and tooling.** - **Microsoft Word + SharePoint** — common; reasonable for static FDDs. - **OneNote / Loop** — better for collaborative live editing. - **Confluence** — common in development-led organisations. - **Markdown** — good for technical-leaning teams. Choose what the team uses fluently; the format matters less than the content. **Common pitfalls.** - **Documented after build.** FDD reverse-engineered from configuration; lacks decision history. - **Boilerplate over substance.** Lots of templated headers, little real content. - **No examples.** Abstract rules; readers can't verify their interpretation. - **Visuals missing or stale.** Diagrams that don't match the text. - **Ownership unclear.** No one updates after go-live; document rots. ## Operational rhythm Drafts during design; review cycles with stakeholders; sign-off before build; updates during build for clarifications; final version at UAT. Post-go-live, document updates triggered by significant process changes. ## Strategic positioning A good FDD is a force multiplier: it shortens build time (clear specs), reduces defects (issues found during review), supports audit (signed-off design), accelerates onboarding (new team members read FDDs to understand the system). A bad FDD is wasted effort. Invest in fewer, better FDDs over many mediocre ones; train the team in writing them; treat them as living, accountable artefacts rather than tick-box deliverables. --- # Fund accounting patterns for nonprofits on Dynamics 365 How nonprofits model funds, restrictions, and net-asset classes on Dynamics 365 — the fund-as-dimension pattern in Business Central. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits-fund-accounting Section: Industries / Nonprofit Published: 2026-09-02 Nonprofit accounting is commercial accounting with one extra axis: every pound or dollar belongs to a fund, and some funds carry donor restrictions that dictate what the money can be spent on and how it must be reported. Under US GAAP (ASC 958) that shows up as net assets with and without donor restrictions; under the UK Charities SORP as restricted, unrestricted, and endowment funds; most other jurisdictions have an equivalent. Dynamics 365 has no "nonprofit edition" of its ledgers. It has dimensions, and in Finance a specific public-sector fund model, and the design question is which to use. This guide covers both. For the wider picture see [Dynamics 365 for nonprofits](https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits). ## The fund-as-dimension pattern The universal approach is a **Fund** dimension on every posting. Business Central makes it a global or shortcut dimension; Finance makes it a financial dimension in the account structure. Every transaction — donation receipt, grant expense, payroll allocation — carries a fund value, and reports filter or group by it. That gives you an income statement by fund without difficulty. What it does not give you, by itself, is a **balance sheet by fund**. Bank accounts, receivables, and payables are posted with the fund of the transaction, but a payment from one bank account for expenses across three funds leaves the bank balance in one fund and the expenses in three. The books balance in total; they do not balance per fund. There are three responses: - **Accept it.** Many smaller nonprofits report fund balances (net assets by fund) from the income statement roll-forward and do not attempt a balance sheet per fund. Auditors generally accept this if net assets by restriction are correct. - **Enforce balancing.** Finance supports a **balancing financial dimension** in the ledger setup: the system generates interfund due-to and due-from entries automatically so that every fund balances on its own. This is the feature that makes true fund-level balance sheets possible without an ISV, and it is the reason larger nonprofits end up on Finance rather than BC. - **Use an ISV in Business Central.** BC has no balancing-dimension feature. Nonprofit ISV apps on AppSource add interfund balancing, fund-level statements, and restriction handling. They vary in depth; ask specifically how the interfund entries are generated and reversed. ## The public-sector fund model in Finance Beyond dimensions, Finance's public-sector configuration adds **funds** as a first-class ledger concept with fund types and classes, fund-level budget control, and derived financial hierarchies that roll funds into reporting groups. It was built for government but the mechanics — restricted funds, budget enforcement per fund, encumbrance — fit larger nonprofits well, especially those with government grants that impose budget control. The [public sector features](https://www.solvingdynamics365.com/guides/dynamics-365-public-sector-features) guide covers what turning it on changes. It is heavier to configure than dimensions alone and only worth it if fund-level budget control or encumbrance is a requirement, not a nice-to-have. ## Restrictions and releases Restricted funds are spent on their purpose and then "released" to unrestricted — the accounting entry that moves net assets between restriction classes as the restriction is satisfied. In both products this is a journal, either manual at period end or generated by a report that identifies restricted expenses in the period. There is no first-party automation of releases; nonprofits build a recurring journal template or a Power Automate flow over a query, and larger ones get it from the ISV. Set up a **Restriction** dimension (or fold restriction class into the fund dimension's hierarchy) so the release entry can be produced from a query rather than a spreadsheet. ## Allocations Shared costs — rent, IT, the finance team — must be allocated across funds and programmes, and funders often dictate the basis. Business Central has cost allocation through recurring journals with allocation keys and, more formally, cost accounting allocations. Finance has ledger allocation rules with basis on fixed percentages, spread, or another dimension's balances; the [allocations](https://www.solvingdynamics365.com/guides/allocations-and-allocation-rules-in-f-and-o) guide covers them. Either way, define the allocation basis once per cost pool, run it monthly, and keep the basis documentation with the close, because it is the first thing a grant auditor asks for. ## Interfund transactions Loans and transfers between funds need to be visible and reversible. Use dedicated interfund transfer accounts, post transfers as two-sided journals with both fund values, and reconcile the interfund accounts to zero in total each month. With Finance's balancing dimension the due-to and due-from entries are automatic; without it, they are a control that someone owns. ## Budgets by fund Funders approve budgets by fund and category, and overspend against a restricted fund is a compliance breach, not a variance. Business Central budgets carry dimensions, so a budget per fund per account is straightforward, and budget-versus-actual reports by fund come from financial reports with a fund filter. Finance's budget control can block or warn on postings that exceed a fund's budget, which is the enforcement funders sometimes require; the [budget control](https://www.solvingdynamics365.com/guides/budget-control-in-f-and-o) guide covers the setup. Grant-level budgets and drawdowns are a separate concern, covered in [grant tracking](https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits-grant-tracking). ## Reporting Statement of activities by fund and by restriction class, statement of financial position with net assets by class, and per-fund or per-grant statements for funders. Business Central's financial reports (formerly account schedules) with column layouts by dimension handle all three for a modest number of funds; beyond a few dozen funds the reports get unwieldy and Power BI over the GL entries with the dimension set is the better tool. Finance's financial reporting handles fund and hierarchy roll-ups natively. Neither product produces the statutory nonprofit formats — the SORP statement of financial activities, the US Form 990 schedules — out of the box; those are mapped in the reporting layer or through a partner. ## Deciding A nonprofit with a handful of funds, straightforward restrictions, and no funder-mandated budget control should run Business Central with a fund dimension, a restriction dimension, and disciplined releases, adding an ISV only if the auditor demands balanced funds. A nonprofit with many restricted funds, government grants with budget control, or a requirement for true fund balance sheets should look at Finance with the balancing dimension or the public-sector configuration. The dimension design, either way, is the decision that cannot be changed cheaply later; the [BC dimensions design](https://www.solvingdynamics365.com/guides/business-central-dimensions-design) and [financial dimensions](https://www.solvingdynamics365.com/guides/financial-dimensions-in-dynamics-365-finance) guides are worth reading before the chart of accounts is touched. --- # General journal entry workflow in Dynamics 365 Finance How a general journal is captured, validated, approved, and posted in F&O — daily journals, voucher numbers, line types, financial dimensions. Source: https://www.solvingdynamics365.com/guides/general-journal-entry-workflow-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 Posting a journal entry is the bread-and-butter of finance work in F&O. The workflow has more validation, approval, and audit-trail steps than it appears at first glance — understanding them is the difference between a clean monthly close and a queue of stuck postings. **General journal architecture.** - **Journal name** — a template defining defaults (voucher series, posting layer, currency, approval workflow, default account/offset). Examples: `GenJrn` for general; `Adjmt` for adjustments; `Accruals` for accruals. - **Journal** — an instance of a journal name; one journal per day or per close step typically. - **Journal lines** — the actual debit/credit entries. ## Creating a journal From `General ledger → Journal entries → General journals`: 1. Click `New`, pick a journal name. 2. The system generates a **journal number** (sequence per journal name). 3. Enter lines. ## Line structure Each line has: - **Date** — posting date. - **Voucher** — the voucher number; multiple lines can share a voucher if they balance. - **Account type and Account number** — Ledger, Customer, Vendor, Bank, Fixed Asset, Project. - **Debit / Credit** amounts. - **Offset account type and number** — the contra side. - **Description** — narrative. - **Financial dimensions** — department, cost centre, project, etc. - **Currency / Exchange rate** — for foreign currency entries. - **Tax group / Tax code** — when tax applies. ## Account types F&O extends the basic G/L model to allow account types beyond Ledger: - **Ledger** — direct G/L posting. - **Customer / Vendor** — posts via the AR/AP subledger; creates a vendor or customer ledger entry. - **Bank** — creates a bank ledger entry. - **Fixed Asset** — creates a fixed-asset transaction. - **Project** — posts to project actuals. Multi-type single-voucher entries are common: a vendor invoice journal has Vendor and Ledger lines; a fixed asset acquisition has Fixed Asset, Vendor, and Ledger lines. ## Voucher and balance The voucher is the grouping unit: - All lines with the same voucher must net to zero (debits = credits). - The voucher series is configured per journal name. - One journal can contain multiple vouchers. Posting validates the balance per voucher before committing. ## Validation chain Before posting: 1. **Field validation** — required fields, valid values, date in open period. 2. **Account validation** — account exists, not blocked, dimension combinations allowed. 3. **Tax validation** — taxes computed and balanced. 4. **Voucher balance check** — debits = credits per voucher. 5. **Period status** — period must be open or sub-ledger-open. 6. **Approval status** — approved if workflow required. Any error stops the post; the journal returns to draft. ## Approval workflows Many companies route journals through approval before posting: - **Conditional workflows** — only journals above threshold or in certain categories require approval. - **Approval levels** — single approver, multi-step, or parallel. - **Delegation** — when an approver is out of office. Approval workflow is configured in the journal name; per-instance overrides are not allowed. ## Posting restrictions Various controls limit who can post what: - **User group on journal name** — only certain user groups can use the journal. - **Posting layer** — Current, Operations, Tax — restricts which layer the journal posts to. - **Single voucher number per posting** — prevents one journal from posting multiple vouchers (forces structural cleanliness). ## Recurring journals A common need: posting the same accrual or allocation every month. **Recurring journal lines** save the template; per period, create a journal from the template, adjust amounts, post. ## Reversing entries For accruals, the **reverse entry** flag posts a reversing journal in the next period automatically. Avoids manual reversal of the prior month's accrual. ## Approval audit trail Every approval action is logged: - Who submitted. - Who approved (or rejected). - Comments. - Timestamps. Auditors look for evidence of approval before posting; the audit trail is the evidence. **Common pitfalls.** - **Wrong journal name selected.** Different journal names have different defaults, dimensions, approval workflows; using the wrong one bypasses controls. - **Unbalanced voucher.** Posting fails; user gets a cryptic error; the cause is usually one line missing its offset. - **Dimension combinations invalid.** F&O's account structure rules can disallow certain account+dimension combinations; posting fails until corrected. - **Posted into closed period.** Auto-routing to next open period or rejection per setup. - **Posted to wrong posting layer.** Tax adjustments to Current layer rather than Tax; reporting mismatches. ## Posted vs draft A journal exists in three states: - **Open** — being edited. - **Posted** — committed; voucher numbers are now permanent. - **Rejected / not approved** — workflow returned for changes. Once posted, a journal can't be edited; corrections require a reversing journal. ## Operational rhythm Daily journals for routine activity (cash transfers, accruals); monthly journals for period-end adjustments; quarterly journals for tax reconciliations. A well-designed journal name taxonomy makes this rhythm sustainable; ad-hoc journal posting in a single "General" journal name makes audit trails painful. --- # Goal management in Dynamics 365 Sales How goals work in Dynamics 365 Sales — goal metrics, parent-child rollups, calculation, and the role in performance management. Source: https://www.solvingdynamics365.com/guides/goal-management-in-dynamics-365-sales Section: Customer Engagement / Sales Published: 2026-05-01 **Goal management** in Dynamics 365 Sales is the structured way to track sales performance against targets. It is more flexible than informal spreadsheets and more transparent than ad-hoc dashboards. Configured well, it gives sellers, managers, and executives a single shared view of how the team is tracking against expectations. ## Anatomy of a goal A **goal** record carries: - **Goal Owner** — who's responsible (seller, manager, or team). - **Target Period** — start and end dates. - **Goal Metric** — what's being measured (defined separately, reusable). - **Target (In-Progress)** — the figure being pursued (e.g. 1,000,000 EUR revenue this quarter). - **Actual (calculated)** — the rolled-up actual from related records. - **Percentage Achieved** — actual / target. - **Parent Goal** — for hierarchy roll-ups. ## Goal metrics A **goal metric** defines *what* is being measured: how to count "actual" against the goal. Metrics have: - **Source records** — Opportunities, Orders, Invoices, Sales Activities, or Custom entities. - **Filter criteria** — only count Won opportunities, only count opportunities created this period, only count opportunities with a specific product. - **Aggregation** — sum of revenue, count of records, sum of unit count. - **Roll-up** — daily, weekly, monthly. Multiple goals can share one metric — "Revenue from Won Opportunities" applies to every seller's individual goal and to managers' aggregated goals. ## Parent-child goals Goals form a **hierarchy** matching the sales organisation. The seller has a quarterly revenue goal of 100k EUR. The seller's manager has a goal of 1M EUR aggregating their team. The regional director has a goal aggregating multiple managers. Actuals roll up automatically; child goal achievement contributes to parent goal achievement. ## Rollup calculation Goals recalculate periodically — typically daily — pulling actuals from the source records and updating the percentage achieved. The calculation respects the filter criteria, so changes in the source records (a deal slips to next quarter, an opportunity is reclassified) reflect in the goal's actual. ## Manual updates Some metrics aren't auto-calculable from source records (e.g. a goal to "complete 10 customer training sessions"). For these, the goal owner manually updates the actual. ## Multiple periods A seller can have parallel goals for different periods — monthly, quarterly, annual — each tracking independently with its own targets and actuals. ## Reporting Goals feed into: - **Goal dashboards** — visual tracking of progress per goal, per team, per region. - **Forecasting** — goal targets inform forecast manager-adjustments and pipeline coverage analysis. - **Power BI** — for management dashboards aggregating goals with other metrics. ## Different from forecasts Goals and forecasts are related but distinct: - **Goal** — the *target* (what should be achieved). - **Forecast** — the *expected outcome* based on current pipeline (what's likely to be achieved). Both compare against actuals (what's been achieved). Goal vs forecast vs actual is the standard sales-management triangulation. **Configuration discipline.** - **Start with the metrics**, not the goals. Define 5–8 reusable metrics for the team's key KPIs. - **Hierarchy mirrors org chart** — the goal hierarchy should match the manager hierarchy for clean roll-ups. - **Set goals once per period**, not continuously. Mid-period changes confuse the data. - **Review weekly** — not just at quarter-end. The point of goals is to course-correct. ## Limits Very complex incentive compensation logic doesn't belong in goals; use a specialist commission tool. Goals are for tracking and visibility; commission engines are for calculating payouts. --- # Grant tracking for nonprofits on Dynamics 365 How nonprofits track grants received on Dynamics 365 — the award lifecycle, grant-as-project for budget and spend, staff time allocation. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits-grant-tracking Section: Industries / Nonprofit Published: 2026-09-02 A grant is a restricted fund with a contract attached. It has a funder, an award period, a budget by category, allowable and unallowable costs, reporting deadlines, and often a reimbursement mechanism where the nonprofit spends first and claims later. Tracking it means answering, at any moment, how much has been spent against each budget line, how much has been claimed, what is due to the funder and when, and whose time has been charged to it. Dynamics 365 has no grants module for nonprofits; it has projects, funds, and Dataverse, and the working pattern assembles them. This guide sets it out. The [fund accounting](https://www.solvingdynamics365.com/guides/dynamics-365-for-nonprofits-fund-accounting) guide covers the ledger side that this builds on. ## Two halves: relationship and money Grant tracking splits naturally between the CRM side — the funder relationship, the application pipeline, the award and its reporting obligations — and the ledger side — budget, spend, and claims. Keep them distinct and link them by grant identifier. On the CRM side, the funder is an account, the programme officer a contact, and each application an opportunity or a custom application record moving through a business process flow: identified, letter of intent, submitted, awarded or declined. The award itself is a record with the award period, total, reporting schedule, and conditions. Reporting deadlines become activities or a journey that reminds the grant manager. This is a small model to build and pays for itself the first time a report is not missed. On the ledger side, the award becomes a project and a fund. ## Grant as project In both **Business Central** and **Finance**, the project (job) is the natural container for a grant's budget and spend: - **Project per grant**, with the grant identifier in the project number, linked to the fund dimension and the programme dimension. - **Project tasks or categories per budget line** — personnel, travel, equipment, subawards, indirect — matching the funder's approved budget so that budget-versus-actual reads in the funder's language. - **Project budget** loaded from the award, by task and period where the funder budgets by year. - **Every cost posted to the project**: purchase invoices coded to the project task, expense claims, and — the important one — staff time. Finance's public-sector configuration adds a **grant** entity that links to projects and funds and carries the funder, CFDA or equivalent programme reference, and billing terms. It is designed for government grantees and works well for nonprofits with large federal or state awards; the [public sector features](https://www.solvingdynamics365.com/guides/dynamics-365-public-sector-features) guide covers it. Nonprofits without that scale get the same result from a plain project with a fund dimension. ## Staff time across grants Personnel is usually the largest budget line, and funders expect it to be supported by time records, not by a fixed allocation set at the start of the year. That means timesheets against projects. Business Central time sheets and Finance's project timesheets both post hours to the project at the employee's cost rate, producing the personnel cost per grant that a claim is built on. What neither product provides is **effort certification** — the periodic signed confirmation that reported effort is accurate, required under US federal Uniform Guidance and by some other funders. It is handled with a Power Automate approval over the period's timesheet totals, an ISV, or paper. Decide which before the first federal award, not at the first audit. Payroll cost itself arrives from the payroll system as a journal; allocating it to projects by the timesheet percentages is either a payroll-system feature, a Finance allocation rule, or a monthly journal. The allocation basis must be the actual time, and the documentation must survive an audit. ## Indirect costs Most funders allow an indirect cost recovery — a negotiated rate applied to direct costs, or a de minimis percentage. Model it as a project task for indirect, with the charge calculated monthly from direct spend by an allocation rule or a recurring journal. Finance's public-sector grant setup can hold the rate; elsewhere it is a parameter the finance team applies. Track recovered indirect against the ceiling in the award, because exceeding it is a disallowance. ## Claims, drawdowns, and revenue Reimbursement grants are invoiced to the funder after the spend. The project's unbilled cost by category is the claim; the project invoice — sales invoice from the project in BC, project invoice proposal in Finance — is the document; the funder is the customer. Advance-funded grants are the reverse: cash received up front as deferred revenue, released as spend occurs. Both patterns are standard project accounting; the discipline is running the claim on the funder's cycle and reconciling claimed-to-date against the award total. Revenue recognition for grants follows the restriction: conditional grants are recognised as conditions are met, unconditional ones when awarded. In practice most nonprofits recognise reimbursement grants as costs are incurred, which the project's revenue-with-cost treatment supports. Agree the policy with the auditor and configure the project's posting accordingly. ## Funder reporting Each funder wants a financial report in its own format — budget, spend to date, this period, remaining — sometimes by year of a multi-year award. The project's budget-versus-actual by task is the source; the format is a financial report in BC, a Power BI paginated report, or Excel over the project data. Build one template per major funder rather than one per grant. Narrative reports are documents; store them against the award record in the CRM with the submission date. ## Grants made, briefly Foundations and intermediaries that *make* grants have the opposite process: applications in, review and scoring, award, disbursement schedule, grantee reporting. That is a Dataverse application with Power Pages for the grantee portal and Power Automate for the review workflow, or a grant-management ISV. The finance side is payables with a project or fund per grant. It is a different product from what this guide covers, although organisations that both receive and make grants often want the same constituent records underneath. ## Where it breaks Grant tracking fails when spend is coded to the fund but not the project, when time is not recorded against projects, or when the claim is built in a spreadsheet from the ledger export because the project setup was too coarse. Set the projects up in the funder's budget structure, make the project code mandatory on every cost, and the claim and the report become queries rather than reconstruction. --- # GraphQL and Dynamics 365 How GraphQL fits with Dynamics 365 — wrapping OData as GraphQL, third-party tooling, where GraphQL helps vs hurts, and the operational considerations. Source: https://www.solvingdynamics365.com/guides/graphql-and-dynamics-365 Section: Integrations / API & identity Published: 2026-05-01 Dynamics 365 exposes data primarily through OData REST APIs. GraphQL has become popular in the broader API world for its query flexibility and developer ergonomics — letting clients request exactly what they need in one round-trip. There's no native GraphQL endpoint for Dynamics 365, but the gap is filled by community tools, custom wrappers, and emerging Microsoft signals. Understanding the trade-offs helps developers decide whether to invest. **The OData vs GraphQL difference.** - **OData** — REST-based, query string expressed via `$select`, `$expand`, `$filter`. Server defines resource structure; client requests subsets. - **GraphQL** — Query language, request specifies exactly which fields and which related data. One query, one response. OData has rich query semantics; GraphQL has flexible response shaping. Both serve similar needs differently. **Why teams want GraphQL on Dynamics 365.** - **Single-call queries** — fetch customer + their open orders + their contact details in one request instead of multiple OData calls. - **Frontend developer experience** — front-end teams familiar with GraphQL prefer it. - **Reduced over-fetching** — request only the fields needed. - **Tooling** — Apollo Client, Relay, Hasura, etc., provide development conveniences. ## Why native GraphQL doesn't exist (yet) Microsoft has chosen OData as the canonical surface. Reasons: - Existing investment. - OData's query expressiveness covers most needs. - Standardisation work in OASIS. GraphQL support is being discussed but as of 2026 isn't native. ## Wrapping OData as GraphQL Common patterns: - **Custom GraphQL server** — Node.js, .NET, or Python service implementing GraphQL endpoints that translate to OData calls underneath. - **Hasura, Apollo Federation** — multi-source GraphQL with Dataverse as one source. - **Azure API Management policies** — transform GraphQL to OData server-side. - **Schema-first generation** — generate GraphQL schema from Dataverse metadata. Each adds an integration layer; each has its own maintenance burden. ## Schema generation Generating a GraphQL schema from Dataverse: - Tables become object types. - Columns become fields. - Relationships become edges. - Choice columns become enums. Tools (community-built) automate this. The generated schema is large for a typical Dynamics 365 environment; consider pruning to relevant entities. ## Authentication GraphQL endpoint authentication options: - **Pass-through** — caller's OAuth token forwarded to Dataverse; Dataverse enforces its own auth. - **Service principal** — wrapper authenticates as service principal; user identity carried separately. Pass-through is cleaner — Dataverse's security model applies directly. **Performance considerations.** - **N+1 query problem** — GraphQL response with many related items can fan out to many OData calls. DataLoader pattern batches. - **Caching** — GraphQL responses harder to cache than REST. - **Query complexity limits** — protect against malicious or accidental expensive queries. A GraphQL wrapper can be slower than well-designed OData calls. The win is developer ergonomics, not raw performance. ## Mutations Mutating Dataverse via GraphQL: - **Create / Update / Delete** map to OData equivalents. - Validation flows through Dataverse's plug-in and business rules. - Transactional semantics depend on wrapper implementation. For complex multi-record mutations, multiple OData calls behind the GraphQL mutation; failure handling more complex. ## Subscriptions GraphQL subscriptions for real-time updates: - WebSocket-based. - Map to Dataverse change notifications (webhooks, Service Bus). - Requires server-side state management. Not many production Dynamics 365 + GraphQL deployments leverage subscriptions; complexity high. **When GraphQL on Dynamics 365 makes sense.** - **Front-end team strongly prefers GraphQL** for developer productivity. - **Multiple data sources** (Dataverse + other systems) federated. - **Mobile or low-bandwidth clients** benefiting from precise field selection. - **Sufficient engineering capacity** to maintain a wrapper. **When it doesn't make sense.** - **Simple use cases** — Power Apps or Power Pages with direct Dataverse access. - **Performance-critical paths** — direct OData is faster. - **Small teams** — wrapper maintenance is unjustified overhead. - **No GraphQL expertise** — adopting GraphQL primarily for fashion sake adds risk. **Operational considerations.** - **Wrapper service** — needs deployment, monitoring, scaling. - **Schema versioning** — schema changes can break clients; manage carefully. - **Documentation** — schema is the contract; keep it documented. - **Error handling** — GraphQL errors differ from REST status codes. ## Microsoft's direction Microsoft has gradually warmed to GraphQL across products. Dataverse may eventually offer native GraphQL; tracking the roadmap is wise. Until then, customer-managed wrappers fill the gap. **Common pitfalls.** - **Over-fetching despite GraphQL.** Lazy schema design pulls all fields; doesn't reduce data. - **No query depth limits.** Malicious query traverses deep relationships; performance dies. - **Schema gets out of sync.** Schema generated once, Dataverse evolves, schema stale. - **Authentication confusion.** Multiple identity layers; debugging hard. - **Resilience missing.** GraphQL endpoint becomes a bottleneck without retry / circuit-breaker patterns. ## Strategic positioning GraphQL on Dynamics 365 is a deliberate engineering choice, not a default. For teams with strong front-end GraphQL preference and capacity to maintain the wrapper, it can improve developer experience. For most Dynamics 365 implementations, OData is sufficient — the engineering effort to add GraphQL doesn't pay back. As Microsoft's API strategy evolves and native GraphQL potentially emerges, the calculus may shift; until then, choose carefully and only when there's clear value. --- # Growing from Business Central to Finance and SCM When and how to move from Business Central up to Dynamics 365 Finance and Supply Chain Management — signals, scope, and the migration path. Source: https://www.solvingdynamics365.com/guides/growing-from-business-central-to-finance-and-scm Section: Migrations Published: 2026-05-01 For most SMB customers, Business Central is the long-term home — they grow into it, customise it, and stay there. But a meaningful minority outgrow BC and need to step up to **Dynamics 365 Finance and Supply Chain Management** (F&SCM, the F&O apps). Recognising the right moment, planning the transition properly, and avoiding doing it prematurely all matter. **Signals that you're outgrowing BC.** - **Legal-entity count.** BC handles five to twenty legal entities comfortably; thirty becomes friction; fifty is painful. F&SCM handles hundreds. - **User count.** Over 200–300 named users in a single tenant, BC starts to feel constrained even though Microsoft supports more on paper. F&SCM is built for thousands of users. - **Statutory reporting complexity.** When you operate in 10+ countries with complex local requirements, BC's localization-by-localization model gets hard. F&SCM has broader country coverage built-in and an Electronic Reporting engine for the gaps. - **Operational complexity.** Multi-mode manufacturing (discrete + process + lean in one company), advanced warehouse with high-volume automation, sophisticated demand sensing, multi-country transportation management — these are what F&SCM has and BC doesn't. - **Consolidations.** BC handles consolidation of a small group; for 30+ subsidiaries with intercompany complexity, F&SCM is better suited. - **Volume.** BC scales to many gigabytes; F&SCM scales to multi-terabyte transactional databases. ## Signals that you're not Don't move up because: - You've heard F&SCM is "the proper ERP". Both are real ERPs; the right choice depends on fit. - A consultant is recommending it without specific evidence of BC limits you're hitting. - You want flexibility "in case". F&SCM's complexity and cost don't justify hypothetical future needs. ## The migration path A BC → F&SCM move is a full re-implementation, not a data migration. The two products share concepts but very different schemas, processes, and customisation models. - **Data.** Master data (chart of accounts, customers, vendors, items) migrates with substantial mapping; transactions typically migrate as opening balances only. - **Customisations.** BC's AL extensions don't run on F&SCM. X++ rebuilds are required. Power Platform-based customisations (flows, apps) port more cleanly because they sit above the application. - **Integration.** Most integrations rebuild because the APIs and connectors differ. - **Time and cost.** Multi-month to multi-year project. Plan for re-running implementation, including business process design, training, and substantial change management. ## The cultural shift F&SCM operates differently from BC. Service Updates every six weeks (not twice a year), LCS for lifecycle management, role-based security with SoD, X++ for in-platform code — these are all real differences in how teams work. ## The middle option Some customers stay on BC and run F&SCM-style modules through ISV add-ons or sister-product subscriptions (e.g. Dynamics 365 Sales for CRM-side scale alongside BC for ERP). This keeps a foot in both. ## Decide deliberately A premature move from BC to F&SCM is one of the most expensive mistakes a growing business can make. A delayed move is a missed opportunity for scale. The honest signal of "we're hitting BC's limits in *this specific way*" is what should drive the decision. ## Where to go next The comparison that frames the decision is [Business Central vs Finance and Operations](https://www.solvingdynamics365.com/guides/business-central-vs-finance-and-operations); the destination is described in [what is Dynamics 365 Finance](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-finance) and [what is Supply Chain Management](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-supply-chain). The operating model you are moving into is [One Version and updates](https://www.solvingdynamics365.com/guides/dynamics-365-one-version-and-updates), and the cost is on the [Finance and Operations pricing page](https://www.solvingdynamics365.com/pricing/finance-and-operations). ### Frequently asked questions **What signals that a company has outgrown Business Central?** Thirty or more legal entities, more than 200–300 named users in one tenant, statutory complexity across 10+ countries, multi-mode manufacturing or high-volume warehouse automation, complex consolidations of 30+ subsidiaries, or multi-terabyte transaction volumes. **Is moving to Finance and Supply Chain a data migration?** No — it is a full re-implementation. Master data migrates with substantial mapping, transactions usually go as opening balances only, AL extensions do not run on F&SCM and need X++ rebuilds, and most integrations are rebuilt. Power Platform customisations port more cleanly. **What changes culturally?** Service updates roughly every six weeks instead of two waves a year, Lifecycle Services for environment management, role-based security with segregation of duties, and X++ for in-platform code. **Is there a middle option?** Yes: stay on Business Central and add ISV modules or sister products such as Dynamics 365 Sales for CRM-side scale. A premature move up is one of the most expensive mistakes a growing business can make. --- # GxP validation of Dynamics 365 Finance and Supply Chain for life sciences How to validate Dynamics 365 Finance and Supply Chain Management in a GxP environment — what FDA 21 CFR Part 11 actually asks of the system. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-life-sciences-gxp-validation Section: Industries / Healthcare & life sciences Published: 2026-09-02 A pharmaceutical, medical-device, or biotech company running Dynamics 365 Finance and Supply Chain Management for batch manufacturing, quality, or distribution is running a GxP system, and regulators expect it to be validated: documented evidence that it does what it is supposed to do, with controls over who can change what. Microsoft does not deliver a validated system; it delivers a platform with the controls needed to build one. The shape of the work is different from validating an on-premises ERP a decade ago, because the platform changes every month. This guide covers what the product provides, what the customer has to do, and the approach that makes continuous updates survivable. For the industry context see [Dynamics 365 for healthcare](https://www.solvingdynamics365.com/guides/dynamics-365-for-healthcare). ## What Part 11 actually demands FDA 21 CFR Part 11 and the equivalent EU Annex 11 are shorter than their reputation. Applied to an ERP they require: secure, computer-generated, time-stamped audit trails for creation, modification, and deletion of GxP records; system access limited to authorised individuals; electronic signatures that are unique, verifiable, and bound to the record with the signer's name, date, and meaning; and validation of the system for its intended use. Everything else is procedure — training, SOPs, change control — that the company owns regardless of the software. ## What is in the product **Electronic signatures.** Finance and Supply Chain Management has a first-party electronic signature feature: specific tables and fields can be configured to require a signature on change, with reason codes, a re-authentication prompt, and a signature log. It ships with a set of signable operations — quality orders, batch attributes, BOM approvals, and others — and can be extended to custom fields. This is the Part 11 signature mechanism, and it is adequate for most use cases without an ISV. **Audit trail.** The **database log** records inserts, updates, and deletes on selected tables and fields with user and timestamp. It must be enabled per table deliberately — turning it on for everything cripples performance — so part of validation is deciding which records are GxP records and logging exactly those. Configuration changes are separately tracked through the feature-management and configuration-history mechanisms, and Lifecycle Services or the Power Platform admin centre records environment operations. **Security.** Role-based security with duties and privileges, segregation-of-duties rules that flag conflicting role assignments, and Entra ID for identity, multi-factor authentication, and conditional access. Access reviews are an Entra feature that GxP auditors increasingly expect. **Quality and traceability.** Quality orders, nonconformance, batch and serial tracking with expiry and shelf-life, batch attributes, and item tracing that answers "where did this batch go" for a recall. The [quality management](https://www.solvingdynamics365.com/guides/quality-management-in-f-and-o) and [tracking dimensions](https://www.solvingdynamics365.com/guides/tracking-dimensions-in-f-and-o) guides cover the mechanics. **Platform assurance.** Microsoft publishes SOC and ISO reports, a Part 11 position, and infrastructure qualification evidence through the Service Trust Portal. That is the vendor-side documentation a supplier assessment draws on. It does not qualify the customer's configuration. ## What is not in the product Electronic batch records with step-by-step execution and signatures at each step are MES territory, not ERP, and Supply Chain Management integrates to an MES rather than replacing one — the [shop floor control](https://www.solvingdynamics365.com/guides/dynamics-365-for-manufacturing-shop-floor-control) guide covers the boundary. Serialisation and aggregation for DSCSA in the US or the EU Falsified Medicines Directive need a serialisation platform; there are established ISVs. Laboratory information management is LIMS, integrated to quality orders. Deviation, CAPA, and document management usually live in a QMS, though some companies run CAPA as cases in Dynamics 365 Customer Service. **Business Central** has none of the electronic signature or database-log features natively. Life-sciences companies on BC rely on ISVs for signatures and audit trails; several exist, and their validation posture should be assessed as carefully as BC's own. ## Validating a system that updates monthly The One Version model means Finance and Supply Chain Management receives service updates on a fixed cadence, with a limited ability to pause and no ability to stay on an old version indefinitely. A validation approach built on requalifying the whole system after every update is not sustainable. The approach that regulators have accepted and that works in practice: - **Risk-based validation** in the spirit of GAMP 5 second edition and FDA's computer software assurance guidance: classify functions by GxP impact, and focus scripted testing on high-impact ones. Standard, unconfigured functionality gets less testing than customisations. - **A validated core with a defined update procedure.** The initial validation covers installation qualification (environment and configuration, largely Microsoft's evidence plus the customer's configuration record), operational qualification (the configured processes), and performance qualification (in the business context). Each service update then goes through impact assessment against Microsoft's release notes, regression testing of the high-impact scenarios, and a signed update record. - **Automated regression.** The Regression Suite Automation Tool records business processes from Task Recorder and replays them; the [Lifecycle Services](https://www.solvingdynamics365.com/guides/dynamics-365-lifecycle-services-explained) guide describes it. A library of RSAT scripts for the GxP-critical processes turns each monthly update into a repeatable, evidenced test run instead of a manual re-execution. - **Configuration and customisation control.** Every X++ extension and every configuration change in production goes through change control, with the database log and the release pipeline as the evidence. Partners sell validation accelerators — pre-written requirement specifications, test scripts, and traceability matrices for the standard modules. They shorten the first validation noticeably and are worth buying if they match the implementation's scope; they still need adapting, and the update procedure remains the customer's. ## The organisational part Validation fails in life-sciences ERP projects for organisational reasons more than technical ones: quality assurance is engaged after configuration is finished, the partner's methodology has no place for a validation plan, or the business treats service updates as IT's problem. Put quality assurance on the steering committee, include the validation plan and traceability matrix in the statement of work, and staff a permanent role that owns the update assessment. The technology is ready; the process has to be. --- # Hierarchical security in Dataverse How hierarchical security extends row-level access in Dataverse — manager and position hierarchies, the depth parameter. Source: https://www.solvingdynamics365.com/guides/hierarchical-security-in-dataverse Section: Customer Engagement / Dataverse platform Published: 2026-07-02 The standard Dataverse security model — security roles with table privileges scoped by business unit — covers most scenarios. But it doesn't naturally handle "managers should see their reports' records, recursively". **Hierarchical security** adds that capability through two hierarchy types — **manager hierarchy** and **position hierarchy** — that grant additional access along the chain of command. ## Manager hierarchy security Based on the **manager** lookup on the user record: - User A's manager is User B; User B's manager is User C. - With manager hierarchy security enabled: - User B (the manager) gets access to records owned by User A (their direct report). - User C (the manager of the manager) gets access to records owned by User A and User B. - Depth parameter controls how deep — depth 1 means direct reports only; depth 2 means reports and their reports; depth N means N levels. ## Position hierarchy security Similar but based on **organisational positions** instead of personal manager relationships: - The organisation has a hierarchy of positions: CEO → COO → Regional Director → Country Manager → Account Manager. - Each position is associated with users (one or many). - Users in higher positions get access to records owned by users in lower positions, by position lineage. Position hierarchy is more stable than manager hierarchy — when a manager changes, position relationships often stay the same. Used in matrix organisations where personal manager isn't the operational hierarchy. ## Depth and table configuration Hierarchical security is configured: - **Enable hierarchy security** at the environment level. - **Choose hierarchy type** — Manager or Position (a tenant uses one or the other, not both). - **Per-table opt-in** — each table can be marked as hierarchy-enabled or not. Sensitive tables can be excluded. - **Depth parameter** — maximum levels of hierarchy that confer access. **Use cases.** - **Sales management** — district sales managers see their team's opportunities; regional managers see all districts in the region; national VP sees all regions. - **Customer service supervisors** — see cases owned by agents reporting to them. - **Project portfolio review** — directors see projects owned by their portfolio's project managers. - **HR escalation** — HR business partners see records related to employees in their reporting structure. ## Combining with business unit security Hierarchical security adds to (not replaces) business unit security. A user might: - Have business-unit-scoped read access to all records in their BU. - Plus hierarchical access to records owned by their reports in any BU. Both layer; the user's effective access is the union. **Manager vs Position — choosing.** - **Manager** — simpler to configure (manager lookup already populated on users); reflects the live reporting relationship. - **Position** — more stable across re-orgs (positions persist while people change); supports matrix organisations. Most enterprises use one or the other; Microsoft requires the choice. **Depth considerations.** - **Depth 1** — direct reports only. The most restrictive option that still provides manager visibility. - **Depth 2 or 3** — practical for most organisations; visibility through a few levels. - **Depth unlimited** — the entire downstream tree. Powerful but produces very large access sets for senior people; performance impact. Higher depths produce slower queries — the platform must traverse the hierarchy on every access check. ## Performance Hierarchical security adds overhead — every record access checks the hierarchy. Optimisations: - Limit hierarchical-enabled tables to those that truly need it. - Choose moderate depth (1–3). - Combine with business unit security for coarse filtering before hierarchy applies. For very large enterprises (tens of thousands of users, complex hierarchies), hierarchical security can introduce noticeable latency. Test and tune. ## Manager hierarchy data maintenance The mechanism only works if the manager / position data is current. Common failures: - **Manager not set** on a user record — no one above them sees their records. - **Stale manager** — old reporting line; the wrong manager sees the records. - **Departing manager** — records become inaccessible until the new manager is configured. HR / IT integration should keep manager / position data current — automated synchronisation from HRIS systems is the standard pattern. **Limits.** - **One hierarchy type per environment** — can't use both Manager and Position simultaneously. - **Per-record overrides** are not supported through hierarchy — must use record sharing for exceptions. - **Some operations** still require explicit ownership transfer rather than hierarchy access (some workflow triggers, assignment). - **Hierarchical security applies to read and update privileges only** — delete, create, append still controlled by security role. **Common pitfalls.** - **Over-permissive depth** — senior executives can see everyone's records, slowing their queries and producing irrelevant lists. - **Stale hierarchy data** — security gaps when reporting changes aren't reflected. - **Performance surprises at scale** — the overhead becomes meaningful with large user bases. ## Operational reality Hierarchical security is the right answer for "manager visibility" requirements. Configure deliberately; integrate hierarchy data with HRIS; audit periodically; tune depth based on actual needs. --- # HIPAA-aware Customer Service configuration on Dynamics 365 How to configure Dynamics 365 Customer Service for a HIPAA-regulated healthcare organisation — the business associate agreement. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-healthcare-hipaa-customer-service Section: Industries / Healthcare & life sciences Published: 2026-09-02 A patient-access centre, a payer's member-services desk, or a medical-device support line running on Dynamics 365 Customer Service handles protected health information (PHI) on every interaction. HIPAA does not certify software; it makes the covered entity responsible for administrative, physical, and technical safeguards and makes its vendors business associates. Dynamics 365 can be configured to support those safeguards well, and misconfigured to undermine them just as easily. This guide covers the decisions that matter. For the industry picture see [Dynamics 365 for healthcare](https://www.solvingdynamics365.com/guides/dynamics-365-for-healthcare). ## Start with the agreement Microsoft offers a HIPAA business associate agreement covering Dynamics 365 and the Power Platform as part of its online services terms, and the organisation's compliance team should confirm it is in place for the tenant before any PHI is loaded. The agreement covers Microsoft's obligations for the platform. It says nothing about the customer's configuration, the ISV apps installed in the environment, or the partner's access during implementation — each of those needs its own assessment, and the partner needs its own business associate agreement. ## Minimum necessary, implemented HIPAA's minimum-necessary principle maps directly onto Dataverse security: - **Security roles** scoped to what each team does. A scheduling agent does not need the clinical-notes column; a billing agent does not need the case history of complaints. Build roles from the standard Customer Service roles downward, removing table privileges, rather than upward from a blank role. - **Business units** or **hierarchy security** to separate facilities, regions, or service lines where staff should not see each other's patients. The [hierarchical security](https://www.solvingdynamics365.com/guides/hierarchical-security-in-dataverse) guide covers the options. - **Column-level security** for the PHI columns that live on otherwise broadly readable records — date of birth, member identifiers, diagnosis fields on a case. The [field-level security](https://www.solvingdynamics365.com/guides/field-level-security-in-dataverse) guide describes profiles. Keep the number of secured columns small; every one is an ongoing maintenance item. - **Record sharing** disabled or restricted where possible. Ad hoc sharing is how minimum-necessary quietly erodes. The design mistake is modelling PHI on the contact record's main form where every licensed user can see it. Put clinical or claims detail on a related table with its own privileges, and keep the contact record to identity and communication preferences. ## Audit everything that touches PHI Enable **Dataverse auditing** at the environment level, then on the tables and columns holding PHI, including read access auditing where the organisation's policy requires access logs. Set the audit-log retention to match the policy — the retention period is configurable, and the default may be shorter than a compliance team expects. Route the audit data to Microsoft Purview or a SIEM if the organisation reviews access centrally; the [Purview](https://www.solvingdynamics365.com/guides/dynamics-365-and-microsoft-purview) guide covers the connection. Audit logs that nobody reviews satisfy the letter of the rule and none of its purpose; agree who looks at them and how often. ## Channels: chat, voice, and what gets stored Omnichannel adds transcripts and recordings, which are PHI the moment a patient types a symptom or says a date of birth. - **Chat transcripts** are stored in Dataverse with the conversation. They are subject to the same security roles and retention rules as any other record; make sure the roles that can read conversations are the ones that should. - **Voice recordings and transcriptions** are stored in the environment's storage and follow its retention settings. Decide whether recording is on by default, whether agents can pause it (for card payments and sensitive disclosures), and how long recordings are kept. Consent announcements are configurable and required in many states regardless of HIPAA. - **Data masking rules** in the Customer Service admin centre mask patterns in chat messages — card numbers by default, with custom patterns available. Adding patterns for social security numbers and member identifiers is a sensible step; masking cannot catch free-text symptoms, so it is a control, not a solution. - **Pre-chat surveys** should collect the minimum needed to route, not a medical history. ## Copilot and AI features Copilot in Customer Service drafts responses, summarises cases and conversations, and answers from the knowledge base. The data it reads is governed by the user's permissions and stays within the Microsoft service boundary, which is why it can be used with PHI under the business associate agreement in a way that pasting a case into an external tool cannot. The decisions are organisational: whether summaries containing PHI should be generated and stored on the case, whether agents may use draft responses for clinical questions (usually no), and whether Copilot features are enabled per role. Enable narrowly, document the decision, and review the [Copilot across Dynamics 365](https://www.solvingdynamics365.com/guides/copilot-across-dynamics-365) guide for what each feature touches. ## Email and documents Email from Customer Service goes through Exchange Online, and the organisation's Purview sensitivity labels, encryption rules, and data-loss-prevention policies apply. Two habits: no PHI in subject lines, because subjects appear in notifications and logs; and case emails to patients limited to what a secure portal cannot deliver. Attachments on cases live in Dataverse or SharePoint depending on configuration; if SharePoint, the site's permissions must mirror the Dataverse roles or the minimum-necessary work is undone. ## Integration with the EHR Customer Service is not the clinical record. The pattern that keeps the boundary clear is the EHR as the system of record for clinical data, with Dynamics 365 receiving the minimum needed for the service task — appointment details, coverage status, a reference number — through FHIR-based integration, often via Azure Health Data Services and the Microsoft Cloud for Healthcare data model. Replicating the chart into Dataverse for convenience creates a second PHI store with a second set of controls and is the most common architectural mistake. The [Cloud for Healthcare](https://www.solvingdynamics365.com/guides/microsoft-cloud-for-healthcare) guide describes the data model and the connectors. ## Ongoing Access reviews through Entra ID at least quarterly, a documented process for terminating access the day someone leaves, a check of every new solution import for new tables holding PHI, and a breach-response run book that names who pulls the Dataverse audit logs. None of this is product configuration, and all of it is what an assessor will ask for first. --- # How Dynamics 365 apps connect The shared platform that ties Dynamics 365 together — which connections are tight, which are loose. Source: https://www.solvingdynamics365.com/guides/how-dynamics-365-apps-connect Section: Foundations / Platform overview Published: 2026-05-01 Updated: 2026-08-30 The most important thing to understand about Dynamics 365 is that it isn't really *one* application — it's a portfolio of apps wired together by a shared platform. Some of those wires are welded on; others are cables you have to run yourself. Knowing which is which is the difference between an architecture that scales and one that fights you forever. This guide walks the layers from tightest to loosest. ## Identity: the tightest connection Every Dynamics 365 app authenticates against **Microsoft Entra ID** (formerly Azure AD). One login covers Sales, Business Central, Finance, the Power Platform, and Microsoft 365 — including from Outlook, Teams, and SharePoint. Conditional access, MFA, and group-based licensing apply uniformly. This one you never build. It also quietly does more than sign-in: security roles map to Entra groups, service-to-service integrations authenticate as Entra app registrations, and guest access for external users rides the same rails. Whatever else your architecture looks like, identity is solved. ## Data: one native layer, two worlds **The CRM-side apps run natively on [Dataverse](https://www.solvingdynamics365.com/guides/what-is-microsoft-dataverse).** [Sales](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-sales), [Customer Service](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-customer-service), [Field Service](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-field-service), [Customer Insights – Journeys](https://www.solvingdynamics365.com/guides/customer-insights-journeys-explained), and the front half of [Project Operations](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-project-operations) are all model-driven apps over the same database. Install them in one environment and they share the same Account, Contact, and User tables *as rows, not copies*. A case in Customer Service links to the same account record the sales team works. Cross-app security, reporting, and automation work without any ETL, because there is no ETL — it is one database wearing several apps. **The ERP-side apps have their own databases.** [Finance and Supply Chain Management](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-finance) run on their own transactional store; [Business Central](https://www.solvingdynamics365.com/guides/what-is-business-central) has one database per company per environment. Neither runs *on* Dataverse. So a Customer in Business Central is **not** automatically the same record as an Account in Sales — if you run both, something must keep them aligned. Microsoft ships that something, but you configure, own, and monitor it: - **[Dual-write](https://www.solvingdynamics365.com/guides/dynamics-365-dual-write-integration)** synchronises Finance/SCM tables with Dataverse in near-real time, both directions, with out-of-the-box maps for customers, vendors, products, and more. It is genuinely good — and it is still an integration, with initial-sync projects, conflict rules, and error queues to manage. - **Virtual tables** surface Business Central data inside Dataverse without copying it — reads and writes pass through to BC live. Great for lookups and light scenarios; not a replication layer. - Beyond the boxed options sit the [general integration patterns](https://www.solvingdynamics365.com/guides/integration-patterns-for-dynamics-365-crm) — the same tools you'd use for any third-party system. The honest rule: **inside Dataverse, data connections are free; across the ERP line, every connection is a small project.** Budget accordingly. ## Analytics: the lake everyone drains into Reporting inside one app is built in. Reporting *across* apps converges on a shared analytical layer: **[Azure Synapse Link](https://www.solvingdynamics365.com/guides/azure-synapse-link-for-dataverse)** streams Dataverse tables to a lake, F&O exposes its data the same way, Business Central has its own APIs and lake export paths, and **[Microsoft Fabric](https://www.solvingdynamics365.com/guides/microsoft-fabric-and-dynamics-365)** is where Microsoft is pointing all of it — shortcut the sources into OneLake, model once, report with Power BI on top. Cross-app analytics is a solved pattern, but it lives in the analytics layer, not inside the apps. ## Workflow and AI: the loose, flexible layer The [Power Platform](https://www.solvingdynamics365.com/guides/dynamics-365-and-power-platform) is the connective tissue that doesn't care which side of the ERP/CRM line an app sits on. **Power Automate** flows trigger across any combination — a won opportunity in Sales creates a project in Business Central; an F&O purchase approval pings Teams. **Power Apps** builds custom front ends over any of the data. **Copilot Studio** agents read and write across the estate. These connections are quick to build, which is their strength and their governance problem — hundreds of ungoverned flows *are* an integration architecture, just an undocumented one. ## Microsoft 365: where users actually live Files attach to SharePoint and OneDrive through [built-in document management](https://www.solvingdynamics365.com/guides/sharepoint-document-management-for-dynamics-365). Outlook synchronises email and appointments into CRM. [Teams embeds records and channels](https://www.solvingdynamics365.com/guides/microsoft-teams-integration-patterns-with-dynamics-365) both ways. These integrations are configuration, not code — and they matter more than they sound, because adoption lives or dies on whether Dynamics meets people inside the tools they already use. ## What this means for your architecture Four planning rules fall out of the layer map: 1. **Co-locate the CRM apps.** Apps that share a Dataverse environment share everything. Splitting Sales and Customer Service into separate environments forfeits the platform's best feature — do it only for hard data-isolation reasons. 2. **Treat the ERP boundary as a real integration boundary.** Mixing a CRM app with a separate ERP is normal and supported, but name an owner for the sync, monitor it, and decide up front which system masters customers, products, and prices. Most "Dynamics is broken" complaints in mixed estates are actually "nobody owns dual-write." 3. **Put cross-app reporting in the analytics layer** — Synapse Link or Fabric — rather than hammering operational APIs with reporting queries. 4. **Govern the loose layer early.** Power Automate will connect anything to anything; [environment strategy](https://www.solvingdynamics365.com/guides/environment-strategy-for-dynamics-365-projects) and DLP policies decide whether that's an asset or an audit finding. The integration cost between the halves is the price of the platform's modularity. It's a fair price — the boxed connectors are better than what you'd build — but plan for it from day one, not after go-live. Next step in the path: [how to choose the right Dynamics 365 product](https://www.solvingdynamics365.com/guides/how-to-choose-the-right-dynamics-365-product). ### Frequently asked questions **Which Dynamics 365 apps share data automatically?** The CRM-side apps — Sales, Customer Service, Field Service, Customer Insights – Journeys, and the front half of Project Operations — when installed in the same Dataverse environment. They share Account, Contact, and User rows rather than copies, so cross-app reporting, security, and automation need no ETL. **Is a Business Central customer the same record as a Sales account?** No. Business Central and Finance and Operations have their own databases, so a customer there is not automatically the account in Sales. Dual-write (for F&O) or virtual tables and connectors (for Business Central) keep them aligned, and someone has to own that sync. **What is dual-write?** Microsoft's near-real-time, bidirectional synchronisation between Finance and Supply Chain tables and Dataverse, with shipped maps for customers, vendors, products, and more. It is good — and it is still an integration, with initial-sync projects, conflict rules, and error queues to manage. **Where should cross-app reporting live?** In the analytics layer — Azure Synapse Link or Microsoft Fabric with OneLake — rather than by hammering operational APIs with reporting queries. Cross-app analytics is a solved pattern, but it lives outside the apps. **Should Sales and Customer Service be in separate environments?** Only for hard data-isolation reasons. Splitting them forfeits the platform's best feature — shared rows, security, and automation — and turns every cross-app need into an integration. --- # How to choose the right Dynamics 365 product A practical framework for picking the right Dynamics 365 apps — by company size, industry, complexity, and starting point. Source: https://www.solvingdynamics365.com/guides/how-to-choose-the-right-dynamics-365-product Section: Implementation / Methodology Published: 2026-05-01 Updated: 2026-08-30 Choosing a Dynamics 365 product is rarely a single decision — it's typically three: one for the ERP, one or more for the CRM side, and a decision about how much Power Platform you'll layer on top. The good news is the choices are reasonably orthogonal once you understand the segmentation. This guide walks each decision in the order most organisations actually face them, and links to the head-to-head comparison for each fork in the road. If you're still orienting yourself in the product family, start with [what is Dynamics 365](https://www.solvingdynamics365.com/guides/what-is-dynamics-365) and the [Dynamics 365 product family](https://www.solvingdynamics365.com/guides/dynamics-365-product-family) overview, then come back here. ## Decision 1: which ERP tier Microsoft splits the ERP market into two tiers, and this is the decision with the biggest cost and timeline consequences. **Business Central** is the right answer for organisations with up to roughly 250–300 users, a single primary entity (or a small group of entities with limited consolidation needs), and operations that aren't heavy process manufacturing or highly regulated industries like banking. Implementations run weeks to months, and the partner ecosystem is broad. Start with [what is Business Central](https://www.solvingdynamics365.com/guides/what-is-business-central). **Dynamics 365 Finance + Supply Chain Management** is the right answer for everything above that line: multi-hundred to multi-thousand users, dozens or hundreds of legal entities, multi-country statutory complexity, or operations like food and pharma process manufacturing, multi-modal logistics, or large-scale retail. Implementations run quarters to years. Start with [what is Dynamics 365 Finance](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-finance) and [what is Dynamics 365 Supply Chain](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-supply-chain). The full head-to-head is in [Business Central vs Finance and Operations](https://www.solvingdynamics365.com/guides/business-central-vs-finance-and-operations). If you're coming off a smaller system rather than choosing between the two, the migration guides for [QuickBooks](https://www.solvingdynamics365.com/guides/migrating-from-quickbooks-to-business-central), [NetSuite](https://www.solvingdynamics365.com/guides/migrating-from-netsuite-to-business-central), and [SAP Business One](https://www.solvingdynamics365.com/guides/migrating-from-sap-business-one-to-business-central) cover what actually changes. One trap worth naming: don't overbuy. Customers regularly outgrow Business Central in five years and migrate up. That's normal — and far cheaper than starting on Finance and SCM five years before you needed it. ## Decision 2: which customer-facing apps On the CRM side, pick by the customer process you run, not by feature lists. The apps are not mutually exclusive — many companies own three or four, and they share one data platform ([Dataverse](https://www.solvingdynamics365.com/guides/what-is-microsoft-dataverse)), so adding a second app later is an increment, not a new implementation. - Selling to businesses with a pipeline? [Sales](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-sales). If Salesforce is on the shortlist too — it usually is — read [Dynamics 365 Sales vs Salesforce](https://www.solvingdynamics365.com/guides/dynamics-365-sales-vs-salesforce). - Running case management for inbound enquiries? [Customer Service](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-customer-service). - Dispatching technicians to customer locations? [Field Service](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-field-service). - Running customer-billable projects with resourced engagements? [Project Operations](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-project-operations). The line between these last two is genuinely confusing; [Field Service vs Project Operations](https://www.solvingdynamics365.com/guides/field-service-vs-project-operations) draws it. - Running marketing campaigns and orchestrating customer journeys? [Customer Insights – Journeys](https://www.solvingdynamics365.com/guides/customer-insights-journeys-explained). - Unifying customer data from many systems for analytics and AI? [Customer Insights – Data](https://www.solvingdynamics365.com/guides/customer-insights-data-explained). - Running retail across stores, e-commerce, and call centre? [Dynamics 365 Commerce](https://www.solvingdynamics365.com/guides/dynamics-365-commerce-explained) — which, note, sits on the F&O side of the house, not the CRM side. ## Decision 3: buy an app or build one A recurring fork: license a full Dynamics 365 app, or build a lighter custom app on Power Apps against the same Dataverse platform. The short version — buy the app when your process matches the industry-standard shape it encodes; build when your process is genuinely unusual or only needs a fraction of the app. The long version is [Power Apps vs Dynamics 365 CRM](https://www.solvingdynamics365.com/guides/power-apps-vs-dynamics-365-crm), with the broader make-or-buy reasoning in [build vs buy in the Dynamics 365 ecosystem](https://www.solvingdynamics365.com/guides/build-vs-buy-in-the-dynamics-365-ecosystem). Related, one level down the stack: when custom development enters the picture, decide deliberately between low-code and pro-code Azure services. [Azure vs Power Platform](https://www.solvingdynamics365.com/guides/azure-vs-power-platform-when-to-use-which) is the decision guide for that line. ## Look at the integration surface If you already run heavy Microsoft 365 (Outlook, Teams, SharePoint), Dynamics 365 is dramatically less integration work than non-Microsoft alternatives — the Outlook app, Teams embedding, and SharePoint document management come close to free. If you run mostly on Google Workspace, or your sales team lives in Salesforce while finance evaluates Business Central, the integration calculus changes and deserves honest weighting. [How Dynamics 365 apps connect](https://www.solvingdynamics365.com/guides/how-dynamics-365-apps-connect) covers what integration between the Dynamics apps themselves looks like — it is not automatic just because the logos match. ## Pick the partner before the product The partner network is uneven by region, industry, and product. A great Business Central partner in your country with deep experience in your industry is worth far more than a marginal feature advantage from a different ERP. Weight the partner evaluation as heavily as the product evaluation — [choosing a Dynamics 365 partner](https://www.solvingdynamics365.com/guides/choosing-a-dynamics-365-partner) gives you the questions to ask. ## Model the real cost List price per user per month is the least interesting number in the decision. Licence tiering, attach pricing (your second Dynamics app is cheaper than your first), storage, environments, ISV add-ons, and implementation services dominate the ten-year picture. [Dynamics 365 edition comparison](https://www.solvingdynamics365.com/guides/dynamics-365-edition-comparison) covers the licensing shape; [TCO modelling](https://www.solvingdynamics365.com/guides/dynamics-365-tco-modelling) covers how to build the honest spreadsheet. ## A worked shortcut Three profiles cover a surprising share of real decisions: **A 50-person distributor or services firm** — Business Central, probably with the built-in CRM-lite capabilities first, adding Sales only when a real pipeline process demands it. **A 500-person manufacturer selling through a direct sales force** — Finance + Supply Chain for the ERP, Sales for the pipeline, Field Service if you service what you sell, and Customer Insights – Journeys once marketing outgrows mail merges. **A 5,000-person retailer** — Finance + Supply Chain + Commerce as one platform decision, Customer Insights – Data and Journeys for the customer side, and a serious integration architecture conversation before signing anything. None of these are prescriptions — they're starting hypotheses to test against your own complexity. And whatever you choose, decide the rollout shape deliberately: [phased vs big-bang go-live](https://www.solvingdynamics365.com/guides/phased-vs-big-bang-go-live) is the last decision this guide leaves you with. ### Frequently asked questions **When is Business Central enough, and when do I need Finance and Supply Chain?** Business Central suits up to roughly 250–300 users, a single primary entity or small group, and operations that are not heavy process manufacturing or highly regulated. Above that — hundreds of legal entities, multi-country statutory complexity, process manufacturing, large-scale retail — Finance and Supply Chain Management is the tier built for it. **Which CRM app do I need?** Pick by the customer process: Sales for a B2B pipeline, Customer Service for inbound case management, Field Service for dispatching technicians, Project Operations for billable resourced engagements, Customer Insights – Journeys for marketing, Customer Insights – Data for unifying customer data, and Commerce for retail. They share Dataverse, so adding a second app later is an increment. **Should I buy a Dynamics 365 app or build a Power App?** Buy when your process matches the industry-standard shape the app encodes; build on Power Apps against the same Dataverse when your process is genuinely unusual or needs only a fraction of the app. **Is overbuying the enterprise tier a safe hedge?** No. Customers regularly outgrow Business Central in five years and migrate up, and that is far cheaper than starting on Finance and Supply Chain five years before it was needed. **How important is the implementation partner?** As important as the product. A strong local partner with depth in your industry is worth more than a marginal feature advantage, so weight the partner evaluation as heavily as the product evaluation. --- # Hypercare after Dynamics 365 go-live How to plan and run hypercare — the post-go-live stabilisation window where issues are loud, fixes are fast, and habits are forming. Source: https://www.solvingdynamics365.com/guides/hypercare-after-go-live Section: Implementation / Project execution Published: 2026-05-01 **Hypercare** is the elevated-support period that follows a Dynamics 365 go-live. It bridges the project team's deep knowledge of the new system and the steady-state support organisation's growing understanding. Most issues that ever surface, surface here; most habits that ever form, form here. ## Duration Typically **two to four weeks** for SMB Business Central go-lives; **four to twelve weeks** for enterprise Finance/SCM. Defined up front in the contract and the project plan — open-ended hypercare wastes money and gives users a false safety net. ## Staffing Hypercare is heavier than steady-state support. Common staffing: - **Floor walkers** — partner consultants and customer champions physically (or virtually) present in business teams during their working hours. - **Daily stand-up** — partner project team, customer key users, IT support, leadership representative. Surface issues, agree priorities, sign off resolutions. - **War room or fast-track channel** — a dedicated Teams channel where users can raise issues that get same-day visibility. Distinct from steady-state ticketing. - **On-call developer/configuration capacity** — to address true defects same-day. **What hypercare covers.** - Operational support: how-to questions, password resets, missing permissions, "I can't find the button". - Configuration tweaks: defaults that were wrong, missing posting groups, unexpected behaviour from a customisation. - Defect resolution: real bugs that escaped UAT. - Performance issues: things that ran fine at sandbox volume but stutter at production volume. - Training reinforcement: the user who didn't attend training, the user who attended but didn't absorb. ## Severity discipline Triage every issue: - **Severity 1** — work-stopping. Fix in hours. - **Severity 2** — workaround acceptable for a day. Fix in days. - **Severity 3** — annoying. Fix in weeks. - **Severity 4** — enhancement request. Fix in post-go-live optimization phase or later. The hardest discipline is *not* fixing Sev 3/4 things in hypercare. Resist scope creep; rest is finite. ## Knowledge transfer During hypercare, the steady-state support team learns the system. By end of hypercare, support escalations to the partner should be the exception, not the rule. Document fixes as they happen — runbooks for the recurring issues — so the next hypercare period is shorter. ## Exit criteria Before declaring hypercare over: - No open Sev 1 issues. - Open Sev 2 backlog under an agreed cap. - Customer support team handling 80%+ of incoming volume. - Leadership sign-off. ## Don't skip celebration A go-live successfully through hypercare is a real accomplishment for the team. Mark it. ## Where to go next Hypercare hands over to [run-book operations](https://www.solvingdynamics365.com/guides/run-book-operations-after-dynamics-365-go-live), with [monitoring and observability](https://www.solvingdynamics365.com/guides/monitoring-and-observability-for-dynamics-365) as the early-warning system and [release management](https://www.solvingdynamics365.com/guides/release-management-for-dynamics-365) as the rhythm that replaces it. What went into the window is [cutover planning](https://www.solvingdynamics365.com/guides/cutover-planning-for-dynamics-365); what keeps tickets down is [training strategies](https://www.solvingdynamics365.com/guides/training-strategies-for-dynamics-365-rollouts). --- # Idempotency in Dynamics 365 integrations Why integrations must be idempotent — patterns for safe retries, deduplication, correlation IDs. Source: https://www.solvingdynamics365.com/guides/idempotency-in-dynamics-365-integrations Section: Integrations / Architecture patterns Published: 2026-08-05 In any distributed system, messages can be delivered more than once. A network timeout, a webhook retry, a Service Bus redelivery — all produce the same business event arriving twice. An integration that's not **idempotent** processes the message twice, creating duplicate records, double-charging customers, or sending repeated notifications. Designing for idempotency from the start is fundamental. **The problem.** A naive integration: 1. External system sends "Customer X placed Order Y" event. 2. Network glitch; the publisher retries. 3. The consumer receives the event twice. 4. The consumer creates Order Y twice in Dataverse. 5. Customer X has two orders for one purchase; chaos. **Idempotency means: running the same operation twice produces the same result as running it once.** **Patterns for idempotent operations.** **1. Check before create.** Before inserting a record, query for it: ``` Does Order Y exist? Yes → already processed; do nothing. No → create Order Y. ``` This works but has a race condition: two simultaneous executions could both find "doesn't exist" and both insert. Acceptable for low-volume scenarios with reasonable network conditions; insufficient for high-volume / mission-critical. **2. Upsert with alternate key.** Use Dataverse's **Upsert** operation with an alternate key: ``` PATCH /api/data/v9.2/salesorders(ordernumber='Y') { ...order data... } ``` If the order exists, it's updated; if not, it's created. The platform handles the atomicity. Idempotent by design. **3. Correlation ID.** Each external event carries a unique identifier (the event's ID, a UUID, a deduplication token). The consumer: 1. Receives the event with correlation ID `evt-123`. 2. Checks "have I processed event `evt-123` before?" against a tracking store (Dataverse table, Azure Cache, or message header). 3. If yes, skip. 4. If no, process and record `evt-123` as processed. This handles cases where the business operation isn't naturally identifiable by a stable business key. **4. Idempotency tokens.** Some patterns send an explicit idempotency token in the request header. The consumer treats requests with the same token as duplicates of each other. **5. Natural keys.** Many business entities have natural keys — order number, invoice number, transaction reference. If the publisher uses these consistently and the consumer matches by them, duplicates are detected naturally. **Dataverse-specific patterns.** ## Upsert As mentioned, Dataverse's Upsert is the canonical pattern: ``` PATCH /api/data/v9.2/salesorders(ordernumber='ORD-2026-001') Headers: If-Match: * { "orderdate": "2026-01-15", "customerid_account@odata.bind": "/accounts()", ... } ``` With an alternate key on `ordernumber`, the operation is idempotent regardless of how many times it's called with the same data. ## ETag-based concurrency Beyond idempotency, ETag-based optimistic concurrency prevents lost updates: - Read the record; get its ETag. - Submit the update with `If-Match: `. - If the record changed between read and write, the update fails; consumer re-reads and retries. Different from idempotency but complementary. ## Service Bus deduplication Azure Service Bus supports **message deduplication** — messages with the same `MessageId` within a deduplication window are treated as duplicates and discarded automatically. Set the `MessageId` to the business event's correlation ID; Service Bus handles the deduplication infrastructure. ## Webhooks Dataverse webhooks include a `Cloud Event ID` header — a unique ID per event firing. Consumers track which IDs have been processed; duplicates are detected. **Power Automate flows.** - **Native trigger deduplication** isn't always supported; check per trigger. - **Explicit deduplication step** — use a Dataverse table to track processed correlation IDs; the flow checks before processing. - **Idempotent action choice** — prefer Upsert over Create when possible. **Plug-ins.** Synchronous plug-ins running in the originating transaction inherit transactional idempotency — if the transaction fails, all effects roll back, including the plug-in's. Asynchronous plug-ins may retry; design them as idempotent or accept duplicates. ## Compensation actions When idempotency isn't possible (e.g. notification sending, payment processing), use **compensation**: - Track every action with status. - On detection of duplicate processing, compensate (reverse the duplicate effect). Compensation is complex; design carefully. **Why this matters.** - **Distributed systems aren't reliable** — messages duplicate. Idempotency is the only sane design pattern. - **Retries are inevitable** — clients retry on timeouts; queues redeliver; webhooks retry. - **Without idempotency**, every retry is a bug waiting to happen. **Common pitfalls.** - **Assuming "won't happen"** — duplicates happen far more often than developers expect. - **No correlation ID** — can't detect duplicates after the fact. - **Check-before-create with race conditions** — works at low volume; fails at scale. - **Side effects without idempotency consideration** — duplicate notifications, double-charges, repeated webhooks downstream. ## Operational reality Design every Dynamics 365 integration as idempotent. The investment is small; the cost of not doing it is dramatic when problems occur. Use Upsert, use correlation IDs, use natural keys; track processed events; expect retries. ## Where to go next The Dataverse mechanism that makes upserts safe is [alternate keys](https://www.solvingdynamics365.com/guides/dataverse-alternate-keys); the retry side is [retry policies with Azure services](https://www.solvingdynamics365.com/guides/retry-policies-with-azure-services) and [message replay and poison queues](https://www.solvingdynamics365.com/guides/message-replay-and-poison-queue-handling-for-d365); the publish side is [the outbox pattern](https://www.solvingdynamics365.com/guides/the-outbox-pattern-with-service-bus). On Business Central, the duplicate and concurrency errors an idempotent client must handle are in [Business Central API errors](https://www.solvingdynamics365.com/guides/business-central-api-errors). --- # IFRS 16 lease accounting in Dynamics 365 Finance How F&O handles IFRS 16 / ASC 842 lease accounting — right-of-use assets, lease liabilities, amortisation, and the integration with general ledger. Source: https://www.solvingdynamics365.com/guides/ifrs-16-lease-accounting-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 **IFRS 16** (and its US equivalent **ASC 842**) fundamentally changed lease accounting — operating leases that previously stayed off the balance sheet must now be capitalised as **right-of-use (ROU) assets** with corresponding **lease liabilities**. Dynamics 365 Finance includes lease accounting capability natively, replacing the spreadsheet-based lease management many companies relied on pre-2019. ## The accounting change Pre-IFRS 16, operating leases were P&L-only — monthly rent expense, no balance-sheet presence. Post-IFRS 16, every lease (above de minimis thresholds for short-term and low-value items) creates: - A **right-of-use asset** on the balance sheet — the value of the lessee's right to use the asset over the lease term. - A **lease liability** on the balance sheet — the present value of future lease payments. - **Depreciation expense** on the ROU asset over the lease term. - **Interest expense** on the lease liability (unwinding the discount). The split between depreciation and interest produces a front-loaded P&L expense pattern, different from the straight-line rent expense pattern of operating leases. ## F&O's lease module The **Asset leasing** module (part of Finance) handles the full lifecycle: - **Lease record** — captures the lease contract: lessee entity, asset description, start / end dates, payment schedule, discount rate, lease term, renewal / termination options, residual value if any. - **Initial recognition** — computes the present value of future payments, books the ROU asset and lease liability. - **Periodic accounting** — generates monthly depreciation and interest entries automatically. - **Payment posting** — when actual lease payments are made, F&O reduces the liability and posts the cash outflow. - **Modifications** — when the lease changes (extension, scope change, renegotiation), the module remeasures the liability and ROU asset. - **Termination** — when the lease ends or is terminated early, the remaining ROU asset and liability are reversed. **Configuration.** - **Discount rates** — the rate used to compute present value. Typically the incremental borrowing rate; configurable per lease or per company. - **Lease classification** — IFRS 16 broadly treats all leases as finance leases for lessees (no operating-lease distinction); ASC 842 retains the operating vs finance distinction. F&O supports both. - **Index-linked leases** — common in commercial property leases where rent escalates with CPI. F&O can handle indexation as remeasurements at each index date. - **Variable payments** — non-fixed payments (turnover-based rent, usage-based) are typically expensed as incurred rather than capitalised; configurable. - **Short-term and low-value exemptions** — IFRS 16 allows expensing short-term leases (under 12 months) and low-value leases without capitalisation. F&O honours the exemptions per configured policy. ## Disclosures and reporting Standard reports cover: - ROU asset register with current value, accumulated depreciation, useful life. - Lease liability schedule with current and non-current splits, future cash flows by year. - Lease expense breakdown — depreciation, interest, variable payments, short-term lease expense. - Maturity analysis — cash payments by year for the next several years. - Reconciliation of opening to closing balances. These map directly to IFRS 16 disclosure requirements in the financial statements. ## Multi-currency and indexation Cross-border leases (e.g. UK company leasing a German office in EUR) require: - Initial recognition at the contract-date FX rate. - Monthly re-measurement of the liability at period-end rate. - FX gain/loss recognised in P&L. Index-linked rent escalations are remeasurements at each indexation event, with the cumulative adjustment booked. ## Audit trail Every lease modification, remeasurement, and posting generates audit records. The lease module is one of the more audit-intensive areas of F&O for IFRS-reporting customers. **Common pitfalls.** - **Wrong discount rate** — the rate is one of the most consequential parameters; getting it wrong materially affects every lease's present value. - **Missing index-linked clauses** — leases with escalation that aren't configured for indexation under-state long-term liability. - **Modifications not posted timely** — lease changes that aren't reflected promptly produce wrong balance-sheet positions. - **Service components mixed with lease components** — IFRS 16 only requires capitalisation of the *lease* component; bundled service fees may not. The module supports separation; configure carefully. ## Operational reality Lease accounting is finance-team work, not operations. Engage the controller / financial reporting lead during setup; align with audit firm on configuration choices; document the policy. Done well, lease accounting is one of the smoother IFRS-compliance areas; done badly, it's an annual audit finding. --- # Impersonation in Dataverse plug-ins How impersonation works in Dataverse plug-ins — running as the calling user vs system user, the SDK patterns, and the security implications. Source: https://www.solvingdynamics365.com/guides/dataverse-impersonation-in-plugins Section: Customer Engagement / Dataverse platform Published: 2026-05-01 By default, a Dataverse plug-in runs with the privileges of the user who triggered the operation. Sometimes the plug-in needs different privileges — to access data the calling user can't see, to update records they couldn't update, or to assume a specific role. **Impersonation** is the mechanism. Used carefully, it's powerful; used carelessly, it's a security hole. ## The default behaviour Without impersonation: - Plug-in runs as the calling user. - Plug-in's data access respects user's security roles. - Plug-in can do anything the user could do — no more, no less. This is the safe default; honour user permissions. ## The system user Inside a plug-in: - `context.UserId` — the calling user. - `context.InitiatingUserId` — same in most cases. - `IOrganizationServiceFactory.CreateOrganizationService(null)` — creates a service running as **system user** (super-privileged). The system user can do anything; respects no security roles. **Common reasons to use system user.** - **Cross-team operations** — plug-in needs to read records from other teams. - **Cascade updates** — plug-in updates related records the user doesn't own. - **Audit logging** — log to an audit table the user can't write. - **Integration scenarios** — service-to-service operations. ## The risk When plug-in runs as system: - User's privilege boundaries bypassed. - User can indirectly do things they couldn't directly. - Data exposure if return values include unauthorised data. The mitigation: validate user authorisation explicitly within the plug-in, then perform privileged operations. ## Specific user impersonation Instead of system user, impersonate a specific user: ```csharp var service = serviceFactory.CreateOrganizationService(specificUserId); ``` Operations run as that user, respecting their security roles. ## Use case for specific impersonation A workflow that creates records on behalf of a specific group account: - Multiple users invoke the workflow. - All resulting records should be owned by a service account. - Impersonate the service account. This gives consistent ownership without elevating to system. **Pattern: validate then elevate.** ```csharp // 1. Validate user authorisation explicitly. if (!UserCanPerformOperation(callingUser, recordId)) { throw new InvalidPluginExecutionException("Not authorised"); } // 2. Elevate to system for actual operation. var systemService = serviceFactory.CreateOrganizationService(null); systemService.Update(record); ``` This pattern keeps user authorisation strict while accomplishing the work that requires elevation. ## Recursion considerations When impersonating, plug-ins on the resulting operations may run differently: - A plug-in fires on the record update. - That plug-in sees the impersonated context, not the original user. - Cascade behaviour can be unexpected. Document and test carefully. ## Audit trail Operations performed via impersonation: - The audit trail shows the impersonating identity. - May or may not preserve the original user information. - For accountability, log the original user separately within plug-in trace. ## Workflow steps and impersonation Workflow steps have their own context: - **Run as owner** — the workflow record's owner. - **Run as user who triggered.** Choose based on whether elevated access is needed. ## Power Automate impersonation Flows have similar concepts: - **Connection** identity — typically the user who created the connection. - **Run-only users** — for shared flows. - **Service principal connections** — bypass user identity. Each pattern has security implications. ## Cross-tenant impersonation Not natively supported; cross-tenant requires specific setup (B2B users, multi-tenant apps). **Common pitfalls.** - **Default to system user.** Unnecessarily elevates; security risk. - **No authorisation check.** Impersonation bypasses user permissions; user effectively elevated. - **Audit trail unclear.** Can't tell who actually did what. - **Performance impact.** Creating separate service instances has overhead. - **Cascade effects.** Downstream plug-ins see different context than expected. **Best practices.** - **Use default user context where possible.** Impersonate only when needed. - **Validate explicitly when impersonating.** Don't assume permission. - **Log the original user.** Even if technical operation is as system, log who initiated. - **Document the impersonation rationale.** Why this plug-in needs elevated access. - **Code review for impersonation.** Treat impersonation as security-sensitive code. **Comparison with simpler patterns.** - **Sharing record** — give specific user/team access; user keeps their identity. - **Field-level security** — control which columns user sees. - **Hierarchical security** — manager sees direct reports. Sometimes these solve the problem without needing impersonation. **Compliance considerations.** - **SOX** — segregation of duties; impersonation may breach. - **GDPR** — accountability for who accessed personal data. - **Internal audit** — review plug-ins using impersonation. ## Strategic positioning Impersonation is a power-tool. Use sparingly, with clear rationale, with explicit authorisation logic, with thorough audit. Plug-ins that lazily run as system because "it's easier" accumulate security debt. The discipline to do impersonation right is a sign of security-conscious engineering; the absence of that discipline is a sign of accidental privilege escalation. For security-sensitive Dataverse deployments, periodic review of plug-in impersonation usage is essential. --- # Incoming documents in Business Central How Business Central's Incoming Documents feature ingests vendor invoices and other inbound documents — OCR, AI extraction, and posting flows. Source: https://www.solvingdynamics365.com/guides/incoming-documents-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 Most vendor invoices still arrive as PDFs attached to emails. Most companies still type the data into the system manually. Business Central's **Incoming Documents** feature is the platform's attempt to bridge that gap — receive the PDF, extract the data, post it as a purchase invoice or other transaction, with audit trail and rejection workflow for the cases AI gets wrong. **The flow.** 1. **Receive.** A document (typically a PDF) arrives in BC as an Incoming Document. Sources include: emails to a dedicated inbox monitored by an Office 365 integration, manual upload by AP staff, OCR vendor service push, or attachment to an existing record. 2. **OCR / AI processing.** The document is processed — either by Microsoft's built-in OCR service, by a third-party OCR partner integration (Continia, ExFlow, others), or by the modern path using **AI Builder document automation** for richer extraction. The output is structured: vendor identification, invoice number, date, total amount, line-by-line if available, VAT breakdown. 3. **Vendor matching.** The extracted vendor identity (name, VAT number, bank details) is matched to a BC vendor. Match confidence is shown; for unrecognised vendors, AP staff create or select. 4. **Document creation.** The user opens the Incoming Document, reviews the extracted data, and creates the corresponding business document — typically a purchase invoice but also purchase credit memos, general journal lines, or other supported document types. 5. **Review and post.** The created document is reviewed, possibly approved through workflow, then posted. The Incoming Document remains linked to the posted document for audit. **OCR options.** - **Microsoft built-in** — basic OCR, free, works for clean PDFs and simple layouts. Best for low-volume. - **Microsoft AI-document-processing** — newer, with AI Builder backend. More accurate, supports more layouts. - **Continia OCR / Lexmark / Rossum / similar** — third-party services accessed via partner connectors, generally more accurate especially for varied or complex invoice layouts. Higher accuracy, paid per page. ## AP automation as a category For high-volume AP teams (hundreds of invoices per day), BC's built-in Incoming Documents covers the basics, but most serious operations layer a dedicated AP automation ISV (Continia Document Capture, ExFlow, Documotor, ABBYY-based solutions). They add: - Line-level item-and-amount matching to purchase orders. - Three-way matching (PO ↔ receipt ↔ invoice). - Per-vendor field-mapping templates that learn over time. - Complex multi-step approval workflows beyond BC's built-in. - Dashboards for exception handling. ## Approval workflow Incoming Documents integrate with the BC workflow engine: rules can require approval before the document can be converted into a posted business document, with conditional routing based on amount, vendor, or department. ## Audit trail Every Incoming Document keeps its original PDF plus the OCR output. Posted documents retain the link, so an auditor seeing a posted purchase invoice can drill back to the original PDF. ## Beyond purchase invoices Incoming Documents can also handle bank statements (for some country imports), expense receipts, and customer documents inbound for the case where the customer sends *their* PO as an attachment for the seller's reference. ## The realistic adoption pattern Start with manual upload and AP review. As volume grows and patterns stabilise, layer OCR. Beyond a few hundred invoices a week, look at a dedicated AP automation ISV. --- # Inspections in Dynamics 365 Field Service How configurable inspection forms work in Dynamics 365 Field Service — designer, conditional logic, photos, and analysis of inspection data. Source: https://www.solvingdynamics365.com/guides/inspections-in-field-service Section: Customer Engagement / Field Service Published: 2026-05-01 **Inspections** in Dynamics 365 Field Service let organisations capture structured checklists during field work — safety inspections, equipment condition checks, regulatory compliance forms, installation verification, periodic maintenance forms. Configured well, they replace paper forms, eliminate transcription, and produce analysable data on the state of equipment fleets. ## The inspection designer Inspections are built in a no-code drag-and-drop **inspection designer** inside the Field Service app. Available question types: - **Single-line text** / **multi-line text** — for narrative inputs. - **Number** — with optional min/max validation. - **Date / date+time** — for date capture. - **Toggle** — yes/no checks. - **Picklist** (single or multi-select) — from a static or dynamic list of values. - **Photo** — capture from the technician's mobile camera. - **Signature** — customer or technician. - **File upload** — for attaching reference documents. - **Section** — group related questions and apply conditional visibility. - **Sub-form** — repeat a set of questions for many items (e.g. inspect each of five HVAC units on a site). ## Conditional logic Questions can be **conditional** — visible only if a prior answer matches. A "Visual damage observed?" toggle reveals a "Describe the damage" text field and "Photo of damage" question only when set to Yes. This keeps inspection forms tight and focused. ## Validation Required questions, numeric ranges, text length limits, format validation — all configurable per question. The mobile app enforces them at completion time. ## Inspection templates and revisions An inspection is a **template** that can be attached to: - **Work order types** — every work order of that type includes the inspection. - **Service tasks** — specific tasks within a work order. - **Customer assets** — equipment-specific inspections. - **Booking statuses** — inspection required at a specific point in the booking lifecycle. Inspections version cleanly — a template revision creates a new version, and historical completed inspections retain their original-version answers for audit. ## The technician experience Inside the **Field Service mobile app**, an attached inspection appears as a structured form. The technician fills it offline if needed; responses sync when connectivity returns. Photos taken during the inspection upload as related attachments. Each question's answer is stored as structured data — not free text in a notes field. ## The data side Each inspection response is a **Dataverse record** with structured fields per question. This is the most important thing about inspections: the answers are *data*, not documents. They can be: - Filtered, searched, and reported on like any other Dataverse data. - Aggregated in Power BI for fleet-wide condition analytics. - Triggered to feedback workflows — a "Yes — needs replacement" answer auto-creates a follow-up work order. - Stored for compliance audit, exportable on demand. ## Compliance use cases Regulated industries (oil and gas, utilities, medical equipment service, food refrigeration, lift maintenance) use inspections to capture statutorily-required checklists, with photos and signatures as proof-of-performance. Aging refrigerator, lift, or HVAC checks are common. ## Reporting Power BI templates ship for inspection analytics — completion rate, common findings, fleet condition trends, technician quality patterns. Slice by region, customer, asset model, or technician. ## Limits Very complex multi-page forms (50+ questions) become unwieldy on mobile. Break into multiple inspection templates and trigger them sequentially. ## Operational reality Inspection adoption is a training and process discipline question, not a configuration question. Build inspection forms with the technicians who'll fill them, not at them. --- # Integrating Business Central with Microsoft 365 How Business Central plugs into Outlook, Teams, Excel, SharePoint, OneDrive, and the rest of Microsoft 365. Source: https://www.solvingdynamics365.com/guides/integrating-business-central-with-microsoft-365 Section: Integrations / Data movement Published: 2026-05-01 One of Business Central's enduring strengths is how naturally it lives inside Microsoft 365. The integrations are first-party, mature, and configured rather than coded. ## Outlook The **Business Central Outlook add-in** opens a side pane from any email. The system recognises the email's sender as a BC customer, vendor, or contact and surfaces their record inline. From the pane the user can: review open documents, create a new quote or invoice for the contact, look up product availability, and even post a payment — all without leaving Outlook. Calendar appointments can sync as activities. The Outlook integration is the single feature SMB sales and AR users adopt most readily. ## Teams A **Business Central app for Teams** lets users: - Share a customer, vendor, or item card into a chat or channel as a rich card. - Click through from the card to the record in BC. - Run a quick lookup from the Teams compose box. - Receive approval requests as adaptive cards that approve directly in Teams. For organisations that operate substantially in Teams, this collapses the friction of "switch to ERP, find the record, take action". ## Excel Almost every list page in BC offers **Edit in Excel** — opens the list in Excel as a live, two-way connected workbook. Sort, filter, edit, save — changes post back to BC. Used heavily for bulk price updates, mass item edits, dimension changes, and journal preparation. The single feature Finance teams love most. ## Power BI Pre-built Power BI apps for finance, sales, purchasing, and inventory consume BC data via the API. Embed Power BI reports inside BC role centres for inline dashboards. ## SharePoint and OneDrive Document attachments on BC records are stored in **OneDrive for Business** or a configured SharePoint site, not in the BC database. Keeps the database lean and gives users normal Office collaboration on attached files. Configure a **SharePoint storage location** for shared documents (versioning, permissions, search). ## Microsoft Search A BC connector for Microsoft Search lets users find BC customers, vendors, and items from the M365 search box in any Office app. ## Word Posted invoice, quote, and statement document layouts can be customised in **Word** by editing a layout template. Power users with no AL skills design document layouts directly. ## To-Do and Planner Through Power Automate, BC activities can sync to To-Do for personal tasks or Planner for shared work boards. ## Copilot Microsoft 365 Copilot increasingly has cross-product awareness — drafting an email in Outlook can reference open BC documents, and Word-generated proposals can pull from BC pricing. ## Setup Most integrations are tenant-wide, enabled with a few clicks in BC's *Set up your business with Microsoft 365* assisted setup. --- # Integrating Business Central with Salesforce Patterns for connecting Business Central to Salesforce — accounts and contacts, opportunities to orders, and the choice between iPaaS and direct integration. Source: https://www.solvingdynamics365.com/guides/integrating-business-central-with-salesforce Section: Integrations / Data movement Published: 2026-05-01 Plenty of mid-market companies run **Salesforce** for CRM and **Business Central** for ERP, and need them to talk. Microsoft doesn't ship a first-party connector for this pair (it ships one for Dynamics 365 Sales, naturally), so the integration is built — by partner, ISV, or in-house — using one of three patterns. ## Pattern 1: iPaaS middleware The most common approach. A platform like **MuleSoft, Boomi, Azure Logic Apps, Tray.io, Workato,** or **Power Automate** sits between the two systems and synchronises records. The middleware handles transformation, retry, error handling, and observability. iPaaS scales well, supports complex mappings, and is what Salesforce customers typically already have for other integrations. ## Pattern 2: ISV connector from AppSource or AppExchange Several ISVs publish packaged Business Central ↔ Salesforce connectors — typically pre-built mappings for Accounts/Contacts/Opportunities/Orders with a configuration UI. Faster to deploy than custom iPaaS, more rigid in shape. Suitable for standard integrations where the entity model matches both products without too much customisation. ## Pattern 3: Direct API-to-API Code that calls Salesforce's REST API and Business Central's v2.0 API directly, hosted in an Azure Function or similar. Cheapest to start, hardest to maintain — every change in either system risks breaking the integration. Reasonable only for the simplest, most-stable integrations. **The canonical mapping.** - **Salesforce Account** ↔ **BC Customer / Vendor**, matched on Tax ID or a custom external-ID field. - **Salesforce Contact** ↔ **BC Contact**. - **Salesforce Opportunity (Closed Won)** → **BC Sales Quote or Sales Order**. Won opportunities push into BC; BC posts the invoice and pushes back the invoice number and status. - **BC Invoice / Payment** → **Salesforce custom Invoice and Payment records**, so sales reps see paid status. ## Identity and ownership Decide which system is the **source of truth** for each entity. Typically Salesforce owns leads/opportunities, BC owns inventory/finance, and customers are owned by Salesforce up to opportunity-closed-won, then BC takes over for the customer record's financial side. ## Pricing and product catalog Items live in BC; published to Salesforce via the connector as **Products**. Salesforce Price Books map to BC price lists. Keep the catalog one-way (BC → SF) to avoid sync conflicts on something as critical as pricing. ## Inventory Real-time inventory in Salesforce is rare and expensive. The pragmatic pattern: show last-known stock with a refresh timestamp; reserve inventory only at order-creation time in BC. ## Operational reality Two production systems with continuous sync is more demanding than either alone. Allow budget for ongoing maintenance, monitoring, and quarterly reconciliation. Build the integration tests before you build the integration. --- # Integrating Business Central with Shopify How Microsoft's Shopify connector for Business Central works — items, orders, inventory sync, fulfilment, and the operational realities. Source: https://www.solvingdynamics365.com/guides/integrating-business-central-with-shopify Section: Integrations / Data movement Published: 2026-05-01 Microsoft ships a **first-party Shopify connector** as part of Business Central. For B2C and small-B2B sellers running Shopify as their storefront and Business Central as their back office, it's typically the integration of first choice. ## What the connector does The connector synchronises five things between Business Central and one or more Shopify shops: 1. **Items / products.** Items in BC publish to Shopify as products with title, description, images, tags, variants, prices, and inventory. The push is one-way (BC → Shopify) for catalogue control. 2. **Inventory.** On-hand quantities at nominated BC locations sync to Shopify so the storefront shows accurate stock. Multi-location stock can publish to Shopify's multi-location. 3. **Orders.** Shopify orders import into BC as sales orders, with the Shopify customer mapped to a BC customer (auto-created or matched). Order line items reference the originating BC items. 4. **Fulfilments.** When a BC sales shipment posts, the connector pushes a fulfilment back to Shopify, including tracking number, marking the order as shipped for the customer. 5. **Payments.** Shopify's payment summary imports into BC as a customer payment, applied against the imported sales invoice when the order is also fulfilled and invoiced. ## Customer mapping A Shopify customer maps to a BC customer either by email match or by auto-creation in a template-defined customer template. Repeat customers reuse their BC record. ## Tax handling Shopify computes tax client-side; the connector imports the order with tax pre-calculated. For VAT-registered EU businesses on OSS or import-VAT regimes, configure carefully — mismatches between Shopify's tax engine and BC's VAT engine surface here. ## Inventory timing Inventory sync is **near-real-time but not transactional**. A Shopify oversell — two customers buy the last unit in the same minute — can happen during reconciliation gaps. Configure Shopify's safety-stock buffer to absorb the window. ## Multi-shop The connector supports multiple Shopify shops mapped to the same or different BC companies. Useful for multi-region operations. ## Limits The first-party connector handles standard order-to-cash. For sophisticated needs — subscriptions, complex bundles, B2B pricing tiers, Shopify Plus features like wholesale channels — ISV connectors from AppSource often add the missing scope. ## Set-up Connecting a shop is wizard-driven: install the Shopify Sales Channel app from BC's AppSource entry, supply the Shopify store URL and access token, map BC items to publish, configure customer template and posting groups, and run an initial sync. ## Operational reality Daily reconciliation checks (orders not imported, payments not matched, fulfilments not pushed) are essential in the first weeks. Once stable, the integration runs unattended. --- # Integrating Copilot Studio agents with external APIs How Copilot Studio agents call systems outside Microsoft — REST actions from OpenAPI, custom connectors, Power Automate flows, and MCP servers. Source: https://www.solvingdynamics365.com/guides/integrating-copilot-studio-agents-with-external-apis Section: Integrations / API & identity Published: 2026-09-02 A Copilot Studio agent that can only read a knowledge base is a search box with better manners. The agents that earn their place are the ones that do things: check an order status in a logistics system, raise a ticket in an external help desk, look up a price in a pricing engine, book an appointment. All of those live behind APIs that are not Microsoft's. Copilot Studio has accumulated four ways to reach them, and they are not interchangeable. ## The four routes **REST API actions from an OpenAPI specification.** You upload or point to an OpenAPI (Swagger) document, pick the operations to expose, describe each in plain language, and the agent can call them directly. The orchestrator decides when to invoke an operation based on the description and the user's request, fills the parameters from conversation context, and works the response into its reply. This is the most direct route and the one to try first for any API that has a decent OpenAPI file. **Custom connectors.** The same Power Platform custom connector you would build for Power Automate or canvas apps, surfaced to the agent as an action. Worth it when the connector already exists, when you want the API reused across flows and apps, or when the API needs authentication types the REST action route does not handle well. See [custom connectors in Power Platform](https://www.solvingdynamics365.com/guides/custom-connectors-in-power-platform). **Power Automate flows as actions.** The agent calls a flow, the flow does whatever it likes, including multi-step logic, and returns outputs. This is the route for anything that is not a single API call: check two systems and combine, apply business rules, write an audit record. It adds latency and a flow run per invocation, and the flow becomes the thing you debug. **MCP servers.** Model Context Protocol is the open standard for exposing tools to AI agents. Copilot Studio can connect to an MCP server and pick up all the tools it advertises at once, with their descriptions and schemas, instead of you defining each action by hand. If your organisation or a vendor already publishes an MCP server, this is the least work and the most likely to keep up with API changes. It is newer than the other routes, and the tooling around authentication and governance is still settling. ## Choosing between them Start with the question "is this one API call or a process?" One call: REST action or MCP tool. A process: Power Automate flow. Then ask "does this API already have a connector or an MCP server?" If yes, use it rather than describing the same endpoints again. Custom connectors are the middle option that many teams skip straight past, and that is often correct. Their advantage is reuse; if the agent is the only consumer, the extra artefact is not worth maintaining. ## Descriptions are the interface The agent's orchestrator decides which action to call based on the natural-language descriptions you give each action and parameter. A vague description ("gets data") leads to the wrong action being called or never being called. A precise one ("returns the shipping status and expected delivery date for a sales order given its order number") gets used correctly. Spend real time on these, test with the phrasings users actually use, and treat description changes as releases. Parameter descriptions matter just as much. If a parameter is an order number in a particular format, say so; the agent will otherwise pass whatever the user typed. ## Authentication This is where external API integration gets serious. The options are none, API key, OAuth 2.0 with a shared application identity, and OAuth 2.0 with per-user identity. For internal APIs behind Entra ID, per-user authentication is the right default because the external system then applies its own authorisation to the actual user rather than to a service account with broad rights. For third-party SaaS APIs with an API key, store the key in the connection, never in a topic variable, and rotate it like any other secret. See [Dataverse secrets and Key Vault](https://www.solvingdynamics365.com/guides/dataverse-secrets-and-key-vault-integration) for where secrets should live. Agents published to Teams and Microsoft 365 Copilot use the signed-in user's identity, which makes per-user auth straightforward. Agents published to a public website need to authenticate the user first before per-user auth means anything. ## Error handling and fallbacks External APIs fail, time out, and return shapes the agent does not expect. Configure what the agent says when an action fails, and make it honest ("I could not reach the order system just now") rather than inventive. For flow-backed actions, handle errors inside the flow and return a clean status rather than letting the run fail. For anything financial or irreversible, put a confirmation step in a topic before the action executes; the orchestrator should not book, pay, or delete on its own inference. ## Governance Every route passes through Power Platform DLP policies. A connector or an HTTP endpoint blocked by DLP will fail at design time or run time depending on the route, and the error is not always obvious. Agree the allowed endpoints with the platform team before the agent is built. Managed environments add agent-level controls; see [DLP policies in Power Platform](https://www.solvingdynamics365.com/guides/dlp-policies-in-power-platform). ## What breaks in practice OpenAPI files that are technically valid and semantically useless, with operation names like "post_v2_items" and no descriptions. Agents that call an action too eagerly because the description was broad. Flows that time out because the external API is slow and nobody set a sensible timeout. Secrets in variables. ## Stability verdict REST actions, custom connectors, and flow actions are established and stable. MCP support is real and moving fast, which is both its appeal and its risk. For how an agent should be scoped and tested before any of this, read [building agents with Copilot Studio](https://www.solvingdynamics365.com/guides/building-agents-with-copilot-studio). --- # Integrating Copilot Studio with MCP servers How Model Context Protocol servers plug into Copilot Studio agents, what they change compared with hand-built actions. Source: https://www.solvingdynamics365.com/guides/integrating-copilot-studio-with-mcp-servers Section: Integrations / API & identity Published: 2026-09-02 Model Context Protocol is an open standard for describing tools an AI agent can call. A server publishes a list of tools with names, descriptions, and input schemas; an agent connects, reads the list, and invokes tools as the conversation requires. Copilot Studio supports connecting agents to MCP servers, which means that instead of describing each API operation to the agent by hand, you point it at a server and inherit everything the server offers. For Dynamics 365 consultants this matters because it changes how integrations reach agents, and because Microsoft and third parties are publishing MCP servers for the systems you already integrate with. ## What changes compared with actions The route described in [Copilot Studio agents with external APIs](https://www.solvingdynamics365.com/guides/integrating-copilot-studio-agents-with-external-apis) has you defining actions one at a time: an OpenAPI operation or a flow, each with a description you write. With MCP, the server owns the tool definitions. When the server adds a tool or improves a description, every connected agent sees it without a change in Copilot Studio. Tools also carry richer semantics than a REST operation: a server can expose resources (documents or records the agent can read) and prompts (canned instructions) alongside tools. Practically, an MCP connection in Copilot Studio appears as a set of actions the orchestrator can choose from, subject to the same DLP and connection governance as any other action. The agent does not become smarter; it becomes better informed about what it can do. ## Where MCP servers come from **Microsoft's own.** Dataverse has an MCP server that exposes its tables and operations, and further first-party servers for Dynamics 365 workloads are appearing. For an agent that needs to read and write Dataverse records, the Dataverse MCP server is the most direct route, with tool definitions maintained by the platform. **Vendors.** SaaS vendors are shipping MCP servers as a standard part of their developer offering. If the agent needs to talk to a help desk, a document store, or a data platform that publishes one, use it rather than describing the same API again. **Your own.** A server you build, typically as an Azure Function or a container app, exposing your organisation's specific operations: "look up a customer's open orders across Business Central and Dataverse", "check stock at the nearest warehouse". This is where MCP earns its keep, because the tool can encapsulate the cross-system logic and the agent sees one clean operation. ## Building a server for Dynamics 365 data Write tools around business operations, not tables. A tool called "get customer summary" that returns account, open cases, open invoices, and last order, drawing on Dataverse and Business Central behind the scenes, is far more useful to an agent than four tools that each return raw rows. The agent will otherwise chain calls, make mistakes in the joins, and produce slow conversations. Keep the tool count small and the descriptions precise. An agent choosing among fifty tools with overlapping descriptions picks the wrong one; an agent with eight well-named tools does not. Make tools read-only unless a write is genuinely required, and put any write behind a parameter that makes the intent explicit, so a confirmation step in the agent's topic can gate it. Host it where the organisation already runs APIs. Put [API Management in front](https://www.solvingdynamics365.com/guides/apim-in-front-of-dataverse) if there are other consumers, and log every call with the user identity and the tool name, because agent behaviour is otherwise hard to audit. ## Authentication An MCP server is an HTTP endpoint and the connection to it is a Power Platform connection, so the standard options apply: no authentication for a public server (rare and usually wrong), an API key, or OAuth 2.0. For a server touching Dynamics 365 data, use OAuth with Entra ID and pass the user's identity through, so the server queries Dataverse or Business Central as the user and the platform's own security applies. A server running as a broad service principal hands every agent user that principal's rights, which is the same mistake as an over-privileged integration user in any other context. ## Governance DLP policies control which MCP connectors an environment may use, and a server not on the allow list will fail to connect. Agree the list with the platform team. Treat a third-party MCP server as a third-party integration: review what its tools do, what data leaves the tenant in each call, and how the vendor handles it. A tool description is a promise, not a contract; test what the tool actually returns. Version the server. An agent built against tool version one that starts receiving version two's changed schema will behave oddly with no error in Copilot Studio. Keep old tool names stable and add new ones rather than changing existing signatures. ## What breaks in practice Servers that expose every table as a tool, so the agent drowns in options. Descriptions written for developers rather than for the model that reads them. Servers with no timeout, so a slow backend stalls the conversation. Connections created with a personal account that later leaves. Agents given write tools without a confirmation topic. ## Stability verdict MCP support in Copilot Studio is real and usable, and the protocol has broad industry backing, which is a good sign for longevity. It is also young: the authentication story, the governance tooling, and the set of first-party servers are all changing quickly, and something that works this quarter may need adjusting next. Build your own servers thin and expect to revisit them. For scoping the agent itself, read [building agents with Copilot Studio](https://www.solvingdynamics365.com/guides/building-agents-with-copilot-studio); for how Copilot Studio relates to the Copilot agents inside Dynamics 365 apps, see [Copilot agents vs Copilot Studio](https://www.solvingdynamics365.com/guides/copilot-agents-vs-copilot-studio). --- # Integrating Dataverse with Azure Cosmos DB: scale-out storage patterns When Dataverse is the wrong place for high-volume data, and how to pair it with Azure Cosmos DB — the offload pattern, virtual tables, event feeds. Source: https://www.solvingdynamics365.com/guides/integrating-dataverse-with-azure-cosmos-db Section: Integrations / Data movement Published: 2026-09-02 Dataverse is a relational, transactional, security-aware store for business records. It is not a place for telemetry, clickstreams, IoT readings, chat transcripts, or any table that grows by millions of rows a week. Organisations discover this when their storage bill spikes or when a model-driven app grinds because someone stored sensor pings as custom-table rows. Azure Cosmos DB is the usual answer for the high-volume tier, and the design question is how to pair the two so users still see what they need inside Dynamics 365. ## The dividing line A useful rule: if a record has an owner, a lifecycle, and a security boundary, it belongs in Dataverse. If it is an event, a reading, a log entry, or a document that is written once and read rarely, it belongs in Cosmos DB or similar. Cases, contacts, work orders, and opportunities stay in Dataverse. The ten thousand telemetry readings behind one IoT alert, the full transcript of every chatbot conversation, and the audit trail of an external portal go to Cosmos DB, with a summary or a reference in Dataverse. Getting this line wrong in the Dataverse direction costs money and performance. Getting it wrong in the Cosmos DB direction costs you the security model, the relationship model, and everything that makes Dataverse useful. ## Pattern 1: offload with a summary The high-volume data is written to Cosmos DB by whatever produces it (a device gateway, a portal, an Azure Function). Dataverse holds one summary record per logical thing, for example one IoT alert with the latest reading and a count, and that record carries a key into Cosmos DB. A model-driven form shows the summary; a button, a PCF control, or an embedded canvas app fetches the detail from Cosmos DB on demand through an API. This is the pattern to default to. Dataverse stays lean, users get detail when they ask for it, and the two stores have a clear contract. ## Pattern 2: virtual tables over Cosmos DB [Dataverse virtual tables](https://www.solvingdynamics365.com/guides/dataverse-virtual-tables) let external data appear as a Dataverse table without being stored there. There is no first-party Cosmos DB provider, so you build one: a custom virtual table provider in C#, or a custom connector with OData-style semantics behind the virtual connector provider. Users then see Cosmos DB documents in views and subgrids as if they were Dataverse rows. It works, and it is elegant when it does, but the constraints are real. Virtual tables need a stable primary key that maps to a GUID, they do not support all Dataverse features (no auditing, no rollups, limited security), and every view is a live query against Cosmos DB with the latency and request-unit cost that implies. A badly filtered view against a large container will be slow and expensive. Use this pattern for lookup-style access to moderate volumes, not as a way to scroll through a billion rows in a grid. ## Pattern 3: Dataverse as the event source The reverse direction: Dataverse changes need to land in Cosmos DB, typically to feed a customer-facing application that cannot query Dataverse directly at scale, or to build a read model for a high-traffic portal. Dataverse publishes changes through [Service Bus or Event Grid](https://www.solvingdynamics365.com/guides/azure-service-bus-integration-with-dataverse), an Azure Function consumes them and writes documents to Cosmos DB, and the portal reads Cosmos DB. This is the [CQRS pattern](https://www.solvingdynamics365.com/guides/cqrs-pattern-for-dynamics-365) with Cosmos DB as the read store, and it is the right shape when Dataverse's API limits would otherwise become the portal's bottleneck. Design the documents for the reads the portal makes, not as mirrors of Dataverse tables. Cosmos DB is best when each query hits one partition, which means denormalising aggressively and choosing partition keys around how the data is read, usually by customer or account. ## Consistency and identity Cosmos DB is eventually consistent by default across regions and tunable per request. Dataverse is strongly consistent within a transaction. Any pattern that moves data between them needs to accept a lag and design for it: show timestamps, avoid promising users that a write in one place is instantly visible in the other, and make writes idempotent so retries do not duplicate documents. See [idempotency in Dynamics 365 integrations](https://www.solvingdynamics365.com/guides/idempotency-in-dynamics-365-integrations). Use the Dataverse GUID as the document ID, or store it as a dedicated field, so the join between stores is unambiguous. Never rely on names or natural keys. ## Security The Dataverse security model stops at the Dataverse boundary. Anything reading Cosmos DB directly, whether a PCF control or a portal, needs its own authorisation, typically an Azure Function that checks the caller's identity and applies row filtering before returning documents. Do not hand Cosmos DB keys to a canvas app or a browser control. ## Cost Cosmos DB is priced by provisioned or serverless request units plus storage; Dataverse by capacity. Moving a chatty high-volume table out of Dataverse almost always reduces total cost. Moving a low-volume business table out of Dataverse almost always increases it, once you count the Azure Function, the monitoring, and the developer who understands both. ## What breaks in practice Partition key choices made early and regretted later; changing one means rewriting the container. Virtual table providers that were built for a demo and then asked to handle production filters. Portals that hit Cosmos DB cross-partition queries because the read model was designed as a copy of Dataverse rather than as a read model. ## Stability verdict The offload-with-summary pattern and the CQRS read-store pattern are both stable and well understood, and are what you should reach for. Virtual tables over Cosmos DB are viable but bespoke, and you own the provider for its lifetime. If the real driver is Dataverse storage cost rather than performance, read [Dataverse storage types explained](https://www.solvingdynamics365.com/guides/dataverse-storage-types-explained) first; sometimes the answer is cheaper than a second database. --- # Integrating Dataverse with Microsoft Fabric: Link to Fabric for near-real-time analytics How Dataverse's Link to Microsoft Fabric works, how it differs from Synapse Link, what 'real-time' actually means. Source: https://www.solvingdynamics365.com/guides/integrating-dataverse-with-microsoft-fabric-link Section: Integrations / Data movement Published: 2026-09-02 Link to Microsoft Fabric is the feature that takes Dataverse tables, including the Dynamics 365 Sales, Customer Service, and Field Service tables that live in Dataverse, and makes them queryable in Fabric without exporting anything. It is the successor in spirit to Synapse Link, and for most organisations already on Fabric it is now the default route for Dynamics 365 CRM analytics. It is worth understanding precisely what it does, because "no copy" and "real time" are both true in a specific sense and misleading in a general one. ## What Link to Fabric actually does You link a Dataverse environment to a Fabric workspace from the Power Apps maker portal. Dataverse then maintains a Delta Lake representation of the selected tables in Dataverse-managed storage, and Fabric exposes that as a Lakehouse with shortcuts pointing at it. Analysts see tables in a Fabric Lakehouse; Power BI sees them through Direct Lake; the SQL analytics endpoint lets you query them with T-SQL. Nothing is copied into OneLake, and nothing needs an Azure subscription or a storage account of your own. The distinction from [Azure Synapse Link for Dataverse](https://www.solvingdynamics365.com/guides/azure-synapse-link-for-dataverse): Synapse Link writes to an ADLS Gen2 account you own and is the right choice when the destination is not Fabric, or when you need the files under your own control for other consumers. Link to Fabric keeps the data in Dataverse's storage and counts against Dataverse capacity. If Fabric is the warehouse, Link to Fabric is simpler. If Snowflake or Databricks is the warehouse, Synapse Link is the one you want. ## What "near real time" means here Changes in Dataverse appear in the Fabric Lakehouse after a refresh interval that is typically minutes, not seconds, and it varies with load and table size. That is close enough for operational dashboards that refresh every quarter of an hour. It is not close enough for anything that reacts to a single record change, and it is not an eventing mechanism. If you need to act on a record within seconds of it changing, that is a job for [webhooks or Dataverse events](https://www.solvingdynamics365.com/guides/webhooks-vs-events-in-dataverse), not for analytics. For genuinely streaming needs, Fabric's Real-Time Intelligence workload (Eventstreams and KQL databases) can ingest from Dataverse change events via Event Hubs or Service Bus, but you are then building an eventing pipeline, and Link to Fabric is not part of it. ## Patterns that work **Direct Lake reports on Dataverse tables.** The headline use case. Power BI semantic models over the linked Lakehouse tables, with no import refresh and no DirectQuery latency. Sales pipeline, case backlog, and work order dashboards land here. Keep the semantic model over a curated layer rather than the raw tables, because raw Dataverse tables carry option set integers, GUID lookups, and a hundred columns nobody wants. **Cross-system models.** Dataverse tables joined with Finance and Operations data (also linkable to Fabric) and with external sources landed in the same Lakehouse. This is where Fabric earns its place over a plain Power BI model: a customer 360 that spans CRM opportunities and ERP invoices without a custom integration. **Notebooks and data science.** Spark over the linked tables for churn scoring, lead scoring, or forecasting, with results written to a separate Lakehouse table and surfaced back into Dynamics 365 through a [virtual table](https://www.solvingdynamics365.com/guides/dataverse-virtual-tables) or a scheduled Dataverse write. Never write model outputs back into the linked tables; they are read-only from the Fabric side by design. **Historical retention.** Dataverse has no cheap way to keep years of closed cases or won opportunities queryable. A Fabric Lakehouse fed by Link to Fabric, with a periodic snapshot into a separate archive table, becomes the long-term store, and [bulk delete jobs](https://www.solvingdynamics365.com/guides/bulk-delete-jobs-in-dataverse) can then trim Dataverse. ## Capacity and cost Two meters run. Dataverse storage capacity grows because the Delta representation is stored on the Dataverse side. Fabric capacity units are consumed by whatever you run in Fabric: Direct Lake queries, Spark notebooks, SQL endpoint queries. Neither is dramatic for a mid-sized CRM, but both surprise organisations who assumed "no copy" meant "no cost". Check the [Dataverse storage types](https://www.solvingdynamics365.com/guides/dataverse-storage-types-explained) guide for how the Dataverse side is counted. ## Security Dataverse row-level and column-level security do not apply in Fabric. A user with access to the Lakehouse sees every row of every linked table. Fabric's own OneLake security and semantic model row-level security are where access control gets rebuilt. This is the single most common design gap: a CRM where sales territories carefully hide each other's opportunities, feeding a Fabric workspace where everyone sees everything. ## What breaks in practice Table selection creep. Someone links every table "to be safe" and Dataverse capacity climbs. Link what reports need. Schema changes. New columns appear automatically; deleted columns and renamed tables are handled less gracefully. Downstream notebooks that hard-code column lists break. Environment lifecycle. Restoring or copying a Dataverse environment does not carry the Fabric link. Rebuild it as part of your environment runbook. Expectation management around latency, as above. Label dashboards with their refresh time. ## Stability verdict Link to Fabric is generally available, actively invested in, and clearly Microsoft's preferred path, so it is a safe foundation. The moving parts are around it: Fabric's own workloads change quickly, and the capacity model is still being tuned. For the wider picture of where Fabric fits across Dynamics 365, including F&O and Business Central, read [Microsoft Fabric and Dynamics 365](https://www.solvingdynamics365.com/guides/microsoft-fabric-and-dynamics-365). --- # Integrating Dynamics 365 Sales with Salesforce: cutover and coexistence patterns How to run Dynamics 365 Sales alongside Salesforce during a migration or a long-term split — sync patterns, system-of-record rules, and what breaks in practice. Source: https://www.solvingdynamics365.com/guides/integrating-dynamics-365-sales-with-salesforce Section: Integrations / Third-party systems Published: 2026-09-02 Most organisations that connect Dynamics 365 Sales to Salesforce are not building a permanent integration. They are somewhere on a path from one CRM to the other, or they have inherited two CRMs through an acquisition and need them to coexist until someone makes a decision. The integration pattern you pick should match which of those situations you are actually in, because the right answer for a six-month cutover is the wrong answer for a five-year coexistence. ## Three situations, three patterns **Cutover.** Salesforce is being retired and Dynamics 365 Sales is replacing it. The integration is temporary scaffolding: it keeps both systems usable while business units move across in waves. Here the pattern is a one-way feed from the system that is still live to the system that is going live, with a hard end date. **Coexistence with a split.** Different business units, regions, or product lines will stay on different CRMs indefinitely. Each system is the system of record for its own opportunities, and the integration exists so that shared customers and shared reporting make sense. The pattern is a master-data sync for accounts and contacts, and nothing else. **Coexistence with overlap.** The same sales team touches both systems for the same customers, usually because one CRM owns a product line the other does not. This is the pattern to avoid if you can. Two-way opportunity sync between CRMs with different pipeline models is where integration projects go to die. Be honest with yourself about which one you are in. Many "coexistence" projects are really cutovers that nobody has been given permission to call a cutover. ## What to sync and what not to Accounts and contacts are the safe core. Both systems model them similarly enough that a field mapping is tractable, and a shared customer list is what most stakeholders actually want. Even here, decide on one system of record per record. A rule like "the CRM that created the account owns it, the other one holds a read-only copy" is simple and enforceable. Bidirectional ownership with last-write-wins conflict handling sounds flexible and produces silent data loss. Opportunities are where the models diverge. Salesforce stages, probability, forecast categories, and opportunity products do not line up cleanly with Dynamics 365 business process flows, pipeline phases, and product line items. If you must move opportunities, move them once as part of a wave migration, not continuously. Activities (emails, calls, tasks) are almost never worth syncing between two CRMs. They are high volume, low value across the boundary, and both systems already have their own Outlook and Gmail integrations. Let each CRM keep its own activity history and accept the gap. Leads are a special case. If marketing feeds leads into one system, route them to the right CRM at the point of creation rather than syncing after the fact. A routing rule at the front door is far cheaper than reconciling duplicate leads later. ## Tooling options **Power Automate with the Salesforce connector.** Adequate for low-volume, event-driven sync of accounts and contacts. The connector handles authentication and basic CRUD. It does not handle bulk backfills well, and flow run limits bite when a mass update on one side triggers thousands of runs. **An iPaaS (Boomi, MuleSoft, Workato, Celigo).** The default for anything with real volume or more than a handful of objects. You get retry, mapping tooling, and monitoring you would otherwise build yourself. Salesforce-heavy organisations often already own MuleSoft; use what is already paid for and understood. **Custom code against both APIs.** Dataverse Web API on one side, Salesforce REST or Bulk API on the other, with an Azure Function or a small service in between. Justifiable when the mapping logic is genuinely complex or when the integration is a short-lived cutover tool that will be thrown away. See our guide on [Azure Functions for Dynamics 365](https://www.solvingdynamics365.com/guides/azure-functions-for-dynamics-365) for the mechanics. **Dual maintenance by humans.** Do not laugh. For a three-month cutover with a small team, having reps enter shared accounts in both places is sometimes cheaper and less risky than building anything. It fails once volume or duration grows. ## Identity and matching The hardest technical problem is knowing that a Salesforce account and a Dataverse account are the same company. Store the foreign key explicitly: a Salesforce ID column on the Dataverse account and a Dataverse GUID field on the Salesforce account. Use [alternate keys in Dataverse](https://www.solvingdynamics365.com/guides/dataverse-alternate-keys) so upserts are idempotent. Never match on name alone; matching on a normalised domain or a tax registration number is better, and even that needs a human review queue for the ambiguous cases. ## Cutover sequencing For a cutover, the pattern that works is: migrate historical data once (closed opportunities, activity history) as a bulk load, then run a live sync only for open accounts, contacts, and open opportunities during the overlap window, then switch off the sync and make Salesforce read-only. Keep Salesforce accessible read-only for as long as the licence allows rather than exporting everything to a reporting database on day one; people will want to check things. ## What breaks in practice Picklist drift is the usual first failure. Someone adds a value to a Salesforce picklist, the sync has no mapping for it, and records start failing quietly. Build the integration to reject unknown values loudly and alert someone. Ownership is the second. User records do not map one-to-one across systems, especially when reps exist in only one CRM. Decide up front what owner a synced record gets on the other side. Deletes are the third. Salesforce soft-deletes to a recycle bin; Dataverse hard-deletes unless you build otherwise. Most integrations should treat deletes as a status change rather than propagating them. ## Stability verdict A one-way account and contact sync between the two CRMs is a stable, well-trodden pattern. Two-way opportunity sync is not, and any partner who tells you it is routine has not lived with one. If you are comparing the products rather than connecting them, start with [Dynamics 365 Sales vs Salesforce](https://www.solvingdynamics365.com/guides/dynamics-365-sales-vs-salesforce). --- # Integrating Dynamics 365 with Azure services How Dynamics 365 plugs into Azure — Service Bus, Logic Apps, Functions, API Management, Event Grid, and the iPaaS patterns that actually work. Source: https://www.solvingdynamics365.com/guides/integrating-dynamics-365-with-azure-services Section: Integrations / Data movement Published: 2026-05-01 Dynamics 365 runs on Azure and inherits Azure's cloud services as natural integration neighbours. The right patterns depend on what kind of work the integration does. Three or four canonical shapes cover almost everything. ## Azure Logic Apps Microsoft's iPaaS-grade orchestration service. Logic Apps connectors for Dynamics 365 (Sales/CS/FS/etc. via Dataverse), Business Central, and Finance/SCM are mature. Use Logic Apps for **asynchronous, multi-system integrations** with non-trivial transformations, retries, and parallel branches. Strong fit for cross-system business processes — "when an Account is upgraded in Dynamics, provision the customer in a partner SaaS and write back the IDs to Dataverse". ## Azure Functions Serverless code, billed per execution. Use Functions for **custom transformation, lightweight APIs in front of D365, and small webhooks**. A typical pattern: a Function exposes a HTTP endpoint that incoming partner systems call; the Function authenticates, transforms, and writes to Dataverse via the SDK. Functions are also the natural home for plug-in alternatives — running asynchronously without consuming Dataverse plug-in resources. ## Azure Service Bus Reliable, queued messaging. Dataverse supports **Service Bus integration as a step**: when a record changes, Dataverse publishes a message to a Service Bus queue or topic for downstream consumers. Use Service Bus for **decoupled, high-volume, asynchronous notification** — Dataverse fires-and-forgets, consumers pull at their own pace. Resilient to transient consumer outages. ## Azure Event Grid Lightweight pub/sub for event-driven architectures. The newer alternative to Service Bus integration for some scenarios, especially when many independent subscribers care about the same events. ## Azure API Management (APIM) A façade in front of D365 (and other) APIs that adds rate limiting, authentication via subscription keys or OAuth, request shaping, caching, and developer-portal publication. Use APIM when **external partners or many internal teams call D365 APIs**, and you need centralised governance. ## Azure Data Factory / Synapse / Fabric For **bulk data integration** — initial migration, ongoing ETL, analytics extracts — ADF and Synapse pipelines orchestrate data movement using D365 entity connectors. Fabric is increasingly the destination for analytics workloads via Synapse Link. **The decision tree.** - Real-time, low-volume orchestration → Logic Apps. - High-volume eventing → Service Bus / Event Grid. - Custom code or transformation → Functions. - API governance → APIM in front of Functions/Logic Apps. - Bulk data → ADF or Synapse Link. ## The anti-pattern Doing all of the above with custom code hosted in a single VM. It works for a quarter, then becomes unmaintainable. Use managed Azure services for everything; pay the small overhead premium. ## Where to go next Service by service: [Azure Functions](https://www.solvingdynamics365.com/guides/azure-functions-for-dynamics-365), [Logic Apps](https://www.solvingdynamics365.com/guides/logic-apps-with-dynamics-365), [Service Bus](https://www.solvingdynamics365.com/guides/azure-service-bus-integration-with-dataverse), [APIM in front of Dataverse](https://www.solvingdynamics365.com/guides/apim-in-front-of-dataverse), and [Fabric](https://www.solvingdynamics365.com/guides/microsoft-fabric-and-dynamics-365). The decision that precedes all of them — low-code or Azure — is [Azure vs Power Platform](https://www.solvingdynamics365.com/guides/azure-vs-power-platform-when-to-use-which). --- # Integrating Dynamics 365 with custom mobile apps When the Power Apps mobile app and Field Service mobile are not enough — building a native or cross-platform app against Dataverse and Business Central. Source: https://www.solvingdynamics365.com/guides/integrating-dynamics-365-with-custom-mobile-apps Section: Integrations / API & identity Published: 2026-09-02 Most mobile needs on Dynamics 365 are met by apps Microsoft already ships: the Power Apps mobile app for model-driven and canvas apps, the Field Service mobile app, the Sales mobile app, the Business Central mobile app, and the Warehouse Management app for F&O. Our [Dynamics 365 mobile strategy](https://www.solvingdynamics365.com/guides/dynamics-365-mobile-strategy) guide covers when each fits. This guide is about the remaining cases, where an organisation decides to build its own app, and about what integrating that app with Dynamics 365 actually involves. ## When a custom app is justified - **Customers or the public are the users.** Microsoft's mobile apps are for licensed internal users. A customer-facing app for booking, tracking, or self-service needs its own identity model and cannot put a Dynamics 365 licence in every customer's hand. - **The experience is the product.** A consumer-grade UX, hardware integration (scanners, sensors, payment terminals), or platform features the Power Apps container does not expose. - **The Dynamics 365 part is small.** The app does many things and Dynamics 365 is one data source among several. Wrapping all of it in a canvas app would be backwards. - **Offline needs exceed what the platform offers.** Field Service mobile and canvas offline are capable but opinionated; some workloads need full control of the local store and sync logic. If none of those apply, build in Power Apps. A custom app costs an order of magnitude more to maintain, and the platform apps get better every release without your involvement. ## The integration surface For Dataverse-based apps (Sales, Customer Service, Field Service, custom tables), the app talks to the Dataverse Web API, an OData v4 REST endpoint. For Business Central, it is the API v2.0 pages or custom API pages, also OData. For Finance and Operations, data entities over OData or custom services. All three are HTTPS and JSON, and all three have request throttling that a chatty mobile app will hit. See [batch operations in the Dataverse Web API](https://www.solvingdynamics365.com/guides/batch-operations-in-the-dataverse-web-api) for how to reduce round trips. The first architectural decision is whether the app calls Dynamics 365 directly or goes through a backend of your own. For internal users with Entra ID accounts and a licence, direct calls with delegated authentication are acceptable. For customers, for any app you cannot fully trust, and for any app that needs to combine data from several systems, put an API in front: an Azure Function app or a small web API, fronted by API Management, that holds the service identity and applies its own authorisation. See [APIM in front of Dataverse](https://www.solvingdynamics365.com/guides/apim-in-front-of-dataverse) and [API gateway patterns](https://www.solvingdynamics365.com/guides/api-gateway-patterns-for-dynamics-365). This is also where the licensing question gets resolved: an external user reaching Dataverse through a multiplexing backend still needs an appropriate licence position, and the backend should be designed with that reviewed rather than discovered at audit. ## Authentication Internal users: MSAL on the device, an app registration with delegated Dataverse permissions, and the user's own Entra ID sign-in. The user's Dataverse security roles apply, which is what you want. Conditional access and Intune app protection policies apply too, if the app is registered for them. External users: Entra External ID or Azure AD B2C on the device for the customer's identity, exchanged at your backend for a call to Dataverse under a service principal, with your backend enforcing that the customer only sees their own rows. See [B2C authentication with Dynamics 365](https://www.solvingdynamics365.com/guides/b2c-authentication-with-dynamics-365). Never ship a client secret in a mobile app; assume anything in the binary is public. ## Offline and sync This is where custom apps earn their cost and where they fail. A local store (SQLite is the usual choice), a sync engine that pulls changes since a watermark and pushes local edits, and conflict handling for the cases where the server changed too. Dataverse supports this pattern through [change tracking](https://www.solvingdynamics365.com/guides/change-tracking-in-dataverse), which returns only what changed since a token; use it rather than polling full tables. Business Central has no change tracking on standard APIs, so a modified-date filter on custom API pages is the practical equivalent. Design the conflict rules per table before writing the sync. "Server wins" is fine for reference data; "last edit wins with an audit record" is usually right for field-entered data; some tables need the user to choose. See [canvas app offline mode](https://www.solvingdynamics365.com/guides/canvas-app-offline-mode) for how the platform handles it, which is a reasonable model to copy. ## Framework choice .NET MAUI is the natural fit for teams already in the Microsoft ecosystem, with MSAL and the Dataverse SDK available. React Native and Flutter are equally viable; the Dynamics 365 side is plain REST and does not care. Pick what the team can maintain for five years, because that is how long the app will live. ## Cost of ownership An app store presence, OS version churn, device testing, certificate renewals, and the Dynamics 365 API evolving underneath. Budget a permanent fraction of a developer, not a one-off project. Organisations that do not have that budget should not build a custom app. ## What breaks in practice Token expiry handled badly, so users are logged out mid-task. Sync that works on Wi-Fi and fails on a real mobile network. API throttling during a morning login storm. A Dataverse column renamed by an administrator who did not know an app depended on it. App store review delays on the day a critical fix is needed. ## Stability verdict The APIs are stable and well documented, and the authentication libraries are mature. The instability is entirely in the app you build and the sync you own. A custom app justified by one of the reasons above, with a backend in front of Dynamics 365 and a maintenance budget, is a sound pattern. One built because someone did not like the look of the Power Apps mobile app will be regretted. --- # Integrating Dynamics 365 with DocuSign and Adobe Acrobat Sign E-signature patterns for Dynamics 365 Sales, Customer Service, and Business Central — the vendor-built apps, the Power Automate route. Source: https://www.solvingdynamics365.com/guides/integrating-dynamics-365-with-docusign-and-adobe-sign Section: Integrations / Third-party systems Published: 2026-09-02 Quotes, contracts, order confirmations, and work completion forms all end in a signature, and the signature almost always happens in DocuSign or Adobe Acrobat Sign rather than anything Microsoft ships. Both vendors have invested in Dynamics 365 for years, so the integration options are mature. The choice between them is less about capability and more about how deeply you want signing woven into the CRM, and how much you trust a vendor-managed solution in your environment. ## Route 1: the vendor's Dynamics 365 app Both DocuSign and Adobe offer a managed solution from AppSource that installs into Dataverse. Each adds a "send for signature" command to the ribbon on the tables you configure, a status table that tracks envelopes or agreements, and a pane on the record showing who has signed and when. Templates can be pre-mapped to Dynamics 365 fields so the recipient's name, the quote total, and the account address populate without anyone typing. When signing completes, the signed PDF is attached back to the record, typically as a note or, better, to the SharePoint folder if [SharePoint document management](https://www.solvingdynamics365.com/guides/sharepoint-document-management-for-dynamics-365) is enabled. This is the route most Sales teams should take. It is supported by the vendor, it keeps users inside the form, and it handles the status polling and webhook plumbing for you. The downsides are real. The managed solution has its own release cadence and occasionally lags a Dynamics 365 wave. It adds tables and a plug-in set to your environment that you did not write. Customising the behaviour beyond what its configuration allows means working around it rather than with it. And licensing is separate: the vendor's e-signature plan plus, in some cases, a specific tier for the CRM connector. ## Route 2: Power Automate with the vendor connector Both vendors have premium Power Automate connectors. A flow triggers on a Dataverse event (quote activated, work order completed), generates or fetches the document, creates the envelope or agreement with the recipients from the record, and a second flow, triggered by the vendor's completion event, retrieves the signed PDF and stores it. Status updates flow back to a custom column. This route suits organisations that want signing to happen without a user clicking anything (automated order confirmations, renewal contracts) or that need signing on tables and processes the vendor app does not cover, such as Business Central documents or a Power Pages flow. It is also the route when the AppSource solution is not permitted in your environment. You are now maintaining the integration. Envelope creation, template mapping, error handling, and the completion webhook are yours. See [Power Automate connectors for Dynamics 365](https://www.solvingdynamics365.com/guides/power-automate-connectors-for-dynamics-365) for the licensing and limits of premium connectors. ## Route 3: the vendor's REST API from code An Azure Function or a plug-in calling the DocuSign eSignature API or the Adobe Sign API directly. Justified when the document generation is complex (multi-document envelopes, conditional fields, embedded signing inside a portal) or when volume makes flow runs expensive. The APIs are well documented and the SDKs are decent. Most organisations do not need this. ## Business Central Business Central has no first-party e-signature feature. ISV apps on AppSource bridge to both vendors for sales quotes, orders, and purchase documents, and the Power Automate route works for anything you can render as a PDF from a report. For most small businesses the ISV app is the pragmatic choice; for anyone already running flows against Business Central, the connector route avoids another per-user licence. ## Where the signed document should live Not in Dataverse as a note attachment, unless the volume is small. Signed contracts are large PDFs, kept for years, and Dataverse file storage is expensive; see [Dataverse storage types](https://www.solvingdynamics365.com/guides/dataverse-storage-types-explained). Put them in SharePoint through the standard document integration, or in the vendor's own archive with a link on the record, or in a dedicated document store if the organisation has one. Keep the audit certificate the vendor produces alongside the PDF; that is what a dispute will require. ## Document generation is the hidden project The signature step is easy. Producing the document that gets signed is where the effort goes. Word templates in Dynamics 365 handle simple quotes; see [document templates and Word mail merge](https://www.solvingdynamics365.com/guides/document-templates-and-word-mail-merge). Complex contracts with clause libraries and conditional sections need a document generation tool, and that tool's output must be mapped into the vendor's template with signature tabs in the right places. Budget for this separately from the integration. ## What breaks in practice Recipients whose email on the record is stale, so the envelope goes to the wrong person and the status shows "sent" forever. Templates edited in the vendor's portal without updating the field mapping, so merged fields go blank. Completion webhooks blocked by a firewall change or a DLP policy, so documents sign but never come back. Users who send documents from the vendor's own app rather than from Dynamics 365, so the record never knows. Build a reconciliation: a weekly list of envelopes in "sent" state older than a threshold, and a check that every completed envelope has a stored PDF. ## Stability verdict The vendor apps are mature and stable, with the usual caveat that a managed third-party solution in your environment is a dependency you should track. The Power Automate route is stable when the flows are small and monitored. Neither vendor is going anywhere, and the choice between DocuSign and Adobe should be made on commercial terms and the rest of the organisation's tooling, not on the Dynamics 365 integration, which is comparable for both. --- # Integrating Dynamics 365 with HubSpot: marketing sync patterns How to run HubSpot for marketing alongside Dynamics 365 Sales — the native HubSpot sync, what it moves, where it stops. Source: https://www.solvingdynamics365.com/guides/integrating-dynamics-365-with-hubspot Section: Integrations / Third-party systems Published: 2026-09-02 A common landscape: marketing runs HubSpot, sales runs Dynamics 365 Sales, and the two teams need leads, contacts, and engagement to flow between them without a nightly spreadsheet. HubSpot is popular enough that this integration is well-trodden, and the patterns are clear. The question is less "can it be done" and more "which of the three ways to do it matches how much you care about data quality". If the question is whether to keep HubSpot at all or move marketing onto Customer Insights - Journeys, that is a different discussion: see [Customer Insights - Journeys vs HubSpot](https://www.solvingdynamics365.com/guides/customer-insights-journeys-vs-hubspot). ## Pattern 1: HubSpot's native Dynamics 365 sync HubSpot ships a Dynamics 365 integration in its marketplace, managed from the HubSpot side. It syncs contacts, companies, and deals (mapped to opportunities) in either direction, with field mappings you configure in HubSpot and sync rules that decide which system wins for each field. What it does well: it exists, it is supported by HubSpot, marketing can administer it without a developer, and for the standard objects it gets a mid-sized organisation running in a day. Where it stops: custom Dataverse tables, complex ownership rules, and anything that depends on Dynamics 365 business logic firing correctly. The sync writes through the Dataverse API as an application user, so plug-ins and flows do fire, but the sync engine has no idea about your business process flow stages or your lead qualification rules. Activity sync is limited. Field mapping is per-field and does not support transformations beyond simple ones, so a picklist that differs between the two systems needs manual alignment. For most organisations this is the right starting point. Try it before building anything. ## Pattern 2: Power Automate with the HubSpot connector The Power Automate HubSpot connector plus the Dataverse connector lets you build the sync yourself as flows. This buys you control over exactly what triggers what, transformation logic in the flow, and the ability to involve custom tables and Dynamics 365-specific concepts such as lead qualification. The cost is that you now own a sync engine built from flows. Retries, conflict handling, and backfills are yours to design, and a bulk update on the HubSpot side will trigger a flood of flow runs that can exhaust your daily limits. This pattern suits a narrow, well-defined feed, such as "new marketing-qualified leads in HubSpot become leads in Dynamics 365 with these five fields", rather than a full bidirectional contact sync. See [Power Automate connectors for Dynamics 365](https://www.solvingdynamics365.com/guides/power-automate-connectors-for-dynamics-365) for the platform's limits. ## Pattern 3: iPaaS or custom code Boomi, Workato, Zapier, Make, Azure Functions against both APIs. The right answer when the data model is genuinely bespoke, when volumes are high, or when you need one integration platform across many systems anyway. Rarely justified for HubSpot alone. ## The lead hand-off is the design problem Whatever the tooling, the decision that matters is where the lead lives at each stage. The pattern that works: - HubSpot owns the contact while it is a marketing prospect. Email engagement, form fills, and scoring stay in HubSpot. - When HubSpot marks the contact as marketing-qualified, a lead is created in Dynamics 365 with the HubSpot contact ID stored on it. - Sales works the lead in Dynamics 365. Qualification creates the account, contact, and opportunity. - The resulting Dynamics 365 contact and account are pushed back to HubSpot with their Dataverse IDs, so future marketing activity can be attributed and so HubSpot stops treating the person as a prospect. - Opportunity stage and closed outcome flow back to HubSpot for marketing attribution reporting. The two mistakes are syncing every HubSpot contact into Dynamics 365 as a lead, which fills the CRM with people sales will never call, and syncing nothing back, which leaves marketing blind to what happened after the hand-off. ## Matching and duplicates Email is the natural match key and it is the wrong one to rely on alone. People use multiple addresses, shared inboxes exist, and HubSpot's contact model is person-centric while Dynamics 365 separates leads from contacts. Store the cross-system IDs explicitly on both sides, use a [Dataverse alternate key](https://www.solvingdynamics365.com/guides/dataverse-alternate-keys) for upserts, and run [duplicate detection rules](https://www.solvingdynamics365.com/guides/duplicate-detection-rules-in-dataverse) on the Dynamics 365 side as a safety net. ## Consent and unsubscribes Marketing consent must be a single source of truth. If HubSpot manages consent and Dynamics 365 users can also send bulk email, an unsubscribe in one system must reach the other within a time the legal team accepts. This is the one field that should sync in both directions promptly, and it deserves its own monitoring. ## What breaks in practice Ownership. HubSpot owners and Dynamics 365 users are separate identity sets; map them explicitly and decide who owns records when the mapping fails. Company matching. HubSpot creates companies from email domains automatically; Dynamics 365 accounts are created by people. Expect a reconciliation exercise in the first month. Sync loops. A field updated by the sync triggers a flow that updates a field that triggers the sync. Mark integration writes with an application user and filter on it. ## Stability verdict The native HubSpot sync is stable for standard objects and is where most organisations should stay. Custom-built syncs are stable when narrow and fragile when they try to mirror everything. Sync the hand-off, not the databases. --- # Integrating Dynamics 365 with Mailchimp and SendGrid Two different email problems — bulk marketing through Mailchimp and transactional email through SendGrid — and the patterns for each against Dynamics 365 Sales. Source: https://www.solvingdynamics365.com/guides/integrating-dynamics-365-with-mailchimp-and-sendgrid Section: Integrations / Third-party systems Published: 2026-09-02 Mailchimp and SendGrid get mentioned in the same breath and solve almost opposite problems. Mailchimp is a marketing platform: audiences, campaigns, templates designed by a marketer, and consent management. SendGrid is a delivery engine: an API that sends the email your system tells it to, at volume, with deliverability tooling. Dynamics 365 integrates with both, but for different reasons, and confusing the two leads to marketing emails sent from a transactional pipe with no unsubscribe link, or order confirmations built as Mailchimp campaigns. ## Mailchimp: audience sync, not email sync The integration people want is "keep the Mailchimp audience in step with Dynamics 365 contacts". The pattern that works: - Dynamics 365 is the source of who exists. Contacts with a marketing consent flag and a valid email flow to a Mailchimp audience, with segment tags derived from Dynamics 365 fields (customer type, region, product interest). - Mailchimp is the source of engagement and consent changes. Unsubscribes, bounces, and campaign opens flow back to Dynamics 365, at minimum as a consent field update and ideally as activity records for the sales team's benefit. - Campaigns are designed and sent in Mailchimp. Nobody tries to trigger Mailchimp campaigns from Dynamics 365 workflows; that is not what Mailchimp is for. Tooling: the Power Automate Mailchimp connector handles member add and update. Mailchimp's own marketplace has Dynamics 365 connectors from third parties that do the full bidirectional sync with field mapping and are usually worth their subscription for a marketing team that does not want to own flows. For large audiences, batch through the Mailchimp API rather than one flow run per contact. The consent field is the one that must be right. An unsubscribe in Mailchimp that does not reach Dynamics 365, followed by a sales rep's bulk email from Dynamics 365, is a compliance incident. Sync that field both ways, promptly, and test it. See [email templates and bulk email in Sales](https://www.solvingdynamics365.com/guides/email-templates-and-bulk-email-in-sales) for what Dynamics 365 itself can send. If the organisation is deciding whether to keep Mailchimp or move marketing onto Customer Insights - Journeys, the comparison with [HubSpot](https://www.solvingdynamics365.com/guides/customer-insights-journeys-vs-hubspot) applies in most respects; the trade-off is native Dataverse integration against a tool the marketing team already knows. ## SendGrid: transactional email from your own logic SendGrid is for email that a process sends: order confirmations, password resets on a portal, case update notifications, invoice delivery. Dynamics 365 can send these itself through its server-side sync or through Business Central's SMTP and Microsoft 365 email setup, and for modest volumes it should. SendGrid enters when volume is high, when deliverability tooling matters (dedicated IPs, domain authentication, bounce and spam handling), when the sending system is a portal or an Azure Function rather than Dynamics 365 itself, or when the mail must not go through the corporate Exchange tenant. Patterns: - **Power Automate with the SendGrid connector.** A flow on a Dataverse event calls SendGrid with a dynamic template ID and the merge data. Simple and fine for hundreds of emails a day. - **Azure Function calling the SendGrid API.** For volume, for attachments generated on the fly, and for retries and logging that flows make awkward. - **Business Central through SMTP.** SendGrid exposes an SMTP relay, and Business Central's email accounts feature can use it as an SMTP account, which routes document sending through SendGrid with no code. See [email setup in Business Central](https://www.solvingdynamics365.com/guides/email-setup-and-outgoing-email-in-business-central). Events back: SendGrid's event webhook reports delivered, bounced, opened. Receive it in an HTTP-triggered flow or function and write the status to the record. Bounces in particular should update the contact so that the next process does not send to a dead address. ## Which system is the sender Every email leaving on the organisation's behalf needs a decision about the sending domain and authentication (SPF, DKIM, DMARC). Mailchimp and SendGrid both need domain authentication configured, and if Dynamics 365 or Microsoft 365 also sends from the same domain, the DNS records must accommodate all of them. Deliverability failures traced to a missing DKIM record for a third sender are common. Our [email deliverability](https://www.solvingdynamics365.com/guides/email-deliverability-for-customer-insights-journeys) guide covers the DNS side, and it applies regardless of which tool sends. ## Activity tracking Sales users want to see marketing and transactional emails on the contact timeline. For Mailchimp, campaign sends and opens can be written back as custom activities; keep them summarised, because one activity per open across a large audience will bloat Dataverse quickly. For SendGrid transactional mail, write one activity per email at most, and only for emails a human would care to see. ## What breaks in practice Consent drift, as above. Audience sync that creates Mailchimp members for contacts who never consented. Merge fields in a SendGrid template that were renamed in Dataverse. Bounce events that nobody consumes, so the same dead address is emailed monthly. DNS records that were correct for two senders and broke when the third was added. ## Stability verdict Both connectors are stable and both vendors' APIs are mature. The Mailchimp sync is stable when narrow (contacts and consent, both directions) and fragile when it tries to mirror engagement in detail. SendGrid via an Azure Function or SMTP relay is as stable as any transactional email pipe gets. The organisational instability is ownership: marketing owns Mailchimp, IT owns SendGrid, and the consent field sits between them. --- # Integrating Dynamics 365 with NetSuite during a migration The coexistence and data-extraction patterns for moving from NetSuite to Dynamics 365 — SuiteTalk, SuiteQL, saved searches, parallel running. Source: https://www.solvingdynamics365.com/guides/integrating-dynamics-365-with-netsuite-during-migration Section: Integrations / Third-party systems Published: 2026-09-02 Nobody integrates NetSuite with Dynamics 365 for the long term. They integrate the two because they are leaving NetSuite and the leaving takes longer than one weekend. This guide is about the integration work inside that window: getting data out of NetSuite reliably, keeping the two systems coherent while both are live, and sequencing the cutover so the integration can be switched off cleanly. For the functional side of the migration, the module mapping and the licensing arithmetic, see [migrating from NetSuite to Business Central](https://www.solvingdynamics365.com/guides/migrating-from-netsuite-to-business-central). ## Getting data out of NetSuite NetSuite offers more extraction routes than most systems, and they are not equivalent. **Saved searches exported to CSV.** The route every NetSuite administrator already knows. Fine for one-off extracts of master data and for reconciliation reports. Poor for anything repeated, because saved searches are hand-maintained and a column added in week three quietly changes the file layout. **SuiteAnalytics Connect (ODBC/JDBC).** Direct SQL-style access to NetSuite's data model. This is the best route for bulk historical extraction: you can pull years of transaction lines in one pass, join across records, and script it. It needs a separate licence and a service account, and the schema is NetSuite's internal one, so expect to spend time understanding transaction line tables. **SuiteTalk REST and SOAP web services.** The API for record-level operations. Use them for the live sync during the overlap window, not for bulk history; concurrency governance limits will throttle a naive bulk pull. **SuiteQL through the REST API.** A query language over the same model SuiteAnalytics exposes, but callable over REST without the ODBC licence. Good middle ground for scripted, repeatable extracts when you cannot get Connect approved. The practical answer for most projects: SuiteAnalytics Connect or SuiteQL for history, SuiteTalk for anything that must stay in sync during parallel running, and saved searches for reconciliation. ## Getting data into Dynamics 365 Business Central takes bulk loads through configuration packages (RapidStart) and, for larger volumes, through API pages or an extension-based import. Finance and Operations takes them through the Data Management Framework; see our [DMF deep dive](https://www.solvingdynamics365.com/guides/data-management-framework-deep-dive). Both prefer clean, pre-mapped files. Do the transformation between extract and load in a staging database or a proper ETL tool, not in Excel, so you can rerun it. You will rerun it. ## What to migrate versus what to leave Open items and balances, yes: open AR and AP, open sales and purchase orders, inventory quantities and costs, fixed asset registers, and opening trial balances. Closed history is the argument. Loading years of posted NetSuite transactions into Dynamics 365 as real postings is expensive, distorts your new ledger with old account structures, and rarely earns its keep. The usual compromise is to load summarised historical balances by period and keep NetSuite in read-only mode, or export its history to a reporting database, for lookups. NetSuite customisations, SuiteScripts, and custom records need a decision each: rebuild, replace with standard functionality, or drop. The migration is the one chance to drop things. ## Coexistence during parallel running The safest overlap is short and one-directional. Pick the go-live date, freeze master-data creation in NetSuite a week before, load Dynamics 365, and run the cutover. If the business insists on a phased approach by entity or subsidiary, you now need a live sync for whatever is shared across the boundary, which in practice is customers, vendors, items, and intercompany transactions. For that sync, one system owns each record type. NetSuite keeps ownership of subsidiaries still running on it; Dynamics 365 owns the migrated ones. Master data shared by both goes one way from the system that is still the long-term home. Building bidirectional master-data sync for a temporary overlap is money you will not get back. Tooling for the live sync is the usual set: Power Automate with an HTTP action against SuiteTalk for low volumes, an iPaaS such as Celigo (which is deeply NetSuite-native), Boomi, or Workato for anything with more than a couple of objects, and Azure Functions if you would rather own code than a subscription. ## Reconciliation is the real deliverable Every load needs a reconciliation report that a finance person, not an integration developer, can read. Record counts by type, control totals for balances, and a sample-level comparison of key records. Run it after every trial load, and make sign-off on it a formal gate. Migrations that go wrong are almost never wrong because of the extraction technology; they are wrong because nobody compared the two trial balances properly before go-live. ## Cutover sequencing The order that works: freeze NetSuite master data, extract and load master data, reconcile, extract and load open transactions and balances as of the cut date, reconcile again, open Dynamics 365 for transactions, switch NetSuite to read-only. If a live sync existed during a phased overlap, disable it before the final balance load, not after, so the two systems cannot drift during the reconciliation window. Keep NetSuite access for at least one full audit cycle. Contracts often lapse before the auditors ask their questions. ## What breaks in practice Currency and tax setups that were implicit in NetSuite becoming explicit in Dynamics 365, and turning out to have been wrong all along. Item costing methods that do not match, so inventory values differ at cutover and need an explicit revaluation. Subsidiary structures in NetSuite OneWorld that map awkwardly onto Business Central companies or F&O legal entities. None of these are integration problems; they surface through the integration and are solved in the design. ## Stability verdict The extraction tools are mature and the load tools on the Dynamics 365 side are mature. The risk sits entirely in scope decisions and reconciliation discipline. A migration that treats the integration as a short-lived tool, with a clear switch-off date, goes well. One that lets a "temporary" sync become permanent ends up running two ERPs. --- # Integrating Dynamics 365 with SAP S/4HANA: two-tier ERP patterns How Dynamics 365 Finance, Supply Chain, or Business Central coexists with SAP S/4HANA at group level — what to integrate, which SAP interfaces to use. Source: https://www.solvingdynamics365.com/guides/integrating-dynamics-365-with-sap-s4hana Section: Integrations / Third-party systems Published: 2026-09-02 Two-tier ERP is the arrangement where a group runs SAP S/4HANA at headquarters and something lighter in its subsidiaries, plants, or newly acquired businesses. Dynamics 365 Finance and Supply Chain Management, and increasingly Business Central, are the usual candidates for that second tier. The integration between the tiers is what makes the arrangement work, and it is where most of the effort goes. ## What two-tier actually means The group ledger, consolidation, treasury, and often central procurement live in SAP. The subsidiary runs its day-to-day operations in Dynamics 365: local sales, purchasing, inventory, and its own statutory ledger. The integration moves a small, well-defined set of data between them. If you find yourself designing a real-time replication of every transaction into SAP, you have not designed a two-tier landscape; you have designed a very expensive way of running SAP twice. ## The data that crosses the boundary **Financial results upwards.** Trial balances or summarised journal lines, mapped from the subsidiary's chart of accounts to the group chart, on a monthly or weekly cadence. This is the one integration every two-tier landscape has, and it is batch by nature. Nobody consolidates in real time. **Master data downwards.** Group-managed customers, vendors, and items pushed from SAP to the subsidiary so that intercompany trading uses the same identifiers. Whether SAP or Dynamics 365 owns which master data needs a written decision per entity type; "SAP owns everything" is common and usually wrong for local-only vendors. **Intercompany transactions both ways.** A purchase order in the subsidiary becomes a sales order in SAP, and the invoice flows back. This is the integration that looks simple on a whiteboard and is not. Pricing, tax, currency, and partial deliveries all need explicit handling. **Reference data downwards.** Exchange rates, group cost centres, reporting dimensions. Low volume, high annoyance when they drift. ## SAP-side interfaces You will be talking to one of these: - **OData services** on S/4HANA (the SAP Gateway APIs). The most approachable option and the one the Power Platform SAP ERP connector and most iPaaS tools use. Coverage is broad but not complete. - **IDocs** for classic asynchronous document exchange. Old, robust, and still the backbone of many SAP integrations. Good for orders and invoices; painful to debug without SAP-side skills. - **BAPIs / RFCs** for synchronous function calls. Powerful, requires RFC connectivity and an on-premises data gateway or equivalent when S/4HANA is not internet-exposed. - **SAP Integration Suite** (formerly CPI) as SAP's own middleware. If the group already runs it, expect the SAP team to insist it sits in the middle. The Dynamics 365 side is easier: data entities and the OData endpoint in F&O (see [custom services and OData in F&O](https://www.solvingdynamics365.com/guides/custom-services-and-odata-in-f-and-o)), or API pages in Business Central. ## Choosing the middle layer Something should sit between the two ERPs. Direct point-to-point calls between SAP and Dynamics 365 are brittle and put SAP credentials in places the SAP team will not like. For groups with an SAP Integration Suite investment, use it. For groups with an Azure-first posture, Logic Apps or Azure Functions plus Service Bus is the natural fit (see [Logic Apps with Dynamics 365](https://www.solvingdynamics365.com/guides/logic-apps-with-dynamics-365) and [Azure Service Bus with Dataverse](https://www.solvingdynamics365.com/guides/azure-service-bus-integration-with-dataverse)). For groups that already own Boomi or MuleSoft, use that. The technology matters less than having one place where mappings, retries, and logs live. The Power Platform SAP ERP connector deserves a mention because it is tempting: it lets a Power Automate flow call a BAPI directly. It works for low-volume tasks like looking up an SAP vendor from a Dynamics 365 form. It is not a platform for financial postings. ## Chart of accounts mapping This is the design decision that outlives everything else. The subsidiary needs a local chart for statutory reporting and a mapping to the group chart for consolidation. In F&O, financial dimensions and a mapping table handle this well; in Business Central, a dedicated mapping table in an extension is the usual approach. Do the mapping in the middle layer or in Dynamics 365 before extraction, not inside SAP, so the SAP team receives clean group-chart postings and does not need to know the subsidiary's structure. ## Intercompany in practice The order-to-invoice loop between tiers is where projects overrun. Settle these before building: - Which system generates the intercompany document number, and does the other system store it as a reference? - What happens on a partial delivery from SAP against a subsidiary purchase order? - Whose price list wins, and how are transfer-pricing adjustments posted? - Is tax calculated in the seller's system only, with the buyer trusting the invoice? Answers that involve "the finance team will fix it manually at month end" are acceptable for launch and a problem by year two. ## What stalls two-tier projects The SAP team and the Dynamics 365 team having different change calendars. SAP release cycles are slow and heavily governed; Dynamics 365 updates arrive monthly. Interface contracts need versioning and a test environment on both sides that actually match production. Master data governance being unowned. If nobody owns the group vendor list, both systems will accumulate duplicates and the intercompany matching will decay. Underestimating SAP access. Getting a service user with the right authorisations on S/4HANA, in a group where SAP security is tightly controlled, can take longer than building the integration. ## Stability verdict Financial-results-up and master-data-down are mature, well-understood patterns and you should expect them to run unattended once live. Automated intercompany order-to-invoice is achievable but is a proper project with SAP-side involvement, not a connector you switch on. If you are still deciding whether the second tier should be Dynamics 365 at all, read [Dynamics 365 vs SAP](https://www.solvingdynamics365.com/guides/dynamics-365-vs-sap) first. --- # Integrating Dynamics 365 with Stripe and PayPal Payment integration patterns across Dynamics 365 — pay-by-link from Business Central and Sales, webhook-driven reconciliation, portal checkout. Source: https://www.solvingdynamics365.com/guides/integrating-dynamics-365-with-stripe-and-paypal Section: Integrations / Third-party systems Published: 2026-09-02 Taking a payment from inside Dynamics 365 is a request that arrives from every direction: finance wants a "pay now" link on invoices, sales wants deposits on quotes, service wants to charge for a call-out, and the web team wants checkout on a portal. Stripe and PayPal are the two providers most organisations already have accounts with. The integration patterns are well understood, and the first thing to understand is that none of them involve Dynamics 365 ever touching a card number. ## The rule that shapes everything Card data stays with the payment provider. Dynamics 365 sends the provider an amount and a reference, the customer pays on the provider's hosted page or element, and the provider tells Dynamics 365 the outcome. Any design that has card details entering a Dataverse column, a Business Central field, or a canvas app text box is a PCI DSS scope problem and should be stopped before it is built. Business Central's own guidance on [credit card handling](https://www.solvingdynamics365.com/guides/credit-card-handling-in-business-central) reflects the same principle. ## Pattern 1: pay-by-link on documents The simplest and most valuable pattern. A sales invoice or quote carries a link to a hosted payment page; the customer clicks, pays, and a webhook from the provider marks the document paid. In Business Central, the standard payment services feature and the PayPal extension have existed for years for exactly this: a PayPal Payments Standard link on the invoice email and PDF. Stripe is covered by ISV extensions on AppSource that do the same with Stripe Checkout, and some add automated application of the payment to the customer ledger when the webhook arrives. Check whether the extension posts the payment journal for you or only records the reference; the former saves the finance team real time. In Dynamics 365 Sales, there is no first-party feature. The route is a Power Automate flow that creates a Stripe Payment Link or a PayPal invoice when a quote reaches a stage, writes the URL to the record, and includes it in the email template. The completion webhook, received by an HTTP trigger flow or an Azure Function, updates the quote and, if you have order-to-cash integrated, tells the ERP. ## Pattern 2: portal checkout Customers paying on a Power Pages portal, for a service, a renewal, or an event. Stripe Elements or PayPal Checkout are embedded in the portal page as client-side components, so the card data goes straight to the provider. The portal calls a server-side endpoint, usually an Azure Function, to create the payment intent with the amount from Dataverse and to receive the confirmation. Never create the payment intent client-side with a secret key in the page. See [Power Pages for customer portals](https://www.solvingdynamics365.com/guides/power-pages-for-customer-portals) for the portal side. ## Pattern 3: stored payment methods and recurring charges Subscriptions and repeat billing. The provider stores the payment method and gives you a customer token; Dynamics 365 stores the token, never the card. Charges are initiated server-side against the token, typically from a scheduled Azure Function or a flow that reads due items from Dataverse or Business Central. Stripe Billing and PayPal Subscriptions can run the schedule themselves, in which case Dynamics 365 just receives the invoice-paid events. Decide early which system owns the billing schedule; two systems both generating charges is a refund exercise waiting to happen. ## Pattern 4: point of sale and field payments Dynamics 365 Commerce has its own payment connector framework and certified processors, and Stripe Terminal or PayPal Zettle are not first-class there; if Commerce is in scope, the choice of processor is a Commerce decision. For Field Service technicians taking a payment on site, the practical pattern is a payment link sent by SMS or email from the work order, or a Stripe Terminal reader driven by a separate app, with the result written back through a flow. ## Reconciliation is the real integration The payment succeeding is the easy half. Money arriving in the bank is net of fees, batched daily, and does not match invoice by invoice. Stripe and PayPal both provide payout reports and APIs. The finance team needs a process that imports the payout, applies the individual payments to the customer ledger, and posts the fees. Business Central handles this well through the bank reconciliation and payment journal tooling if the extension records the provider's transaction ID on each payment; without that ID, matching is manual. For F&O, it is a bank statement import plus a matching rule. Do not consider the integration done until finance can close a month without touching a spreadsheet. ## Webhooks and idempotency Providers retry webhooks. Your receiver will see the same event more than once, and sometimes out of order. Store the provider's event ID and ignore repeats; make the "mark as paid" operation safe to run twice. See [idempotency in Dynamics 365 integrations](https://www.solvingdynamics365.com/guides/idempotency-in-dynamics-365-integrations). Verify webhook signatures; an unauthenticated endpoint that marks invoices paid is a fraud vector. ## What breaks in practice Currency mismatches between the document and the provider account. Refunds issued in the provider's dashboard that never reach Dynamics 365. Payment links on documents that were later revised, so the customer pays the old amount. Test mode keys promoted to production. Each of these is a monitoring item, not a rare edge case. ## Stability verdict Pay-by-link and portal checkout are stable, well-trodden patterns with good tooling on both providers' sides. The Business Central extensions are mature; the Sales side is a flow-based build you own. The instability is in reconciliation and in the operational edges, which is where the project time should go. --- # Integrating Dynamics 365 with Twilio for SMS and voice When Twilio is the right choice next to Dynamics 365's own channels, and the patterns for outbound SMS, inbound replies, click-to-call. Source: https://www.solvingdynamics365.com/guides/integrating-dynamics-365-with-twilio Section: Integrations / Third-party systems Published: 2026-09-02 Twilio comes up in Dynamics 365 projects for two reasons. One is that Dynamics 365 Customer Service's own SMS channel supports Twilio as a provider, so contact centres already use it under the hood. The other is that everywhere else in Dynamics 365, there is no built-in SMS or voice at all, and Twilio's API is the quickest way to get a text message or a phone call out of a business process. The patterns are different enough for those two cases that they are worth separating. ## Inside Customer Service: Twilio as a channel provider Customer Service's omnichannel capabilities let agents handle SMS conversations in the agent workspace, with routing, queues, and transcripts like any other channel. Twilio is one of the supported SMS providers: you register a Twilio number and credentials in the channel configuration and the platform handles the rest. Agents never see Twilio. See [WhatsApp and SMS channels in Customer Service](https://www.solvingdynamics365.com/guides/whatsapp-and-sms-channels-in-customer-service) for the channel setup and licensing. For voice, Microsoft's own Azure Communication Services is the native path, and Twilio Voice is not a supported provider for the omnichannel voice channel. Organisations with a Twilio Flex contact centre generally keep Flex and integrate it with Dynamics 365 through Twilio's CRM integration or a custom agent desktop, which is a different project. Our [omnichannel voice](https://www.solvingdynamics365.com/guides/omnichannel-voice-in-customer-service) guide covers the native option. If the requirement is agents having two-way SMS conversations with customers, use the channel. Do not build it. ## Outside Customer Service: Twilio as an API Everything else is process-driven messaging: an appointment reminder from Field Service, a delivery notification from an order, a one-time code from a portal, a "your quote is ready" text from Sales. None of these need an agent, and all of them are an API call. **Power Automate with the Twilio connector.** A flow on a Dataverse event sends an SMS with the connector's send action. This covers most notification scenarios in an afternoon. Keep the message template in an environment variable or a Dataverse configuration table, not hard-coded in the flow. **Azure Function calling the Twilio API.** For volume, for messaging services with sender pools and compliance features, for scheduled sends, and for anything that needs retry logic and logging. Also the route when messages originate from Business Central or F&O, where a flow or a Logic App triggered by a business event calls the function. **Inbound replies.** Twilio delivers inbound SMS to a webhook you configure on the number. An HTTP-triggered flow or a function receives it, matches the sender's number to a contact, and creates an activity or updates a record ("reply YES to confirm" on a work order). Matching by phone number is unreliable enough that the message should carry a reference the reply can echo. **Click-to-call and call logging.** A PCF control or a canvas app on the contact form that initiates a Twilio Voice call from the browser, then writes a phone call activity with duration and outcome when it ends. Twilio Voice's JavaScript SDK makes the call; your control handles the Dataverse side. This is the classic light CTI pattern for Sales teams that do not have a contact centre and do not want one. ## Consent and regulation SMS is regulated more tightly than email in most jurisdictions, and the rules differ by country. Marketing messages need explicit opt-in; transactional messages are usually permitted but must offer a way to stop; sending windows are restricted in some places. Twilio enforces some of this through its messaging service compliance features and through registration requirements for sender IDs and short codes, which take time to obtain and should be started early in the project. Dynamics 365 must hold the consent state and honour it. A contact's SMS consent is a field, the send flow checks it, and a STOP reply updates it. Customer Insights - Journeys has its own consent model for SMS; if it is in use, it should own the consent record and everything else should read from it. ## Cost control Every message costs money and a runaway flow can send thousands. Put a daily send limit in the function or the flow, alert when it is approached, and never trigger a send from a bulk data update without a filter that excludes records touched by the update itself. ## What breaks in practice Numbers stored in Dataverse in inconsistent formats, so half the sends fail; normalise to E.164 on save. Replies from a number that matches several contacts. Sender registration that was not started early enough, so go-live sends from an unregistered number and gets filtered. Twilio credentials in a flow's action rather than a connection or Key Vault; see [Dataverse secrets and Key Vault](https://www.solvingdynamics365.com/guides/dataverse-secrets-and-key-vault-integration). ## Stability verdict Twilio's API is as stable as any in this space, and the Customer Service channel integration is supported and maintained by Microsoft. The flow-based notification pattern is stable at low volume and should become a function at high volume. The parts that move are regulatory: sender registration rules and consent requirements change, and the integration needs an owner who tracks them. --- # Integrating Dynamics 365 with Zapier and Make: when to use them instead of Power Automate Where Zapier and Make (formerly Integromat) fit next to Power Automate for Dynamics 365 — the honest cases for each, the governance problems. Source: https://www.solvingdynamics365.com/guides/integrating-dynamics-365-with-zapier-and-make Section: Integrations / Architecture patterns Published: 2026-09-02 Zapier and Make exist in the same space as Power Automate: connect a trigger in one SaaS product to actions in others, without code. Both have Dynamics 365 and Dataverse connectors. Both are used, sometimes heavily, by teams that also run Dynamics 365. The question a consultant gets asked is whether that is a problem, and the honest answer is that it depends entirely on why the team reached for them and what the automation touches. ## Why teams pick them over Power Automate **They already use them.** A marketing or operations team with fifty Zaps connecting their web forms, ad platforms, and spreadsheets is not going to rebuild those in Power Automate because the company bought Dynamics 365. Adding a Dynamics 365 step to an existing Zap is the path of least resistance. **Connector coverage.** Zapier in particular connects to thousands of niche SaaS tools that Power Automate does not have connectors for. If the integration is "when a booking is made in a small scheduling tool, create a lead", Zapier may be the only no-code option. **Make's visual model.** Make's scenario builder, with its iterators, routers, and data stores, is more expressive than Power Automate's designer for branching and array handling, and some builders simply prefer it. **No Power Platform licensing conversation.** A Zapier plan is a credit card decision. Premium Power Automate connectors and per-flow plans involve the licensing team. None of those are bad reasons. All of them are reasons that lead to automations nobody in IT knows about. ## Why Power Automate is usually the right answer for Dynamics 365 Power Automate is inside the security and governance boundary. It authenticates to Dataverse as the user or a service principal under conditional access, its flows live in solutions and move through environments with ALM, DLP policies govern what it can connect to, and Managed Environments give administrators visibility. The Dataverse trigger is native and fires on the change, not on a polling interval. See [Power Automate connectors for Dynamics 365](https://www.solvingdynamics365.com/guides/power-automate-connectors-for-dynamics-365) and [DLP policies in Power Platform](https://www.solvingdynamics365.com/guides/dlp-policies-in-power-platform). Zapier and Make sit outside that boundary. Their Dynamics 365 connectors authenticate with a user's credentials or an app registration, and from Dataverse's point of view the automation is just an external client calling the API. Whatever that identity can do, the Zap can do. There is no DLP, no solution, and no environment promotion; a Zap built against production is a Zap built against production. For any automation that writes to Dynamics 365 in a way that matters (creates records, updates status, moves money), Power Automate should be the default, and the burden of proof is on the alternative. ## The honest cases for Zapier or Make - **Inbound lead capture from tools without Power Automate connectors.** A web form, a webinar platform, a review site. The Zap creates a lead; nothing more. Low risk, high convenience. - **Outbound notifications to tools the organisation lives in.** Post to a Slack channel when a deal closes. Add a row to a Google Sheet that a partner reads. Read-only from Dynamics 365, and harmless. - **Prototypes.** Proving that an integration is worth building, before building it properly. - **Small organisations with no Power Platform administrator.** If nobody is going to govern Power Automate either, the governance argument is weaker, and the team should use the tool it can operate. ## The cases where they are wrong Anything bidirectional. Anything that updates a record other than by creating it. Anything triggered by a Dynamics 365 change, because both tools poll the API on an interval and will eat API request allowances while adding latency. Anything with personal data leaving the tenant to a third-party platform that legal has not reviewed. Anything the business would notice if it silently stopped. ## Governance patterns that work If the tools are in use and are staying, treat them as external integrations rather than as automation platforms. Give them a dedicated application user with a minimal security role rather than a person's credentials, so that access can be scoped and revoked and so that audit logs show the automation rather than the employee. Inventory the Zaps and scenarios that touch Dynamics 365. Require that anything beyond lead capture and notifications is rebuilt in Power Automate or Azure. Review the inventory quarterly. The identity point is the important one. A Zap running as the sales director's login has the sales director's rights, and it will keep them until someone remembers it exists. ## Migration when it is time Moving a Zap into Power Automate is usually straightforward because Zaps are simple by construction. Make scenarios with iterators and routers map to Apply to each and Condition or Switch actions, and the data store concept maps to a Dataverse table. The work is finding all of them and understanding what they actually do, which is why the inventory matters. ## Stability verdict Both platforms are stable products, and their Dynamics 365 connectors work. The instability is organisational: automations outside the tenant's governance, running on individual credentials, on polling intervals, with no promotion path. Used for the narrow cases above they are fine. Used as the integration platform for Dynamics 365 they are a liability that surfaces at the worst time. For the wider decision between platform-native and external tooling, see [Azure vs Power Platform: when to use which](https://www.solvingdynamics365.com/guides/azure-vs-power-platform-when-to-use-which). --- # Integrating Finance and Operations with Databricks How Dynamics 365 Finance and Supply Chain data reaches Azure Databricks — Synapse Link as the source, Delta Lake as the common format. Source: https://www.solvingdynamics365.com/guides/integrating-finance-and-operations-with-databricks Section: Integrations / Data movement Published: 2026-09-02 Databricks and Dynamics 365 Finance and Supply Chain Management get on better than most pairings, for one reason: Microsoft's current export mechanism for F&O writes Delta Parquet, and Delta is Databricks' native table format. The transport problem that dominates integrations with other warehouses mostly disappears. What remains is the choice of export route, the layering of the lakehouse, and the modelling of F&O's data into something analysts can use. ## The source: Synapse Link with Delta output Synapse Link for Dataverse, with F&O tables and entities selected, lands data in an ADLS Gen2 account you control. Configure it to write in Delta Lake format rather than CSV. Once it does, Databricks can mount or reference that storage and read the tables directly, with the change history handled by Delta itself. See [Azure Synapse Link for Dataverse](https://www.solvingdynamics365.com/guides/azure-synapse-link-for-dataverse) for the setup. The alternatives are weaker for Databricks: - **Link to Fabric** puts the data in OneLake. Databricks can read OneLake through its ADLS-compatible endpoint, and Fabric has been adding external table sharing, but it is a detour if Databricks is the destination. - **Export to Data Lake (legacy)** is deprecated and wrote CSV. Migrate off it. - **BYOD** to Azure SQL then a JDBC read into Databricks works and is common in older estates. It is batch, entity-shaped, and adds a database hop you do not need. New builds should go Synapse Link with Delta into your own lake. That is the whole transport design. ## Layering the lakehouse The medallion pattern fits F&O data well, and it is worth being explicit about what goes where. **Bronze** is the Synapse Link output, read as-is. Do not transform it; do not even copy it if you can avoid it. Register the Delta tables in Unity Catalog as external tables pointing at the Synapse Link container. **Silver** is where F&O becomes legible. Enum integers resolved to labels using the enum metadata Synapse Link exports alongside the tables. Financial dimension attribute value sets flattened into columns. Soft-deleted rows and change markers applied so each table is a current-state view. Legal entity (DataAreaId) and partition columns kept consistently. This layer is F&O-specific and needs someone who knows the application. **Gold** is the business models: general ledger facts by dimension, inventory on hand and transactions, sales and purchase order lines with status semantics decoded, customer and vendor dimensions. This is where the data team and the finance team argue about what "revenue" means, and it is the layer that Power BI or other tools consume. The mistake is doing silver-layer work in gold, so every report re-decodes enums, or doing gold-layer work in silver, so the current-state tables carry business logic that changes every quarter. ## Change data and deletes Synapse Link in Delta mode maintains the tables for you, but you still need to understand how updates and deletes are represented if you build any incremental process on top. Delta's change data feed can be enabled on the bronze tables so silver processing picks up only what changed. Test deletes explicitly; a warehouse that never removes cancelled sales lines will overstate everything. ## Unity Catalog and access Register the lake location as an external location in Unity Catalog and grant access through catalog permissions rather than storage keys. F&O's own security, by legal entity and role, does not carry across; rebuild row filters in Unity Catalog on the silver and gold tables where legal entity separation matters. Financial data for one company should not be visible to analysts working for another simply because both live in the same lake. ## Compute and cost Bronze reads are cheap. Silver rebuilds over large tables, particularly inventory transactions and general journal lines, are where compute costs live. Design silver as incremental from the start rather than as a nightly full rebuild that was fine in the pilot and unaffordable in year two. ## Sending results back Some teams want Databricks outputs, such as demand forecasts or customer risk scores, to return to F&O or to Dataverse. There is no reverse Synapse Link. The routes are the Data Management Framework for bulk imports into F&O (see the [DMF deep dive](https://www.solvingdynamics365.com/guides/data-management-framework-deep-dive)), the Dataverse Web API for Dataverse tables, or [Dataverse virtual tables](https://www.solvingdynamics365.com/guides/dataverse-virtual-tables) over a SQL endpoint if the data only needs to be viewed rather than stored. Keep the write-back narrow; a warehouse that writes operational data back into the ERP has become a second ERP. ## What breaks in practice Entity coverage. Not every F&O data entity is available through Synapse Link. Tables always are, so most teams model from tables and use entities where they exist. Metadata drift. New fields and new enum values arrive in the lake without ceremony. Silver notebooks that hard-code column lists break; ones that read the exported metadata do not. Latency misunderstandings. The lake is minutes behind F&O at best. A dashboard labelled "live" will be corrected loudly by the first warehouse supervisor who checks it against the mobile app. ## Stability verdict This is one of the cleaner F&O analytics integrations available today because the formats align. The risk is on the Microsoft side, where the export mechanisms have been reshuffled more than once; keep bronze thin so that if the export route changes again, silver and gold survive. Compare with [Fabric and Dynamics 365](https://www.solvingdynamics365.com/guides/microsoft-fabric-and-dynamics-365) if the organisation has not yet committed to Databricks. --- # Integrating Finance and Operations with Snowflake The realistic routes for landing Dynamics 365 Finance and Supply Chain data in Snowflake — Synapse Link and Fabric as the export layer. Source: https://www.solvingdynamics365.com/guides/integrating-finance-and-operations-with-snowflake Section: Integrations / Data movement Published: 2026-09-02 Snowflake is the enterprise data warehouse many organisations have already standardised on before they arrive at Dynamics 365 Finance and Supply Chain Management. Microsoft would prefer that your analytics lived in Fabric. The data team has a Snowflake contract, hundreds of models, and no intention of moving. So the practical question is how F&O data gets into Snowflake with the least friction, and the honest answer is that there is no direct connector and you will be assembling a pipeline from Microsoft's export mechanisms plus a transport step. ## Step one: get the data out of F&O F&O does not expose its database for direct querying in the cloud. Every route starts with one of Microsoft's export mechanisms, and the choice among them has been changing over the last few years. **Synapse Link for Dataverse with F&O tables and entities.** The current strategic route. F&O tables and data entities are made available through Dataverse and land as Delta Parquet in an Azure Data Lake Storage Gen2 account you own, refreshed continuously. This is what Microsoft wants you to use and the one that will keep receiving investment. See [Azure Synapse Link for Dataverse](https://www.solvingdynamics365.com/guides/azure-synapse-link-for-dataverse). **Link to Microsoft Fabric.** The same underlying mechanism landing in OneLake instead of your own storage account, with no copy of the data. Excellent if Fabric is your warehouse; less useful as a stepping stone to Snowflake, although OneLake can be read externally as ADLS-compatible storage. **Export to Data Lake (legacy).** The older F&O feature that wrote CSV to a data lake. Deprecated in favour of Synapse Link. If you are on it, plan the move; do not build new Snowflake pipelines on it. Our [data lake export for Finance](https://www.solvingdynamics365.com/guides/data-lake-export-for-dynamics-365-finance) guide covers the history. **BYOD (bring your own database).** Data entities exported to an Azure SQL database on a schedule. Still works, still supported, and still the route many existing Snowflake integrations use because it produces clean entity-shaped tables. Batch-only, entity-only, and the export jobs need babysitting. **Data entities over OData.** Fine for small reference tables. Not a bulk route. For a new build in 2026, Synapse Link to your own ADLS Gen2 is the default. BYOD is the pragmatic choice if your team already runs it and needs entity shapes rather than raw tables. ## Step two: move it into Snowflake From ADLS Gen2, there are two sensible transports. **Snowflake's own external stages and Snowpipe.** Snowflake can read directly from ADLS Gen2 through an external stage using a storage integration. Point it at the Synapse Link output, define external tables or use Snowpipe for continuous loading of the Parquet files, and the data team stays inside tools they know. This is the lowest-moving-parts option. **Azure Data Factory or Synapse pipelines.** ADF has a native Snowflake connector and can orchestrate incremental copies, apply light transformation, and handle the change-data-capture folders Synapse Link produces. Use it when the data team wants Microsoft-side orchestration or when the load needs logic beyond "copy the files". See [Azure Data Factory with Dynamics 365](https://www.solvingdynamics365.com/guides/azure-data-factory-with-dynamics-365). Either way, treat the lake as the handover point. F&O writes to the lake; Snowflake reads from the lake; nobody writes a pipeline that talks to F&O directly. ## The modelling work is the real cost F&O tables are not analyst-friendly. Enum values arrive as integers, financial dimensions are stored in a normalised structure that needs joining through dimension attribute value sets, and the general journal, inventory transactions, and sales line tables have semantics that take a functional consultant to explain. Data entities are shaped better but are not universally available in Synapse Link and carry their own quirks. Budget for a Snowflake modelling layer, typically in dbt, that turns raw F&O tables into the ledger, inventory, and sales facts the business actually wants. The transport takes weeks; the modelling takes months, and it is the part that requires someone who understands F&O, not just SQL. ## Incremental loads and deletes Synapse Link produces change folders with insert, update, and delete markers. Your Snowflake load needs to apply deletes, not just append, or the warehouse will slowly diverge from F&O. Merge statements keyed on RecId per table are the standard approach. Test the delete path deliberately; it is the one people skip. ## Security and residency The lake account sits in your Azure subscription, so residency follows your storage region. Snowflake reads through a storage integration scoped to that container. Row-level security from F&O does not travel with the data; whatever access rules F&O enforced by legal entity or role need re-implementing in Snowflake. Financial data leaving F&O for a warehouse is a compliance conversation, not just an engineering one. ## What breaks in practice Schema changes. A new field on an F&O table appears in the lake; the Snowflake external table does not know about it until someone updates the definition. Automate schema drift detection or you will be surprised at quarter end. Entity availability. Not every data entity is enabled for Synapse Link, and some require configuration on the F&O side. Confirm your list before promising the data team anything. Latency expectations. "Near real time" from Synapse Link means minutes for tables and longer for entities. If someone wants a live inventory position, the warehouse is the wrong place to get it. ## Stability verdict The pipeline is stable once built: Microsoft export to a lake you own, Snowflake reading from that lake. The parts that move are Microsoft's export mechanisms, which have been reshuffled more than once, so keep the transport layer thin and replaceable. If you have a genuine choice of warehouse, [Fabric with Dynamics 365](https://www.solvingdynamics365.com/guides/microsoft-fabric-and-dynamics-365) removes the transport step entirely, but nobody should switch warehouses to avoid one pipeline. --- # Integration patterns for Dynamics 365 CRM The standard integration patterns for CRM-side Dynamics 365 — webhooks, Dataverse plug-ins, Service Bus integration, virtual tables, and pull vs push. Source: https://www.solvingdynamics365.com/guides/integration-patterns-for-dynamics-365-crm Section: Integrations / Architecture patterns Published: 2026-05-01 CRM-side Dynamics 365 apps share the same Dataverse-based integration surface. A small number of well-defined patterns cover essentially every integration scenario; choosing well is the difference between integrations that age gracefully and ones that need rebuilding every two years. ## Pattern 1: Webhooks and Service Bus from Dataverse Dataverse can publish row changes to: - **Webhooks** — HTTP POST to a configured URL when a record is created, updated, deleted, or an action is invoked. Lightweight, but no retry beyond a few immediate attempts; the consumer must be highly available. - **Azure Service Bus** — message published to a queue or topic, retained until consumed. Resilient to consumer outages. The right pattern for **decoupled, durable, asynchronous notifications** at scale. - **Event Grid** — similar to Service Bus but lighter-weight; for fan-out to many subscribers. These are the modern, recommended outbound patterns from Dataverse. ## Pattern 2: Plug-ins **Server-side plug-ins** are C# classes registered against Dataverse events that run synchronously (before/after the operation) or asynchronously (queued). Used for **transactional integration** — calling an external service inside the transaction and rolling back if it fails. Powerful but operationally fragile — slow external calls inside plug-ins cause timeouts. Modern best practice: keep plug-ins lean, use them for validation and triggering, and offload work to flows or Functions. ## Pattern 3: Power Automate flows Triggered by Dataverse events through the Dataverse connector. Right for **business orchestration with multiple steps and human approval**. Easier to maintain than plug-ins; less powerful (no transactional context with Dataverse). Use flows when the work isn't strictly part of the originating transaction. ## Pattern 4: Virtual tables Read-and-write surfaces in Dataverse that pull data from external systems on-demand without storing it. The right pattern for **reading external data inside Dataverse apps** without replicating — e.g. surfacing F&O customer data inside a Sales account. ## Pattern 5: Pull integration via API External system polls the Dataverse API on a schedule. Simple, but inefficient at scale and slow to react. Use when the external system can't accept pushes. ## Pattern 6: Bulk via Data Factory For **bulk movement** — initial loads, daily extracts, archive — Azure Data Factory or Synapse pipelines using the Dataverse connector. ## Pattern 7: Synapse Link to OneLake Continuous replication of Dataverse changes to OneLake, where analytics and downstream systems consume. The right pattern for analytics and read-only consumers at scale. ## Choosing Push beats pull at scale. Asynchronous beats synchronous when timing isn't critical. Service Bus / Event Grid beat webhooks for resilience. Flows beat plug-ins for orchestration; plug-ins beat flows for transactional concerns. Document the pattern per integration up front. ## Where to go next Each pattern has a deeper guide: [webhooks vs events](https://www.solvingdynamics365.com/guides/webhooks-vs-events-in-dataverse), [Service Bus integration](https://www.solvingdynamics365.com/guides/azure-service-bus-integration-with-dataverse), [plug-ins vs Power Automate](https://www.solvingdynamics365.com/guides/integrating-with-dataverse-plug-ins-vs-power-automate), and [virtual tables](https://www.solvingdynamics365.com/guides/dataverse-virtual-tables). The two cross-cutting disciplines are [idempotency](https://www.solvingdynamics365.com/guides/idempotency-in-dynamics-365-integrations) and [polling vs push](https://www.solvingdynamics365.com/guides/polling-vs-push-patterns-for-dynamics-365). --- # Integration testing patterns for Dynamics 365 How to test integrations for Dynamics 365 — unit, contract, integration, end-to-end tests, and the patterns that catch regressions before production. Source: https://www.solvingdynamics365.com/guides/integration-testing-patterns-for-dynamics-365 Section: Integrations / Resilience & ops Published: 2026-05-01 An untested integration is a future incident. Dynamics 365 integrations are particularly vulnerable: multiple systems, complex business rules, evolving schemas. **Integration testing** is the discipline that catches problems before users do. Mature operations have multi-layer test strategies; immature ones discover issues in production. **Testing pyramid.** - **Unit tests** — fast, narrow, isolated. - **Contract tests** — interface compliance. - **Integration tests** — multi-component, real dependencies. - **End-to-end tests** — full system, real systems. Each layer catches different defects; balance speed and coverage. **Unit tests for integration code.** - Test individual functions / classes. - Mock external dependencies. - Fast execution. - Run on every commit. Catch logic bugs before reaching anything external. **Mocking external systems.** - **Mock Dataverse API** — for testing logic. - **Mock external systems** — assumed responses. - **Test doubles** for asynchronous calls. Pros: fast, isolated. Cons: assumes mock matches reality; gaps possible. ## Contract testing Verify interface compliance: - **Consumer-driven** — consumer specifies expected interface. - **Provider verifies** they meet the contract. - Catches breaking changes early. Tools: Pact, Spring Cloud Contract. Less common in Dynamics world; the concept is useful. **Integration tests.** - Multiple components together. - Real or test-environment dependencies. - Slower than unit; faster than full e2e. - Specific scenarios. Catch bugs in component interaction. **End-to-end tests.** - Full system stack. - Real Dynamics environment (test instance). - Real external systems (test environments). - Slowest; full-coverage scenarios. Catch system-level issues; can't catch interaction logic bugs (that's integration test job). **Test environment strategy.** - **Dev sandboxes** — for development. - **Test environments** — for integration testing. - **UAT environments** — production-like. - **Production-like staging** — final pre-production validation. Each level has different fidelity to production. ## Test data management Critical: - **Synthetic data** — generated. - **Anonymised production data** — realistic but safe. - **Curated test datasets** — covering specific scenarios. Test data freshness affects test reliability. **Test cases for integrations.** - **Happy path** — primary flow. - **Edge cases** — boundary conditions. - **Failure modes** — error handling. - **Idempotency** — duplicate processing. - **Concurrency** — parallel operations. - **Performance** — load behaviour. - **Schema evolution** — backward compatibility. Each warrants test coverage. **Asynchronous integration testing.** - **Trigger** the action. - **Wait** for asynchronous completion. - **Assert** end state. - **Timeout** if too slow. The wait is challenging; polling vs callback; timeout balance. **Test isolation.** - Each test isolated from others. - Setup test data per test. - Cleanup after. Without isolation, test order matters; flaky tests. **Test naming and organisation.** - **Behaviour-driven** names — `Should_create_order_when_valid_quote`. - **Grouped by feature.** - **Tagged** for filtering (smoke, regression, etc.). Readable test names enable maintenance and debugging. **Continuous testing.** - **CI runs unit + fast integration** on every commit. - **Nightly runs e2e** suite. - **Pre-deployment runs** full regression. - **Smoke tests** post-deployment to verify health. Each cadence different. **Performance testing.** - **Load test** — sustained load. - **Stress test** — pushing limits. - **Spike test** — sudden burst. - **Soak test** — extended duration. For integrations expected to handle volume, performance testing essential. **Tools.** - **xUnit, NUnit, MSTest** — .NET unit testing. - **Specflow** — BDD-style. - **Postman / Newman** — API testing. - **K6, JMeter** — performance. - **Power Apps Test Engine** — for canvas apps. - **Custom test harness** for Dynamics-specific. Each has place; toolchain depends on team. ## Test code as production code Test quality matters: - Readable. - Maintainable. - Reliable (not flaky). - Documented. Flaky tests get ignored; bad tests worse than no tests. **Flaky test handling.** - Identify flaky tests. - Investigate root cause (timing, isolation, data). - Fix or remove. - Don't tolerate flakiness — it erodes trust in test suite. **Schema evolution testing.** - **Forward compatibility** — new data format readable by old consumer. - **Backward compatibility** — old data readable by new consumer. Both essential for integrations that evolve. ## Negative testing What happens when things go wrong: - Invalid data input. - Network failure. - Downstream unavailable. - Schema mismatch. Negative tests catch reliability bugs; often more valuable than positive. **Test environments and CI/CD integration.** - **Pipeline triggers tests automatically.** - **Test results gate** deployment. - **Failed tests block** progression. Tests as quality gate. **Common pitfalls.** - **No integration tests.** Bugs found in production. - **Tests only happy path.** Edge cases hit users first. - **Flaky tests tolerated.** Trust in suite erodes. - **Test environments unrepresentative.** Tests pass; production fails. - **No performance testing.** Production load surprises. - **Tests skip when slow.** Convenience over rigour. - **Test data leaks.** Production data in test environments; compliance issue. **Coverage targets.** - **Code coverage 60-80%** typical for production code. - **Critical paths 100%.** - **Less critical** lower. Coverage isn't quality alone; thoughtful tests beat high coverage with shallow tests. ## Mutation testing Advanced: - Introduce small code changes (mutations). - Run tests. - Tests should fail (catch the mutation). - Tests that don't catch mutations are weak. Reveals weak tests. ## Strategic positioning Integration testing is investment in reliability. Mature operations have multi-layer test strategies; immature ones discover issues in production. The investment pays back through fewer production incidents, faster feature delivery, and confident deployments. For architects: - Build test strategy from start. - Layer tests appropriately. - Maintain test environments. - Integrate with CI/CD. - Treat tests as production code. The teams that test rigorously ship reliably; the teams that don't ship anxiously. The difference is testing discipline; the cost is engineering time; the benefit is operational confidence. --- # Intercompany trade in Dynamics 365 Finance & Operations How F&O models cross-legal-entity transactions — intercompany chains, mirrored sales/purchase orders, intercompany pricing. Source: https://www.solvingdynamics365.com/guides/intercompany-trade-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 A group with multiple legal entities (one per country, one per business unit, or one per regulatory regime) often has goods, services, or financial flows moving between entities. **Intercompany trade** in F&O models these flows as paired transactions in two legal entities, with automation that keeps them in sync, and with intercompany elimination support for consolidation. ## The basic pattern Entity A sells to Entity B. F&O can model this as: - A **sales order** in Entity A (the seller). - A **purchase order** in Entity B (the buyer). - Both orders linked; updates flow between them. Without F&O intercompany automation, each entity would have to manually create its side; with automation, creating one creates the other. **Setup.** 1. **Intercompany customer / vendor relationships** — Entity A holds Entity B as a customer (and vice versa, B holds A as a vendor). 2. **Intercompany trading partner** records define each direction's defaults: cost mark-up, allowed document types, currency. 3. **Item mappings** — sometimes the same product has different item numbers in different entities; mapping reconciles them. 4. **Default sites and warehouses** — where intercompany orders ship from and to. ## Intercompany sales/purchase order pairing When a purchase order is created in Entity B with vendor = Entity A's intercompany vendor: 1. The purchase order is created in Entity B. 2. A linked sales order is automatically generated in Entity A. 3. Confirmation, picking, and shipping in Entity A trigger receipt updates in Entity B. 4. Invoice in Entity A creates a purchase invoice in Entity B automatically. This bidirectional sync is the headline efficiency: cross-entity orders become near-zero rekeying. ## Intercompany pricing Transfer pricing rules (the regulatory-driven question of "at what price do related entities transact") are configured per partner pair: - **Cost plus** — markup on cost. - **Resale minus** — discount on customer-facing price. - **Fixed price** — negotiated price. For tax compliance, transfer pricing must be defensible against regulatory standards (OECD guidelines, BEPS). F&O captures the price; the policy and documentation are the tax team's responsibility. ## Direct delivery A pattern where the goods physically ship from Entity A directly to Entity B's customer, but financially flow through Entity B. F&O handles this as: 1. End customer order in Entity B (sales order). 2. Intercompany sales order in Entity B pulls from Entity A. 3. Entity A's direct delivery ships goods straight to the end customer; the paperwork shows the chain. Direct delivery saves shipping cost and time while keeping the legal entity flows correct. ## Intercompany inventory transfers For goods moved between entities without a sale (rebalancing stock): - A **transfer order** between sites within one entity is the simplest case. - A **cross-entity transfer** is modeled as a sales order in the source and a purchase order in the destination, at zero margin or cost-only. ## Intercompany services Entity A provides shared services (IT, finance) to Entity B. Modeled as service items (non-stocked) on intercompany sales/purchase orders, billed periodically. Pricing follows the transfer pricing policy. ## Intercompany journals For financial-only movements (recharges, allocations, loans), the **intercompany journal** posts to both entities simultaneously — a single posting creates G/L entries in two ledgers with matching offsets. ## Intercompany AR/AP reconciliation Periodic reconciliation ensures that Entity A's AR balance with Entity B equals Entity B's AP balance with Entity A: - Trial balance per intercompany pair, by currency. - Reconciliation differences identified and resolved. - Reconciliation report fed to consolidation as starting evidence. Without reconciliation, consolidation elimination journals miss amounts and consolidated financials carry residual intercompany balances. ## Intercompany chains A multi-step chain (Entity A → Entity B → Entity C) is supported but adds complexity. Each link is a paired transaction; the chain is constructed by linking orders explicitly. ## Tax and customs Cross-border intercompany trade triggers: - **VAT/customs** at the border. - **Withholding taxes** on services and royalties. - **Transfer pricing documentation** for tax authorities. F&O's tax engine handles VAT/customs; transfer pricing documentation is typically managed in dedicated tax tools. ## Consolidation flow Intercompany transactions flow into consolidated reporting: - Each entity's GL is consolidated normally. - **Elimination journals** in the consolidation company reverse intercompany sales/COGS and intercompany AR/AP. - Reconciled intercompany balances net to zero in eliminations; un-reconciled balances flag the gap. **Common pitfalls.** - **Inconsistent item codes.** Same product, different numbers; mapping missing; intercompany orders fail. - **Trade agreement gaps.** Intercompany prices not set; defaults to zero or to external customer pricing; transfer pricing wrong. - **Reconciliation skipped.** Differences accumulate; year-end consolidation has gaps. - **No process for intercompany returns.** Returns paths exist but rarely tested; first real return causes confusion. - **Document type proliferation.** Some teams create custom intercompany documents to add fields; complicates upgrades. ## Operational rhythm Daily order syncing is automatic. Monthly intercompany reconciliation is a finance team task — one per pair, formalised and signed off. Quarterly transfer pricing review is a tax/finance joint task. Year-end consolidation pulls all of this together. --- # Intrastat reporting in Dynamics 365 Finance How F&O handles EU Intrastat reporting — the statistical declaration of intra-community trade, configuration, exception handling, and country variations. Source: https://www.solvingdynamics365.com/guides/intrastat-reporting-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 **Intrastat** is the EU's statistical reporting system for intra-community trade — every EU business above a threshold must declare its arrivals (purchases from other EU countries) and dispatches (sales to other EU countries) periodically, by commodity code, country, weight, value, and transport mode. Dynamics 365 Finance handles Intrastat natively for EU country localisations, with configurable thresholds, exception handling, and direct submission to tax authorities. ## The model Each intra-community transaction (a sale to a customer in another EU country, a purchase from a vendor in another EU country) automatically generates **Intrastat data** at posting time: - **Commodity code** — the EU Combined Nomenclature code identifying the goods. - **Country of origin** — where the goods were made (different from where they're shipped from). - **Country of destination / dispatch** — where they're going / coming from. - **Statistical value** — typically the invoice value adjusted for transport cost. - **Net weight** — the goods' weight in kilograms. - **Quantity in supplementary unit** — for commodities measured beyond weight (pieces, litres, m², etc.). - **Transport mode** — sea, rail, road, air, post, fixed installation, inland waterway, own propulsion. - **Transaction nature** — the type of transaction (sale, return, free movement, processing, etc.). - **Statistical procedure** — country-specific codes for special cases. ## Setup Configuring Intrastat involves: - **Item commodity codes** — every product traded intra-EU needs a code. Maintained on the product card; auto-applies to transactions. - **Country of origin** per item — for goods imported then resold, the origin is the original manufacturing country, not the seller's country. - **Vendor / customer country** — for partner classification. - **Transport modes** per shipping method. - **Transaction nature codes** mapped to sales/purchase types. - **Statistical value adjustments** — typical formula adding transport and incidental costs to invoice value. ## The periodic declaration Intrastat is submitted monthly (in most EU countries; some allow quarterly for small filers). F&O's **Intrastat journal** routine: 1. Collects all intra-EU transactions posted in the period. 2. Aggregates per commodity code, country, transaction nature. 3. Allows exception handling — manual additions, exclusions, corrections. 4. Generates the country-specific submission file or report. The output format varies by country — XML for some, CSV for others, paper for the smallest jurisdictions. **Electronic Reporting (Globalization Studio)** handles country-specific formats. **Country variations.** - **Threshold differences** — each country sets its own value threshold below which Intrastat isn't required. Below threshold means no declaration; above means full reporting. - **Two-way vs one-way thresholds** — some countries have different arrival vs dispatch thresholds. - **Special procedures** — some countries require additional codes (delivery terms, port of entry, customs procedure). - **Submission portal** — each country has its own submission system (HMRC in UK pre-Brexit, INSEE / DGDDI in France, ISTAT in Italy, Statistics Sweden, etc.). ## Brexit complication The UK exited Intrastat for outbound dispatches at end of 2021; arrivals continued for a transition period. UK businesses now use a different mechanism for trade with the EU. Northern Ireland has its own arrangements under the Northern Ireland Protocol. **Exception handling.** - **Triangulation** — A in Country 1 invoices B in Country 2 for goods shipped directly from C in Country 3 to B. Requires specific Intrastat coding. - **Free movements** — goods moved between own subsidiaries without sale; reported under specific transaction codes. - **Returns** — return shipments coded as such. - **Sample / promotional goods** — typically excluded from thresholds. - **Lease and rental** — special treatment. ## Reconciliation Intrastat values shouldn't dramatically diverge from VAT return values — Intrastat dispatches relate to zero-rated EU sales; arrivals relate to reverse-charge purchases. Comparison reports flag mismatches for investigation before submission. ## Penalties Late or wrong Intrastat submissions trigger country-specific penalties — typically minor financial penalties initially, escalating with repeated failure. The compliance bar is meaningful. **Common pitfalls.** - **Missing commodity codes on items** — transactions can't be classified and miss the report. - **Wrong country of origin** — most common mistake for goods resold across borders. - **Forgetting threshold monitoring** — businesses that grow past the threshold miss the registration moment. ## Operational reality Intrastat reporting is a monthly ritual; configure cleanly during implementation; automate the routine; review exceptions before submission. --- # Inventory and warehouse management in Business Central How Business Central tracks items, locations, lots, serials, and warehouse operations — from basic stock to directed put-away and pick. Source: https://www.solvingdynamics365.com/guides/business-central-inventory-and-warehouse Section: Business Central / Inventory & warehouse Published: 2026-05-01 Updated: 2026-08-30 Business Central can run as a basic inventory system for an online retailer or as a fully-bin-managed warehouse for a multi-site distributor. The same underlying objects scale up and down — what changes is how much warehouse complexity you turn on. The most important implementation decision in this area is honest self-assessment: turning on more warehouse than the operation needs creates daily friction for no benefit, and turning on less than it needs creates inventory records nobody trusts. ## Items and inventory Each item card carries a costing method (FIFO, LIFO, Average, Standard, Specific), unit of measure conversions, item tracking (serial / lot numbers), assembly or production BOMs, and reordering policy (Lot-for-Lot, Maximum Qty, Fixed Reorder Qty). Items can be **non-inventory** (consumed services), **service** (no stock), or **inventory** (physical). The **item ledger** records every inbound, outbound, and adjustment with quantity, while the **value entry** table records the cost — these are deliberately separate so cost adjustments can flow without touching quantity. The costing method is effectively permanent per item, so choose it before go-live: FIFO or Average for most distribution businesses, Standard where manufacturing wants variance analysis, Specific only for serialized high-value goods. The trade-offs are covered in [costing methods compared](https://www.solvingdynamics365.com/guides/business-central-costing-methods-compared). ## Locations Inventory is held at **locations**, each of which can be configured for different warehouse levels: simple postings only; *bin* tracking; *receive/ship* documents; or full **directed put-away and pick** with bin policies. The same database can mix simple and complex locations — a central warehouse on full WMS and a service van as a simple location is a normal setup, not a workaround. The level ladder is worth spelling out, because each rung changes daily work: - **No bins, no documents.** Posting a sales shipment moves stock. Right for small stockrooms and virtual locations. - **Bins without warehouse documents.** Stock has a bin code, but posting is still done from the order. Right when you want to know where things are without changing who posts. - **Receive/ship documents.** Warehouse staff post receipts and shipments separately from the back office. This is the first rung that separates duties. - **Directed put-away and pick.** The system suggests bins by zone, capacity, and policy; work is driven by put-away, pick, and movement documents. Right for real warehouses with real pickers — and overkill for everyone else. Moving a location up the ladder mid-flight is possible but disruptive; it is much cheaper to pick the right rung per location at design time. ## Warehouse documents In a full WMS setup, inbound flow is **purchase order → warehouse receipt → put-away**, and outbound flow is **sales order → warehouse shipment → pick → post shipment**. Bins are constrained by capacity, item, and zone policies. Movement worksheets and replenishment between bulk and pick bins are standard, and [pick and put-away strategies](https://www.solvingdynamics365.com/guides/warehouse-pick-and-put-away-in-bc) covers the configuration detail. Barcode scanning on the shop floor comes either from Microsoft's warehouse scanning add-on or from established ISV apps; running a directed warehouse on paper defeats the point. ## Item tracking Lot and serial numbers are configurable per item, with optional expiration date tracking and warranty dates. Both can be required at receipt, shipment, or both, and feed into recall/traceability reports. Decide tracking requirements early: switching an item to lot tracking after thousands of untracked entries is genuinely awkward, while carrying tracking you never use taxes every posting with an extra dialog. ## Counting Physical inventory journals support whole-warehouse counts and cycle counts; counted differences post to inventory adjustments with cost and quantity reconciled automatically. Cycle counting by ABC classification — count the fast movers often, the slow movers rarely — keeps accuracy high without shutting the warehouse down; [the ABC analysis guide](https://www.solvingdynamics365.com/guides/abc-analysis-and-slow-moving-items-in-bc) shows the setup. ## Costing and valuation **Adjust Cost — Item Entries** is the routine that propagates landed cost from inbound transactions into outbound cost of goods sold; running it before period-end is standard practice (most systems now run it automatically on posting). The **Inventory Valuation** report ties cost back to the GL, and the interim accounts for received-not-invoiced stock are part of the month-end reconciliation. When inventory value and GL disagree, the cause is almost always a skipped adjust-cost run or direct GL postings to inventory accounts — lock those accounts against manual posting and the problem disappears. ## What to take away Match warehouse complexity to the physical operation location by location, fix costing methods and tracking policies before go-live, and let the item ledger be the single truth for quantity. Business Central's inventory machinery is deep enough for serious distribution — the failures are almost never missing features, they are complexity switched on without the discipline to operate it. --- # Inventory classification and ABC analysis in Dynamics 365 SCM How F&O classifies inventory by value, volume, and margin — the ABC analysis routine, classification codes. Source: https://www.solvingdynamics365.com/guides/inventory-classification-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 A warehouse with 20,000 SKUs cannot manage every item the same way. Inventory classification — typically **ABC analysis** by value, volume, and margin — is the structural foundation for applying differentiated policies: tight control on high-value items, loose policies on low-value, and varied review cadences in between. F&O has the analysis routines and the classification fields; the work is in using them. ## The Pareto principle A familiar pattern: ~20% of items typically generate ~80% of revenue or inventory value. Inventory classification operationalises this: - **A items** — high value or high movement; the 20% that matters most. - **B items** — moderate value or movement; the next 30%. - **C items** — low value, low movement; the remaining 50%+. Three dimensions usually matter: - **By value** — inventory carrying value ranking. - **By volume** — consumption volume ranking. - **By margin** — profit contribution ranking. An item can be A by value but C by volume (high-value low-velocity) — different management implications than an A by both (high-value high-velocity). ## The ABC analysis routine F&O's inventory analysis function: 1. Reads transactional data over a configurable period. 2. Ranks items by the chosen criterion (value, volume, margin). 3. Cumulative percentage calculated. 4. Cutoff points assign A/B/C classification. Typical cutoffs: A = top 80% cumulative, B = next 15%, C = bottom 5% — but configure per company strategy. ## Classification fields on the item Each item carries: - **ABC Value** — A/B/C classification by value. - **ABC Margin** — by margin contribution. - **ABC Carrying Cost** — by carrying cost. - **ABC Revenue** — by revenue. These fields are updated by the ABC analysis batch. They become filters in queries, planning policies, and reports. **Using classification to differentiate policy.** - **A items** — Min/Max coverage with low safety stock buffer; planner attention; weekly cycle count; tight inspection. - **B items** — Period coverage; monthly cycle count; sample-based inspection. - **C items** — Two-bin kanban or visual reorder; quarterly cycle count; minimal inspection. The policy differentiation translates "we have 20,000 SKUs" into "we actively manage 200 items and rule-based the rest." ## XYZ analysis A complementary classification: - **X items** — predictable, low demand variability. - **Y items** — moderately variable. - **Z items** — highly variable, unpredictable. Combined: ABC by value × XYZ by variability = 9 classes with different policies. AX (high value, predictable) → tight Min/Max with low safety stock; CZ (low value, unpredictable) → buffer stock high, automated reorder. F&O doesn't have native XYZ but the calculation can be done in Power BI or a custom field. ## Cycle counting frequency Classification drives cycle count cadence: - **A items counted monthly.** - **B items counted quarterly.** - **C items counted annually.** The total counting work is concentrated where it matters most. The cycle count planner field on the item drives the counting calendar. ## Inspection frequency Quality association rules can reference ABC classification — A items get 100% inspection from new vendors, C items get sample inspection. ## Reorder review cadence A planner reviewing thousands of items can't go deep on each one. Classification tells them where to focus: - **A items** — weekly individual review. - **B items** — exception-based review when action messages fire. - **C items** — rule-based replenishment, monthly summary review only. ## Reclassification Items move between classes as demand patterns shift. The ABC analysis should re-run periodically: - **Quarterly** for stable businesses. - **Monthly** in fast-moving markets. - **After major product launches or discontinuations** — affected items need immediate reclassification. Without reclassification, classifications become stale and the differentiated policies misallocate attention. **Combining with other taxonomies.** - **Product group** — what kind of item. - **Item group** — accounting/posting groupings. - **Coverage group** — planning parameters. - **ABC class** — value/volume classification. These are orthogonal axes. An item belongs to a product group and a coverage group AND has an ABC class. Reporting and policy can slice along any axis or combination. **Common pitfalls.** - **One-off classification.** Run at go-live, never refreshed; classifications drift from reality. - **Classification not linked to policy.** Items are classified but treated identically; the analysis is decorative. - **One-dimensional view.** Only classifying by value misses high-volume, low-value SKUs that drive operational cost. - **Boundary items flipping.** Items near the A/B threshold move between classifications every quarter; policy oscillates. Mitigation: hysteresis (require a confirmed shift over 2+ periods to reclassify). - **C items ignored.** "It's just C" becomes an excuse for poor management; in aggregate, C items can still represent significant carrying cost. ## The strategic value Inventory classification is a free analytical tool that costs almost nothing to run and yields material improvements in working capital, service level, and operational efficiency when policies are genuinely differentiated. The biggest miss is treating it as a reporting exercise rather than as the foundation of operational discipline. --- # Inventory costing methods in Business Central, compared FIFO, LIFO, Average, Standard, and Specific — what each costing method means, and how to choose the right one in Business Central. Source: https://www.solvingdynamics365.com/guides/business-central-costing-methods-compared Section: Business Central / Inventory & warehouse Published: 2026-05-01 Updated: 2026-08-25 Inventory costing is the bridge between the warehouse (quantities moving) and the general ledger (cost of goods sold posting). Business Central supports five costing methods on each item card. The choice is per item, not per company, so a single company can mix methods deliberately — though most companies pick one default and stick to it. ## FIFO (First In, First Out) Inbound transactions are layered in receipt order; outbound transactions consume from the oldest layer first. FIFO closely tracks the physical flow for most non-perishable goods and produces stable margins in steady-state pricing environments. The most commonly chosen method in BC implementations. ## LIFO (Last In, First Out) The newest layer is consumed first. LIFO matches recent costs against current revenue, which is useful in inflationary environments — but it is prohibited under IFRS and increasingly restricted under local GAAPs, so it's rare outside the US. ## Average Every outbound transaction is costed at the moving weighted average cost of the item at the location at that moment. Easy to explain, smooths price volatility, and avoids cost-layer maintenance. Common for high-volume commodity inventory. ## Standard Each item has a **standard cost** maintained separately; all postings use the standard. Variances between actual cost and standard land in a **purchase price variance** account. The right method for manufacturing where production cost should be tracked against engineered standards, and for environments where management wants stable inventory valuation independent of purchase price swings. ## Specific Each individual unit (typically serialised) carries its own cost. The right method for high-value, low-volume serial-tracked goods — luxury watches, used vehicles, custom equipment — where every unit's cost is genuinely different. ## The Adjust Cost — Item Entries job None of the methods produces correct cost of goods sold in real time. Inbound transactions sometimes post after outbound (a sale before the supplier invoice). The **Adjust Cost — Item Entries** batch routine propagates final landed cost into already-posted outbound entries, reconciling the item ledger and the GL. Run it before period-end, after the cost of goods sold flush, and before financial reporting. Companies that skip it carry inventory misvaluation indefinitely. ## Changing method Once an item has transactions, changing the costing method is not supported. Plan it up front. ### Frequently asked questions **Which costing method do most Business Central implementations use?** FIFO. It tracks physical flow for most non-perishable goods and produces stable margins in steady pricing. Average is common for high-volume commodity stock; Standard suits manufacturing measured against engineered standards; Specific is for serialised high-value units. **Can I change an item's costing method later?** Not once the item has transactions. The method is chosen per item, so plan it up front — a company can mix methods deliberately, but most pick one default and stick to it. **Is LIFO allowed?** Business Central supports it, but LIFO is prohibited under IFRS and restricted under many local GAAPs, so it is rare outside the United States. **Why do I need to run Adjust Cost – Item Entries?** Because no method produces correct cost of goods sold in real time — a sale can post before the supplier invoice. The batch job pushes final cost into already-posted outbound entries and reconciles the item ledger with the general ledger. Run it before period-end and before financial reporting. --- # Inventory dimensions in Dynamics 365 Supply Chain How inventory dimensions structure item identity in F&O — storage, tracking, product dimensions, and the consequence of dimension design. Source: https://www.solvingdynamics365.com/guides/inventory-dimensions-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 In Dynamics 365 Supply Chain Management, **[inventory dimensions](https://www.solvingdynamics365.com/glossary/inventory-dimension)** are the structural concept that gives each physical unit of inventory its specific identity. They go beyond a simple "item × quantity" model — an item plus storage dimensions plus tracking dimensions plus product dimensions uniquely identifies a piece of inventory. The choices made about which dimensions to use materially affect how the warehouse operates, how planning works, and how reporting tells stories. **Three dimension groups.** 1. **Product dimensions** — make one item different from another within the same "product master". Example: a T-shirt is a product master; variations by **Size**, **Colour**, **Configuration**, **Style** are product dimensions. Each combination of product dimensions is a distinct *item* for inventory purposes. Configuration and Style support engineer-to-order patterns where variants are generated from rules; Size and Colour support fashion/retail. 2. **Storage dimensions** — *where* the inventory is held. **Site**, **Warehouse**, **Location** (bin), **Inventory status**. Storage dimensions track physical placement; the same item-with-product-dimensions can exist at multiple storage locations simultaneously. 3. **Tracking dimensions** — properties that make individual units within a storage location distinguishable. **Batch number**, **Serial number**, **Owner** (consignment), **Licence plate**, **Inventory status**. ## Dimension activation Each dimension is configured per item to be **active** or not. An item with only Site + Warehouse storage dimensions has simple inventory; an item with Site + Warehouse + Location + Licence Plate + Batch + Serial has every unit precisely identified. Costing, planning, picking, and posting all respect the active dimensions. ## Dimension hierarchy Inventory drilldowns roll up across the dimension axes: ``` Item Master → Product Dimensions (Size = L, Colour = Blue) → Site (US) → Warehouse (WH-East) → Location (Aisle 5, Bin B-12) → Licence Plate (LP-12345) → Batch (B-2026-Q3-007) → Serial (S-987654) ``` Each level adds specificity. Reports can summarise to any level — "total inventory of L Blue T-shirts across all warehouses" vs "specific serial in specific bin". **Implications for transactions.** - **Picking** — a pick instruction must identify enough dimensions to locate the inventory unambiguously. For high-precision items (serial-tracked), the picker scans the serial; for bulk items, just the location. - **Reservation** — reservations bind at the active-dimension level. Reserve "this serial for this customer" vs "5 units of this item, any serial". - **Costing** — cost is tracked at the activated dimension granularity. FIFO across serials gives per-serial cost; FIFO at item-level gives aggregate cost. - **Planning** — MRP works at the planning dimension granularity. Different sites can have different plans; different colours can have different demand. ## Inventory status A specific dimension worth highlighting. **Inventory status** is a dimension flag like *Available*, *Quarantine*, *Reserved-Damaged*, *Pending-QC*. Status drives whether inventory is available for picking; quarantined batches don't ship. Configured per item, activated for tracking dimension. ## Costing dimension setup Beyond *active* / *inactive*, dimensions can be flagged as **costing dimensions** — included in cost-layer matching. The standard pattern: Site is costed (different cost per region); Warehouse is not (same item costs the same across warehouses in a region). Configuring costing dimensions wrong produces strange cost behaviour at posting. ## The trade-off More dimensions = more precision but more operational overhead. Activating Serial on every item means scanning every unit at every transaction; activating it only on high-value or regulatory-required items keeps operations efficient. Most implementations: - Site, Warehouse, Location active on every item. - Batch active on food, pharma, chemicals, regulated industries. - Serial active on high-value or compliance-regulated items (equipment, electronics). - Licence plate active in advanced WMS scenarios. ## Operational reality Design dimensions per item category, not uniformly across the catalogue. The warehouse-floor people know what they need to track; the design should match their reality. --- # Inventory replenishment policies in Dynamics 365 SCM How replenishment policies work in F&O — min/max, period order quantity, fixed quantity. Source: https://www.solvingdynamics365.com/guides/inventory-replenishment-policies-in-scm Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 Inventory replenishment is the day-to-day question of *when to order how much*. Dynamics 365 SCM answers it through **coverage groups** — named policy bundles linked to items (and optionally per warehouse) that drive the master planning or Planning Optimization engine. Choosing the right coverage group per item category is the foundational supply chain decision. ## Coverage codes A coverage group specifies one of: - **Period** — group demand into periods of N days; create one planned order per period covering that period's net demand. - **Requirement** — create a planned order per demand transaction. Smallest order sizes but most order overhead. - **Min/Max** — maintain inventory between minimum (reorder point) and maximum levels. Planning replenishes to max when min is breached. - **Manual** — planning makes no suggestion; planner manages by exception. ## Period coverage Best for items with steady demand and reasonable lead time. Parameters: - **Coverage period** — e.g. 7 days. - **Negative days** — how far past the demand date the system can still consume from existing supply before suggesting more. - **Positive days** — how far future supply can satisfy current demand. A weekly period order means each Monday the system suggests one order covering the week's net demand. Reduces order count vs requirement-based. ## Requirement coverage Best for engineer-to-order, large-value, or low-volume items where pegging demand to supply matters more than order consolidation. Every demand creates its own supply suggestion. ## Min/Max coverage Best for fast-moving, low-value items where the cost of carrying safety stock is less than the cost of stockouts. Parameters: - **Minimum quantity** — reorder point. - **Maximum quantity** — order-up-to level. - **Minimum / Maximum keys** — reference to date-dependent profiles for seasonality (e.g. higher min during holiday). - **Multiple** — order quantity rounding (cases of 12). The engine watches on-hand + on-order; when projected balance dips below min, an order suggestion brings it back to max. **Coverage group fields beyond coverage code.** - **Safety stock** — extra buffer above the minimum. - **Reorder margin** — additional days of lead time buffer. - **Lead time** — purchase or production lead time used in plan calculation. - **Calendar** — working calendar to compute delivery dates. - **Time fence** — how many days into the future planning produces suggestions. - **Action message time fence** — when planning produces "expedite" or "delay" messages on existing supply. - **Forecast plan** — which forecast plan the item consumes from. ## Item coverage At the item level, you can override the default coverage group per warehouse or even per dimension combination. A SKU might be Min/Max in the central DC and Requirement in regional DCs. ## Allocation keys When forecast is at family level but planning is at SKU level, **allocation keys** distribute the family forecast to SKU forecast based on historical percentages. Coverage group dictates how the SKU forecast then drives replenishment. ## ABC analysis and coverage choice A common heuristic: - **A items (top 20% by value)** — Min/Max or Period with tight parameters; high attention. - **B items** — Period; moderate parameters. - **C items** — Min/Max or kanban with loose parameters; minimal attention. Periodically re-classify; items move between categories as demand patterns shift. ## Planning Optimization vs classic master planning Coverage group parameters apply to both. Planning Optimization (the modern in-memory engine) processes them faster and supports incremental runs; classic master planning batch-processes the full plan. Both yield similar suggestions; the engine choice is a performance and architecture decision. **Common pitfalls.** - **One coverage group for everything.** Coverage groups should be a thoughtful taxonomy (3–10 named groups), not a one-size-fits-all. - **Lead times wrong.** The single biggest cause of bad suggestions. Audit lead times annually; reality drifts from the system. - **Min/Max levels never adjusted.** A reorder point set at go-live and never reviewed becomes wrong as volumes change. Build a quarterly review. - **Safety stock everywhere.** Stacking safety stock on top of period coverage and lead time buffers inflates inventory without clear benefit. - **Time fences misunderstood.** A short time fence creates churn (suggestions every day); too long misses real-time changes. Tune per item category. ## The art beyond the parameters Replenishment policy choice is half the story; the other half is the planner's discipline to act on the system's messages (expedite, delay, postpone). A coverage group that produces good suggestions only matters if someone executes them on time. --- # IoT alerts and anomalies in Field Service How Dynamics 365 Field Service integrates IoT signals — Connected Field Service architecture, alerts to work orders, predictive maintenance patterns. Source: https://www.solvingdynamics365.com/guides/iot-alerts-and-anomalies-in-field-service Section: Customer Engagement / Field Service Published: 2026-05-01 A connected piece of equipment that can tell you something is wrong before the customer calls fundamentally changes service economics. **Connected Field Service** brings IoT signals into Dynamics 365, automatically creating cases, alerts, or work orders based on device telemetry. The technical plumbing is well-defined; the operational discipline to turn signals into action is where most deployments stall. **The architecture.** - **Devices** — physical equipment with sensors and network connectivity (industrial machines, HVAC units, medical devices, vehicles). - **IoT platform** — Azure IoT Hub, Azure IoT Central, or third-party (e.g., PTC ThingWorx, GE Predix). - **Signal processing** — Azure Stream Analytics, Azure Functions, or IoT platform native rules. - **Connected Field Service** — Dataverse entities receiving alerts, the rules layer that decides what creates a case or work order. Telemetry doesn't reach Dynamics directly; it's filtered and processed first, with only meaningful events crossing into the business system. Without filtering, the signal volume drowns Dynamics. **IoT Alert** — the entity. When a meaningful event is detected, an **IoT Alert** record is created in Dataverse: - Linked to a Customer Asset. - Alert type (threshold breach, anomaly, scheduled maintenance, custom). - Severity (informational, warning, error, critical). - Telemetry context (current and recent readings). The Alert is the trigger; subsequent automation decides what happens. ## Alert-to-action rules Configurable per alert type: - **Notify customer** — automated email or text to the asset owner. - **Create case** — service ticket. - **Create work order** — field dispatch. - **Assign to queue** — for triage. - **Auto-resolve** — if the alert clears within a window. The rules respect the customer's service agreement and SLAs. **Common use cases.** - **Threshold alerts** — temperature exceeds, pressure drops, vibration above norm. - **Anomaly detection** — pattern outside historical norm even if no single threshold breached. - **Predictive maintenance** — model predicts component failure in X days. - **Usage tracking** — consumable approaching depletion (printer toner, filter, refrigerant). - **Asset status** — device offline, low battery, communication failure. ## Predictive maintenance Beyond reactive alerts, ML models trained on historical device data: - Predict when a component will fail. - Trigger maintenance work orders ahead of failure. - Schedule with maximum operational efficiency (not at peak customer hours). The economics: reactive repair after failure costs more (emergency dispatch, customer downtime) than scheduled maintenance. Predictive maintenance shifts cost left along the lifecycle. ## Customer Asset and IoT integration The Customer Asset record in Field Service holds: - Make, model, serial number. - Installation date, warranty status. - Linked IoT devices (one or many). - Service history. - Telemetry context (recent readings). The asset is the pivot — telemetry attaches to it, history accumulates against it, work orders reference it. ## Remote troubleshooting Some alerts can be resolved remotely without dispatch: - **Customer-side reset** — guide the customer to reset. - **Remote firmware update** — push via IoT platform. - **Remote configuration change** — adjust setting via cloud command. - **Customer self-service** — direct the customer to a KB article via portal. Remote resolution is the cheapest outcome — avoid dispatch entirely. ## Integration with Remote Assist When dispatch is needed but expertise is remote, **Dynamics 365 Remote Assist** (the Mixed Reality offering on HoloLens or mobile) connects on-site technicians with senior engineers who guide via video and AR overlays. The IoT context flows into the call — the remote engineer sees the asset telemetry the field tech is looking at. **Operational hurdles.** - **Signal quality** — too many false-positive alerts; technicians dispatched unnecessarily. Tune thresholds. - **Customer consent** — connected devices monitoring requires customer consent in many jurisdictions. - **Data volume** — millions of telemetry events per day; need filtering at the IoT layer, not in Dynamics. - **Integration brittleness** — IoT platforms evolve; integrations break with version changes. - **No technician trust** — if early alerts are noisy, technicians ignore future alerts. **Setup considerations.** - **Per-asset baseline** — define what "normal" looks like for each asset class. - **Alert routing rules** — high severity to on-call queue; low severity to triage. - **Service agreement integration** — alerts respect what's covered. - **Reporting** — alert volume, time-to-resolution, false positive rates. **Common pitfalls.** - **Alert flood.** No filtering; system creates thousands of cases for low-severity events; signal-to-noise collapses. - **No closure loop.** Alerts trigger work orders; work order resolution doesn't update the alert; same alert keeps firing. - **Stale baseline.** Normal drifts but baseline doesn't update; anomaly detection becomes noisy. - **Technician feedback ignored.** Technicians know which alerts are useful and which aren't; feedback loop to model owners absent. - **Cost not modelled.** IoT alerts generate dispatch costs; mature operations track cost per alert resolved. ## Economic rationale Connected Field Service is most valuable in: - High-cost equipment where downtime is expensive (industrial, medical, datacenter). - Service contracts where uptime SLA is measured. - Recurring services where predictive maintenance shifts cost. For low-cost commodity equipment, the IoT investment isn't paid back. ## Strategic positioning Connected Field Service is a 5–10 year build. The first 18 months are usually about getting clean signal — getting devices connected, alerts tuned, false positives down. The second phase is operational integration — work orders flowing smoothly, technicians trusting alerts. The third phase is predictive — using accumulated data to anticipate. Each phase requires investment and patience; jumping to phase three without doing phase one and two leads to failure. --- # Isolated storage and secrets in AL How AL extensions store secrets safely — IsolatedStorage scopes, Azure Key Vault integration. Source: https://www.solvingdynamics365.com/guides/business-central-isolated-storage-and-secrets-in-al Section: Business Central / AL & development Published: 2026-05-01 Updated: 2026-08-25 Business Central extensions often need to store secrets — API keys for third-party services, tokens for OAuth flows, credentials for internal integrations. Hard-coding secrets in source or storing them in plain text records is unacceptable. AL provides **IsolatedStorage** and **Azure Key Vault** integration as the supported patterns. ## IsolatedStorage A key-value store scoped to extensions: - **Per-user, per-extension** — secrets per user. - **Per-company, per-extension** — shared across users in one company. - **Per-tenant, per-extension** — global across companies and users. The scope is selected at write time; reads respect the scope. **Basic usage.** ```al IsolatedStorage.Set('ApiKey', 'secret-value', DataScope::Module); if IsolatedStorage.Get('ApiKey', DataScope::Module, ApiKey) then // use the key ``` The DataScope enum controls visibility: - `User` — per user. - `Company` — per company. - `Module` — per extension/tenant. ## Encryption Values stored in IsolatedStorage are encrypted at rest by BC. Only the extension that wrote can read; cross-extension access is restricted. ## SecretText type A specialised AL type for handling secrets: - Values typed as `SecretText` instead of `Text`. - Operations (string concatenation, conversion) restricted. - Prevents accidental logging or display of secrets. Use `SecretText` for API keys, tokens, passwords throughout code. The type's restrictions catch leaks at compile time. ## Azure Key Vault integration For organisations with formal secret management: - Secrets live in Azure Key Vault. - Extension reads via the AL Key Vault interface. - Authentication via managed identity or service principal. Pattern: secrets owned by IT in Key Vault, never directly handled by BC users. **Why not just store in a table?** - Encryption at rest is not always sufficient (depending on extension storage). - Permissions on table columns can leak. - Backup / restore can expose data. - Audit trail on the table reveals access patterns. IsolatedStorage and Key Vault are purpose-built for this. **Common patterns.** **API key for external service:** ```al procedure GetApiKey(): SecretText var ApiKeySecret: SecretText; begin if not IsolatedStorage.Get('ExternalApiKey', DataScope::Module, ApiKeySecret) then Error('API key not configured'); exit(ApiKeySecret); end; ``` **OAuth refresh token per user:** ```al procedure StoreRefreshToken(Token: SecretText) begin IsolatedStorage.Set('OAuthRefreshToken', Token, DataScope::User); end; ``` **Tenant-wide configuration secret:** ```al procedure SetTenantSecret(Value: SecretText) begin IsolatedStorage.Set('TenantConfigSecret', Value, DataScope::Module); end; ``` ## Migration from legacy code Old extensions may store secrets in: - Plain text table columns. - Encrypted columns (worse than IsolatedStorage; rotation harder). - Hard-coded literals. Migration: 1. Add IsolatedStorage write logic. 2. Read from legacy location, write to IsolatedStorage on first run. 3. Use IsolatedStorage subsequently. 4. Remove legacy storage after grace period. **Permissions and access.** - Extension reads its own IsolatedStorage; another extension cannot. - IsolatedStorage values not visible in the BC UI for admins to inspect (intentional). - Key Vault values accessible only to extensions with explicit Key Vault permission. **Common pitfalls.** - **Plain text secrets.** Easy to type; security violation. - **Wrong scope.** Storing per-user when it should be per-company; user changes cause secret loss. - **No rotation strategy.** Secret in IsolatedStorage forever; compromise = full rotation needed. - **SecretText violated.** Converting SecretText to Text to log it; leak. - **Backups include IsolatedStorage.** Per Microsoft docs, IsolatedStorage included in BC backups; understand the implications. **Rotation.** - Periodic secret rotation per security policy. - Extension must support rotation — accept new secret without code change. - Configuration UI for admins to enter new secret; old secret retained briefly. ## Auditing IsolatedStorage doesn't have built-in access audit. For high-security needs: - Wrap IsolatedStorage reads in a custom procedure that logs. - Log to a dedicated audit table. ## Strategic positioning Secret handling in AL has matured significantly. Modern extensions use IsolatedStorage with SecretText typing throughout; Key Vault integration for enterprise secret management. Legacy extensions handling secrets in plain tables are technical debt and security risk. Audit extensions for secret-handling patterns; upgrade where needed. The cost is modest; the security and compliance benefits material. --- # Item attributes and variants in Business Central How Business Central handles product variations — variants for stock-keeping, attributes for searching, and where the model fits and where it doesn't. Source: https://www.solvingdynamics365.com/guides/business-central-item-attributes-and-variants Section: Business Central / Inventory & warehouse Published: 2026-05-01 Updated: 2026-08-31 Business Central handles product variation through two related but distinct concepts: **variants** (which create stock-keeping differences) and **attributes** (which describe and filter without affecting stock). Knowing which is which avoids most variant-related implementation mistakes. ## Variants An item with **variants** has one item number but multiple stock-keeping codes — typically size, colour, or trim. Each variant is a row of the **Item Variant** table, and inventory, transactions, and prices can be specific to it. Variant codes are short (10 characters) and intended for the production / stock-keeping dimension that matters operationally: a shirt with sizes S/M/L/XL or a paint with colours Red/Blue/Green. Variants share the underlying item card (description, base UoM, costing method) so they're a lightweight way to multiply SKUs without multiplying master data. Two setup details save later grief. First, turn on the item's **mandatory variant** setting the moment variants exist — otherwise users can post transactions against the bare item number, and you end up with stock split between "T-SHIRT" and "T-SHIRT / M" that no report reconciles. Second, agree a variant code convention before creating the first one: codes are limited to 10 characters, they appear on every document line, and renaming them after transactions exist is not realistically possible. `M-RED` beats `MEDIUMRED1` on every count. ## Variants and pricing Sales and purchase prices can be set per variant, and stock can be reserved per variant, but planning runs at the item-and-variant level so MRP works correctly. If replenishment differs per variant *and* per location — the red mugs sell only in the Stockholm store — combine variants with stockkeeping units, which give each item/variant/location combination its own reordering policy and lead time. That's also the level at which the [planning worksheet](https://www.solvingdynamics365.com/guides/business-central-planning-worksheet) generates suggestions, so a variant with real demand and no SKU-level parameters inherits whatever the item card says, sensible or not. ## Attributes **Item attributes** are descriptive properties — material, country of origin, certification, weight class — used for filtering, search, and reporting. Attributes are key-value pairs with predefined types (Option, Text, Date, Number), and they're attached to an item or an item category. They do not create stock-keeping differences. ## Item categories A hierarchical **item category** holds default attributes — set "Country of Origin" on the "Imported Bicycles" category and every item in that category inherits the attribute. Categories also default posting groups, item tracking, and reordering policies, so they're the most efficient way to manage large catalogues. ## When variants fall short Variant codes are flat (a single dimension). For two-dimensional configurations — sizes *and* colours — companies typically encode both into the variant code (`L-RED`, `L-BLU`, `M-RED`, `M-BLU`) or use ISV apps that add true matrix variants. For configurable products with engineered options, you need a separate product configurator add-on or step up to Supply Chain Management. ## Variants and item ledger Item ledger entries store the variant code, so all inventory transactions, costing, and reporting break down per variant correctly. Inventory valuation rolls up to the item but can be reported by variant. ## Attributes and e-commerce Attributes earn their keep hardest in web-connected catalogues. The Shopify connector and most e-commerce integrations map item attributes to product filters and specifications on the storefront — material, colour family, certifications — while variants map to the purchasable options. Get the split right in BC and the webshop's faceted navigation comes almost for free; get it wrong (everything encoded in item descriptions) and the integration team ends up parsing text with regular expressions. The same attribute data feeds marketplace listings and product data feeds, which makes finance's "descriptive metadata" suddenly a revenue concern. See [integrating Business Central with Shopify](https://www.solvingdynamics365.com/guides/integrating-business-central-with-shopify) for the connector specifics. ## A decision checklist For each way a product varies, ask three questions: 1. **Does it change what sits on the shelf?** Different physical stock → variant. Pure description → attribute. 2. **Does it change cost or price?** Per-variation pricing works on variants; attributes carry no commercial data. 3. **Will anyone filter or report by it?** Both support this — but attributes do it without multiplying stock-keeping records, so prefer them when question 1 says no. And one honest capacity question: how many combinations? A catalogue where items carry 2–20 variants fits BC's flat model comfortably. Hundreds of combinations per item (apparel with size × colour × fit) is matrix territory — budget for an ISV app with matrix entry screens from day one, because keying 300 variant lines by hand is how implementations lose the warehouse team's trust in week two. ## A common mistake Using variants for marketing taxonomy (brand, season, range). That belongs in attributes. Variants are for things that change stock. The tell-tale symptom of the inverted design: sales orders where staff must pick between near-identical variant codes that don't affect what ships, while the webshop team maintains a parallel spreadsheet of the properties customers actually filter by. If that spreadsheet exists, the model is upside down — fold it into attributes and reserve variant codes for the warehouse's reality. For the wider stock picture these records feed, see [inventory and warehouse in Business Central](https://www.solvingdynamics365.com/guides/business-central-inventory-and-warehouse). --- # Item availability and order promising in Business Central How Business Central computes item availability — on-hand, projected, ATP, CTP. Source: https://www.solvingdynamics365.com/guides/item-availability-and-order-promising-in-bc Section: Business Central / Inventory & warehouse Published: 2026-06-04 When a customer asks "can you ship this by next Tuesday?", the right answer needs more than just current inventory. **Item availability** in Business Central considers on-hand stock, inbound orders, outbound commitments, planned production, transfers in flight — producing a forward view of when inventory will be available. **Order promising** turns that view into delivery date commitments. ## The availability views Business Central provides several availability views per item: - **By Location** — quantity on hand per warehouse / location. - **By Variant** — quantity per size / colour / configuration combination. - **By Lot** — quantity per batch (for lot-tracked items). - **By Period** — projected balance across upcoming periods (this week, next week, etc.). - **By Event** — itemised list of every projected event (sales order shipments, purchase order receipts, transfers, production completions) with running balance. - **By BOM Level** — for manufactured items, availability considering components and assemblies. - **By Timeline** — visual graph of projected balance over time. The same data, presented different ways for different decision contexts. ## The projected balance computation Starting from current on-hand, the system walks forward in time: - Adding inbound: open purchase orders (with expected receipt dates), open transfer-ins, planned production order completions, firmed assembly orders. - Subtracting outbound: open sales orders (with expected shipment dates), open transfer-outs, planned production order component consumption, service order item issuance. The projected balance at any future date is the running total. Negative projected balance signals a future stockout; positive balance signals capacity for additional orders. ## Available-to-Promise (ATP) **ATP** is the inventory available to commit to new orders at a given date, considering current commitments. The computation: - ATP at date D = sum of inbound through D − sum of outbound through D (including reserved). - Reservations are honoured — reserved stock isn't ATP-available to other orders. - For each future date, the ATP is the cumulative position. ATP answers: "if I take a new order for X units to ship on date D, can I deliver?" The answer is yes if ATP at D is at least X. ## Capable-to-Promise (CTP) **CTP** extends ATP by considering *plans* — not just existing supply but supply that could be created. The engine considers: - Lead time to produce or procure additional supply. - Current capacity availability. - Routing time on production. CTP answers: "if I take a new order for X units, when's the earliest I can deliver, considering we can produce or buy more?" The system suggests the earliest feasible date based on all the constraints. CTP requires the planning engine to be active and configured; it's more sophisticated than ATP but takes longer to compute. ## Order promising in practice When entering a sales line: 1. The user enters the customer's requested ship date. 2. The system evaluates availability: - If ATP at the date covers the quantity, confirm the date. - If not, the **Order Promising** function suggests: - Earlier ATP date (when sufficient stock will be available). - CTP date (if production / procurement is run to meet the request). 3. The user negotiates with the customer based on the system's suggestion. ## Order Promising worksheet A dedicated workspace consolidates the analysis: - Lists order lines with unmet availability. - Per line, shows ATP date and CTP date. - Per line, the user can: - Accept the new date. - Modify the requested date. - Trigger replenishment (a planned purchase / production / transfer). ## Reservation Once a delivery date is confirmed, **reservations** lock the needed inventory (or planned supply) against the sales line. Reserved inventory isn't visible to other ATP calculations — it's committed. ## Multi-location availability For multi-warehouse operations: - Availability can be computed per location or aggregated. - Order Promising can suggest sourcing from alternative locations if the requested location is short. - **Transfer planning** triggers cross-location moves. **Limits.** - **ATP / CTP at item level only** — no automatic capacity-aware promising for multi-level BOM (CTP considers final-item production but doesn't deeply walk component supply chains). - **Lead-time accuracy critical** — wrong lead times produce wrong CTP suggestions. - **No external integration to suppliers' availability** — CTP assumes your supplier will deliver on time per their stated lead time. **Common pitfalls.** - **Stale demand / supply data** — open orders not updated as customer dates change; cancelled orders not closed. Projected balance becomes wrong. - **Ignoring reservations** — promising stock that's already reserved to other customers. - **Overly optimistic CTP** — production lead time doesn't reflect reality. - **Date confusion** — customer requested date vs system shipping date vs delivery date; alignment matters. ## Operational reality Order promising works when the underlying data is honest. Spend the discipline maintaining lead times, dates, and reservations; the system rewards you with reliable delivery promises that customers can count on. --- # Item categories in Business Central How to structure a Business Central catalogue with item categories — hierarchy, defaults, attributes, and the integration with templates and reporting. Source: https://www.solvingdynamics365.com/guides/item-categories-in-business-central Section: Business Central / Inventory & warehouse Published: 2026-05-01 A Business Central tenant with 10,000 items needs structure. **Item categories** are the hierarchical taxonomy that organises the catalogue — for reporting, for default propagation, for catalogue navigation, for analytics. Built well, they make a large catalogue navigable and the master data consistent; built badly, they're a tangled afterthought nobody trusts. ## The hierarchy Item categories form a parent-child tree of arbitrary depth (though 3–5 levels is typical). Example for a clothing distributor: ``` Apparel ├── Mens │ ├── Mens Tops │ │ ├── Mens Shirts │ │ └── Mens T-Shirts │ └── Mens Bottoms ├── Womens │ ├── Womens Tops │ └── Womens Bottoms └── Childrens ├── Boys └── Girls ``` Each item is assigned to exactly one leaf category. Reports aggregate up the tree. ## Defaults from categories Categories carry default values that propagate to items in them: - **Posting groups** — Inventory Posting Group, General Product Posting Group, VAT Product Posting Group. - **Reordering policy** — replenishment defaults. - **Item tracking** — default lot / serial / expiration policy. - **Costing method** — though typically per-item. - **Default dimensions** — Product Line, Brand. When you create a new item and assign it to a category, the system can default these from the category, dramatically reducing per-item configuration effort. Categories nest defaults so a child category inherits the parent's defaults unless explicitly overridden. ## Item attributes by category Beyond defaults, categories propagate default **item attributes** — descriptive key-value properties for filtering and search. A *Mens T-Shirts* category might default attributes for *Size*, *Colour*, *Material*, *Fit*. Every item in the category inherits the attribute slots; values are filled in per item. ## Integration with templates Item categories and item templates work together. A template handles the operational defaults (posting groups, costing); a category handles taxonomic placement and attributes. The pattern: create an item from a template, then assign to a category. The new item has the right posting setup *and* the right attribute structure. ## Reporting by category Categories appear in: - **Sales by Item Category** reports — revenue, margin, units across the hierarchy. - **Inventory by Item Category** — stock value per category. - **Power BI** — category as a dimension axis for any analysis. For most reporting needs, the category hierarchy is the customer-facing analytical lens. ## Search and lookup When users search for items in the BC UI, category navigation lets them narrow down the catalogue. *Mens → Mens Tops → Mens Shirts* surfaces only relevant items. Combined with attribute filters (Size = L, Colour = Blue), users find items fast. ## E-commerce integration When BC connects to Shopify or another storefront, item categories translate to product collections / categories on the storefront. The category structure on the BC side aligns with what customers see online. **Common pitfalls.** - **Marketing taxonomy in categories.** Categories should reflect *how items are sold, stocked, and managed* — not the season's marketing storyline. Marketing dimensions go in attributes. - **Too deep** — 8-level hierarchies become navigation hell. Aim for 3–5 max. - **Category sprawl** — every minor variation as a new category dilutes reporting roll-ups. Consolidate ruthlessly. - **Items without category** — orphans skip the defaults and dimension lookups. Mandate categorisation in workflow. ## Renaming and restructuring Categories can be renamed; items can be re-assigned. But large-scale restructuring of an active catalogue is invasive — re-categorisation cascades through reports and dimensions. Get the structure right early; refine carefully. ## Operational reality Spend a day designing the category tree before mass-creating items. The structure outlasts every operational decision built on top of it. --- # Item charges in Business Central How item charges work in Business Central — freight, duty, insurance, and other landed costs that need to be added to inventory value. Source: https://www.solvingdynamics365.com/guides/item-charges-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 **Item charges** in Business Central handle the costs that should be included in inventory value but aren't tied to specific items on the purchase invoice. Freight, duty, insurance, brokerage, packaging, and handling — all classic examples. Done right, item charges produce accurate landed cost; done wrong (or skipped), inventory value diverges from reality and COGS becomes unreliable. ## The problem A purchase order arrives for 1,000 units of Item A at $50 each = $50,000. The freight bill comes separately for $3,500, and customs duty is $4,200. The total landed cost is $57,700, or $57.70 per unit. If you just post the freight and duty as expense, the inventory value remains at $50/unit and gross margin on the eventual sale is wrong by 15%. ## Item charge cards An **item charge** is a master record like an item but with no inventory tracking — just a description and posting setup. Common item charges: *Freight Inbound*, *Customs Duty*, *Insurance Inbound*, *Brokerage*, *Special Handling*. ## Posting item charges Item charges are posted on purchase invoices (or credit memos) as lines with the **Type = Charge (Item)**. Each charge line has a quantity, a price, and crucially, an **assignment** to the inventory lines being charged. **Assignment methods.** - **Equally** — split the charge evenly across the assigned item ledger entries. - **By Amount** — split the charge proportionally to the line amount (a $1,000 freight on a $50,000 + $50,000 split lands $500/$500). - **By Weight** — if items carry weight, split by weight (the heavier goods get more freight). - **By Volume** — if items carry volume, split by volume. - **Manual** — distribute by user-defined amounts per line. The assignment can be against item ledger entries from the *same* purchase invoice, or against *prior* purchase receipts when the freight bill arrives weeks after the goods. ## Linking to prior receipts This is the powerful pattern. A separately-invoiced freight bill arrives a month after the goods. On a new purchase invoice, the user adds the item charge line and uses **Get Receipt Lines** to pull in the relevant prior receipts; assignment distributes the freight across them, and the item ledger entries (already posted) are *retroactively adjusted* with the additional landed cost when **Adjust Cost — Item Entries** next runs. ## Item charges on sales Item charges can also flow on **sales returns** — when a customer returns goods and freight to the seller is incurred, the seller can post the freight as an item charge on the return receipt, reducing the credit's inventory impact. ## GL impact Item charges post: - Debit to the inventory account (value entry contributing to landed cost). - Credit to the vendor (or sales) account. The inventory account credit happens when **Adjust Cost** runs and **Post Inventory Cost to G/L** propagates the change. **Common pitfalls.** - **Posting freight as a GL expense, not an item charge.** Inventory under-valued; COGS misstated. - **Forgetting to assign the charge.** Item charge line saved but no assignment — the cost sits in a holding account and doesn't reach inventory. - **Missing the cost adjustment step.** Item charges only flow to inventory value after Adjust Cost runs. Run it before period close. ## Practical advice Map your top three to five landed-cost charge types up front, configure item charge cards for each, train AP to recognise them on invoices. --- # Item substitutes and cross-references in Business Central How Business Central handles item alternatives — substitutes when stock is short, cross-references for customer / vendor part numbers. Source: https://www.solvingdynamics365.com/guides/item-substitutes-and-cross-references-in-bc Section: Business Central / Inventory & warehouse Published: 2026-05-21 Inventory operations are rarely as tidy as the master data suggests. Customers ask for items you've discontinued. Suppliers ship the new generation when you ordered the old. Multiple suppliers offer functionally-equivalent parts. Business Central's **item substitutes** and **item cross-references** handle this complexity natively. ## Item substitutes A **substitute** is an alternative item that can replace the originally-requested one. Each item can have a list of substitutes with: - **Substitute No.** — the alternative item. - **Interchangeable** — Yes / No. *Interchangeable* means the substitute fully replaces; *No* means it requires customer approval or qualification. - **Condition** — optional priority or condition. ## When substitutes engage During sales order entry, if the requested item is out of stock or otherwise unavailable: - The sales line shows availability warning. - The user can open the **Item Substitutions** action to see available alternatives. - Selecting a substitute replaces (or adds) the line with the alternative. - If "Interchangeable", the substitution is automatic with documentation; if not, customer approval is captured. **Use cases.** - **Generation upgrades** — Model 2024 substitutes for Model 2023 of the same product family. - **Brand alternatives** — Brand X premium battery substitutes for Brand Y standard. - **Equivalent components** — different SKUs that fit the same application. - **Discontinued items** — old item still in stock; substitute is the replacement going forward. - **Quality grades** — premium grade substitutes for standard if standard is out of stock. ## Item cross-references A **cross-reference** maps your item number to an external party's item number — most commonly: - **Customer item number** — the customer's part number for the same goods. A wholesale customer may use their own SKUs that differ from yours. With cross-references, they place orders using their numbers; BC resolves to your item numbers automatically. - **Vendor item number** — the supplier's part number for the same item. Useful for purchase order processing — print the vendor's part number on the PO, save the supplier from translation. - **Bar code** — the EAN / UPC / GTIN code for scanning. - **Manufacturer number** — when reselling another manufacturer's product, their reference number for compatibility lookups. Cross-references are bidirectional — looking up by your item gives the cross-reference; looking up by the cross-reference (e.g. a scanned barcode) finds your item. ## Cross-references at order entry When entering a sales line, the user can: - Type your item number directly. - Type the customer's part number (looked up via cross-reference). - Scan a barcode (looked up via cross-reference). All three resolve to the same item ledger entries. The customer receives an invoice with both your part number and (optionally) their part number, depending on the document layout configuration. ## Cross-references on purchases On the purchase side, the vendor's part number can print on the PO so the supplier sees their own reference, not your internal number. Reduces translation errors and miscommunications. **Limits.** - Cross-references are flat key-value mappings; not hierarchical alternatives. - Substitutes don't handle complex multi-item substitutions (replace one item with three different ones); for that, use BOMs or assembly orders. - No automatic price re-evaluation when substituting — the substitute uses its own price, which may differ from the original. **Reporting and analysis.** - Substitution log — what substitutions happened, when, for which customers. Useful for product-management analysis. - Cross-reference list per item — see all external references mapped to your items. **Common patterns.** - **Distributor business** — heavy use of customer cross-references; customers order with their part numbers, BC resolves. - **Industrial equipment** — manufacturer cross-references for compatibility lookups. - **Aftermarket parts** — substitutes for generation changes. **Common pitfalls.** - **Cross-reference duplicates** — the same customer's part number mapped to multiple of your items causes lookup ambiguity. Audit. - **Outdated substitutes** — substitutes for discontinued items still surfacing in lookups. - **No cross-reference for major customers** — every order requires manual translation, slowing the AR team. ## Operational discipline Build the cross-reference catalogue during customer / vendor onboarding. Maintain as relationships evolve. Audit during periodic data-quality reviews. --- # Item templates in Business Central How item templates standardise product creation in Business Central — defaults, categories, and the integration with item attributes. Source: https://www.solvingdynamics365.com/guides/item-templates-in-business-central Section: Business Central / Inventory & warehouse Published: 2026-05-01 Items are the most numerous master records in most Business Central tenants. Distributors carry tens of thousands of SKUs; manufacturers configure thousands of components. **Item templates** are how that scale stays consistent — pre-defined defaults that apply to every new item created from the template, ensuring posting groups, units of measure, and tracking rules are coherent across the catalogue. ## The model An **item template** carries: - **Type** — Inventory, Service, or Non-Inventory. - **Posting groups** — General Product, Inventory, VAT Product. - **Costing method** — FIFO, LIFO, Average, Standard, Specific. - **Base unit of measure**. - **Item tracking code** — none, serial, lot, both, with expiration tracking. - **Replenishment system** — Purchase, Production, Assembly, Transfer. - **Reordering policy** — Lot-for-Lot, Fixed Reorder Qty, Maximum Qty, Order. - **Default dimensions** — Department, Cost Centre, Product Line. - **Default location** — for inventory placement. - **Tax fields and country codes**. - **Custom fields** added via extensions. Templates can be flagged for use in specific scenarios — e.g. a *Resale Item* template for goods you buy and resell, a *Manufactured Item* template for items produced in-house, a *Service Item* template for non-stock services. ## Item categories Beyond templates, **item categories** form a hierarchical taxonomy that further drives defaults. An item created from a template can be assigned to a category that overrides or supplements the template defaults. Categories also default **item attributes** — descriptive properties for filtering and search. ## The interaction with item attributes Item attributes (Material, Country of Origin, Brand, Size, etc.) are key-value pairs attached to items. Categories propagate default attributes to all items in the category. Templates can establish baseline attributes for the category. The pattern: template + category + attributes = fully described item with minimal manual entry. ## Bulk creation Combined with Configuration Packages or Excel imports, templates accelerate bulk item creation during migration or product launches. Each row in an import references a template; the template defaults fill in the missing fields. **Common patterns.** - **Trade-style distributor** — five to ten templates per product family (e.g. *Electronics-Stocked*, *Electronics-Drop-Ship*, *Clothing-Stocked*, *Clothing-Promo*). - **Manufacturer** — templates per item role (*Raw Material*, *Component*, *Sub-Assembly*, *Finished Good*) with appropriate costing and tracking. - **Service business** — *Billable Hours*, *Project Materials*, *Subscription Service*. **Pitfalls.** - **Too many templates** — every minor variation as a separate template becomes its own maintenance burden. Aim for fewer than 15. - **Out-of-sync templates and category defaults** — conflicting defaults confuse the user. Audit. - **Item created without template** — manual creation skips the defaults and lands inconsistent data. Train users; consider mandating template use through workflow. ## Updating templates Like customer / vendor templates, changes apply only to *new* items. To propagate to existing items, use bulk-edit tools on the item list. ## Operational discipline Design templates around how the items are *used*, not how they're *categorised* for marketing. The user fills in what the customer-facing context cares about; the template handles the operational defaults the user shouldn't need to think about. --- # Item tracking — lots and serial numbers in Business Central How Business Central's item tracking handles lot and serial numbers — tracking codes, the item tracking lines window, picking specific lots, expiration dates. Source: https://www.solvingdynamics365.com/guides/item-tracking-lots-and-serials-in-bc Section: Business Central / Inventory & warehouse Published: 2026-05-01 **Item tracking** in Business Central is the mechanism that lets the system follow individual lots or individual serial numbers through every transaction — from purchase receipt to production consumption to final sale and warranty claim. Without it, an item is fungible; with it, every unit (or every batch) carries identity. **Lot vs serial.** - **Serial number** — uniquely identifies a single unit. Used for high-value or traceability-critical items: medical devices, vehicles, premium electronics. Quantity per serial is always 1. - **Lot number** — identifies a batch of identical units produced or received together. Used in food, pharma, chemicals, anything with shelf life or recall obligations. Quantity per lot is many. An item can require both (lot + serial), but that's unusual and operationally heavy. ## Item Tracking Code Tracking behaviour is defined on an **Item Tracking Code** record, then assigned to the item. The code captures: - **Lot specific tracking** — whether lots are required on every transaction. - **Serial specific tracking** — same for serials. - **Warranty date** — if and how warranty dates are captured. - **Expiration date** — if and how expiration dates are captured, and whether FEFO (First Expired First Out) applies. - **Strict expiration posting** — prevents posting transactions for items past expiration. You design a few tracking codes (e.g. `FOOD`, `MEDICAL`, `SERIAL-WTY`) and reuse them across items. ## The Item Tracking Lines window Whenever a tracked item appears on a document line — sales order, purchase order, transfer, production output — the user opens **Item Tracking Lines** (`Ctrl+Shift+I` in some role centres) to specify which lots or serials. The window enforces: - The total tracked quantity equals the line quantity. - The specified lots/serials exist in inventory (for outbound) or are valid (for inbound). - No double-allocation across documents. For inbound documents, the user enters new lot/serial numbers — either typed, captured by barcode scan, or auto-assigned from a number series. ## Expiration dates and FEFO For pharma and food, expiration is the dominant dimension: - Inbound transactions capture the expiration date per lot. - Outbound transactions automatically pick the earliest-expiring lots first (FEFO) if `Pick According to FEFO` is enabled. - Reports list lots approaching expiration so they can be sold, transferred, or scrapped. ## Reservation Item tracking integrates with reservations: a sales order can reserve specific lots (e.g. for a customer that pre-paid for a specific batch). The reservation engine prevents anyone else from allocating the same lots. ## Posting and traceability When a transaction posts, an `Item Ledger Entry` is created with the lot/serial number. The **Item Tracing** function lets you trace any lot or serial backwards (origin) or forwards (destinations) through every transaction it appeared in. For a recall, item tracing is the difference between an hour's work and a week. ## Warehouse integration In a warehouse-managed location, lots and serials are captured at the bin level too — the **Warehouse Entry** records which bin holds which lot. Picking and put-away workflows enforce tracking capture. **Common pitfalls.** - **Enabling tracking after go-live.** Switching an item from non-tracked to tracked is operationally painful — existing inventory has no lot/serial. The fix is a counting journal with retroactive tracking, but it's tedious. - **Lot number duplication.** Lot numbers are not unique across all items by default. Two different items can have lots called "L001". For unambiguous tracing, prefix lot numbers with vendor or production codes. - **Strict expiration posting forgotten.** Without it, expired stock can still be shipped — a regulatory and reputational hit. - **Slow item tracking lines window.** On high-volume warehouses with millions of lot ledger entries, the tracking lines window slows down. Indexes and archival of old entries help. ## Audit and recall Lot/serial traceability is a regulatory requirement in many industries (FDA 21 CFR Part 11, EU food law, medical device regulations). Auditors will test recall capability: pick a lot, trace it forward, confirm you can identify every customer who received it. BC's item tracing is the tool that makes that audit pass. ## Operational discipline Item tracking only works if it's captured at every step. A warehouse operator who skips lot capture on an inbound receipt breaks traceability for every subsequent transaction touching that stock. Training, scanner-driven workflows, and process design matter more than the system configuration itself. --- # Jobs vs Projects in Business Central The 2023 rename of Jobs to Projects in Business Central — what changed, what didn't, and how the renaming affects extensions, reports, and people. Source: https://www.solvingdynamics365.com/guides/business-central-jobs-vs-projects Section: Business Central / Service & projects Published: 2026-05-01 Updated: 2026-08-25 In wave 2 of 2023, Microsoft renamed the **Jobs** module in Business Central to **Projects**. The change is mostly cosmetic, but it ripples through training materials, extensions, reports, and the institutional vocabulary of any partner or customer that has run BC (or NAV) since the early 2000s. If you read older documentation, the terminology can be confusing. **What changed.** - **UI labels.** "Jobs" became "Projects" in the role centre, navigation, list pages, card pages, and document captions. "Job journal" became "Project journal", "Job planning lines" became "Project planning lines", and so on. - **Reports and Power BI content** were updated to reference the new captions. - **Permission sets** were renamed in the base permission catalogue. **What didn't change.** - **AL object names.** The underlying table is still `Job` (table 167). `Job Task`, `Job Ledger Entry`, `Job Planning Line` — all retained their `Job` prefix. This is intentional: renaming objects breaks every dependent extension on AppSource. Microsoft chose UX consistency over schema consistency. - **API endpoints.** Most BC APIs that surface jobs still use `jobs` in the URL. - **PowerShell cmdlets** that reference jobs. ## The consequence A developer reads "Projects" in the UI but writes `Rec.Job No.` in code. Training materials need to bridge both vocabularies. Reports built with field captions inherit "Project" labels; reports built with hard-coded text need updating. ## Why the rename Two reasons: - **Brand alignment with Project Operations** in the wider Dynamics 365 family. Customers comparing BC's Project module to D365 Project Operations were confused by the "Jobs" name. - **Industry vocabulary.** Outside of construction and field service, "Job" is uncommon as a term for billable engagements. "Project" is more universal. **What "Projects" in BC actually does.** - **Project planning** — task breakdown, planning lines (budget vs billable), schedule. - **Time and expense capture** — via the project journal or the user's time sheet. - **WIP** — work-in-progress recognition; cost recognised separately from billing. - **Billing** — fixed-price, time-and-material, or milestone, via sales invoices linked to project tasks. - **Job costing** — actual costs vs budgeted vs billable, by task. Projects in BC sit between the simplicity of sales orders and the complexity of Project Operations in F&O. For service businesses with a few hundred billable people and straightforward project structures, BC's Projects module is often sufficient. ## Localisation and translation The rename was rolled out language by language. Some translations took longer to land than English — be aware that older non-English BC tenants may still show "Jobs". ## Extensions Apps on AppSource generally followed Microsoft's lead: captions updated, object names untouched. If you maintain an extension that touches the Jobs/Projects domain, your captions should align — but your code remains valid. ## Reports and dashboards A Power BI report that pulled job data via the BC API and named visuals "Job profitability" still works, but the visuals now read incorrectly. Periodic UX hygiene cleans these up. ## Operational impact Users who've been on NAV/BC for years take a few weeks to switch vocabularies; new users only ever see "Projects". The biggest pain point is documentation — training decks, runbooks, and internal wikis still saying "Job number" need updating. ## Looking ahead Microsoft has signalled further alignment between BC Projects and D365 Project Operations, but a single shared engine is not on the public roadmap. For now, the two products remain distinct: BC Projects for mid-market service organisations, Project Operations for larger or more complex engagements. The "Jobs → Projects" rename was a vocabulary harmonisation, not a product convergence. ### Frequently asked questions **When did Business Central rename Jobs to Projects?** In the 2023 release wave 2. Role centre labels, pages, journals, reports, and permission set names changed to Project; the underlying AL objects did not. **Did the table and API names change too?** No. The table is still Job (table 167), and Job Task, Job Ledger Entry, and Job Planning Line keep their names, as do most API endpoints and PowerShell cmdlets. Renaming objects would have broken every dependent extension on AppSource. **Is Business Central Projects the same as Dynamics 365 Project Operations?** No. BC Projects is the mid-market module — planning lines, time and expense, WIP, and fixed-price, time-and-material, or milestone billing. Project Operations is the larger professional services automation product. The rename was vocabulary harmonisation, not product convergence. **Why do some non-English tenants still show Jobs?** The rename rolled out language by language, and some translations landed after English. Older non-English tenants may still show the old captions. --- # Journey orchestration tips and tricks in Customer Insights — Journeys Practical patterns for building effective journeys — trigger design, wait steps, AI-suggested next-best-actions, dynamic content. Source: https://www.solvingdynamics365.com/guides/journey-orchestration-tips-and-tricks Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 Customer Insights — Journeys turns segment membership and event signals into automated, multi-channel customer experiences. The journey designer is approachable, but real-world journeys quickly hit subtleties: timing, suppression, branching, and the inevitable need to extend beyond the built-in primitives. **Journey types.** - **Segment-based** — runs continuously; new segment members enter, exit when they leave. - **Trigger-based** — single event triggers a journey instance per profile. - **Series** — sequential set of campaigns or events. Trigger-based journeys are the modern pattern for behavioural marketing — actions trigger immediate, personalised follow-ups. ## Triggers A trigger is an event: - **System trigger** — built-in (email opened, link clicked, form submitted). - **Custom trigger** — defined event from any source via API or Power Automate. - **Dataverse trigger** — record create/update/delete. Custom triggers are the power feature — emit "Order Placed" from your e-commerce platform; trigger a confirmation journey. **Branching.** - **If/then** — split based on profile attributes or event details. - **Channel preference** — email vs SMS based on preference. - **A/B test** — two variants of the same step, comparison reported. Deep branching becomes hard to maintain; keep journeys shallow and modular — let sub-journeys handle complex sub-flows. ## Wait steps Insert delays: - **Fixed wait** — wait 3 days. - **Wait until** — wait until a date, or until a recipient performs an action. - **Wait until time of day** — send at 9 AM local time. Time-of-day waits respect the recipient's time zone if it's captured — invaluable for global campaigns. ## Dynamic content Personalised content via: - **Personalization fields** — `{{contact.firstname}}` in emails. - **Conditional blocks** — show different content based on profile attribute. - **Dynamic product recommendations** — pulled from connected catalog. - **Loyalty status, recent activity** — context-aware references. For high-volume campaigns, personalised content drives meaningfully better engagement. ## Multi-channel A single journey can mix: - **Email** — primary channel. - **SMS** — high-engagement, transactional. - **Push notification** — mobile app. - **In-app message** — within product surface. - **Custom channels** — via API integration. Pattern: try email first; SMS if no open within 24 hours; phone if no SMS response within 48 hours. **Suppression.** - **Global suppression** — opt-outs, unsubscribes. - **Journey-specific suppression** — exclude profiles in other journeys. - **Frequency caps** — no more than N messages per week to one profile. Frequency cap is critical at scale; without it, recipients get bombarded as multiple journeys fire concurrently. ## AI suggestions Built-in Copilot features suggest: - **Next-best-action** — given current journey state and profile. - **Subject line variations** — for A/B testing. - **Send-time optimisation** — when this recipient is most likely to engage. Use as a starting point; refine with judgment. ## Real-time vs scheduled journeys Real-time journeys process events immediately; scheduled journeys batch. For transactional flows (order confirmation), real-time. For nurture campaigns (weekly newsletter), scheduled is fine. ## Goal tracking Each journey defines a goal — conversion event the journey is designed to drive: - **Goal reached** — profile exits successfully. - **Conversion rate** — reached / entered. - **Time to goal** — average. Without goals, journeys can't be optimised. **Common patterns.** - **Welcome series** — new subscriber → 3-email onboarding over 2 weeks. - **Cart abandonment** — added to cart → wait → reminder → wait → incentive. - **Birthday / anniversary** — date-triggered. - **Re-engagement** — inactive 90 days → win-back series. - **Event invitation** → reminder → post-event follow-up. **Workarounds for limits.** - **Too-complex single journey** → split into multiple journeys with hand-off triggers. - **No native loop** → use a counter attribute and re-entry logic. - **External data needed** → call Power Automate as an action step. **Reporting.** - **Funnel analytics** — entry, by step, exit. - **Per-step metrics** — open, click, conversion per email. - **Audience overlap** — how many in multiple journeys. **Common pitfalls.** - **No frequency cap.** Same profile in 5 active journeys; gets 20 emails a week; unsubscribes en masse. - **Trigger event noisy.** Custom trigger firing wrong; journey starts for unintended audiences. - **Suppression incomplete.** Customers who complained still receive next journey. - **Goal not defined.** Journey can't be evaluated for effectiveness. - **Schedule miscoordinated.** Two journeys send conflicting messages on the same day. - **Data dependency missing.** Personalisation field empty for some recipients; broken email. ## Operational discipline Production journeys need lifecycle management: build, test with small audience, scale to full, monitor, iterate, retire. A journey shipped without monitoring becomes liability — when something breaks, the inbox tells you, not the analytics. Treat journey orchestration as engineering: testable, observable, version-controlled, retired when no longer adding value. --- # Knowledge management in Customer Service Authoring, versioning, publishing, and surfacing knowledge articles in Dynamics 365 Customer Service — for agents, customers, and Copilot. Source: https://www.solvingdynamics365.com/guides/customer-service-knowledge-management Section: Customer Engagement / Customer Service Published: 2026-05-01 A working knowledge base is the unglamorous foundation of every high-performing customer service team. Cases close faster, customers self-serve more, and AI agents have something useful to ground in. Dynamics 365 Customer Service ships a complete knowledge management stack. ## Knowledge articles A **knowledge article** is a Dataverse record with a title, structured rich-text content, related products, categories, keywords, languages, and lifecycle status. Articles support inline images, tables, embedded videos, and link to related articles. Each article has a unique URL and a stable identifier through its lifetime. ## Lifecycle and versioning Articles move through configurable states: **Draft → In Review → Approved → Published → Expired → Archived**. Major and minor versions are tracked, and prior versions are retrievable. Reviewers and approvers are routed through workflow with capture of comments and decisions. ## Translations A primary-language article can have **translations** in any number of additional languages. Each translation has its own lifecycle and version. The platform tracks parent-translation relationships so changes in the primary surface as out-of-sync flags on translations. ## Categories and metadata Articles are organised in **categories** (hierarchical) and tagged with **keywords**, **products**, and **subjects**. Routing and search use these for filtering. Good taxonomy is the difference between a useful knowledge base and an unfindable dumping ground. ## Search Built on **Dataverse search** with relevance scoring, synonyms, and language-aware tokenization. Search appears in the agent workspace, in the customer portal, and inside the Copilot pane during conversations. ## Surfacing to agents Inside the agent workspace, contextual search shows articles matching the case subject, recent customer interactions, and product. Agents can attach articles to cases (incrementing usage counters) and email them to customers from the case form. ## Customer self-service Articles can be flagged for **external publishing**, where they're exposed on a customer-facing portal (typically built on **Power Pages**). Customers search, browse categories, rate articles, and provide feedback that flows back to authors. ## Copilot grounding The new **case Copilot** and **chatbot agents** in Copilot Studio ground their answers in the knowledge base — so writing good articles directly improves AI response quality. Articles tagged for AI use are prioritised; out-of-scope content can be excluded. ## Analytics Built-in dashboards show article views, ratings, usage in cases, gap analysis (case topics with no matching article), and feedback summaries. Use them to drive an editorial backlog. ## Governance Assign owners, set review schedules, and retire stale content. A neglected knowledge base hurts more than no knowledge base. --- # Knowledge management in Dynamics 365 Customer Service — a deep dive How D365 Customer Service handles knowledge articles — authoring, versioning, lifecycle, search, and the patterns for keeping knowledge useful at scale. Source: https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-knowledge-management-deep-dive Section: Customer Engagement / Customer Service Published: 2026-05-01 A customer service team that resolves cases by re-deriving answers each time is wasting effort. **Knowledge management** in Dynamics 365 Customer Service captures, organises, and surfaces resolutions — so the next agent (or the customer themselves through self-service) finds the answer fast. The capability is mature; the discipline of maintaining knowledge is the differentiator. **The knowledge article entity.** - **Title** — what the article addresses. - **Subject** — taxonomic categorisation. - **Content** — rich-text body with formatting, images, links. - **Keywords / tags** — for search. - **Languages** — multi-language variants of the same article. - **Status** — Draft / In Review / Approved / Published / Archived. **The lifecycle.** 1. **Author** drafts the article. 2. Submit for review. 3. **Reviewer** reviews; approves or rejects. 4. **Published** — available to agents and (optionally) external surfaces. 5. **Updated** — new version drafted; review cycle repeats. 6. **Archived** — out of date; preserved for reference. Each stage has workflow support; the lifecycle is auditable. ## Multi-language A single article can have language variants: - "Master article" in primary language. - Translations as language variants. - Versioning happens per language. This supports global service teams without separate article trees per locale. ## Knowledge base search From within a case: - Agent types question or keywords. - KB articles ranked by relevance. - Articles linked to cases. The search uses Dataverse search; properly tagged articles surface quickly. ## Suggested articles Copilot-driven: - AI reads the case description. - Suggests likely-relevant articles. - Agent reviews; uses if appropriate. Reduces the search burden; agent doesn't need to know which keywords to try. **Self-service portal integration.** - Articles published with external visibility. - Customer searches knowledge in portal. - Resolution found without filing a case. Self-service deflection is the headline KPI for KM — every avoided case is meaningful cost saving. **Article ratings.** - Customers and agents rate articles. - "Helpful" / "Not helpful." - Low-rated articles flagged for review. - High-rated articles promoted in search. Without ratings, articles drift in quality over time. **Version history.** - Each publish creates a version. - Older versions retained. - Compare versions to see changes. Useful for "what changed?" investigations and compliance audits. **Templates and structure.** - **Symptom / Cause / Resolution** — common structure. - **Step-by-step instructions.** - **Issue / Solution.** - **Reference articles** with policies. Standard templates improve consistency and authoring speed. ## Topic clustering Related articles linked: - "See also" links between articles. - Hierarchical organisation by subject. - Customer browses topic tree to find related content. **Analytics.** - **Article usage** — views, search hits, linked cases. - **Resolution rate** — how often article resolves the case. - **Effectiveness over time** — declining usage signals stale content. - **Top searched** — what customers ask but articles don't address well. These metrics drive the content strategy. **Content gaps.** - Cases that don't link to any article — opportunity. - Search queries with no good results — gap. - Repeated similar cases — candidate for new article. The gap analysis is the operational heart of KM. **Knowledge author teams.** - **Subject matter experts** — write content for their domain. - **Editors** — review, refine, publish. - **KM manager** — oversees the program. For larger orgs, dedicated KM team; for smaller, distributed authoring by support staff. **Integration with case resolution.** - Resolved case offered for conversion to KB article. - Resolution narrative seeds article content. - AI can generate a draft from the case. This is the productive cycle: case resolved → resolution becomes article → next agent uses article → case resolved faster. **Common pitfalls.** - **Articles never updated.** Knowledge stale; agents distrust. - **Search indexing wrong.** Articles exist; can't be found. - **No quality review.** Bad articles published; worse than no article. - **Publishing without translation.** Non-primary-language customers miss content. - **Article overload.** Too many articles; users can't find the relevant one. - **Single author bottleneck.** SME unavailable; backlog accumulates. **Operational rhythm.** - **Daily** — author new articles from recent cases. - **Weekly** — review article ratings, identify low-quality. - **Monthly** — content gap analysis; topic strategy. - **Quarterly** — comprehensive article audit; archive stale. ## Strategic positioning Knowledge management is the unsexy work that compounds value over years. A mature KM program reduces case resolution time, raises self-service deflection, and serves as the institutional memory of the support organisation. The investment is continuous editorial work — not glamorous, but high-leverage. The teams that take KM seriously have measurably better service operations than teams that don't. The capability is in Dynamics; the discipline must come from the organisation. --- # KYC and client onboarding workflows on Dynamics 365 How banks, wealth managers, and fintechs run know-your-customer onboarding on Dynamics 365 — the onboarding case model, business process flow stages. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-financial-services-kyc-onboarding Section: Industries / Financial services Published: 2026-09-02 Know-your-customer onboarding is a workflow problem wrapped in a regulatory one. A relationship manager needs to collect identity and ownership documents, verify them, screen the client against sanctions and politically-exposed-person lists, rate the risk, get approval, and open the account — while producing an audit trail a regulator can read years later. Dynamics 365 is a good orchestration layer for this, and a bad choice for the pieces that need specialist engines. This guide covers the pattern that keeps those roles straight. For the sector overview see [Dynamics 365 for financial services](https://www.solvingdynamics365.com/guides/dynamics-365-for-financial-services); for what Microsoft's industry cloud adds, [Microsoft Cloud for Financial Services](https://www.solvingdynamics365.com/guides/microsoft-cloud-for-financial-services). ## What Dynamics 365 does and does not do It does: case-style workflow with stages and gates, task assignment, document collection and storage, integration with verification and screening services, approval routing, audit logging, and a single view of the client and everything gathered about them. It does not: verify identity documents to a certified standard, screen against sanctions lists, score AML risk with a supervised model, or hold the account. Identity verification vendors, screening providers, transaction-monitoring platforms, and the core banking system do those. An onboarding design that has Dynamics 365 doing screening from a downloaded list is a design a regulator will dislike. ## The onboarding case Model each onboarding as a record — a case in Customer Service, or a dedicated onboarding table for institutions that want a clean schema — linked to the client (contact or account) and to the related parties: beneficial owners, directors, signatories, each a contact with a relationship record carrying their role and ownership percentage. Ownership structures for corporate clients are trees; the connection records and account hierarchies in Dataverse handle them, and the [account hierarchies](https://www.solvingdynamics365.com/guides/account-hierarchies-in-dynamics-365) guide is relevant. A **business process flow** encodes the stages: intake, document collection, verification, screening, risk assessment, approval, account opening, and complete. Each stage has required fields that act as gates — the flow cannot advance to screening without a verified identity document reference — and the stage history is part of the audit evidence. The [business process flows](https://www.solvingdynamics365.com/guides/business-process-flows-in-dynamics-365) guide covers the mechanics. Requirements vary by client type and jurisdiction: a retail individual, a domestic private company, and an offshore trust need different documents. Model the document checklist as data — a requirement matrix by client type and risk tier — that generates the required document records on the case, rather than hard-coding it into the flow. ## Collecting documents Clients upload through a **Power Pages** portal authenticated with Entra External ID; the [customer access](https://www.solvingdynamics365.com/guides/entra-external-id-for-customer-access) guide covers the identity side. Documents land in SharePoint or Dataverse file columns against the requirement record. **AI Builder** document processing can extract fields from passports, utility bills, and incorporation documents to pre-fill the case and flag mismatches; the [document automation](https://www.solvingdynamics365.com/guides/ai-builder-document-automation-in-depth) guide covers it. Extraction is a productivity feature, not identity verification — the verification result comes from the vendor. Retention matters: onboarding documents must be kept for the regulatory period after the relationship ends and then deleted. Set the retention policy on the storage location at design time, and make sure the file columns and SharePoint site are both covered; the [Purview](https://www.solvingdynamics365.com/guides/dynamics-365-and-microsoft-purview) guide describes the labelling. ## Screening and verification integration Identity verification and sanctions or PEP screening are external calls with a result and a reference. The clean integration is a Power Automate flow or an Azure Function triggered when the case enters the relevant stage, calling the vendor's API, writing the result and the vendor's reference to the case, and creating a review task if the result is a potential match. Never store the full screening response if it contains list data the institution is not licensed to retain; store the outcome and the reference. Match review is human work with a decision and a rationale, both recorded on the case. Rescreening happens at every review cycle and, for institutions with continuous monitoring from the vendor, on the vendor's alert — which arrives as an event that reopens the case or creates a review case. ## Risk rating and approval The risk rating combines client type, jurisdiction, products, ownership complexity, source of wealth, and screening results into a tier. Simple rating logic — a points table — lives comfortably in Dataverse as a calculated result or a small plug-in. Model-driven scoring belongs in the compliance platform and is written back as a tier. Whichever produces it, the tier drives the approval route: standard clients approved by the relationship manager's supervisor, high-risk by compliance, and some by a committee. Approval is a **four-eyes** control: the approver cannot be the preparer, the approval is a record with the approver's identity and timestamp, and the case cannot advance without it. Power Automate approvals or the case's own approval stage with a security-role check both work; the point is that the evidence is a record, not an email. Dataverse auditing must be enabled on the case, the client, the related parties, and the document requirement tables, with retention set to the regulatory horizon. The [Dataverse auditing](https://www.solvingdynamics365.com/guides/dynamics-365-data-protection-and-compliance) coverage describes the settings. ## Periodic review KYC is not once. Each client has a review date based on tier — annually for high risk, less often for standard — and a trigger event list: change of ownership, change of jurisdiction, a screening alert, unusual activity from monitoring. A scheduled flow creates review cases as dates fall due; integration events create them on triggers. The review case reuses the onboarding model with a lighter checklist. Institutions that build onboarding without periodic review build it twice. ## Account opening When approval completes, the account is opened in the core banking or portfolio system, not in Dynamics 365. The integration sends the approved client data, receives the account identifier, and closes the case. If the core system is the source for client static data thereafter, the CRM contact must be updated from it — the same system-of-record discipline that applies in every CRM-to-core integration. ## Cloud for Financial Services Microsoft's industry cloud provides a financial-services data model on Dataverse — customers, accounts, holdings, financial products — and unified-profile and onboarding components built on it. Adopt the data model early if the institution is likely to use more of the industry cloud; it saves inventing tables. Evaluate the onboarding components against the pattern above rather than assuming they replace it; they accelerate the case model and the profile, and still depend on the same external vendors for verification and screening. --- # Lead capture forms and consent management How Customer Insights – Journeys captures leads through forms — embedded forms, double opt-in, consent tracking, and GDPR-compliant data flow. Source: https://www.solvingdynamics365.com/guides/lead-capture-forms-and-consent-management Section: Foundations Published: 2026-05-01 Forms are how prospects become contacts in the CRM. **Customer Insights – Journeys** ships a hosted form builder with consent management aligned to GDPR and similar regulations. Using it well — instead of building forms in another tool and integrating loosely — is the difference between clean lead data and a compliance liability. ## Form design The form designer is drag-and-drop with question types: text, email, phone, dropdown, multi-select, date, file upload, custom HTML. Each field maps to a Dataverse column on either Contact, Lead, or a custom table. Validation rules (required, regex, max length) are configurable per field. ## Hosted forms Forms can be: - **Hosted by Microsoft** — published at a unique URL on Microsoft's infrastructure. The simplest path; suitable for landing pages, event registrations, simple lead-gen forms. - **Embedded on the customer's website** — a JavaScript snippet renders the form inside any page. Form submissions still flow to Microsoft's backend. - **Captcha protection** — built-in reCAPTCHA to prevent bots. ## Mapping to records On submission, the system decides whether to create a new record or update an existing one based on: - **Match on email address** — the most common rule. Existing contact with this email? Update. No match? Create new. - **Match on multiple fields** — match contact by email AND phone for stricter de-duplication. - **Always create** — for forms where each submission is a new event (event registration, donation, complaint). **Form submissions** are stored as records in their own right, so the historical submission data is preserved even if the contact is later deleted or merged. ## Consent capture Forms have **consent fields** — checkboxes the user must tick to confirm consent for specific purposes (marketing email, SMS, profiling, data sharing with partners). Each consent is stored separately so the user can opt in to marketing emails but not to SMS. ## The consent centre A separate **consent centre** holds the customer's consent state — what they've consented to, when, on which form. Journeys check the consent centre before sending: if the customer hasn't consented to email marketing, the journey skips email steps for them. ## Double opt-in GDPR-strict regimes often require **double opt-in** — the user submits the form (first opt-in), then clicks a link in a confirmation email (second opt-in) before they're added to the marketing list. Customer Insights – Journeys supports double opt-in flows as a built-in pattern. ## Preference centre A customer-facing **preference centre** (often hosted on Power Pages or as part of the unsubscribe link) lets the contact update their consent state — switch channels off, restrict topics, unsubscribe entirely. Required for GDPR transparency. ## Lead vs Contact decision When a form captures a new person, the system can create a **Lead** (a qualification-pipeline record) or a **Contact** (a CRM identity record): - **Lead** for cold inquiries from unknown sources — needs qualification before becoming a Contact. - **Contact** for known relationships — existing customers, returning event attendees. - **Hybrid** — some organisations skip Leads entirely and qualify directly on Contacts. The choice per form depends on the source's intent. ## Source tracking Forms can carry UTM-style parameters that record where the lead came from — campaign, source, medium, term, content. The values populate the Lead/Contact record so attribution reports work later. **Common pitfalls.** - **No consent capture** — leads are useless under GDPR without consent; sending marketing email triggers complaints. - **Forms built in a third-party tool without integration** — leads land somewhere unconnected to CRM; opportunities lost. - **Bot submissions** — without captcha, forms get spammed. Filter out at capture. - **No follow-up automation** — a lead captured but unworked is wasted spend. Configure a journey that fires on form submission. ## Operational reality Lead capture is half the marketing investment; treat it with the same discipline as the campaign itself. --- # Lead scoring with AI Builder How AI Builder lead scoring works in Dynamics 365 Sales — model training, features, scoring inputs, and operating the model in production. Source: https://www.solvingdynamics365.com/guides/lead-scoring-with-ai-builder Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 **AI Builder lead scoring** is the embedded machine-learning model in Dynamics 365 Sales that ranks leads by their likelihood of converting to a qualified opportunity. It exists because the manual lead-scoring rules sales operations teams traditionally build — points for industry, deductions for tiny accounts, points for whitepaper downloads — are slow to adjust and quickly become folklore. The AI model learns from outcomes and updates as the data evolves. ## Training The model is trained on the customer's own historical lead data. It looks at the **features** of leads that did or didn't convert — demographic (industry, size, location), firmographic, behavioural (web visits, email opens, form submissions), and source attribution — and finds patterns. Training is automatic and re-runs on a schedule, so the model stays current. ## Features Out-of-the-box features include standard lead fields, related contact and account attributes, and connected behavioural data from Customer Insights (where licensed). Customers can add custom fields to the feature set and exclude features that introduce noise. ## Scoring Once trained, the model scores **every active lead** and writes the score back to the lead record. The score is a value 0–100 with an explanation: which features contributed positively, which negatively. Scores refresh continuously as the lead's underlying data changes. ## Grades and tiers Scores are bucketed into **A/B/C/D grades** for triage. Sales operations decides the thresholds. Grades are what most users actually look at; the raw score is for analysis. ## Routing Routing rules can use the score or grade — A-grade leads route to senior reps, C-grade to nurture. Combined with the **sales accelerator**, scored leads land in seller queues in priority order automatically. ## Model accuracy The model reports its own accuracy (precision, recall, AUC) against held-out data, with the ability to drill into false positives and false negatives. Below an accuracy threshold, the model marks itself as low-confidence and rounds scores conservatively. ## Operating discipline Two pieces of discipline make the model work well: 1. **Outcome data must be reliable.** Lost leads with no reason marked, won deals not tied back to a lead — both pollute training. 2. **Periodic review.** Once a quarter, review which features the model is using and whether they match how the business actually wins. Models drift when the world changes (a new product line, a new geography, an economic shift) and need explicit attention. ## Where it fits AI Builder scoring is suitable for mid-to-large B2B businesses with at least a few thousand historical leads. For very small datasets, manual scoring rules outperform. --- # Leave and absence in Dynamics 365 Human Resources How Dynamics 365 HR handles leave plans, accruals, requests, approvals, and the policy variations that make leave management country-specific. Source: https://www.solvingdynamics365.com/guides/dynamics-365-hr-leave-and-absence Section: Customer Engagement / Human Resources Published: 2026-05-01 Leave administration is one of HR's most reliably high-volume processes — every employee, multiple times per year, across multiple leave types, with country-specific policies. **Dynamics 365 Human Resources** provides the leave engine, the request workflow, and the integration with payroll and time tracking. The depth of configuration is what makes or breaks deployments. ## Leave plans A **leave plan** defines an allowance: - **Leave type** — Vacation, Sick, Personal, Parental, Bereavement, Jury Duty, etc. - **Accrual method** — fixed annual grant, monthly accrual, hourly accrual. - **Accrual frequency** — monthly, per pay period, continuous. - **Maximum balance** — cap. - **Carry-over rules** — what rolls over between years. - **Probation** — accrual restrictions for new hires. Each country, sometimes each business unit, has different leave plans matching local employment law. ## Accruals The mechanism that grows the balance: - **Front-loaded** — full year's allowance granted on day 1 of the leave year. - **Periodic accrual** — equal amounts added each period (monthly accrual at 1.67 days/month for 20 days/year). - **Hours-worked accrual** — leave earned per hours worked (common for hourly employees). - **Tenure-based** — accrual rate increases with years of service. The accrual engine runs periodically (typically monthly) calculating each employee's earned leave per plan. ## Balance display Employees see: - **Available balance** — currently usable. - **Accrued to date** — earned in current year. - **Used to date** — taken in current year. - **Future scheduled** — approved future leave. - **Carried over from prior year.** **Leave request workflow.** 1. Employee selects leave type, dates, hours per day. 2. System checks balance availability. 3. Manager approves (or rejects with comments). 4. Approved leave deducts from balance. 5. Calendar / Outlook integration shows the time off. For longer or unusual leave (parental, sabbatical), additional approval levels and HR review. ## Balance checks at request time When an employee requests leave: - Balance available ≥ requested. - Date in valid range (no past-dated without retroactive approval). - No overlap with existing approved leave. - Within policy (max 10 consecutive days; can be overridden by HR). Violations either block or require additional approval. **Carry-over policies.** - **Use-it-or-lose-it** — unused leave expires at year end. - **Capped carry-over** — N days max roll over. - **Unlimited carry-over** — full balance preserves. - **Cash-out** — unused leave paid out at end of year. Country and union agreements determine the policy; the system enforces. ## Holiday calendars Public holidays are configured per location: - Country-specific calendars. - Regional variations (US state holidays). - Floating holidays (Easter, religious observances). - Company-specific (founder's day). Holidays aren't deducted from leave plans (typically); they're scheduled time off. **Time-off types beyond leave.** - **Compensatory time** — overtime banked as time off. - **Time-off in lieu (TOIL)** — flex schedule trades. - **Unpaid leave** — leave without pay arrangements. The system models each separately with own accrual and tracking. ## Integration with payroll Leave drives payroll: - **Paid leave** — paid at regular rate during absence. - **Unpaid leave** — no pay during absence. - **Partial pay** — disability, parental at reduced rate. The integration pushes leave data to the payroll system. For organisations on D365 HR + a third-party payroll (the typical model in 2026 since Microsoft's payroll engine was sunset), the integration is a defined data export. ## Time and attendance For hourly employees, hours worked feed leave accrual. Integration: - Time clock data → daily hours → leave accrual. - Tracking against schedule. - Overtime calculation. D365 HR works with time and attendance ISVs (UKG, Replicon, etc.) where deeper T&A capability is needed. **Leave reports.** - **Balances summary** — by employee, department, plan. - **Accrual history.** - **Usage trends** — leave-day distribution by month, by reason. - **Liability** — accrued unused leave (a balance sheet liability). The liability report is auditor-critical — accrued PTO is real money that must be on the balance sheet. **Country-specific complexity.** - **EU directives** — minimum 4 weeks annual leave; carry-over rules; sick leave separation. - **US FMLA** — federal family medical leave protections. - **California paid sick leave** — separate accrual rules. - **Maternity / parental leave** — country-specific durations and protections. Localisation packs handle most of this; specific business policies layer on top. **Common pitfalls.** - **Wrong accrual frequency.** Monthly when it should be per-pay-period; balances drift. - **Carry-over not enforced.** Year-end runs but doesn't truncate balances; liability explodes. - **Approval bottleneck.** Manager on PTO; their approvals stall; team can't get vacation approved. - **Calendar integration miss.** Approved leave doesn't reach Outlook; meetings scheduled during PTO. - **Manual overrides poorly tracked.** HR adjusts balances manually; audit trail thin. - **Policy creep.** Each year new exception added; complexity overwhelms. ## Operational rhythm Daily request approval; monthly accrual run; quarterly review of balances and accrual adjustments; annual carry-over execution. The cadence matters; mature HR operations build it into their calendar. ## Strategic positioning Leave administration is unglamorous but operational core HR. Get it right — the system supports the workflow, employees self-serve, managers approve quickly, balances are correct — and HR can focus on the work that matters. Get it wrong, and the HR team spends hours weekly fielding "where's my PTO?" tickets. Configuration investment upfront pays back for years. --- # Legal entity setup in Dynamics 365 Finance How to configure legal entities in F&O — corporate identity, country localisation, GL setup, posting profiles, dimension structure. Source: https://www.solvingdynamics365.com/guides/legal-entity-setup-in-f-and-o Section: Finance & SCM / Finance Published: 2026-06-24 A **legal entity** in Dynamics 365 Finance is the unit of statutory accounting — one set of statutory books, one tax ID, one consolidated set of financial statements. Configuring a new legal entity is a substantial implementation task; understanding the layers of setup is essential to getting it right. **Identity and incorporation.** - **Name** — the formal legal name as registered. - **Legal entity ID** — a short code used throughout F&O. - **Address** — the registered office. - **Country** — drives statutory regulations and the country localisation. - **Tax registration numbers** — VAT, EIN, country-specific tax IDs. - **Currency** — the entity's primary statutory currency. - **Reporting currency** — optional secondary currency for group-level reporting (see the parallel currencies guide). ## Country localisation Each legal entity belongs to a country whose localisation drives much of the configuration: - **Tax engine setup** — VAT codes, sales tax codes, withholding tax codes per country regulations. - **Statutory reports** — VAT returns, intrastat, SAF-T, country-specific filings. - **Electronic reporting (Globalization Studio) configurations** — for e-invoicing, payment files, tax submissions per country format. - **Document layouts** — invoice templates conforming to country statutory format. - **Number sequences** — some countries require continuous, gap-free sequences for invoices. Microsoft ships localisations for ~20 countries; partner localisations cover most others. ## Chart of accounts Each entity references a **chart of accounts**: - **Shared across entities** — common in multi-entity groups where consolidation matters. The shared CoA simplifies eliminations and reporting. - **Per-entity CoA** — when entities have substantially different account structures (different industries, different countries with different statutory account standards). In F&O, the CoA is independent of the entity; one CoA can serve many entities. Choose the model deliberately at implementation. ## Account structures and posting profiles Beyond the CoA, the **account structure** defines required dimensions per posting (see the financial dimensions guide). And **posting profiles** map sub-ledger transactions to GL accounts: - **Customer posting profile** — how AR settlements hit the GL. - **Vendor posting profile** — how AP settlements hit the GL. - **Inventory posting profile** — how inventory movements hit the GL. - **Fixed asset posting profile** — how depreciation, acquisition, and disposal hit the GL. - **Project posting profile** — how project costs and revenue hit the GL. Each profile is configured per legal entity per scenario; designing them takes substantial implementation time. ## Dimension structure Each entity references a dimension structure — Department, Cost Centre, Project, Region, etc. Multi-entity tenants commonly share dimensions for consistent reporting but can vary per entity where structures differ. ## Bank accounts Each entity has its own bank accounts: - Operating accounts. - Payroll accounts. - Escrow / trust accounts. - Tax-remittance accounts. - Intercompany accounts. Bank account configuration includes the bank's name, account number, IBAN, payment file formats, statement formats. ## Vendor and customer master data Each entity has its own: - Customer master — though many customers can be shared across entities through **shared services** or **master data management** patterns. - Vendor master — same; shared common vendors with per-entity payment terms and bank details. ## Employees and workforce Workers can be associated with one or more entities — common when staff perform work across entities. Time sheets and expenses can post to projects in different entities. ## Intercompany For multi-entity operations: - **Intercompany counterparties** — defined per legal entity pair, specifying GL accounts for IC postings. - **Intercompany sales / purchases** — automatically generate counter-documents in the partner entity. - **Centralised payments** — one entity can pay vendor invoices for another entity, with IC accounting reconciling. ## Consolidation Multi-entity groups consolidate into a **consolidation company** — a special entity that aggregates subsidiary results into group financial statements: - Each subsidiary uploads its trial balance to the consolidation entity. - Currency translation applies (different entities may have different statutory currencies). - Eliminations remove intercompany transactions. - Adjustments apply for group-specific accounting policies. **Implementation sequence.** 1. Establish the country localisation foundations. 2. Configure CoA, dimensions, account structures. 3. Configure posting profiles for all relevant sub-ledgers. 4. Set up bank accounts, vendors, customers (typically through migration). 5. Configure tax (VAT, sales tax, withholding) per country requirements. 6. Configure financial reporting and statements per local statutory format. 7. Configure intercompany if multi-entity. 8. Validate through cycle 1 of mock posting before go-live. **Common pitfalls.** - **Underestimating localisation setup time** — each new country can be weeks of work. - **Inconsistent CoA across entities** — consolidation breaks; manual reconciliation perpetually. - **Wrong posting profiles** — every transaction posts to the wrong account; year-end reveals the damage. - **Missing tax setup** — invoices post with wrong VAT; statutory filings inaccurate; penalties accumulate. ## Operational reality Setting up a new legal entity is a 2–6 week implementation effort for a country with a strong localisation; 2–4 months for countries with partial coverage; longer for greenfield localisations. Plan accordingly when expanding internationally. --- # License optimisation for Dynamics 365 How to keep Dynamics 365 license spend efficient — right-sizing per user, attached vs base licences, Team Members, the cost-control discipline. Source: https://www.solvingdynamics365.com/guides/license-optimisation-for-dynamics-365 Section: Implementation / Cost & governance Published: 2026-05-09 For mid-to-large Dynamics 365 customers, licensing is one of the largest IT cost lines — easily six or seven figures annually. The licensing model is structured but not trivially simple; without active optimisation, customers routinely overspend by 20–40%. The optimisation work is unglamorous, ongoing, and worthwhile. ## The licensing structure Dynamics 365 licenses come in several flavours, broadly: - **Base licenses** — full functional access to a specific app (Sales Enterprise, Customer Service Enterprise, Finance, Supply Chain Management, Business Central Premium, etc.). - **Attached licenses** — discounted licenses for users who already have a base license in another Dynamics 365 app. The "Attach" pricing rewards customers running multiple D365 apps. - **Team Member licenses** — low-cost licenses for users who need read access and limited write capability across most D365 apps. *Not* a general write license. - **Operations Activity** and **Device** licenses — for specialised scenarios. - **Add-ons** — Copilot for Sales, AI Builder credits, additional storage, additional environments, premium connectors. **The optimisation areas.** **1. Right-sizing per user.** Audit users against actual usage: - Users with **base licenses** who do read-only work → could be Team Members. - Users with **multiple base licenses** → if they could be on Attach pricing instead, lower cost. - Users with **unused licenses** — sitting in the directory but not active. Remove. - Users at the wrong **SKU tier** (Professional vs Enterprise vs Premium) — match to actual feature needs. A spreadsheet of users × licenses × actual usage (from telemetry) often surfaces 10–20% of licenses that can be downsized or removed. **2. Team Member compliance.** The Team Member license is the most-abused. Microsoft has explicit rules about what Team Members can and cannot do: - **Allowed** — read; update their own user record, employee record, time sheet, expense report; approval actions; consume reports; some scoped tables. - **Not allowed** — post transactions, create sales orders, create / update items, run period-end routines, general data entry on transactional tables. Tenants with Team Members doing real transactional work are non-compliant. Microsoft enforces through audit and through application-side license validation. Audit periodically; upgrade non-compliant users to full licenses or restructure their work. **3. Attached licensing.** If a user has Sales Enterprise *and* Customer Service Enterprise: - **Without Attach** — two full prices. - **With Attach** — Sales at full, Customer Service at Attach (≈80% discount). The Attach pricing is automatic in many cases but not always; verify on the Microsoft 365 admin centre that users are billed at Attach rates where applicable. **4. Unused environments.** Sandboxes are mostly free up to a count; additional production environments are paid. Audit environments — old ones from finished projects, duplicates from re-orgs, abandoned proofs of concept. Decommission. **5. Storage.** Dataverse storage above the included allocation bills as add-on capacity. Reduce consumption (see the capacity-planning guide) before buying more. **6. API call capacity.** Tenants exceeding API call thresholds buy add-on capacity. Optimise flows to reduce calls (filter at trigger, batch operations, eliminate polling) before adding capacity. **7. AI Builder credits.** Bundled with some licenses; standalone add-on otherwise. Audit consumption per model; retire unused models. **8. Connector usage.** Some connectors require premium Power Automate licenses; audit which users are running premium-connector flows and whether they have the right license. **The annual licensing review.** - **Q1** — actual usage report from last year. - **Q2** — identify optimisation opportunities, validate with Microsoft account team. - **Q3** — implement changes (re-assign licenses, decommission environments, restructure work). - **Q4** — review savings, plan next year's optimisation. Annual licensing reviews routinely save 10–25% on subsequent year's spend for mature tenants. ## Renewal negotiation Major renewals (annual or three-year contracts) are negotiation opportunities. Microsoft account teams typically have room on: - Volume discounts based on user count. - Multi-year commitments (lower per-year rate for longer commitment). - Bundle discounts (Sales + Customer Service + Field Service together). - Specific promotional pricing for strategic accounts. Engage Microsoft early; build the case from usage data. ## Partner and ISV licensing Beyond Microsoft's own licenses, ISV add-ons (country localisations, document automation, AP automation) add cost. Audit these too — which add-ons are actually used? Renegotiate or retire underused ones. ## Operational discipline License optimisation is procurement + IT joint work. Establish ownership, review quarterly, action annually. ## Where to go next The model being optimised is [Dynamics 365 licensing explained](https://www.solvingdynamics365.com/guides/dynamics-365-licensing-explained), with current list prices on the [pricing pages](https://www.solvingdynamics365.com/pricing). The negotiation moment is [renewal strategy](https://www.solvingdynamics365.com/guides/dynamics-365-renewal-strategy); the capacity lines are [Dataverse storage types](https://www.solvingdynamics365.com/guides/dataverse-storage-types-explained) and [capacity planning](https://www.solvingdynamics365.com/guides/capacity-planning-for-dynamics-365). ### Frequently asked questions **How much do organisations typically overspend on Dynamics 365 licences?** Without active optimisation, 20–40%. An annual review of users against actual usage routinely surfaces 10–20% of licences that can be downsized or removed, and mature tenants save 10–25% on the following year's spend. **What is attach licensing?** A discounted licence for a user who already holds a full base licence in another Dynamics 365 app. A user with Sales Enterprise and Customer Service Enterprise pays full price for one and a heavily discounted attach for the other — verify in the Microsoft 365 admin centre that attach rates are actually being applied. **What are the Team Member licence rules?** Read access, updating the user's own records, timesheets and expenses, approvals, and report consumption. Posting transactions, creating orders, maintaining items, or running period-end routines is non-compliant, and Microsoft enforces through audit and application-side validation. **What besides user licences should be audited?** Environments (paid production environments from finished projects), Dataverse storage, API call capacity consumed by unoptimised flows, AI Builder credits, premium connector usage, and ISV add-on subscriptions nobody uses any more. --- # Licensing updates for Dynamics 365 in 2026 What's changed in Dynamics 365 licensing through the most recent updates — pricing tiers, base + attach SKUs, Copilot bundles, and the patterns to budget for. Source: https://www.solvingdynamics365.com/guides/licensing-updates-for-dynamics-365-in-2026 Section: Implementation / Cost & governance Published: 2026-05-01 Microsoft Dynamics 365 licensing has evolved continuously since the product family launched in 2016. The current shape — base licences, attach licences, Copilot bundles, premium tiers — is more complex than first-time buyers expect. This article summarises the patterns as of 2026 and the considerations for licence planning. ## The base licence model Each user gets one **base licence** that grants full access to one Dynamics 365 app: - **Sales Enterprise** — base for sales users. - **Customer Service Enterprise** — base for service. - **Field Service** — base for field service. - **Finance** — base for finance users. - **Supply Chain Management** — base for SCM users. - **Project Operations** — base for project work. - **Business Central** — base for SMB ERP. - **Customer Insights** — Data and Journeys, separate SKUs. The full price applies to the first licence per user. ## Attach licences Users needing access to additional apps get discounted attach licences: - Roughly 50% of base. - One base + multiple attach per user. - The base is the highest-priced app needed. A finance manager who also uses Sales: Finance (base) + Sales (attach). **Premium tiers.** - **Sales Premium** — adds Conversation Intelligence, predictive features. - **Customer Service Premium** — adds AI features. - **Some apps have multiple tiers** (Standard, Enterprise, Premium). Premium pricing significantly higher than Enterprise; only worth it if AI features are genuinely used. ## Copilot bundles As of 2025–2026: - Many AI features moved from per-licence to bundled with Premium tiers. - Microsoft 365 Copilot separately licensed. - Some scenarios require both Dynamics Copilot bundled AND M365 Copilot. The Copilot landscape is the area most actively evolving; consult current Microsoft guidance. ## Device licences For specific scenarios: - **Operations Device** — for shared shop floor terminals. - **Activity** — limited transaction-based access. Device licences trade per-user flexibility for shared-device cost efficiency. ## Team Member licences A small, cheap licence for limited access: - Read most data. - Update a few specific scenarios (time entry, expenses). - Approve workflows. - Limited create/update rights. The Team Member licence has tightened over the years — historically generous, increasingly restricted. Always verify current Team Member rights for your scenario. **External user licences.** - **Power Pages capacity** — for customer / partner portals; per-authenticated-user or per-page-view. - **Entra External ID** — for B2C auth. For high-volume customer-facing scenarios, capacity licences can be significant. **Business Central licence model (different from CE/F&O).** - **Essentials** — smaller SMB tier. - **Premium** — adds Service Management, Manufacturing. - **Team Member** — limited access. Business Central pricing is generally lower per user than F&O; SMB-friendly. **F&O specifics.** - **Activity user** — limited functions. - **Self-service user** — even more limited. - **Operations Device** — shared. Plus the standard full user. F&O licensing is granular; legal entity scope, server count, and other factors play in. **Storage and capacity.** - **Dataverse storage** — Database, File, Log. - **Per-licence allocation** — base licences contribute storage entitlement. - **Overage** — additional purchased capacity. - **AI Builder credits** — for AI prompts and models. - **Power Automate capacity** — for premium connectors and large-scale flows. Storage is metered; large tenants outgrow base allocation and need top-up. **Power Apps and Power Automate.** - **Standalone Power Apps** — per-app or per-user. - **Premium connectors** require premium tier. - **Power Apps included with Dynamics licences** for Dynamics-related scenarios. The "what's included" question is nuanced and shifts. Get specific licensing guidance per scenario. **Industry accelerators / templates.** - **Healthcare Cloud, Retail Cloud, Sustainability** — Microsoft industry clouds bundling Dynamics + adjacent products. - Different pricing models per industry cloud. For industry-specific deployments, evaluate industry cloud vs piecing together components. **Volume discounts.** - **Enterprise Agreement (EA)** — large-customer discount tiers. - **CSP (Cloud Solution Provider)** — partner-resold; flexible commitment. - **Direct online** — list price, simpler procurement. For organisations with 100+ Dynamics users, EA or CSP discounts are material. ## Free trials Most apps offer 30-day trials; useful for evaluation, not for long-term cost reduction. **Common licensing pitfalls.** - **Wrong base licence.** Users with Sales as base but heavier Finance usage; should have Finance base. - **Premium when Enterprise suffices.** Paying for AI features that aren't adopted. - **Team Member abuse.** Trying to use Team Member for full-user activities; non-compliant. - **External users not licensed.** Customer portal users without correct capacity licences. - **Capacity underestimated.** Tenant grows; storage overruns trigger surprise costs. - **Copilot complexity.** Multiple Copilots; unclear which licences cover which features. **Operational guidance.** - **Annual licence true-up.** Review usage; adjust quantities. - **Quarterly review for fast-growing teams.** Avoid surprise non-compliance. - **License management tool.** Microsoft provides admin centre views; third-party tools (NetSpring, others) help at scale. ## Strategic positioning Licence cost is significant — typically multiple percent of total cost of ownership over 5 years. Optimisation isn't about finding cheaper licences but about picking the right licence per user role: - Full users get base + appropriate attach. - Limited users get Team Member or activity licences. - External users get the right Power Pages or external ID capacity. - Premium tiers reserved for genuine AI adoption. A licence audit every 12 months catches drift; significant savings are common from rightsizing. Microsoft's licensing publishes are extensive but moving; involve specialists for complex scenarios. Don't accept the partner's first proposal without challenging the licence assumptions — meaningful savings often available with care. ### Frequently asked questions **What is the base-plus-attach licensing model?** Every user holds one full-price base licence for the highest-priced app they need; further apps for the same user are discounted attach licences. A finance manager who also uses Sales holds Finance as base and Sales as attach. **When is a Premium tier worth it?** Only when the bundled AI features — conversation intelligence, predictive scoring, Copilot capabilities — are genuinely adopted. Premium prices sit well above Enterprise, and paying for unused AI is the most common 2026 licensing waste. **How are external portal users licensed?** Through Power Pages capacity, metered per authenticated user or per page view, plus Entra External ID for consumer authentication. High-volume customer-facing portals can make this a significant line. **Where do volume discounts come from?** Enterprise Agreements for large customers and CSP partners with flexible commitment terms. Above roughly 100 Dynamics users the discount is material; direct online purchase is list price. --- # Lifecycle Services (LCS) explained What LCS does for Dynamics 365 Finance and Supply Chain projects — workspaces, environments, deployable packages, BPM, and support. Source: https://www.solvingdynamics365.com/guides/dynamics-365-lifecycle-services-explained Section: Finance & SCM / Overview & platform Published: 2026-05-01 Updated: 2026-08-31 **Lifecycle Services (LCS)** is the operational portal for Dynamics 365 Finance and Supply Chain Management implementations. If Microsoft 365 admin centre manages users, LCS manages the application lifecycle: environments, code, updates, and support. Anyone working on a Finance/SCM project will live in LCS daily. ## Projects Everything in LCS belongs to a **project workspace** — a logical container for a single implementation or operations engagement. A project has a *type* (Implementation, Migrate, etc.), an Azure subscription mapped to it for environment hosting (for sandboxes that need it), an LCS partner, and roles assigned to users (Project owner, Environment manager, Developer, etc.). ## Environments From the project, environments are requested, provisioned, started, stopped, deallocated, and decommissioned. Each environment has a lifecycle screen showing its state, the platform and application versions running, and a history of changes. ## Deployable packages Custom code and binary content move into environments as **deployable packages** built from a developer's Visual Studio. The developer uploads the package to the LCS **asset library**, then an authorised user applies it to an environment. There is no direct deploy from VS to production. ## Updates Microsoft's platform and application updates flow through LCS as packages. Customers can preview, schedule, and apply them per environment. LCS shows which environments are on which version. ## Business Process Modeller (BPM) The [Business Process Modeller](https://www.solvingdynamics365.com/glossary/business-process-modeller) is a library of standard business processes (procure-to-pay, order-to-cash) maintained as flow diagrams in LCS. Customers walk through the standard process, mark fit vs gap, and link to BPM tasks recorded with the **Task Recorder** — which captures user actions in the application as reusable scripts for training and testing. Those recordings matter beyond documentation: they are the input format for **RSAT** (Regression Suite Automation Tool), which replays them as automated regression tests against sandbox environments — the standard way F&O customers survive the mandatory update cadence without manually retesting everything twice a year. ## Issue search A searchable knowledge base of known issues, hotfixes, and platform releases, with the ability to file support tickets that route to Microsoft. ## Asset library Beyond deployable packages, the asset library stores GER configurations, data packages, BPM exports, and other artefacts shared across the project team. ## Working in LCS without hurting yourself A few practices separate calm F&O projects from ones that fight their tooling: - **Treat LCS roles as production access.** An Environment manager can refresh a sandbox from production or apply a package; that's the power to destroy a test cycle or leak production data into a loosely-controlled environment. Assign roles per person, prune leavers, and keep the partner's access reviewed like any other privileged account. - **Name and version asset-library uploads.** The asset library accumulates dozens of deployable packages with names like `Final_v2_new`. Adopt a convention (build number, date, branch) on day one — during a production incident, "which package is actually running" must be answerable in seconds. - **Schedule updates, don't absorb them.** Microsoft's [One Version cadence](https://www.solvingdynamics365.com/guides/dynamics-365-one-version-and-updates) means updates arrive whether you plan or not. Use the update settings to pin a predictable window, run the update through a sandbox with RSAT first, and keep one environment a version ahead for early warning. - **File support tickets through LCS with the diagnostics attached.** Tickets raised through the project workspace carry environment context Microsoft can act on; tickets raised cold start with a week of "please provide your environment ID". ## The transition to the Power Platform admin center Microsoft is retiring LCS for customer projects in stages and moving its functions into the **Power Platform admin center** (PPAC), aligning F&O with Dataverse and the rest of the Dynamics 365 estate. New F&O environments are increasingly provisioned and managed as *unified* environments in PPAC — same portal as Dataverse environments, same admin model — and capabilities like environment operations, update management, and history have been landing there wave by wave, while some classic LCS features (BPM among them) are being deprecated outright rather than ported. Practically: if you run an existing implementation, expect a hybrid period where you touch both portals, and follow Microsoft's migration guidance per feature rather than assuming a flag-day switch. If you're starting a new project, learn the PPAC-first model and treat LCS knowledge as transitional. The environment-planning side of this — what topology to run and where each piece is managed — is covered in [Finance environments and LCS](https://www.solvingdynamics365.com/guides/dynamics-365-finance-environments-and-lcs). --- # Locations and transfer routes in Business Central How Business Central handles multi-location inventory — location cards, in-transit, transfer routes, transfer orders. Source: https://www.solvingdynamics365.com/guides/locations-and-transfer-routes-in-business-central Section: Business Central / Inventory & warehouse Published: 2026-05-01 A multi-location business — multiple warehouses, branches, store back-of-house, manufacturing-to-distribution flows — needs Business Central configured to model the locations and the movements between them. The **location card**, **in-transit location**, **transfer route**, and **transfer order** machinery cover most patterns. ## Location cards A **location** is a Dataverse-like record representing a physical (or sometimes logical) inventory point. Each carries: - **Code and Name** — short identifier and label. - **Address** — physical location for ship-to. - **Bin tracking** — enabled or not (basic vs full WMS). - **Receive / Ship requirements** — whether warehouse documents are required. - **Posting groups** — inventory posting group per location. - **Default bin codes** — for receiving, shipping, adjustment. - **Warehouse settings** — directed put-away, pick configuration, advanced wave processing. Locations can be **production**, **distribution**, **storage**, **transit**, or any business meaning. Most tenants have a handful of locations matching real warehouses; some have many representing zones or sub-locations. ## Default location Each user can have a default location for filtering and posting. Each customer can have a default shipping location; each vendor a default receiving location. Items can have **stockkeeping units (SKUs)** that override item defaults per location. ## Stockkeeping units (SKUs) An **SKU** is the item-at-a-location record. Where an item has global defaults (costing method, base UoM, default replenishment), an SKU lets you set per-location overrides: - Different vendor at this location. - Different reordering policy at this location (Min/Max here, Lot-for-Lot elsewhere). - Different safety stock per location. - Different lead time per location. Not every item needs an SKU per location — only where the local behaviour differs from the global default. ## Transfer orders Moving inventory from Location A to Location B uses a **transfer order**: - **Header** — transfer-from location, transfer-to location, dates, shipping method, in-transit location. - **Lines** — items being moved with quantities. - **Posting** — *Post Shipment* moves inventory from the from-location to **in-transit**, *Post Receipt* moves it from in-transit to the to-location. The two-step posting (ship then receive) captures the physical reality — goods are out of one warehouse but not yet at the other for some period. The **in-transit location** is a logical location that holds value but is not pickable for new orders. ## Transfer routes A **transfer route** is a defined path between two locations with default fields — shipping agent, shipment method, in-transit location, lead time. Configuring transfer routes means new transfer orders between those locations default cleanly without manual field entry. ## Lead times Transfer lead time is recognised by master planning — when an item needs to be at Warehouse B but inventory is at Warehouse A, the planning engine suggests a transfer order with the route's lead time, ensuring the supply lands in time. ## Inter-company transfers For multi-company tenants, transfers between companies (rather than within a single company's locations) are typically modelled as **intercompany sales / purchase orders**, not transfer orders. The two patterns are different and not interchangeable. **Reporting.** - **Inventory by location** — stock value and quantity per location. - **Transfer order status** — open, in-transit, completed. - **Items in transit** — value of in-flight goods. - **Location performance** — picking efficiency, stockouts, returns. **Pitfalls.** - **Skipping in-transit** — using single-step transfers loses visibility of goods in flight. Use the in-transit pattern. - **Wrong location on transactions** — items received to wrong location require correction with reversing transfer orders. - **Stockkeeping unit overlap** — when SKUs override global defaults, audit that the overrides are intentional. ## Operational reality Multi-location is one of the most common Business Central scenarios after the basic single-location setup. Done well, locations are invisible infrastructure; done poorly, they're a daily source of inventory confusion. --- # Logic Apps Standard vs Consumption The two Logic Apps hosting models — Standard (single-tenant) vs Consumption (multi-tenant) — and how to choose between them for Dynamics 365 integrations. Source: https://www.solvingdynamics365.com/guides/logic-apps-standard-vs-consumption Section: Integrations / Azure services Published: 2026-05-03 **Azure Logic Apps** is Microsoft's iPaaS-grade orchestration platform, used heavily for Dynamics 365 integrations. It ships in two distinct hosting models — **Consumption** (the original, multi-tenant, pay-per-execution) and **Standard** (newer, single-tenant, App Service-hosted). Choosing the right one matters; the trade-offs are real. ## Consumption Logic Apps The original model, in market since 2016: - **Multi-tenant** — workflows run on Microsoft's shared compute infrastructure. - **Pay-per-execution** — billed per action execution. No standing charges; pay only what runs. - **Auto-scale** — runs on Microsoft's elastic infrastructure; no capacity to manage. - **Single workflow per Logic App resource** — each Logic App is one workflow. - **Trigger limitations** — some triggers (especially long-polling) have constraints. - **Connectors** — wide library, both standard and premium. - **Cold start** — first execution after idle period has small latency. - **Designer-friendly** — Azure portal designer is rich and stable. Strong fit for: low-to-moderate volume integrations, business-process orchestrations, simple workflows, prototypes. ## Standard Logic Apps Newer model, launched 2021: - **Single-tenant** — workflows run on dedicated Azure App Service infrastructure under your control. - **Predictable cost** — fixed App Service plan cost; workflow executions don't bill per-action. - **Multiple workflows per Logic App resource** — group related workflows into one resource. - **VNET integration** — run inside an Azure VNET for private networking to on-premise systems. - **Local development** — Visual Studio Code extension runs Logic Apps locally; full source-control friendly. - **No cold start** — App Service stays warm. - **Stateful and stateless workflows** — choose per workflow whether to persist state (durable) or run stateless (faster, no recovery). - **More complex deployment** — App Service plan to manage; deployment slots; scaling rules. Strong fit for: high-volume integrations (cost predictability matters), enterprise integration patterns, VNET-required scenarios, source-controlled enterprise workflows. **Cost comparison.** - **Consumption** — generous free tier; pay per action. At low volume, very cheap. At high volume (millions of actions per month), costs add up substantially. - **Standard** — fixed monthly cost for the App Service plan (typically a few hundred dollars per month for a small plan), regardless of execution count. Cost-effective at scale; over-priced for low-volume. The break-even point varies by workflow complexity but is typically around hundreds of thousands of action executions per month. ## Feature parity Standard has caught up substantially but some differences remain: - **Some triggers and connectors** are Consumption-only or have different behaviour. - **Designer feature gaps** — both designers have evolved; check current docs. - **Integration patterns** — some advanced patterns (built-in messaging, durable orchestrations) work differently. **Deployment.** - **Consumption** — deploy via ARM templates, Azure CLI, the portal. Simple. - **Standard** — deploy via Azure DevOps / GitHub Actions pipelines, source-controlled with the workflow JSON files. More setup; more rigour. For ALM-disciplined teams, Standard's source-control story is a significant advantage. ## Mixing both A typical enterprise has both: - **Standard Logic Apps** for the integration backbone — high-volume, source-controlled, VNET-isolated. - **Consumption Logic Apps** for ad-hoc business workflows, occasional triggers, prototypes that may or may not become production. The two interoperate cleanly — a Consumption workflow can trigger a Standard workflow and vice versa via standard mechanisms. **Choosing for Dynamics 365 integrations.** Use **Consumption** when: - Volume is low to moderate. - Workflows are simple, business-oriented. - Cost-per-execution is fine. - Quick to build, easy to maintain. Use **Standard** when: - Volume is high; predictable cost matters. - Source control and CI/CD are mandatory. - VNET access to private resources is required. - Multiple related workflows benefit from grouping. - Enterprise-grade governance is needed. ## Comparison with Power Automate Power Automate (covered in earlier guides) is yet another option — even more business-user-friendly than Consumption Logic Apps, with per-user licensing instead of per-execution. The general decision tree: - Citizen developer, business workflow → Power Automate. - IT-managed integration, moderate scale → Consumption Logic Apps. - IT-managed integration, high scale or enterprise governance → Standard Logic Apps. - Heavy custom code → Azure Functions. ## Operational reality Most Dynamics 365 customers use Power Automate for the bulk of work; reach for Logic Apps when Power Automate's governance, cost, or scale models don't fit. Within Logic Apps, choose Standard for serious integrations and Consumption for everything else. ### Frequently asked questions **What is the difference between Consumption and Standard Logic Apps?** Consumption is multi-tenant, pay-per-action, one workflow per resource, auto-scaled by Microsoft. Standard runs single-tenant on an App Service plan with fixed monthly cost, multiple workflows per resource, VNET integration, local development in VS Code, and stateful or stateless workflows. **When does Standard become cheaper?** Around hundreds of thousands of action executions per month, depending on workflow complexity. Below that, Consumption's pay-per-action is very cheap; above it, the fixed App Service plan wins. **Which should I use for Dynamics 365 integrations?** Standard for the high-volume, source-controlled, VNET-isolated integration backbone; Consumption for ad-hoc business workflows and prototypes. Power Automate remains the default for citizen-developer business workflows, and Azure Functions for heavy custom code. **Can the two models work together?** Yes. A Consumption workflow can trigger a Standard workflow and vice versa through standard mechanisms, and most enterprises run both. --- # Logic Apps with Dynamics 365 How Azure Logic Apps complement Power Automate for Dynamics 365 integrations — when to choose which, hybrid patterns, and operational realities. Source: https://www.solvingdynamics365.com/guides/logic-apps-with-dynamics-365 Section: Integrations / Azure services Published: 2026-05-01 **Azure Logic Apps** and **Power Automate** are both Microsoft's workflow orchestration platforms — and they overlap substantially. Both run on the same engine, use the same connectors, and let you build flows with similar designers. The boundary between them is more about *audience and operational model* than capability. Dynamics 365 implementations typically end up using both, deliberately. ## The same engine, different surfaces Logic Apps and Power Automate cloud flows compile to the same underlying Azure-hosted workflow runtime. They share the same connectors for Dataverse, Business Central, F&O, and hundreds of other services. The differences are around packaging, governance, and operating model. **Power Automate is for the citizen and pro maker.** Built into the Power Platform admin and maker portals. Flows live in environments alongside Power Apps and Dataverse. Licensing is per-user or per-flow. Designed for makers — business analysts, citizen developers, power users — to build workflow automation without filing a ticket with IT. Strong fit for: business-process automation, approvals, lightweight integrations, in-product workflow. ## Logic Apps is for the IT-managed integration estate Lives in Azure subscriptions, managed alongside Functions, Service Bus, Event Grid, and the rest of an IT estate. Source-controlled in ARM/Bicep templates, deployed by DevOps pipelines, monitored through Azure Monitor. Licensing is per-execution and per-action (no user licenses). Designed for IT to run as production infrastructure. Strong fit for: enterprise integrations, high-volume processing, cross-system orchestration with strict SLAs, B2B with trading partners. **When to choose Power Automate.** - The workflow has a strong relationship to a specific user or department. - The Dataverse-related licensing is already in place. - Maker autonomy (low-code, low IT involvement) is the goal. - The workflow lives logically alongside Power Apps in the same environment. - Low-to-moderate volume. **When to choose Logic Apps.** - High volume (thousands of executions per hour) — Logic Apps scales differently and is often more economical. - Strict SLA, monitoring, alerting requirements. - Source-control and DevOps governance matter. - Integration with non-Power-Platform Azure services (Service Bus, Event Grid, Functions, API Management) is central. - The workflow lives in IT's domain, not a business unit's. ## Hybrid patterns Most large Dynamics 365 implementations have both: - **Power Automate flows** for in-product user-driven automation (approvals, lead scoring follow-up, notification fan-out). - **Logic Apps** for the integration backbone (trading-partner EDI, large-volume sync, cross-system orchestration). The two cohabit cleanly. Logic Apps can trigger Power Automate flows; Power Automate flows can trigger Logic Apps. Pick the host that matches the workflow's nature. ## Operational reality — Power Automate Easier to build, harder to govern at scale. Flows proliferate when every team can build their own. DLP policies, environment isolation, and lifecycle (managed solutions) are essential discipline. ## Operational reality — Logic Apps Harder to build (more developer-flavoured), easier to govern (ARM templates, Azure RBAC, Azure Monitor). Cost predictability is better at scale. Requires Azure skills on the team. ## The connector overlap Both call the same Dataverse, BC, and F&O connectors. The same throttling limits apply per tenant. So the *Dynamics 365 side* doesn't care which host you choose; the choice is about your team's preferred operating model. ## Common pitfall Building a high-volume integration in Power Automate where Logic Apps would scale and govern better. Migrate to Logic Apps before the cost or complexity bites. --- # Low-code plug-ins in Dataverse How Dataverse low-code plug-ins let makers run server-side logic without C# — Power Fx, when to use them vs Power Automate vs traditional plug-ins. Source: https://www.solvingdynamics365.com/guides/low-code-plug-ins-in-dataverse Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Traditional Dataverse plug-ins are C# assemblies registered against table events, requiring developer skills, Visual Studio, and a build/deploy pipeline. **Low-code plug-ins** offer the same server-side execution model but written in Power Fx by makers — collapsing the developer dependency for many extension scenarios. **Two flavours of low-code plug-in.** - **Instant plug-in** — invoked explicitly (from a Power Automate flow, a model-driven command, a custom button). Acts like a Power Fx-defined custom action. - **Automated plug-in** — fires on row events (Create, Update, Delete) before or after the database commits the change. Acts like a traditional plug-in but Power Fx instead of C#. **Where they fit in the spectrum.** - **Business rule** — runs in the client form, simple field manipulation. Doesn't run from API. - **Power Automate cloud flow** — async or sync orchestration, integrates with hundreds of connectors. Higher overhead per invocation; not transactional with the Dataverse operation. - **Low-code plug-in** — server-side, sync with the Dataverse operation, Power Fx authoring. Sweet spot for in-transaction logic without dev complexity. - **Traditional C# plug-in** — full .NET, most extensibility, hardest to author and maintain. The low-code plug-in fills the gap between "this needs to run server-side and inside the same transaction" and "I don't want to maintain C# code." **What you can do in a low-code plug-in.** - **Set field values** on the operation's row. - **Cancel the operation** with an error message (validation). - **Read related records** via lookups. - **Update related records** (within plug-in limits). - **Call Power Fx functions** for date math, text manipulation, lookups. - **Trigger downstream** through Power Automate by writing to a queue or notification table. **What you can't do well.** - **External API calls** — limited. - **Complex multi-step orchestration** — Power Automate is better suited. - **Heavy compute** — Power Fx has performance ceilings. - **Long-running operations** — plug-in execution is bounded; multi-second logic gets killed. ## Creating an instant plug-in In the maker portal: 1. Solutions → New → More → Low-code plug-in. 2. Type: Instant. 3. Define input parameters and output parameter. 4. Author Power Fx logic. 5. Save and publish. The plug-in registers as an action; Power Automate flows can call it, model-driven buttons can invoke it, an HTTP call can reach it. ## Creating an automated plug-in Same start, then: 1. Type: Automated. 2. Select the table. 3. Select the event (Create, Update, Delete). 4. Stage: Pre-operation or Post-operation. 5. Filter conditions if needed. 6. Author Power Fx logic. The plug-in fires automatically on every matching event. **Pre vs post.** - **Pre-operation** — runs before the database commits. Can mutate the incoming row or cancel the operation. - **Post-operation** — runs after commit. Used for derived updates and triggering downstream work. For validation logic, use pre. For populating related records, use post. ## Performance considerations Plug-ins run synchronously with the Dataverse operation. Slow plug-ins slow every Create/Update/Delete on the table. Power Fx adds some overhead vs C#, so very high-volume tables (1000+ writes per minute) may need C# for raw performance. ## Comparison to Power Automate triggers A Power Automate flow can also trigger on Dataverse events: - **Async by default** — runs out of band from the user's action. - **Cross-connector integration** — call Outlook, SharePoint, external APIs. - **More observable** — run history, troubleshooting tooling. Power Automate is the better choice for orchestration across systems. Low-code plug-ins win when: - The logic must complete within the transaction. - The validation must block the operation. - The performance overhead of cross-process invocation matters. ## Solution awareness Low-code plug-ins live in solutions; they deploy through the ALM pipeline like other components. They can reference Power Fx custom logic functions, connection references, and environment variables, integrating with the broader ALM story. **Common pitfalls.** - **Using post-op when pre-op was needed.** Validation in post fires too late; the bad data is already saved. - **Calling external APIs from a plug-in.** Latency cascades; the user-facing operation slows. - **No error handling.** Power Fx error propagation can be silent; users see operation succeed when business logic failed. - **Plug-in chains.** Plug-in A updates table X; another plug-in on X fires; cascade not controlled; performance issues or unintended recursion. - **Treating low-code as a complete substitute for traditional plug-ins.** Some scenarios still demand C# — accept the boundary. ## Operational guidance Default to low-code plug-ins for new server-side logic — faster to author, easier to maintain, ALM-friendly. Reach for C# only when low-code clearly can't meet the requirement: heavy compute, complex external integrations, or performance-critical paths. Most environments end up with a mix; the boundary depends on the team's developer skill and the workload's complexity. --- # Machine learning forecasting in Dynamics 365 Supply Chain How the demand forecasting service in D365 SCM uses Azure ML — historical demand, parameter tuning. Source: https://www.solvingdynamics365.com/guides/machine-learning-forecasting-for-d365-supply-chain Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 Demand forecasting in Dynamics 365 Supply Chain Management runs as an Azure Machine Learning service that consumes historical demand data and produces statistical forecasts at item, item-warehouse, item-customer, or item-allocation-key granularity. Done right, it replaces manual planner spreadsheets with a baseline forecast that planners adjust rather than generate. Done badly, it produces numbers nobody trusts and gets switched off in month two. ## Architecture The flow is one-way push, batch: 1. F&O exports demand history (sales orders, transfer demand, configurable filters) to Azure storage. 2. Azure ML reads the data and runs the configured algorithm. 3. The forecast result is imported back into F&O as a baseline demand forecast. 4. Planners review, accept, or override forecasts in F&O. The Azure ML side is operated by Microsoft as part of the SCM service — customers don't manage the model, but they configure parameters that affect the algorithm choice. **Algorithms available.** - **ARIMA** — autoregressive integrated moving average; strong for stable demand with trends. - **ETS** — exponential smoothing; strong for seasonality. - **STL Decomposition** — separates trend/seasonality/residual; good visibility for planner trust. - **Forecasting Tree** — non-parametric tree model for complex patterns. The service runs all algorithms and picks the best by error metric (typically MAPE or RMSE) per item-location combination. Customers can override. **Parameters that matter.** - **Forecast horizon** — how many periods ahead. - **Forecast frequency** — daily, weekly, monthly buckets. - **Historical horizon** — how much history to consider. - **Confidence threshold** — minimum confidence required to use the forecast; below that, fall back to a heuristic or planner manual. - **Missing value substitution** — zero-fill, average-fill, interpolation. - **Outlier removal** — Z-score threshold for outlier elimination. Outlier handling is the most under-considered parameter. A pandemic-driven spike, a one-off bulk order, or a stockout disrupting normal demand all corrupt the history; outlier removal cleans them up before the algorithm sees them. ## Granularity Forecasts can be at: - **Item only.** - **Item + Site.** - **Item + Site + Warehouse.** - **Item + Site + Allocation Key** — for downstream allocation across DCs. Finer granularity = more accuracy potential but more data sparsity per series. Items with low volume at a granular level produce noisy forecasts; aggregate higher. ## The planner override pattern F&O presents forecasts in the **Demand Forecasting Workspace**. Planners can: - Accept the ML number as-is. - Multiply by a percentage (sales sees a 10% promotional lift coming). - Hard-override a specific period (a known one-time order). - Replace with a manual forecast entirely. Best practice: ML produces the baseline, planners add the intelligence ML doesn't have. The override audit trail records who changed what and why. ## Forecast accuracy Standard KPIs: - **MAPE** — mean absolute percent error. - **Bias** — systematic over- or under-forecast. - **WAPE** — weighted absolute percent error (weighted by volume so big items count more). Track accuracy by item, by category, by planner-overridden vs ML-baseline. The accuracy report is the credibility tool — without it, planners revert to spreadsheets. ## Integration with master planning Once the forecast is accepted, it flows into the demand side of **master planning** (or Planning Optimization). Master planning consumes forecasts plus sales orders, runs supply suggestions (purchase, transfer, production), and creates planned orders. Forecasts beyond the firmed horizon drive long-lead procurement; sales orders inside the firmed horizon drive short-term operations. ## Forecast consumption When a real sales order lands in a forecast period, the forecast is **consumed** by the sales order — net demand becomes max(forecast, actual). Configurable consumption rules govern this; tuning matters in fast-cycling businesses to prevent double-counting demand. **Common pitfalls.** - **Garbage historical data.** Returns, cancellations, and inter-company transfers polluting the sales history → wrong forecast. Clean the input. - **Granularity mismatch.** Item-level forecast at the SKU but planning at the family level; reconcile. - **One-time events not flagged.** A massive promotional event one year ago that won't recur is treated as a normal high-demand pattern; outlier removal must catch it. - **No accuracy tracking.** Without it, planners stop trusting the system; ML becomes shelfware. - **Algorithm choice locked in.** Different item categories need different algorithms; let the service pick per-series. ## Operational reality ML forecasting is a tool, not a replacement for planning judgement. The teams that get value from it use it as the conversation starter, not the answer. --- # Machine management for Power Automate Desktop How to manage RPA machines at scale in Power Automate — machine groups, sizing, health monitoring. Source: https://www.solvingdynamics365.com/guides/power-automate-machine-management Section: Power Platform / Power Automate Published: 2026-05-01 A production RPA deployment with dozens of bots running across multiple machines is real infrastructure — Windows VMs, network, agent software, credentials, monitoring. **Machine management** in Power Automate handles the fleet lifecycle: registration, grouping, scaling, health, retirement. Getting it right makes RPA operations sustainable. **The machine model.** - **Machine** — a Windows host registered with Power Automate. - **PAD agent** — software running on the machine; connects to cloud. - **Bot account** — Windows user account that bots run as. - **Machine group** — pool of machines for load balancing. Each machine connects to the Power Automate service via the agent; cloud service distributes work to available machines. **Registration.** 1. Install PAD on the Windows machine. 2. Sign in with the Power Platform account. 3. Configure machine registration in Power Automate portal. 4. Machine appears in Machines list; ready to receive work. ## Machine groups Pool machines: - All machines in a group can run the same bots. - Cloud service assigns work to least-busy machine. - Group can be sized up by adding machines. - Failure of one machine doesn't stop the group. For production reliability, single-machine setups are insufficient; groups provide redundancy. **Sizing considerations.** - **CPU** — bots are CPU-light typically; 2-4 cores usually enough. - **Memory** — bots that drive browser-heavy apps need more (8GB+). - **Storage** — small; bots are stateless mostly. - **Network** — reliable; latency-sensitive. Spec depends on the bot workload; benchmark before scaling. **Geographic distribution.** - For multi-region operations, machines in each region. - Reduces latency to local applications. - Compliance with data residency. **Machine account vs interactive account.** - **Machine account** — bot runs in a session without active user. - **Interactive account** — bot needs user logged in. Interactive is easier to set up but ties up a logged-in session; machine account is more scalable. **Auto-update.** - PAD agent auto-updates by default. - Updates can break bots if behaviour changes. - Mitigate: test new agent version in non-prod first. For sensitive environments, disable auto-update and manually control. **Health monitoring.** - **Machine status** — Online / Offline. - **Run history** — successes, failures. - **Performance metrics** — average bot duration. - **Resource usage** — CPU / memory utilisation. For production fleets, dashboards visualise health; alerts on Offline > N minutes. **Common machine issues.** - **Agent disconnected** — restart agent or machine. - **High memory** — bot leak; restart cleans up. - **Windows update reboot** — schedule reboots outside bot work hours. - **Network drops** — temporary; reconnect handled. Production runs into these regularly; monitoring + automation reduce manual effort. **Capacity planning.** - **Peak vs average** — bot work is often peaky (month-end, day-start). - **Sizing for peak** — adequate machines for peak load. - **Off-peak idle** — machines sit unused; consider hibernation if cost-sensitive. **Cost considerations.** - **VM cost** — per-hour Windows VM cost. - **Bot licence** — per concurrent unattended bot. - **OS licensing** — Windows licence costs. For 10+ bot machines, costs are significant; right-size carefully. **Bot deployment to machines.** - Bot (desktop flow) configured to target a machine group. - Cloud service dispatches to available machine. - Machine downloads bot logic; executes. - Results streamed back to cloud. The execution model is similar to a job queue. **Bot account passwords.** - Stored in Azure Key Vault (modern pattern). - Or in Windows credential manager (legacy). - Rotated per policy. Compromised bot account = potentially compromised systems bot accesses. Rotation matters. **Machine retirement.** - Decommission unused machines. - Migrate bots to remaining machines. - Deregister; revoke credentials. - Audit confirms machine no longer accessible. **Disaster recovery.** - **Backups** — bot logic in source control / solutions; machines themselves stateless. - **Failover** — second region machines if needed. - **Recovery time** — provision new machines from image; install agent; register. **Multi-tenancy concerns.** - Bots from different customers (in ISV scenarios) — typically on dedicated machines. - Shared machines pose data risk. **Common pitfalls.** - **Single machine fleet.** First failure stops all bots. - **No monitoring.** Bots fail; nobody notices for days. - **Machine accounts shared with humans.** Auditing impossible. - **Updates uncontrolled.** PAD update breaks bots; emergency rollback. - **Capacity underestimated.** Bot queue grows; SLA breaches. - **Mixing dev / prod machines.** Test bots affect production data. **Operational rhythm.** - **Hourly** — health dashboard glance. - **Daily** — failure investigation. - **Weekly** — capacity vs trend. - **Monthly** — fleet audit; retirements / new provisions. - **Quarterly** — disaster recovery drill. ## Strategic positioning RPA machine management is infrastructure work. For organisations with significant bot deployments, dedicated FTEs manage the fleet. For smaller scale, IT can absorb the responsibility. Either way, treating bots as software services rather than spreadsheets is essential — monitoring, alerting, capacity planning, lifecycle management. The infrastructure investment pays back in reliability; the alternative is a tangle of breaking bots and frustrated users. --- # Managed environments in Power Platform What Managed Environments add to a Power Platform environment — admin features, sharing limits, weekly digest, solution checker enforcement, and pipelines. Source: https://www.solvingdynamics365.com/guides/managed-environments-in-power-platform Section: Power Platform / ALM & governance Published: 2026-05-01 **Managed Environments** is a paid administration tier in Power Platform that adds enterprise governance controls on top of standard environments. Treat it as the "admin uplift" — same underlying Dataverse, but with monitoring, sharing limits, pipelines, and the ability to enforce policies that standard environments lack. **What turning on Managed Environments enables.** - **Sharing limits** — cap how many users an app or flow can be shared with; require admin approval for broader sharing. - **Usage insights** — weekly admin digest summarising who built what, what's used, what's abandoned. - **Solution checker enforcement** — solution checker must pass before solutions are deployed. - **Pipelines in Power Platform** — managed deployment pipelines from dev to test to prod, native to the platform. - **Maker welcome content** — branded content for new makers in the environment. - **Default environment routing** — Mostly-Microsoft, route makers to designated environments instead of the personal "Default" environment. - **IP firewall** — restrict Dataverse access to specific IPs. - **Customer-managed keys (CMK)** — encrypt data with customer-controlled keys. These are the visible features at the time of writing; Microsoft adds capabilities to Managed Environments regularly. ## What it costs Managed Environments is included in **Power Apps premium** licences, **Power Automate premium** licences, **Power Pages** licences, **Dynamics 365** user licences, and other premium SKUs. Customers on free/basic Power Apps tiers don't have access. Practically: any organisation already paying for premium Power Platform licensing has Managed Environments included. ## Enabling Managed Environments In the Power Platform admin centre: 1. Select an environment. 2. Edit → Managed Environments → Enable. 3. Configure feature settings. A few features apply globally (welcome content, default routing); most are per-environment. ## Sharing limits A standard Power Apps maker can share an app with the entire organisation by default. Managed Environments lets admins: - **Limit sharing to a configurable maximum** — e.g., 25 users. - **Block sharing with security groups above N members**. - **Require admin approval** beyond the threshold. This prevents accidental "shared with everyone" exposure of internal tools that contain sensitive data. ## Weekly digest Admins receive a weekly summary: - New apps, flows, and bots created. - Connectors used. - Apps shared widely. - Connection references. - Inactive resources (no use in 30/60/90 days). The digest is a governance lifeline — without it, admins discover sprawl only when something breaks. ## Solution checker enforcement Solutions can be required to pass solution checker (the static analysis tool that catches common issues — performance problems, deprecated APIs, security warnings) before deployment. Without enforcement, makers can ignore solution checker warnings; with enforcement, the gate is real. ## Pipelines Native pipelines provide a maker-friendly ALM: - **Dev → Test → Prod** environments configured. - Maker promotes a solution through the stages by clicking "Deploy". - Approval workflows at each stage. - Audit log of who promoted what. Less powerful than Azure DevOps Pipelines / GitHub Actions–based ALM but dramatically simpler for citizen-maker scenarios. ## Default environment routing Power Platform's "Default" environment is shared across all users in the tenant — historically a chaotic place. With routing enabled: - Makers attempting to create in Default are redirected. - Each maker gets a personal developer environment auto-provisioned. - Personal environments isolate experimentation from shared work. A meaningful housekeeping win for tenants with many casual makers. ## IP firewall Restrict Dataverse API access to specific IP ranges: - Limits exposure during a breach. - Aligns with corporate network policies. - Implemented at the environment level. Note: IP firewall affects the API surface, not the web UI; users still need MFA and conditional access for the web experience. ## Customer-managed keys (CMK) For regulated industries needing to control encryption keys: - Bring your own Azure Key Vault. - Dataverse encrypts data with your key. - Revoke the key → Dataverse data inaccessible (extreme last resort). Setup is complex; reserved for organisations with strong compliance requirements (defence, finance, healthcare). **Common pitfalls.** - **Enabling without communicating to makers.** Sharing limits suddenly block previously-fine workflows; makers complain. - **Pipelines without process.** Pipelines exist but no one uses them; promotion stays informal. - **Digest ignored.** Admin receives but doesn't act; governance value lost. - **Routing surprises new users.** A new maker can't find their app in Default because they were routed elsewhere. - **CMK rollout without rehearsal.** Key rotation goes wrong; downtime. ## Strategic positioning Managed Environments turns Power Platform from a maker free-for-all into a governable enterprise platform. For tenants of any meaningful size, turning it on across production environments is table stakes. The cost is already paid (bundled with premium licensing); the benefit is real governance. ## Operational rule Default for any production environment is "Managed Environment enabled, sharing limits configured, weekly digest reviewed, solution checker enforced, pipelines in use." Dev and personal environments can run unmanaged. This pattern keeps governance overhead proportional to risk. ## Where to go next The controls Managed Environments enforce are described in [DLP policies](https://www.solvingdynamics365.com/guides/dlp-policies-in-power-platform) and [solution checker and app checker](https://www.solvingdynamics365.com/guides/solution-checker-and-app-checker); the reporting layer most organisations pair with it is the [Center of Excellence starter kit](https://www.solvingdynamics365.com/guides/center-of-excellence-starter-kit). The environment model itself is [Power Platform environments](https://www.solvingdynamics365.com/guides/power-platform-environments), and the organisational side is [citizen development governance](https://www.solvingdynamics365.com/guides/citizen-development-governance). --- # Manufacturing in Business Central BOMs, routings, work and machine centres, production orders, and MRP — what Business Central manufacturing covers and where it stops. Source: https://www.solvingdynamics365.com/guides/business-central-manufacturing Section: Business Central / Manufacturing Published: 2026-05-01 Updated: 2026-08-30 Manufacturing is part of the **Premium** SKU of Business Central. It is aimed at discrete and light process manufacturers — typical fits include assemblers, food and beverage SMEs, electronics, and make-to-order shops with up to a few hundred work orders a day. Heavy process, complex repetitive, or shop-floor-control-intensive environments usually outgrow Business Central and step up to [Dynamics 365 Supply Chain Management](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-supply-chain); the honest comparison is in [discrete vs process vs lean manufacturing in F&O](https://www.solvingdynamics365.com/guides/discrete-vs-process-vs-lean-manufacturing-in-f-and-o). ## Master data Manufacturing is built on three core objects. **Production BOMs** describe the components needed to make an item, with version control and certification states. **Routings** describe the sequence of operations, the work or machine centres used, setup and run times, and scrap. **Work centres** and **machine centres** model capacity, calendars, and overhead rates. Master data quality is the whole game here. Planning output is only as good as BOM accuracy and routing times, and the most common failure mode in BC manufacturing is not a missing feature — it is routings copied from a spreadsheet five years ago that no longer match how the shop actually runs. Budget real engineering time for BOM and routing cleanup before go-live, and put someone's name on keeping them certified afterwards. [Routings and capacity centres](https://www.solvingdynamics365.com/guides/routings-and-capacity-centers-in-bc-manufacturing) covers the modelling decisions. ## Planning The **planning worksheet** (MPS/MRP) compares projected demand (sales orders, forecasts, projects, transfer orders) against projected supply (inventory, purchase orders, production orders) and suggests **planned production orders**, **planned purchase orders**, and **planned transfer orders** based on each item's reordering policy and supply chain. The planning engine is regenerative and honours lead times, safety stock, lot multiples, and order modifiers. Two pieces of hard-won advice. First, start with simple reordering policies (Lot-for-Lot for made items, fixed reorder for cheap purchased components) and only add sophistication where the pain justifies it — every order modifier you set is a lever someone must understand when the suggestion looks wrong. Second, run planning on a rhythm (daily or a few times a week), act on the suggestions, and resist the urge to hand-manage around the worksheet; a planning engine nobody trusts because nobody maintains the inputs is worse than no planning engine. The [planning worksheet guide](https://www.solvingdynamics365.com/guides/business-central-planning-worksheet) goes deeper. ## Production orders A planned [production order](https://www.solvingdynamics365.com/glossary/manufacturing-orders) is firm-planned, released, and then consumed and finished as work progresses. **Consumption journals** record material usage (or flush automatically); **output journals** record finished quantities, scrap, and time. Cost flows into the work-in-process account at standard or actual depending on the costing method, and lands on the finished item when the order is fully posted and finished. Choose flushing methods deliberately: backward flushing (consume automatically on output) suits reliable BOMs and low-value components; manual consumption suits expensive or variable materials where you want the shop to record reality. Mixing per component is normal. And finish your orders — released production orders left open with residual WIP are the manufacturing equivalent of unclosed sales orders, and they make the WIP account unreconcilable at month-end. ## Subcontracting Operations marked as subcontracted are auto-linked to purchase orders so a vendor's service is captured as both a routing step and a procurement transaction. It works well for the classic "send out for plating/machining" pattern; [subcontracting in BC production](https://www.solvingdynamics365.com/guides/subcontracting-in-bc-production) covers the setup and the cost flow. ## Assembly For lighter make-to-stock or kit-style scenarios, Business Central ships an **Assembly** module (available in Essentials) — simpler than production orders, with assembly BOMs but no routings or capacity planning. If your "manufacturing" is really kitting — combine items, no operations, no capacity constraint — assembly orders do the job without the Premium SKU or the master-data burden. Plenty of businesses that ask for manufacturing actually need assembly; check before you licence. ## What's not included Shop-floor data collection, complex finite scheduling, advanced quality management, and engineering change orders typically require ISV extensions from AppSource or a step up to a dedicated MES. The built-in finite capacity option exists but is a blunt instrument; shops that live and die by sequencing buy a scheduling ISV. This is not a weakness so much as a boundary: Business Central manufacturing earns its keep for SMB shops that want production integrated with finance and inventory in one system, with one licence, maintained by one partner. When the shop floor itself becomes the competitive edge — high automation, tight sequencing, regulated quality — that is the signal you are leaving the SMB envelope the product was built for. --- # Many-to-many relationships in Dataverse How Dataverse models N:N relationships — native N:N tables, manual intersection entities, and the trade-offs for each pattern. Source: https://www.solvingdynamics365.com/guides/many-to-many-relationships-in-dataverse Section: Customer Engagement / Dataverse platform Published: 2026-07-06 Some real-world relationships are inherently many-to-many — students enrolled in courses, products tagged with categories, contacts associated with marketing lists, opportunities competing on the same deal. Dataverse supports [many-to-many (N:N) relationships](https://www.solvingdynamics365.com/glossary/many-to-many) in two distinct ways — **native N:N** and **manual intersection entity** — each with different trade-offs. **Native N:N relationships.** The simplest approach. From the maker portal, define an N:N relationship between two tables: - Select the two tables. - Name the relationship. - Optionally configure subgrids on each side. Behind the scenes, Dataverse creates a **system intersect table** — a hidden table with two columns (one foreign key to each related table) that stores the relationships. The intersect table is invisible to most operations; users see the relationship as a list on each side. **Strengths of native N:N:** - **Zero configuration overhead.** - **Subgrid rendering on forms** — display related records on either side as standard subgrids. - **Quick to add and remove relationships** — simple Associate / Disassociate operations. **Limits of native N:N:** - **No fields on the relationship itself.** You can't say "Contact X is associated with Marketing List Y *as a VIP* starting *date Z*". The relationship is binary — exists or doesn't. - **Limited security** — both endpoints' security applies; you can't add specific privileges to the relationship. - **No audit history on the relationship** — adding / removing the link isn't audited at the relationship level (only at the endpoints). - **No business rules or workflows** on the relationship — can't trigger on add / remove. **Manual intersection entity.** A more flexible approach. Create a custom table that *represents* the relationship: - Custom table `ContactMarketingList` with lookups to Contact and Marketing List. - Plus fields for role, start date, end date, notes, status, custom attributes. - Each row represents one specific contact's association with one specific list, with the additional data. **Strengths of manual intersection:** - **Rich relationship data** — date, role, status, notes, anything you can model on a Dataverse table. - **Full audit** — the intersection records audit normally. - **Business rules, workflows, plug-ins** — trigger on add / remove / update of relationship. - **Per-relationship security** — the intersection table has its own security; you can grant access to specific intersections. - **Reporting on relationship attributes** — "show me all VIP associations created in Q3". - **Complex relationships** — many roles, lifecycle states, custom attributes. **Limits of manual intersection:** - **More schema** — extra table, extra columns, more complexity. - **More effort to use** — users add records to the intersection table rather than just associating. - **Different UI** — typically a subgrid showing the intersection records, not a simple lookup. **Choosing.** - **Native N:N** when the relationship is simple and you just need to track "associated" — no extra attributes, no workflow triggers, no history matters. - **Manual intersection** when the relationship has its own data, lifecycle, security, or business meaning. **Examples.** - **Contact ↔ Marketing List** — native N:N is fine. Contacts are on lists or they aren't. - **Worker ↔ Project** — manual intersection. Each association has a role (Lead, Member, Consultant), allocation %, start / end dates, billable rate. - **Product ↔ Category** — native N:N usually fine. Products are categorised; the relationship is uncomplicated. - **Customer ↔ Sales Rep** — manual intersection. The association has a role (Primary AM, Backup, Inside Sales), commission split, effective dates. ## Limits on cascade behaviour Native N:N intersection tables have limited cascade configuration; manual intersection tables have full configurable cascade behaviour (Cascade, Restrict, Remove Link). **Performance considerations.** - **Native N:N** — efficient for simple lookups; the platform optimises. - **Manual intersection** — queries traverse the intersection table; performance similar to any custom table with appropriate indexes. Both scale well for moderate relationship counts (thousands per parent); very heavy N:N (millions of relationships) needs careful indexing and query design. **Querying N:N relationships.** - **Native N:N** — Web API supports `$expand` over the relationship; OData query syntax is straightforward. - **Manual intersection** — query the intersection table directly with `$filter` on the lookup fields; `$expand` to fetch related records. **Common pitfalls.** - **Native N:N chosen, then needing relationship attributes** — the migration to manual intersection requires data migration and code changes. Choose deliberately at design time. - **Manual intersection without proper indexes** — queries slow as relationship volume grows. - **Cascade behaviour wrong** — deleting a parent without considering cascade on intersection produces orphans. ## Operational reality Native N:N is the quick answer; manual intersection is the right answer for any non-trivial relationship. Make the choice deliberately based on what the relationship actually represents. --- # Master data management in Business Central How Business Central synchronises master data across multiple companies — the source/subscriber model, conflict resolution, and operational considerations. Source: https://www.solvingdynamics365.com/guides/master-data-management-in-business-central Section: Business Central / Inventory & warehouse Published: 2026-05-01 For Business Central tenants running multiple companies — sister entities sharing items, customers, vendors, and other master data — keeping them in sync used to mean either painful manual maintenance, custom scripts, or external middleware. **Master Data Management (MDM)**, a feature Microsoft added to Business Central, builds the synchronisation natively. It's not as sophisticated as a dedicated MDM platform but covers the common multi-company scenario well. ## The source/subscriber model One company is designated the **source** for a given master data type — typically the "headquarters" or "main" company. Other companies in the same environment are **subscribers**. Master records created or updated in the source automatically synchronise to the subscribers, optionally with field-by-field control over what synchronises. ## Synchronised entities The most commonly used: - **Items** — item card, item variants, item references, base unit of measure, prices. - **Customers** — customer card, contacts associated with customer. - **Vendors** — vendor card, contacts associated with vendor. - **Items, customers, vendors** are by far the most common; additional tables can be synced through configuration. ## Field-level control Not every field on the source item should land on every subscriber. The base unit, item number, and description should sync; the inventory posting group might be per-company because each subsidiary uses different GL structures. The MDM configuration lets administrators include or exclude specific fields per subscriber. ## Synchronisation cadence Sync can run **on demand** (administrator triggers it), **scheduled** (job queue runs it nightly), or **on change** (record-level events propagate immediately). Most tenants run scheduled sync nightly with on-demand for urgent changes. ## Conflict resolution What if a subscriber edits a synchronised field on their copy? Two configurable policies: - **Source wins** — the next sync overwrites the subscriber's edit. The default, and the safest for items where the master must rule. - **Subscriber wins** — the subscriber's edit is preserved and the field stops syncing for that record. Used when subscribers genuinely need local override. Conflicts are logged for administrator review, regardless of policy. **Operational realities.** - **Initial sync** can be large — the first run pushes thousands of items to subscribers. Schedule during quiet hours. - **Posting groups, dimensions, and country-specific fields** are usually subscriber-local. Don't sync them. - **Number series** are subscriber-local. The source's customer number won't necessarily match the subscriber's, so the sync uses field mapping rather than numeric equality. - **Removing a subscriber** requires care — break the sync first, then archive subscriber-local data. **Limits.** - MDM in BC is intra-environment, intra-tenant. Cross-tenant or cross-environment sync needs middleware (Power Automate, Logic Apps, an iPaaS tool). - Complex multi-level relationships (item → BOM → component items) need deliberate sync ordering. - Hierarchical master data (parent/child customers) syncs but requires the parent to land first. ## When to outgrow Beyond ~30 companies with complex hierarchies and cross-system MDM, customers typically introduce a dedicated MDM platform (Profisee, Stibo, Reltio, Riversand) feeding BC instead of using BC's own MDM. For most multi-company SMBs in the under-20 entity range, the built-in MDM is the right answer. --- # Master Data Services vs Dual-Write for Dynamics 365 How Master Data Services and Dual-Write differ as integration patterns between F&O and Dataverse — strengths, weaknesses, and the architectural choices. Source: https://www.solvingdynamics365.com/guides/master-data-services-vs-dual-write Section: Finance & SCM / Overview & platform Published: 2026-05-01 Connecting Dynamics 365 Finance and Operations (back-office ERP) with Dataverse-based Customer Engagement apps (CRM, Customer Service, Field Service) is a frequent architectural requirement. Two patterns dominate: **Dual-Write** (Microsoft's purpose-built bidirectional sync) and **Master Data Services / Master Data Integrator** (older patterns, mostly one-way). Knowing which to use when matters. **The integration problem.** - F&O has its own data — customers (in F&O's CustTable), items, etc. - Dataverse has Customer Engagement's data — Accounts, Contacts, Products. - Same business entity (a customer) lives in both. - Changes in one need to flow to the other. Without a sync mechanism, manual re-entry happens; data diverges; chaos ensues. ## Dual-Write Microsoft's purpose-built sync: - **Bidirectional** — changes flow both ways. - **Real-time** — within seconds. - **Built into F&O** — configurable; enabled per entity. - **Maps F&O entities to Dataverse entities** — Customer → Account, etc. - **Initial sync** — bulk one-time populating; ongoing changes incremental. - **Conflict resolution** — defined rules when both sides change. For organisations running F&O + Customer Engagement, Dual-Write is the canonical integration. **Dual-Write architecture.** - F&O writes change events to its internal queue. - Dual-Write service reads queue. - Translates F&O record to Dataverse representation per mapping. - Writes to Dataverse. - Mirror path for Dataverse → F&O. Each entity has a configurable map; standard maps shipped by Microsoft; customisable for extensions. **Dual-Write mapping configuration.** - **F&O entity** — source. - **Dataverse table** — target. - **Field mappings** — per-column. - **Filters** — only sync certain records. - **Direction** — one-way or two-way. - **Initial sync vs running sync** — separate configuration. Standard mappings cover common entities; custom entities need custom mappings. **Common Dual-Write entities.** - Customer / Account - Vendor / Account (with different role) - Released Product / Product - Sales Order - Quotation - Invoice (less commonly) - Contact - Address - Employee / Contact (with Worker role) The list expands per wave. ## Master Data Services (MDS) The older pattern: - Microsoft's enterprise master data management product (SQL Server-based). - Hub-and-spoke; MDS is the authoritative source. - F&O and Dataverse both subscribe to MDS. - Less integrated with Dynamics; manual configuration. Mostly legacy now; Dual-Write supersedes for Dynamics-specific scenarios. ## Master Data Integrator (older Dynamics-specific tool) Historical: - Pre-Dual-Write integration between F&O and Customer Engagement. - File-based, slower, batch-oriented. - Largely deprecated; Dual-Write is the replacement. **Dual-Write strengths.** - Real-time bidirectional. - Native to Dynamics; minimal external infrastructure. - Standard mappings for common entities. - Conflict resolution built in. - Microsoft-supported. **Dual-Write limitations.** - Bound to Dataverse-F&O pair; not for non-Dynamics destinations. - Mapping complexity for custom entities. - Performance issues at very high volumes (>10K changes per minute). - Initial sync of large data sets can take days. - Schema changes break mappings; coordination needed. **Alternative patterns.** - **Custom integration via Azure Service Bus** — for complex scenarios beyond Dual-Write's reach. - **ADF pipelines** — for batch sync rather than real-time. - **APIs direct** — F&O and Dataverse APIs called directly from custom code. Each has its place; Dual-Write should be the default for F&O↔Dataverse sync. ## Conflict resolution When both sides change a record simultaneously: - **Last write wins** — default. - **Source priority** — one side authoritative for specific fields. - **Manual review** — for conflicts, queue for human resolution. Configurable per entity / per field. ## Monitoring Operational health: - **Dual-Write admin pages** — sync status per entity. - **Failed syncs** — exception queue. - **Latency metrics** — how fast changes flow. Without monitoring, sync issues compound; data diverges silently. ## Schema evolution When entities change: - New field added in F&O → Dual-Write mapping needs update. - New field added in Dataverse → similar. - Field renamed → mapping breaks. Coordinate schema changes; test mappings; deploy together. **Common pitfalls.** - **No initial sync planning.** Skipping initial bulk; running data desynchronised. - **Mapping gaps.** Some fields not mapped; data divergence on un-mapped fields. - **Conflict resolution untuned.** Last-write-wins for every field; legitimate updates overwritten. - **No monitoring.** Failures accumulate; nobody notices until reconciliation reveals divergence. - **Heavy plug-ins on Dataverse side.** Dual-Write writes; plug-in fires; updates F&O; loop. - **Performance under load.** Heavy F&O batch creates lag in Dataverse view. ## Strategic positioning For organisations running both F&O and Customer Engagement on Dynamics 365, Dual-Write is the canonical integration pattern. Plan and execute it thoughtfully; the initial setup investment pays back continuously. For organisations with non-Dynamics destinations (Salesforce, ServiceNow), or with complex multi-system integrations, Dual-Write doesn't apply directly; custom patterns via Service Bus or Power Automate fill the gap. Master Data Services has its niche for enterprise MDM but is increasingly secondary to Dual-Write for Dynamics-specific needs. Choose based on the actual integration topology; don't force tools beyond their natural fit. ### Frequently asked questions **What is dual-write?** Microsoft's built-in, bidirectional, near-real-time synchronisation between Finance and Operations entities and Dataverse tables — Customer to Account, Released Product to Product, sales orders, quotations, contacts, addresses — with shipped maps, initial sync, and configurable conflict resolution. **Is Master Data Services still relevant?** Only for enterprise master data management beyond the Dynamics pair. For F&O-to-Dataverse sync it has been superseded by dual-write, and the older Master Data Integrator is largely deprecated. **What are dual-write's limits?** It only connects Dataverse and F&O, custom entities need custom maps, very high change volumes strain it, initial sync of large data sets can take days, and schema changes on either side break maps unless coordinated. **What causes dual-write to loop?** A heavy plug-in on the Dataverse side that fires on a dual-write write, updates the record, and sends the change back to F&O. Design plug-ins and flows on synced tables with dual-write in mind. **When should I not use dual-write?** When the destination is not Dynamics — Salesforce, ServiceNow, a data warehouse — or when integrations span many systems. Azure Service Bus, Data Factory pipelines, or direct API calls fill that gap. --- # Master planning groups in Dynamics 365 Supply Chain How master planning groups configure replenishment behaviour per item in F&O — coverage groups, item allocation keys, and the policies that shape MRP. Source: https://www.solvingdynamics365.com/guides/master-planning-groups-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 In Dynamics 365 Supply Chain Management's planning engine (whether the modern **Planning Optimization** or the legacy MRP), the behaviour of replenishment for any given item is determined by several groupings — **item coverage groups**, **item allocation keys**, **planning groups**, and policy-driving parameters. Understanding the layered configuration is essential to producing a planning system that doesn't fight your operations. ## Coverage groups (item coverage settings) The most consequential setting per item. A **coverage group** defines: - **Coverage code** — the replenishment policy: - **Period** — top up at end of each period. - **Requirement** — plan exactly to demand (true MTO). - **Min/Max** — top up when below minimum, to maximum. - **Manual** — no automated planning suggestions. - **Coverage time fence** — how far out the engine plans. 30 days, 90 days, etc. - **Lead times** — minimum production / purchase lead time the engine assumes. - **Safety stock** — buffer level the engine treats as unavailable. - **Safety margin** — extra time padding for receipts. - **Reorder quantity rules** — minimum order quantity, lot multiple, maximum order quantity. Each item is assigned to a coverage group; the group's settings drive how the engine plans for that item. ## Item coverage records For more nuanced control, **item coverage** records override the coverage group at the item-and-warehouse level. A item might have a default coverage group setting at the company level, but at warehouse W01 (a high-volume customer site), use different settings — e.g. tighter safety stock, different reorder rules. ## Item allocation keys When demand comes from a **forecast** at an aggregated level (e.g. forecast 1,000 units of a product family for Q1), the **item allocation key** distributes that aggregate forecast across specific items in the family. A 60/30/10 allocation key spreads the 1,000 across Item A (600), Item B (300), Item C (100). The aggregate forecasting + allocation key pattern is how to forecast realistically without forecasting every SKU individually. ## Planning groups **Planning groups** group items with similar planning behaviour for the engine's scheduling efficiency. The Planning Optimization engine can run plans for individual planning groups, useful for very large item portfolios where running everything at once would be costly. ## Master plans A **master plan** is the *named planning scenario* — Static (the production plan), Dynamic (the simulation plan). Different master plans can be run with different parameters; the production master plan is what feeds purchase requisitions and planned production orders. ## Forecast plans A **forecast plan** is a separate named scenario for forecasting purposes — typically the demand forecast feeding the production plan. ## Coverage dimensions What's the granularity of planning? - **Item** — plan one number per item across the company. - **Item + Site** — plan per item at each site. - **Item + Warehouse** — plan per item at each warehouse. - **Item + Site + Warehouse + Batch** — finest granularity. Configured per item; affects the volume of planning data and the engine's runtime substantially. **Common design pitfalls.** - **One coverage group for all items** — every item gets the same policy regardless of profile. ABC analysis should drive different policies per velocity tier. - **Min/Max without periodic review** — minimum / maximum levels become outdated as demand shifts; review quarterly. - **Forecasts without item allocation** — coarse forecasts produce coarse planning suggestions. Allocate appropriately. - **Coverage time fence too short** — supply doesn't materialise in time for visible demand. ## Operational discipline Design coverage groups by item profile (A-class, B-class, C-class, MTO, slow-moving). Document the policy choice per group. Review quarterly against actual performance. Tune. ## Where it stops Very sophisticated planning (multi-echelon optimisation, simultaneous capacity-and-material constraints, complex scenario modelling) sometimes exceeds the configurable engine and needs partner APS. For mainstream mid-to-large manufacturing and distribution, well-tuned master planning groups in F&O are sufficient. --- # Master planning runs in Dynamics 365 Finance and Operations What master planning actually does in F&O — the regenerative vs net change run, planned orders, action messages, and how the engine produces a supply plan. Source: https://www.solvingdynamics365.com/guides/master-planning-runs-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 **Master planning** is the F&O engine that turns demand (sales orders, transfers, forecasts) and existing supply (on-hand, purchase orders, production orders) into a coherent supply plan — planned purchase orders, planned production orders, planned transfer orders, and action messages on existing supply. Master planning runs are a daily or hourly rhythm in most production deployments. **Two engines.** - **Classic master planning** — the legacy engine, runs on the F&O SQL database, batch-processes the whole plan. - **Planning Optimization** — the newer in-memory service, runs in Azure, much faster, supports incremental runs. Both follow the same conceptual model. Planning Optimization is the strategic direction; new deployments should start there unless they need a feature that classic supports but PO doesn't (still a shrinking list). ## The master plan record A master plan defines the run: - **Time fence** — how far into the future planning suggests orders. - **Coverage codes inheritance** — defaults if items don't specify. - **Calculations to include** — sales orders, forecasts, transfers, BOMs, kits. - **Filters** — items, sites, warehouses to include. A typical setup has two plans: - **Static plan** — read-only, used by procurement to firm purchase orders. - **Dynamic plan** — recalculated frequently, used by planners for what-if and short-term decisions. Some teams run a third **simulation plan** for scenario analysis. **Regenerative vs net-change.** - **Regenerative** — recalculates everything for every item in scope. Heavier; usually nightly. - **Net change** — recalculates only items whose net requirement changed since last run. Lighter; hourly. Planning Optimization handles incremental more efficiently than classic. Regenerative every weekend, net-change every hour or even continuously is the typical cadence. **What the engine produces.** - **Planned orders** — suggestions: planned purchase, planned production, planned transfer, planned kanban. - **Action messages** — recommendations on existing supply: advance, delay, increase, decrease, cancel. - **Futures messages** — alerts that promised dates can't be met. - **Capacity warnings** — if scheduling reveals overload. Planners review in the **Planned Orders** workspace. Firming a planned order converts it to the real order (purchase, production, transfer); action messages drive amendments to existing orders. ## Pegging The link from supply to demand. Every planned order traces to the demand it covers, and every demand traces to its supply. The **Pegging tree** view shows: this sales order → this planned production → this planned purchase. Pegging visibility is invaluable for impact analysis when a vendor delays. ## BOM explosion For manufactured items, master planning recursively explodes BOMs: 1. Demand for finished good → planned production order. 2. Production order needs components per BOM → demand for each component. 3. Each component → existing supply or new planned order (purchase, production, transfer). 4. Multi-level BOMs recurse until raw materials. The explosion respects: - **Production routes** for lead time calculation. - **Production calendars** for capacity. - **BOM versions** active on the planned production date. ## Forecast consumption As real sales orders land in forecast periods, they consume the forecast. Master planning sees the net demand (max of forecast remaining, actuals). Without consumption, demand doubles. **Lock periods and frozen zones.** - **Time fence** — the window within which the engine doesn't change existing orders without explicit planner intervention. - **Action message time fence** — the window within which the engine doesn't even produce action messages. These prevent constant rescheduling of imminent operations. **Performance.** - **Classic master planning** on 10K+ items can run for hours. Mitigations: index tuning, batch parallelism, scoped plans. - **Planning Optimization** on the same volume runs in minutes — orders of magnitude faster because it's an in-memory service. For large supply chains, PO performance often justifies the migration from classic by itself. **Common pitfalls.** - **Stale forecasts.** Engine produces precise suggestions for a forecast nobody believes any more. - **Lead times wrong.** Suggested orders due dates miss reality; planners override constantly. - **Coverage codes default-only.** No item-level tuning; one-size-fits-all suggestions. - **Ignoring action messages.** Hundreds of action messages every day; planners triage by ignoring most. Build a discipline of working messages or accept that the engine will inflate exception backlogs. - **Pegging not used.** Planners override without understanding downstream consequences; supply chain becomes opaque. ## The operational rhythm Daily morning planner stand-up: review last night's regenerative results, work the top action messages, firm the next 24 hours of planned orders. Master planning is a tool for the planning rhythm — not a substitute for planner judgement, but a force-multiplier for it. ## Where to go next The engine behind the run is [Planning Optimization](https://www.solvingdynamics365.com/guides/dynamics-365-planning-optimization); the parameters that shape it are [master planning groups](https://www.solvingdynamics365.com/guides/master-planning-groups-in-f-and-o) and [replenishment policies](https://www.solvingdynamics365.com/guides/inventory-replenishment-policies-in-scm); the demand signal comes from [demand planning](https://www.solvingdynamics365.com/guides/dynamics-365-demand-planning). Planned production orders hand off to [production scheduling](https://www.solvingdynamics365.com/guides/production-scheduling-in-f-and-o). --- # Measures and attributes in Customer Insights — Data How to define measures and computed attributes in Customer Insights — Data — calculation logic, dependencies, refresh. Source: https://www.solvingdynamics365.com/guides/customer-insights-data-measures-and-attributes Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 A unified profile is a snapshot of who someone is. **Measures** and **computed attributes** in Customer Insights — Data layer derived signals on top — RFM scores, lifetime value, days since last purchase, engagement scores. These derived signals are what marketing, sales, and service actually use to drive decisions. **The distinction.** - **Measure** — a single aggregate value across all customers (or a segment): "Total revenue last quarter." - **Computed attribute** — a per-profile value: "This customer's total purchases." Both layer derivation on the underlying data; different scope. **Common measure examples.** - **Total customers** — count. - **Average lifetime value.** - **Total revenue** — sum. - **Active customer rate** — percentage active in last 30 days. - **Churn rate** — percentage who unsubscribed. Measures appear on dashboards and reports; aggregate views of the customer base. **Common attribute examples.** - **Total purchases** — per customer. - **Days since last purchase** — recency. - **Purchase frequency** — over past year. - **Average order value.** - **Lifetime value (LTV)** — total spend. - **Engagement score** — composite metric. - **Churn risk** — ML-predicted. - **Preferred channel** — most-used channel. Attributes available on each profile; usable in segments, journeys, personalization. ## Defining a measure In the maker portal: 1. Add new measure. 2. Define the calculation logic (sum, count, average, formula). 3. Optionally segment-scope the measure. 4. Save. The measure computes; result visible on dashboards. **Defining a computed attribute.** 1. Add new attribute. 2. Choose the source table. 3. Define per-profile calculation. 4. Save. The attribute computes per profile; available everywhere profiles are used. **Aggregations.** - **Sum, Count, Average, Min, Max** — standard. - **Distinct count** — unique items. - **Conditional aggregations** — sum where condition. - **Custom formulas** — Power Fx-like expressions. The formula language enables business-meaningful calculations. **Dependencies.** - Measures depend on tables. - Attributes depend on tables. - Computed-attribute-on-computed-attribute possible. - Changes ripple through dependency graph. Understanding dependencies prevents breaking changes. **Refresh cadence.** - **Continuous** — incremental as data changes. - **Scheduled** — periodic. - **On-demand.** For real-time use cases (journey triggering), continuous matters; for periodic reporting, scheduled fine. ## Predictive attributes ML-derived: - **Customer lifetime value prediction.** - **Churn risk.** - **Product affinity.** - **Next likely action.** Built on Microsoft's models; data quality and history determine accuracy. ## Custom ML models Beyond built-ins: - Train your own model in Azure ML. - Score profiles. - Score becomes an attribute. This is the integration path for unique business prediction needs. ## Using attributes in segments Computed attributes are first-class segment criteria: - **"LTV > $1000"** — high-value segment. - **"Days since last purchase > 90"** — at-risk segment. - **"Churn risk > 0.7"** — proactive intervention. The richer the attribute set, the more segmentation possibilities. **Using attributes in journeys.** - Trigger journey when attribute crosses threshold. - Branch journey paths based on attribute. - Personalise content with attribute. Attributes drive both segmentation and personalisation. ## RFM analysis Classic customer scoring: - **Recency** — days since last purchase. - **Frequency** — purchase count in period. - **Monetary** — total spend. Each scored 1-5; combined into RFM score. Each component is a computed attribute; combined score derived from them. CI-Data supports natively. **Cohort analysis.** - Group customers by attribute (signup month, first purchase channel). - Track cohorts over time. - Compare cohort behaviours. Attributes enable cohort definitions. **Performance considerations.** - Complex attribute calculations slow refresh. - Cross-table aggregations expensive. - Dependency depth multiplies cost. For high-volume Customer Insights deployments, performance tuning matters. **Common pitfalls.** - **Attribute proliferation.** Hundreds of attributes; nobody knows what's used. - **Stale attributes.** Calculated once, never refreshed; misleading. - **Circular dependencies.** Attribute A depends on B depends on A; refresh fails. - **Source data wrong.** Garbage in, garbage out. - **No documentation.** Future maintainers don't know what each attribute means. **Best practices.** - **Name attributes clearly** — `LifetimeValue`, `DaysSinceLastPurchase`. - **Document the calculation** — what data, what formula. - **Owner per attribute** — who maintains. - **Periodic audit** — retire unused. - **Test changes** — recalc subset before full refresh. ## Strategic positioning Measures and attributes are how customer data becomes operational. Without them, the unified profile is descriptive; with them, it's predictive and actionable. Mature CDP deployments have rich attribute libraries that consuming teams use confidently. The investment is in: - Defining attributes thoughtfully. - Maintaining data quality upstream. - Refresh discipline. - Documentation and governance. The teams that get this right have a competitive customer data foundation; the teams that don't have an expensive CDP that no one uses. --- # Message replay and poison queue handling for Dynamics 365 integrations How to design Dynamics 365 integrations that survive transient failures and handle poison messages — dead-letter queues, replay tooling, idempotency. Source: https://www.solvingdynamics365.com/guides/message-replay-and-poison-queue-handling-for-d365 Section: Integrations / Eventing & messaging Published: 2026-05-01 Every integration eventually fails — receiver down, payload malformed, downstream system busy. A robust Dynamics 365 integration architecture handles these failures gracefully: failures isolated, messages retried, poison messages quarantined for human review, and replay machinery for restoring sync. Without it, transient failures cascade into data divergence and operational scrambling. **Failure modes.** - **Transient** — temporary network issue, brief downstream slowness, momentary rate limit. Retry succeeds. - **Persistent** — receiver down for hours, schema mismatch, authentication expired. Retry continues to fail. - **Poison** — message data malformed in a way that no retry will help. Each requires a different response. **Retry strategies.** - **Fixed delay retry** — fixed N seconds between attempts. - **Exponential backoff** — delay doubles each attempt. - **Exponential with jitter** — backoff with random variance to prevent thundering herd. - **Bounded retry count** — give up after N attempts. Exponential with jitter is the modern default; bounded count prevents infinite loops. ## Dead-letter queues (DLQ) When retries exhaust, the message goes to a dead-letter queue: - **Azure Service Bus** — dead-letter subqueue per queue/topic. - **Azure Event Grid** — dead-letter to a blob storage container. - **Azure Storage Queue** — separate "poison" queue. - **Webhook** — no dead-letter; message lost. For critical integrations, never use webhooks alone — the lack of DLQ is operationally unacceptable. **DLQ inspection.** - **Service Bus Explorer** — see messages in DLQ, inspect content. - **Azure CLI / PowerShell** — programmatic access. - **Custom DLQ dashboard** — Power BI report over DLQ metrics. Without inspection, messages pile up unseen. **Resubmission from DLQ.** - **Manual** — operator inspects, fixes issue, resubmits message to main queue. - **Automated** — DLQ processor with logic to retry messages whose conditions have cleared. - **Bulk resubmit** — after an outage, resubmit all DLQ messages. The choice depends on volume and judgment requirements. For small volumes, manual is fine; for high volumes, automation needed with safeguards. ## Idempotency A foundational requirement. Receivers must handle the same message multiple times: - **Idempotency key** — unique per business event. - **Deduplication at receiver** — check if already processed; skip if so. - **State-based logic** — set state to X, don't increment counter twice. Without idempotency, retries cause data corruption. Build idempotency into every receiver from day one. **Idempotency keys.** - **Business event ID** — order ID, invoice number. - **Source-system primary key** — record ID from external system. - **Composite key** — combination of source ID and operation. The key should be deterministic — same business event always produces same key, regardless of how many times the message is sent. ## Message correlation For complex flows: - **Correlation ID** — identifies a multi-message conversation. - **Sequence number** — orders messages within a conversation. - **Saga ID** — identifies a longer-running process. When something goes wrong, correlation lets you reconstruct the conversation. ## Outbox pattern A specific reliability pattern: - Application writes to local DB transaction AND outbox table. - Separate process reads outbox and publishes to messaging. - Even if messaging is down, outbox holds the messages until published. For Dynamics 365 plug-ins emitting external events, an outbox table in Dataverse + a worker reading it is a reliable pattern. ## Inbox pattern The receiver's mirror: - Receiver writes message to local inbox table on receipt. - Processing logic checks inbox before acting. - Idempotency via inbox deduplication. Outbox + inbox = at-least-once delivery with deduplication = exactly-once business outcome. ## Schema versioning Messages have schemas that change: - **Backward compatible** — add fields; old consumers ignore them. - **Forward compatible** — handle missing fields gracefully. - **Breaking change** — version the message type. Most integrations should aim for backward compatibility; breaking changes need coordinated deployment. ## Poison message identification Distinguishing poison from transient is hard: - **Persistent failure across retries with same error** — likely poison. - **Same error across multiple messages** — likely systemic issue, not poison. - **Manual review** — operator looks at the message, identifies the problem. DLQ inspection workflow includes triage to categorise messages. **Replay tooling.** - **Replay from DLQ** — resubmit individual messages. - **Replay from event store** — for Event Hub or storage-backed events, replay from a timestamp. - **Source system replay** — re-extract and re-emit from the source. For long-running outages, replaying from source is sometimes the only practical recovery. **Monitoring and alerting.** - **DLQ depth** — alert when DLQ has messages older than N hours. - **Retry rate** — high retry rate signals systemic issue. - **End-to-end latency** — track from source emission to destination processing. - **Failed plug-in executions** — Dataverse async job failures. Without monitoring, integration health is invisible until something breaks user-visibly. **Common pitfalls.** - **No idempotency.** Retries cause duplicates; data corruption. - **No DLQ.** Failed messages disappear; integration silently incomplete. - **DLQ ignored.** Messages pile up; no one reviews; eventual cleanup loses business data. - **Schema drift.** Sender updates schema; receivers break; cascade of failures. - **No replay capability.** Outage recovery requires manual data backfill. - **Optimistic retry counts.** Retries forever; resource leak. **Operational rhythm.** - **Daily** — DLQ depth check. - **Weekly** — DLQ message triage; resubmit or discard. - **Monthly** — review monitoring alerts and patterns; improve resilience. - **After incidents** — postmortem; improvements deployed. ## Strategic positioning Integration reliability is engineering discipline, not a feature. The architectural patterns — at-least-once delivery, idempotency, DLQ, replay — apply across messaging platforms and integration scenarios. Get them right once; reuse across integrations. The teams that invest in reliable integration architecture have boring integration days; the teams that don't have constant fire drills. The investment is small relative to ongoing operational cost; the savings compound. --- # Microsoft 365 Copilot for Dynamics 365 How Microsoft 365 Copilot reaches into Dynamics 365 — graph connectors, agents, and the licensing layers that determine what users actually get. Source: https://www.solvingdynamics365.com/guides/microsoft-365-copilot-for-dynamics-365 Section: Power Platform / Copilot & AI Published: 2026-05-01 **Microsoft 365 Copilot** is the AI experience embedded across Microsoft 365 — in Word, Excel, PowerPoint, Outlook, Teams, OneNote, and the standalone Copilot app. It is *different* from the embedded copilots in Dynamics 365 (Copilot for Sales, Copilot in Business Central, F&O copilots), but the two stacks increasingly overlap. Understanding how M365 Copilot sees Dynamics 365 data — and what it can do with it — is increasingly central to the platform story. ## The architecture M365 Copilot uses **semantic indexing** of a user's Microsoft 365 data (emails, files, calendar, Teams chats) combined with **Microsoft Graph** as the data plane, then layers Azure OpenAI for reasoning and generation. To bring data *outside* M365 into Copilot's awareness, two mechanisms exist: 1. **Graph connectors.** Index content from external systems into Microsoft Graph so Copilot can retrieve and cite it. Microsoft ships Graph connectors for Dynamics 365 — items, accounts, opportunities, and other key tables can be indexed. 2. **Agents (Copilot Studio).** Custom Copilot Studio agents can act as M365 Copilot **plugins**, extending its behaviour to query Dynamics 365 live and execute actions. The agent appears in the Copilot pane and Copilot calls it when relevant. **What users actually get.** - **In Outlook.** Drafting an email to a customer, Copilot can reference recent open opportunities, recent cases, or recent invoices from Dynamics 365 (if the right plugins are installed). - **In Word.** Drafting a proposal, Copilot can pull customer history, past quotes, and pricing from CRM via plugins. - **In Excel.** Summarising data exported from Dynamics 365, building forecasting models on top. - **In Teams.** During a meeting with a customer, Copilot summary references CRM data and creates follow-up actions back to Dynamics 365. ## The licensing layers Microsoft 365 Copilot is a separate paid add-on (per user per month, M365 E3/E5 or Business Standard/Premium required as base). It is **distinct** from Copilot for Sales, which is a different per-user add-on. The embedded copilots inside Dynamics 365 (BC, F&O, customer service AI assist) are included with the relevant D365 SKUs. - **Microsoft 365 Copilot Chat** (formerly Copilot Free) — free standalone consumer-style chat, no business data grounding. - **Microsoft 365 Copilot** — full enterprise; grounded in M365 data; supports plugins; data residency and DLP. - **Copilot for Sales** — separate licence; sales-specific; lives inside Outlook/Teams/CRM. - **Copilot in [D365 product]** — bundled with each D365 SKU; specific to that product. ## Configuration A Microsoft 365 admin enables Copilot per user, installs the Dynamics 365 plugins from the Microsoft 365 plugin catalogue, and configures data sharing and DLP. Copilot Studio agents that target M365 Copilot are published with the right manifest to appear in the M365 Copilot experience. ## The future Microsoft is converging the copilot stack. The eventual end state is one Copilot experience that knows the user's M365 data and their Dynamics 365 data and reasons across both. The transition is incremental; expect the licensing landscape to evolve. ## Practical advice Start with one well-defined use case (e.g. Outlook + Dynamics Sales). Measure adoption. Expand based on actual value, not vendor enthusiasm. --- # Microsoft Cloud for Financial Services How Microsoft Cloud for Financial Services layers industry-specific capabilities on Dynamics 365 — pre-built data models, compliance templates. Source: https://www.solvingdynamics365.com/guides/microsoft-cloud-for-financial-services Section: Foundations / Industry clouds Published: 2026-05-01 Microsoft offers **industry clouds** — pre-packaged collections of products, data models, and templates tailored to specific verticals. **Microsoft Cloud for Financial Services** is the financial-services variant: Dynamics 365 + Power Platform + Azure components configured for banking, insurance, capital markets, and wealth management scenarios. **What's in the industry cloud.** - Pre-built Dataverse data model (Financial Services Customer Profile). - Industry-specific solutions and accelerators. - Compliance templates. - Pre-built dashboards. - Power Pages templates for customer-facing portals. - Integrations with key financial services systems. - Industry-specific Copilot capabilities. The bundling reduces time to first value. ## Pre-built customer profile Common attributes: - Standard customer attributes. - Financial behaviours. - Product holdings. - Relationship roles. - Risk indicators. - Communication preferences. Standardised model means partners and consumers share vocabulary. **Banking scenarios covered.** - Retail banking customer engagement. - Commercial banking relationship management. - Loan origination workflow. - Account servicing. - Contact centre operations. **Insurance scenarios.** - Customer onboarding. - Underwriting support. - Claims management. - Distribution / agency management. **Wealth scenarios.** - Advisor productivity. - Client portfolio reviews. - Compliance documentation. **Capital markets.** - Less common; some accelerators emerging. **Compliance and regulatory.** - GDPR-aware data model. - KYC / AML capture. - Audit log configuration. - SOX-relevant controls. - Country-specific extensions (e.g., MiFID II for Europe). Reduces from-scratch compliance work. ## Components and licensing Layered on existing Dynamics: - **Dynamics 365 Sales** — for relationship managers. - **Dynamics 365 Customer Service** — for contact centre. - **Customer Insights** — for unified view. - **Power Apps** — for custom apps. - **Power Pages** — for customer portals. - **Azure services** — for additional infrastructure. Industry cloud subscription includes / discounts these; specifics vary. **Pre-built dashboards.** - Banker scorecard. - Customer 360. - Pipeline by product. - Compliance status. - Customer journey analytics. Faster than building from scratch. **Integration with core systems.** - Pre-built connectors / accelerators for FIS, Temenos, Fiserv, others. - Reduces integration effort. - Standard data shapes. The integration story is one of the headline value. **Customisation.** - Industry cloud is a starting point. - Customisation expected; provides baseline. - Updates from Microsoft preserve customer-specific adjustments. Most deployments use industry cloud as accelerator; significant customisation follows. **Comparison with from-scratch.** | Aspect | Industry Cloud | From Scratch | |---|---|---| | Time to value | Faster | Slower | | Cost | Bundled; varies | Higher upfront customisation | | Customisation depth | Moderate | Unlimited | | Updates | Continuous from Microsoft | Custom maintenance | For most financial services deployments, industry cloud is the better starting point. **Common partner solutions.** - **Boundary partners** specialising in financial services. - **Industry-specific extensions** layered on industry cloud. - **Implementation accelerators.** Industry expertise more important than generic Dynamics expertise. ## Microsoft FastTrack For large customers, Microsoft engineers support industry cloud adoption. **Limitations.** - **Not a turnkey solution** — significant configuration needed. - **Customer's specific products and processes** still require customisation. - **Country-specific regulations** beyond what's included. - **Existing systems integration** still planned per organisation. The industry cloud accelerates; doesn't eliminate implementation work. **Sustainability.** - Continuous updates from Microsoft. - Industry cloud roadmap aligned with regulatory changes. - Long-term supported product. Investment in industry cloud aligns with Microsoft's strategic direction. ## Comparison with industry-specialised competitors Some industry-specific platforms (Salesforce Financial Services Cloud, nCino, etc.) compete: - Each has strengths. - Choice depends on broader tech footprint. - For Microsoft-aligned organisations, MCfFS is natural choice. **Common pitfalls.** - **Expecting plug-and-play.** Industry cloud is starting point; implementation still required. - **Ignoring industry cloud and building from scratch.** Reinventing what's available. - **Mixing industry cloud and heavy customisation poorly.** Future updates conflict. - **Partner without financial services experience.** Misses regulatory nuances. **Operational rhythm.** - Adopt industry cloud as foundation. - Customise per organisation needs. - Stay current with Microsoft updates. - Industry cloud refreshes annually with broader Dynamics waves. ## Strategic positioning Microsoft Cloud for Financial Services represents Microsoft's industry investment. For financial services organisations on Microsoft cloud (or considering), the industry cloud reduces time-to-value, embeds regulatory awareness, and provides a maintained foundation. For decision-makers: - Consider industry cloud as starting point. - Partner with FS-experienced firms. - Plan customisation thoughtfully. - Stay engaged with Microsoft's industry roadmap. The investment in industry cloud subscription is meaningful but offset by faster implementation and reduced from-scratch customisation. For most financial services organisations adopting Dynamics, the industry cloud is the right starting point. --- # Microsoft Cloud for Healthcare How Microsoft Cloud for Healthcare layers healthcare-specific capabilities on Dynamics 365 — patient engagement, care coordination, FHIR integration. Source: https://www.solvingdynamics365.com/guides/microsoft-cloud-for-healthcare Section: Foundations / Industry clouds Published: 2026-05-01 **Microsoft Cloud for Healthcare** is the healthcare-specific industry cloud — combining Dynamics 365, Power Platform, Azure Health Data Services, and Microsoft 365 capabilities tailored for hospitals, clinics, payors, and life sciences. For healthcare organisations adopting Microsoft cloud, it accelerates implementation while embedding healthcare-specific patterns. **What's included.** - Healthcare-specific Dataverse data model. - Patient engagement solutions. - Care coordination workflows. - Virtual visit capabilities. - FHIR integration (Fast Healthcare Interoperability Resources). - Patient outreach templates. - Compliance configurations. - Industry-specific Copilot scenarios. Tailored stack vs piecing together components. **Healthcare scenarios.** - **Patient outreach and engagement** — appointment reminders, preventive care campaigns. - **Patient access** — scheduling, portal. - **Care team coordination** — multi-disciplinary care. - **Clinical workflows** — care manager tools. - **Population health** — risk stratification, outreach. - **Telehealth** — virtual visits, Teams integration. - **Patient records** (limited; EHR remains primary). **FHIR and healthcare data interoperability.** - **FHIR** — the modern healthcare data standard. - **Azure Health Data Services** — FHIR server. - **Mapping** — Dataverse Healthcare model ↔ FHIR. - **EHR integration** via FHIR. For interoperability with EHRs (Epic, Cerner / Oracle Health, etc.), FHIR is the bridge. **HIPAA compliance.** - **BAA (Business Associate Agreement)** required. - **Encryption** at rest and in transit. - **Audit logging** required. - **Access controls** strict. - **Data retention policies.** - **Right to access and amendment** support. Microsoft cloud meets HIPAA technical safeguards; customer is still responsible for policies, training, breach response. **Where it fits in healthcare technology stack.** - **EHR** (Epic, Cerner, etc.) — primary clinical system. - **Dynamics 365 / Microsoft Cloud for Healthcare** — patient engagement, care coordination, non-clinical workflows. - **Specialty systems** — radiology, lab, etc. - **Health information exchange (HIE)** — for cross-organisation. Dynamics doesn't replace EHR; complements. **Patient engagement scenarios.** - **Pre-visit** — appointment confirmation, intake. - **Post-visit** — follow-up surveys, care plan reinforcement. - **Care gap closure** — preventive screenings. - **Chronic disease management** — recurring touchpoints. - **Patient education.** Customer Insights — Journeys orchestrates; healthcare-specific templates accelerate. **Care coordination.** - Multi-disciplinary care team — physicians, nurses, social workers. - Shared patient view. - Task assignment. - Communications among team. Dynamics Customer Service patterns adapted for healthcare context. **Population health.** - **Risk stratification** — high-risk patients identified. - **Outreach campaigns** — targeted by risk. - **Outcome tracking** — did interventions help? Customer Insights — Data unifies patient data for analysis. **Virtual visits (telehealth).** - Teams-based. - Scheduling integration. - Pre-visit forms. - Post-visit notes. For practices offering virtual care, integration simplifies. **Patient portal.** - Power Pages-based. - Appointment management. - Forms submission. - Communication. - Access to records (limited). For ambulatory practices, portal is competitive necessity. **Payor scenarios.** - Member engagement. - Claims handling support. - Care management. - Provider relations. Payor side has its own patterns; Dynamics supports. **Life sciences scenarios.** - HCP (Healthcare Professional) engagement. - MSL (Medical Science Liaison) workflows. - Patient support programs. - Adverse event capture. Layer on standard Dynamics + life sciences-specific extensions. **Common partner solutions.** - Healthcare-specialised Dynamics partners (small but growing). - Industry-specific ISV extensions. Healthcare specialisation matters more than for some industries; compliance and clinical context demanding. **Compliance specifics.** - **HIPAA** in US. - **GDPR** in EU. - **PIPEDA** in Canada. - **Country-specific** healthcare laws. Each region adds layer; Microsoft cloud supports relevant compliance frameworks. ## Microsoft FastTrack for Healthcare Microsoft engineers support for larger deployments. **Limitations.** - **Not an EHR** — clinical documentation isn't core capability. - **Existing EHR integration required** for most scenarios. - **Specialty clinical needs** still demand specialty systems. - **Heavy customisation** often still required. The industry cloud accelerates; doesn't replace healthcare-specific systems. **Common pitfalls.** - **Expecting EHR replacement.** Misalignment with reality. - **Underestimating compliance burden.** HIPAA isn't optional. - **No EHR integration plan.** Patient data silos. - **Generic Dynamics partner.** Misses clinical context. - **Patient consent management lax.** Trust eroded. ## Patient consent Critical: - Consent for communications. - Consent for data use. - Consent for marketing. - Right to withdraw. Manage as first-class capability; don't bolt on. **Operational rhythm.** - **Continuous patient engagement** — daily. - **Care coordination** — real-time team activity. - **Population outreach** — campaign cycles. - **Compliance reviews** — periodic. - **Annual security audit.** ## Strategic positioning Microsoft Cloud for Healthcare is the right starting point for healthcare organisations adopting Microsoft cloud for non-clinical workflows. It accelerates relative to from-scratch implementation and aligns with healthcare-specific needs. For healthcare decision-makers: - Use as foundation for patient engagement and care coordination. - Plan EHR integration via FHIR. - Partner with healthcare-experienced firms. - Invest in compliance discipline. - Recognise scope — non-clinical workflows, not clinical replacement. The investment is meaningful; the healthcare context demands rigour. Done well, Dynamics 365 + Microsoft Cloud for Healthcare elevates patient experience while operating within healthcare's strict compliance requirements. --- # Microsoft Cloud for Manufacturing How Microsoft Cloud for Manufacturing combines Dynamics 365 SCM, IoT, and AI for connected operations — factory floor integration, supply chain visibility. Source: https://www.solvingdynamics365.com/guides/microsoft-cloud-for-manufacturing Section: Foundations / Industry clouds Published: 2026-05-01 **Microsoft Cloud for Manufacturing** bundles Dynamics 365 Supply Chain Management, Azure IoT, Microsoft Fabric, Power Platform, and Copilot capabilities into a manufacturing-specific industry cloud. It accelerates connected manufacturing scenarios — from factory floor integration through supply chain visibility to customer service for installed equipment. **What's included.** - Pre-built manufacturing data models. - Connected factory scenarios. - Supply chain visibility templates. - Aftermarket service patterns. - Sustainability tracking. - Integration accelerators (MES, ERP, IoT). - Industry Copilot scenarios. The bundling supports modern manufacturing's complex tech requirements. **Manufacturing tech landscape.** - **ERP** — F&O for orders, finance, planning. - **MES (Manufacturing Execution System)** — shop floor execution. - **PLM (Product Lifecycle Management)** — engineering. - **SCADA / Historians** — operational technology. - **QMS** — quality management. - **WMS** — warehouse management. Microsoft Cloud for Manufacturing connects across this landscape. **Connected factory scenarios.** - **Real-time production visibility** — what's running, what's down. - **OEE (Overall Equipment Effectiveness)** — availability × performance × quality. - **Predictive maintenance** — sensor-based. - **Quality in line** — defect detection. - **Energy monitoring.** IoT data flows from machines through Azure IoT Hub to dashboards and Dynamics. **MES integration.** - F&O sends production order to MES. - MES executes on shop floor. - MES reports back operational data. - F&O updates with completion. Multiple MES vendors; integration is standard scope. **Supply chain visibility.** - **Multi-tier supplier visibility** — beyond direct. - **Lead time analysis.** - **Disruption detection.** - **Alternative source identification.** For supply chain resilience, visibility is critical capability. **Aftermarket service.** - **Installed base management** — what's deployed where. - **Spare parts logistics.** - **Field service** for installed equipment. - **Remote diagnostics** via IoT. - **Performance contracts** — pay-per-use or guaranteed uptime models. Aftermarket often more profitable than manufacturing itself; Microsoft Cloud supports. **Digital twin scenarios.** - **Asset digital twin** — virtual representation of equipment. - **Process digital twin** — simulation of operations. - **Supply chain digital twin** — end-to-end visibility. Azure Digital Twins + Dynamics integration emerging. **Sustainability.** - **Emissions per product / production line.** - **Energy efficiency** monitoring. - **Material waste tracking.** - **Supplier sustainability scoring.** Microsoft Sustainability Manager integration; manufacturing-specific metrics. **ESG reporting.** - **Scope 1, 2, 3 emissions.** - **Carbon intensity per unit produced.** - **Compliance reporting** (CSRD, etc.). For manufacturers, ESG reporting is increasingly mandatory. **Industry 4.0 / Smart Manufacturing.** - **Real-time data flowing** from machines. - **AI-driven optimisation.** - **Connected workforce** — frontline workers with mobile tools. - **Closed-loop quality.** Microsoft Cloud for Manufacturing aligned with Industry 4.0 patterns. **Workforce enablement.** - **HoloLens / mixed reality** for assembly assistance. - **Mobile apps** for shop floor. - **AI-powered guidance** for technicians. - **Training in VR / AR.** Frontline worker investments are key competitive differentiator. ## Quality management Beyond what F&O offers natively: - **Statistical process control.** - **Real-time SPC alerts.** - **Customer feedback to product engineering.** - **Field failure analysis.** For regulated manufacturing (aerospace, medical, automotive), quality is critical. **Supplier collaboration.** - **Supplier portal** — Power Pages-based. - **Forecast sharing.** - **Capacity collaboration.** - **Quality data exchange.** Two-way supplier relationships beyond purchase orders. ## Microsoft FastTrack for Manufacturing For larger manufacturers, Microsoft engineers support. **Common partner solutions.** - Manufacturing-specialised partners — common. - MES integration partners. - Industry-specific extensions for sub-verticals. For complex manufacturing, specialised partner essential. **Compliance considerations.** - **ISO 9001** — quality. - **AS9100** — aerospace. - **ISO 13485** — medical devices. - **TS 16949** — automotive. - **FDA** — pharmaceutical, medical, food. - **GxP** — regulated industries. Manufacturing has many compliance regimes; industry cloud supports relevant aspects. **AI scenarios in manufacturing.** - **Demand forecasting.** - **Quality prediction.** - **Maintenance prediction.** - **Production scheduling optimisation.** - **Vision-based quality inspection.** - **Computer vision for safety.** Many use cases; Microsoft Cloud for Manufacturing + Azure AI. ## Integration complexity Major theme: - Multiple existing systems. - Operational technology (OT) vs information technology (IT) split. - Real-time requirements. - Vendor diversity in MES, PLM. Architecture is integration-heavy; plan thoroughly. **Common pitfalls.** - **Trying to do MES in F&O.** Wrong tool; specialised MES essential. - **No OT/IT bridge.** Operational data isolated. - **Sensor data flood** to ERP. Unfiltered IoT overwhelms. - **Generic partner.** Misses manufacturing-specific patterns. - **Compliance after the fact.** Bolted on; expensive. **Operational rhythm.** - **Real-time shop floor.** - **Daily / shift-based production reviews.** - **Weekly planning cycles.** - **Monthly financials.** - **Quarterly performance.** ## Strategic positioning Microsoft Cloud for Manufacturing is Microsoft's bet on connected, intelligent manufacturing operations. For manufacturers adopting Microsoft cloud, the industry cloud accelerates and aligns capabilities. For manufacturing decision-makers: - Plan architecture across OT and IT. - Partner with manufacturing-experienced firms. - Address compliance proactively. - Invest in connected operations as multi-year journey. - Use industry cloud as accelerator. The investment is substantial; manufacturing modernisation is multi-year. Done well, Microsoft Cloud for Manufacturing supports the digital transformation manufacturers increasingly require to remain competitive. --- # Microsoft Cloud for Nonprofit How Microsoft Cloud for Nonprofit serves nonprofit organisations — fundraising, constituent management, program delivery. Source: https://www.solvingdynamics365.com/guides/microsoft-cloud-for-nonprofit Section: Foundations / Industry clouds Published: 2026-05-01 **Microsoft Cloud for Nonprofit** is the nonprofit-focused industry cloud — combining Dynamics 365, Microsoft 365, Power Platform, and Azure capabilities for charities, NGOs, foundations, faith-based organisations, and other mission-driven entities. Microsoft offers significant nonprofit pricing; the industry cloud accelerates beyond just discounted licences. **What's included.** - Nonprofit-specific data model (Common Data Model for Nonprofits). - Fundraising templates. - Constituent management. - Volunteer management. - Program management. - Grant management. - Microsoft 365 productivity tools. - Power Platform components. - Donation processing accelerators. Tailored for nonprofit context. **Common nonprofit scenarios.** - **Constituent (donor) management** — relationships across time. - **Fundraising** — donations, campaigns, appeals. - **Grant management** — receiving, tracking, reporting. - **Program delivery** — services to beneficiaries. - **Volunteer engagement.** - **Event management.** - **Compliance and reporting.** ## Constituent vs customer Nonprofit terminology: - "Customer" in commercial = "Constituent" in nonprofit. - Donor, member, volunteer, beneficiary, partner are constituent types. - Unified profile across all roles. A single person may be donor, volunteer, board member; unified profile captures this. **Fundraising capability.** - **Donor segmentation.** - **Campaign management.** - **Donation processing.** - **Recurring giving.** - **Major donor management.** - **Planned giving** — bequests, endowments. Each fundraising channel has its workflow; pre-built templates accelerate. **Donation processing.** - Online donations via Power Pages portal. - Stripe / PayPal / specialty processor integration. - Recurring donation management. - Tax receipt generation. Integration with payment processors; nonprofit-specific extensions available. **Tax receipts and acknowledgments.** - Country-specific tax receipt formats. - Automated generation post-donation. - Annual statements. - Acknowledgment letters. Compliance and donor appreciation; pre-built templates exist. **Major donor management.** - High-value donor relationships. - Wealth screening. - Moves management (cultivation stages). - Solicitation tracking. Sales-like pipeline approach for major donor fundraising. **Grant management.** - **Grants received** — foundations, government, corporate. - **Application tracking.** - **Reporting requirements** per grant. - **Compliance with restrictions.** Many nonprofits depend on grants; structured management essential. **Volunteer management.** - Volunteer recruitment. - Skills and availability tracking. - Opportunity matching. - Hours tracking. - Recognition. For volunteer-driven organisations, the volunteer base is a key resource. **Program delivery.** - Beneficiary tracking. - Service delivery records. - Outcome measurement. - Impact reporting. For social service nonprofits, program tracking is operational core. **Event management.** - Fundraising galas, walks, conferences. - Registration. - Ticketing. - Sponsorship tracking. - Volunteer for events. Events often significant revenue; structured management beats spreadsheets. **Reporting requirements.** - **990 (US)** — annual nonprofit return. - **Country-specific** filings. - **Grant reports** to funders. - **Board reports.** - **Donor reports.** Reporting from operational data; structured data model supports. ## Microsoft nonprofit pricing Significant: - Heavy discounts on most Microsoft products. - Some products free for eligible nonprofits. - Apply via Microsoft Nonprofit pricing program. Makes Microsoft cloud accessible to budget-constrained nonprofits. **Eligible organisations.** - Registered nonprofits (501(c)(3) in US, equivalent elsewhere). - Mission criteria. - Verification process. Not all nonprofits qualify; verification required. **Customer Insights for donor 360.** - Unified donor view across channels. - Predicted lifetime giving. - Engagement scoring. - Lapsed donor identification. For nonprofits with multiple donor touchpoints, unification is competitive necessity (against Salesforce.org and Blackbaud). **Marketing for nonprofits.** - Donor cultivation journeys. - Annual giving campaigns. - Lapsed donor re-engagement. - Volunteer recruitment. Customer Insights — Journeys orchestrates; nonprofit-specific templates accelerate. **Comparison with nonprofit-specific platforms.** - **Blackbaud** — long-standing nonprofit platform. - **Salesforce.org / Salesforce Nonprofit Cloud.** - **Bloomerang, DonorPerfect** — smaller-scale. Microsoft is competitive; choice depends on existing tech footprint and feature priorities. **Common partner solutions.** - Nonprofit-specialised Dynamics partners. - Integration accelerators for fundraising platforms. - Specialty extensions for sub-sectors (faith, education, arts). For meaningful nonprofit adoption, partner specialisation matters. **Cost considerations.** - Nonprofit pricing makes Microsoft accessible. - Implementation still costs; partner fees apply. - Internal labour to learn and operate. Total cost lower than commercial pricing but not zero. **Common pitfalls.** - **No data discipline.** Donor data scattered, duplicated. - **No fundraising strategy.** Tools without strategy = no impact. - **Compliance overlooked.** Tax receipts late or wrong; donor frustration. - **Volunteer management informal.** Volunteer hours lost; impossible to measure impact. - **No reporting on impact.** Funder relationships weaken. **Operational rhythm.** - **Daily** — donor engagement. - **Weekly** — fundraising pipeline review. - **Monthly** — financial reporting. - **Quarterly** — board reporting. - **Annual** — major reports, audits. ## Strategic positioning Microsoft Cloud for Nonprofit is a viable, affordable choice for nonprofits adopting modern cloud. The combination of nonprofit pricing + comprehensive functionality + Microsoft ecosystem integration makes it compelling. For nonprofit decision-makers: - Evaluate alongside Blackbaud / Salesforce options. - Consider Microsoft pricing benefit. - Partner with nonprofit-experienced firms. - Plan for capacity to operate the platform. - Invest in data quality and engagement strategy beyond just technology. Technology alone doesn't drive fundraising or program success; strategy and discipline do. Microsoft Cloud for Nonprofit provides the platform; the nonprofit must provide the mission focus and operational excellence. --- # Microsoft Cloud for Retail How Microsoft Cloud for Retail layers retail-specific capabilities on Dynamics 365 Commerce — customer 360, intelligent fulfilment, store operations. Source: https://www.solvingdynamics365.com/guides/microsoft-cloud-for-retail Section: Foundations / Industry clouds Published: 2026-05-01 **Microsoft Cloud for Retail** bundles Dynamics 365 Commerce, Customer Insights, Power Platform, and Azure components into a retail-specific industry cloud. For retailers adopting Microsoft cloud, it accelerates implementation while embedding retail-specific patterns and integrations. **What's included.** - Pre-built retail data model. - Customer 360 templates. - Intelligent inventory and fulfilment scenarios. - Store operations capabilities. - Supplier relationship templates. - Loyalty integration. - Industry-specific Copilot. - Connectors to common retail systems. Tailored for retail context. **Retail scenarios covered.** - **Customer 360** — unified view across channels. - **Personalised marketing** — Customer Insights — Journeys. - **Intelligent fulfilment** — multi-warehouse, multi-channel. - **Store operations** — D365 Commerce stores. - **Supplier collaboration.** - **Returns and reverse logistics.** ## The Commerce core Dynamics 365 Commerce is the centrepiece: - POS for stores. - E-commerce capability. - Call centre channel. - Loyalty. - Channel data management (covered in [[retail-channel-data-management]]). **Customer 360 in retail.** - All purchases across channels. - Loyalty status and points. - Service interactions. - Marketing engagement. - Returns history. - Predicted lifetime value. Customer Insights — Data unifies; surfaces in Commerce and other touchpoints. **Intelligent fulfilment.** - **Distributed Order Management (DOM)** capability. - Order routed to best fulfilment location. - Considers inventory, distance, cost. - Cross-channel — ship from store, ship to store, in-store pickup. For omnichannel retailers, intelligent fulfilment is competitive necessity. **Personalisation.** - **Behavioural data** — browse, cart, purchase. - **Demographics.** - **Lifecycle stage.** - **Real-time recommendations** at checkout. Customer Insights drives; surfaces via Commerce and external touchpoints. **Store operations.** - **POS modernisation.** - **Mobile clienteling** — store staff apps. - **Inventory visibility** to associates. - **Customer profile lookup** at register. - **Endless aisle** — out-of-stock-but-shipped from elsewhere. Modern retail stores rely on technology; D365 Commerce + clienteling apps support. **Clienteling apps.** - Built on Power Apps typically. - Store associate carries tablet. - Looks up customer profile. - Personalised greeting and offers. - Sales assistance. For high-touch retail (apparel, home, luxury), clienteling enhances experience. ## Loyalty integration As covered in [[retail-loyalty-program-deep-dive]]: - Multi-tier programs. - Points across channels. - Personalised rewards. - Cross-program redemptions. **Supplier relationships.** - Supplier portal (Power Pages). - Supplier performance tracking. - Forecasting collaboration. - Returns processing. Two-way supplier interaction; reduces email exchange. **Returns management.** - Customer-initiated via portal. - Reason capture. - Return-to-source decisions (origin warehouse or alternative). - Refund / exchange processing. - Reverse logistics tracking. For high-return categories (apparel), returns are operational core. **Analytics integration.** - Sales performance by channel, by category, by SKU. - Customer cohort analysis. - Inventory turn analytics. - Marketing ROI. Fabric Link + Customer Insights + Power BI for retail analytics. **Integration with marketplaces.** - Amazon, eBay, Walmart, etc. - Listing sync. - Inventory sync. - Order receipt. Marketplace integration is common requirement; connectors and partner extensions fill gaps. **Microsoft Fabric for retail data.** - Retail data into Fabric. - Analytical workloads. - ML model training. - Personalisation engine. Modern retail data architecture is Fabric-centric. **AI in retail.** - Demand forecasting. - Pricing optimisation. - Customer churn prediction. - Product recommendation. - Inventory optimisation. Many use cases; D365 Commerce + Customer Insights + custom ML. **Compliance for retail.** - **PCI-DSS** — credit card handling. - **GDPR** — personal data. - **Local tax compliance** — multi-region. - **Consumer protection** — varies by country. Industry cloud handles common patterns; country-specific overlays remain. ## Microsoft FastTrack for Retail For larger retailers, Microsoft engineers support. **Common partner solutions.** - Retail-specialised partners. - Industry-specific ISV apps (assortment planning, store labour, etc.). For deep retail capability, partner ecosystem essential. **Limitations.** - **Specialty retail systems** (assortment, allocation, planning) often separate. - **Buying systems** — typically separate. - **Manufacturing for private label** — F&O. - **Highly specialised retail subsectors** may exceed industry cloud. The industry cloud is broad; not deep in every sub-discipline. **Common pitfalls.** - **Underestimating store complexity.** Stores have specific workflows. - **Channel data inconsistency.** Sync issues lead to bad customer experience. - **No personalisation discipline.** Customer 360 unused; mass marketing. - **Returns chaos.** No clear workflow; customer frustration. - **Inventory accuracy gaps.** Endless aisle fails when inventory wrong. **Operational rhythm.** - **Daily store ops.** - **Continuous online ops.** - **Weekly merchandising.** - **Monthly customer analytics.** - **Seasonal planning.** ## Strategic positioning Microsoft Cloud for Retail provides a comprehensive starting point for modern retailers. For organisations on Microsoft cloud (or considering), the industry cloud accelerates while preserving flexibility for retail-specific customisation. For retail decision-makers: - Adopt industry cloud as foundation. - Partner with retail-experienced firms. - Plan integrations to specialty retail systems. - Invest in customer 360 and analytics. - Treat as multi-year capability build. The investment is substantial; modern retail demands modern technology. Done well, Microsoft Cloud for Retail produces a unified retail experience that competes with retail-native platforms. --- # Microsoft Cloud for Sustainability How Microsoft Cloud for Sustainability serves ESG initiatives across industries — emission tracking, supply chain sustainability, reporting compliance. Source: https://www.solvingdynamics365.com/guides/microsoft-cloud-for-sustainability Section: Foundations / Industry clouds Published: 2026-05-01 **Microsoft Cloud for Sustainability** is the cross-industry sustainability platform built on Dataverse — supporting carbon accounting, ESG reporting, and sustainability operations. Distinct from industry-specific clouds, it serves any organisation with sustainability initiatives. Combined with Dynamics 365, it provides operational data foundation for sustainability programmes. **What's included.** - **Microsoft Sustainability Manager** — the central application. - **Pre-built data model** for emissions, water, waste. - **Calculation engine** with emission factors. - **Reporting templates** aligned to frameworks (GHG Protocol, TCFD, CSRD). - **Data connectors** to common operational systems. - **Power Platform extensibility.** **The sustainability challenge.** - Increasing regulatory demands (CSRD, SEC, etc.). - Stakeholder expectations. - Investor scrutiny. - Customer requirements. - Internal commitments (net zero, science-based targets). Sustainability is no longer optional for large organisations. **Carbon accounting foundation.** - **Scope 1** — direct emissions. - **Scope 2** — purchased energy. - **Scope 3** — value chain. GHG Protocol standard; almost all reporting aligns. **Emission calculation.** - **Activity data** — raw measurements (kWh, gallons). - **Emission factor** — per unit emissions. - **Calculation** — activity × factor. - **Aggregation** — by entity, region, time. Industry-standard methodology built into the platform. **Data sources for emissions.** - **Energy invoices / utility bills.** - **Fleet fuel data.** - **Travel data.** - **Procurement data** — Scope 3 from purchased goods. - **Production volume data.** - **Logistics data.** - **Employee commuting data.** Each data type has connectors or import paths. **Integration with Dynamics 365.** - **F&O** — procurement data feeds Scope 3. - **F&O** — fleet management data. - **Field Service** — service vehicle emissions. - **HR** — employee count, commuting. Cross-Dynamics data flows into Sustainability Manager. **Reporting frameworks supported.** - **GHG Protocol** — global standard. - **TCFD** — climate financial disclosures. - **CDP** — Carbon Disclosure Project. - **CSRD** — EU corporate sustainability reporting. - **SEC** — US climate disclosures. - **Science-Based Targets** — alignment. The platform produces aligned data; final reports prepared by sustainability teams. **Targets and progress.** - **Net zero commitments** by date. - **Interim targets.** - **Reduction trajectories.** - **Comparison to baseline.** Targets configured; system tracks progress. **Beyond emissions.** - **Water** — withdrawal, consumption, discharge. - **Waste** — generation, recycling, diversion. - **Biodiversity** — emerging area. - **Social** — diversity, pay equity, training. Expansion beyond pure carbon to broader ESG. **Supplier engagement.** - **Supplier emission requests.** - **Supplier sustainability scoring.** - **Scope 3 from purchased goods** — supplier-specific factors better than industry averages. - **Collaboration on reductions.** Scope 3 often largest emissions; supplier data is the unlock. **Industry verticalisation.** - **Manufacturing** — production emissions deep tracking. - **Real estate** — building energy and water. - **Transportation** — fuel and logistics. - **Financial services** — financed emissions (Scope 3 category 15). - **Retail** — supply chain heavy. Common patterns per industry. **Assurance and audit.** - **Data lineage** — track to source. - **Calculation transparency.** - **Audit trail** — changes to data, factors. - **External assurance** support. For reporting taken seriously, third-party assurance is standard. **Data quality.** - **Primary data** — direct measurement (better). - **Activity-based** — calculated from operations. - **Spend-based** — derived from financial spending (lowest quality but easiest). Data quality improves over time; start with what's available. **ESG strategy beyond reporting.** - **Operational improvement** — reduce emissions actually. - **Supplier programmes** — engage value chain. - **Investment** — green capital deployment. - **Product innovation** — sustainable products. - **Risk management** — climate scenarios. The reporting drives strategy; strategy drives reporting accuracy. **Cross-product integration.** - **Microsoft Sustainability Manager** + **Dynamics 365** + **Microsoft Fabric** + **Microsoft 365 Copilot for Sustainability**. - Coordinated data foundation. Microsoft positions integrated stack vs point solutions. **Compliance trajectories.** - **CSRD** in EU — mandatory from 2024+ phased. - **SEC climate rules** — pending US. - **Country-specific** rules globally. Regulations are tightening; preparedness matters. **Common partner solutions.** - **Sustainability-specialised consultancies.** - **Industry-specific sustainability partners.** - **Audit firms** — for assurance. Specialised expertise valuable. **Comparison with specialty platforms.** - **Persefoni, Watershed, Sphera** — purpose-built ESG. - **Microsoft Cloud for Sustainability** — integrated with broader Microsoft cloud. For organisations on Microsoft, the integration depth matters. For ESG-first organisations, specialised platforms may have deeper specific features. Often both. **Common pitfalls.** - **ESG reporting as compliance theatre.** Numbers reported; no operational change. - **Data quality ignored.** Reports look good but defensibility questionable. - **Scope 3 underestimated.** Hardest scope often the largest. - **No strategic linkage.** ESG separate from business strategy. - **Manual processes.** Spreadsheets behind the dashboard. **Operational rhythm.** - **Monthly** — data ingestion and review. - **Quarterly** — progress against targets. - **Annual** — formal reporting. - **Ongoing** — supplier engagement. ## Strategic positioning Microsoft Cloud for Sustainability is Microsoft's commitment to ESG as a discipline that integrates with broader enterprise data and operations. For organisations on Microsoft cloud, it's the natural sustainability platform. For decision-makers: - Treat ESG strategically, not just compliance. - Invest in data quality. - Connect sustainability to operations. - Partner with experienced sustainability consultants. - Use Microsoft Sustainability Manager as foundation; supplement where needed. The investment is meaningful; the regulatory direction is clear. Mature organisations are building sustainability capability now; laggards will pay catch-up costs later. Microsoft Cloud for Sustainability provides a credible pathway for the journey. --- # Microsoft Fabric and Dynamics 365 How Microsoft Fabric and OneLake change Dynamics 365 analytics — Synapse Link, lakehouses, and the migration from Export to Data Lake. Source: https://www.solvingdynamics365.com/guides/microsoft-fabric-and-dynamics-365 Section: Integrations / Azure services Published: 2026-05-01 **Microsoft Fabric** is Microsoft's unified analytics platform — a single SaaS product covering lakehouse, data warehouse, real-time analytics, data science, and Power BI on top of a shared storage layer called **OneLake**. For Dynamics 365 customers, Fabric is becoming the destination for analytics that need cross-system data, large historical volumes, or complex transformations beyond what Power BI's own model can handle. ## Synapse Link for Dataverse A managed near-real-time pipe from Dataverse into a Fabric lakehouse (or, historically, a customer-owned Azure Data Lake). When enabled per environment, Dataverse continuously writes Delta-Parquet snapshots of selected tables to OneLake. Downstream Fabric workloads — notebooks, SQL endpoints, Power BI semantic models — read from OneLake without touching Dataverse. ## Synapse Link for F&O The equivalent for Finance and Supply Chain. Data entities or specific tables stream into OneLake. Replaces the older **Export to Data Lake** feature in F&O and the **Bring Your Own Database (BYOD)** pattern, both of which Microsoft is deprecating. ## Business Central data lake export Business Central also publishes its data into Fabric via a similar mechanism (still evolving as a generally-available feature). The end state is a single OneLake estate containing CRM (Dataverse), F&O, and BC tables side by side, queryable as one logical data set. ## DirectLake A new Power BI mode that reads parquet directly from OneLake without import or DirectQuery. Performance close to import, no refresh schedules. The right pattern for most Dynamics 365 reporting at scale. **Use cases.** - **Cross-system reports.** Sales pipeline (Dataverse) joined to finance actuals (F&O) joined to web analytics (Adobe Analytics) — all in one Fabric lakehouse, with one semantic model in Power BI. - **History beyond the source.** Dataverse and F&O retain data per their own retention policies; OneLake retention is independent and cheap. - **Data science.** Train ML models against the lakehouse rather than hitting the live ERP. - **Real-time analytics.** Stream from operational events into Fabric's KQL database for dashboards. ## Operational reality Fabric capacity is sized in F-SKUs (or Power BI Premium capacity). Plan capacity for the actual workload — peak Power BI users, lakehouse compute, semantic model size. Capacity oversubscription is the most common Fabric pain point. ## Governance **Microsoft Purview** integrates with Fabric for cataloguing, classification, and lineage. Use it from day one if compliance matters. ## Where it stops Highly specialised analytics (statistical forecasting, complex MDX cubes, certain GIS workloads) sometimes still need a separate purpose-built platform. For mainstream BI and data integration on Dynamics 365, Fabric is now the recommended home. ## Where to go next The feeds into Fabric each have a guide: [Synapse Link for Dataverse](https://www.solvingdynamics365.com/guides/azure-synapse-link-for-dataverse), [Fabric Link for Dataverse](https://www.solvingdynamics365.com/guides/integrating-dataverse-with-microsoft-fabric-link), and [data lake export for Finance](https://www.solvingdynamics365.com/guides/data-lake-export-for-dynamics-365-finance). On top sits [Power BI for Dynamics 365](https://www.solvingdynamics365.com/guides/power-bi-for-dynamics-365). Where a lakehouse ends and a customer data platform begins is [CDP vs data warehouse](https://www.solvingdynamics365.com/guides/customer-data-platform-vs-data-warehouse). --- # Microsoft Graph and Dataverse How Microsoft Graph connects Microsoft 365 data to Dynamics 365 — Graph connectors, indexing Dataverse content, and the Copilot enablement story. Source: https://www.solvingdynamics365.com/guides/microsoft-graph-and-dataverse Section: Integrations / API & identity Published: 2026-05-01 **Microsoft Graph** is the API surface that exposes data and intelligence across Microsoft 365 — users, groups, calendars, mail, files, Teams chats, meeting recordings, and increasingly external data via **Graph connectors**. For Dynamics 365 customers, Graph is the bridge that brings Dataverse content into the broader Microsoft 365 experience — most importantly, into **Microsoft 365 Copilot**. ## The Graph data model Microsoft Graph organises Microsoft 365 data under a unified API: - **Users** — identity, profile, roles. - **Mail, calendar, contacts** — Exchange Online data. - **Files** — OneDrive and SharePoint documents. - **Teams** — chats, channels, meetings, recordings. - **Tasks** — To-Do and Planner. - **Insights** — relationships derived across data (who works with whom, what's trending). - **Search** — unified search index across the above. ## Graph connectors External data — including Dataverse — can be indexed into Microsoft Graph via **Graph connectors**. The connector pulls data on a schedule, transforms it into Graph-indexable format, and pushes it into the search index. Once indexed: - The data appears in Microsoft Search (the search box across Microsoft 365 apps). - Copilot can ground its responses on the indexed content. - The data is available across all Microsoft 365 surfaces — Outlook, Word, Teams, the Copilot pane. ## Dataverse-to-Graph indexing Microsoft ships a **Dataverse connector for Graph** that indexes selected Dataverse tables into the Graph index. Configuration: - Pick which tables to index. - Pick which columns to include. - Configure schedule (typically daily or hourly). - Set the result-display format — title, summary, URL, icon. Once configured, the indexed Dataverse content surfaces in: - **Microsoft Search results** — when a user searches in Microsoft 365, indexed Dataverse records appear alongside emails, files, Teams chats. - **Copilot grounding** — Copilot considers indexed Dataverse content when answering questions like "what's the latest on Customer X?". - **Office app surfacing** — references to indexed Dataverse records can appear in document drafting, email composition, meeting prep. ## Why this matters for Dynamics 365 Without Graph indexing, Dataverse data lives in its own silo — accessible through Dynamics 365 apps, but invisible to a user working in Outlook, Word, or asking Copilot a general question. With Graph indexing, the customer record / opportunity / case is part of the user's broader Microsoft 365 knowledge surface. **Use cases.** - **Outlook composition** — drafting an email to a customer, Copilot pulls in recent CRM activity from the Graph-indexed Dataverse content. - **Document drafting** — writing a proposal in Word, Copilot suggests content from indexed opportunity records. - **Meeting prep** — Copilot summarises what's happening with a customer ahead of a meeting, drawing on indexed Dataverse records. - **Cross-system search** — a user searches "Contoso Q3 contract" and gets the email thread, the Word doc, the OneDrive folder, and the Dataverse opportunity all in one search result. ## Beyond Dataverse — F&O and Business Central Graph connectors exist (or are planned) for indexing F&O and Business Central data too. The end state is unified Microsoft 365 search and Copilot grounding across all Dynamics 365 products. ## Security Graph indexing respects the source system's security: - Users only see indexed Dataverse content they have permission for in Dataverse. - The connector pushes data trimmed to public-or-shared records; per-user filtering happens at search-time. This is critical for sensitive data: indexing into Graph doesn't expose data to users who shouldn't see it in the source system. ## Compliance Indexed data flows through Microsoft 365 services and is subject to: - **Data residency** — Graph index resides in the tenant's region. - **Retention policies** — Microsoft Purview can apply retention to indexed content. - **Compliance certifications** — same as Microsoft 365. ## Beyond search and Copilot Microsoft Graph also exposes APIs that Dynamics 365 itself uses: - **Email tracking** through Exchange Online — server-side sync between Dataverse and Exchange uses Graph APIs. - **Calendar integration** — meeting invitations to/from Dataverse contacts. - **Teams integration** — surfacing Dataverse records in Teams via Graph-based shared experiences. **Common pitfalls.** - **Indexing too much** — indexing every Dataverse table without filtering produces noise in search results. Index curated tables and columns. - **Stale index** — connectors that haven't refreshed in days produce out-of-date search results. Monitor. - **Wrong indexing configuration** — wrong title field or wrong URL pattern makes results unusable. ## Operational reality Graph integration is increasingly the strategic direction. Configure it for at least your major Dataverse tables; the user experience improvement compounds. --- # Microsoft Graph API with Business Central How Business Central exposes data through Microsoft Graph — the new unified API surface, what's available, authentication. Source: https://www.solvingdynamics365.com/guides/graph-api-with-business-central Section: Integrations / API & identity Published: 2026-05-01 For years, Business Central had its own dedicated OData API at `api.businesscentral.dynamics.com`. With Microsoft's investment in **Microsoft Graph** as the unified API surface across Microsoft 365 and Dynamics 365, BC is being progressively surfaced through Graph too. Understanding what's where — and when to use Graph vs BC's native APIs — matters for any cross-product integration design. ## Microsoft Graph overview A single API endpoint (`graph.microsoft.com`) exposing: - M365 data — users, mail, calendar, files, Teams. - Dynamics 365 data — customers, leads, opportunities. - Security and compliance. - Identity (Entra ID). - Increasingly: Business Central data. Graph's value is unification — one auth model, one query syntax, one SDK across many sources. ## BC in Microsoft Graph As of 2026, Graph exposes a growing subset of BC entities: - Customers. - Vendors. - Items. - Sales orders. - Purchase orders. - Invoices. The list expands; check current Graph documentation for what's GA vs beta vs preview. ## BC's native APIs Continue to exist: - **Standard API v2.0** at `api.businesscentral.dynamics.com/v2.0/...` — comprehensive coverage. - **Custom APIs** — partner-defined endpoints. - **Web services** — older SOAP-style. The native API is more complete than Graph for BC; Graph is more universal across Microsoft products. **When Graph wins for BC.** - **Cross-product integrations** — pulling BC + M365 + Dynamics 365 data in one app. - **App ecosystem** — many apps already use Graph for M365. - **Unified auth** — single token covers many resources. - **Modern SDK** — Microsoft Graph SDKs in many languages. **When native API wins for BC.** - **Complete BC coverage** — niche entities not in Graph. - **Performance** — direct API is sometimes faster. - **Specific BC behaviour** — bound actions specific to BC. - **Established integrations** — already built on native API. **Authentication.** - **Graph** — Microsoft Entra ID OAuth 2.0. App registrations grant `BusinessCentral.ReadWrite.All` and other scopes. - **Native** — also Entra ID OAuth; same patterns. Both surfaces require app registration; Graph's permission scopes are less granular than BC's native API (which has per-environment, per-company scoping). ## Query patterns Graph endpoints follow standard Graph conventions: ``` GET https://graph.microsoft.com/v1.0/financials/companies/{id}/customers ``` OData filtering, paging, expand all work as with M365 endpoints. The mental model: Graph is OData with Microsoft conventions; if you know Graph for M365, BC in Graph feels familiar. **Common scenarios.** - **Pull BC customer + their M365 contact info** — single Graph app. - **Surface BC invoices in Outlook** — Outlook add-in queries Graph. - **Aggregate BC + Sales data in a custom app** — Graph for both. - **Power Automate flow touching BC and SharePoint** — Graph connectors for both. ## Webhooks via Graph Graph supports change notifications: - Subscribe to BC entity changes. - Notifications POSTed to your endpoint. - Up to 4230 minutes (3 days) expiration; renewable. Graph webhooks are simpler than BC's native webhook setup but cover fewer entity types currently. ## Rate limiting Graph and BC both have throttling: - **Graph** — generous; throttle messages with `Retry-After` header. - **BC native** — environment-level limits; expect 429 responses on heavy load. Apps must respect throttle headers and back off. ## Coverage map Microsoft publishes documentation listing which BC entities are in Graph (status: GA / preview / beta) and which are only in native. Before designing an integration, verify the entity you need is in Graph at your chosen status level. **Versioning.** - **Graph v1.0** — stable, GA endpoints. - **Graph beta** — preview endpoints; may change. For production, prefer v1.0; beta for experimentation and feature requests. **Common pitfalls.** - **Assuming Graph has everything.** Niche BC features missing from Graph; the integration breaks when it hits them. - **Mixing Graph and native.** Two APIs in one integration; ambiguity about which to use when; complexity. - **Permission scope confusion.** Graph permissions vs BC permissions; admin grants Graph but not the underlying BC access. - **Webhook configuration drift.** Webhook expires; not renewed; events missed. - **Beta in production.** Beta endpoints change without notice; integrations break. - **Latency assumptions.** Cross-product queries through Graph can be slower than direct BC API; budget for it. ## Strategic positioning Microsoft's investment is in Graph as the unified surface. Over time, more BC functionality will appear there; new development should default to Graph for cross-product scenarios. Native BC APIs remain the right choice for BC-only deep integrations. Most production integrations end up using both — Graph for cross-product, native for BC-specific operations. Designing the integration to be agnostic to the API surface (with a thin wrapping layer in code) preserves flexibility as Microsoft's API strategy evolves. ## Operational guidance For new integrations: check Graph first; use native only when Graph doesn't cover the need. For existing integrations on native: don't migrate just for the sake of it; migrate when you're touching the code for other reasons or when Graph adds compelling new capabilities. --- # Microsoft Graph connectors for Dynamics 365 How Graph connectors index Dynamics 365 and Business Central data into Microsoft Search and Microsoft 365 Copilot — what they're for, how they work. Source: https://www.solvingdynamics365.com/guides/microsoft-graph-connectors-for-dynamics-365 Section: Integrations / API & identity Published: 2026-08-31 There's a gap between where Dynamics 365 data lives and where people spend their day. A salesperson working in Outlook and Teams doesn't want to open the CRM to check whether an account has open cases; a project manager writing a status report in Word wants last month's work orders findable without switching apps. A **Graph connector** closes that gap: it indexes content from an external system — Dataverse tables, Business Central records, or anything else — into the Microsoft Graph index, where it becomes searchable through Microsoft Search and, more importantly now, groundable by Microsoft 365 Copilot. That last part is why a feature that spent years as a search-admin curiosity suddenly matters. When M365 Copilot answers "what do we know about Contoso?", it can only draw on what's in its grounding reach — mail, files, Teams, and whatever Graph connectors have indexed. Without a connector, your CRM is invisible to the Copilot your organisation is paying for. ## How a Graph connector works The model is index-and-refresh, not live query: 1. **A connection is configured per source** — which environment, which tables, which columns — in the Microsoft 365 admin center (or programmatically via the Graph API for custom connectors). 2. **The connector crawls on a schedule**, with full crawls establishing the corpus and incremental crawls picking up changes. This is a copy of searchable text and metadata into the tenant's Graph index — not a federation layer. 3. **Each indexed item carries an access control list** mapped from the source system, and Microsoft Search trims results per user at query time. Someone who can't see a record in Dynamics doesn't see it in search results or Copilot answers — provided the ACL mapping is configured honestly rather than set to "everyone" to make testing easier. That shortcut has a way of becoming permanent. 4. **Results surface** in Microsoft Search (Office.com, SharePoint, Bing work search), in Copilot responses with citations, and in context-aware experiences like Context IQ. Microsoft ships gallery connectors for Dynamics 365 CRM tables and Business Central, alongside connectors for the systems you're likely consolidating search across anyway — Salesforce, ServiceNow, Jira, Confluence, file shares. For anything bespoke (a legacy ERP, a custom Dataverse-adjacent system), the Graph connectors API lets you build your own; it's a well-documented push API, and a custom connector is a realistic few-days build for an integration developer, not a platform project. ## Connector or agent? The decision that actually matters Graph connectors are one of two ways to put Dynamics data in front of Copilot, and picking wrong wastes months. The connector pattern suits **discovery**: static-ish, text-heavy content that people search for and Copilot should cite — account summaries, case histories, knowledge articles, product records. Its weaknesses are freshness (data is as current as the last crawl) and interactivity (an index answers "what exists?", never "create a follow-up task"). For **transactional** questions — live opportunity values, stock levels, "update the close date" — you want an agent or plugin built in Copilot Studio that calls Dataverse or the Business Central APIs at question time. The trade-offs run the other way: always-live data, real actions, but per-question latency and a build to maintain. Most organisations doing this seriously end up with both: a Graph connector making the corpus findable, and an agent handling the live operations. The split is covered from the agent side in [Copilot agents vs Copilot Studio](https://www.solvingdynamics365.com/guides/copilot-agents-vs-copilot-studio) and [Microsoft 365 Copilot for Dynamics 365](https://www.solvingdynamics365.com/guides/microsoft-365-copilot-for-dynamics-365). ## Practical notes before you switch one on - **Index selectively.** The instinct to index every table is wrong twice: index quota is finite (tenants get a capped item allowance, with more granted via M365 Copilot licensing), and irrelevant records dilute search relevance. Accounts, cases, and knowledge articles earn their place; forty million ledger entry rows do not. - **Choose columns for humans.** The connector indexes what you map. A record that surfaces in Copilot as a bare name with no description or owner is technically indexed and practically useless — map the columns that make a result self-explanatory. - **Plan the refresh cadence against expectations.** If sales expects this morning's notes in this afternoon's Copilot answer, an overnight incremental crawl will read as "broken". Set the schedule, then set expectations to match. - **Test security trimming with real users**, not admin accounts. Admin accounts see everything; the interesting failures are field workers seeing records their Dynamics security role would have hidden. - **Mind the licensing seam.** Graph connectors and Microsoft Search are Microsoft 365 features; the Dynamics side only controls what the connector may read. Quota and entitlement questions land with the M365 admin, which makes this one of the genuinely cross-team features — budget a conversation, not just a configuration. For the underlying plumbing — what the Graph API can do against Dataverse directly, beyond search — see [Microsoft Graph and Dataverse](https://www.solvingdynamics365.com/guides/microsoft-graph-and-dataverse), and for the Business Central flavour of the same story, [the Graph API with Business Central](https://www.solvingdynamics365.com/guides/graph-api-with-business-central). --- # Microsoft Sustainability Manager and Dynamics 365 How Microsoft Sustainability Manager captures emissions and ESG data on Dataverse — connectors, calculations, reporting, and integration with Dynamics 365. Source: https://www.solvingdynamics365.com/guides/sustainability-manager-for-dynamics-365 Section: Foundations / Industry clouds Published: 2026-05-01 Carbon accounting and ESG reporting have moved from nice-to-have to compliance requirement for many organisations. **Microsoft Sustainability Manager** is Microsoft's solution — built on Dataverse, accessing data from across the Microsoft cloud (including Dynamics 365) and external systems. It's not part of Dynamics 365 directly but shares the platform foundation and integrates closely. **What Sustainability Manager does.** - **Data ingestion** — from Microsoft and external sources. - **Activity tracking** — emission-generating activities (electricity use, fuel consumption, business travel, materials). - **Emission calculations** — applying emission factors to activities. - **Scope categorisation** — Scope 1, 2, 3. - **Reporting** — sustainability KPIs and compliance reports. - **Targets and progress** — track against reduction commitments. The underlying data model is on Dataverse; the same patterns developers know. **Emission scopes.** - **Scope 1** — direct emissions from owned/controlled sources (company vehicles, on-site fuel combustion). - **Scope 2** — indirect emissions from purchased electricity, heat, cooling. - **Scope 3** — indirect emissions across the value chain (suppliers, business travel, employee commuting, product end-of-life, etc.). Scope 3 is hardest to measure and often the largest share of total emissions. **Data sources.** - **Microsoft 365 telemetry** — building energy data via Microsoft cloud. - **Dynamics 365 Finance** — financial transactions tagged by category. - **Dynamics 365 Supply Chain** — procurement, logistics, manufacturing energy. - **IoT sensors** — direct measurement of energy, water, emissions. - **Excel uploads** — for data not in connected systems. - **Custom connectors** — for industry-specific systems. ## Connectors Sustainability Manager includes pre-built connectors: - Microsoft Azure (cloud usage emissions). - Microsoft 365. - Dynamics 365. - Common third-party energy and travel platforms. For external systems without connectors, file-based ingestion or custom Dataflow. **Calculation engine.** - **Activity data** — raw measurements (kWh, gallons, miles). - **Emission factor** — kgCO2e per unit of activity. - **Emission calculation** — activity × factor = emissions. - **Aggregation** — by site, region, business unit, time. Emission factors come from authoritative sources (EPA, IEA, country-specific bodies); pre-loaded by Microsoft and updateable. ## Allocation rules When activities don't directly map to entities: - **Building energy** allocated to departments by floor area. - **Fleet emissions** allocated to business units by usage. - **Cloud emissions** allocated to projects by consumption. Allocation logic configurable; results flow to reporting. **Reporting.** - **GHG Protocol** alignment — the industry-standard framework. - **TCFD (Task Force on Climate-related Financial Disclosures)** — disclosure framework. - **CDP (Carbon Disclosure Project)** — annual reporting. - **CSRD (Corporate Sustainability Reporting Directive)** — EU mandatory. - **CSDDD (Corporate Sustainability Due Diligence Directive)** — EU value chain. - **SEC climate disclosures** — US (where in force). Each has specific requirements; Sustainability Manager produces aligned data. **Targets.** - **Science-Based Targets** initiative — set targets aligned with climate science. - **Net Zero** commitments. - **Interim targets** — annual reductions. Targets configured in the system; progress tracked. **Beyond emissions.** - **Water usage** — withdrawal, consumption, discharge. - **Waste** — generation, recycling, diversion. - **Biodiversity** — emerging area. - **Social metrics** — pay equity, diversity, training (partially in scope). The product expands beyond pure carbon to broader sustainability metrics. **Integration with Dynamics 365 specifics.** - **Procurement (F&O)** — supplier emissions linked to purchases. - **Logistics (F&O)** — shipment emissions calculated. - **Field Service (CE)** — technician travel emissions. - **Customer Engagement** — customer-facing sustainability commitments. For F&O customers, Sustainability Manager extracts financial and operational data automatically; less manual data wrangling. **Audit and assurance.** - **Data lineage** — track where each data point came from. - **Calculation transparency** — recalculate from raw activity data. - **Audit trail** — changes to data, factors, calculations. - **External assurance** — auditors review for ESG reports. Assurance-ready data structures matter as regulatory reporting becomes mandatory. **Common pitfalls.** - **Scope 3 underestimated.** Effort to collect supplier-level data large; many organisations punt initially. - **Data quality.** Old, inconsistent activity data; emissions imprecise. - **Allocation rules contested.** "Why is my department's emission this high?" — be transparent about allocations. - **Reporting bottlenecks.** Annual report scramble; data not gathered through the year. - **Targets without operational change.** Targets set; no operational changes; targets missed. - **Connectors expectations.** Out-of-box covers some; many sources still need custom ingestion. **Operational rhythm.** - **Monthly data ingestion** — activities captured. - **Quarterly review** — progress vs targets. - **Annual reporting** — formal disclosure. - **Continuous improvement** — emission reduction projects identified and prioritised. ## Strategic positioning Sustainability Manager is Microsoft's bet on ESG as a discipline that integrates with enterprise data. For organisations on Dynamics 365 / Microsoft cloud already, it's a natural extension; the data already lives in Dataverse-adjacent systems. Alternatives: - **Specialty ESG platforms** (Persefoni, Watershed, Sphera) — purpose-built; sometimes deeper. - **Generic reporting via Excel and Power BI** — for small organisations. - **Industry-specific platforms** — for industries with unique factors (mining, oil and gas). Sustainability Manager wins for breadth and integration; specialty platforms win for depth and certain industries. Choose based on: - Existing Microsoft footprint. - Reporting requirements (CSRD, CDP, etc.). - Internal data maturity. - Team capability. For most mid-market and enterprise on Microsoft stack, Sustainability Manager is a credible default. The investment scales with reporting requirements; the payback is compliance and operational insight into emissions hotspots. --- # Microsoft Teams integration patterns with Dynamics 365 How Dynamics 365 integrates with Microsoft Teams — collaboration on records, embedded apps, adaptive cards, Copilot, and meeting recording flows. Source: https://www.solvingdynamics365.com/guides/microsoft-teams-integration-patterns-with-dynamics-365 Section: Integrations / Data movement Published: 2026-05-01 Microsoft Teams is increasingly where business work happens — meetings, chat, file collaboration, decisions. Dynamics 365 has invested heavily in Teams integration over the past several releases so the work that touches CRM and ERP can stay in the Teams flow. The integration patterns are varied; choosing the right one per use case matters. ## Pattern 1: Share-to-Teams of CRM records From any Dynamics 365 record (account, opportunity, case, customer in Business Central, work order in Field Service), the user can **share to a Teams chat or channel**. The record renders in Teams as an **adaptive card** with key fields and a deep link back to Dynamics 365. The most common pattern; works out of the box. ## Pattern 2: Embedded model-driven apps in Teams Any Dynamics 365 model-driven app (Sales, Customer Service, Field Service) can be **added as a Teams app**, where the entire CRM experience appears as a tab inside a Teams channel or in the user's left navigation. Sellers can browse opportunities, update accounts, and respond to cases without leaving Teams. ## Pattern 3: Linked Teams collaboration on records A Dynamics 365 record (typically Account or Opportunity) can have a **linked Teams team or channel**. Conversations in the linked channel surface on the record's timeline; documents in the channel's file library link automatically to the record. Used for deal teams where many people collaborate on one opportunity. ## Pattern 4: Meetings with CRM context Adding a CRM contact as a meeting participant pulls in **meeting insights**: who they are, recent activity, open opportunities, open cases. Real-time during the meeting, Copilot summarises decisions; post-meeting, the recording can be saved to the related opportunity or account automatically. ## Pattern 5: Adaptive card actions from CRM Power Automate flows triggered by Dataverse can post **adaptive cards** to Teams chats or channels, with buttons for users to take action — approve a discount, accept a deal handoff, decline a service request. The action posts back to Dataverse or runs a follow-up flow. Used heavily for approvals and notifications. ## Pattern 6: Business Central in Teams Business Central has its own Teams app for SMB scenarios — share a customer/vendor/item card, look up records from Teams compose, run a quick action. Useful for organisations that live primarily in Teams. ## Pattern 7: Copilot agents in Teams **Copilot Studio agents** with Dynamics 365 knowledge sources and actions publish to Teams as chat-style agents. Users converse with the agent — "what's the status of opportunity X?", "open a case for customer Y" — and the agent reads/writes Dynamics 365 via the configured actions. ## Pattern 8: Teams calls integrated to CRM Dynamics 365 Omnichannel for Customer Service handles voice via Azure Communication Services; Teams calls (consumer-grade calls between Teams users and Dynamics 365 agents) integrate to surface CRM context, record the call, and post a summary. **Choosing.** - **Casual sharing of records** — built-in share-to-Teams. - **Heavy CRM use in Teams** — model-driven app added as Teams tab. - **Deal-team or case-team collaboration** — linked Teams team. - **Meetings with customers in CRM** — meeting integration. - **Approval workflow notifications** — adaptive card actions via Power Automate. - **Conversational interaction with CRM** — Copilot Studio agent. ## Governance Tenant-wide policies (Teams app permission policies, DLP) govern what Dynamics 365 components can run in Teams. ## Operational reality The Teams story for Dynamics 365 has been evolving across releases; document the integration choices and revisit them at each wave for new capabilities and deprecations. --- # Migrating from NAV on-premise to Business Central SaaS Moving from Dynamics NAV on-premise to Business Central SaaS — the cloud migration tool, AL code rebuild, and the operational changes that come with it. Source: https://www.solvingdynamics365.com/guides/migrating-from-nav-on-premise-to-bc-saas Section: Migrations Published: 2026-05-01 A large installed base of Dynamics NAV customers — running NAV 2013 through NAV 2018 on their own infrastructure — is steadily moving to Business Central SaaS. Microsoft has invested heavily in this path because every NAV-to-BC migration consolidates a customer into the modern, managed cloud where Microsoft prefers them. Tooling has improved substantially over the past few years. ## The official path Microsoft ships the **Cloud Migration tool** for NAV → Business Central SaaS. It: - Connects to the on-premise NAV database via an installed extension. - Maps NAV tables to BC tables, including standard application data and customer customisations. - Replicates the data into a BC SaaS tenant. - Supports an iterative model: re-run the migration, refining over time until the BC tenant is good to cut over to. Supported NAV versions are NAV 2015 and later; earlier versions need an intermediate upgrade. ## The two big challenges Data is the lesser of the two. The bigger ones are: 1. **Customisations in C/AL must be rebuilt as AL extensions.** NAV's customisation model — direct modification of Microsoft's base objects in C/AL — doesn't exist in BC SaaS. Every customisation, however small, must be rewritten as an AL extension. For lightly-customised customers (a few dozen modifications) this is a few months of work. For heavily-customised customers (thousands of modifications), it's a year or more — and an opportunity to rationalise. 2. **Operational habits change.** On-premise NAV ran on the customer's own SQL Server, with full DBA access, server-side jobs, and the ability to modify anything. BC SaaS runs in Microsoft's cloud, with no SQL access, mandatory release waves, API-only integration, and constrained extensibility. Customers used to direct database access must adapt to standard APIs and AL extensibility. **Strategic options.** - **Lift and shift.** Migrate data and rebuild customisations as exact AL replicas. Fastest path but carries forward bloat. - **Fit-to-standard.** Use the migration to re-evaluate every customisation against modern standard BC. Many turn out to be unnecessary (BC has caught up with what custom code used to do). Slower migration but cleaner long-term position. - **Hybrid.** Critical-path customisations get rebuilt; nice-to-haves get re-evaluated and often dropped. Most successful migrations are hybrid. ## Integration rebuild NAV integrations were typically built with **C/AL web services**, **NAS services**, or **third-party middleware**. BC SaaS exposes only the v2.0 REST API and custom AL API pages. Most integrations rebuild; in many cases simpler than before. ## Reporting rebuild NAV's classic RDLC reports and Excel layouts mostly survive in BC SaaS, but C/AL-based report customisations need re-implementation in AL. ## Customer expectations Set them up front. On the day of cutover, the BC SaaS tenant has fewer features than the old NAV (everything that wasn't ported) and a different operating cadence (release waves). This is the cost of getting to a maintained, modern, managed system; communicate it clearly. ## Time to live 6 to 18 months depending on customisation depth. The migration tool moves the data in days; the rebuild is the project. ## Where to go next The context for the move is [Business Central vs Dynamics NAV](https://www.solvingdynamics365.com/guides/business-central-vs-dynamics-nav), and the choice you are also making is [on-premises vs SaaS](https://www.solvingdynamics365.com/guides/business-central-onprem-vs-saas). Rebuilding customisations starts with [writing your first AL extension](https://www.solvingdynamics365.com/guides/writing-your-first-al-extension) and replacing many of them with [ISV add-ons](https://www.solvingdynamics365.com/guides/common-business-central-isv-addons); the data side is [Business Central data migration](https://www.solvingdynamics365.com/guides/business-central-data-migration). ### Frequently asked questions **Which NAV versions can use the cloud migration tool?** NAV 2015 and later. Earlier versions need an intermediate upgrade first. The tool connects to the on-premises database, maps NAV tables to Business Central, replicates iteratively, and lets you re-run until the SaaS tenant is ready for cutover. **What happens to C/AL customisations?** They must be rewritten as AL extensions — there is no direct modification of base objects in Business Central online. A lightly customised NAV takes a few months; thousands of modifications take a year or more and are an opportunity to rationalise. **What operational habits change after the move?** No SQL access, mandatory release waves, API-only integration, and constrained extensibility. Teams used to direct database access and server-side jobs must adapt to standard APIs and AL. **How long does a NAV to Business Central migration take?** Six to eighteen months depending on customisation depth. The tool moves data in days; rebuilding customisations, integrations, and report logic is the project. --- # Migrating from NetSuite to Business Central Moving from NetSuite to Business Central — the data and customisation challenges, the cost angle, and what to expect from the project. Source: https://www.solvingdynamics365.com/guides/migrating-from-netsuite-to-business-central Section: Migrations Published: 2026-05-01 NetSuite-to-Business-Central migrations are not as common as QuickBooks or SAP B1 migrations, but they do happen — typically driven by cost (NetSuite per-user pricing scales aggressively), by Microsoft 365 integration preferences, or by partner ecosystem in specific countries. The migration is doable but not trivial; both products are real ERPs and the data and customisation footprints are usually substantial. ## Why customers consider it Common triggers: - **Total cost of ownership.** NetSuite list pricing tends to escalate as user count and module footprint grow. Business Central licence costs are usually meaningfully lower for the same headcount. - **Microsoft 365 alignment.** Customers heavily invested in Microsoft 365 (Teams, SharePoint, Power BI) often find BC's tighter integration more productive than NetSuite's connectors. - **Partner ecosystem.** In some markets (DACH, Nordics, parts of Asia), the Microsoft partner base is broader and more accessible than the NetSuite consulting base. ## Why customers stay on NetSuite Equally common: deep customisation already in place, industry-specific NetSuite modules (SuiteCommerce, advanced revenue management) without direct BC equivalents, or established global multi-entity consolidations. ## Data migration NetSuite exports cleanly via its **SuiteAnalytics** API or **Saved Searches** exports. Standard approach: 1. Inventory the NetSuite data model — standard objects, custom records, custom fields. 2. Map to BC equivalents — chart of accounts, dimensions (NetSuite *classes*, *departments*, *locations* map to BC dimensions), items, customers, vendors. 3. Pull data via the API, transform with Azure Data Factory or Power Query, load to BC via Configuration Packages or REST API. Open transactions, balances, and the master data migrate; historical detail typically stays in NetSuite read-only. ## Customisation NetSuite customisations live in SuiteScript (JavaScript), SuiteFlow, and SuiteBuilder. None of this ports directly. The rebuild path: - Standard fields and forms → BC's table extensions and page extensions in AL. - SuiteFlow workflows → BC's built-in workflows or Power Automate flows. - SuiteScript business logic → AL codeunits with event subscribers. - SuiteAnalytics reports → Power BI. - SuiteCommerce e-commerce → typically Shopify, Sana, or a custom Power Pages + headless front end. Many customisations turn out to be workarounds for NetSuite features BC implements differently — re-do the fit-gap honestly before committing to rebuild. ## Multi-entity and consolidations NetSuite OneWorld is strong at multi-subsidiary consolidations. BC's multi-company is real but less feature-rich. Customers running 20+ legal entities with complex consolidations should evaluate whether **Dynamics 365 Finance** is the right step rather than BC. For 5–15 entities with moderate complexity, BC is usually sufficient. ## Integration rebuild NetSuite's connector library is wide; BC's is wide too but the specific connectors differ. Audit every NetSuite integration and budget the rebuild. ## Time to live Substantial. Typical NetSuite-to-BC migrations are 6 to 18 months for a mid-sized customer, dominated by configuration, customisation rebuild, and parallel running. ## Where to go next The decision itself is [Business Central vs NetSuite](https://www.solvingdynamics365.com/guides/business-central-vs-netsuite); running both during the move is [integrating with NetSuite during migration](https://www.solvingdynamics365.com/guides/integrating-dynamics-365-with-netsuite-during-migration). Design the target with [dimensions design](https://www.solvingdynamics365.com/guides/business-central-dimensions-design) and [multi-company setup](https://www.solvingdynamics365.com/guides/business-central-multi-company-setup) — and if the entity count is high, read [growing from Business Central to Finance and SCM](https://www.solvingdynamics365.com/guides/growing-from-business-central-to-finance-and-scm) before committing. ### Frequently asked questions **Why do companies move from NetSuite to Business Central?** Total cost of ownership as NetSuite per-user pricing escalates, tighter Microsoft 365 integration, and broader Microsoft partner coverage in markets such as DACH, the Nordics, and parts of Asia. Companies with deep SuiteScript customisation or SuiteCommerce dependencies often stay. **How does NetSuite data map to Business Central?** Classes, departments, and locations become Business Central dimensions; the chart of accounts, items, customers, and vendors map directly. Data comes out through SuiteAnalytics or saved searches, is transformed in Data Factory or Power Query, and loads through configuration packages or the REST API. Historical detail usually stays in NetSuite read-only. **What happens to SuiteScript and SuiteFlow customisations?** Nothing ports. SuiteScript logic becomes AL codeunits with event subscribers, SuiteFlow becomes BC workflows or Power Automate, SuiteAnalytics reports become Power BI, and SuiteCommerce is typically replaced by Shopify, Sana, or a headless front end. **Is Business Central the right target for a large NetSuite OneWorld group?** For 5–15 entities with moderate consolidation complexity, yes. For 20+ legal entities with complex consolidations, evaluate Dynamics 365 Finance instead. --- # Migrating from QuickBooks to Business Central Moving from QuickBooks to Business Central — the data migration wizard, scope decisions, parallel running, and the gotchas that catch people out. Source: https://www.solvingdynamics365.com/guides/migrating-from-quickbooks-to-business-central Section: Migrations Published: 2026-05-01 QuickBooks-to-Business-Central is one of the most common Dynamics 365 migration paths — typical of SMBs that have outgrown QuickBooks Online or QuickBooks Desktop and need real ERP capability. Microsoft ships a **first-party data migration wizard** for the QuickBooks Online source specifically, which lowers the technical bar substantially. ## Why customers move Common triggers: multi-entity needs (QB struggles past a handful), inventory complexity beyond QB's modest inventory module, multi-currency at scale, integration burden between QB and other systems, advanced reporting that QB can't deliver, and the desire to consolidate to Microsoft 365 + ERP under one vendor. ## The migration wizard From Business Central, the **Data Migration** assisted setup includes a QuickBooks Online connector that: - Reads QuickBooks data via the Intuit API. - Maps the chart of accounts (with manual review for the inevitable mismatches). - Migrates customers, vendors, items, employees, and bank accounts. - Brings opening balances at a chosen cut-off date. - Optionally brings transactional history (open invoices, open bills, open POs). The wizard handles the mechanical translation; the customer handles the strategic decisions. **Scope decisions.** - **Cut-off date.** Most projects pick a fiscal period boundary (month-end, quarter-end, year-end). Year-end gives the cleanest start; mid-year is feasible but requires more reconciliation. - **Historical detail.** Trial balance only? Open transactions? Full historical detail? The wizard can pull full detail but the labour to validate and reconcile rises sharply with depth. Most projects migrate balances + open transactions, leaving full detail in QuickBooks (read-only) for reference. - **Chart of accounts.** Business Central's chart of accounts is more structured than QuickBooks' and supports dimensions. Use the migration as an opportunity to clean up — but don't conflate cleanup and migration; cleanse in QuickBooks first, then migrate the clean version. ## Inventory caveat QuickBooks inventory is famously light; many customers carry inventory inaccuracies for years. Don't migrate the inventory state until it's been physically counted and reconciled. Going live with wrong inventory is a one-way ticket to chaos. ## Parallel running vs hard cut SMB customers typically do a **hard cut** at month-end — stop QuickBooks postings, run the migration, start Business Central. Parallel running (both systems live simultaneously) is rarely practical at SMB scale; the team can't absorb double the work. ## Time to live A focused QB→BC migration runs 8 to 16 weeks for a small SMB, including configuration, testing, and training. Bigger or more complex businesses run longer. ## After migration QuickBooks stays available read-only for at least a year for historical inquiries, audit, and tax filing. Eventually it can be decommissioned with the data archived. ## The pitfall to avoid Don't treat this as a like-for-like swap. Business Central's strengths (dimensions, multi-entity, real inventory, posting controls) are different from QuickBooks's strengths. Configure to take advantage of BC, not to mimic QuickBooks. ## Where to go next Whether to move at all is [Business Central vs QuickBooks](https://www.solvingdynamics365.com/guides/business-central-vs-quickbooks); what it costs is on the [pricing page](https://www.solvingdynamics365.com/pricing/business-central). The design decisions that make the new system better than the old one are [dimensions design](https://www.solvingdynamics365.com/guides/business-central-dimensions-design) and [costing methods](https://www.solvingdynamics365.com/guides/business-central-costing-methods-compared); the mechanics are [Business Central data migration](https://www.solvingdynamics365.com/guides/business-central-data-migration). ### Frequently asked questions **Is there a built-in QuickBooks migration tool?** Yes. Business Central's Data Migration assisted setup includes a QuickBooks Online connector that reads data through the Intuit API and migrates the chart of accounts, customers, vendors, items, employees, bank accounts, opening balances, and optionally open transactions. **How much history should I migrate?** Most projects migrate balances plus open transactions at a fiscal period boundary and keep QuickBooks read-only for a year for historical inquiries, audit, and tax. Full historical detail is possible but the reconciliation labour rises sharply. **What should I fix before migrating?** Clean the chart of accounts in QuickBooks first — do not conflate cleanup with migration — and physically count and reconcile inventory before moving it. Going live with wrong inventory is a one-way ticket to chaos. **How long does a QuickBooks to Business Central project take?** Eight to sixteen weeks for a small SMB including configuration, testing, and training, usually with a hard cut at month-end rather than parallel running. --- # Migrating from SAP Business One to Business Central Moving from SAP Business One to Business Central — the practical mapping, data migration approach, and the choices that decide the project's complexity. Source: https://www.solvingdynamics365.com/guides/migrating-from-sap-business-one-to-business-central Section: Migrations Published: 2026-05-01 SAP Business One (B1) and Business Central compete for the same SMB ERP slot. Migrations between them go in both directions, but the more common direction in markets where Microsoft has strong partner coverage is **B1 → Business Central** — often driven by total-cost-of-ownership, Microsoft 365 integration, or partner preference. ## The functional fit SAP B1 and BC overlap heavily in scope: financials, sales, purchasing, inventory, light manufacturing, basic CRM, service management. Country localizations exist on both. The data models are different in detail (B1's posting model, item structure, and dimension equivalents diverge from BC's), but the conceptual mapping is straightforward. **Migration strategy.** - **Cut-off date.** Year-end is cleanest; quarter-end is feasible. Mid-year requires careful opening-balance handling. - **History.** Typically migrate balances + open transactions; leave detailed history in B1 read-only. - **Tools.** Unlike QuickBooks, BC does not ship a first-party B1 migration wizard. The standard approach is: - Export B1 data to CSV/Excel using B1's standard export tools or direct SQL queries against the HANA or SQL Server database. - Cleanse and transform offline. - Import to BC via Configuration Packages or the REST API. - Several ISVs publish dedicated B1-to-BC migration accelerators that automate the bulk of this. **Mapping concerns.** - **Chart of accounts.** B1's account structure and posting groups differ from BC's. Most projects redesign the chart of accounts using the migration as the catalyst. - **Dimensions.** B1 has dimension-like *cost centres* and *profit centres*; BC's dimensions are richer. Map deliberately — don't carry forward B1's structure unchanged. - **Items.** B1 has detailed item attributes (configurable), BOMs, prices, and tracking. BC's item card has different but largely equivalent functionality. Variants, attributes, and tracking need explicit mapping. - **Sales and purchasing documents.** Both products use a quote → order → delivery → invoice flow with similar mechanics. Open documents migrate as open BC documents with quantities and amounts preserved. - **Banking.** B1's bank module is more sophisticated in some countries; BC's bank reconciliation has caught up and now includes AI matching. ## Customisation rebuild B1 customisations are usually built in **SAP B1 SDK / SQL queries / formatted searches** — not portable to BC. Re-build them as **AL extensions** in BC. Many B1 customisations turn out to be unnecessary in BC once standard features are properly used; do the fit-gap honestly before committing to rebuild. ## Reporting B1 reports built in Crystal Reports won't run in BC. Replace with Power BI for analytical reporting and Word layouts for document reports. ## The change-management challenge B1 users are accustomed to a specific UI and a particular vocabulary. BC's terminology and workflow are similar but not identical. Plan training that explicitly addresses the differences, not generic BC training. ## Time to live A typical B1-to-BC migration is 4 to 9 months including configuration, integration rebuild, and testing. ## Where to go next The wider SAP-versus-Microsoft picture is [Dynamics 365 vs SAP](https://www.solvingdynamics365.com/guides/dynamics-365-vs-sap). Design the target with [dimensions design](https://www.solvingdynamics365.com/guides/business-central-dimensions-design), migrate with [Business Central data migration](https://www.solvingdynamics365.com/guides/business-central-data-migration), rebuild Crystal Reports with [document layouts and report design](https://www.solvingdynamics365.com/guides/document-layouts-and-report-design-in-business-central), and plan the difference-focused training with [training strategies](https://www.solvingdynamics365.com/guides/training-strategies-for-dynamics-365-rollouts). ### Frequently asked questions **Is there a Microsoft migration wizard for SAP Business One?** No. Unlike QuickBooks, Business Central ships no first-party B1 connector. The standard approach exports from B1 to CSV or via SQL against HANA or SQL Server, cleanses offline, and imports through configuration packages or the REST API; several ISVs sell B1-to-BC accelerators. **How do B1 cost centres and profit centres map?** To Business Central dimensions, which are richer. Redesign the dimension structure deliberately rather than carrying B1's forward unchanged, and most projects also redesign the chart of accounts. **What happens to B1 customisations and reports?** SDK code, SQL queries, and formatted searches do not port and are rebuilt as AL extensions where still needed. Crystal Reports are replaced by Power BI for analytics and Word layouts for documents. **How long does a B1 to Business Central migration take?** Four to nine months including configuration, integration rebuild, and testing, with training that explicitly addresses vocabulary and workflow differences. --- # Modern POS in Dynamics 365 Commerce How Modern POS works in Dynamics 365 Commerce — channel architecture, offline mode, peripherals, and the differences from Cloud POS. Source: https://www.solvingdynamics365.com/guides/modern-pos-in-dynamics-365-commerce Section: Finance & SCM / Retail & commerce Published: 2026-05-01 For retailers running Dynamics 365 Commerce, the in-store cash register is **Modern POS (MPOS)** — a Windows-based point-of-sale application that runs on store-level tills, handheld devices, and tablets, with full offline capability when connectivity drops. Understanding its architecture is essential for any retail implementation. ## The architecture Modern POS is a Universal Windows Platform app installed on Windows PCs, tablets, or handhelds. Each store runs a **Retail Server** (in-store or cloud-hosted) that proxies between MPOS and the head-office Commerce environment. The flow: ``` MPOS → Retail Server → Head Office (Commerce / F&O) ``` When the head office is unreachable, MPOS continues operating against the **store database** — a local SQLite copy synced from head office that holds the current product catalogue, prices, promotions, customer data, and inventory. ## Offline mode This is the differentiator. When the connection to the Retail Server drops: - The till keeps ringing sales against the local database. - Transactions queue locally for upload. - Customer lookups, loyalty checks, and most operations work locally. - Some operations (payment via online gateways, complex price overrides requiring approval) may pause. When connectivity returns, queued transactions sync up to head office, and any pending downloads (new prices, new products, new customers) sync down. The pattern survives spotty connectivity, brief network outages, and even multi-day disruptions without losing transactions. ## Channel data exchange A scheduled service called **Commerce Data Exchange (CDX)** synchronises data between head office and stores in both directions: - **Down to store**: product catalogue, prices, promotions, customers, gift cards. - **Up from store**: transactions, inventory adjustments, time clock entries, customer registrations. CDX runs on a configurable schedule per store; high-volume stores run more frequently. ## Peripherals Modern POS speaks to a wide range of retail hardware through the **Hardware Station** — a separate service running on the till that manages: - Receipt printers. - Barcode scanners. - Cash drawers. - Customer-facing displays. - Payment terminals (chip-and-PIN, contactless, NFC). - Scales (for weight-based goods). - Magnetic stripe readers. - Signature capture pads. Hardware drivers are certified per device; the device-and-driver catalogue is published by Microsoft and the hardware OEMs. ## Functions The cashier experience covers: - **Transactions** — scan or look up items, apply discounts (rule-based or manual with override approval), accept payment (any tender configured), produce receipt. - **Returns** — with-receipt return (lookup posted transaction), no-receipt return (with manager override). - **Customer lookup and creation** — at the till; ties transactions to loyalty. - **Gift cards** — issue, top up, redeem. - **Loyalty** — earn and redeem points inline. - **Order from store** — create a sales order for items not in store; ship from another location or central warehouse. - **Pickup at store** — fulfil online orders. - **Cash management** — opening float, mid-shift counts, end-of-shift closeout, deposits. - **Time clock** — staff clock in / out, with hours flowing to payroll. - **Reporting** — basic in-store reports for managers. ## Cloud POS A parallel browser-based POS — **Cloud POS** — runs the same functionality in a web browser, suitable for tablets and lighter-weight terminals without the Windows installation overhead. Cloud POS has fewer offline capabilities (depends on internet for most operations). ## Store Commerce app A newer iteration of the in-store experience, designed for modern Android and iOS-friendly hardware, with an updated UI and clienteling features. Microsoft is investing in Store Commerce as the strategic direction; Modern POS remains supported but new builds increasingly start with Store Commerce. ## Operational reality Retail POS implementations are unforgiving — the till is the most-watched part of any retail operation. Pilot in one store before rolling out; train cashiers extensively; test offline scenarios deliberately before go-live. --- # Monitoring and observability for Dynamics 365 How to monitor Dynamics 365 across the platform — Application Insights, Azure Monitor, Service Health, and the dashboard discipline that prevents surprises. Source: https://www.solvingdynamics365.com/guides/monitoring-and-observability-for-dynamics-365 Section: Foundations Published: 2026-05-01 A Dynamics 365 environment without monitoring is opaque — slow pages, failed integrations, and broken flows go unnoticed until users complain. Modern Dynamics 365 emits substantial telemetry; collecting and acting on it is one of the highest-leverage operations investments a customer can make. **The telemetry surfaces.** - **Application Insights** — the primary telemetry destination for Business Central, Power Platform, F&O, custom plug-ins, and custom code. Configurable per environment. - **Microsoft 365 Service Health** — Microsoft's own service-status feed showing outages and degradations across M365 / Dynamics 365 services. - **Power Platform admin centre analytics** — Dataverse capacity, API call usage, flow runs, app usage. - **Azure Monitor** — for Azure resources behind Dynamics 365 (Service Bus queues, Functions, Logic Apps in the integration stack). - **Microsoft Purview** — audit and compliance retention. Each captures different signals; a complete observability programme aggregates from all of them. **Application Insights setup.** For Business Central: configure the **Application Insights connection string** on the tenant in the BC admin centre. All BC telemetry (page loads, API calls, errors, slow queries, lock timeouts, environment lifecycle events, extension lifecycle events) flows to the configured workspace. For Power Platform / Dataverse: Application Insights integration captures Dataverse operations, plug-in execution, Power Automate flow execution, and Power Apps telemetry. Configure per environment. For F&O: telemetry flows through LCS and increasingly through dedicated Application Insights workspaces. **What to monitor.** - **Performance** — page load times, API response times, slow queries, slow flow runs. - **Errors** — exception rates, error events, plug-in failures, flow failures. - **Capacity** — Dataverse storage trends, API call volumes, AI Builder credits. - **Integrations** — webhook delivery success, Service Bus queue depths, dead-letter queue arrivals. - **Security** — sign-in failures, conditional-access denials, privileged-role usage. - **Custom telemetry** — your own AL / X++ / plug-in code emitting business-meaningful events. ## KQL — the query language Application Insights uses **Kusto Query Language (KQL)** for querying. Examples: ```kql // Slow page loads in the last 24h customEvents | where timestamp > ago(24h) | where name == "PageLoaded" | where customMeasurements["duration"] > 5000 | summarize count() by tostring(customDimensions.pageName) | order by count_ desc ``` Microsoft publishes the **BCTech** GitHub repo with canned queries for common Business Central questions; equivalent libraries exist for other Dynamics 365 products. ## Workbooks and dashboards Application Insights **workbooks** turn KQL queries into shareable dashboards. Microsoft publishes pre-built workbooks for each Dynamics 365 product: - Business Central health workbook — performance, errors, telemetry insights. - Power Platform admin workbook — environment health, flow performance. - F&O telemetry workbook — service-update events, batch performance. Customers customise these for their specific needs. ## Alerts Application Insights alerts fire on configurable thresholds: - Error rate above N% in 5-minute window. - API call volume approaching tenant quota. - Specific exception strings. - Dataverse storage approaching cap. - Failed flows over a threshold. Alerts route to **Action Groups** — email, Teams, SMS, webhook to PagerDuty / ServiceNow. Configure them before you need them. ## Service Health alerts Subscribe to Microsoft 365 Service Health notifications for the customer's services. Tenant admins get alerted when Microsoft reports an issue. ## The operational dashboard A useful tenant has at least one daily-glance dashboard covering: - Total errors and trend. - Slow operations. - Flow / integration failures. - Capacity headroom. - Service Health open incidents. 10 minutes of dashboard review per morning catches most issues before users complain. ## Operational reality Monitoring isn't an after-go-live add-on. Configure telemetry on day one of any environment provisioning; build dashboards before users start; iterate based on what surprises you. --- # Month-end close in Business Central A practical month-end close checklist for Business Central — reconciliations, accruals, depreciation, inventory cost adjustment, and locking the period. Source: https://www.solvingdynamics365.com/guides/business-central-month-end-close Section: Business Central / Finance & accounting Published: 2026-05-01 Updated: 2026-08-31 A clean month-end close in Business Central is mostly process discipline supported by a handful of routines. The system isn't trying to be clever — it gives finance the order to run things in. ## Run it from a checklist with names on it The single biggest close improvement has nothing to do with software: a written close calendar where every task below has an owner, a working-day deadline (D+1, D+2…), and a dependency order. Inventory cost adjustment before inventory reconciliation; FX revaluation before the sub-ledger reconciliations; everything before the period locks. Companies that close in three days and companies that close in twelve run the same BC routines — the difference is whether the sequence lives in a checklist or in one controller's head. Keep the checklist in whatever tool the team already uses; the point is that "the close" is a repeatable production run, not a monthly improvisation. ## Cut-off and accruals Set the *Posting Date* limits in the **General Ledger Setup** so that no one back-dates into the closed period. Post recurring accruals (rent, utilities, payroll, deferred revenue) from the **Recurring General Journal**, which can be templated and reused each period. ## AP and AR reconciliation Reconcile *Detailed Vendor Ledger Entries* and *Detailed Customer Ledger Entries* totals to the GL control account balances. Differences usually trace to direct postings to AP/AR control accounts (which the system blocks by default, but can be allowed); investigate and correct via the *Reconcile Customer/Vendor Accounts* report. ## Bank reconciliation Reconcile every active bank account to its bank statement balance. Post fees, interest, and direct debits from the reconciliation page. Carry forward any in-transit items. ## FX revaluation Run *Adjust Exchange Rates* for foreign currency customer, vendor, and bank balances. This produces unrealized gain/loss entries reflecting period-end rates. ## Inventory cost adjustment Run **Adjust Cost — Item Entries** for all items. This flushes landed cost from inbound transactions into outbound cost of goods sold, and corrects any mid-period cost reversals. Then run **Post Inventory Cost to G/L** to propagate the cost into the GL. Inventory in the GL should match the *Inventory Valuation* report to the penny. ## Fixed asset depreciation Run **Calculate Depreciation** for the period; review and post the resulting FA journal. ## Sub-ledger reconciliations Inventory, fixed assets, jobs (WIP), VAT — each has a control account in the GL that should match the underlying sub-ledger totals. The relevant reconciliation reports are *Inventory G/L Reconciliation*, *FA G/L Reconciliation*, and *Job WIP G/L Reconciliation*. ## VAT settlement Run **Calc. and Post VAT Settlement** to close the VAT entries into a payable/receivable balance, then post the payment to the tax authority. ## Lock the period Move the *Allow Posting From* date forward so the closed period is read-only. Some companies also set per-user posting date ranges. ## Reporting the close Build the month-end reporting pack once as [financial reports (account schedules)](https://www.solvingdynamics365.com/guides/business-central-account-schedules-and-financial-reports) — P&L versus budget, balance sheet, and the handful of KPIs management actually reads — and the reporting step becomes running saved reports rather than assembling spreadsheets. If the pack is still built by exporting trial balances to Excel every month, that's the next thing to fix after the checklist. ## Shortening the close Most of the calendar time in a slow close is waiting and rework, not processing. The levers that actually move the needle: - **Reconcile continuously, not monthly.** With [bank feeds](https://www.solvingdynamics365.com/guides/business-central-bank-reconciliation) importing transactions daily, bank rec at month-end is a five-minute confirmation instead of a half-day archaeology dig. The same applies to posting supplier invoices as they arrive rather than in a month-end batch. - **Template everything recurring.** Accruals, allocations, and standard corrections belong in [recurring journals](https://www.solvingdynamics365.com/guides/recurring-journals-in-business-central) with allocation keys set up once — not rebuilt in Excel each period. - **Run cost adjustment on a schedule.** *Adjust Cost — Item Entries* can run as a nightly job queue entry (or automatically, via the inventory setup toggle) so month-end isn't the first time three weeks of cost corrections land in the GL. - **Chase the same differences once.** If the AP reconciliation finds the same class of direct posting every month, close the hole — restrict direct posting on the control accounts — rather than re-finding it forever. A recurring reconciliation difference is a setup bug wearing a process costume. ## Year-end At year-end, run **Close Income Statement** to roll P&L to retained earnings, then process the *Closing Date* posting and lock the year. The full year-end sequence — including dimension handling on the closing entries and reopening adjustments — is covered in [closing the income statement and year-end in BC](https://www.solvingdynamics365.com/guides/closing-income-statement-and-year-end-in-bc). For where the close sits in the wider finance setup, see the [Business Central finance module](https://www.solvingdynamics365.com/guides/business-central-finance-module). ### Frequently asked questions **What is the correct order for Business Central month-end routines?** Set posting date limits, post recurring accruals, reconcile AP and AR sub-ledgers to control accounts, reconcile bank accounts, run Adjust Exchange Rates, run Adjust Cost – Item Entries then Post Inventory Cost to G/L, calculate depreciation, reconcile inventory, fixed asset, and job WIP control accounts, run the VAT settlement, then lock the period. **Why does Adjust Cost – Item Entries matter at close?** It flushes landed cost from inbound transactions into cost of goods sold and corrects mid-period cost reversals. Without it and Post Inventory Cost to G/L, the general ledger inventory balance does not match the Inventory Valuation report. **How do I lock a closed period?** Move the Allow Posting From date forward in General Ledger Setup so the closed period is read-only; per-user posting date ranges can be set for finer control. **How do fast-closing companies shorten the close?** Reconcile continuously with daily bank feeds, template accruals and allocations as recurring journals, run cost adjustment as a nightly job queue entry, build the reporting pack once as financial reports, and fix recurring reconciliation differences at the setup level rather than re-finding them monthly. --- # MQTT and IoT integration with Dynamics 365 How MQTT protocol fits IoT scenarios for Dynamics 365 — Azure IoT Hub, message routing, and the patterns for getting device telemetry into Dynamics workflows. Source: https://www.solvingdynamics365.com/guides/mqtt-and-iot-with-dynamics-365 Section: Integrations / Eventing & messaging Published: 2026-05-01 IoT devices — sensors on equipment, connected vehicles, smart meters, manufacturing line monitors — speak a different language than enterprise APIs. **MQTT** (Message Queuing Telemetry Transport) is the dominant lightweight protocol for IoT; integrating MQTT-speaking devices with Dynamics 365 requires bridging IoT infrastructure to business systems. **Why MQTT for IoT.** - **Lightweight** — minimal overhead, works on constrained devices. - **Publish-subscribe** — many devices, many subscribers. - **Quality of Service levels** — Fire-and-forget to guaranteed delivery. - **Mature** — widely supported. Most IoT platforms support MQTT. **The integration architecture.** ``` IoT devices → MQTT → Azure IoT Hub → Event processing → Dynamics 365 ``` Each layer has specific responsibility; clean separation. ## Azure IoT Hub Microsoft's MQTT broker: - Accepts MQTT connections from devices. - Per-device authentication. - Message routing. - Cloud-to-device messaging. - Device management. For Microsoft-aligned organisations, IoT Hub is the natural broker. ## Event processing layer Between IoT Hub and Dynamics: - **Stream Analytics** — real-time SQL queries on telemetry. - **Functions** — code-level processing. - **Service Bus / Event Grid** — routing. - **Custom processing pipelines.** Raw telemetry is high-volume; processing reduces / aggregates / filters before reaching Dynamics. **What flows to Dynamics.** - **Alerts** — exceptions worth business attention. - **Aggregated telemetry** — hourly summaries, not raw readings. - **Status changes** — device went offline / online. - **Anomalies** — ML-detected unusual patterns. Dynamics shouldn't see every reading; only business-meaningful events. **Use cases for Dynamics 365 + IoT.** - **Connected Field Service** — equipment alerts trigger work orders. - **Predictive maintenance** — sensor data drives preventive maintenance. - **Customer asset monitoring** — visibility into customer's equipment. - **Manufacturing operations** — line status to F&O. - **Fleet management** — vehicle data for logistics. - **Smart buildings** — facility management. Each has specific architectural patterns. **Device-to-cloud authentication.** - **Per-device certificates** — strongest. - **Symmetric keys** — simpler. - **X.509** — managed via PKI. - **DPS (Device Provisioning Service)** — automatic enrolment. Each device has identity; only authenticated devices accepted. ## Cloud-to-device messaging Bidirectional: - **Device twin** — desired vs reported state. - **Direct methods** — invoke method on device. - **Cloud-to-device messages** — send notifications. For commanding devices from Dynamics (e.g., "shut off this valve"), the path exists. ## Stream Analytics example Aggregate raw temperature readings: ```sql SELECT deviceId, AVG(temperature) AS avgTemp, MAX(temperature) AS maxTemp, System.Timestamp() AS windowEnd INTO output FROM iotHubInput GROUP BY deviceId, TumblingWindow(minute, 5) HAVING AVG(temperature) > threshold ``` Per 5-minute window, devices exceeding threshold → output → triggers business workflow. **Routing to Dynamics.** - **Service Bus → Dataverse plug-in** — message becomes Dataverse event. - **Event Grid → Power Automate** → Dataverse update. - **Custom Function** → direct Dataverse API call. Each pattern has trade-offs in latency, reliability, complexity. **Volume considerations.** - **Industrial IoT** — millions of events per day. - **Pre-filter** — reduce before reaching Dynamics. - **Batch** — aggregate where appropriate. - **Direct database** — for analytics, bypass Dataverse. Dataverse not designed for raw IoT volume; treat carefully. **Data lake for raw telemetry.** - Raw events to lake (ADLS / OneLake). - Aggregations to Dynamics. - Analytics over lake. - Historical investigation in lake. This pattern separates concerns; Dynamics doesn't drown in volume. **Edge processing.** - **Azure IoT Edge** — processing at device level. - **Local analytics.** - **Filtered upload.** For high-volume / low-bandwidth scenarios, edge essential. **Alert design.** - **Threshold-based** — simple, well-understood. - **Anomaly detection** — ML; finds unusual patterns. - **Composite** — multiple conditions. - **Time-based** — sustained vs spike. Right alert design reduces false positives. **False positive management.** - **Tuning thresholds.** - **Aggregation windows.** - **Duration before alert** — sustained vs momentary. - **Acknowledgment / suppression.** Without tuning, alert fatigue. **Device lifecycle.** - **Provisioning** — new device onboarded. - **Active** — operational. - **Maintenance** — temporary downtime. - **Decommissioning** — end of life. Each state in Dynamics as customer asset record. **Security considerations.** - **Device authentication** — per-device credentials. - **Encryption** — TLS for MQTT. - **Compromised device handling** — revocation. - **Data privacy** — personal data implications. IoT extends attack surface; security essential. **Compliance.** - **GDPR** — even device data may be personal. - **Industry regulations** — varies. - **Data residency** — IoT Hub region selection. Plan compliance early; harder to retrofit. **Common pitfalls.** - **Direct device → Dataverse.** Inappropriate volume; Dataverse overwhelmed. - **No filtering.** All telemetry creates events; flood. - **No edge processing.** Heavy bandwidth. - **Insecure devices.** Default credentials; compromise. - **No device management.** Orphan devices accumulate. - **Alerts not actionable.** Fired but business doesn't know what to do. **Operational rhythm.** - **Real-time** — alert processing. - **Daily** — operational metrics review. - **Weekly** — alert tuning. - **Monthly** — device fleet review. - **Per incident** — RCA and improvement. ## Strategic positioning IoT + Dynamics is increasingly a competitive necessity for asset-intensive industries — utilities, manufacturing, transportation, healthcare equipment. The architecture is non-trivial; partner with experienced practitioners. For architects: - Layer the architecture (devices, broker, processing, business systems). - Filter aggressively at each layer. - Plan for scale. - Build observability across the chain. - Address security and compliance from start. The investment is substantial; the operational value of connected equipment compounds over years. Done well, IoT transforms field service, maintenance economics, and customer experience. Done poorly, it produces a torrent of noise with little business benefit. --- # Multi-company setup in Business Central How Business Central handles multiple companies and legal entities — separate databases, shared master data, intercompany, and consolidations. Source: https://www.solvingdynamics365.com/guides/business-central-multi-company-setup Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-31 Business Central is built to run multiple companies inside a single environment. Each company has its own chart of accounts, ledger, posting groups, and configuration, while sharing the same database, users, and (optionally) master data. For groups of five to fifty legal entities of similar shape, the multi-company model is a sweet spot between the simplicity of a single-tenant SMB ERP and the cost of Dynamics 365 Finance. ## What a company is A **company** in Business Central is a self-contained accounting unit — typically a single legal entity. Companies inside one environment can be of completely different shapes (different currencies, fiscal years, dimensions, posting groups) or near-identical (perhaps just a different country localization). ## Company vs environment: the first decision Before creating anything, decide whether the entities belong in one environment as multiple companies or in separate environments. One environment means shared users, shared extensions, one update schedule, and easy intercompany — the right default for a group under common management. Separate environments make sense when entities have genuinely different governance: a subsidiary being groomed for sale, an acquisition still running its own partner and customisations, or data-residency requirements pinning a country's books to a specific Azure region. The trade-off is real: extensions install per environment, so five environments means five deployment targets, five sets of sandbox refreshes, and five update windows. (The mechanics are covered in [Business Central environments](https://www.solvingdynamics365.com/guides/business-central-environments).) A useful heuristic: if the entities will ever consolidate or trade with each other, start in one environment; splitting later is a migration, not a setting. ## Shared and per-company data By default, every table is per-company. A handful of system tables (users, permission sets, profiles, exchange rates, the Object Designer) are shared across the environment. **Master data management** (an out-of-the-box feature) lets you nominate one company as the *source* of items, customers, vendors, etc. and synchronise to subscriber companies, so you don't maintain the same item card in five companies. Decide the master-data ownership question early and in writing: which company owns the item master, whether subscribers may extend records locally, and what happens when a subscriber needs an item the source company doesn't stock. Groups that skip this end up with five diverging item catalogues within a year — the exact problem multi-company was supposed to prevent. The same discipline applies to the chart of accounts and dimension values: identical structures across companies make consolidation and intercompany mapping nearly free, while "each country did its own thing" makes both a permanent mapping-maintenance job. See [dimensions design](https://www.solvingdynamics365.com/guides/business-central-dimensions-design) for how to standardise that layer group-wide. ## Intercompany Two companies linked as *Intercompany Partners* can post intercompany sales and purchase documents that auto-create their counterparty in the other company. **Intercompany journals** push GL entries across companies, and IC payments settle balances. Mapping tables (chart of accounts, dimensions) reconcile differences in account structures. ## Consolidation A dedicated **Consolidation** company aggregates results from multiple subsidiaries. Source companies export their trial balances on a schedule; the consolidation company applies currency translation, eliminations, and adjustments to produce group financials. For very complex consolidations (CPM-grade), customers typically integrate to a third-party tool. ## User access across companies Users see each company they have permission for. Switching is a single click in the company switcher. Permissions can be scoped per company. ## Localizations Each company can run its own country localization, so a single environment can hold a Swedish AB, a Norwegian AS, and a German GmbH each with the right VAT, statutory reporting, and bank file formats. ## Cross-company reporting Statutory reporting is per company, but management wants group views without waiting for a formal consolidation run. The realistic options: the built-in company hub for a light overview, financial reports run per company and combined in Excel, or — the answer most groups land on — Power BI reading all companies through the API, since the standard BC APIs are company-scoped and a report can union them. Build the group P&L in Power BI early; it takes pressure off the consolidation cycle and exposes mapping problems while they're still small. ## Practical setup order For a new group rollout, the sequence that avoids rework: standardise the chart of accounts and dimensions on paper first; build one **template company** with the agreed configuration; copy it per entity (RapidStart configuration packages, or the newer copy-company tooling) and apply each country's localization; wire up master data management from the nominated source company; then set up intercompany partners and mappings last, once account structures are final. Groups that create companies ad hoc and harmonise afterwards pay for it during every close — see [month-end close](https://www.solvingdynamics365.com/guides/business-central-month-end-close) for what that cycle already contains without adding reconciliation of inconsistent structures. ## Licensing Multi-company doesn't change licensing; it's the number of unique *users* across all companies that drives cost. A user who works in three companies is one licence. The one caveat: all full users across all companies in the tenant share the Essentials-or-Premium decision, so a single manufacturing entity in the group puts every full user group-wide on Premium — factor that into the environment-split decision above. Details in [Business Central licensing and pricing](https://www.solvingdynamics365.com/guides/business-central-licensing-and-pricing). --- # Multi-currency strategies in Dynamics 365 How to design multi-currency support across Dynamics 365 — base currency, transaction currency, FX management, and the patterns for global financial operations. Source: https://www.solvingdynamics365.com/guides/dynamics-365-multi-currency-strategies Section: Foundations / Productivity & UX Published: 2026-05-01 Global Dynamics 365 deployments handle transactions in many currencies — sales in EUR, purchases in USD, expenses in JPY, reporting in CAD. Native multi-currency support is comprehensive but requires intentional design: base currency, transaction currency, exchange rate management, revaluation. Done well, multi-currency is invisible to users; done poorly, FX surprises emerge in financial reports. **Currency concepts.** - **Base currency** — the company's reporting currency. Set per Dataverse / F&O entity. - **Transaction currency** — the currency of the specific transaction. - **Exchange rate** — converts between currencies. - **Realised gain/loss** — at settlement. - **Unrealised gain/loss** — at period-end revaluation. These foundations apply across Dynamics products. **Per-environment base currency.** - Set at provisioning. - **Difficult to change** later. - All entities default to base. Choose carefully at deployment; reflect company's reporting currency. **Multiple base currencies?** Often: - **One Dataverse environment** → one base currency. - **Multiple legal entities in F&O** → each has its base currency. - **Consolidation** combines. For multi-LE F&O, different bases per LE is normal. **Transaction currency.** - **Per transaction** — sales order, invoice, etc. - **Defaults from customer/vendor** preferred currency. - **Conversion to base** at exchange rate. - **Both stored** — transaction and base amounts. This dual storage enables reporting in either. **Exchange rate management.** - **Daily rates** typically. - **Manual entry** or **automated feed** (Microsoft service, third-party). - **Date-specific** — rate applies on transaction date. - **Currency pair** rates. For 50+ currencies, automated feed essential. **Rate sources.** - **Microsoft exchange rate service** (limited). - **Open Exchange Rates** — common. - **Treasury / banking** rate feeds — for high-volume FX. - **Specialty providers** (Bloomberg, Reuters) — for sophisticated. Quality of source affects accuracy of revaluation. **Posting in transaction currency.** - AR / AP balances in transaction currency. - Bank balances in account currency. - Each entry has both transaction and base amounts. The two-currency model is fundamental. **Period-end revaluation.** - Open foreign-currency balances revalued. - Difference posted as unrealised gain/loss. - Reversed next period; new revaluation. Covered in [[foreign-currency-revaluation-in-bc]] for BC; F&O similar. **Realised FX.** - At settlement — payment in one currency for invoice in another. - Difference between booking rate and settlement rate. - Posts as realised gain/loss. Different from unrealised; both needed. **Cross-currency settlement.** - Customer pays USD invoice in EUR. - Settlement calculates difference. - Posts to gain/loss accounts. For multi-currency operations, this is daily occurrence. ## Triangulation Some currencies historically triangulated through USD or EUR: - Cross-rate calculation. - Triangulation rounding rules. - Less common modern but still relevant for some. **Hedging.** - Forward contracts to lock in future rates. - Currency options. - Natural hedges (revenue and cost in same currency). Beyond Dynamics's native; treasury management software typically. **Reporting in multiple currencies.** - **Functional reporting currency** — typically the base. - **Group reporting currency** — for consolidation. - **Multiple parallel currencies** in F&O (advanced). Standard reports respect; custom reports must. **Customer Engagement (CE) multi-currency.** - **Currency entity** in Dataverse. - **Exchange rate per currency** to base. - **Transactions** stored in transaction + base. - **Reports** can pivot on either. CRM scenarios with international customers; opportunity in EUR but report in USD. **Power BI multi-currency.** - Conversion logic in DAX. - Multiple reporting currency options. - Historical rate vs current rate decisions. Reports can present per user's preference. **Currency in marketing.** - **Customer's preferred currency** for personalisation. - **Localised pricing** in emails. - **Quote-to-pay** flow respects currency. For B2C in multiple regions, currency localisation matters. **Foreign currency translation for consolidation.** - **Subsidiary in EUR** — translates to parent USD. - **Balance sheet items** at closing rate. - **P&L items** at average rate. - **CTA (Cumulative Translation Adjustment)** in equity. Consolidation translation; covered in [[consolidations-in-f-and-o]]. **Tax considerations.** - Some jurisdictions require local-currency presentation. - VAT / GST in local currency. - Tax filings in country currency. Multi-currency intersects with tax compliance. **Common pitfalls.** - **Wrong base currency at provisioning.** Hard to change. - **Rate feed broken.** Stale rates used; FX wrong. - **Forgotten revaluation.** Balance sheet drifts. - **Cross-currency posting groups missing.** Posting fails. - **Manual rate overrides.** Inconsistent reporting. - **No FX hedging strategy** when exposure material. **Best practices.** - **Automated rate feeds.** - **Daily or per-transaction rates** for high-volume. - **Regular revaluation** as part of period close. - **Standard FX gain/loss accounts.** - **Hedging strategy** documented if material exposure. **Operational rhythm.** - **Daily rate refresh.** - **Monthly revaluation.** - **Quarterly FX review.** - **Annual hedging strategy review.** ## Strategic positioning Multi-currency is core capability for global Dynamics 365 deployments. Native support is comprehensive; the design choices and operational discipline determine quality. For decision-makers: - Plan base currency carefully. - Automate rate management. - Embed revaluation in close. - Train finance team on multi-currency mechanics. - Engage treasury for hedging strategy. The technology supports; the operational maturity determines whether multi-currency operations run smoothly or generate constant surprises. Get the foundation right; the global operations benefit. --- # Multi-language setup in Business Central How Business Central handles multiple user languages and customer-facing language — translations, customer language codes, document layouts, and the limits. Source: https://www.solvingdynamics365.com/guides/multi-language-setup-in-business-central Section: Business Central / Compliance & localisation Published: 2026-05-01 For organisations operating across countries, Business Central's multi-language capability lets users work in their preferred language *and* lets customer-facing documents (invoices, quotes, statements) print in the customer's language. The mechanics are good for the common cases; the limits matter for international operations. ## User language Each Business Central user has a **language code** in their profile — English (US), English (UK), Swedish, German, French, Spanish, and many others. The user's language drives: - UI labels — every field name, action, menu item. - Field validation messages and errors. - Help text and tooltips. - Date and number formatting per locale. - Built-in report labels. Switching user language is one click in the profile; UI re-renders instantly. ## Supported languages Microsoft ships UI translations for ~40 languages out of the box. Many extensions add their own translations as part of the .app package. Country localisations include both functional logic and language translations relevant to that country. ## Customer-facing language Each customer carries a **Language Code** that drives the language of documents *sent to that customer*: - Posted invoice rendered in the customer's language. - Reminder text in the customer's language. - Statement layout in the customer's language. - Email body templates in the customer's language. This is where multi-language shines. A French customer receives French invoices; a German customer receives German invoices — automatically, from the same posted transaction. ## Translations Customer-facing translations come from: - **Microsoft's translations** — for standard fields, labels, and report content shipped by Microsoft. - **Extension translations** — third-party AppSource apps provide their own translation files for content they introduce. - **Customer-tenant translations** — the tenant administrator can add or override translations for specific fields and reports. The **Field Captions** and **Page Captions** translation features let you tune what shows on customer-facing documents. ## Document layouts Layout templates can be **per-language**. A sales invoice has separate Word layouts for English, Swedish, German. The customer's language code selects the layout at posting; the right design renders without manual selection. The translations of headers, labels, and boilerplate text are in the document layout itself. **Item / customer / vendor descriptions in multiple languages.** A separate concept: an *item description* can have **language-specific descriptions** stored alongside the base description. When a sales invoice prints for a customer with French language code, the French item description appears in the document. Configure via the *Translations* page on the item card. **Limits.** - **UI translations are bound to what Microsoft ships.** New languages or rare languages may not have full coverage; partner localisation work fills gaps. - **Translation tables for custom text** — if an extension adds new tables, those need their own translation files for multi-language support. Customer-tenant text overrides are possible but require admin work. - **Right-to-left languages** (Arabic, Hebrew) — supported but the document layouts and printing logic may need extra attention. - **Character-set handling for Asian languages** — generally fine but PDF generation and email rendering need verification. ## Country localisations and language Each country localisation includes both functional logic (VAT, statutory reporting) and language. Installing a country localisation typically enables the country's primary language by default for users assigned to that country. **Tenant-level vs company-level vs user-level.** - **Tenant-level** — installed language packs available across the tenant. - **Company-level** — the company can have a default language for documents and reports. - **User-level** — each user picks their preferred working language. The three layers can differ; the user's UI language doesn't change the customer-facing document language. ## Operational discipline Pilot multi-language with one international customer per language before broad rollout. Reading a foreign-language invoice and confirming all fields make sense is the only real test. Audit translations periodically; word choice ages. ## Where it stops Sophisticated translation management (TMS) for marketing content across many languages doesn't belong in BC; use a dedicated TMS integrated with BC for the data hand-off. --- # Multi-language support in Dynamics 365 How to support multiple languages in Dynamics 365 — language packs, translation, customisation labels, and the patterns for global deployments. Source: https://www.solvingdynamics365.com/guides/dynamics-365-multi-language-support Section: Foundations / Productivity & UX Published: 2026-05-01 Global Dynamics 365 deployments serve users across countries and languages. Native multi-language support exists; configuring it well requires understanding language packs, customisation labels, and translation workflows. Done properly, each user sees Dynamics in their preferred language; done poorly, English bleeds through everywhere. **Microsoft language coverage.** - **40+ languages** supported across Dynamics 365 modules. - **Module-specific** — some languages may have lighter coverage per module. - **Updated each wave** — translations evolve. For most major languages, comprehensive coverage. ## Language packs Per environment: - Base English (always). - Additional languages added. - Users select their language. - UI adapts. Available languages vary per product (Dataverse, F&O, etc.). **Enabling languages.** - Power Platform admin centre. - Per environment. - Multiple languages can coexist. - Provisioning takes minutes to hours. **User language preference.** - **Personal options** — user selects from enabled. - **Per-user setting** — independent. - **Default per environment** — for new users. Users in different roles can have different languages in same environment. ## Customisation labels Custom entities, fields, options: - **Localised labels** per language. - **Translation export / import** — XML-based. - **Fall-back to default** — if translation missing. Without translated labels, custom fields show in default language only. **Translation workflow.** 1. Build customisation in default language (e.g., English). 2. Export translations file. 3. Translate (manual or via translation services). 4. Import translations. 5. Verify in each language. The cycle repeats for each customisation update. **Translation tools.** - **Manual** — translators edit XML. - **Translation memory** — Trados, others. - **Machine translation** — Azure Translator API. - **Hybrid** — machine + human review. For ongoing customisation, automated translation pipeline preferred. **Date, time, number formats.** - **Locale-driven** — per user's region. - **Decimal separators** — comma vs period. - **Date order** — MM/DD vs DD/MM. - **Currency formatting** — symbols, position. These are user-settings; respects user's preference. **Time zones.** - **Per-user time zone** preference. - **Records stored** in UTC. - **Displayed** in user's local time. - **Cross-timezone** scheduling. For global operations, time zone handling is critical. **Right-to-left languages.** - **Arabic, Hebrew, Persian** — RTL. - **UI layout** flips automatically. - **Mixed content** (RTL + LTR) handled. Less common but important for global reach. ## Multi-language content data Beyond UI: - **Knowledge articles** with language variants. - **Product descriptions** per language. - **Customer communications** in customer's language. - **Document templates** localised. Data multi-language is harder than UI; partner extensions sometimes help. **Knowledge articles in multiple languages.** - Master article in primary language. - Translations as language variants. - Search returns user's language version. Covered in [[dynamics-365-customer-service-knowledge-management-deep-dive]]. **Email templates.** - Templates per language. - Selected based on recipient's language. - Variations for cultural appropriateness. Mass emails should localise; single template across all languages comes across as foreign. **Customer communications.** - **Contact's preferred language** stored. - **Communications filtered** by language. - **Salesforce / agent** speaks customer's language. Customer satisfaction tied to language respect. **Document templates (Word, Excel).** - **Multiple templates** per business process per language. - **Auto-selection** by context. - **Quote, invoice, contract** in customer's language. For documents customer receives, language matters. **Marketing in multiple languages.** - **Customer Insights — Journeys** supports per-language. - **Conditional content** by recipient language. - **Segmentation** by language. Marketing localisation affects engagement rates significantly. **Power Apps localisation.** - **Multiple language labels** per app. - **Auto-translation** for new languages. - **User-language-driven** rendering. For canvas apps, similar pattern to model-driven. **Power Automate localisation.** - **Connector descriptions** localised. - **Action labels** localised. - **User-facing notifications** can be language-aware. **Country-specific specifics.** - Each language often paired with country / regulatory specifics. - Tax handling, currency, regulatory reporting per country. Multi-language often part of multi-country deployment. **Translation governance.** - **Translation memory** maintained. - **Glossary** of approved terms. - **Review process** for new translations. - **Versioning.** Without governance, translation drift and inconsistency. **Common pitfalls.** - **English bleeds through.** Untranslated customisations. - **Bad machine translations.** Customer-facing content poor quality. - **Cultural insensitivity** — direct translation misses nuance. - **Right-to-left forgotten.** Hebrew / Arabic users unhappy. - **No update process.** New customisations not translated. - **Inconsistent terminology.** Same concept translated differently. **Best practices.** - **Plan multi-language from start.** - **Use translation services** for accuracy. - **Maintain glossary.** - **Test in each language.** - **Update translations** with each release. - **User feedback** on translation quality. **Operational rhythm.** - **Per customisation cycle** — extract / translate / import. - **Quarterly** — translation quality review. - **Annually** — comprehensive audit. - **On new feature** — assess language scope. ## Strategic positioning Multi-language support is essential for global Dynamics 365 deployments. The platform supports it; the discipline of using it properly is the difference between truly global capability and "English with awkward translations." For decision-makers: - Plan languages early. - Budget for translation work. - Establish governance. - Test in each language. - Listen to local user feedback. The investment is meaningful; the alternative — forcing all users into English — limits adoption and offends users. Properly multi-lingual Dynamics deployments respect users and customers worldwide; that respect drives both adoption and customer experience. --- # Multi-store rollout patterns for Dynamics 365 Commerce How to structure and roll out Dynamics 365 Commerce across many stores — organisation hierarchy, scale units, data distribution, register setup. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-retail-multi-store-rollout Section: Industries / Retail Published: 2026-09-02 A single-store Commerce pilot is easy. The hard part is the second hundred stores — the point where every shortcut in organisation hierarchy, master data, and hardware standardisation turns into a support ticket multiplied by store count. This guide covers the structural decisions that make a multi-store rollout of **Dynamics 365 Commerce** repeatable, and which pieces the product does not do for you. For what happens inside one store once it is live — channel database, offline POS, statements — see [store operations](https://www.solvingdynamics365.com/guides/dynamics-365-commerce-store-operations) and [Modern POS](https://www.solvingdynamics365.com/guides/modern-pos-in-dynamics-365-commerce). This guide is about the estate. ## Organisation hierarchy comes first Commerce hangs almost everything off the **retail channel hierarchy** — an organisation hierarchy in headquarters with the *Retail channel* purpose assigned. Stores are organisation units placed under regions, regions under countries or formats. Assortments, price groups, reporting roll-ups, and security scopes all resolve through this tree. Two rules that save pain later: - **Model the hierarchy the way merchandising thinks, not the way finance thinks.** Finance has legal entities and financial dimensions for its view. The retail hierarchy exists so that a buyer can assign an assortment to "all outlet stores in the north" in one action. If those two views collide, give the retail hierarchy to merchandising and reconcile in reporting. - **Decide store-level financial dimensions before the first store goes live.** Every statement posting carries the store's dimension defaults. Changing them after fifty stores are posting is a cleanup project, not a configuration tweak. Each store is also a **warehouse** in Supply Chain Management, usually under a dedicated site per legal entity or region. Store-as-warehouse is the mechanism for stock on hand, transfers, and counting, so the warehouse naming convention should match the store naming convention exactly. ## Scale-unit topology Point-of-sale devices do not talk to headquarters directly; they talk to a **Commerce Scale Unit** (CSU). The cloud-hosted CSU is the default and is where most retailers should start — Microsoft runs it, it scales with the environment, and it has no local infrastructure to maintain. The self-hosted scale unit, deployed on a store or regional server, exists for retailers that cannot tolerate cloud dependency for a checkout: remote sites with unreliable connectivity, or formats where a queue of thirty customers during a WAN outage is unacceptable and the offline database on each register is not enough. It costs you a server per site or region, patching, and a more complicated update cadence. Take it only where the connectivity case is real. The pattern that works for most estates: cloud CSU for everything, register-level **offline mode** as the resilience layer, and self-hosted scale units only for the handful of sites that genuinely need them. ## Master data and data distribution Headquarters pushes configuration and master data to channel databases through **Commerce Data Exchange** (CDX) distribution schedules — the numbered jobs such as 1040 for products, 1070 for channel configuration, and 1010 for customers. Three habits matter at scale: - **Schedule by data type, not "run everything hourly".** Product and price changes need to reach stores quickly; the channel configuration job is heavy and changes rarely. Separate cadences keep the download sessions small. - **Watch the download session monitor as a daily operational task.** A single store with a stuck session is easy to miss until a customer is charged last week's price. - **Keep channel-specific attributes and assortments hierarchical.** Assigning products store by store is the number one cause of "why can't this store sell this item" tickets. ## Registers, devices, and hardware profiles Every till is a **register** tied to a store, using a **hardware profile** (printers, drawers, scanners, payment terminal), a **visual profile**, a **functionality profile**, and a **receipt profile**. The mistake is creating profiles per store. Create profiles per format — "supermarket lane", "boutique counter", "mobile associate" — and assign them. A new store then becomes a list of registers pointing at existing profiles, plus device activation. Standardise hardware before the rollout, not during it. Commerce supports a broad set of OPOS and Windows peripherals through the hardware station, but each new printer model or scanner firmware is a test cycle. A three-model hardware standard per format is a sensible ceiling. ## What is in the product and what is not In the product: the channel hierarchy, assortments, price groups, CSU, CDX, offline POS, register and device management, the Store Commerce app for Windows, Android and iOS, and the fiscal-integration framework for a number of countries. Not in the product, or partial: - **Payments.** Adyen ships as the reference connector. Other acquirers need a certified partner connector; check the connector exists for every country in the rollout before signing anything. - **Fiscal compliance.** Microsoft's fiscal framework covers specific markets (parts of Europe, for instance); elsewhere expect a partner solution. - **Electronic shelf labels, label printing at scale, store task management, workforce scheduling.** All partner or Microsoft 365 territory. - **Store network and device management.** Commerce cares about the register; Intune or an MDM handles the OS. ## The wave plan The rollout pattern that repeatedly works: 1. **One pilot store**, ideally a difficult one — high volume, awkward layout, mixed hardware. Run it for a full month-end so statement posting and cash management are exercised. 2. **A pilot region** of five to ten stores to prove the hierarchy, the training approach, and the support model. This is where profile sprawl and data-distribution problems surface. 3. **Waves by format or region**, sized to what the support desk can absorb in the first two weeks after go-live. Store staff generate a predictable spike of tickets that fades quickly; two overlapping spikes do not. 4. **A hard freeze on configuration changes during each wave**, released between waves. The failure mode is compressing steps one and two because the board wants a date. Every unresolved pilot problem reappears in each subsequent store, and the fix has to be applied to all of them. ## Where BC fits Retailers on Business Central with a partner POS have the same structural questions — location per store, one set of profiles per format, a wave plan — but the mechanics live in the ISV's product rather than in CDX and scale units. The [retail overview](https://www.solvingdynamics365.com/guides/dynamics-365-for-retail) covers where that line falls. --- # Multi-warehouse fulfilment for distributors on Dynamics 365 How distributors run several warehouses on Dynamics 365 — site and warehouse structure, where a sales order's warehouse actually comes from. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-distributors-multi-warehouse-fulfilment Section: Industries / Distribution Published: 2026-09-02 A distributor with one warehouse has an inventory problem. A distributor with five has a routing problem: which warehouse ships which line of which order, how stock moves between them, and what happens when the nearest one is short. Dynamics 365 models the structure well, but the routing decision itself is thinner than people assume, in both Supply Chain Management and Business Central. This guide covers how to set the structure up and what to do about the routing gap. ## Structure: sites, warehouses, and what they mean In **Supply Chain Management**, a *site* is a geographic or operational grouping with its own planning and costing context; a *warehouse* is a physical stock location within a site. Distributors typically get this right for the physical estate and wrong for the edge cases: - **Regional distribution centres** are sites, each with a main warehouse. Straightforward. - **Cross-dock or transit stock** should be a warehouse of type Transit under the receiving site, so that stock in transit between sites is visible and financially owned. - **Consignment at customer** and **van stock** are warehouses, not sites, and they should not be picking-enabled unless someone actually picks there. - **Quarantine, returns, and damaged stock** are separate warehouses or blocked locations, depending on whether the distributor runs advanced warehouse management. In **Business Central**, the equivalent is *locations*, with stockkeeping units for location-specific replenishment parameters and in-transit locations for transfers. The [locations and transfer routes](https://www.solvingdynamics365.com/guides/locations-and-transfer-routes-in-business-central) guide covers the setup. ## Where a sales line's warehouse comes from This is the part that surprises distributors moving from a system with built-in sourcing. In Supply Chain Management, a sales order line's site and warehouse default from, in order, the customer's default site and warehouse, then the item's default order settings, with site-specific order settings overriding. There is no rule that says "ship from the warehouse nearest the delivery address". **Distributed order management** exists in Commerce for channel orders; it does not apply to ordinary sales orders. Business Central is the same: location defaults from the customer, then the item, then the user's responsibility centre, and nothing looks at geography. The practical patterns distributors use: - **Customer-driven defaults.** Each customer account has a default warehouse matching their region. Works when customers have one ship-to; breaks for national accounts with many delivery addresses. - **Ship-to-driven defaults.** For national accounts, either separate customer accounts per region (crude but zero customisation), or a small extension that sets the warehouse from an attribute on the delivery address. This is one of the most common small X++ or AL extensions in distribution, and it is worth doing early rather than living with manual overrides. - **Order-entry override with ATP.** Sales staff check available-to-promise per warehouse on the line and change the warehouse when the default is short. Supply Chain Management shows ATP per warehouse on the line; the discipline is human. - **Automated sourcing** — evaluate every line against stock, distance, and cost, and pick the best warehouse — is not in either product. It is an ISV order-management layer or a custom service, and most distributors do not need it until they have many warehouses and a genuine cost-to-serve problem. ## Splitting an order across warehouses Both products allow different lines of one order to ship from different warehouses; each line carries its own warehouse and generates its own picking. The parts that need policy: - **Delivery documents.** Each warehouse produces its own packing slip or shipment, so the customer receives two deliveries with two documents. If the customer expects one consolidated delivery, either consolidate physically through one warehouse (transfer first, then ship) or accept two shipments and one invoice. - **Freight.** Two shipments cost two freight charges. Supply Chain Management's transportation management can rate each shipment; whether the customer is charged once or twice is a commercial decision. - **Backorders.** A line that cannot ship from its warehouse either waits (delivery remainder), moves to another warehouse (change the line's warehouse and re-reserve), or is transferred in. Distributors should decide the default per customer group and configure the delivery-remainder and partial-delivery settings on the customer accordingly. ## Moving stock between warehouses **Transfer orders** are the mechanism in both products: a shipment from one warehouse, an in-transit state, and a receipt at the other, with lead times per route. Supply Chain Management adds warehouse refilling: master planning can be configured so that a branch warehouse's coverage is satisfied by planned transfers from a designated main warehouse rather than by purchase orders, using the warehouse's refilling relationship and coverage settings. Set this up and the branch warehouses replenish from the hub automatically at every planning run; skip it and every branch creates its own purchase orders to the supplier, which is the number one cause of duplicate buying across a multi-warehouse estate. Business Central handles the same idea through stockkeeping units with a replenishment system of Transfer and a transfer-from location. The planning worksheet then suggests transfer orders. Simpler, and adequate for a distributor with a hub and a few branches. Cross-docking — receiving at the hub and moving straight to the branch or the customer without put-away — is a feature of advanced warehouse management in Supply Chain Management and of directed pick and put-away in BC, with the usual caveat that it only works when the demand exists in the system before the goods arrive. ## Inventory visibility across the estate Sales staff need one view of stock everywhere. Supply Chain Management's on-hand inquiry does it per item; the **Inventory Visibility** add-in gives a fast, cross-warehouse (and cross-legal-entity) picture suitable for portals and customer self-service. BC's item availability by location page does the equivalent for a smaller estate. Neither is a reason to build a data warehouse; both are a reason to make sure counts are accurate, because a visible wrong number is worse than an invisible one. ## Sequencing a multi-warehouse rollout Get the structure right first, including transit and quarantine warehouses. Then default warehouses by customer and item, with the ship-to extension if national accounts need it. Then refilling from the hub. Only then think about automated sourcing, and only if the exception queue from manual overrides is too big for the sales desk to handle. Distributors who buy a sourcing engine first usually find that the real problem was branch warehouses buying independently, which refilling would have fixed. --- # Number sequences in Dynamics 365 Finance and SCM How number sequences work in Dynamics 365 Finance and SCM — scope, continuous vs non-continuous, manual override, and statutory gap-free requirements. Source: https://www.solvingdynamics365.com/guides/number-sequences-in-finance-and-operations Section: Finance & SCM / Finance Published: 2026-05-01 Dynamics 365 Finance and SCM generates unique identifiers — voucher numbers, document numbers, master-record IDs — through a **number sequence** framework that's more elaborate than Business Central's. Understanding its scope and operating mode matters for statutory compliance, performance, and avoiding the silent gaps that can become audit findings. ## The model A **number sequence** has: - A **code** — the identifier of the sequence. - A **scope** — Shared, Company, Legal entity, Operating unit. Determines whether different companies share or have separate sequences. - A **segmentation** — the structure of the generated number, combining alphanumeric prefixes, constants, and the numeric counter. - A **counter range** — first, last, current, format. - **Continuous or non-continuous** — see below. - **Manual entry allowed** — whether users can override the auto-generated number. - **Allow changes** — whether the sequence definition can be edited after use. ## Segmentation A number sequence's output is built by concatenating segments. Examples: - `INV-{0000000000}` — produces INV-0000000001, INV-0000000002, etc. - `{Year}-{Company}-{0000000}` — produces 2026-FIN-0000001, 2026-FIN-0000002. - Year and company segments are dynamic and re-evaluated at each generation. Different segmentations can be applied per scope or per condition (e.g. invoice prefix per legal entity). **Continuous vs non-continuous.** - **Continuous** — the sequence guarantees no gaps. Each number generation reserves a number; if the using transaction fails to commit, the number is *not* released — but the system tracks reservation and uses sophisticated handling to minimise gaps. Continuous sequences are statutorily required in many jurisdictions for posted document numbering (especially invoices), and the trade-off is performance: continuous sequences serialise number generation, causing locks at high concurrency. - **Non-continuous** — the sequence trades gap-freeness for performance. Numbers are allocated in batches per user/session; gaps appear if a session ends without consuming all reserved numbers. Acceptable for internal-only document numbering where gaps are immaterial. Choose continuous for any externally-visible, statutorily-relevant numbering (sales invoices in EU jurisdictions, e-invoicing references, customer-facing PO numbers). Choose non-continuous for high-volume internal numbering (journal voucher numbers, item ledger entries) where performance matters more. ## Manual override Most number sequences allow manual entry where the auto-generated number can be overridden. Useful for migration; risky in steady-state because it allows user-controlled gaps and duplicates. Tighten to "automatic only" after go-live wherever statutory compliance allows. ## Per-company vs shared Set the **scope** carefully: - **Shared** — the same sequence across all companies in the tenant. Used for cross-company references. - **Company** — separate sequence per company. Used for company-internal numbering. - **Legal entity** — separate per legal entity. The most common. ## Renaming and resetting Once used, sequences should not be reset or restructured — historical references in audit trails depend on the existing numbering. Plan for several years of growth in the initial range. **Operational pitfalls.** - **Reaching the upper bound.** A sequence configured 1–999999 hits the wall after a million transactions. Configure realistic ranges with year prefixes that segment naturally. - **Statutory gap-free requirement missed.** Setting an invoice sequence non-continuous in a country that requires gap-free invoicing triggers audit findings. Verify country requirements. - **Performance lock under load.** Continuous sequences serialise; high-concurrency transactional environments need careful tuning. ## Audit Every generated number is logged; gaps in continuous sequences are investigable. --- # Number series in Business Central How Business Central generates document numbers — number series, relations, date-driven sequences, gap-handling, and the common pitfalls. Source: https://www.solvingdynamics365.com/guides/number-series-in-business-central Section: Business Central / Inventory & warehouse Published: 2026-05-01 A **number series** in Business Central is the pattern that produces unique identifiers — customer numbers, sales order numbers, posted invoice numbers, item numbers, dimension codes, and dozens more. The mechanism is simple, but the design decisions inside it shape audit, statutory compliance, and integration cleanliness for the life of the system. ## The model Each number series has a code, a description, and one or more **number series lines**. A line defines a starting number, an ending number, an increment, an optional starting/ending date, and whether the line is currently active. When a number is requested, BC picks the relevant line based on the document date and returns the next number. ## Manual vs auto-numbering Each master record type and each document type can be configured to use a number series automatically, allow manual input, both, or default to automatic with manual fallback. The default is usually automatic with manual allowed for migration; tighten to "automatic only" after go-live to prevent ad-hoc numbering. ## Number series relationships A series can be linked to **related series** so users can pick from a list of related codes at the point of entry. Used heavily for documents with several flavours (e.g. domestic sales orders, export sales orders, intercompany sales orders) where each has its own number range. ## Posting series Most posting document types use **two** series — one for the *unposted* document (e.g. sales order numbers, where the order may be edited many times) and one for the *posted* document (e.g. posted sales invoice numbers, which are immutable). Some statutory regimes require strict sequential, gap-free posted numbering, in which case the *posted* number series is configured for no gaps and is highly disciplined. ## Date-driven sequences Each number series line can have a starting and ending date, so January gets one prefix and February gets another. Common for compliance regimes that require year-prefixed numbering (e.g. INV-2026-001 in 2026, INV-2027-001 in 2027). Multiple active lines with overlapping dates pick by date precedence. ## Gaps and gap-handling Posting failures can leave gaps in sequential numbers. For non-statutory series this is harmless; for statutory series, customers must investigate every gap. The **Allow Gaps** setting controls whether the series tolerates gaps under high concurrency. **Common pitfalls.** - **Reusing a series across legal entities.** Don't — each company should have its own series even if the codes look similar. - **Starting too generously.** A series defined 1–9999999 looks generous until you realise audit always shows the starting boundaries; pick realistic ranges with clear year prefixes. - **Skipping date partitioning.** Year-prefixed series age cleanly; one big unbounded series gets ugly fast. ## Migration When migrating from legacy systems, customers usually retain legacy numbering for migrated records and start fresh numbering for new ones — configure the series accordingly. --- # Observability for Dynamics 365 integrations How to build observability into Dynamics 365 integrations — logs, metrics, traces, correlation IDs. Source: https://www.solvingdynamics365.com/guides/observability-for-dynamics-365-integrations Section: Integrations / Resilience & ops Published: 2026-05-01 A production integration that "works" by absence of complaints isn't truly working — it's just not failing visibly yet. **Observability** is the discipline of making system behaviour visible: what's happening, how well, with what latency, with what errors. For Dynamics 365 integrations spanning multiple systems, observability is essential for reliable operations. **The three pillars.** - **Logs** — discrete events with context. - **Metrics** — aggregated quantitative data. - **Traces** — request flow across services. Each gives different visibility; modern observability uses all three. **Logs in Dynamics 365 integrations.** - **Plug-in trace logs** — for Dataverse plug-in execution. - **Application Insights logs** — from custom code. - **Azure Function logs** — Azure-side processing. - **Service Bus / Event Grid logs** — message broker activity. - **Dataverse audit logs** — business-level changes. Each source contributes; centralising helps. **Structured logging.** ```csharp log.LogInformation("Order processed", new { OrderId = "...", CustomerId = "...", DurationMs = 123 }); ``` Structured logs enable filter, aggregation, correlation in tools like Application Insights, Splunk, ELK. ## Metrics Quantitative; useful patterns: - **Throughput** — messages per minute. - **Latency** — duration percentiles (P50, P95, P99). - **Error rate** — % failures. - **Saturation** — resource usage. The "USE" pattern (Utilization, Saturation, Errors) and "RED" pattern (Rate, Errors, Duration) are common frameworks. ## Distributed tracing Following a request across services: - **Correlation ID** generated at entry point. - **Propagated** in HTTP headers, messages, plug-ins. - **Logged at each hop.** - **Visualised** as trace graph. Enables "follow this request" debugging across many services. ## OpenTelemetry Open standard: - Vendor-neutral instrumentation. - Supports logs, metrics, traces. - Multiple language libraries. - Export to Application Insights, Datadog, Jaeger, etc. Modern recommendation: use OpenTelemetry; future-proof. **Application Insights for Dynamics.** - Dataverse integrates with App Insights (configurable). - Plug-in traces flow to App Insights. - Custom code emits. - Centralised dashboard. For Microsoft-aligned organisations, App Insights is the natural starting point. ## Per-integration observability Each integration should provide: - **Heartbeat** — is it running? - **Throughput** — messages processed. - **Latency distribution.** - **Error rate.** - **Dependent system health.** Each integration's health visible separately. ## End-to-end visibility Cross-integration: - **Business transaction tracking** — order received → processed → fulfilled. - **SLA monitoring** — was order processed within commitment? - **Funnel analysis** — where in flow do issues occur? Customer-facing SLA depends on end-to-end visibility. **Alerting.** - **Error rate spike** — alert. - **Latency degradation** — alert. - **Throughput drop** — alert (something broken upstream). - **Heartbeat missing** — alert. Each alert routes to on-call or operations. ## Alert quality Critical: - **Actionable** — recipient knows what to do. - **Not too noisy** — don't fatigue responders. - **Severity-appropriate** — critical via page; informational via email. - **Correlated** — one alert per incident, not 100. Bad alerting is worse than no alerting; people ignore. **Dashboards.** - **Operations dashboard** — current state at a glance. - **Business dashboard** — business-relevant metrics. - **Per-integration drill-down.** - **Incident dashboards** — for ongoing investigations. Dashboards different per audience. ## Per-message observability Trace a specific message: - Where did it start? - What systems handled it? - How long at each step? - Did it succeed? For customer service ("what happened to my order?"), this matters. **SLA / SLO tracking.** - **Service Level Objective** — target performance. - **Service Level Agreement** — contractual. - **Error budget** — allowable failures. - **Burn rate** — how fast budget consumed. Mature operations have SLOs informed by observability. **Logging best practices.** - **Structured** — JSON or similar. - **Levels** — Debug / Info / Warning / Error. - **Sensitive data excluded** — no PII, secrets. - **Context-rich** — IDs, timestamps, source. - **Sampled** for high-volume — full logging too expensive. **Common pitfalls.** - **No observability.** Issues only known when users complain. - **Verbose logging.** Logs flood; signal lost. - **No correlation.** Can't trace requests across services. - **Per-system silos.** Each system has logs; no unified view. - **Alerts ignored.** Too noisy; alert fatigue. - **Sensitive data in logs.** Compliance violation. - **Retention too short.** Can't investigate older issues. **Cost considerations.** - **Log volume** — App Insights / Datadog priced by ingestion. - **High-cardinality metrics** — expensive. - **Long retention** — expensive. Balance: enough observability to operate; not so much it bankrupts. **Privacy considerations.** - Logs may contain personal data. - GDPR / privacy regulations apply. - Retention policies needed. - Subject access requests might include logs. Design with privacy in mind. **Audit logs vs operational logs.** - **Audit** — for compliance; long retention. - **Operational** — for diagnostics; shorter retention. Different needs; separate streams typically. **Observability culture.** - **Engineers add observability** as they write code. - **Reviews include observability check.** - **Incidents analyse observability gaps.** - **Continuous improvement.** The culture determines whether observability is investment or afterthought. ## Strategic positioning Observability is the foundation of operational excellence. Without it, integration operations is reactive and chaotic; with it, problems are detected and resolved fast. For architects: - Design observability into integrations from start. - Standardise on tooling. - Build dashboards and alerts. - Train operators. - Iterate based on incidents. The investment is meaningful but compounds: every integration benefits from the foundation. The teams that take observability seriously have predictable operations; the teams that don't have surprise incidents. The difference is largely the observability discipline. --- # Offshore and multi-entity delivery models in Project Operations How to run offshore and nearshore delivery on Dynamics 365 Project Operations — resource company versus contracting company. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-professional-services-offshore-delivery Section: Industries / Professional services Published: 2026-09-02 A consulting firm with a delivery centre in another country has one commercial contract and two legal entities doing the work. The client is invoiced by the onshore entity; half the hours are logged by people employed by the offshore entity; somebody has to move cost and margin between the two in a way tax authorities accept. Dynamics 365 **Project Operations** has a model for this, but it only exists in one deployment mode, and the model is easy to over-engineer. This guide covers the mechanics and the design choices that matter more than the mechanics. ## The two-entity model Project Operations distinguishes the **contracting company** — the legal entity that owns the project contract and invoices the customer — from the **resource company**, the entity that employs the person doing the work. A resource from the offshore entity books time to a project owned by the onshore entity. Behind the scenes, the time creates an intercompany transaction: cost in the resource company, an intercompany charge to the contracting company at a **transfer price**, and revenue to the customer from the contracting company at the sales rate. This is available in the **Project Operations with Finance and Operations** deployments, where the F&O project accounting module holds the intercompany setup: intercompany customer and vendor pairs between the entities, transfer price lists, and the periodic intercompany invoicing process. The [deployment types](https://www.solvingdynamics365.com/guides/project-operations-deployment-types) guide explains why this matters; the short version is that the **Lite** deployment does not do intercompany, and a firm on Lite with an offshore entity ends up reconciling between two systems. ## Setting it up - **Legal entities and intercompany pairs.** Each delivery entity is a vendor to each contracting entity and each contracting entity a customer to each delivery entity. For three entities that is six pairs; for eight, it is fifty-six. Most firms restrict which entities can actually loan resources to which, and should. - **Transfer price lists.** A cost price list per resource company and contracting company pair, by role and optionally by resource, in the contracting company's currency. This is the number the tax team cares about; agree it with them, document the basis, and change it only with a paper trail. - **Resource setup.** Each bookable resource belongs to one company. Work-hours calendars carry the resource's local holidays and hours, which is what makes capacity and utilisation honest across time zones. - **Rate cards for the customer** are unaffected: the sales price list on the contract is the contracting company's, in the contract currency, regardless of who delivers. - **Approvals.** Time is approved by the project manager in the contracting company, which is usually right; expense claims are often approved locally for policy reasons. Both are configurable. ## The monthly flow Time and expense post as actuals in both entities. Period end, the contracting company runs project invoicing to the customer as normal. The resource company runs **intercompany invoicing**, generating a vendor invoice in the contracting company and a customer invoice in the resource company for the transferred hours at the transfer price, in the appropriate currencies. Margin in the contracting company is sales minus transfer price; margin in the resource company is transfer price minus cost. Group margin is the sum, and the intercompany eliminates on consolidation. The order matters: post all time, invoice the customer, run intercompany. Firms that run intercompany invoicing before all time is posted chase catch-up invoices for months. ## Practical complications **Currencies.** The resource company's cost is in its currency, the transfer price is usually in the contracting company's, and the customer contract may be in a third. Exchange-rate timing for the intercompany invoice — transaction date or invoice date — should be fixed in the intercompany parameters and agreed with finance once. **Time zones and calendars.** A resource in a time zone nine hours ahead logs Friday's work that the onshore approver sees on Thursday. This is cosmetic in the product but confuses approvers; put a day's grace into the approval expectation. Public holidays differ; the calendars must be per country or capacity is wrong. **Expenses.** Offshore expenses are typically reimbursed locally and re-charged at cost. Whether they route through the intercompany process or are handled as a separate recharge is a policy choice; the product supports both, and the second is simpler. **Tax.** Cross-border services can carry withholding tax or reverse-charge VAT on the intercompany invoice. That is F&O tax configuration, not Project Operations, and it must be set up on the intercompany customer and vendor accounts before the first invoice. **Data residency.** A Dataverse environment lives in one region. A firm whose offshore entity's regulator expects local data storage needs that conversation before choosing the tenant region, not after. ## The alternative: one entity, cost centres Not every firm needs the two-entity model in the system. If the offshore centre is a branch rather than a separate company, or if statutory accounts for it are simple enough to derive from cost centres, run one legal entity with resources tagged by financial dimension. Time flows to the project with the resource's cost; margin reporting by delivery centre comes from the dimension; there is no intercompany to run. Firms regularly pick the two-entity model because it looks correct and then find the intercompany process is the most fragile part of their close. The test: does a tax authority or auditor require an intercompany invoice between these two entities? If yes, model it. If the answer is "we might want the reporting", use dimensions. ## Where partners come in Automated transfer-pricing documentation, mark-up calculations tied to cost-plus methods, and multi-tier delivery chains (offshore entity subcontracting to a fourth) are beyond the standard process and usually handled with a small extension or a partner accelerator. Subcontracted offshore vendors — a separate company you do not own — are not intercompany at all; the [subcontracting in Project Operations](https://www.solvingdynamics365.com/guides/subcontracting-in-project-operations) guide covers that path. --- # Omnichannel licensing for Dynamics 365 Customer Service How Customer Service omnichannel features are licensed — base + add-on, channel-specific costs, Contact Center positioning. Source: https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-omnichannel-licensing Section: Customer Engagement / Customer Service Published: 2026-05-01 Microsoft's licensing for **Dynamics 365 Customer Service omnichannel** is one of the more confusing parts of the Dynamics commercial story. Multiple SKUs, add-ons, and the relationship with the standalone Contact Center product all interact. For decision-makers, understanding the licensing patterns is essential for accurate budgeting and feature selection. ## The base: Customer Service Enterprise The foundation: - Case management. - Knowledge management. - Service-level agreements. - Workspace (Customer Service Workspace). - Standard reporting. - Self-service portal (additional Power Pages capacity). Does NOT include native voice, full omnichannel digital channels, or full Copilot features. ## Adding omnichannel Two paths: - **Customer Service Enterprise + Digital Messaging add-on** — chat, SMS, social, WhatsApp. - **Customer Service Enterprise + Voice add-on** — phone calls via Azure Communication Services. - **Customer Service Enterprise + Both** — full multi-channel. The add-ons priced per user; available on top of Enterprise. ## Contact Center as alternative Microsoft's standalone Contact Center SKU: - Bundles voice + digital + AI features. - Sold separately or alongside Customer Service. - Sometimes cheaper than Customer Service Enterprise + add-ons. - Available for environments not on Customer Service. For pure contact-centre deployments, Contact Center may be the right SKU; for organisations layering CC on existing CRM, Customer Service Enterprise + add-ons usually fits. ## Per-user vs per-bot Different cost structures for different elements: - **Per agent** — most pricing per active agent. - **Per voice line** — for inbound numbers. - **Per outbound minute / message** — usage-based. - **Per bot session** (for self-service bots) — usage-based. The mix can add up; budgeting requires understanding the workload. ## Power Virtual Agents / Copilot Studio Self-service bots: - Separate licensing from Customer Service. - Per-bot or per-message pricing. - Often deployed alongside Customer Service for deflection. ## AI capacity Various Copilot features: - Some bundled with Premium licensing. - Some priced per consumption. - Includes prompt generation, summarisation, knowledge search assist. The AI line item can be material; track consumption. **Channel-specific costs.** - **Voice** — number rental + per-minute usage. PSTN connectivity adds. - **SMS** — per-message; usually pennies but volume adds. - **WhatsApp Business** — per-message or per-conversation. - **Email** — included; no per-message. - **Chat** — included with digital add-on. For high-volume channels, usage costs can rival licence costs. **Volume discounts.** - Enterprise Agreement provides volume discounts. - Voice usage tiered. - Bundled commitments may unlock pricing. For 100+ agent contact centres, Enterprise Agreement essential for cost management. ## Conversation intelligence Premium feature: - Customer Service Premium or Premium add-on. - Records and analyses voice / chat. - Per-user / per-channel costs. For most Customer Service deployments, Premium adds material cost; evaluate use case before committing. **Comparison: Customer Service vs Contact Center vs Hybrid.** | Scenario | SKU | |---|---| | Case-focused, occasional chat | Customer Service Enterprise + Digital | | Full contact center, all channels | Contact Center or Customer Service Enterprise + Voice + Digital | | Existing Dynamics customer adding voice | Customer Service Enterprise + Voice add-on | | Greenfield contact center | Contact Center | The math varies; get a partner to model your specific case. ## Capacity-based pricing For some elements: - **AI Builder credits** — for AI prompts and models. - **Power Pages capacity** — for portal logins. - **Dataverse capacity** — overage costs. Capacity overruns trigger surprise costs; monitor. ## Trial and pilot Microsoft offers trials: - 30-day trials of most modules. - Useful for pilot before full purchase. - May not include all premium features. **Common pitfalls.** - **Buy Premium globally.** Premium features only matter where AI is genuinely used. - **Wrong SKU for use case.** Customer Service for what should be Contact Center, or vice versa. - **Volume usage underestimated.** Voice / SMS costs compound. - **No capacity monitoring.** Overage surprises. - **Bot self-service ignored.** Self-service deflection would save material cost; doesn't happen because the bot product isn't licensed. **Licensing review cadence.** - **Annual** — review usage and licence appropriateness. - **Quarterly** — high-growth teams. - **Pre-renewal** — formal review with partner. Without periodic review, licence usage drifts; rightsizing opportunities missed. **Right-sizing strategies.** - **Activity-based agents** — reduce licence for occasional users. - **Team Member licence** — for read-only or basic access roles. - **Operations Device** — for shared terminals. Each saves cost where appropriate. ## Strategic positioning Customer Service / Contact Center licensing complexity is real; navigating it benefits from specialist help. The decisions affect cost trajectory significantly. For organisations of any size, treat licensing as an active management discipline: - Right SKU per role. - Right add-ons per scenario. - Active monitoring of usage. - Periodic re-assessment. The default is often over-buying premium tiers and add-ons; the discipline is matching licence to actual need. Microsoft will sell you more than you need; ensure you're buying only what's used. ### Frequently asked questions **What does Customer Service Enterprise include on its own?** Case management, knowledge management, SLAs, the Customer Service workspace, and standard reporting. It does not include native voice, the full set of digital channels, or the full Copilot features — those are add-ons. **How do I add chat, SMS, WhatsApp, or voice?** Through per-user add-ons on top of Enterprise: the Digital Messaging add-on for chat, SMS, social, and WhatsApp, and the Voice add-on for telephony over Azure Communication Services. Both together give full omnichannel. **When is Dynamics 365 Contact Center the better SKU?** For greenfield contact centres and full all-channel deployments, where the bundled voice, digital, and AI package can be cheaper than Enterprise plus both add-ons. Existing Customer Service customers adding a channel usually stay on Enterprise plus the relevant add-on. **What usage costs come on top of licences?** Voice number rental and per-minute PSTN usage, per-message SMS and WhatsApp, Copilot Studio bot sessions, AI consumption, and Power Pages, Dataverse, and AI Builder capacity. For high-volume channels these can rival the licence line. --- # Omnichannel voice in Dynamics 365 Customer Service Microsoft's native voice channel in Dynamics 365 Customer Service — agent desktop, IVR, routing, recording, and the Azure Communication Services backbone. Source: https://www.solvingdynamics365.com/guides/omnichannel-voice-in-customer-service Section: Customer Engagement / Customer Service Published: 2026-05-01 **Omnichannel Voice** is the native voice channel in Dynamics 365 Customer Service. It is Microsoft's answer to bringing telephony into the same agent desktop, queue, and reporting model as chat, email, SMS, and social — without forcing customers to glue on a separate PBX or contact-centre platform. ## The backbone Voice runs on **Azure Communication Services (ACS)**, Microsoft's calling infrastructure. ACS provides the telephony, media transcoding, and PSTN connectivity; Customer Service adds the agent desktop, queues, routing, recording, and analytics. Numbers are provisioned through Microsoft (in supported countries) or brought via direct routing for customers with existing PSTN contracts. ## Agent desktop Voice calls land in the same unified agent workspace as other channels. The agent sees the customer's history, related cases, open opportunities, and knowledge articles inline. Click-to-dial from any record, transfer with consultation, hold, mute, and conference are standard. Multi-session means one agent can have a voice call active while handling a chat in another tab. ## IVR and routing A drag-and-drop **IVR designer** builds the front-end interactive voice response menus, with text-to-speech in multiple languages, DTMF and speech recognition, callback offers, and integration to Dataverse data for personalised greetings ("Welcome back, Karen"). Calls route through **Unified Routing**, the same engine used for chat and email — skill-based, priority-aware, with capacity profiles to load-balance across agents. ## Recording and transcription Inbound and outbound calls are recorded; transcription runs near-real-time and feeds **conversation intelligence** for sentiment, key topics, and coachable moments. Recordings are retained per the configured policy. ## Quality monitoring Supervisors monitor live calls (whisper, barge, listen), inspect queue health, and intervene on stuck conversations. Coaching dashboards aggregate transcribed conversations into reports on talk ratio, hold rate, and resolution time. ## Outbound Agents place outbound calls, including campaigns; the platform supports both manual outbound and **list-based outbound** with preview, progressive, and predictive dialing patterns. Compliance (DNC lists, caller-ID display) is configurable per region. ## Copilot A real-time Copilot pane surfaces suggested next-best actions, fetches knowledge articles based on conversation context, and post-call generates a structured case summary the agent edits and saves. ## Where it stops Very large global contact centres with specialised CCaaS needs (advanced WFM, complex outbound dialler regulations, deep CRM-agnostic integrations) sometimes layer a specialist platform on top. For Dynamics 365 Customer Service shops, Omnichannel Voice covers most operations natively. --- # One Version and updates in Finance and SCM How Microsoft's One Version policy works for Dynamics 365 Finance and Supply Chain — Service Updates, pause windows, and the upgrade obligation. Source: https://www.solvingdynamics365.com/guides/dynamics-365-one-version-and-updates Section: Finance & SCM / Overview & platform Published: 2026-05-01 Dynamics 365 Finance and Supply Chain Management run under Microsoft's **One Version** service-update policy: every production environment, in every region, on every tenant, is updated to a current platform version on a fixed cadence. Customers have limited flexibility around timing and *no* ability to remain indefinitely on an older version. This is one of the biggest cultural differences from on-premise AX. ## The cadence Microsoft ships **Service Updates** roughly every six weeks — about eight per year — each bundling new features, fixes, and platform changes. Service Updates apply in a rolling fashion across the tenant base; customers can choose between channels (e.g. *General* vs *Early access*) for some control over which release lands when. ## Pause windows Customers can **pause** Service Updates for a small number of cycles in a calendar year, deferring an update — typically used to skip a busy period like year-end close. After the maximum pause is consumed, the update applies automatically. The pause is per-environment and configured through LCS. ## Service Update vs Application/Platform update *Platform* updates are runtime and infrastructure changes — these are mandatory and continuous. *Application* updates change Finance/SCM standard code; these are part of the Service Update bundle and follow the same cadence. ## Custom code obligations Custom code (X++ extensions, integrations, reports) compiled against an older platform may break against a newer one. Microsoft's tools include **Code Upgrade** services in LCS that scan custom code for breaking changes ahead of a service update. ## Quality assurance Microsoft pre-tests Service Updates against a sample of customer environments and gates rollout by region. Customers should still run their own regression suite against the **preview** service update on a sandbox before applying to production. ## Why One Version Microsoft cannot economically support hundreds of AX versions in production for decades. One Version is the price of SaaS: you get continuous improvements, security patches, and uniform support, in exchange for keeping current. The discipline is real but the rewards — performance gains, AI features, regulatory updates — accrue without big-bang upgrades. ## Operational reality Mature Finance/SCM customers treat each Service Update as a small ops task: install in sandbox a week or two ahead, run the regression suite, brief power users on new features, accept production rollout. With practice it becomes routine. ## Where to go next Service updates land through [environments and LCS](https://www.solvingdynamics365.com/guides/dynamics-365-finance-environments-and-lcs) and are absorbed through [release management](https://www.solvingdynamics365.com/guides/release-management-for-dynamics-365) and [test automation](https://www.solvingdynamics365.com/guides/test-automation-for-dynamics-365). Custom [X++](https://www.solvingdynamics365.com/guides/f-and-o-x-plus-plus-language) is what needs checking each cycle. The 2026 change to how Microsoft communicates the roadmap — without changing this cadence — is in [the 2026 wave 2 guide](https://www.solvingdynamics365.com/guides/dynamics-365-2026-wave-2-release-highlights). ### Frequently asked questions **What is One Version?** Microsoft's service-update policy for Finance and Supply Chain Management: every production environment on every tenant is kept on a current platform version on a fixed cadence, with limited timing flexibility and no option to stay on an older version indefinitely. **How often do service updates arrive?** Roughly every six weeks — about eight a year — bundling features, fixes, and platform changes, rolled out across the tenant base with channel choices for some control over timing. **Can I pause a service update?** For a limited number of cycles per calendar year, per environment, through Lifecycle Services — typically to skip year-end close. Once the maximum pause is consumed, the update applies automatically. **How do I protect custom X++ code?** Run the LCS Code Upgrade tooling to scan for breaking changes, install the preview service update on a sandbox a week or two ahead, and run your regression suite before production rollout. --- # OpenTelemetry with Dynamics 365 integrations How OpenTelemetry standardises observability in Dynamics 365 architectures — instrumentation, exporters, distributed tracing. Source: https://www.solvingdynamics365.com/guides/opentelemetry-with-dynamics-365 Section: Integrations / Resilience & ops Published: 2026-05-01 Observability for Dynamics 365 integrations spans many systems — plug-ins, Azure Functions, Service Bus, external APIs. Each has its own logging story; collecting consistent telemetry across all is hard. **OpenTelemetry** is the open-standard answer: vendor-neutral instrumentation that exports to many backends. For multi-system Dynamics architectures, OpenTelemetry simplifies observability. **What OpenTelemetry is.** - Open standard for instrumentation. - CNCF project. - Supports logs, metrics, traces. - Vendor-neutral instrumentation. - Many language libraries. - Export to many backends (App Insights, Datadog, Jaeger, etc.). The headline value: instrument once, export anywhere. **Why it matters.** - **No vendor lock-in.** Change observability backend without rewriting instrumentation. - **Consistency.** Same patterns across languages and services. - **Distributed tracing standard.** W3C Trace Context for cross-service correlation. - **Modern.** Active development; growing adoption. For new instrumentation, OpenTelemetry is the recommended choice. **Three signal types.** - **Traces** — request flow across services. - **Metrics** — quantitative aggregated data. - **Logs** — discrete events. OpenTelemetry covers all three; many older tools focus on one. **Instrumentation libraries.** - **.NET** — OpenTelemetry SDK for C#. - **Java** — well-supported. - **Python, Node.js, Go, Ruby** — all supported. - **Auto-instrumentation** — many libraries instrumented automatically. For .NET (typical Dynamics environment), OpenTelemetry SDK provides comprehensive support. **Distributed tracing.** - **Trace** — full end-to-end request. - **Span** — single operation within trace. - **Trace ID** — links all spans in a trace. - **Parent-child relationships** between spans. A trace visualises as a Gantt-like chart: which service did what when. ## W3C Trace Context Standard format: - HTTP header `traceparent` carries context. - All services that understand it propagate. - Cross-service correlation just works. Without standard format, each service uses its own; correlation hard. ## Span attributes Per span: - Service name. - Operation name. - Duration. - Status (OK / Error). - Attributes (key-value, e.g., HTTP status, customer ID). Attributes enable filtering and analysis. **OpenTelemetry Collector.** - Receives data from instrumented apps. - Processes (filtering, sampling, transformation). - Exports to backends. Decouples app from backend; switch backends without app change. **Exporters.** - **Azure Monitor / Application Insights** — most common for Microsoft stack. - **Jaeger** — open-source tracing. - **Zipkin** — older open-source. - **Datadog, New Relic, Splunk** — commercial. Same instrumentation; export to one or many. **Instrumentation in Dynamics plug-ins.** - Plug-in code emits spans for major operations. - Spans correlated to incoming context. - Exported to App Insights or other. Plug-in tracing becomes part of broader distributed trace. **Instrumentation in Azure Functions.** - Built-in OpenTelemetry support increasing. - Auto-instrumentation for HTTP, Service Bus, etc. - Custom spans for business operations. Function-level traces tied to broader trace context. **Sampling.** - **Always sample** — full visibility; expensive. - **Probabilistic** — sample N% of traces. - **Tail sampling** — sample based on outcome (sample all errors). Sampling balances visibility and cost. **Custom metrics.** ```csharp var meter = new Meter("MyService"); var counter = meter.CreateCounter("orders_processed"); counter.Add(1, new KeyValuePair("status", "success")); ``` Counters, gauges, histograms; emitted to backend. ## Semantic conventions OpenTelemetry defines standards: - HTTP attributes — method, URL, status. - Database attributes — system, statement. - Messaging attributes — destination, operation. Consistent attribute names enable cross-service analysis. **Migration from existing observability.** - **Application Insights SDK** — Microsoft-specific; replace with OpenTelemetry + AppInsights exporter. - **Custom logging** — gradually replace. Coexistence possible; full migration over time. **Performance overhead.** - Modest; well-designed for production. - Sampling reduces cost. - Don't instrument hot loops. Production-ready performance. **Trace context in messaging.** - Service Bus messages carry trace context in properties. - Event Grid similarly. - Consumers continue the trace. Async patterns preserve correlation. **Trace context in Dataverse.** - Plug-in receives operation; what's the trace context? - Custom header passed via HTTP integrations. - For Dynamics-internal events, requires plug-in pattern. Capturing context across Dataverse plug-in boundary is the integration point. **Visualisation.** - **App Insights end-to-end transaction details** — trace flame graph. - **Jaeger UI** — open-source. - **Custom dashboards** — tailored. Visualisation reveals system behaviour patterns. **Use cases.** - **Performance investigation** — where did time go in a slow request? - **Error correlation** — find related errors across services. - **Dependency mapping** — what calls what. - **Capacity planning** — bottleneck identification. **Common pitfalls.** - **Over-instrumentation.** Performance degraded; cost explodes. - **Under-instrumentation.** Gaps in visibility. - **No context propagation.** Traces broken; can't follow request. - **Sensitive data in attributes.** Compliance issue. - **Sampling too aggressive.** Important traces missed. - **Single backend lock-in.** Defeats OpenTelemetry's purpose. **Best practices.** - **Start with auto-instrumentation** for common libraries. - **Add custom spans** for business operations. - **Use semantic conventions.** - **Configure sampling** for cost / visibility balance. - **Propagate context** through messaging. - **Document trace topology.** ## Strategic positioning OpenTelemetry is the modern observability standard. Dynamics 365 integrations using OpenTelemetry get vendor-neutral instrumentation that exports to current and future backends. The investment is modest — replace existing libraries with OpenTelemetry, configure exporters — and pays back in flexibility and depth of visibility. For architects: - Default to OpenTelemetry for new code. - Migrate existing instrumentation gradually. - Standardise span / metric naming. - Build dashboards on the foundation. For organisations on App Insights, OpenTelemetry coexists seamlessly. For others or those wanting vendor flexibility, OpenTelemetry is the path. Either way, it's the direction the observability industry is moving; aligning early reduces future migration burden. --- # Opportunity stages in Dynamics 365 Sales How opportunity stages structure sales process in Dynamics 365 Sales — business process flows, stage definitions, win/loss tracking. Source: https://www.solvingdynamics365.com/guides/dynamics-365-sales-opportunity-stages Section: Customer Engagement / Sales Published: 2026-05-01 An opportunity in Dynamics 365 Sales has stages — Qualify → Develop → Propose → Close. Each stage represents a milestone in the sales process. The structure imposes discipline; the discipline produces reliable pipeline forecasts and useful sales analytics. Designing the right stages for your business is one of the most important sales operations decisions. ## The standard process Out-of-box business process flow for opportunities: - **Qualify** — early; determine if real opportunity. - **Develop** — discovery, requirements, solution shaping. - **Propose** — solution presented, pricing discussed. - **Close** — final negotiation, signature, won or lost. Each stage has required fields and exit criteria. **Customising the stages.** - Add stages specific to your sales motion. - Reorder. - Modify required fields. - Different processes per opportunity type. Most organisations customise the standard process to match their reality. **Common stage variations.** - **Discovery → Qualification → Value Proposition → ID Decision Makers → Perception Analysis → Proposal → Negotiation → Closed Won/Lost** — Miller Heiman style. - **Lead → MQL → SQL → Opportunity → Closed** — SaaS funnel. - **Discovery → Demo → Proposal → Contract → Won** — software sales. Choose the stages reflecting your actual process; force-fitting an unfamiliar model produces noisy data. **Stage entry / exit criteria.** - Each stage has required fields completed before exit. - Verifiable evidence — meeting notes, signed NDA, signed proposal. - Approval workflows for advancing stages. Without criteria, reps advance opportunities by feel — inflated pipeline. ## Probability per stage Each stage has a default probability: - Qualify — 10%. - Develop — 30%. - Propose — 60%. - Close — 90%. Probability × deal value = weighted pipeline; forecasting tool. ## Probability per opportunity Rep can override default for specific opportunity: - "This one's almost certain — set 85%." - "Customer pushing back — drop to 40%." Manual probability is judgement; over time, calibration improves. ## Forecast categories Beyond probability: - **Pipeline** — early; not committed. - **Best Case** — could win. - **Commit** — confident. - **Closed Won** — done. - **Omitted** — excluded from forecast. Categories drive forecast roll-up; rep updates as deal evolves. ## Time in stage A diagnostic metric: - How long does opportunity typically spend in each stage? - An opportunity stalled in Develop for 90 days needs attention. - "Stale opportunity" reports highlight these. Stage velocity is a leading indicator of pipeline health. **Win/loss tracking.** - When closing as Won — record won amount. - When closing as Lost — record reason (price, competitor, no decision). - Loss reasons drive coaching and product strategy. Loss reason data is gold; insist on capture. **Reopening opportunities.** - Lost deal sometimes comes back. - Reopen the opportunity vs create new? - Best practice: new opportunity, link to original for history. Maintains forecast clarity; original lost reason remains in record. ## Multiple processes Different opportunity types may need different stages: - **New business** — full discovery to close. - **Renewals** — shorter process; pricing focus. - **Upsell** — existing customer; relationship-driven. Multiple business process flows; opportunity type determines which applies. **Power Apps / model-driven UX.** - Business process flow visualised across top of opportunity form. - Click stage to navigate. - Required fields collapse / expand. - Visual progress indicator. This UX makes the process tangible to reps. **Stage gates and approvals.** - Some stages require approval to advance. - "Pricing exception" approval for non-standard discounts. - "Deal review" before contract. Stage gates enforce governance. **Reporting on stages.** - **Pipeline by stage** — coverage analysis. - **Conversion rate stage to stage** — bottleneck identification. - **Average days per stage.** - **Per-rep stage distribution.** Pipeline analytics decompose by stages. **Common pitfalls.** - **Stages too granular.** 12 stages; reps don't know which they're in. - **Stages too coarse.** 3 stages; no insight into where deals stall. - **Required fields ignored.** Reps skip fields; data thin. - **No stage discipline.** Opportunities advance by inertia; not by criteria met. - **Probability defaults trusted.** Real probability ignored; forecast wrong. - **Stale opportunities.** Long-stalled deals clogging pipeline. **Best practices.** - **5-7 stages typically.** Enough granularity, not overwhelming. - **Clear, verifiable exit criteria** per stage. - **Mandatory loss reason** on lost deals. - **Periodic pipeline hygiene** — close out stale. - **Manager review of stages** — coaching opportunity. **Pipeline hygiene rituals.** - **Weekly** — pipeline review meetings. - **Monthly** — stale opportunity cleanup. - **Quarterly** — process flow refinement. The rituals are where pipeline value materialises. ## Strategic positioning Opportunity stages are the operational language of sales. They structure rep activity, enable forecasting, drive coaching, and inform strategy. The setup is one-time; the operational discipline is daily. Mature sales organisations have process flows that match real sales motion, exit criteria that hold, and clean pipeline data they trust. Without these, the system holds opportunities but reveals little useful — pipeline becomes a graveyard rather than a forecast. --- # Organisation hierarchies in Dynamics 365 Finance and SCM How organisation hierarchies work in Dynamics 365 Finance and SCM — legal entities, operating units, departments, and the security and reporting they enable. Source: https://www.solvingdynamics365.com/guides/organization-hierarchies-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 The **organisation hierarchy** in Dynamics 365 Finance and Supply Chain Management is the structural backbone of how the system understands the customer's company structure. Security, financial dimensions, intercompany, reporting, workflow routing, and budgeting all hang off it. Getting it right at implementation pays back forever. **The building blocks.** - **Legal entity** — the unit of statutory accounting. One legal entity = one set of statutory books, one tax ID, one set of GL postings. A multinational with subsidiaries in five countries has at least five legal entities. - **Operating unit** — a non-legal-entity organisation unit used for management and operational segmentation: cost centre, value stream, business unit, department, team. Operating units don't have their own GL; they're an analytical / operational layer. - **Department** — a specific type of operating unit, commonly used as a default financial dimension. - **Cost centre** — another operating unit type, used for cost accumulation. - **Worker** — F&O's HR concept of an employee; workers map into operating units through positions. ## Hierarchies Organisations are connected through **hierarchies** — defined trees that express the relationship between organisation units. F&O supports **multiple parallel hierarchies** for different purposes: - **Legal hierarchy** — legal-entity ownership structure (parent owns subsidiary). Used for consolidation and intercompany. - **Reporting hierarchy** — management reporting structure (e.g. global → region → country → operating unit). May differ from the legal structure. - **Manager hierarchy** — HR-style management reporting structure (people report to people). Used for workflow assignment. - **Cost centre hierarchy** — budget and cost roll-up structure. The same operating unit can appear in multiple hierarchies with different parents. ## Why parallel hierarchies matter Legal structure (who owns what) is rarely the same as management structure (who is responsible for what), which is rarely the same as cost centre structure (where spend is tracked). Forcing all three into one tree creates compromise; parallel hierarchies let each view be honest. ## Effective dates Hierarchies are *time-aware*: an org unit can move between parents on a specific date, and historical reporting respects the structure at the historical date. Reorgs don't destroy history. ## Security through hierarchies Security roles can be scoped to specific org units in a hierarchy — "Cost Centre Manager for Operating Unit X and its descendants". The hierarchy is what makes scope feasible without listing every entity manually. ## Workflow assignment Approval routing uses the manager hierarchy to walk up the chain until an approver with sufficient authority is found. Configure the hierarchy realistically; gaps create routing failures. ## Financial dimensions and hierarchies Most customers configure key org units (departments, cost centres) as **entity-backed financial dimensions** — so transactions automatically tag the relevant org unit, and the hierarchy can roll up reporting. ## Consolidation Consolidation companies in F&O reference the legal hierarchy to determine subsidiary inclusion, ownership percentages, and currency translation. **Common design pitfalls.** - **Too few hierarchies.** Forcing legal, reporting, and cost views into one tree compromises all three. - **Too many hierarchies.** Beyond five or six, complexity overtakes value. - **Reorgs not handled with effective dates.** Just renaming or re-parenting in place destroys historical comparability. - **Department dimension not aligned with hierarchy.** Reporting roll-ups break when the dimension's parent doesn't match the hierarchy's structure. ## Maintenance Org hierarchies need maintenance as the business changes — quarterly review keeps them aligned. --- # Owner teams vs access teams in Dataverse How Dataverse's two team types differ — owner teams own records and have security roles, access teams grant ad-hoc record-level access — and when to use which. Source: https://www.solvingdynamics365.com/guides/owner-teams-vs-access-teams-in-dataverse Section: Customer Engagement / Dataverse platform Published: 2026-07-04 Dataverse supports two distinct team concepts — **owner teams** and **access teams** — that look similar but solve different problems. Understanding the distinction is essential for designing security cleanly. **Owner teams.** An **owner team** is a group of users that can own records and have security roles assigned. Owner teams behave like users in many ways: - A record can be **owned by an owner team** (the Owner field references the team, not a user). - The team has **security roles** assigned; team members inherit those roles when the team owns the record. - All team members get the same access — equal members. - Records owned by the team are queryable as "team-owned" in views and reports. Use cases: - A regional sales team collectively owns regional accounts and opportunities. Records routed to the team; any team member can work them. - A customer-service queue is owned by the queue team; members process from the shared queue. - A project team owns project-related records during the engagement; deactivated on project end. Owner team membership is stable — you add and remove members through team administration. Changes affect all team-owned records' visibility for added / removed members. **Access teams.** An **access team** is a lightweight, dynamic group used for **ad-hoc record-level access**. Unlike owner teams: - Access teams **can't own records** directly. - Access teams are typically **created per record** dynamically. - Access teams grant **specific record-level privileges** (read, write, append, share) without granting broader access. - Access teams are managed through **access team templates** that define what privileges members get. The classic use case: a sales rep adding ad-hoc collaborators to a specific opportunity. The rep adds three colleagues to the opportunity's access team; those three get read / append access just to that opportunity for the duration. When the opportunity closes or members leave the team, access is removed. ## Auto-created access teams Access teams are commonly **auto-created** when a record's "team" subgrid is populated: 1. On the opportunity form, a "Sales Team" subgrid lists users with access. 2. Adding a user to the subgrid (with an access role: "Account Manager", "Technical Specialist", "Executive Sponsor") triggers: - The access team for that opportunity is created (if not already). - The user is added with the appropriate role's privileges. 3. The user gains record-level access to that specific opportunity. The user doesn't need a broad security role granting access to all opportunities — they have access to just this one through the access team. **Comparison.** | Aspect | Owner team | Access team | |---|---|---| | Owns records | Yes | No | | Security roles | Yes (assigned to team) | No (roles per template) | | Visibility | Records owned by team are team-visible | Records shared via access team are member-visible | | Membership stability | Stable | Often dynamic per record | | Use case | Shared ownership of many records | Ad-hoc per-record collaboration | **Choosing.** - **Owner team** when a group of users collectively owns a collection of records (regional teams, service queues, project teams). - **Access team** when an individual record needs additional access beyond its primary owner (deal team, case escalation, project consultant). Both can be used in the same environment for different scenarios. ## Microsoft 365 group integration Owner teams can be linked to **Microsoft 365 groups** — sync membership from M365 group to Dataverse owner team. Useful when team composition is already managed in M365 (Teams, SharePoint, Exchange group structures). ## Manager and position hierarchies Owner teams don't replace hierarchical security; they coexist. A user might have: - Security role X (granting BU-scoped access). - Owner team Y membership (granting team-scoped access). - Hierarchical security depth 2 (granting access to direct and indirect reports' records). The user's effective access is the union of all three. **Limits.** - **Access team templates** are bound to a specific table — you can't share one template across many tables. - **Auto-created access teams** can produce many small access teams over time; Dataverse cleans up automatically but heavy use creates schema clutter. - **Owner teams' members can't easily be drilled out** for record-by-record access — it's all-or-nothing. **Common pitfalls.** - **Using owner teams for ad-hoc collaboration** — produces many narrow owner teams; admin nightmare. Use access teams. - **Using access teams for systematic ownership** — auto-creation overhead, no central security-role assignment. Use owner teams. - **Manager hierarchy plus owner team** — overlapping access can be confusing; users see the same record via multiple paths. ## Operational reality Modern Dynamics 365 implementations use both: owner teams for systematic ownership patterns, access teams for ad-hoc per-record collaboration. The two together enable rich security models without forcing every user into restrictive global roles. ### Frequently asked questions **What is the difference between an owner team and an access team?** An owner team can own records and carries security roles that its members inherit — stable membership, systematic ownership. An access team cannot own records; it grants specific privileges on one record to a dynamic set of collaborators through an access team template. **When should I use an access team?** For ad-hoc per-record collaboration — a deal team on an opportunity, an escalation on a case. Members get read, write, or append on that record only, without a broad security role granting access to every opportunity. **How are access teams created automatically?** Through a team subgrid on the form backed by an access team template. Adding a user to the subgrid creates the record's access team if needed and grants that user the template's privileges. **Can owner teams sync with Microsoft 365 groups?** Yes. An owner team can be linked to a Microsoft 365 group so membership managed in Teams, SharePoint, or Exchange flows into Dataverse. **Do teams replace hierarchical security?** No. A user's effective access is the union of security roles, owner team membership, access team grants, and hierarchical security depth — they coexist. --- # Page personalization in Business Central How Business Central users personalize pages — column choices, layouts, FactBox visibility, and the line between personalization, customization, and extension. Source: https://www.solvingdynamics365.com/guides/business-central-page-personalization Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-25 Business Central users can reshape the pages they work with daily — hiding columns they don't need, moving FactBoxes, adjusting layouts, all without admin or developer involvement. This **personalization** is per-user, persistent, and one of the underrated productivity features in BC. **What's personalizable.** - **Column visibility and order** in list pages. - **Field visibility** on card pages. - **FactBox visibility** on the right pane. - **FastTabs collapse / expand** default state. - **Action visibility** in the ribbon. A user removing 10 unused columns from the Sales Orders list page sees only what they care about. **How to personalize.** 1. **Settings → Personalize** (or top-right gear icon). 2. The page enters personalization mode — controls highlight. 3. Click on items to hide / show / move. 4. **Clear personalization** to revert. 5. Personalization saved per user, per page, per role. **Personalization vs customization vs extension.** - **Personalization** — per-user; the user's own view. - **Customization** — per-role / per-company; visible to all users with that role. - **Extension** — per-tenant or app-source level; modifies the application. Three layers, three audiences, three lifecycles. ## Customizing for a role Admins can: - Use **Customize** mode to change defaults for a role centre. - The customization applies to all users with that role. - Users can still personalize on top of customizations. The layering: extension defines defaults → role customization overrides → user personalization further overrides. **Profile management.** - Each user assigned a **Profile** (Role Center). - Profiles can be customized for the company. - New users get the profile's customized state as their default. For organisations with distinct roles (warehouse worker vs finance manager), profile-based customization standardises starting state per role. **Configuring page parts visibility.** - Some FactBoxes are always heavy (related entries with summary). Hiding them improves page load. - Some users prefer wider main area, less side content. Personalization gives each user control without affecting peers. **Clearing all personalization.** - **Clear personalization** action removes user's per-page personalizations. - Useful when a user has accidentally hidden critical fields. - Admins can clear personalizations for any user. ## Reset application area Application areas are a related concept: - **Basic** — minimal feature set. - **Essential** — standard. - **Premium** — all features. Set on the **Company Information** page; affects which fields and pages appear. Different from personalization but conceptually similar — controls what's visible. ## Personalization in mobile apps The BC mobile app has more limited personalization: - Some column visibility. - Less rearrangement. - Reflects desktop personalization where possible. **Common pitfalls.** - **Critical fields hidden.** User can't find them; thinks system is broken. - **Personalization across role changes.** User moves to new role; their personalizations from old role linger. - **No reset training.** Users don't know they can clear; suffer broken layouts. - **Mistaking personalization for customization.** Changes apply only to one user; others ask why their view differs. ## Audit considerations Personalization changes aren't typically audit-tracked — it's user UI state. For regulated environments, customizations and extensions are tracked; personalization isn't. ## Strategic positioning Personalization is a quiet productivity feature. Mature BC deployments train users to use it deliberately — making the system feel tailored to each role without admin overhead. The investment is brief training; the payback is daily productivity. Underused in most deployments; worth surfacing as part of onboarding and ongoing tips. --- # Parallel currencies in Dynamics 365 Finance How Dynamics 365 Finance handles parallel reporting currencies — accounting currency, reporting currency, and tax currency, with the consolidation implications. Source: https://www.solvingdynamics365.com/guides/parallel-currencies-in-finance-and-operations Section: Finance & SCM / Finance Published: 2026-05-01 Dynamics 365 Finance handles multi-currency natively, and where Business Central supports an additional reporting currency, F&O takes it further with up to four parallel currencies on every transaction. Understanding which currency is which prevents many of the most embarrassing reporting errors at consolidation. **The currency dimensions of a transaction.** - **Transaction currency** — the currency the transaction itself was conducted in. A purchase invoice from a German supplier is in EUR. - **Accounting currency** — the legal entity's primary statutory currency. The Spanish subsidiary's accounting currency is EUR; the US subsidiary's is USD; the Swedish subsidiary's is SEK. Every GL posting in the entity is stored in accounting currency. - **Reporting currency** — a second parallel currency to accounting currency, typically the parent group's currency. Configured per legal entity. Every GL posting is also stored in reporting currency at the same time, using rates from the configured exchange-rate type. The result: a Spanish subsidiary's GL can produce reports in both EUR (statutory) and USD (group reporting) without consolidation FX translation. - **Tax currency** — for some country localizations, statutory reporting requires a third currency layer (e.g. local-tax-authority currency in a foreign-currency-economy country). Configured per legal entity. ## Exchange-rate types Different transactions can use different rates. F&O has multiple **exchange rate types** — Spot, Average, Period-end, Budget, etc. Each transaction type can be configured to use a specific rate type for accounting-currency conversion and a different rate type for reporting-currency conversion. ## The exchange-rate table Rates are maintained per rate type, per currency pair, per starting date. Manual entry, file import, or service-based feeds (Microsoft ships connectors for some central banks, partner ISVs publish more). Rates have starting dates so historical postings re-translate consistently. ## Revaluation Period-end revaluation runs separately for accounting-currency open balances (e.g. open AR/AP in foreign currency converted at period-end rate to accounting-currency) and for reporting-currency revaluation (the same balances re-translated to reporting currency at the new rate). ## Realised FX When a foreign-currency invoice is settled at a different rate, realised FX gain/loss posts. F&O posts it in both accounting and reporting currency, with the correct calculation in each. ## Consolidation When the parent consolidates subsidiaries, two options: - **Consolidation in F&O.** Source companies feed their trial balances (in their accounting currency, often *plus* their reporting currency for the parent's view) into a designated consolidation company. F&O applies currency translation at consolidation-rate types (current rate, historical rate, average rate as configured), eliminations, and adjustments to produce group financials. - **Consolidation outside F&O.** Larger groups feed F&O data into a dedicated consolidation tool (OneStream, Workiva, Hyperion, SAP BPC) for sophisticated consolidation logic. F&O acts as the source. ## Subsidiaries with parent reporting currency in operating data A common pattern: every subsidiary's reporting currency is set to the parent's group currency. Each subsidiary's GL is queryable directly in group currency without consolidation. Operational dashboards in Power BI work across the group without complex transformations. **Common pitfalls.** - **Setting reporting currency only at the end of year 1.** Now reporting currency starts from year 2, leaving year 1 with no historical group-currency baseline. Set reporting currency from go-live. - **Inconsistent exchange-rate types.** Different rate types on different transactions produce non-reconcilable totals. Standardise. - **Manual rate maintenance.** Forgotten rate updates cause posting failures or wrong rates. Use automated rate feeds. --- # Patient engagement with Customer Insights – Journeys in healthcare How healthcare organisations use Dynamics 365 Customer Insights – Journeys for patient outreach. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-healthcare-patient-engagement Section: Industries / Healthcare & life sciences Published: 2026-09-02 Hospitals and health systems already send appointment reminders from their electronic health record. So the first question for a patient-engagement project on Dynamics 365 **Customer Insights – Journeys** is not "can it send reminders" but "what should it do that the EHR does not". Answered well, Journeys becomes the outreach layer for population health, care-gap closure, service-line growth, and post-discharge follow-up. Answered badly, it duplicates the EHR's reminders with a second consent problem. This guide covers the use cases that justify the product in healthcare, and the constraints that PHI imposes on how it is used. ## Use cases that earn their place - **Preventive care and care-gap outreach.** Patients due for a screening, a vaccination, or a chronic-condition check, identified from claims or EHR data, receive a sequence of messages with a scheduling link. The EHR can generate the list; it is poor at multi-step, multi-channel sequences with response handling. - **Post-discharge and post-procedure follow-up.** A journey triggered by a discharge event sends instructions, checks in at intervals, and escalates a concerning response to a care coordinator's queue in Customer Service. - **Service-line and access marketing.** New clinic openings, telehealth availability, and health-education content to consenting community members — closer to conventional marketing, and where the healthcare-specific rules bite hardest. - **Referral and provider engagement.** Outreach to referring physicians is a B2B journey with none of the PHI constraints, and often the fastest win. - **Patient experience follow-up.** Surveys after visits through Customer Voice, feeding a satisfaction measure and an alert on low scores. This is not a substitute for regulated patient-experience surveys such as CAHPS, which have their own vendors and rules. Appointment reminders belong in the EHR unless the organisation has a specific reason — multi-channel preference handling, integrated rescheduling in Customer Service — to move them. ## The Cloud for Healthcare layer Microsoft's **Cloud for Healthcare** includes a patient-outreach capability built on Customer Insights – Journeys and the healthcare data model, plus the connectors that bring FHIR data into Dataverse through Azure Health Data Services. It adds patient, encounter, and condition tables with their healthcare semantics, and templates for common journeys. It is worth adopting for the data model alone, because it prevents each project inventing its own patient table. The [Cloud for Healthcare](https://www.solvingdynamics365.com/guides/microsoft-cloud-for-healthcare) guide covers what it adds and what it costs. ## Consent is not a checkbox HIPAA's marketing rules and state laws distinguish treatment and care-coordination communications (permitted without authorisation) from marketing (generally requiring authorisation, with narrow exceptions). The TCPA governs automated SMS and calls separately. Journeys' **consent centre** models consent by purpose and topic per contact point, which maps well onto this if the purposes are defined properly: - A **treatment and care communications** purpose, defaulted on for patients, covering follow-up and care-gap outreach. - A **health and wellness marketing** purpose, opt-in only, for service-line and education content. - **Channel-level consent** for SMS separate from email, with the SMS keyword opt-out handled by the platform. Compliance and legal decide which journeys fall under which purpose; the marketing team should not be making that call at journey-design time. Encode the decision as a required field on the journey's approval. ## PHI in messages, segments, and triggers The presence of a diagnosis in a message, a segment name, or a trigger payload makes it PHI, and the organisation should treat the whole Journeys environment as a PHI system under its business associate agreement. - **Messages** reference the action, not the condition. "You are due for your annual eye check" is better than a message naming the reason. - **Segment names and descriptions** are visible to every marketer in the environment. A segment called by its clinical criteria has just disclosed those criteria to everyone with access. Name by campaign, keep criteria in a governed field. - **Custom triggers** carry attributes into the journey. Send identifiers and the minimum needed to branch, and keep clinical detail in the source system. - **Dynamic content** from patient records is a common leak: a personalised block that pulls a condition field into an email body is PHI in transit through the email provider. - **Attachments and links** should point to the patient portal, where authentication protects the content, rather than embedding results or documents. The [HIPAA-aware Customer Service](https://www.solvingdynamics365.com/guides/dynamics-365-for-healthcare-hipaa-customer-service) guide covers the security roles, auditing, and retention that apply to the same environment. ## Channels and triggers Email and SMS are the working channels. SMS in Journeys runs through supported providers — Azure Communication Services and third-party carriers — and the organisation needs a compliant sender registration in its country. Push notifications require a mobile app. Voice is not a Journeys channel; outbound calls are Customer Service or a contact-centre product. Triggers come from Dataverse events (a discharge record created, a care-gap record updated) or from custom triggers raised by integration — a FHIR subscription on the EHR firing an Azure Function that raises the trigger. Batch-based journeys from segments refreshed on a schedule are simpler and usually good enough for care-gap outreach; event-based journeys are for the follow-up scenarios where timing matters. ## Measurement Journeys reports opens, clicks, and goal attainment. For healthcare the goal is downstream: the screening booked, the follow-up completed, the readmission avoided. Closing that loop means the outcome event flowing back — an appointment created in the EHR, a care-gap closed — either into Dataverse for the journey's goal or into Power BI joined on patient identifier. Without it, the programme reports engagement rates to a clinical leadership that does not care about engagement rates. ## What stays with partners and the EHR Patient portals, appointment self-scheduling, and clinical messaging are EHR functions or specialist products; Journeys links to them. Identity verification for patients accessing content is a portal or Entra External ID problem. Consent capture at registration usually happens in the EHR and flows into Journeys, which means an integration that keeps consent in sync in both directions — the part of these projects most often left until last and most often the cause of the first complaint. --- # Payment journals deep dive in Business Central How the payment journal works in Business Central — suggesting vendor payments, applying entries, payment proposals, payment methods. Source: https://www.solvingdynamics365.com/guides/payment-journals-deep-dive-in-bc Section: Business Central / Finance & accounting Published: 2026-05-01 The **payment journal** is the workhorse of AP cash outflow in Business Central. It batches vendor payments into a single review-and-post cycle, applies them against open invoices, generates payment files for the bank, and writes the bank ledger entries that flow into reconciliation. Most BC finance teams run it once or twice a week. ## Where it lives Navigation: `Finance → Payment Journals` or via search. The page shows lines like a journal — each line is one payment (one vendor, one amount, one bank account, one application). The template `PAYMENT` and a batch (often `WEEKLY` or `DAILY`) determine the posting setup. ## Suggesting payments The `Suggest Vendor Payments` action pre-fills the journal with proposed payments. Parameters: - **Last Payment Date** — only invoices due on or before this date. - **Find Payment Discounts** — include payment-discount lines for invoices within the discount window. - **Available Amount (LCY)** — cap by cash available. - **Posting Date** — the payment date. - **Starting Document No.** — the number series start for posted payments. - **Bank Payment Type** — Manual, Computer Check, Electronic Payment, etc. - **Bal. Account No.** — the bank account to draw from. - **Summarise per Vendor** — one line per vendor totalling invoices, vs. one line per invoice. The action populates the journal with a draft batch the finance team then reviews and adjusts. ## Application Each payment line carries `Applies-to Doc. Type` and `Applies-to Doc. No.` — pointing to the invoice being paid. Summarised lines use `Applies-to ID`, with multiple invoices flagged. Without an application, the payment posts as an unapplied vendor payment that has to be reconciled later. ## Payment methods The vendor card's **Payment Method Code** drives default behaviour: - **CHECK** — a printed check; posts via Check Printing. - **BANK** — an electronic bank transfer (ACH, BACS, SEPA, depending on locale). - **CASH** — manual. Payment methods also drive which bank account format applies and whether the export goes through SEPA, NACHA, EFT files. ## Bank Payment Type A second axis on the line: - **Manual Check** — physical check, no printing through BC. - **Computer Check** — BC prints the check. - **Electronic Payment** — generates an electronic export file. - **Electronic Payment-IAT** — international ACH. ## Generating bank files With `Bank Payment Type = Electronic Payment`, the `Export` action on the payment journal calls a **Data Exchange Definition** specific to the bank account's payment export format and produces the file. SEPA Credit Transfer (Europe), NACHA (US), BACS (UK) are the common ones; per-country localisations add others. The file is uploaded to the bank portal or exchanged via a bank connector. ## Voiding before posting Until the journal posts, lines are mutable. If a vendor calls to dispute an invoice mid-cycle, the line can be deleted. After posting, the cycle is to void/reverse the payment (creates a counter entry). **After posting.** - **Bank Account Ledger Entry** is written reducing cash. - **Vendor Ledger Entry** is written (negative — paying down balance). - **Detailed Vendor Ledger Entry** records the application. - **G/L Entry** captures the journal effect: debit AP, credit Bank. - **Posted Payment Reconciliation Lines** seed the bank reconciliation. ## Payment discounts When an invoice carries a payment discount and the payment lands within the discount window, the payment journal calculates the discount as a separate line (vendor discount G/L account). Vendors get a small `Pmt. Disc. Tolerance Date` field for grace. Done well, payment discounts often outweigh interest cost on the cash; mature AP automates the analysis. **Common pitfalls.** - **Unapplied payments.** Forgetting to apply leaves a credit on the vendor account; reconciliation gets messy. - **Wrong posting date.** A payment dated in a closed period either fails or posts into the next; closing schedule must lead AP. - **Bank file rejected.** Bank returns the file; need to void posted payments, fix bank info, re-run. Test bank exports with a real (small) payment before launching electronic payments. - **Currency mismatch.** Payment in EUR against an invoice in USD with no FX setup → posting fails. Always set up cross-currency posting groups. - **Tolerances misconfigured.** Payment discount tolerances allow partial discounts on slightly late payments. Set them once, document them. ## Operational rhythm A high-volume AP shop runs the payment journal twice weekly. Mature teams run a "dry run" earlier to identify problems (missing approvals, blocked vendors, currency issues) and fix them before the production run. --- # Payment terms and methods in Business Central How Business Central models payment terms, payment methods, payment discounts, and the integration with bank file generation. Source: https://www.solvingdynamics365.com/guides/payment-terms-and-methods-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 Two pieces of master data govern how Business Central handles customer and vendor payments: **payment terms** (when payment is due and what discount applies for early payment) and **payment methods** (how the payment is made). Configured well, the two collapse what would otherwise be manual reasoning into automatic calculation on every transaction. ## Payment terms A **payment term** carries: - **Due Date Calculation** — a formula like `30D` (30 days), `1M` (one month), `CM` (current month-end), `1M+10D` (month-end plus 10 days). Applied to the document date to compute the due date. - **Discount Date Calculation** — formula for the *early payment* discount cutoff date. - **Discount %** — the percentage discount earned if paid by the discount date. - **Calculate Pmt. Disc. on Cr. Memos** — whether the discount applies to credit memos as well as invoices. Common payment terms: - **Net 30** (`30D`, 0%) — pay within 30 days, no discount. - **2/10 Net 30** (`30D`, 2%, discount date `10D`) — pay within 10 days for 2% off, otherwise 30 days net. - **End of Month + 30** (`CM+30D`) — pay 30 days after the month-end of the invoice date. - **Cash on Delivery** (`0D`) — payment with delivery. Customers and vendors carry a default payment term that flows onto each document; users can override at the line. ## Payment methods A **payment method** carries: - **Code and Description** — Bank Transfer, Cash, Cheque, Direct Debit, Credit Card, Bank File. - **Balancing Account** — the GL account where the offset posts when a sales invoice with this method is posted. For "Cash" payment, the invoice posts both the AR and the cash GL account in one step; for "Bank Transfer", AR remains open until the bank receipt is recorded separately. - **Bal. Account Type** — GL Account or Bank Account. - **Direct Debit-related** properties — pre-authorisation, mandate references. - **Payment Export properties** — controlling which bank file format applies. ## Combined effect A sales invoice posted with payment term "Net 30" and payment method "Cash" creates the AR ledger entry and immediately posts the cash receipt. The same invoice with payment method "Bank Transfer" creates only the AR entry; the receipt comes later when the bank statement is reconciled or the payment journal posts. ## Payment journals Vendor payments are typically processed through the **payment journal** — a batch of payment lines selected from open vendor invoices, filtered by due date or payment method, generating a bank file (SEPA, ACH, BACS, Norwegian KID, Swedish SUS, etc.) for upload to the bank. The journal posts the payment, applying it to the original invoices and updating bank balances. ## Suggest Vendor Payments A built-in routine reviews open vendor invoices and proposes which to pay, based on filters: payment method, due date, available cash. The user reviews and adjusts before posting. ## Customer Direct Debit A separate process for **customer direct debits** generates pre-authorised bank-debit files for customers on direct-debit payment methods. ## Configuration discipline Standardise payment terms — a tenant rarely needs more than 8–12 distinct terms. Same for payment methods — bank transfer, direct debit, credit card, cash, and a few exceptions cover most operations. Resist proliferation. --- # PCF controls in Power Apps What Power Apps Component Framework (PCF) controls are, when to use them, and the developer toolchain to build, package, and deploy. Source: https://www.solvingdynamics365.com/guides/pcf-controls-in-power-apps Section: Power Platform / Power Apps Published: 2026-05-01 The **Power Apps Component Framework (PCF)** lets developers build custom UI controls in TypeScript and ship them as reusable components inside model-driven apps and canvas apps. They're how you cross the boundary between Power Apps's built-in controls and pixel-perfect custom UI, without leaving the platform. ## What PCF is A PCF control is a self-contained TypeScript bundle (HTML + CSS + TS, optionally with React inside) that the Power Apps runtime hosts inside a form, view, or canvas screen. The control exposes input parameters (bound to Dataverse columns or canvas variables), receives a `context` object with data and APIs, renders UI, and writes back via the platform's APIs. To the user, the control feels native; to the platform, the control is a packaged solution component. **When to use a PCF control.** - **Model-driven app forms** where the default field controls don't fit: a slider, a colour picker, a custom rating widget, a map embedding, a barcode scanner, a Gantt chart, a kanban board. - **Model-driven views** where the standard grid isn't enough: a custom card view, a calendar view, an editable spreadsheet view. - **Canvas apps** where the built-in controls don't deliver a needed UX pattern. - **Reusable across many apps and customers** — author once, package once, install many times. ## When not to use PCF Simple display tweaks belong in form configuration. Complex business logic belongs in JavaScript event handlers, Power Automate, or Dataverse plug-ins. PCF is specifically for *UI components* that present and capture data in non-standard ways. **The toolchain.** - **Power Platform CLI (`pac`)** — the command-line tool for scaffolding, building, packaging, and pushing PCF projects. - **Visual Studio Code** — the editor of choice, with TypeScript and React extensions. - **Node.js** — required for the build. - **TypeScript** — the language. Microsoft provides type definitions for the PCF API. ## Project structure A PCF project contains: - `ControlManifest.Input.xml` — the manifest declaring the control's name, input parameters, output events, and metadata. - `index.ts` — the entry point implementing `IInputs`/`IOutputs` interfaces with `init`, `updateView`, `getOutputs`, `destroy` methods. - React or vanilla DOM code rendering the actual UI. - CSS for styling. ## Packaging and deployment `pac pcf init` scaffolds a project; `pac pcf push` builds and pushes to a Dataverse environment for testing; `pac solution add-reference` adds the PCF project to a solution; the solution exports as managed and installs into target environments. Source control lives in Git. ## Performance PCF controls run client-side in the user's browser. Heavy rendering or large data fetches degrade the form load time. Use virtualisation for long lists, lazy-load images, batch Dataverse Web API calls. Profile in Chrome DevTools. ## Distribution PCF controls can be shipped as part of an ISV's AppSource solution, made internal to one customer through a custom solution, or open-sourced (the **PCF Gallery** at pcf.gallery is a community-maintained catalogue of free PCF controls). **Limits.** - PCF controls don't have access to all Dataverse SDK methods; the `context.webAPI` is the standard data path. - Some browser APIs (clipboard, geolocation) need permissions. - Authoring PCF requires developer skill — this is genuine code, not low-code. ## Operational reality A small PCF library — 5 to 15 controls — covers most customers' bespoke UI needs without ever requiring more. --- # Per-tenant extensions vs AppSource When to ship a Business Central extension as a per-tenant (PTE) vs publishing to AppSource — distribution, validation, and lifecycle differences. Source: https://www.solvingdynamics365.com/guides/per-tenant-extensions-vs-appsource Section: Business Central / AL & development Published: 2026-05-01 Business Central extensions ship via two paths: a **per-tenant extension (PTE)** delivered directly to one customer's tenant, or a **published app on AppSource** delivered to the broader market. The same AL source can produce either; what differs is the lifecycle, validation, and economics around it. ## Per-tenant extensions A PTE is uploaded to one specific BC environment from the admin centre. The owner can be the customer's internal team or a partner working for that customer. PTEs are great for organisation-specific customisations — bespoke fields, custom integrations, unique workflows — that aren't reusable across multiple customers. They don't go through Microsoft's marketplace validation, so they ship as fast as you build them. They're invisible to other tenants. ## Trade-offs of PTE Speed, freedom from marketplace rules, and full ownership. But: you carry every upgrade burden yourself. Each Business Central release wave can break a PTE; the partner has to recompile it against the new platform and republish. Microsoft does not pre-test PTEs before the update window. ## AppSource apps An AppSource app is submitted to Microsoft for **validation** (technical, security, performance, and content review), then published in the marketplace, where any BC customer can install it. AppSource is the only way to *sell* a packaged Business Central extension to multiple customers. ## The economics Microsoft makes AppSource apps **transactable** — billed through Microsoft's commerce platform, with revenue share. ISVs can also use *contact me* listings for sales handled offline. The economics work because the cost of validation and the platform fee are amortised across many tenants. ## The lifecycle AppSource apps get **early access to preview builds** and Microsoft pre-tests them against upcoming release waves, flagging breaking changes well before customers update. That ongoing certification is the biggest operational reason to publish to AppSource even if you only have one initial customer. ## Choosing Build as a PTE when the code is genuinely one-customer-only. Build for AppSource when you expect to deliver the same functionality across multiple tenants, when the code is generic enough to package, or when you want Microsoft's compatibility safety net. ## Hybrid Many customer projects combine a small PTE for bespoke needs with several AppSource apps from ISVs for localizations, integrations, and vertical features. This is the normal shape of a Business Central solution. ### Frequently asked questions **What is a per-tenant extension?** An AL extension uploaded to one specific Business Central environment from the admin centre — for customer-specific fields, integrations, and workflows. It skips Microsoft's marketplace validation, ships as fast as you build it, and is invisible to other tenants. **What does AppSource validation give me?** Microsoft pre-tests AppSource apps against upcoming release waves and gives ISVs early access to preview builds, so breaking changes surface before customers update. Per-tenant extensions get no such safety net — you recompile and republish yourself each wave. **Can I sell a Business Central extension without AppSource?** Not as a packaged product to multiple customers. AppSource is the only marketplace route; Microsoft makes apps transactable with revenue share or lets ISVs use contact-me listings for offline sales. **What does a typical customer solution look like?** A small per-tenant extension for bespoke needs plus several AppSource apps from ISVs for localisations, integrations, and vertical features. That hybrid is the normal shape of a Business Central solution. --- # Performance management in Dynamics 365 Human Resources How D365 HR supports performance reviews — goals, journals, reviews, calibration, and the integration with development planning. Source: https://www.solvingdynamics365.com/guides/dynamics-365-hr-performance-management Section: Customer Engagement / Human Resources Published: 2026-05-01 Performance management is one of HR's most strategically important functions and one of its most disliked. **D365 Human Resources** provides goal tracking, performance journals, review workflows, and calibration tools. The tooling is reasonable; the value depends on how leadership wires it into ongoing management cadence rather than treating reviews as annual paperwork. **Performance entities.** - **Goal** — what the employee aims to accomplish in a period. - **Performance journal** — ongoing notes by employee or manager (positive feedback, areas for improvement, evidence). - **Performance review** — periodic assessment (annual, semi-annual, quarterly). - **Calibration** — leadership-level comparison across employees to standardise ratings. - **Development plan** — tied actions for career growth. ## Goals Two perspectives: - **Individual goals** — specific to the employee. - **Cascade from organisational goals** — strategic initiatives broken into team and individual contributions. Goals have: - **Objective statement.** - **Measurable outcome** — quantitative if possible. - **Due date.** - **Status** — Not Started, In Progress, At Risk, Completed. - **Weight** — % of overall performance attributed. - **Linked org goal** — for cascade traceability. OKR-style frameworks fit naturally in this model — each goal is an Objective with measurable Key Results. **Goal cadence.** - **Annual goal setting** — at start of performance year. - **Quarterly check-ins** — review progress, adjust if conditions changed. - **Year-end review** — assess outcomes. Goals that don't change after being set are usually unrealistic. Mid-year reassessment is healthy. ## Performance journal A timestamped log of evidence: - Employee adds entries reflecting accomplishments. - Manager adds entries with observations. - Peer feedback gathered (optional). - Customer feedback (if applicable). The journal is the antidote to "recency bias" in annual reviews — without journaling, only the last 6 weeks are remembered. **Review cycles.** - **Self-assessment** — employee fills out review form. - **Manager assessment** — manager fills out review form. - **Discussion meeting** — review conversation. - **Sign-off** — both parties acknowledge. - **HR submission** — final record submitted. Variations: skip-level review (manager's manager input), 360-degree (peers, direct reports). ## Rating scales Common patterns: - **5-point scale** — Below Expectations / Meets / Exceeds / Far Exceeds / Outstanding. - **3-point** — Below / Meets / Exceeds. - **No rating** — narrative-only. Configuration determines the scale and the labels. ## Calibration A practice where leadership reviews proposed ratings across the team: - **Spread the ratings** — ensure not everyone is "Exceeds." - **Compare across managers** — one manager's 4 is another's 3. - **Justify outliers** — top 10% and bottom 10% specifically discussed. - **Adjust pre-conversation** — calibrated ratings used in the actual review. Calibration is a process, not a system feature, but D365 HR can capture pre- and post-calibration ratings for audit. ## Compensation linkage Performance often drives: - **Merit increases** — base salary adjustments by performance. - **Bonus payouts** — bonus tied to performance score. - **Promotion eligibility** — sustained high performance. Configurable rules link rating tiers to comp outcomes; HR reviews and approves. ## Development plans Beyond rating, what the employee should work on: - **Skills to develop** — specific competencies. - **Learning resources** — courses, mentoring, projects. - **Stretch goals** — assignments outside normal scope. - **Career path** — roles toward which the employee is developing. Linked to LinkedIn Learning, Microsoft Learn, internal LMS for content access. ## Continuous feedback Modern practice moves beyond annual reviews: - **Weekly 1:1s** — manager and employee check in. - **Monthly mini-reviews** — light touch on goals. - **Real-time recognition** — peer-to-peer kudos. D365 HR supports lightweight continuous feedback through performance journal entries and Microsoft Viva integration. ## Microsoft Viva integration Viva Goals, Viva Learning, Viva Insights complement D365 HR: - **Viva Goals** — modern OKR platform; can sync with D365 HR goals. - **Viva Learning** — content delivery; tracks completions linked to development plans. - **Viva Insights** — productivity insights; private to employee. The Viva ecosystem is Microsoft's broader employee experience play; D365 HR is the system of record for HR data. **Reporting.** - **Review completion rate** — % of employees with reviews completed on time. - **Rating distribution** — across departments, managers. - **Goal achievement rate** — % of goals met. - **High-potential pool** — employees identified for growth. - **At-risk** — performance trending down. **Common pitfalls.** - **Goals set once, never revisited.** Forgotten until year-end. - **No journaling.** Year-end review based on recent memory only. - **Ratings inflation.** Everyone rated "exceeds"; calibration absent; signal lost. - **Review fatigue.** Quarterly reviews become checkbox; quality drops. - **Comp disconnected.** Performance ratings don't flow to comp decisions; demotivates. - **No development action.** Review identifies development needs; nothing happens; same problems next year. ## Operational rhythm Goal setting at year start; quarterly check-ins; mid-year informal review; annual formal review; comp decisions tied to outcomes. The rhythm is human — the system supports it, doesn't drive it. Effective performance management is a leadership behaviour, not a software feature. ## Strategic positioning Performance management is where employee development, retention, and organisational capability meet. Done well, it's the engine of growth; done badly, it's a demoralising bureaucratic exercise. D365 HR provides the framework; the work of making it valuable belongs to leaders and HR business partners. The system can't substitute for the conversations. --- # Periodic processes in Dynamics 365 Finance and SCM The recurring routines that drive month-end, year-end, and ongoing operations in F&O — period close, posting flushes. Source: https://www.solvingdynamics365.com/guides/periodic-processes-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 Dynamics 365 Finance and SCM runs a substantial library of **periodic processes** — batch routines that handle period close, post pending transactions, recalculate balances, generate statutory reports, and maintain operational data. Knowing which to run when separates well-operated tenants from chaotic ones. ## The four cadences Most periodic processes fall into one of four cadences: - **Daily** — operational continuity routines. - **Weekly** — operational hygiene and lighter reconciliations. - **Monthly** — period close. - **Quarterly / Annually** — statutory and long-cycle. **Daily processes.** - **Master planning runs** — depending on the operation, planning runs nightly to refresh supply against demand. - **Cost recalculation (incremental)** — keep inventory costs current. - **Currency exchange rate import** — fetch the day's rates. - **Sales / purchase order picking and shipping** — ongoing operations. - **Bank statement imports** — for tenants with bank feeds. - **Job queue health checks** — review failed batches. **Weekly processes.** - **Customer / vendor balance reconciliation** — verify sub-ledger to GL match. - **Bank reconciliation** — for tenants without daily feeds. - **Production order closures** — close finished production orders for cost realisation. - **Project WIP recalculation** — keep project cost accruals current. - **Reservations review** — clean up stale reservations on cancelled orders. ## Monthly processes — the period close The full month-end sequence: 1. **Cut-off and accrual posting** — record accruals for goods received but not invoiced, services consumed but not billed, payroll provisions. 2. **AP / AR reconciliation** — sub-ledger to GL match. 3. **Bank reconciliation** — all active bank accounts. 4. **Foreign currency revaluation** — period-end rate revaluation of open foreign-currency balances. 5. **Fixed asset depreciation** — calculate and post period depreciation. 6. **Inventory closing or recalculation** — reconcile inventory costs. 7. **Project recognition** — post project revenue and cost recognition per the configured rules (percentage-of-completion, milestones). 8. **Cost accounting allocation** — run primary, secondary, tertiary allocations. 9. **VAT / sales tax settlement** — calculate and post period VAT. 10. **Intercompany reconciliation** — verify intercompany balances match across legal entities. 11. **Period-end reporting** — financial reports, management dashboards. 12. **Period closure** — lock the period for posting. **Quarterly / annual processes.** - **Statutory reporting** — country-specific VAT returns, intrastat, SAF-T, electronic invoicing summaries. - **Year-end close** — roll P&L to retained earnings, close fiscal year, open new year. - **Annual cost roll** — refresh standard costs for the new year. - **Audit data exports** — auditor data dumps. - **Asset book reconciliation** — verify FA register against GL. - **Inventory full physical count** — for organisations not running cycle counting. ## Batch framework Most periodic processes run through F&O's **batch framework** — configurable jobs with start times, recurrence, parallel batch groups, and retry policies. The batch framework is the F&O equivalent of BC's job queue, with finer granularity for high-volume tenants. ## Monitoring **System administration** workspace shows batch history, failed jobs, queued work, and execution time trends. Configure alerts on: - Jobs that fail repeatedly. - Jobs that exceed expected duration substantially. - Queue depth growing unboundedly. **Common pitfalls.** - **Process documentation gaps** — when the controller leaves, nobody knows the close sequence. Document the runbook. - **Failed jobs not investigated** — batch errors silently accumulate. Daily check. - **Out-of-sequence runs** — running inventory closing before WIP recognition produces wrong cost. Honour dependencies. - **Missing year-end tasks** — first-year operations miss year-end steps that the team learns the hard way. ## Operational reality Period close is the test of operational maturity. A tenant that closes cleanly in 3 working days has well-tuned periodic processes; a tenant that takes 10 days has work to do. --- # Permissions and security in Business Central How Business Central security really works — permission sets, user groups, security filters, and the data residency boundaries you should know about. Source: https://www.solvingdynamics365.com/guides/business-central-permissions-and-security Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-25 Business Central's security model is built around **permission sets** that grant *read, insert, modify, delete, and execute* (RIMDX) rights on individual database objects — tables, pages, codeunits, reports, queries. Users get effective permissions by being assigned one or more permission sets, optionally bundled into **user groups** for easier administration. ## Permission sets Microsoft ships a long list of built-in permission sets — SUPER, BASIC, SETUP, sales-related, finance-related, manufacturing-related — and extensions add their own. Built-in sets are read-only; to customise, you copy one and edit the copy, or write a new permission set in AL. Permission sets are versioned and can be assigned via **plans** automatically based on the user's licence type (Essentials, Premium, Team Member), preventing over-privileging. ## User groups A **user group** is a named collection of permission sets, assignable in one step. Most customers organise security around job roles — "AP Clerk", "Sales Manager", "Warehouse Operator" — each as a user group bundling the right sets. ## Security filters A permission set can include **security filters** — row-level filters that constrain a user's access to a subset of a table (e.g. only one location's items, or only one dimension value's GL entries). Filters are powerful but harder to test; use sparingly. ## Direct vs indirect permissions Reading a customer record via the customer card needs *direct* read on Customer. Posting a sales invoice writes to many tables via *indirect* permission, granted through codeunit execution rights rather than direct table rights. Indirect is the modern pattern; using direct write rights on transactional tables is usually a misconfiguration. ## Effective permissions tool From any user card, the **Effective Permissions** page shows exactly what RIMDX rights the user has on any object, and which permission set granted them. Use it to debug permission errors. ## Identity and SSO All BC SaaS users sign in with **Microsoft Entra ID**. Multi-factor authentication, conditional access, named locations, and lifecycle automation are configured in Entra, not in BC. Service-to-service API calls authenticate via Entra app registrations with **application permissions**. ## Data residency BC SaaS data lives in the Microsoft data centre region selected at tenant creation and never leaves it. Moving between regions requires a tenant migration. ## Audit Built-in change-log for sensitive tables, plus integration with **Microsoft Purview** for tenant-wide audit retention. ## Where to go next Audit on top of permissions is [the change log and audit trail](https://www.solvingdynamics365.com/guides/change-log-and-audit-trail-in-business-central); identity controls live in Entra, covered in [conditional access](https://www.solvingdynamics365.com/guides/dynamics-365-and-conditional-access). The permission errors users and integrations hit are decoded in [AL runtime errors](https://www.solvingdynamics365.com/guides/al-runtime-errors-in-business-central) and [Business Central API errors](https://www.solvingdynamics365.com/guides/business-central-api-errors). Environments carry their own access model — see [Business Central environments](https://www.solvingdynamics365.com/guides/business-central-environments). ### Frequently asked questions **What is a permission set in Business Central?** A named set of read, insert, modify, delete, and execute rights on tables, pages, codeunits, reports, and queries. Built-in sets are read-only; customise by copying one or writing a new set in AL, and bundle sets into user groups per job role. **What is the difference between direct and indirect permissions?** Direct permission lets a user read or write a table from its page; indirect permission lets a codeunit write to tables on the user's behalf during posting. Indirect is the modern pattern — direct write rights on transactional tables are usually a misconfiguration. **How do I debug a permission error?** Open the Effective Permissions page from the user card. It shows exactly which rights the user has on any object and which permission set granted them. **Where are MFA and conditional access configured?** In Microsoft Entra ID, not Business Central. All SaaS users sign in through Entra, and service-to-service API calls use app registrations with application permissions. --- # Personalization tokens in Customer Insights — Journeys How personalization tokens insert profile data into messages — token syntax, fallback values, dynamic content. Source: https://www.solvingdynamics365.com/guides/customer-insights-journeys-personalization-tokens Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 A marketing email addressed "Dear Customer" feels generic; one addressed "Hi Alex, your last order shipped to 123 Main Street" feels relevant. **Personalization tokens** in Customer Insights — Journeys insert profile and behavioural data into messages at send time, scaling personal touches across millions of recipients. ## Token syntax Tokens reference data fields: ``` Hello {{contact.firstname}}, Your last order on {{order.purchaseDate}} totalled {{order.amount}}. ``` At send, tokens replaced with actual values for each recipient. **Token sources.** - **Contact** profile fields — name, email, custom attributes. - **Account** fields — company name, industry. - **Customer Insights unified profile** — enriched attributes. - **Triggering event data** — the event that started the journey. - **Custom data** — Power Automate-supplied at send time. The richer the available data, the more personal the messages. ## Fallback values When a field is empty: ``` Hi {{contact.firstname | default: "there"}} ``` Without fallback, empty tokens result in awkward gaps. Always specify defaults. ## Conditional content Beyond simple substitution: ``` {% if contact.loyaltyTier == "Gold" %} Enjoy your exclusive Gold member preview. {% else %} Sign up for our loyalty program. {% endif %} ``` Liquid-style conditionals enable per-recipient content variations. **Dynamic content blocks.** - Pre-configured content options. - One block per recipient based on attributes. - Variations: by segment, by region, by past purchase, etc. A single email can serve different content to different audiences without managing multiple email assets. ## Token testing Critical: - **Preview** with sample data. - **Test send** to internal addresses; verify tokens replaced correctly. - **A/B test** different token configurations. Bad tokens producing "Hello {{firstname}}" in production emails is mortifying. **Where personalization tokens work.** - **Email subject lines.** - **Email body** content. - **SMS messages.** - **Push notifications.** - **In-app messages.** - **Landing page content** (where supported). Cross-channel personalisation reinforces the personal feel. **Personalization tokens for URLs.** ``` Click here: https://portal.example.com/account?id={{contact.contactid}} ``` Pre-populates portal URLs with contact identity; user lands on their content without re-authenticating. **Real-time vs batch.** - **Real-time** — tokens resolved at send time; latest data. - **Batch** — tokens resolved when send queue built; data may be hours old. For real-time triggers (order confirmation), real-time matters. ## Identity-based personalization Beyond fields, behavioural: - "You browsed product X" — captured from web behaviour. - "You haven't logged in for 30 days" — re-engagement message. - "Your subscription renews in 7 days" — lifecycle. Customer Insights — Data feeds these signals. **A/B testing tokens.** - **Subject A** — "Alex, your order has shipped" - **Subject B** — "Your order is on the way" Token-driven personalization can be the test variable; measure which performs better. **GDPR / privacy considerations.** - Personalization tokens use personal data. - Consent for the use required. - Right to erasure — tokens stop working after data deletion. Ensure personalization patterns respect privacy regulations. ## Localisation Tokens combined with language detection: ``` {% if contact.preferredLanguage == "fr" %} Bonjour {{contact.firstname}} {% else %} Hello {{contact.firstname}} {% endif %} ``` Or different email assets per language; tokens consistent across. ## Performance Token resolution adds processing time: - Large recipient lists with complex tokens take longer to send. - Heavy conditional logic slows sending. - Generally acceptable for marketing volumes. **Common pitfalls.** - **No fallback.** Empty fields produce broken text in production. - **Wrong field reference.** Token doesn't resolve; literal "{{name}}" in email. - **Sensitive data in tokens.** Inadvertently include data that shouldn't be in email. - **Over-personalisation.** Creepy effect; recipients uncomfortable. - **Test data leaks.** Test sends to production lists; embarrassing. - **Conditional logic complex.** Hard to maintain; bugs. **Best practices.** - **Always fallback** — never assume data present. - **Preview before send** — verify with sample data. - **Test sends** to internal addresses. - **Audit token usage** — what data being used where. - **Consent compliance** — verify before personalization patterns deploy. ## Strategic positioning Personalization is table stakes for modern marketing. Tokens are the mechanism in Customer Insights — Journeys; the data quality and segmentation work feeding them is where competitive advantage emerges. Mature programs invest in unified customer profiles (Customer Insights — Data), thoughtful trigger design, and continuous testing of personalization effectiveness. The tokens themselves are easy; the underlying data discipline is the hard part. Get that right, and personalization scales authenticity beyond what was previously possible. --- # Phased vs big-bang go-live When to phase a Dynamics 365 go-live and when to go big-bang — the trade-offs across complexity, risk, integration burden, and organisational change. Source: https://www.solvingdynamics365.com/guides/phased-vs-big-bang-go-live Section: Implementation / Methodology Published: 2026-05-01 For any Dynamics 365 implementation beyond the smallest, one of the earliest strategic decisions is whether to roll out **all at once** (big-bang) or **incrementally** (phased). Both have credentials and both have failure modes; the right choice depends on the specific shape of the project. ## Big-bang A single cutover: on one date, every legacy system stops accepting new transactions and Dynamics 365 takes over. Common for SMB Business Central implementations and for single-entity F&O rollouts. The advantages: one cutover weekend, no parallel-running maintenance, clean break, single training and change-management push. The risks: every defect surfaces simultaneously, all to the same support team. If something breaks badly, there's no fallback short of rollback. Pressure on hypercare is enormous. The legacy system is decommissioned (or frozen read-only); recovery options shrink. ## Phased by module Roll out finance first, then operations, then sales, etc. Each phase is its own mini-go-live. Common when the customer is moving from a single legacy ERP and can keep the legacy running for non-migrated modules. The advantages: each go-live is smaller and lower-risk; the team learns between phases; failures contained. The risks: prolonged dual-running (legacy + Dynamics 365) requires integrations that work both ways during the transition. Period-end close becomes a multi-system exercise. Total elapsed time is longer. ## Phased by site or entity Roll out site A or legal entity 1 first, then expand. Common for multi-site manufacturers or multi-entity groups. The pilot site is the laboratory; lessons feed expansion. The advantages: real-world validation before scaling, lower blast radius, opportunity to refine training and support before expansion. The risks: until the last site is live, the project isn't finished. Inter-site integrations have to work across both old and new during the rollout. Some scope creep often happens between phases as later sites demand "the same as Site A *plus*". ## Phased by geography A geographic variant of site phasing, common for global rollouts. Country-specific localizations, languages, holidays, and currencies all become per-phase scope. The most complex variant; only undertaken by mature programs with multi-year horizons. ## Choosing Big-bang for: small-to-medium SMB ERP, time-sensitive contracts, single-site operations, clean replacement of obsolete systems. Phased by module for: large enterprise complexity with mature legacy. Phased by site/geo for: multi-site/global with risk concentration. ## Hybrid Many programs phase the *finance* go-live (big-bang for the back office) and then phase the *operations and CRM* rollouts site-by-site. This combines fast core stabilisation with gradual operational coverage. ## The discipline Whichever path, write the rollback plan before you commit. Big-bang rollback is hard but possible; phased rollback is easier but more frequent — both need procedures. ## Where to go next Whichever shape you choose, the mechanics are in [cutover planning](https://www.solvingdynamics365.com/guides/cutover-planning-for-dynamics-365) and the weeks after in [hypercare](https://www.solvingdynamics365.com/guides/hypercare-after-go-live). Phasing decisions are driven by [data migration strategy](https://www.solvingdynamics365.com/guides/data-migration-strategy-for-dynamics-365) and [change management](https://www.solvingdynamics365.com/guides/change-management-for-dynamics-365), and the risks of each path belong in [the risk register](https://www.solvingdynamics365.com/guides/risk-management-on-dynamics-365-projects). ### Frequently asked questions **When is a big-bang go-live the right choice?** Small-to-medium ERP implementations, single-site operations, time-sensitive contracts, and clean replacement of an obsolete system — the common shape for Business Central and single-entity F&O rollouts. One cutover weekend, one training push, no dual-running. **What are the ways to phase a rollout?** By module (finance first, then operations, then sales), by site or legal entity (a pilot site as the laboratory), or by geography (country-specific localisations and languages per phase — the most complex variant). **What is the main cost of phasing?** Dual-running. Legacy and Dynamics 365 must integrate both ways during the transition, period-end close becomes a multi-system exercise, and total elapsed time is longer. Scope creep between phases is common. **Is there a hybrid approach?** Yes, and it is common: big-bang the finance go-live to stabilise the back office quickly, then phase operations and CRM rollouts site by site. Whichever path, write the rollback plan before committing. --- # Physical inventory orders in Business Central How to run a physical inventory count in Business Central — counting periods, physical inventory journals, count discrepancies. Source: https://www.solvingdynamics365.com/guides/business-central-physical-inventory-orders Section: Business Central / Inventory & warehouse Published: 2026-05-01 Updated: 2026-08-25 Even with strict cycle counting and disciplined warehouse processes, physical and system stock balances diverge. The annual or quarterly **physical inventory count** is the reconciliation event — count what's physically there, compare to system, post adjustments. Business Central supports physical inventory counts through several mechanisms; understanding the choices matters for accuracy and audit defence. **Why physical inventory matters.** - **Financial accuracy** — balance sheet inventory value must reflect reality. - **Audit compliance** — auditors test inventory; large variances trigger findings. - **Operational accuracy** — picking and planning rely on correct on-hand. - **Shrinkage detection** — theft, damage, mis-counts surface. **The three mechanisms in BC.** - **Physical Inventory Journal** — basic mechanism; manual entry of counted quantities. - **Counting Period + Cycle Counting** — recurring counts on a schedule per item. - **Physical Inventory Orders / Counting** (in some warehouse extensions) — more structured workflows. ## Physical Inventory Journal The foundation: 1. Create a Physical Inventory Journal. 2. **Calculate Inventory** action — populates lines with current system quantity per item. 3. Operator counts physical stock and enters counted quantity. 4. System computes variance. 5. **Post Journal** — adjusts inventory ledger entries to match counted. The journal is straightforward; works for small-medium inventory counts. ## Counting periods Items can be assigned a **Counting Period** code: - **Annual** — counted once a year. - **Quarterly** — four times a year. - **Monthly** — twelve times. - **Custom periods** — specific intervals. The system tracks when each item was last counted; **Calculate Counting Period** action generates the journal for items due. ## Cycle counting Continuous counting rather than periodic full counts: - A subset of items counted each day or week. - Over time, all items get counted. - Mature operations cycle-count daily. Cycle counting integrates with item counting period; daily routine becomes the count. **The count process at scale.** For a warehouse with 10,000 SKUs: 1. **Plan the count** — period, scope, teams. 2. **Generate count sheets** — items to count, ideally per location/bin. 3. **Freeze the warehouse** if doing full count (no movement during count) or have controls if not. 4. **Count physical** — operators count and record. 5. **Capture counts** — into BC via UI, mobile app, or import. 6. **Compare and investigate** variances — significant variances require recount. 7. **Post adjustments** — final variances written to inventory. 8. **Unfreeze warehouse** if applicable. ## Warehouse-mode considerations In an advanced warehouse: - Bin-level counts. - Warehouse Physical Inventory Journal. - Counts compared at bin level, not just item level. ## Lot/serial considerations For tracked items: - Each lot/serial counted separately. - Variances tracked per lot. - Lost serials investigated. **Variance investigation.** - **Material variances** — recount; investigate cause. - **Bin location errors** — item miscoded; correct master data. - **System lag** — recent transactions not yet posted. - **Shrinkage** — accept as loss after investigation. Mature operations have variance thresholds — within 1%, accept; above, investigate. ## Mobile counting Hand-held scanners + mobile app: - Operator scans item barcode → enters count. - Faster than paper-based. - Less error-prone. - Real-time capture into BC. Third-party warehouse mobile extensions (Tasklet, Insight Works) provide rich mobile counting. **Inventory close vs physical inventory.** - **Inventory close (F&O)** — period-end cost adjustment routine; not physical counting. - **Physical inventory** — actual count of stock. Different concepts; both needed periodically. **Common pitfalls.** - **No frozen window.** Movements during count; variances impossible to investigate. - **Manual data entry slow.** 10,000 items × manual keying = days of work; mobile saves. - **Variance tolerance too loose.** Material variances accepted without investigation; shrinkage hidden. - **Counting periods stale.** Items with periods set 5 years ago; no longer reflect reality. - **Post without review.** Adjustments posted without management approval; large hits to P&L. ## Approval workflow For large variances: - Threshold-based approval routing. - Operations manager reviews top variances. - Finance approves before posting if material. Without controls, posting authority extends too widely. ## Audit considerations Auditors look for: - Evidence of the count (count sheets, system records). - Variance investigation documentation. - Approval of significant adjustments. - Year-over-year consistency in shrinkage rates. Document the count process; retain records for at least the audit retention period. **Operational rhythm.** - **Daily** — cycle count subset. - **Quarterly** — review variances and counting periods. - **Annual** — full physical (depending on company policy). - **Pre-fiscal-year-end** — count and reconcile. ## Strategic positioning Physical inventory is the moment of truth for inventory accounting. Investing in mobile-driven counting, clear process, variance investigation, and audit-quality documentation pays back in audit defence and operational accuracy. Skipping it or doing it poorly leads to balance sheet surprises and audit findings. For most operations, cycle counting daily plus a periodic structured count provides the right balance of effort and accuracy. --- # Planning Optimization in Dynamics 365 Supply Chain How Planning Optimization replaced the legacy MRP engine — in-memory architecture, scalability, scope, and migration considerations. Source: https://www.solvingdynamics365.com/guides/dynamics-365-planning-optimization Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 **Planning Optimization** is the modern master-planning engine in Dynamics 365 Supply Chain Management. It replaced the legacy AX-era MRP engine that struggled with large data volumes and long-running planning runs. The new engine is in-memory, parallelised, and dramatically faster — but it has scope differences worth knowing. ## Architecture Planning Optimization runs as a separate Microsoft-managed Azure service, not in the F&O application tier. F&O streams the planning-relevant data (items, BOMs, routings, on-hand, open orders, forecasts, parameters) to the service; the service computes; the results flow back as planned orders, action messages, and reschedules. Because the engine is in-memory and runs in parallel, it can process plans for hundreds of sites and millions of items in minutes rather than hours. ## Net change and regenerative The service supports both **net change** plans (only items affected by a recent transaction are replanned) and **regenerative** plans (everything from scratch). Net change makes near-real-time MRP feasible for very large catalogues. ## Filtering Plans can be filtered by site, product, or any combination — useful for running a fast plan on a single site while keeping the global plan unchanged. ## Forecast consumption Forecast plans feed Planning Optimization through forecast time fences and consumption rules. The engine honours both global and per-coverage-group parameters. ## Action messages Output mirrors the legacy engine: *New*, *Increase*, *Decrease*, *Reschedule earlier*, *Reschedule later*, *Cancel*. Planners review and accept through the planning workbench in F&O. ## What's not yet covered Planning Optimization has parity for *most* AX MRP scenarios, but some specialised features remain on the legacy engine in some implementations: certain co-product / by-product configurations, intercompany advanced features, and some country-specific localizations. Microsoft publishes a feature-parity matrix; check before assuming everything ports cleanly. ## Co-existence During migration, customers can run **both engines** in parallel against the same data, compare results, and switch once parity is confirmed. This is the standard transition pattern from legacy MRP to Planning Optimization. ## Manufacturing scheduling Planning Optimization handles infinite-capacity material plans. **Finite capacity scheduling** (gantt-style scheduling on constrained work centres) remains a separate concern — typically run with the *Scheduling* engine or a partner scheduling product on top of the material plan. ## Net result A four-hour overnight MRP becomes a fifteen-minute job. Planning frequency goes from nightly to multiple times a day, and planners spend less time waiting and more time analysing. --- # Playbooks in Dynamics 365 How playbooks codify repeatable business processes in Dynamics 365 — activities, automation, and when playbooks beat sequences. Source: https://www.solvingdynamics365.com/guides/playbooks-in-dynamics-365 Section: Customer Engagement / Customer Service Published: 2026-05-01 **Playbooks** in Dynamics 365 are reusable, structured response patterns for situations that need consistent handling — kicking off a major-account onboarding, responding to a competitor entering a deal, handling a customer escalation, executing a contract-renewal motion. Where a *sequence* is a cadence of seller activities over time, a *playbook* is a coordinated set of tasks, activities, and automations triggered by an event. ## The model A **playbook template** defines: - **Trigger** — the type of record and condition that fires the playbook (manual launch, automated trigger on opportunity stage change, case priority escalation). - **Activities** — the items the playbook creates: tasks, appointments, phone calls, emails. Each with assignee, due date offset, description. - **Automation** — calls to Power Automate flows, field updates on the source record, notifications. A **playbook instance** is the running execution of a template against a specific source record. When triggered, the system creates the activities, assigns them, and tracks completion. **Example playbooks.** - **Major-deal-detected playbook.** Triggered when an opportunity exceeds 500k EUR. Creates tasks for the sales VP to review, the legal team to prepare contracts, the executive sponsor to schedule a customer call, the deal-desk team to validate pricing. - **Competitor-in-deal playbook.** Triggered when a competitor field is filled on an opportunity. Creates tasks for competitive-intelligence brief, customer-reference outreach, and pricing-strategy review. - **Customer-escalation playbook.** Triggered when a case is escalated to Tier 2. Creates tasks for the account manager to call the customer, the engineering team to investigate, the executive sponsor to acknowledge. - **New-customer-onboarding playbook.** Triggered when an opportunity closes won. Creates tasks for implementation kickoff, account-manager introduction, success-plan creation, and quarterly business review scheduling. ## Why playbooks They codify the institutional knowledge of "what we do when X happens" so it doesn't depend on individual memory or seniority. New team members get the right activities created automatically; experienced team members don't forget steps. **Sequences vs playbooks.** - **Sequence** — *time-based cadence* for one seller working one record over weeks (the prospecting motion). - **Playbook** — *event-triggered orchestration* across multiple people, kicking off all at once or with relative timing offsets (the response). A complex sales motion might use both: a sequence runs the prospecting cadence; once the opportunity reaches a key stage, a playbook fires to onboard the wider deal team. ## Configuration Playbooks are configured in the maker portal. Required permission to launch a playbook is configurable; some are seller-launched, some auto-fire on conditions. ## Reporting Playbook execution data is queryable — which playbooks fire most, completion rates, time to complete, outcome correlation. Use it to identify playbooks that aren't being executed (might need redesign) or playbooks that consistently drive better outcomes (might justify expanded scope). **Limits.** - Playbooks are linear lists of activities, not workflows with branching logic. For conditional logic, use Power Automate flows triggered by playbook events. - Long-running multi-month playbooks are awkward; break into stages or use a business process flow with playbooks per stage. - The playbook concept is most mature in CRM-side apps; F&O has its own workflow tools instead. ## Operational discipline Don't over-template. Build playbooks for situations that genuinely repeat and where consistent response matters. 10–15 well-designed playbooks for the team's most consequential moments beats 50 trivial templates that nobody invokes. --- # Polling vs push patterns for Dynamics 365 integrations How to choose between polling and push integration patterns for Dynamics 365 — trade-offs, performance, freshness, and when each fits. Source: https://www.solvingdynamics365.com/guides/polling-vs-push-patterns-for-dynamics-365 Section: Integrations / Architecture patterns Published: 2026-05-01 Integrating Dynamics 365 with another system requires choosing how data flows: **polling** (consumer asks periodically) or **push** (source notifies on change). Each pattern has different trade-offs in freshness, complexity, and resource consumption. Most production architectures use both for different scenarios. **Polling pattern.** - Consumer periodically queries source. - "Has anything new since last check?" - Source returns delta or nothing. - Consumer processes any new data. Simple to implement; well-understood; works with any data source. **Push pattern.** - Source notifies consumer on event. - Consumer processes immediately. - No periodic queries. More efficient at scale; requires source support for notifications. **Polling characteristics.** - **Simple** — basic HTTP/SQL queries. - **Predictable load** on source — fixed query frequency. - **Latency** — bounded by poll interval. - **Self-healing** — if consumer down, catches up on resumption. - **No source coupling** — consumer's choice. **Push characteristics.** - **Lower latency** — near-instant. - **Lower overhead** — no wasted polls when nothing changed. - **Source coupling** — source must support notification. - **Recovery complex** — if consumer down, missed events need replay. - **Burst-y load** — high spikes at busy times. **When polling wins.** - **Source doesn't push** — no notification API. - **Latency tolerance** — minutes acceptable. - **Simple integration** — minimise complexity. - **Batch processing** — process accumulated data efficiently. - **Predictable resource usage** preferred. **When push wins.** - **Real-time needs** — seconds matter. - **High volume with low change rate** — polling wastes resources. - **Source supports webhooks / events.** - **Pubsub patterns** — multiple consumers. **Polling implementations for Dynamics.** - **OData with modifiedon filter** — `$filter=modifiedon gt '2026-11-01T...'`. - **Change tracking** — Dynamics's incremental change endpoint. - **Custom delta endpoint** — implementation in plug-in. - **Database polling** — direct SQL queries (sometimes for F&O). **Push implementations for Dynamics.** - **Webhooks** — Dataverse webhook step. - **Service Bus** — Dataverse → Service Bus → consumer. - **Event Grid** — Dataverse → Event Grid → consumers. - **Power Automate** — flow triggered on Dataverse change. - **Business events** — F&O business events. **Polling parameters.** - **Frequency** — how often to query. - **Batch size** — records per poll. - **Filter** — what to retrieve. - **Retry on failure.** Frequency vs freshness trade-off. Faster polling = more current but more load. ## Adaptive polling Smarter polling: - **High activity** — poll more frequently. - **Low activity** — back off. Reduces wasted polls during quiet periods. ## Long polling Hybrid: - Consumer makes request. - Source holds the connection. - Source responds when data available or timeout. - Consumer immediately requests again. Combines polling simplicity with push-like latency. ## Webhooks A push pattern: - Source sends HTTP POST to consumer on event. - Consumer accepts; processes. - Source typically expects 200 quickly; further processing async on consumer side. **Webhook reliability.** - **Retries on failure** — limited. - **No replay** typically — lost events lost. - **Dead letter** if used (Service Bus / Event Grid). For critical events, webhook-only is risky; broker-mediated push (Service Bus) is more reliable. **Hybrid approaches.** - **Push for real-time** — immediate. - **Polling for catch-up** — periodic reconciliation. - **Both for redundancy** — robust against either failing. Belt-and-suspenders; common for mission-critical integrations. ## Reconciliation polling Combined pattern: - Push for normal flow. - Periodic polling to catch any missed events. - Reconcile differences. This pattern handles webhook reliability gaps. **Performance considerations.** - **Polling load** — depends on frequency and source efficiency. - **Push load** — depends on event volume. For high-change-rate systems, push usually more efficient. For low-change-rate, polling can be cheaper. **Throttling and limits.** - **Dynamics APIs** — rate-limited. - **Polling too frequently** — hits throttling. - **Push** — limits at broker level. Respect throttling; honour Retry-After headers. **Monitoring.** - **Polling** — track query frequency, returned counts. - **Push** — track events emitted vs received. - **End-to-end latency** — both patterns. - **Lag / backlog** — accumulation. Visibility regardless of pattern. **Choosing in practice.** - **Real-time integration?** → push. - **Source pushes available?** → push. - **Batch-acceptable latency?** → polling. - **Mission-critical reliability?** → hybrid. - **Simple integration?** → polling. - **High volume?** → push usually. **Common pitfalls.** - **Polling too frequently** — throttled; expensive. - **Polling too rarely** — stale data. - **No idempotency** — duplicates from retries. - **Webhook without retry strategy** — events lost. - **No monitoring** — pattern silently failing. - **Hard-coded URLs** — webhook URLs change; integration breaks. **Migration patterns.** - **Polling → push** when source adds notification support. - **Push → polling** when broker overhead exceeds benefit. Architecture not religious; adapt as systems evolve. ## Strategic positioning Polling vs push is a core integration architecture decision. Both have valid use; understand trade-offs per integration. Default to push for real-time and high-volume scenarios; polling for simpler, batch-acceptable cases; hybrid for critical reliability. For architects: - Make conscious choice per integration. - Document the rationale. - Build observability for chosen pattern. - Re-evaluate as systems evolve. The pattern choice affects user experience, infrastructure cost, and operational complexity. Choose with care; don't default to one without consideration. ### Frequently asked questions **When should I poll instead of push?** When the source has no notification support, minutes of latency are acceptable, batch processing is efficient, or predictable load and simplicity matter more than freshness. Polling also self-heals: a consumer that was down catches up on its next poll. **How do I poll Dataverse efficiently?** Use change tracking for incremental deltas, or an OData filter on modifiedon with explicit paging. Respect throttling and Retry-After headers — polling too often is the classic way to get rate-limited. **What push options exist for Dynamics 365?** Dataverse webhooks, Service Bus or Event Grid service endpoints, Power Automate flows triggered on Dataverse changes, and business events in Finance and Operations. **What is reconciliation polling?** A hybrid: push for the normal real-time flow plus a periodic poll that catches anything the push path missed and reconciles differences. It is the standard belt-and-braces pattern for mission-critical integrations. --- # Positive pay files in Dynamics 365 Finance How F&O generates positive pay files for bank fraud prevention — file formats, daily transmission, reconciliation, and the typical bank-specific variations. Source: https://www.solvingdynamics365.com/guides/positive-pay-files-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 **Positive pay** is a bank fraud-prevention service: each day, the company sends the bank a list of legitimately issued checks; the bank rejects any check presented that's not on the list. For US companies with check-based AP, positive pay is the standard control. F&O supports positive pay file generation through configurable data exchanges. **The threat being mitigated.** - **Check fraud** — stolen checks, altered amounts, counterfeit checks presented for payment. - **Without positive pay** — bank pays anything that looks like a valid check. - **With positive pay** — bank validates against the issuer's daily list. For companies issuing thousands of checks monthly, positive pay is essential. ## Positive pay file contents Typical fields per record: - Account number. - Check number. - Check amount. - Issue date. - Payee name. - Void status (for cancelled checks). The bank validates each presented check against the file. **Configuration in F&O.** - **Bank account** flagged for positive pay. - **Bank file format** configured (data exchange definition). - **Positive pay record** generated on check issuance. When a check is printed, a positive pay record is created. End-of-day, the records flow to a file. ## Generating the file **Generate positive pay file** action: 1. Selects records since last submission. 2. Formats per bank's specification. 3. Outputs file (CSV, fixed-width, XML, etc. depending on bank). 4. Marks records as submitted. ## Bank-specific formats Every bank has its own format: - **Chase** — specific layout. - **Bank of America** — different. - **Wells Fargo** — different again. - **JPMorgan** — different. F&O ships with templates for major banks; customisation needed for others. The configuration is a data exchange definition mapping F&O records to bank's expected fields. **Transmission methods.** - **Bank portal upload** — manual; operator uploads daily. - **FTP/SFTP** — automated transmission to bank's SFTP server. - **Bank API** — modern; programmatic. - **EDI** — for some banks. Automation reduces operational burden; without it, daily manual upload is a chore. ## Exceptions When the bank receives a check not on the list: - **Exception alert** to the company. - **Hold for review** — company decides accept or reject. - **Timeout default** — if no response, bank's default (often reject). The company reviews exceptions daily; legitimate checks (rare misses) get authorised, fraudulent ones rejected. ## Stop payments When a check is voided: - Stop payment record sent to bank. - Bank rejects if presented. - Positive pay file may include void instructions. **Reverse positive pay vs payee positive pay.** - **Standard positive pay** — match on account, check number, amount. - **Payee positive pay** — also match payee name; harder to defeat. Many banks offer both tiers; payee positive pay is stronger but requires accurate payee name capture. ## Daily transmission rhythm Critical: - Send positive pay file BEFORE any check could be presented. - Banks typically require file by 8 AM or so for that day's presentments. - Late files = checks presented before listing = potential acceptance of fraudulent items. The cutoff is bank-specific; verify and respect. ## Reconciliation against bank Beyond positive pay: - Bank statement received daily / monthly. - Match cleared checks against F&O bank ledger. - Investigate items not matching. Positive pay catches fraudulent checks at presentment; bank reconciliation catches issues post-clearing. ## ACH positive pay Beyond checks, ACH transactions can also use positive pay: - ACH originators authorised. - Unauthorised ACH debits blocked. F&O supports ACH positive pay configuration similarly. **Implementation considerations.** - **Bank partnership** — bank must support positive pay (most do). - **File format provisioned** — bank's specification implemented in F&O. - **Transmission method** — FTP / API setup. - **Exception handling process** — who reviews exceptions, how quickly. **Common pitfalls.** - **File late.** Daily transmission missed; window of fraud opportunity. - **Format errors.** File rejected by bank; checks not validated; revert to manual. - **Stop payment not transmitted.** Voided check reaches bank; pays out as positive pay-listed. - **Payee name mismatch.** "John Smith" vs "Smith, John"; payee positive pay flags legitimate checks. - **No exception review.** Bank rejects valid checks; vendor calls; AP scrambles. - **Manual override drift.** Operator approves exceptions routinely without analysis. **Operational rhythm.** - **Daily** — file transmission, exception review, monitoring. - **Weekly** — process audit; missed file investigations. - **Monthly** — reconcile bank's records of presented vs our records of issued. ## Strategic positioning Positive pay is a high-leverage fraud control — relatively cheap to set up, dramatically reduces check fraud risk. For any US company issuing checks at scale, it's a standard expectation. F&O supports it natively with appropriate bank format configuration; the operational discipline of timely transmission and exception review is what makes it effective. The decision to NOT use positive pay rarely makes sense for check-issuing companies; the implementation is small, the protection material. --- # Posting groups in Business Central How Business Central uses posting groups to translate sub-ledger transactions to GL accounts — general, specific, and inventory posting groups. Source: https://www.solvingdynamics365.com/guides/posting-groups-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 **Posting groups** are how Business Central decides which GL accounts a transaction should hit. Every customer, vendor, item, bank, and resource carries one or more posting groups, and the intersection of those groups defines the GL accounts the system uses at posting. Get them right and the GL builds itself; get them wrong and the trial balance gets uncorrectable noise. ## General business posting groups Tag the *type of trading partner* — Domestic, EU, Export, Intercompany. Attached to customers and vendors. ## General product posting groups Tag the *type of product or service* — Goods, Services, Subscription, Reverse-Charge Service. Attached to items, resources, and GL accounts. ## VAT posting groups A parallel pair (VAT business + VAT product) drives VAT calculation and reporting. Often mirrors the general posting groups but separate so VAT can be configured independently for special cases. ## General posting setup The matrix that combines *General Business × General Product* into accounts: Sales Account, Sales Credit Memo Account, Sales Line Discount Account, Purchase Account, Purchase Credit Memo Account, COGS Account, Direct Cost Applied Account, Inventory Adjustment Account. Every revenue and expense path that touches the GL is mapped here. ## Customer / vendor posting groups A *specific* posting group tagging the *role of the trading partner* — Domestic, Foreign, Employee, Intercompany. Maps to balance-sheet control accounts: Receivables Account, Payment Discount Debit Account, Invoice Rounding Account, etc. Attached to each customer / vendor card. ## Inventory posting groups Tag the *type of inventory* — Raw Material, Finished Goods, WIP, Resale. Combined with the location into an **inventory posting setup** matrix that maps each item-at-each-location to balance-sheet accounts: Inventory Account, Inventory Account (Interim), WIP Account, etc. ## Bank account posting groups Tag the role of the bank account, mapping to GL bank accounts and currency-specific accounts. ## Job / project posting groups Map job ledger entries to WIP, recognised costs, accrued costs, recognised sales, and invoiced sales GL accounts. ## FA posting groups Map fixed-asset events (acquisition, depreciation, write-down, disposal) to GL accounts per asset class. ## The discipline Define posting groups around real *accounting differentiations*, not around customer or product hierarchy that already exists elsewhere. Five customer posting groups (Domestic, Foreign, Group, Public, Employee) is healthy; fifty is a sign that someone's reaching for a sub-account taxonomy where they should have used dimensions instead. ## Default and override Items, customers, and vendors default posting groups from templates or item categories. Don't override at the record level unless there's a real, defensible reason — overrides scatter configuration and frustrate audit. --- # Posting profiles in Dynamics 365 Finance The posting-profile mechanism in Dynamics 365 Finance — how transactions translate into GL entries, and why getting them right matters. Source: https://www.solvingdynamics365.com/guides/dynamics-365-posting-profiles Section: Finance & SCM / Finance Published: 2026-05-01 A **posting profile** in Dynamics 365 Finance is a configuration object that tells the system which GL accounts to use when a sub-ledger transaction posts. Sub-ledgers (customers, vendors, fixed assets, inventory, sales tax, banks, projects) all have posting profiles. They're how F&O bridges the operational world of invoices, receipts, and shipments to the accounting world of double-entry GL. ## The pattern Each sub-ledger has a default posting profile, plus the ability to attach more specific profiles to *groups* or *individual records*. For customers, for example, you might have a default profile pointing AR control to GL 1500-Receivables, an export-customer profile pointing AR control to 1510-Export Receivables, and an inter-company profile pointing AR control to 1520-IC Receivables. F&O picks the most specific match at posting time. ## What's in a profile A vendor posting profile names the GL accounts for: - Summary account (AP control) - Settlement account (where settlements net) - Liability for discount - Arrival account (goods received not invoiced) - Charges accounts - And more, depending on the modules in use. ## Why it matters Posting profiles are the single biggest source of GL posting errors after dimensions. A miscoded posting profile sends thousands of transactions to the wrong account, often only discovered at period-end when the trial balance won't reconcile. Mass-correcting requires either reversing and reposting transactions or running a reclassification journal — both are heavy operations. ## Group versus specific Posting profiles default at the *group* level (Customer Group, Vendor Group, Item Group, Bank Group). Resist the urge to override at the individual record level — it scatters configuration and makes auditing nearly impossible. Define groups for every meaningful classification, attach profiles at the group, and override at the record only when there's an explicit, defensible reason. ## Currency and dimensions Profiles can vary by currency (e.g. AR for EUR customers vs SEK customers) and can carry default dimension values that propagate to posted entries. ## Audit Every GL transaction stores a reference back to the source document, so auditors can trace from a GL line to the originating sub-ledger transaction and to the profile that mapped them. Reverse drill is one of the most-used troubleshooting tools. ## Design discipline Map out the posting profile design as part of CoA design, not as an afterthought. Two days early saves two weeks late. --- # Power Apps canvas app errors explained The canvas app errors makers hit most — delegation warnings, 'The specified column does not exist', Patch type errors, network error when using Patch, data source not found, permission denied, connection consent, premium licence prompts — with fixes. Source: https://www.solvingdynamics365.com/guides/power-apps-canvas-app-errors-explained Section: Power Platform / Troubleshooting Published: 2026-09-03 Canvas app errors show up in three places: the formula bar (red underlines and delegation warnings while authoring), the running app (banners and dialogs), and the Monitor tool (the network calls behind them). Most user-facing failures are one of a dozen patterns, and this reference covers them with the fix. For what canvas apps are and when to use them, see [canvas apps vs model-driven apps](https://www.solvingdynamics365.com/guides/canvas-apps-vs-model-driven-apps); for making a slow app fast, [Power Apps performance tuning](https://www.solvingdynamics365.com/guides/power-apps-performance-tuning). ## Authoring-time warnings that become runtime bugs ### Delegation warning: "The 'Filter' part of this formula might not work correctly on large data sets" **Symptom.** A yellow triangle on a formula; the app works in testing; in production users cannot find records they know exist. **Cause.** A non-delegable function or operator — `Search` on a Dataverse column that does not support it, `in` on some sources, `Sum` over a filtered SharePoint list, string functions like `Left` inside `Filter`, or comparing to a variable of the wrong type. The source returns the first 500 rows (2,000 with the app setting), and the rest of the formula runs on that subset. **Fix.** Use delegable functions for the source (`Filter`, `LookUp`, `StartsWith`, `=`, `<`, `>`, `And`/`Or` on indexed columns for Dataverse), push logic into a Dataverse view and filter on that, or pre-aggregate with a rollup column. For SharePoint, index the columns and avoid complex expressions. **Prevention.** Treat every delegation warning as an error before the app leaves development; test against a copy of production-sized data. ### "Invalid argument type. Expecting a Record value instead." / "Expecting a Text value" **Symptom.** A red underline on `Patch`, `Set`, or a control property. **Cause.** Type mismatch. Dataverse lookups need a record from the related table (`LookUp(Accounts, 'Account' = …)`), choices need the choice value (`'Status (Orders)'.Active`), dates need a date, and a text box's `.Text` is text even when it contains a number. **Fix.** Convert explicitly: `Value()`, `DateValue()`, `Text()`; pass lookup records and choice values in their own types. ### "Name isn't valid. 'X' isn't recognized" after renaming or importing **Cause.** A control, variable, collection, or data source was renamed or removed and the formula still references it; or the app was imported into an environment where the data source name differs. **Fix.** Use the App checker's formula errors list to find every reference; re-add the data source with the expected name. ## Runtime data errors ### "The requested operation is invalid. Server Response: X failed: The specified column 'Y' does not exist. The column with the most similar name is 'Z'." **Symptom.** A `Patch` or `Collect` to Dataverse fails with this text. **Cause.** The record literal uses a display name (`Status`) or wrong case (`New_Status`) where Dataverse wants the logical name (`new_status`), or a column that exists on a different table. **Fix.** Use the name the error suggests; check the table's Columns view for logical names. **Prevention.** Let IntelliSense in the formula bar supply column names; do not type them from memory. ### "Network error when using Patch function: The server returned an error" / "Bad Request" **Symptom.** The write fails; the message has little detail. **Cause.** The data source rejected the write. Dataverse: a business-required column not supplied, a business rule, a real-time workflow or plug-in error, a duplicate detection rule, an alternate key violation, or a missing privilege (Create, Write, Append, AppendTo). SharePoint: a column validation, a lookup value not in the target list, a required column. **Fix.** Open Monitor (from the app's Advanced tools), reproduce, and read the server response body — it contains the Dataverse or SharePoint message and code. Decode Dataverse codes with [Dataverse Web API errors](https://www.solvingdynamics365.com/guides/dataverse-web-api-errors-explained). **Prevention.** Wrap writes in `IfError(Patch(...), Notify(FirstError.Message, NotificationType.Error))` so users see the real message. ### "An entry is required" / the form will not submit **Cause.** A required field in the form's data source has no card, or the card's `Update` property is blank; on Dataverse, business-required columns; on SharePoint, required columns. **Fix.** Add the card or set `Update` to a value; check the form's `Error` and `ErrorKind` properties in `OnFailure`. ### "Data source not found: X" / "The data source 'X' has been removed" / "Getting your data" forever **Symptom.** The app opens but data does not load, or shows an error banner. **Cause.** After import into another environment the data source (a Dataverse table, a SharePoint list by URL, a SQL connection) is missing or points at a different environment; or the connection behind it needs consent (see below); or the user has no access to the source. **Fix.** Remove and re-add the data source in the target environment; for SharePoint and SQL, use environment variables for the site URL and connection so imports rebind automatically. See [connection references and environment variables](https://www.solvingdynamics365.com/guides/connection-references-and-environment-variables). ### Only some records show / a gallery is missing rows **Cause.** Delegation (above), or a Dataverse security role scope (user-level read shows only the user's own rows), or a SharePoint list over the 5,000-item view threshold with a non-indexed filter. **Fix.** Check the delegation warnings first; then the user's read scope on the table; then SharePoint indexing. ## Permissions, sharing, and connections ### "You don't have permission to view this data" / "Access to Dataverse denied" **Cause.** The app is shared but the user lacks a security role with read on the table, or is not in the environment's security group. On SharePoint, the user lacks permission on the list. **Fix.** Assign a security role when sharing the app (the share dialog offers it for Dataverse apps), or through the admin centre; grant list permissions in SharePoint. **Prevention.** One custom role per app that grants exactly the tables and privileges the app uses; [Dataverse security model](https://www.solvingdynamics365.com/guides/dataverse-security-model) explains scopes. ### "You need to allow connections" / consent dialog on first open **Cause.** The app uses connections the user has not consented to. Each user is asked once per connector. **Fix.** Expected behaviour. To remove the prompt for connections that do not need per-user consent, an admin can bypass it with `Set-AdminPowerAppApisToBypassConsent` in the Power Apps PowerShell module — appropriate for Dataverse and other tenant-managed connectors, not for connectors that act as the user. ### "This app requires a Power Apps Premium licence" / "You need a licence to run this app" **Cause.** The app uses a premium connector (Dataverse outside a Dynamics 365 context, SQL, HTTP, custom connectors) and the user's licence does not cover it — Microsoft 365 users, or Dynamics 365 Team Member users on an app that touches non-Dynamics tables or premium connectors. **Fix.** Assign Power Apps Premium or pay-as-you-go, or redesign the app to use only connectors the user's licence covers. The [Power Apps pricing page](https://www.solvingdynamics365.com/pricing/power-apps) covers what Dynamics 365 licences include. **Prevention.** Decide the licence position for every app before it is shared; [Power Apps vs Dynamics 365 CRM](https://www.solvingdynamics365.com/guides/power-apps-vs-dynamics-365-crm) covers where the boundary sits. ### "The connection is not valid" / flows run from the app fail **Cause.** A connection embedded in a flow the app calls belongs to a user who left or whose token expired; or the flow is not shared with the app's users (run-only permissions). **Fix.** Rebind the flow's connections to a service account and share the flow with the app users as run-only; see [Power Automate flow failures](https://www.solvingdynamics365.com/guides/power-automate-flow-failures-explained). ### App opens for the maker but not for others **Cause.** Not shared, or shared without the underlying data source access, or the environment's security group excludes them. **Fix.** Share the app, assign the role, check the security group. ## Performance and platform ### Slow start, "Loading" for many seconds **Cause.** `OnStart` loads whole tables into collections, sequentially; many data sources; large images embedded; formulas that recalculate on every screen. **Fix.** Load only what the first screen needs, use `Concurrent()` for independent loads, defer the rest to screen `OnVisible`, use named formulas for derived values. [Power Apps performance tuning](https://www.solvingdynamics365.com/guides/power-apps-performance-tuning) has the full list. ### "There's a problem with your app. Please try again later." / app checker errors after a platform update **Cause.** A control or formula that a platform update changed behaviour for — the app has not been republished against the new version — or an experimental feature that was retired. **Fix.** Open the app in the studio, resolve App checker errors, republish. **Prevention.** Republish apps at least once per release wave; keep experimental features out of production apps. ### Mobile: "App not available offline" / stale data on mobile **Cause.** Offline is not enabled or the offline profile does not include the tables; the app relies on data loaded in `OnStart` that is not refreshed. **Fix.** Configure the offline profile for the tables needed; see [canvas app offline mode](https://www.solvingdynamics365.com/guides/canvas-app-offline-mode). ## Finding the cause quickly Three tools answer nearly every canvas app error. The App checker lists formula errors and delegation warnings with the control and property. Monitor shows every network call the app makes with request and response, including the server's real error text behind a "network error". And `IfError` with `FirstError.Message` in `OnFailure` and around `Patch` puts that text in front of the user instead of a generic banner. Once the message is visible, it is usually one of the Dataverse or SharePoint errors above. ### Frequently asked questions **What does the delegation warning actually mean?** The formula includes a function or operator the data source cannot evaluate server-side, so Power Apps fetches only the first 500 rows (up to 2,000 with the setting) and applies the rest locally. On a small table nothing is wrong; on a large one, results are silently incomplete. Rewrite with delegable functions and columns, or filter server-side through a view. **Why does Patch fail with 'The specified column X does not exist'?** The record you pass to Patch uses a display name or a wrong-case name where the data source expects the logical name — for Dataverse, the lowercase schema name such as new_status. The error usually suggests the most similar column; use that. **What is 'Network error when using Patch function: The server returned an error'?** The data source rejected the write. On Dataverse it is usually a business-required column missing, a business rule, a plug-in error, or a security privilege; on SharePoint a validation or a lookup mismatch. The details after the message, or the Monitor tool, show the server's actual response. **Why do users see 'You don't have permission to view this data'?** Either the app is not shared with them, or they lack a Dataverse security role with read on the table (or a SharePoint permission on the list). Sharing the app does not grant data access; assign the security role when sharing, or through the admin centre. --- # Power Apps Component Framework (PCF) control development How to build custom controls with the Power Apps Component Framework — the dev environment, lifecycle, manifest, packaging. Source: https://www.solvingdynamics365.com/guides/power-apps-pcf-control-development Section: Power Platform / Power Apps Published: 2026-05-01 When Power Apps's standard controls don't suffice — you need a specialised data visualisation, a custom interaction, a third-party widget integrated — the **Power Apps Component Framework (PCF)** lets developers build custom controls in TypeScript that integrate natively with model-driven and canvas apps. The capability is powerful; the development discipline is meaningful. **What PCF enables.** - Custom UI controls for fields, datasets, and sub-grids. - Full TypeScript / JavaScript / HTML / CSS implementation. - Native integration with Dataverse data binding. - Reusable across apps and environments. - Solution-aware deployment. **Development environment.** - **Node.js + npm** for tooling. - **Power Platform CLI (pac)** for project scaffolding. - **Visual Studio Code** as editor. - **TypeScript / React** common stack. Setup is non-trivial; budget a few hours for first-time setup. **Project structure.** ``` ControlProject/ ControlManifest.Input.xml - control definition index.ts - main entry index.css - styling components/ - sub-components package.json tsconfig.json ``` ## ControlManifest The contract: - **Properties** — fields the control consumes. - **DataSet** — for dataset controls binding to views. - **Resources** — referenced files. - **Required features** — platform features needed. Manifest defines what host app sees when configuring the control. **Control lifecycle.** - `init(context, notifyOutputChanged, state, container)` — called once on initialisation. - `updateView(context)` — called on context change (data update). - `getOutputs()` — returns values to push back to the host. - `destroy()` — cleanup. These four methods are the contract; understanding their flow is essential. ## The `context` object Provides: - Current property values. - Data set (for dataset controls). - Device info — screen size, orientation. - User info. - Mode — read-only, disabled. - Resources — fetched files. The control reads context and renders accordingly. ## Two-way binding For fields: - Field value flows in via context. - User interaction in control updates state. - Call `notifyOutputChanged()` to push updates. - Power Apps re-renders to reflect. **Building.** ```bash npm install npm run build ``` Produces a built control ready for packaging. **Packaging as solution.** ```bash pac solution init --publisher-name MyPub --publisher-prefix my pac solution add-reference --path /path/to/control msbuild /p:Configuration=Release ``` The MSBuild output is a solution ZIP containing the control. **Deploying.** - Import solution to environment. - Add control to model-driven form, view, or canvas app. - Bind to appropriate field or dataset. - Test. ## React-based PCFs Most modern PCFs use React: - React rendered inside the PCF container. - Hooks for state. - React libraries (Fluent UI, Material UI) integrate. **Common PCF patterns.** - **Custom field renderers** — image picker, date range, address autocomplete. - **Dataset visualisations** — grids with custom rendering, kanban boards, calendars. - **Composite forms** — multi-field input as one control. - **External library integration** — Chart.js, Mapbox, video players. **Theming.** - PCF can access host theme via context. - Apply theme to match host app's branding. - Important for visual consistency. **Accessibility.** - ARIA attributes mandatory. - Keyboard navigation must work. - Focus management. - High contrast support. Microsoft accessibility requirements apply; ship-blocking if missing. **Performance considerations.** - **Initial load** — keep bundle small; lazy load if possible. - **Re-renders** — only update what changed. - **External resource loading** — async; show loading state. PCFs that block the form's render slow the whole experience. **Testing.** - Unit tests for logic. - Manual testing in app. - Test framework integration evolving. **Versioning.** - Manifest specifies version. - Solution updates carry new version. - Apps can lock to specific version or auto-update. **Common pitfalls.** - **Bundle size huge.** Include only what's needed; tree-shake. - **No accessibility.** Fails accessibility audit. - **External library security.** Vulnerable libraries shipped; security incident. - **Theme not respected.** Looks out of place in host app. - **Two-way binding broken.** Updates not propagating. - **No error handling.** Errors propagate; form crashes. - **Hardcoded URLs / strings.** Should be configuration. **ALM considerations.** - PCFs ship in solutions; same ALM as other components. - Source control the PCF project. - CI builds on commit. - Deploy through standard pipeline. ## Strategic positioning PCFs are the answer for custom UI needs beyond standard controls. The developer commitment is real — TypeScript, React patterns, manifest discipline, accessibility, performance. For partners maintaining PCFs across customer deployments, treating them as products (versioned, tested, documented) is essential. For one-off needs, sometimes a Canvas Power Apps component is simpler. Use PCFs when the requirements clearly demand them and the team can invest in production-grade development. --- # Power Apps modern controls How the modern control set in canvas apps differs from classic controls — Fluent UI styling, accessibility defaults, theming, and migration considerations. Source: https://www.solvingdynamics365.com/guides/power-apps-modern-controls Section: Power Platform / Power Apps Published: 2026-05-01 For years, canvas app controls looked like a 2015 web UI — functional but visually dated. The **modern controls** set, generally available since 2023 and expanding through 2024–2026, replaces the classic controls with Fluent UI–based components that match the look and feel of Microsoft 365. They're not just prettier; they have stricter accessibility defaults, better theming support, and a more constrained API surface. ## The dual control sets Both classic and modern controls coexist in the editor. Picking between them per control: - **Modern controls** appear in the "Modern" toolbox section. - **Classic controls** remain available for backwards compatibility. A canvas app can mix both — but uniformity is preferable for UX coherence. **What's available in modern.** - **Modern Button** — primary, default, accent styles. - **Modern Text** — typography levels (Title, Subtitle, Body, Caption). - **Modern Text Input** — single-line, multi-line, password. - **Modern Dropdown** — replaces the classic dropdown. - **Modern Combobox** — searchable selection. - **Modern Date Picker** — calendar-driven date selection. - **Modern Toggle** — Boolean switch. - **Modern Slider** — value range. - **Modern Checkbox / Radio Group.** - **Modern Spinbutton, Rating, Tab list, Pivot, Persona** — growing list. The set covers most form scenarios. Less common controls (image, gallery, chart) still use classic. **Visual differences.** - **Fluent UI typography and spacing** — matches Office apps. - **Less skeumorphism, more flat** — clean affordances. - **Default colour palette tied to theme** — colour follows theme not hard-coded values. ## Theming Modern controls support **App-level theme**: - Primary colour, neutral colour, font family. - Dark/light mode (in development). - Per-control overrides remain possible but rare. Setting the theme once cascades through all modern controls. Classic controls don't pick up theme automatically — each control needs explicit colour-binding. **Accessibility.** - **Keyboard navigation** out of the box. - **Screen reader semantics** aligned with WAI-ARIA. - **Focus rings** visible. - **Colour contrast** meets WCAG AA defaults. Classic controls require manual accessibility tuning per control; modern controls bake in baseline accessibility. ## Properties differ Modern controls have a leaner property set than classic. Some advanced classic properties (font weight, hover colour, micro-positioning) aren't directly exposed — the theming handles them. For makers used to tweaking every property, this is a constraint; for shipping consistent UIs, it's a feature. ## Performance Modern controls are React-based; the rendering layer is more efficient. Apps with hundreds of controls render measurably faster on modern. The improvement is most visible in galleries and forms with many child controls. **Migration considerations.** - **No automatic conversion** — adding a modern control next to an existing classic control means manual property re-binding. - **Property names may differ** — e.g., `Text` vs `Content`, `OnSelect` vs `OnClick` for some controls. - **Custom CSS / DOM manipulation** — there isn't any in canvas apps generally, but classic-era hacks via HTML Text controls don't carry over cleanly. ## Mixed apps Some legacy apps will have classic controls forever. Pattern: build new screens in modern; leave existing screens classic. Don't force a wholesale conversion mid-cycle unless the visual divergence is a problem. **When classic is still right.** - **Highly customised visuals** — classic exposes more knobs. - **Tight backwards compatibility** with existing app patterns. - **Specific control types** not yet in modern. **Common pitfalls.** - **Mixing classic and modern on one screen** — looks visually inconsistent. - **Custom theming not propagated** — setting per-control colours instead of theme defeats the consistency benefit. - **Accessibility regressions** — overriding modern defaults to "match" classic loses the accessibility wins. - **Property mapping errors** — converting an app screen-by-screen and missing event handlers. ## Operational rule All new canvas apps default to modern controls. App theming set early in development. Existing apps converted to modern when there's a refresh budget — not as forced churn. The visual and accessibility gains compound over the app lifetime; the upfront learning curve is small. --- # Power Apps monitoring and Application Insights How to monitor Power Apps in production — App Monitor, Application Insights integration, and the operational patterns for performance and error tracking. Source: https://www.solvingdynamics365.com/guides/power-apps-monitoring-and-app-insights Section: Power Platform / Power Apps Published: 2026-05-01 A Power App in production needs operational visibility — is it slow? Are users hitting errors? Where do they spend time? **App Monitor** provides debugging-focused observation; **Application Insights** integration provides production-grade telemetry. Together, they're the operational toolkit for serious Power Apps deployments. ## App Monitor Real-time diagnostic tool: - Launched from Power Apps Studio while user runs the app. - Streams events as they happen. - Shows operations: formula evaluations, data calls, errors. - Replay-style timeline. For debugging "why does X happen?" in development. Not for production-wide monitoring. ## Application Insights The Azure Monitor service: - Long-term telemetry storage. - Rich querying via KQL. - Custom dashboards and alerts. - Correlation across services. For production observation, this is the path. **Setup.** 1. Azure subscription with Application Insights instance. 2. Get the **Instrumentation Key** (or Connection String). 3. In Power App, App → Settings → Add Application Insights → enter key. 4. Save and publish. Telemetry starts flowing. **What's captured.** - **Page views** — screens navigated. - **Events** — explicit Trace() calls. - **Exceptions** — errors raised. - **Dependencies** — connector calls (limited). - **Performance** — operation timing. - **Custom data** — anything you Trace. ## Trace() function Manual instrumentation: ``` Trace("UserAction", TraceSeverity.Information, { action: "Clicked Submit", formId: SelectedForm.Id }); ``` Add Trace() calls at key points in app logic. ## Querying telemetry In Application Insights: ```kql customEvents | where name == "UserAction" | where customDimensions.action == "Clicked Submit" | summarize count() by tostring(customDimensions.formId) ``` KQL is powerful; learn the basics for effective production debugging. **Custom dashboards.** - Pin queries to a dashboard. - Real-time tile updates. - Different audience-specific dashboards (ops vs business). **Alerting.** - Set thresholds (error rate > 5%, response time > 2s). - Alert via email, Teams, ops tools. - Action groups for escalation. Production apps need alerts; without them, issues found by user reports. **What to trace.** - **Screen entry / exit** — flow tracking. - **User actions** — buttons clicked, forms submitted. - **Errors** — caught exceptions. - **External calls** — connector results. - **Performance markers** — long operations. **What NOT to trace.** - **Sensitive data** — PII, secrets, financial details. - **Excessive volume** — per-keystroke events; signal lost in noise. - **Internal trivia** — info nobody will read. **Performance metrics.** - **App load time** — initial render. - **Screen transition time.** - **Connector response times.** - **Total operation duration.** These align with user-perceived performance; track and optimise. **Error tracking.** - Caught errors traced explicitly. - Uncaught errors auto-captured to App Insights. - Stack traces (where available). - User session context. **User identification.** - Anonymous by default. - Add user identity to telemetry for debugging specific user issues. - Respect privacy — don't trace more than necessary. **Comparison with App Monitor.** | Aspect | App Monitor | App Insights | |---|---|---| | Use | Dev debugging | Production monitoring | | Live data | Yes | Near-real-time | | Historical | No | Yes | | Query | Limited | KQL | | Alerting | No | Yes | | Cost | Free | Azure consumption | Both have place; use both. **Cost considerations.** - App Insights priced per GB ingested. - High-traffic apps with verbose tracing → meaningful cost. - Sampling — record only X% of events to reduce cost. - Daily cap — limit max ingestion. For production apps with > 1000 daily users, budget App Insights cost. **Common pitfalls.** - **No tracing.** Production issues invisible. - **Over-tracing.** Cost explodes; signal lost. - **Sensitive data in traces.** Privacy / compliance issue. - **No alerts.** Issues exist; nobody knows. - **Dashboards unmaintained.** Built once, never updated, ignored. - **Cross-app correlation.** Multiple Power Apps with separate App Insights → can't correlate. **Best practices.** - **Standard tracing patterns** across apps in the same domain. - **Centralised App Insights** for portfolio observability. - **Documented KQL queries** for common diagnostic scenarios. - **Runbook integration** — alert links to specific queries. - **Regular review** — what's traced, what's needed, what's noise. **Power Automate monitoring.** - Flow run history is the primary visibility. - Can also emit to App Insights from flows (HTTP action). - For high-volume flows, App Insights is the long-term store. ## Strategic positioning Production Power Apps without monitoring are operationally opaque. App Insights closes the visibility gap; the discipline of tracing and querying is what unlocks the value. For any app with significant production usage, treat App Insights as standard equipment. The cost is moderate; the operational benefit is substantial. The teams that take production observability seriously have boring incident reviews; the teams that don't have long, painful ones. --- # Power Apps performance tuning How to make Power Apps canvas and model-driven apps fast — startup time, screen render, data fetching, formula optimisation, and the patterns that matter. Source: https://www.solvingdynamics365.com/guides/power-apps-performance-tuning Section: Power Platform / Power Apps Published: 2026-07-20 A Power App that takes 30 seconds to open and 5 seconds per screen transition gets ignored by users. Performance is the difference between adoption and shelfware. The patterns to make canvas apps and model-driven apps fast are well-known but not obvious to first-time makers. **Canvas app performance.** **1. Reduce startup time.** Canvas apps run a substantial OnStart sequence loading data, setting variables, initialising. Minimise the OnStart work: - Move non-critical initialisation to **OnVisible** of the first screen (deferred until needed). - **Concurrent()** function to run multiple operations in parallel rather than sequence. - Cache only what's needed for the first screen; load deeper data lazily. - Avoid huge collections on startup; load on demand. A well-tuned canvas app opens in 2-3 seconds; a poorly-tuned one takes 15-30. **2. Minimise data fetched.** Every Dataverse / SharePoint / SQL call has latency. Reduce: - Use **`Filter()`** with proper delegable filters to push work to the server. - Select specific columns with `ShowColumns()` rather than fetching all. - Avoid `LookUp()` in galleries — it queries per row, devastating for large galleries. - Page large lists; don't load 10,000 records on screen load. **3. Delegation.** Functions like `Filter()`, `Sort()`, `Lookup()`, `Search()` are **delegable** — they run server-side on the data source. Non-delegable functions force client-side processing limited to ~2000 rows. The maker portal warns about non-delegable expressions; address them: - Replace non-delegable string operations with delegable equivalents. - Move complex calculations to Dataverse formula columns or rollup columns. - Refactor formulas to be delegable. **4. Limit gallery work.** Each gallery item evaluates its formulas. A gallery of 100 items with complex formulas in each item evaluates 100 times the work: - Hoist computations out of the gallery to a single Pre-computed variable. - Use `With()` to compute once and reference repeatedly. - Limit visible items; lazy-load on scroll. - Pre-compute formatted strings rather than computing inline. **5. Image optimisation.** Images can dominate app load: - Resize images to display size before uploading; don't load 5MB photos to display as thumbnails. - Use SVG for icons (small, scalable). - Lazy-load images that aren't immediately visible. **6. Avoid heavy controls.** Some controls (PDF Viewer, deeply-nested containers, large data tables) are heavyweight. Use them sparingly; consider lighter alternatives. **Model-driven app performance.** Model-driven apps are mostly platform-rendered; tuning is different from canvas. **1. Form load time.** Each form's load triggers: - Data fetch for the record. - Related-record fetches for subgrids, quick views, lookups. - JavaScript handler execution. - Business rule evaluation. Tune by: - **Limit subgrids on the form** — 5–10 is typical; more slows load. - **Defer non-critical data** — use the *Default state* properties to load tabs lazily. - **Avoid JavaScript async calls in OnLoad** — they block the form render. - **Limit business rules** — many overlapping rules slow evaluation. **2. View performance.** Lists that load slowly: - **Index the columns** used in default filters and sorts. - **Limit columns shown** — fewer columns = faster query. - **Limit default rows** — don't show 10,000 rows by default; let users filter to a manageable subset. **3. Search performance.** Quick Find and Advanced Find: - Quick Find indexes only configured columns; verify the relevant ones are configured. - Dataverse Search (the modern global search) is generally faster than Quick Find for cross-table search. **4. Plug-in performance.** Plug-ins synchronous to record operations add latency: - Profile plug-in execution; long-running plug-ins block users. - Use **asynchronous plug-ins** for non-critical work. - Cache lookups within a plug-in execution. **General principles.** - **Profile before optimising.** Browser dev tools (Network tab), the Power Platform admin centre's analytics, and Application Insights tell you where time is actually spent. Optimise the slow parts, not what you imagine to be slow. - **Test with real data.** A 50-record dev environment performs differently from a 5-million-record production. Validate at scale. - **Test on representative devices.** Mobile, low-bandwidth, older browsers — the app needs to be usable for all users, not just admins on fast desktops. - **Set performance budgets.** "Form must load in under 3 seconds at p95." Measure; fail the budget = refactor. ## Telemetry App Insights configured at the app level captures user interactions and timings. Build dashboards showing: - Page load times per app per screen. - Action durations. - Error rates. - User counts per app. The data drives prioritisation — optimise the screens users actually use. **Common pitfalls.** - **OnStart bloat** — accumulating initialisation logic; app start time grows linearly. - **Non-delegable warnings ignored** — the app works in dev with 100 records; production with 100,000 hits the 2000-row delegation cap and is silently wrong. - **Subgrid proliferation** — every form has 15 subgrids "in case someone needs them"; loading is glacial. - **Custom HTML web resources** doing heavy DOM work; degrade form responsiveness. ## Operational reality Performance is a continuous discipline. Schedule periodic performance reviews; tune as data volume grows; budget refactoring time as part of operations. --- # Power Apps Portals history and rebranding to Power Pages From ADXStudio to Dynamics 365 Portals to Power Apps Portals to Power Pages — the product genealogy and what the rebranding means for customers. Source: https://www.solvingdynamics365.com/guides/power-apps-portals-history-and-rebranding Section: Power Platform / Power Apps Published: 2026-05-01 The product now called **Power Pages** has had several names over the past decade. Older documentation, older training materials, and the institutional vocabulary of long-time partners all reflect prior names. Understanding the lineage helps when reading legacy content and explaining the product's trajectory. ## ADXStudio (2002–2015) The origin: - Canadian company building portals for Dynamics CRM customers. - Open-source-ish base; commercial product. - Liquid templating, table permissions, web roles — concepts still alive today. - Acquired by Microsoft in 2015. ## Dynamics 365 Portals (2016–2018) First Microsoft incarnation: - ADXStudio rebadged. - Integrated with Dynamics 365. - Available as add-on to D365 customer subscriptions. ## Power Apps Portals (2019–2022) Power Platform alignment: - Renamed Power Apps Portals when Microsoft re-aligned the broader Dataverse / Power Platform story. - Same product, slight feature evolution. - Sold as Power Apps capacity-based licensing. ## Power Pages (2022–) Current branding: - Renamed Power Pages. - Modernised authoring experience (Design Studio). - AI-assisted page creation (Copilot). - Stronger focus on low-code makers vs developer customisation. The product underneath has continuity; the surface has been progressively modernised. **Concepts preserved from ADXStudio.** - **Liquid templating language** — used throughout. - **Entity / table permissions** — record-level access control. - **Web roles** — group users for permissioning. - **Web templates** — reusable HTML/Liquid templates. - **Entity forms / entity lists** — Dataverse data rendering. - **Web files** — static content (images, CSS). A developer familiar with ADXStudio finds Power Pages's underlying model immediately familiar. **Modernisation in Power Pages.** - **Design Studio** — visual page builder. - **Themes** — modern theming. - **Copilot** — AI-suggested pages, content, code. - **Pages tied to Dataverse Pages mode** — newer pattern. - **Improved performance** — CDN-based content delivery. The maker experience is faster and more modern than ADX-era. **Two authoring modes.** - **Design Studio** — visual, drag-and-drop. For makers. - **Portal Management app** — table-level editing. For developers/admins. Most makers use Design Studio; deep customisation uses Portal Management. ## Authentication providers Evolved over time: - Initially Microsoft-only. - Added Azure AD, social providers (Google, Facebook). - Now: Entra External ID is the canonical B2C identity provider; supports SAML, OIDC, local accounts. **Use cases.** - **Customer self-service portals** — case submission, knowledge browsing. - **Partner portals** — partner enablement. - **Supplier portals** — vendor self-service for F&O. - **Community forums.** - **Public-facing websites** — though typically not pure Power Pages; CMS for content. - **Industry-specific portals** — healthcare patient, banking customer. **Licensing evolution.** - **Pay-per-user** — per authenticated user / login. - **Pay-per-login** — per session. - **Capacity-based** — purchased capacity tiers. Current: capacity-based, with anonymous and authenticated session tiers. **Comparison with custom-built portals.** - **Power Pages** — fast to build; Dataverse-integrated; managed by Microsoft. - **Custom React + Dataverse API** — flexibility; more dev work. - **SharePoint** — for intranet-style scenarios. Power Pages wins for Dataverse-centric portals at moderate complexity; custom builds win for highly bespoke UX. ## Migration considerations From older portal versions to Power Pages: - Core data and configuration migrate. - Custom Liquid templates carry over. - Visual styling may need refresh. - Authentication providers updated. Microsoft provides migration guidance per legacy version. **Common Liquid patterns.** ```liquid {% assign cases = entities.incident | where: 'customerid', user.contactid %} {% for case in cases %}
{{ case.title }} — {{ case.statecode }}
{% endfor %} ``` Liquid is the templating language for dynamic content. ## Power Pages Pro Code For developers extending beyond no-code: - VS Code with Power Pages extension. - Edit Liquid, JavaScript, CSS in code. - Deploy via Power Platform CLI. This is the developer surface; makers use Design Studio. **Common pitfalls during transition.** - **Sticking with old terminology.** Customers say "portal"; product team says "page" — confusion. - **Migrating without redesign.** Legacy visual style brought forward; outdated UX. - **Authentication migration overlooked.** Old social providers deprecated; users locked out. - **Performance regression.** Lift-and-shift without optimisation; pages slow. ## Strategic positioning Power Pages is the strategic direction for Dynamics 365 customer-facing portals. Power Apps Portals customers should plan to embrace the new branding and capabilities; older Dynamics 365 Portals or ADX customers face a more substantial modernisation. For new portal initiatives, Power Pages is the natural choice — integrated, supported, evolving. The product underneath has nearly two decades of evolution; the latest branding is the modernised face. Understanding both the lineage and the trajectory helps customers and developers plan appropriately. --- # Power Apps Test Engine How the Power Apps Test Engine enables automated UI testing for canvas apps — test definitions, the YAML format, integration with CI/CD. Source: https://www.solvingdynamics365.com/guides/power-apps-test-engine Section: Power Platform / Power Apps Published: 2026-05-01 Canvas apps grew up without good automated testing tooling. Manual testing is slow and unreliable; user-driven testing in production is even worse. The **Power Apps Test Engine** (formerly known by various names) is Microsoft's answer: a declarative test framework for canvas apps integrated with the Power Platform CLI. **What the Test Engine does.** - Drives canvas apps programmatically. - Asserts on app state, control values, screen transitions. - Records test executions for review. - Integrates with CI/CD pipelines. It's like Selenium but specifically designed for canvas Power Apps' rendering model. ## Test format YAML-based: ```yaml testSuite: testSuiteName: My Tests testSuiteDescription: Tests for the order app appLogicalName: my-order-app testCases: - testCaseName: User can create order testCaseDescription: ... testSteps: | Assert(CountRows(Orders) = 0); SetProperty(Button1.Visible, true); Select(Button1); Assert(CountRows(Orders) = 1); ``` The test steps use Power Fx — the same language as the app itself, making tests readable to makers. ## Test execution Via Power Platform CLI: ```bash pac test run --test-plan-file myTests.yaml --tenant-id ... --environment-id ... ``` The CLI launches headless browser, runs the tests, captures results. **Selection mechanisms.** - **By control name** — `Select(MyButton)`. - **By value** — find controls by text content. - **By position** — for galleries. The selector model is straightforward; less brittle than CSS-selector-based tools. **Assertions.** - `Assert(expression)` — verifies the expression is true. - Compare values, counts, properties. - Custom error messages. Failures are captured with screenshots. **Setting values.** - `SetProperty(Control.Property, value)` — directly set a property. - Simulates user input. ## Test data isolation A challenge: - Tests that create data leave residue. - Subsequent tests may see prior test's data. - Mitigation: dedicated test environment; cleanup steps in test teardown. For production CI, tests run against test environment with clean state. **Integration with CI/CD.** - GitHub Actions / Azure DevOps task wraps `pac test`. - Runs on every PR or scheduled. - Failure flags PR; prevents merge. This is the discipline that catches regressions before production. **Limitations.** - **Canvas apps only** — model-driven app testing requires different tools. - **Limited connector mocking** — tests run against real connections; can be slow or test-fragile. - **Browser-based** — same browser quirks affect tests. - **Authentication setup** — tests need credentials. **Mocking connectors.** - Some support for mocking external calls. - Capabilities expanding per release. - Test environment with isolated services preferred over mocking. **Test patterns.** - **Happy path tests** — primary user flow. - **Edge case tests** — empty data, max data, boundary values. - **Negative tests** — invalid input handled. - **Performance tests** — operation duration within budget. For meaningful coverage, multiple test types. ## Coverage Test coverage tooling for Power Apps less mature than for code: - Manual tracking of which scenarios tested. - Periodic review of gaps. **Comparison with manual testing.** | Aspect | Manual | Test Engine | |---|---|---| | Setup time | Low | Higher | | Per-run time | High | Low | | Repeatability | Low | High | | Coverage | Variable | Documented | | CI integration | None | Native | | Regression detection | Slow | Immediate | For any app with significant change rate, Test Engine pays back; for static apps, manual may suffice. **Common pitfalls.** - **Flaky tests.** Timing-dependent failures; tests fail randomly. - **Test data pollution.** Each run leaves residue; subsequent tests see stale data. - **Brittle selectors.** Control renamed; test breaks. - **Authentication friction.** Test user credentials handling poorly; CI fails on auth. - **No teardown.** Test creates data; never cleans up. - **Test = production.** Tests run against production environment; risky. **Best practices.** - **Dedicated test environment.** Isolated; refreshed periodically. - **Test users with appropriate roles.** Just enough access. - **Idempotent tests.** Can run repeatedly without different outcomes. - **Clear test names.** Failure logs are interpretable. - **Test as code.** YAML files in source control alongside app source. ## Beyond Test Engine Some teams also use: - **External tools** — Cypress, Playwright with API integration. - **Manual exploratory testing** — for UX issues automation can't catch. - **A/B testing** — production traffic split. Test Engine is one tool in a broader testing strategy. **Operational rhythm.** - **Per commit** — fast tests run. - **Per PR** — full suite runs. - **Nightly** — extended suite including long-running tests. - **Pre-release** — full regression against production-like data. ## Strategic positioning Automated testing for canvas apps has lagged general software development. Test Engine closes the gap but doesn't eliminate the maturity differential. For apps with significant production traffic, the investment in test automation pays back in confidence and reduced regression rate. For prototype-stage apps, manual testing remains the pragmatic choice. As Test Engine matures and more makers adopt CI/CD practices, automated testing for canvas apps will become standard practice rather than the exception. --- # Power Apps vs Dynamics 365 CRM Power Apps vs Dynamics 365 CRM: both run on Dataverse — when to buy the packaged Sales or Service app and when to build a custom model-driven app instead. Source: https://www.solvingdynamics365.com/guides/power-apps-vs-dynamics-365-crm Section: Power Platform / Power Apps Published: 2026-08-27 Updated: 2026-08-27 "Should we build a custom Power App or buy Dynamics 365?" comes up in every Microsoft business-apps conversation, and the honest answer is that they solve overlapping but different problems. Both run on Dataverse. Both use the same tools to extend. But one ships pre-built with sales / service / field-service processes baked in, and the other is a blank canvas. This guide walks the decision in the shape it takes in real deals. ## What each actually is **Dynamics 365 CRM** (Sales, Customer Service, Field Service, Marketing, Customer Insights, Project Operations) is a collection of **pre-built model-driven Power Apps on top of Dataverse**. Microsoft configured the tables, the relationships, the security roles, the business process flows, the workflows, the dashboards, and the mobile experiences for the specific business processes each app targets. You buy the app, get a working starting point on day one, and configure or extend it to fit your business. **Power Apps** is the platform underneath. A custom Power App is a Power App you build yourself — either **canvas** (drag-and-drop pixel-perfect designs with Power Fx formulas) for task-specific workflows, or **model-driven** (data-centric UI generated from Dataverse metadata) for record-heavy processes with security roles and complex forms. You get a blank Dataverse environment and build whatever you want on it. Architecturally the two are identical below the app layer. Extending Dynamics 365 uses the same tools, the same solutions, the same Dataverse, the same governance as building a custom Power App from scratch. ## When to buy Dynamics 365 Buy Dynamics 365 when the business process you're implementing **matches the shape of a shipped app**: - **Sales.** B2B pipeline management, opportunity tracking, forecasting, quoting, Copilot for Sales inside Outlook. - **Customer Service.** Case management, omnichannel, knowledge management, SLAs, entitlements, agent copilot. - **Field Service.** Work orders, scheduling, mobile technician app, connected assets, IoT. - **Marketing / Customer Insights - Journeys.** Customer journeys, email marketing, event management. - **Project Operations.** PSA — opportunity to cash for services firms. The shipped apps carry decades of learned best practice about how these processes work. Rebuilding an opportunity-to-close pipeline in a custom Power App is possible but wasteful — you spend a year recreating what Sales gives you on day one, and the year of feature investment you'd have needed to keep it competitive with Sales' quarterly Wave updates never happens. ## When to build a custom Power App Build a custom Power App when the process is **specific to your business and doesn't map to a shipped app**: - A **field-inspection app** for a specific regulated industry — inspection templates, photo capture, compliance sign-off — that doesn't fit Field Service's work-order model. - A **manufacturing floor tracking app** for a specific production line — barcode scan, batch attributes, custom quality gates. - An **internal-approvals app** — travel requests, capex approvals, procurement pre-authorisation — that's uniquely shaped by your policy. - A **customer-facing portal** on Power Pages that doesn't need Dynamics 365's back-end. - A **legacy-system-front-end** app that surfaces data from an on-prem system through virtual tables without duplicating it into Dataverse. The pattern: highly specific to your business, low overlap with any shipped CRM app, and a working prototype in 2-4 weeks with a small team. ## When to do both The common pattern is **Dynamics 365 for the core CRM process, custom Power App(s) for the adjacent workflows** the CRM doesn't cover naturally. A field-service business runs **Dynamics 365 Field Service** for work orders, dispatch, and mobile technicians, then adds a **custom Power App** for the pre-work customer-site-audit workflow that Field Service's data model doesn't fit cleanly. Both apps share the same Dataverse, the same Account and Contact records, the same Copilot layer. The custom app is not "instead of" Field Service — it's alongside it. The custom app benefits from Field Service being there: shared identity, shared master data, shared reporting. Field Service benefits from the custom app being there: the customer's full pre-work data is on the customer timeline for the technician to reference. ## The economics **Dynamics 365 CRM** is per-user per-month at a real price point. Sales Enterprise is around $95/user/month; Customer Service Enterprise similar. Attach licensing reduces the second-app cost. **Power Apps** licensing is either **per-app** (approx $5/user/month per app) or **per-user** (approx $20/user/month for unlimited apps). Substantially cheaper per user than Dynamics 365, but you also get less — you're building the app yourself. For a custom app that would replace Dynamics 365 Sales, add up the build cost (engineering time to build, plus the feature investment you'd need to keep it competitive over five years) against the licence saving (approximately $75/user/month × user count × 60 months). For most sales-org sizes the build cost dwarfs the licence saving. For a custom app in a workflow Dynamics 365 doesn't cover, the licence saving is real because there's no Dynamics 365 licence to buy in the first place. ## The failure modes Two common failure modes deserve calling out. **"Let's build custom because Dynamics 365 is too much."** This is the argument to run away from features you'll wish you had in a year. Sales' forecasting, sequences, sales accelerator, Copilot for Sales — these are years of Microsoft investment. If your process fits Sales, use Sales. The "we'll build a simpler version" instinct almost always ends with the custom app slowly growing to match what Sales already does, at your cost. **"Let's buy Dynamics 365 because Power Apps is too complicated."** This is the argument that shows up when the actual business process is genuinely unique. Dynamics 365 was configured for the *typical* sales / service / field-service workflow. If your workflow deviates materially — different data model, different lifecycle, different UX — you fight the shape of Dynamics 365 to force it to fit, and every quarter's Wave brings changes that break your customisations. Better to build the custom app that fits the process. The decision is not "how sophisticated am I" — it is "does my process match the shipped app's shape." ## The short version Dynamics 365 CRM = pre-built Power Apps for sales / service / field-service. Power Apps = the platform underneath for building your own. Buy Dynamics 365 when your process matches a shipped app. Build a custom Power App when your process is genuinely specific. Do both when there's a core CRM process alongside adjacent workflows that don't fit the shipped app. Don't build a custom replacement for a shipped app unless you're prepared to fund the feature roadmap yourself. ## Where to go next The build side starts with [canvas apps vs model-driven apps](https://www.solvingdynamics365.com/guides/canvas-apps-vs-model-driven-apps) on [Dataverse](https://www.solvingdynamics365.com/guides/what-is-microsoft-dataverse); the general principle is [build vs buy in the Dynamics 365 ecosystem](https://www.solvingdynamics365.com/guides/build-vs-buy-in-the-dynamics-365-ecosystem). The economics come from [Dynamics 365 licensing explained](https://www.solvingdynamics365.com/guides/dynamics-365-licensing-explained) and the [Power Apps](https://www.solvingdynamics365.com/pricing/power-apps) and [Sales](https://www.solvingdynamics365.com/pricing/sales) pricing pages. ### Frequently asked questions **What is the actual relationship between Power Apps and Dynamics 365 CRM?** Dynamics 365's CRM apps are pre-built model-driven Power Apps on Dataverse. Buying Dynamics 365 buys you Microsoft's configuration of tables, security roles, process flows and dashboards for a specific business process. Building on Power Apps means starting from a blank Dataverse environment. **How do the license costs compare?** Dynamics 365 Sales Enterprise is around 95 dollars per user per month; Power Apps is roughly 5 dollars per user per app or 20 dollars per user for unlimited apps. Power Apps is much cheaper per seat, but you are building — and maintaining — the application yourself. **When is building custom a mistake?** When your process actually fits a Dynamics 365 app. Forecasting, sequences, the sales accelerator and Copilot for Sales represent years of Microsoft investment; a 'simpler custom version' almost always grows back toward what Sales already does, at your cost. **When is buying Dynamics 365 the mistake?** When the workflow deviates materially from the typical sales or service shape — different data model, lifecycle and UX. Then you end up fighting the shape of Dynamics 365, and release waves keep breaking your workarounds. Build the app that fits the process instead. --- # Power Automate approvals in depth How the Approvals platform works under Power Automate — connector, approval types, delegation, the unified approval centre. Source: https://www.solvingdynamics365.com/guides/power-automate-approvals-in-depth Section: Power Platform / Power Automate Published: 2026-05-01 Approvals are one of the most common Power Automate scenarios — purchase requests, expense submissions, document reviews, time-off requests. The **Approvals** built-in connector wraps an underlying Dataverse-backed approval engine that's more capable than the simple "yes/no" pattern most flows implement. **Approval types.** - **Approve/Reject — First to respond** — the first approver wins. - **Approve/Reject — Everyone must approve** — all approvers must say yes. - **Custom Responses — Wait for all responses** — multi-choice responses (Approve, Reject, More info), require all. - **Custom Responses — Wait for one response** — multi-choice, first response wins. The right type per scenario: - **Sequential single approver** — First to respond with one approver. - **Parallel approval** — First to respond with multiple approvers (escalation). - **Council/board decisions** — Everyone must approve. - **Multi-option workflows** — Custom responses with paths per choice. **Approval lifecycle.** 1. **Create an approval** with type, title, details, approvers. 2. **Wait for approval response** — flow pauses; approvers receive notifications (email, Teams, mobile push). 3. **Response captured** — outcome and comments. 4. **Flow continues** with branching based on outcome. The flow is *idle* during the wait — no resource cost until response arrives. Approvals can wait for hours, days, or months without timing out. **Notification channels.** - **Email** — actionable cards with approve/reject buttons. - **Teams** — adaptive card; tap-to-approve. - **Mobile app** — Power Automate mobile sends push notifications. - **Web** — the Approvals page at make.powerautomate.com. The approver can use any channel; all sync through the underlying Dataverse table. ## Approval centre The user's view of pending and historical approvals: - **Received** — approvals awaiting their action. - **Sent** — approvals they initiated (created). - **History** — closed approvals. For users with high approval volume, the centre is the working surface. ## Adaptive cards Approval notifications use **Adaptive Cards** — JSON-defined cards that render in Teams, Outlook, and Microsoft Loop. Custom Approvals support rich card content: tables, images, multiple action buttons, dropdowns. ## Delegation Approvers can delegate: - **In-product delegation** at the user's M365 settings — "while I'm away, route my approvals to X." - **Programmatic re-assignment** within a flow — if the original approver hasn't responded in N hours, escalate. For finance leads, delegation is essential to keep approval cycles moving during PTO. ## Reminders and escalations Native reminders aren't built into the simple approval pattern. Common implementation: - Start approval. - Configure a parallel wait branch with a timeout. - After timeout, send reminder email or escalate to a different approver. For more sophisticated escalation, a "child flow" pattern triggers nudges and updates. ## Multi-stage approvals A typical purchase approval: 1. Manager approves. 2. If approved and amount > $5K, director approves. 3. If approved and amount > $50K, CFO approves. Build sequentially with branching, or use sub-flows per stage for cleanliness. ## Audit trail Every approval has a full record: - Requestor. - Approvers (assigned, responded, when, comment). - Status changes. - Linked documents. The Dataverse `Approvals` table is queryable. For compliance reporting, a Power BI dashboard over the Approvals table shows median time-to-decision, denial rate, and bottlenecks. ## Approval data structure Each approval is a row in the `Approval` Dataverse table; responses are rows in `Approval Response`. Standard Dataverse permissions apply — solution-aware, security-roled, exportable. **Common pitfalls.** - **Long-stalled approvals.** No reminders, no escalation, sits forever. Always design escalation. - **Wrong type chosen.** Using "First to respond" when "Everyone must" was intended; bypassed approvals. - **Sensitive data in approval details.** The details show in emails to potentially unauthorised forwarders; redact sensitive content. - **Approver list hard-coded.** A flow with John as approver breaks when John leaves. Look up approvers dynamically (manager from M365, role-based from Dataverse). - **Notifications missed.** Approver on PTO without delegation; flow stalls. Build delegation discipline. ## At scale A company running thousands of approval flows benefits from: - **Approval templates** — standardised flows for common patterns; makers reuse. - **Approval portal** — a custom Power Apps page showing all pending approvals with filtering, useful for execs with high volume. - **Approval analytics** — Power BI dashboard on Dataverse approval data. ## Operational guidance The Approvals connector is one of the most reliable, performant parts of Power Automate. Use it generously. The trap is treating each approval flow as a one-off; with templates and consistent patterns, approval flows become a managed asset rather than scattered code. --- # Power Automate child flows How child flows decompose Power Automate workflows into reusable pieces — definition, invocation, parameters, and the operational impact on maintainability. Source: https://www.solvingdynamics365.com/guides/power-automate-child-flows Section: Power Platform / Power Automate Published: 2026-07-22 A Power Automate flow with 50 actions, branches, loops, and error handling is unmaintainable. **Child flows** solve this — let one flow invoke another, encapsulating reusable logic in a separate flow that can be developed, tested, and maintained independently. ## What a child flow is A child flow is a normal Power Automate cloud flow with two characteristics: - It's triggered by **Power Apps** or **HTTP request** (not by a Dataverse / SharePoint / scheduled trigger). - It returns a value through a **Response** action (or in the case of HTTP, an HTTP response). The "trigger by HTTP request" pattern is what enables child flows. A parent flow calls the child by sending an HTTP-style invocation; the child runs; the parent receives the response. **Why child flows.** - **Reusability.** A common pattern (e.g. "validate customer credit", "generate a quote PDF", "send a personalised email") used in many places gets implemented once as a child flow; many parent flows call it. - **Maintainability.** Smaller flows are easier to understand, test, modify. Splitting a 100-action mega-flow into a parent and several child flows produces 5 flows of 20 actions each — substantially more tractable. - **Versioning.** Child flows version independently; changes to the child flow don't require modifying every parent. - **Permissions and ownership.** Different teams can own different child flows; integration is clean. - **Performance** — sometimes. Each child flow invocation has overhead; for small operations the overhead exceeds the encapsulation benefit. Use for substantial logic blocks, not trivial ones. **Implementing a child flow.** 1. **Create the child flow.** Trigger: "When an HTTP request is received" (or "PowerApps"). 2. **Define inputs.** The HTTP trigger has a JSON schema for the request body; structure inputs as JSON properties. 3. **Implement logic.** Standard Power Automate actions. 4. **Return output.** End with a **Response** action returning JSON with the output data. 5. **Save and copy the URL.** The HTTP trigger generates a unique URL when saved; the parent flow uses this URL to call the child. **Calling a child flow from a parent.** 1. In the parent flow, add an **HTTP** action. 2. Set method to POST. 3. URL to the child flow's invocation URL. 4. Body to the JSON payload matching the child's input schema. 5. Add a **Parse JSON** action to parse the child's response. 6. Use the parsed outputs in subsequent actions. The pattern is functional but verbose. Microsoft has been improving the experience with native "Run a child flow" actions — but the underlying mechanism is HTTP. **Error handling.** - **Child flow errors** — if the child flow fails, the HTTP call returns an error status. The parent must handle. - **Retry policy** — the HTTP action's retry configuration governs how many times to retry on child failure. - **Compensation** — if a child flow performs side effects then fails, the parent may need to roll back. Design for it. **Performance considerations.** - Each child-flow invocation has HTTP overhead — typically hundreds of milliseconds. - For high-frequency calls (a parent that calls a child 1000 times), the overhead dominates. - For substantive child operations (each running for seconds or minutes), the overhead is negligible. **Limits.** - **HTTP action requires premium connector** — flows using HTTP need premium Power Automate licences. - **Loops over child invocations** — Apply to Each calling a child for each record can hit timing / throughput issues at scale. Consider batching. - **Schema-evolution awareness** — when a child flow's input or output schema changes, all parent flows need updating. Treat as API versioning. **Patterns and examples.** - **Authentication helper** — a child flow that, given a token request, returns a Bearer token. Parent flows call it before making external API calls. - **Audit log helper** — a child flow that records an entry in the audit log Dataverse table. Many parent flows call it to log significant events. - **PDF generation helper** — a child flow that, given record data, generates and stores a PDF. Many parent flows trigger document generation. - **Notification orchestrator** — a child flow that handles multi-channel notification (email + SMS + Teams) based on user preferences. Parent flows just say "notify". ## Solution and ALM Child flows live in solutions like any flow. Reference between solutions: - **Same solution** — child and parent in the same solution; deploy together. - **Different solutions** — child flow in a "shared services" solution, parents in different feature solutions. The parent flows reference the child by ID. For ALM, the parent's HTTP URL is environment-specific; use **environment variables** to abstract the URL. **Common pitfalls.** - **Child flow URL hard-coded** — different environments have different URLs; manual update required at each deploy. Use environment variables. - **Synchronous vs async confusion** — child flow runs synchronously to the HTTP call; if it's long-running, the parent waits. For long operations, consider passing a callback URL for asynchronous notification. - **Permission propagation** — the child flow runs as its owner's identity, not the parent's. If the child needs the parent's user context, pass relevant context as input. ## Operational reality For Power Automate work that grows beyond simple flows, child flows are the maintainability lever. Adopt them early; refactor existing complex flows incrementally as opportunities arise. --- # Power Automate connectors for Dynamics 365 The standard and premium Power Automate connectors for Dynamics 365 — what each one does, the differences, and the licensing implications. Source: https://www.solvingdynamics365.com/guides/power-automate-connectors-for-dynamics-365 Section: Integrations / API & identity Published: 2026-05-01 Power Automate connectors are the bridges between flows and other systems. For Dynamics 365 customers, several connectors matter — and the difference between standard and premium connectors is important for licensing and capability. ## Microsoft Dataverse connector The right connector for any CRM-side D365 app (Sales, Customer Service, Field Service, Project Operations, Customer Insights, Power Apps with Dataverse). Triggers on row created/updated/deleted/added; actions for full CRUD, executing actions, file uploads, and relating records. Supports filtering and column selection. Premium connector — flows using it require a Power Automate per-user or per-flow licence beyond what's included with most Dynamics 365 SKUs. ## Common Data Service (current environment) connector The older name; functionally equivalent and being phased out in favour of "Microsoft Dataverse". Still appears in older flow templates. ## Dynamics 365 connector (legacy) An older connector for CRM-side apps, predating Dataverse-native. Microsoft recommends migrating to the Dataverse connector. ## Dynamics 365 Business Central connector First-party. Triggers and actions for Customer, Vendor, Item, Sales Order, Purchase Order, Sales Invoice, Sales Quote, Journal Lines, Locations, and many more. Standard CRUD and bound actions for posting, releasing, and cancelling documents. Premium. ## Dynamics 365 Finance and Operations (legacy) connector Targets F&O data entities. Premium. ## Dynamics 365 for Fin & Ops (Recurring Integrations) A separate connector that targets the recurring integration API for batched data project imports/exports. ## Custom connectors When the first-party connector doesn't expose what you need, build a **custom connector** from an OpenAPI/Swagger definition. Custom connectors are premium and use the same authentication and policy framework as built-in ones. ## Licensing This is where teams get caught out. A flow that uses *only* standard connectors (SharePoint, Outlook, Teams, Office 365) can run on the free Power Automate licence bundled with M365. A flow that uses a **premium connector** — Dataverse, Business Central, F&O, SQL Server, HTTP, custom connector — requires a *premium* Power Automate licence on the **flow owner**. Per-user (one user, unlimited flows) or per-flow (one flow, unlimited users) plans are available. Most Dynamics 365 SKUs include limited premium Power Automate rights, often labelled *"Power Automate for Dynamics 365"* — these allow flows that are **directly related to the licensed Dynamics 365 app**, but not arbitrary Power Automate use. ## Throttling Each connector has request limits per user per 24h, plus shorter spike limits. Bursty flows can hit the limits and produce HTTP 429s. Throttle limits are documented per connector; the most common D365 connector limits are generous but real. ## The pattern For any non-trivial flow involving Dynamics 365, plan: which premium connectors does it call, who owns it, what licence does the owner have. --- # Power Automate Desktop and RPA How Power Automate Desktop automates legacy applications with RPA — attended vs unattended, machine groups, AI Builder integration, and where to use it. Source: https://www.solvingdynamics365.com/guides/power-automate-desktop-and-rpa Section: Power Platform / Power Automate Published: 2026-05-01 **Power Automate Desktop (PAD)** is Microsoft's Robotic Process Automation (RPA) tool — the bit of the Power Automate stack that drives the user interface of *other applications*, including legacy desktop apps, terminal emulators, ancient web apps, and anything else without a usable API. For Dynamics 365 customers, PAD is the bridge to systems that haven't joined the API era yet. **Attended vs unattended.** - **Attended RPA** — the bot runs on a user's own desktop while the user is logged in. The user triggers it (or it triggers from a Power Automate cloud flow), watches it work, and can intervene. The right pattern for assistant bots: a salesperson clicks a button, the bot opens a legacy CRM, copies opportunity data, and pastes it into Dynamics 365. Available with most Power Automate paid plans. - **Unattended RPA** — the bot runs autonomously on a dedicated machine or VM, without a user logged in. Triggered by Power Automate cloud flows on a schedule or event. The right pattern for batch processes: a nightly job logs in to a legacy ERP, extracts a report, and uploads it to Dynamics 365. Requires a Power Automate **unattended RPA add-on** licence per bot, plus dedicated infrastructure. ## Machine groups For unattended scenarios at scale, **machine groups** pool multiple machines so flows can scale horizontally. Cloud flows queue work, and any available machine in the group picks it up. Microsoft also offers a managed **hosted machines** option where Microsoft provisions and manages the bot VMs. ## Building flows PAD's flow designer is desktop-based — a Windows application installed on the machine where flows are authored. Actions are drag-and-drop: open browser, click element, send keys, extract text, read Excel, OCR image, call AI Builder model, branch on condition, loop. The designer captures UI elements visually — click on a button in the target app, and PAD records the selector for replay. ## UI selectors The fragile part of any RPA. PAD selectors can be DOM (for web), UI Automation (for Win32 / WPF / UWP), image-based (last resort), or coordinates (avoid). Changes to the target application's UI break selectors. Robust RPA design uses the most stable selector available and tolerates layout drift where possible. ## AI Builder integration PAD calls AI Builder models inline — extract text from an image, classify a document, predict a value — combining classic RPA with AI-driven processing. **Where to use it.** - Legacy ERP / CRM that has no usable API. - AS/400 green-screen apps still running in some manufacturing and finance shops. - Excel-heavy back-office processes that can't be redesigned. - Bridge during a system migration: temporarily double-key into both old and new systems during cutover. ## Where not to use it Any time a real API exists. RPA is brittle; integrations through APIs are stable. PAD is the *last resort*, not the first. ## Operating discipline Build runbooks: what to do when a bot fails. Monitor bot run history daily in early life. Plan for the inevitable target-application UI change that breaks the bot. Budget for ongoing maintenance — RPA without maintenance is failed RPA. ## Licensing reality Attended is bundled with most paid Power Automate plans; unattended requires a per-bot add-on plus infrastructure (Microsoft-hosted or self-hosted). Costs add up at scale; do the maths against the manual effort being replaced. --- # Power Automate error handling patterns How to handle errors robustly in Power Automate flows — try/catch scopes, configure run-after, retry policies, dead-letter handling. Source: https://www.solvingdynamics365.com/guides/power-automate-error-handling-patterns Section: Power Platform / Power Automate Published: 2026-07-24 A Power Automate flow without error handling fails silently — the run shows red, but unless someone watches the run history, nobody notices. Robust flows handle errors explicitly: retry transient issues, route persistent failures to alerting, log context for debugging, and recover gracefully. The patterns aren't complex but they're not obvious to first-time makers. **The try/catch/finally pattern.** Power Automate's flow design doesn't have native try/catch syntax, but the equivalent is achieved through **Scope** actions plus the **Configure Run After** option: 1. Wrap the main logic in a **Scope** action — labeled "Try" by convention. 2. Add another Scope after — labeled "Catch". 3. On the Catch scope, configure **Run After** = "has failed", "is skipped", or "has timed out" of the Try scope. 4. Optionally add a third Scope labeled "Finally" — Run After = "is successful", "has failed", "is skipped", "has timed out" of both Try and Catch. The flow structure: ``` Try (Scope) { ... main logic } Catch (Scope) - Run After "has failed" of Try { ... error logging, alerting, compensation } Finally (Scope) - Run After all of Try and Catch { ... cleanup, regardless of outcome } ``` If anything in Try fails, the Try scope fails, Catch runs. If everything in Try succeeds, Catch is skipped, Finally still runs. **What to do in Catch.** - **Log the error.** Inside the Catch, retrieve the failed action's output via `actionOutputs('ActionName')` or the workflow's overall error via `result('Try')`. Write to a Dataverse log table, Application Insights, or a notification channel. - **Notify.** Send a Teams message, email, or alert to operations. Critical failures go to a real distribution list; routine failures might just log. - **Compensate.** If the failed action had side effects, undo them. If you created a record then a downstream step failed, delete the record. - **Decide whether to terminate the flow.** Sometimes you log and continue (graceful degradation); sometimes you halt. **Retry policies.** Each action has a **retry policy** configurable via the action's settings: - **None** — fail immediately on error. - **Default (exponential)** — retry up to 4 times with exponential backoff. Used for transient failures. - **Fixed** — retry on a fixed schedule. - **Exponential (configurable)** — custom backoff. Default retry handles transient HTTP 5xx errors, brief connector outages, throttling. Don't apply retry to non-idempotent operations — a "create record" action retrying could create duplicates. **Configure Run After granularity.** Beyond "has failed", Run After supports specific failure conditions: - **is successful** — only if the previous action succeeded. - **has failed** — only on failure. - **is skipped** — when the previous action was skipped (e.g. by a parent failure cascade). - **has timed out** — specifically when an action exceeded its timeout. Combinations cover specific recovery scenarios — "retry on timeout but not on auth failure", for example. **Try/Catch within loops.** For Apply to Each loops: - **Default behaviour**: a single iteration's failure aborts the loop. - **Continue on error**: wrap the loop body in a Try/Catch scope; the Catch logs the failure but doesn't halt the loop. The loop processes remaining items. This pattern is essential for bulk processing where one failure shouldn't block the rest. **Dead-letter handling.** For integrations that can't tolerate event loss, a **dead-letter pattern**: 1. Try the main logic. 2. On persistent failure (after retries exhausted), write the failed item to a "dead letter" table or queue. 3. Operations team monitors the dead-letter table; investigates and reprocesses. This handles the genuine "we couldn't do it now, but it must be done eventually" pattern. **Idempotency.** Retry-friendly flows must be idempotent — running the same action twice produces the same result. Patterns: - **Check before create** — query for the target record; create only if it doesn't exist. - **Upsert** — use the Dataverse "Upsert" pattern (insert if not exists, update if exists). - **Correlation IDs** — track each processing attempt; the downstream system uses the ID to detect duplicates. Non-idempotent flows that retry create duplicate records, double-charge, or send multiple notifications. **Monitoring and alerting.** - **Run history** — visible in the Power Automate maker portal. Manual review. - **Application Insights** — flows can write to App Insights via the HTTP action; centralised monitoring. - **Failure notification flows** — a "watcher" flow that scans recent failures and sends consolidated alerts. - **CoE Starter Kit** — surfaces flow failures across the tenant in dashboards. **Common pitfalls.** - **No error handling at all** — flows fail silently. - **Catch that doesn't log enough** — alert says "flow failed" without context. - **Retry without idempotency** — duplicates pile up. - **Continue on error globally** — important failures are silently swallowed. - **Try/Catch around trivial actions** — the overhead exceeds the benefit. ## Operational reality Error handling is not optional for production flows. Build it from the start; revisit when failures surface. Failed flows that no one notices undermine confidence in the whole platform. ## Where to go next The errors these patterns catch are decoded in [flow failures explained](https://www.solvingdynamics365.com/guides/power-automate-flow-failures-explained), and seeing them before users do is [error monitoring](https://www.solvingdynamics365.com/guides/power-automate-error-monitoring). Design-level companions: [flow design patterns](https://www.solvingdynamics365.com/guides/power-automate-flow-design-patterns), [retry policies with Azure services](https://www.solvingdynamics365.com/guides/retry-policies-with-azure-services), and [idempotency in integrations](https://www.solvingdynamics365.com/guides/idempotency-in-dynamics-365-integrations) — the property that makes a retry safe. --- # Power Automate flow design patterns How to design reliable, maintainable Power Automate flows — triggers, retries, error handling, child flows, and what not to do. Source: https://www.solvingdynamics365.com/guides/power-automate-flow-design-patterns Section: Power Platform / Power Automate Published: 2026-05-01 Power Automate flows are easy to build and surprisingly easy to ruin. Bad flows fail silently, generate alert fatigue, exceed API limits, and leave admin teams chasing ghosts. The good news: a handful of design patterns prevent almost all of it. **Pick the right trigger.** - **Instant triggers** — manually invoked or button-triggered. For ad-hoc work. - **Automated triggers** — when a Dataverse, SharePoint, or SaaS event happens. Default for most CRM automation. - **Scheduled triggers** — on a clock. For periodic ETL, reminders, cleanup. Don't poll on a schedule if an automated trigger exists — you'll generate noise and miss events. ## Filter at the trigger, not in the flow Most triggers accept filters. Filtering "Account created" by the Type = 'Customer' at the trigger saves the flow from spinning up on every Account create. ## Idempotency Flows can fire twice — connector retries, replays, manual re-runs. Design actions to be idempotent: check before inserting, use upsert semantics, store a correlation ID on the source record so retries don't double-process. ## Concurrency control A flow with many concurrent runs racing on the same record causes locks and corruption. Set **concurrency limits** to serialise runs per record key when ordering matters. ## Error handling Wrap critical actions in **try/catch/finally** scopes. Configure each action's **retry policy** (exponential backoff by default; sometimes None for non-idempotent calls). On error, log to a Dataverse log table and notify a Teams channel — don't email an individual. ## Child flows Pull repeated logic into **child flows** so it's one definition called from many parents. Saves duplication and isolates failure handling. ## Variables and expressions Keep flows readable: name variables, comment with the description field on each action, avoid 20-deep nested expressions. If an expression goes over one line, extract it into a Compose action with a descriptive name. ## Performance Use the OData **$filter** and **$select** on Dataverse list actions — the *Filter rows* and *Select query* fields are not cosmetic, they push work to the server. ## Don't put long-running work in flows Flows have action timeouts and run-duration limits. For work that takes more than a few minutes, hand off to **Azure Durable Functions**, **Service Bus**, or a Job Queue entry on the back-office system. ## Test in dev, deploy with solutions Build flows inside a **managed solution** so they version, export, and import cleanly across environments. Building directly in production is the express route to drift. ## Monitor The **Power Platform admin centre** shows flow run history, success rate, and quota usage. Check it weekly until your flows are boring. ## Where to go next The companion guides are [error handling patterns](https://www.solvingdynamics365.com/guides/power-automate-error-handling-patterns), [child flows](https://www.solvingdynamics365.com/guides/power-automate-child-flows), and [connectors for Dynamics 365](https://www.solvingdynamics365.com/guides/power-automate-connectors-for-dynamics-365). When a flow fails anyway, [flow failures explained](https://www.solvingdynamics365.com/guides/power-automate-flow-failures-explained) decodes the message. And before a high-volume flow is built, [plug-ins vs Power Automate](https://www.solvingdynamics365.com/guides/integrating-with-dataverse-plug-ins-vs-power-automate) is the decision to make. --- # Power Automate flow failures explained The Power Automate errors that stop flows — ActionFailed, BadGateway, InvalidTemplate, 429 throttling, 'Could not find a property named', null Apply to each, expired connections, DLP suspension, silent triggers — with fixes. Source: https://www.solvingdynamics365.com/guides/power-automate-flow-failures-explained Section: Power Platform / Troubleshooting Published: 2026-09-03 Flow failures fall into four families: the flow ran and an action failed; the flow ran and an expression could not be evaluated; the flow was throttled, suspended, or lost its connection; or the flow never ran at all. The run history tells you which, if you know where to look. This reference covers the recurring errors in each family with the fix. Design-level patterns for making flows fail safely are in [Power Automate error handling patterns](https://www.solvingdynamics365.com/guides/power-automate-error-handling-patterns); detecting failures before users do is in [error monitoring](https://www.solvingdynamics365.com/guides/power-automate-error-monitoring). ## Reading a failed run Open the run, expand every scope and loop until you reach the action with the red icon, and read its Outputs pane: the status code, the error body, and — for connectors — the request the connector actually sent. The message at the top of the run is a summary of a summary; the action's raw output is the truth. ## Actions that failed ### "ActionFailed. An action failed. No dependent actions succeeded." **Symptom.** A scope, condition, or Apply to each shows failed with this text. **Cause.** A child action failed and the container reports it. Also appears when every branch of a condition was skipped because the actions were configured to run only on success of something that failed. **Fix.** Drill into the container; fix the actual failing action. Check Configure run after on actions that should run on failure. ### "BadGateway" / 502 / "The service is unavailable" / 503 **Symptom.** A connector action fails with a gateway status; a retry an hour later works. **Cause.** The connector's backend, the on-premises data gateway, or the target service was unavailable or timed out. On the gateway, it often means the gateway machine is off, out of memory, or its service account's password expired. **Fix.** Resubmit the run. If it recurs, check the gateway's status in the admin centre and the target service's health; add a retry policy (Settings on the action) with exponential backoff. **Prevention.** Default retry policy on every action that talks to a network; gateway clusters rather than single machines for on-premises sources. ### "The response is not in a JSON format." **Symptom.** An HTTP action or a custom connector fails parsing. **Cause.** The endpoint returned HTML (a login page, an error page), an empty body, or XML. Typically an expired token, a wrong URL, or an API that returns 204 No Content. **Fix.** Look at the raw body in Outputs. Fix the authentication or URL; for legitimate non-JSON responses, read `body()` as text or use the Parse JSON action only when there is content. ### "OpenApiOperationParameterValidationFailed" / "Input parameter 'X' is required" **Cause.** A required field on the action is empty at runtime — a dynamic content token that resolved to nothing. **Fix.** Trace the token back to its source action and see why it was empty; add a condition or a `coalesce()` default. ### Dataverse: "Resource not found for the segment 'X'." / "Could not find a property named 'X' on type 'Microsoft.Dynamics.CRM.account'." **Symptom.** A List rows, Get a row, or Update a row action fails with an OData message. **Cause.** The table name in the URL segment is wrong (it wants the plural entity set name, `accounts`, not `account`), or a column in Filter rows, Select columns, or Expand query is not the lowercase logical name. Lookups in filters need the `_value` form: `_parentcustomerid_value eq '…'`. **Fix.** Use exact logical names from the table's Columns view; test the filter in the browser against `/api/data/v9.2/` first. **Prevention.** [FetchXML vs OData](https://www.solvingdynamics365.com/guides/fetchxml-vs-odata-in-dataverse) covers both query languages; use FetchXML for anything with joins. ### Dataverse: "A record with the specified key values does not exist" — 0x80040217 / "Does Not Exist" **Cause.** Get a row with a GUID that was deleted, a wrong table, or a value that is not a GUID at all (a name pasted into an id field). **Fix.** Check the value flowing into Row ID; use an alternate key when you only have a business key. ### Dataverse: "Number of requests exceeded the limit of 6000 over time window of 300 seconds" — 0x80072322, HTTP 429 **Symptom.** Dataverse actions fail under load, often in an Apply to each. **Cause.** Dataverse service protection limits per user: 6,000 requests per five minutes, 52 concurrent requests, and 20 minutes of combined execution time per five minutes. A flow that loops over thousands of rows calling Get and Update for each hits it. **Fix.** Reduce calls: use Expand query instead of a Get per row, filter at the source, batch with the Dataverse unbound action or a plug-in. Add a retry policy that respects `Retry-After`. Consider [plug-ins](https://www.solvingdynamics365.com/guides/integrating-with-dataverse-plug-ins-vs-power-automate) for genuinely high-volume work. **Prevention.** Design for the limits: [batch operations in the Dataverse Web API](https://www.solvingdynamics365.com/guides/batch-operations-in-the-dataverse-web-api) and the platform's request allocations. ### Connector: "Rate limit is exceeded. Try again in X seconds." — 429 **Cause.** The connector's own throttle (Office 365 Outlook, SharePoint, Excel Online each have per-minute caps per connection). **Fix.** Same as above: fewer calls, retry with backoff, spread work over multiple connections or time. ## Expressions that could not be evaluated ### "InvalidTemplate. Unable to process template language expressions in action 'X' inputs at line '1' and column 'N': …" **Symptom.** The action fails before running; the error quotes an expression. **Cause.** The rest of the message says which: "The template language function 'int' expects its parameter to be an integer or a string" (type mismatch), "property 'body' doesn't exist" (a token referencing an action that was skipped or returned nothing), "The template language expression cannot be evaluated because property 'value' cannot be selected" (indexing into null), "The template function 'formatDateTime' expects…" (a null date). **Fix.** Wrap risky reads in `coalesce()` or `if(empty(...))`; check the run-after configuration so the action does not run when its source was skipped; use the `?` operator for optional properties (`body('Get')?['field']`). **Prevention.** Assume every dynamic token can be null on real data. ### "The execution of template action 'Apply_to_each' failed: the result of the evaluation of 'foreach' expression … is of type 'Null'. The result must be a valid array." **Cause.** The array fed to Apply to each is null — the List rows returned nothing, or the token points at a property that does not exist. **Fix.** Feed the loop `coalesce(outputs('List_rows')?['body/value'], json('[]'))`, or add a condition on `length()` before the loop. ### "ExpressionEvaluationFailed" The same family as InvalidTemplate, raised at evaluation time. Read the detail; the fix is identical. ## Connections, licences, and policy ### "Unauthorized" / "ConnectionAuthorizationFailed" / "The connection is not authenticated" **Symptom.** Every run of a flow fails at the first connector action; the connection shows a warning in Data > Connections. **Cause.** The connection's token expired or was revoked — a password change, MFA policy change, the owner leaving the organisation, or a service principal secret expiring. **Fix.** Re-authenticate the connection, or better, repoint the connection reference to a service account's connection. **Prevention.** Solution-aware flows with [connection references](https://www.solvingdynamics365.com/guides/connection-references-and-environment-variables) owned by a service account, and secrets in Key Vault with expiry alerts. ### Flow owner left the organisation **Symptom.** Flows fail with connection errors, or are turned off, after a leaver's account is disabled. **Cause.** The flows and their connections belonged to a person. **Fix.** Add a co-owner or reassign ownership through the admin centre's flow management; recreate connections under a service account. **Prevention.** Every production flow in a solution, owned by a service account, with the team as co-owners. ### "This flow is suspended because it violates a DLP policy" / "Flow suspended" **Cause.** A DLP policy now classifies two of the flow's connectors in different groups (Business and Non-Business), or blocks one of them. Also suspended when a premium connector is used and the owner's licence lapsed. **Fix.** Change the connectors to comply, request a policy exception, or fix the licence. The admin centre's policy report shows which rule was hit. **Prevention.** Check the environment's DLP policy before designing a flow with a new connector; [DLP policies in Power Platform](https://www.solvingdynamics365.com/guides/dlp-policies-in-power-platform) explains the groups. ### "Flow run timed out" / approval never returned **Cause.** A cloud flow run cannot exceed 30 days. An approval or a Delay until that waits longer than that fails. **Fix.** Redesign long waits: record the pending state in Dataverse and use a second flow triggered by the response, or a scheduled reminder that escalates. ## The flow that never ran ### Dataverse trigger does not fire **Cause.** In order of likelihood: the trigger's Scope is User or Business unit and the change came from someone outside it; Select columns lists columns that did not change; Filter rows excludes the row; the flow is turned off; the trigger is on the wrong table (a lookup update on the child does not fire the parent's trigger). **Fix.** Set Scope to Organization for integration flows; verify the column and filter settings; check the flow's state and the trigger's history in Analytics. ### Scheduled flow ran at the wrong time or not at all **Cause.** Time zone on the recurrence is UTC by default; daylight saving shifts local times; the flow was turned off for inactivity in a trial environment. **Fix.** Set the time zone on the Recurrence trigger explicitly; move production flows out of trial environments. ### "Trigger failed" in run history **Cause.** The trigger's own call failed — a polling trigger on a connector that throttled or a service that was down. The run is logged as a trigger failure with no actions. **Fix.** Usually self-healing on the next poll; recurring trigger failures mean the connection or the source needs attention. ## When it is not the flow's fault A flow that calls Dataverse and gets a business error back — "The record already exists", a plug-in's `InvalidPluginExecutionException`, a privilege error — is reporting a Dataverse problem. The error body contains the Dataverse message and code; look them up in [Dataverse Web API errors](https://www.solvingdynamics365.com/guides/dataverse-web-api-errors-explained) and [Dataverse plug-in exceptions](https://www.solvingdynamics365.com/guides/dataverse-plugin-exceptions-explained). Likewise a Business Central connector error carries the BC API message — [Business Central API errors](https://www.solvingdynamics365.com/guides/business-central-api-errors) decodes those. ### Frequently asked questions **What does 'ActionFailed. An action failed. No dependent actions succeeded' mean?** Nothing by itself. It is the status of a scope, condition, or Apply to each whose child action failed. Expand the container in the run history and find the action with the red icon — its own error is the real one. **How do I fix 'Could not find a property named X on type Microsoft.Dynamics.CRM.account'?** The Dataverse action's filter, select, or expand uses a column name that is not the logical name — a display name, a schema name with the wrong case, or a lookup used without the _value suffix. Use the exact lowercase logical name (new_customerid), and for lookups in filters use _new_customerid_value. **Why does my Dataverse trigger not fire?** Almost always scope or filters: the trigger's Scope is User or Business unit while the change was made by someone outside it, Select columns names a column that did not change, or Filter rows excludes the row. Set Scope to Organization for integration flows, and test with a change that touches a listed column. **What does a 429 'Rate limit is exceeded' error mean?** The connector or the Dataverse service protection limit throttled the call. Dataverse's limit is 6,000 requests per user per five minutes among others, and connectors have their own per-minute caps. Reduce calls — filter at the trigger, batch, avoid polling — add a retry policy with exponential backoff, and honour Retry-After. --- # Power Automate vs Make Power Automate vs Make (formerly Integromat) — visual scenario building, data transformation, operations-based pricing, Dynamics 365 depth, governance, and which fits which team. Source: https://www.solvingdynamics365.com/guides/power-automate-vs-make Section: Power Platform / Comparisons Published: 2026-09-03 Make is the tool people reach for when Zapier feels too simple and Power Automate feels too Microsoft. It has a devoted following among technically minded operators and agencies, a visual builder that makes data flow legible, and pricing that stays reasonable at moderate volume. Against Power Automate in a Dynamics 365 context the question is the same as with any third-party automation tool: where does the platform end and the edge begin? ## What each product is **Make** (Integromat until 2022, owned by Celonis) is a visual integration platform. A scenario is a diagram: a trigger module, then modules connected by routes, with routers for branching, iterators to split arrays, aggregators to combine them, filters on every route, error handlers, and a general-purpose HTTP module for any API. It connects to 2,000+ apps and is priced per operations executed — every module run counts — in plans from Free through Core, Pro, and Teams to Enterprise, with scenario scheduling intervals that shorten on higher tiers. It runs in Make's cloud (EU and US regions). **Power Automate** is Microsoft's workflow and RPA platform inside the Power Platform: cloud flows across roughly 1,000+ connectors, desktop flows for RPA, business process flows, approvals, and process mining, priced per user and per bot with rights included in Dynamics 365 and Microsoft 365 licences for in-context flows. It lives in Dataverse environments with solutions, DLP policies, and admin governance. See [what is Power Platform](https://www.solvingdynamics365.com/guides/what-is-power-platform). ## Head to head | Area | Make | Power Automate | | --- | --- | --- | | Builder | Visual diagram: modules, routes, routers, iterators, aggregators | Linear designer with conditions, scopes, loops, parallel branches | | Catalogue | 2,000+ apps plus HTTP module | ~1,000+ connectors plus custom connectors and HTTP | | Pricing (2026) | Per operations per month by plan; free tier; Core and Pro from roughly $10–20/month | Premium $15 per user per month; Process $150 per bot; included with Dynamics 365 and Microsoft 365 for in-context flows | | Data transformation | Excellent: iterators, aggregators, mapping, array and text functions | Capable: expressions, Select, Compose, Filter array, Apply to each | | Triggers | Webhooks (instant), polling on a schedule (interval by plan), app triggers | Dataverse row events with filters and scope, app events, schedules, HTTP, manual | | Microsoft depth | Connectors for Microsoft 365 and Dynamics 365 | Native Dataverse, Dynamics 365, SQL, on-premises gateway, Entra service principals | | Approvals | Via integrations | Native Approvals in Teams and Outlook | | RPA | None | Desktop flows, attended and unattended | | Error handling | Error handler routes: resume, ignore, rollback, break, commit | Configure run-after, scopes, retry policies | | Governance | Teams, roles, SSO and audit on higher tiers | DLP policies, environments, solutions, Managed Environments | | ALM | Scenario versions, templates, blueprints (JSON export) | Solutions, pipelines, Azure DevOps and GitHub Actions | | Who builds | Technically minded business users, agencies | Makers and developers; business users for simple flows | | Regions | EU and US | Environment region; sovereign clouds | ## Where Make wins **The builder.** Seeing the whole scenario as a diagram, with every module's output mapped into the next by drag and drop, makes complex integrations legible in a way Power Automate's vertical designer does not. Routers and iterators are first-class concepts rather than actions to discover. **Transformation.** Reshaping arrays, aggregating results, and building request bodies is Make's home turf. In Power Automate the same work is possible but leans on expressions and Apply to each loops that grow unwieldy. **Price at moderate volume without Microsoft licences.** A small operations team or agency running tens of thousands of operations a month pays little. **The HTTP module.** Any REST API, with pagination, in a few clicks. Power Automate's HTTP action is a premium connector and a blunter instrument. **Speed for the technically inclined.** Operators who think in data flows are productive in Make within an afternoon. ## Where Power Automate wins **Dataverse and Dynamics 365.** Row triggers with filter attributes and scope, actions that respect the security model, service-principal connections, and no per-operation metering. Automation on Dynamics 365 data belongs in the same platform as the data — [Power Automate connectors for Dynamics 365](https://www.solvingdynamics365.com/guides/power-automate-connectors-for-dynamics-365) covers what is native. **Cost for licensed users.** Dynamics 365 and Microsoft 365 users already have Power Automate for flows in their app's context. Make's operations metering punishes exactly the high-frequency automations that matter in an ERP or CRM. **Approvals and the Microsoft 365 surface.** Native approvals in Teams and Outlook, adaptive cards, SharePoint, Planner, Excel — the everyday enterprise workflow. **Governance.** DLP policies, environments, solution-based ALM through pipelines, Managed Environments, and an admin centre that sees every flow. Make's Enterprise tier adds governance; Power Automate's is the default. **RPA and on-premises.** Desktop flows and the on-premises data gateway have no Make equivalent. **Data residency and compliance.** Flows run in the environment's region, including sovereign clouds, under the tenant's Purview and audit — a hard requirement for regulated organisations that Make's EU/US regions may not meet. ## Where the differences do not matter Point-to-point SaaS automations of moderate complexity. Both are reliable, both have the popular connectors, both handle errors and retries competently. ## How the decision usually gets made **Stack.** Microsoft 365 and Dynamics 365: Power Automate owns process automation, and Make — if present — handles specific edge integrations under governance. No Microsoft commitment: Make is a strong general-purpose choice. **Nature of the work.** Heavy data reshaping across third-party APIs: Make is more pleasant. Business processes on Dynamics 365 records with approvals and security: Power Automate. **Volume.** Very high volume in either tool becomes expensive or throttled; the answer at that point is a plug-in, Logic Apps, or Azure Functions — see [Logic Apps Standard vs Consumption](https://www.solvingdynamics365.com/guides/logic-apps-standard-vs-consumption). **Compliance.** Regulated data and residency requirements: Power Automate in the tenant's environment. ## Using both Where Make is already in use — often via a marketing agency — the pattern that works is an inventory of scenarios with owners, a DLP-aware list of what data they touch, a service account rather than a person's credentials, and a policy that anything touching Dataverse rows migrates to Power Automate. [Integrating Dynamics 365 with Zapier and Make](https://www.solvingdynamics365.com/guides/integrating-dynamics-365-with-zapier-and-make) covers the mechanics and the governance. ## The short version Make for technically minded teams doing data-heavy integrations across third-party APIs, especially without Microsoft licences. Power Automate for anything on Dynamics 365 or Dataverse, for approvals and Teams, for RPA and on-premises, for governance and residency — which in a Microsoft shop is nearly everything. Zapier, the third tool in this space, is compared in [Power Automate vs Zapier](https://www.solvingdynamics365.com/guides/power-automate-vs-zapier). ### Frequently asked questions **What is Make?** Make, formerly Integromat, is a visual automation platform where scenarios are built as diagrams of modules connected by routes — with routers, iterators, aggregators, and a strong HTTP module — priced by operations executed per month. It is popular with technically minded business users and agencies for its transformation power and its price at moderate volume. **Is Make cheaper than Power Automate?** For a small team without Microsoft licences, usually: Make's Core and Pro plans are priced per operations bundle from roughly $10–20 per month as of 2026, and a moderate workload fits. For Dynamics 365 or Microsoft 365 users, Power Automate is already included for flows in their app's context, and Premium is $15 per user with no per-run metering, so at volume Power Automate wins. **Which is better at data transformation?** Make. Its iterators, aggregators, array and text functions, and the way every module's output is mapped visually make complex reshaping easier than Power Automate's expression language, Select and Compose actions, and Apply to each loops. Power Automate can do the same work, but with more expressions and more steps. **Should a Dynamics 365 shop use Make?** Only at the edges — for a long-tail SaaS tool or an agency-built marketing pipeline — and with an owner and a DLP-aware inventory. Dataverse triggers, the security model, service principals, approvals, and solution-based ALM live in Power Automate, and that is where Dynamics 365 process automation belongs. --- # Power Automate vs Zapier Power Automate vs Zapier — connector breadth, pricing models, Microsoft and Dynamics 365 depth, governance, RPA, and which automation tool belongs in which organisation. Source: https://www.solvingdynamics365.com/guides/power-automate-vs-zapier Section: Power Platform / Comparisons Published: 2026-09-03 Zapier is the automation tool most business users already know; Power Automate is the one that comes with the Microsoft licences they already have. For a company running Dynamics 365 the question is rarely which is the better product in the abstract — it is which one should own business-process automation, and whether the other has a role at the edges. ## What each product is **Zapier** is the original no-code integration service: a trigger in one app runs a sequence of actions in others, across a catalogue of 8,000+ apps. It is priced by task — each action executed — in plans from Free through Professional and Team to Enterprise, with multi-step Zaps, paths, filters, formatters, tables, interfaces, and AI features on the higher tiers. It is browser-based, fast to learn, and run mostly by the business users who build the Zaps. **Power Automate** is Microsoft's workflow and RPA platform inside the Power Platform: cloud flows across roughly 1,000+ connectors, desktop flows for RPA, business process flows inside model-driven apps, approvals, process mining, and Copilot for building flows. It is priced per user (Premium) and per bot for unattended RPA, with usage rights included in Dynamics 365 and Microsoft 365 licences for flows within those apps' context. It runs inside Dataverse environments with solutions, DLP policies, and admin governance. See [what is Power Platform](https://www.solvingdynamics365.com/guides/what-is-power-platform). ## Head to head | Area | Zapier | Power Automate | | --- | --- | --- | | Catalogue | 8,000+ apps | ~1,000+ connectors plus custom connectors and HTTP | | Pricing (2026) | Per task by plan; free tier; Professional from roughly $20/month annual and up with task volume | Premium $15 per user per month; Process $150 per bot; included with Dynamics 365 and Microsoft 365 for in-context flows | | Microsoft depth | Connectors for Outlook, Teams, SharePoint, Dynamics 365, Business Central | Native: Dataverse triggers with filters, Dynamics 365 actions, SQL, on-premises gateway, Entra service principals | | Triggers | App events, schedules, webhooks | App events, Dataverse row events with filter attributes and scope, schedules, HTTP, manual and button flows | | Logic | Paths, filters, loops on higher tiers | Conditions, switches, loops, scopes with run-after, parallel branches, child flows | | Approvals | Via integrations | Native Approvals with Teams and Outlook actionable messages | | RPA | None | Desktop flows, attended and unattended, machine groups | | Governance | Team folders, roles, SSO and audit on Enterprise | DLP policies, environments, solutions, Managed Environments, admin centre | | ALM | Versioning, folders | Solutions, pipelines, Azure DevOps and GitHub Actions | | Error handling | Retry, autoreplay on paid plans, alerts | Configure run-after, scopes, retry policies, error-handling patterns | | Who builds | Business users | Makers and developers; business users for simple flows | | Data residency | Zapier's cloud | Environment region; sovereign clouds | ## Where Zapier wins **Breadth.** If the tool is a niche SaaS product — a scheduling app, a form builder, a marketing tool — Zapier has the connector and Power Automate probably does not. For marketing and sales operations teams living in best-of-breed SaaS, this is decisive. **Time to first automation.** A non-technical user can build a working Zap in ten minutes with no environment, solution, or connection reference in sight. Power Automate's learning curve is real, especially once flows live in solutions. **No Microsoft prerequisite.** A company on Google Workspace, HubSpot, and Slack has no reason to buy into the Power Platform for automation. **Simplicity of the mental model.** Trigger, actions, done. Zapier's interface hides complexity Power Automate exposes. ## Where Power Automate wins **Dataverse and Dynamics 365.** Row triggers with filter attributes and scope, actions that respect the security model, service-principal connections, and no per-task metering. Automation on Dynamics 365 data belongs in the same platform as the data — see [Power Automate connectors for Dynamics 365](https://www.solvingdynamics365.com/guides/power-automate-connectors-for-dynamics-365). **Cost at volume for licensed users.** Dynamics 365 and Microsoft 365 users already have Power Automate rights for flows in their app's context; Premium is a flat per-user fee. Zapier's per-task pricing punishes exactly the high-volume automations that matter. **Approvals, Teams, and Microsoft 365.** Native approvals routed to Teams and Outlook, adaptive cards, SharePoint, Excel, Planner — the everyday enterprise workflow surface. **Governance.** DLP policies that stop a flow moving Dataverse data to a personal Dropbox, environments that separate dev from production, solutions that move flows through a pipeline, and an admin centre that sees everything. Zapier's Enterprise tier has governance; Power Automate's is the platform's default. **RPA and on-premises.** Desktop flows for legacy applications and the on-premises data gateway for SQL and file shares have no Zapier equivalent. **Error handling.** Scopes, run-after, retry policies, and the patterns in [Power Automate error handling](https://www.solvingdynamics365.com/guides/power-automate-error-handling-patterns) produce automations that fail safely. Zapier's autoreplay helps but is not a design surface. ## Where the differences do not matter Simple point-to-point automations between well-known SaaS apps — a form submission creates a record, a new file posts a message, a schedule sends a digest. Both do these in minutes and both are reliable for them. ## How the decision usually gets made **Stack.** Microsoft 365 and Dynamics 365: Power Automate owns process automation; Zapier, if present, handles edge connectors under a DLP policy. Google Workspace and best-of-breed SaaS: Zapier, with Power Automate only if Dynamics 365 or Dataverse enters the picture. **Who builds.** Business users with no IT involvement: Zapier is easier. Makers inside a governed platform: Power Automate. **Volume.** Thousands of runs a day: Power Automate, or for very high volume a plug-in or Logic Apps — see [plug-ins vs Power Automate](https://www.solvingdynamics365.com/guides/integrating-with-dataverse-plug-ins-vs-power-automate) and [Logic Apps Standard vs Consumption](https://www.solvingdynamics365.com/guides/logic-apps-standard-vs-consumption). **Governance and compliance.** Regulated data, audit, data residency: Power Automate inside a Dataverse environment. ## Using both The realistic pattern in many Microsoft shops is Power Automate as the platform with a small, inventoried set of Zaps for tools it cannot reach — each with a named owner, a DLP-approved connector list, and a plan to replace it if a Power Automate connector appears. [Integrating Dynamics 365 with Zapier and Make](https://www.solvingdynamics365.com/guides/integrating-dynamics-365-with-zapier-and-make) covers the mechanics and the governance. ## The short version Zapier for breadth, speed, and organisations with no Microsoft commitment. Power Automate for anything that touches Dynamics 365 or Dataverse, for approvals and Teams, for RPA and on-premises, for volume, and for governance — which in a Microsoft shop is nearly everything. The other tool in this space, Make, is covered in [Power Automate vs Make](https://www.solvingdynamics365.com/guides/power-automate-vs-make). ### Frequently asked questions **Is Zapier or Power Automate cheaper?** It depends on what you count. Zapier prices per task (each action run), so a busy automation gets expensive fast; Power Automate Premium is $15 per user per month (2026 list) with request limits, and Dynamics 365 and Microsoft 365 licences already include Power Automate for their own contexts. For a Microsoft shop with existing licences, Power Automate is usually free at the margin; for a small team without them, Zapier's entry plans are cheaper. **Which has more integrations?** Zapier — 8,000+ apps against Power Automate's roughly 1,000+ connectors. For long-tail SaaS tools Zapier almost always has the connector. For Microsoft services, Dataverse, Dynamics 365, SQL, and on-premises systems through the gateway, Power Automate is deeper. **Can Zapier connect to Dynamics 365?** Yes, through its Dynamics 365 CRM and Business Central integrations, and it works for simple create-and-update scenarios. It does not have Dataverse triggers with filter attributes, cannot run inside the Dataverse security model as a service principal the way a flow can, and every task costs money — so it is a tactical bridge, not the platform for Dynamics 365 automation. **Should a Microsoft shop ever use Zapier?** Occasionally, for a marketing or sales tool Power Automate has no connector for, with a DLP policy and an owner attached. The failure mode is dozens of unmanaged Zaps holding business processes together outside any governance — the guide on integrating Zapier and Make with Dynamics 365 covers how to keep that contained. --- # Power BI dataflows vs datamarts Power BI dataflows, datamarts, semantic models, and Fabric items — when to use each, how they relate. Source: https://www.solvingdynamics365.com/guides/power-bi-dataflows-vs-datamarts Section: Power Platform / Power BI Published: 2026-05-01 Power BI has grown from a desktop reporting tool into a layered data platform. The layering — dataflows, datamarts, semantic models, paginated reports — is confusing without a map. With Microsoft Fabric's emergence, the layers shift further, with some legacy concepts deprecated in favour of Fabric items. This article maps the terrain. **The traditional Power BI stack.** - **Dataset (now semantic model)** — the analytical model: tables, relationships, measures (DAX). Backed by Vertipaq in-memory columnstore. Consumers connect to it from reports and Excel. - **Dataflow** — ETL artefact built in Power Query Online. Outputs to a CDM-folder-structured storage in OneLake (Fabric) or a workspace (legacy). - **Datamart (legacy)** — a self-contained dataflow + Azure SQL DB + semantic model. Designed for self-serve "I want a small star schema with SQL access" scenarios. - **Paginated report** — pixel-perfect operational reports; SSRS heritage. - **Power BI report** — interactive dashboards built in Power BI Desktop. **Fabric introduces.** - **Lakehouse** — files-based store on OneLake; Delta tables; Spark and SQL access. - **Data warehouse (Fabric)** — full T-SQL warehouse on OneLake. - **Eventstream** — real-time ingestion. - **Pipelines** — orchestration. - **KQL database** — telemetry/logs. - **Notebook** — Spark code. - **Direct Lake mode** — semantic model reads Lakehouse Delta tables directly, no import. ## Dataflows The Power Query ETL workspace asset. Reads from sources (SQL, OneDrive, REST APIs), applies transformations, writes to CDM-folder output. Multiple semantic models can reference the same dataflow — central place to do "join customer master once" without each model duplicating logic. ## Datamarts Introduced 2022; provided self-serve a "SQL endpoint plus model in one click" experience. With Fabric, datamarts are effectively superseded by Lakehouses (for files) and Fabric warehouses (for SQL). Microsoft has signalled datamarts won't see significant new investment; existing datamarts continue working. ## Semantic models The analytic engine. Two import modes: - **Import** — data copied into the in-memory model; updates via scheduled or incremental refresh. - **DirectQuery** — queries pushed to the source at report time; no copy in the model. - **Direct Lake (Fabric)** — reads Lakehouse Delta tables directly without import or query at run time. Direct Lake is the new default for Fabric-resident data: in-memory performance without import overhead. **When to use a dataflow vs other ETL.** - **Quick self-serve transformations** for non-engineering users → dataflow. - **Enterprise-grade ETL with version control and testing** → pipelines + notebooks in Fabric, or Azure Data Factory. - **Real-time ingestion** → Eventstream into a Lakehouse. Dataflows remain a strong middle ground for citizen data engineers. **Centralised vs decentralised modelling.** - **Centralised semantic models** — IT/BI team owns; business consumers connect. Quality controlled; less duplication. - **Decentralised personal models** — every analyst builds their own from raw data. Fast for that analyst, chaotic across organisation. Modern Power BI practice favours **certified semantic models** at the centre with self-serve report building on top. ## Connectivity from Excel and Power BI Semantic models are consumable from: - **Power BI reports** in the same workspace or other workspaces. - **Excel** — `Connect to Power BI dataset`. - **External tools** through XMLA endpoint. - **Custom apps** via the Power BI REST API. This makes the certified semantic model the "single version of truth" surface. **Capacity considerations.** - **Premium per user (PPU)** — for the user, models up to capacity limits. - **Premium capacity (P SKU)** — for the workspace, defined throughput. - **Fabric capacity (F SKU)** — Fabric's unified compute/storage capacity. Fabric capacity is the future; new investments should land there. **Refresh patterns.** - **Scheduled refresh** — N times per day; standard for batch reporting. - **Incremental refresh** — only updated data refreshes; saves time and storage. - **Hybrid table** — recent data DirectQuery, older data imported. - **Direct Lake** — no refresh; reads live from Lakehouse. **Common pitfalls.** - **Dataflow proliferation.** Every report builds its own dataflow; duplication explodes. - **Mixed modes in one model.** Some tables import, some DirectQuery; performance unpredictable. - **Semantic model dependencies broken.** Underlying data source schema changes; model fails. Build version checks into pipelines. - **Datamart investment.** Building new datamarts in 2026 — likely wasted effort given Fabric direction. - **Capacity contention.** Multiple heavy workspaces on shared capacity; reports slow. ## Strategic direction Microsoft Fabric is the unifying story: OneLake holds the data, Lakehouses and warehouses serve it, semantic models analyse it, Power BI surfaces it. New investments should think Fabric-first: Lakehouse for raw and curated data, Fabric pipelines for ETL, semantic models in Direct Lake mode for analytics, Power BI reports on top. Legacy Power BI artefacts continue working but the centre of gravity has shifted. ### Frequently asked questions **What is a Power BI dataflow?** A Power Query Online ETL artefact that reads from sources, applies transformations, and writes CDM-folder output that multiple semantic models can reuse — the place to join customer master data once rather than in every model. **Are Power BI datamarts deprecated?** Effectively superseded. Datamarts, introduced in 2022, are replaced in Microsoft Fabric by lakehouses for files and Fabric warehouses for SQL. Existing datamarts keep working, but Microsoft has signalled no significant new investment, so building new ones in 2026 is likely wasted effort. **What is Direct Lake mode?** A semantic model mode in Fabric that reads lakehouse Delta tables directly, giving in-memory performance without import refresh or DirectQuery round-trips. It is the default for Fabric-resident data. **Should I use dataflows or Fabric pipelines for ETL?** Dataflows for quick self-serve transformations by citizen data engineers; Fabric pipelines and notebooks (or Azure Data Factory) for enterprise-grade ETL with version control and testing; Eventstream for real-time ingestion. --- # Power BI deployment pipelines How Power BI deployment pipelines automate Dev/Test/Prod promotion of reports, semantic models, and dataflows — configuration, rules, and the ALM patterns. Source: https://www.solvingdynamics365.com/guides/power-bi-deployment-pipelines Section: Power Platform / Power BI Published: 2026-05-01 Promoting Power BI artefacts from development to production should not be a manual download-upload-reconfigure exercise. **Deployment pipelines** in Power BI Premium and Fabric provide a structured Dev → Test → Prod promotion path with deployment rules, validation, and history. For organisations with serious Power BI investments, pipelines are the canonical ALM mechanism. **The pipeline structure.** - **Dev stage** — connected to a dev workspace. - **Test stage** — connected to a test workspace. - **Production stage** — connected to a production workspace. - **Items in scope** — reports, semantic models, dataflows, paginated reports. Each stage corresponds to a Power BI workspace; deployment moves items between workspaces with appropriate transformations. **Setting up.** 1. Create a deployment pipeline in Power BI Service. 2. Assign workspaces to stages. 3. (Optional) Connect Dev workspace from VS Code / Power BI Desktop for editing. 4. Deploy artefacts from Dev to Test, Test to Prod. The pipeline is a record; workspaces hold actual artefacts. **Deployment rules.** - **Data source rules** — switch connection string per stage. - **Parameter rules** — change parameter values per stage. - **Refresh schedule** — different per stage. For example: Dev pipeline connects to dev SQL; Test to test SQL; Prod to prod SQL. Rules automate the switch. ## Compare and deploy Before deploying: - See what's different between stages. - Per-item: New, Different, Unchanged. - Review changes; confirm intent. - Deploy selected items. This is the safety net — see what'll change before clicking. ## Selective deployment Don't have to deploy everything: - Pick specific items. - Useful for hotfix scenarios. - Useful when multiple items are in flux but only some are ready. ## Cross-stage deployment Standard flow: Dev → Test → Prod sequentially. Sometimes: - Hotfix straight to Prod skipping Test (with care). - Rollback by deploying older Test version back to Prod. Pipeline handles both directions; discipline applies. **Permissions.** - Pipeline admin can deploy. - Individual workspace permissions still apply. - Granular: someone can be Dev admin but Test reviewer. For governance, role separation across stages matters. **Workspace setup.** - Workspaces typically have descriptive names: `Sales-Dev`, `Sales-Test`, `Sales-Prod`. - Items moved by pipeline; manual changes in Prod risk drift. - For "no manual production changes" policy, lock down Prod workspace access. ## Deployment history Each pipeline records: - Deployments made. - Who deployed. - When. - What changed. This is the audit trail. ## Integration with Git Power BI integrates with Git (Azure Repos, GitHub): - Workspaces backed by Git repository. - Changes versioned in commits. - Branch-based development. - Merge to deploy. For mature ALM, Git integration + pipelines is the combination. Adoption varies; the integration is improving. ## API-based pipelines Power BI REST API supports pipeline operations: - List pipelines. - Trigger deployments. - Get deployment history. Used by CI/CD tools (Azure DevOps, GitHub Actions) for automation beyond what the UI provides. **Comparison with manual export/import.** | Aspect | Pipeline | Manual | |---|---|---| | Speed | Fast | Slow | | Error rate | Low | High | | Audit trail | Native | Manual | | Rules | Automated | Manual | | Cost | Premium feature | Free | For organisations on Premium / PPU, pipelines are clearly preferred. ## Premium vs Fabric Both support deployment pipelines: - **Power BI Premium** — original; well-tested. - **Fabric** — newer; integrated with broader Fabric workspace concept. Functionally similar; Fabric is the strategic direction. **Common pitfalls.** - **No pipeline.** Manual promotion; drift inevitable. - **Deployment rules incomplete.** Production points at test data source. - **Manual changes in Prod.** Workspace divergence; future deploys conflict. - **No environment isolation.** Dev workspace points at prod data; unintentional impact. - **Refresh credentials mismatched** — pipeline deploys but refresh fails in target. - **No deployment review.** Deploy without checking what changed. **Best practices.** - **Strict workspace separation** by stage. - **Deployment rules for every source** — no environment-specific URLs in code. - **Compare before deploy.** - **Document deployment in change ticket.** - **Test in Test stage** — actually test before promoting. - **Monitoring post-deployment** — verify refreshes succeed in Prod. ## Hotfix patterns Production issue: 1. Identify the problem. 2. Fix in Dev or directly in a hotfix workspace. 3. Test minimally. 4. Deploy through pipeline (Dev → Test → Prod, or skip). 5. Document the hotfix and root cause. 6. Plan permanent fix into next regular cycle. ## Power Apps Pipelines comparison Similar concept across Power Platform: - **Power BI deployment pipelines** — for BI artefacts. - **Power Platform pipelines** — for Power Apps / flows. Each pipeline tool specific to its surface; both follow similar Dev → Test → Prod patterns. ## Strategic positioning Deployment pipelines are how serious Power BI deployments handle change. The pipeline provides the discipline; the operational rhythm (regular deploys, post-deploy validation, incident retros) provides the value. For Premium / PPU customers, treating pipelines as default infrastructure rather than optional convenience is the right approach. The cost in setup is small; the benefit in reliability and traceability is significant. --- # Power BI for Dynamics 365 How Power BI integrates with Dynamics 365 — pre-built apps, Dataverse and F&O connectors, Microsoft Fabric, and where the data actually lives. Source: https://www.solvingdynamics365.com/guides/power-bi-for-dynamics-365 Section: Power Platform / Power BI Published: 2026-05-01 Power BI is the default analytics layer for any Dynamics 365 customer. Microsoft ships pre-built Power BI apps for every major Dynamics 365 product, and customers extend or replace them with their own. The biggest design choice is where the data sits — and there are now three serious answers. ## Pre-built Power BI apps From the Power BI app marketplace, install **Microsoft's published apps** for Sales, Customer Service, Finance, Business Central, Supply Chain, Field Service, and Project Operations. Each app contains a curated dataset, dashboards, and reports tuned to the source product. Out of the box, these answer 80% of the typical analytical questions and are the right starting point even if you eventually replace them. ## Direct connectors Power BI has first-class connectors to: - **Dataverse** — direct query against the Dataverse SQL endpoint or import via the Dataverse connector. The right pattern for CRM-side reporting where data volumes are modest and you want live numbers. - **Business Central** — REST API and OData connectors. Fast for moderate volumes; for years of history, prefer the data lake export. - **F&O entity store / data lake** — historical fact-table extracts for large reporting needs. ## Microsoft Fabric and OneLake The strategic direction. **Synapse Link for Dataverse** streams Dataverse changes into OneLake near-real-time; **Synapse Link for F&O** does the same for Finance/SCM. The result is a Fabric lakehouse containing both CRM and ERP data, queryable with Power BI's **DirectLake** mode for fast performance without import refreshes. For mid-to-large customers, this is becoming the default analytics architecture. ## Embedding Power BI reports embed inside Dynamics 365 model-driven apps as **system charts** or as embedded reports in dashboards. Embedded reports respect row-level security configured in Power BI. ## Row-level security Power BI supports **row-level security (RLS)** that scopes data per user — typically by mapping a Dataverse business unit or territory to an RLS role. Configure it in Power BI Desktop, deploy to the service, and reports show each user only their data. ## Performance Import models are fastest for end users but require scheduled refresh. DirectQuery is live but slower and load-sensitive. DirectLake bridges the two, querying OneLake parquet without import. Pick deliberately per dataset. ## Costs Power BI Pro per user, Premium per user, or Premium capacity. Pre-built apps require at least Pro for end users; large embedded scenarios usually justify a Premium capacity. ## Operational reality Don't build a custom Power BI model the day before go-live. Start with Microsoft's app, evolve from real user questions, and migrate to Fabric when scale demands it. ## Where to go next The analytics layer underneath is [Microsoft Fabric and Dynamics 365](https://www.solvingdynamics365.com/guides/microsoft-fabric-and-dynamics-365) and [Synapse Link for Dataverse](https://www.solvingdynamics365.com/guides/azure-synapse-link-for-dataverse). On the Power BI side: [row-level security](https://www.solvingdynamics365.com/guides/power-bi-row-level-security-deep-dive), [dataflows vs datamarts](https://www.solvingdynamics365.com/guides/power-bi-dataflows-vs-datamarts), and [deployment pipelines](https://www.solvingdynamics365.com/guides/power-bi-deployment-pipelines) for moving reports between workspaces. --- # Power BI gateway for on-prem data How the on-premises data gateway bridges Power BI to on-prem data sources — installation, configuration, security. Source: https://www.solvingdynamics365.com/guides/power-bi-gateway-for-on-prem-data Section: Power Platform / Power BI Published: 2026-07-26 Power BI lives in the Microsoft cloud; many Dynamics 365 customers still have on-premise data sources — old SQL Server databases, legacy ERPs, file shares, internal services — that must be combined with cloud data for analytics. The **on-premises data gateway** is the bridge — a small Windows service running inside the customer's network that securely brings cloud Power BI queries to on-prem data. **The architecture.** The gateway sits in the customer's network as a Windows service: - **Outbound-only connection** to Microsoft's Azure Service Bus relay. The gateway doesn't accept inbound from the internet; it polls Microsoft. - When Power BI cloud needs to query an on-prem source, it sends the query through Azure Service Bus. - The gateway picks up the query, runs it against the configured on-prem source, and returns results back through Service Bus to Power BI. - The result lands in Power BI's data model; the user sees their report. This pattern works without VPN setup, without opening firewall ports, without exposing on-prem data to the internet. **Two gateway types.** - **Standard mode** — for use by multiple users / Power BI reports. Production scenario. Multiple users share the gateway; admin centrally manages. - **Personal mode** — for an individual maker's exploration; the gateway runs on the maker's PC. Less robust but quick for prototyping. Production deployments use standard mode. **Installation.** 1. Download the on-premises data gateway installer from Microsoft. 2. Install on a Windows server inside the network — typically a dedicated server, not a shared one. 3. Sign in with a Microsoft 365 / Entra ID account that has appropriate Power BI admin rights. 4. Register the gateway with a name and recovery key. 5. Configure data source connections — add each on-prem source the gateway will serve, with credentials. **Data source configuration.** For each on-prem data source the gateway should serve: - **Type** — SQL Server, file share, OData feed, custom connector. - **Server / database / path** — connection details. - **Credentials** — typically a service account dedicated to gateway use, with read-only access to the source. - **Privacy levels** — for combining data sources, declare each source's sensitivity to prevent cross-contamination in queries. ## High availability Single-gateway deployments are a single point of failure. Production: - **Gateway cluster** — multiple gateway machines registered to the same logical cluster. Power BI load-balances across them. - **Failover** — if one gateway fails, queries route to others. - **Maintenance windows** — rolling restarts during low-usage hours. For mission-critical analytics, gateway clusters are essential. ## Refresh Power BI datasets refresh from on-prem sources via the gateway: - **Scheduled refresh** — Power BI cloud kicks off refresh on a schedule. - **On-demand refresh** — user triggers refresh; same path through the gateway. - **Refresh rate limits** — Pro datasets refresh up to 8 times per day; Premium up to 48 times per day. - **Real-time queries (DirectQuery)** — every report interaction queries through the gateway; minimal latency required. **Performance.** - **Latency** — every query has gateway round-trip overhead; 100-500ms typical. - **Bandwidth** — large result sets transit through Service Bus; can saturate the gateway's link to Azure. - **Concurrent queries** — gateway has limits per CPU / memory; oversized concurrent load needs cluster expansion. **Security.** - **Outbound-only** — no inbound exposure. - **Service Bus relay** — encrypted via TLS. - **Authentication** — Power BI authentication and gateway-resident credentials are separate; query authorisation respects Power BI; data-source connectivity uses gateway-configured credentials. - **Audit** — gateway logs every query; configurable retention. **Use cases for Dynamics 365 customers.** - **Combining cloud BC / D365 with on-prem ERP data** — for customers transitioning or running parallel systems. - **Joining D365 data with on-prem SQL Server** — internal data marts, legacy applications. - **File-share document references** — pulling document metadata from on-prem SharePoint or file servers. - **Custom internal APIs** — accessing custom services that aren't internet-exposed. **Maintenance.** - **Gateway version updates** — Microsoft releases updates monthly. Stay current. - **Credentials rotation** — periodically rotate data source credentials. - **Resource monitoring** — gateway CPU, memory, disk I/O. Plan for growth. - **Connection refresh** — connections occasionally need re-authentication. **Limits.** - **Gateway file size** — large datasets (gigabytes) through gateway are slow. Consider replicating to Azure SQL or Synapse for analytics. - **Some connectors aren't supported** through gateway — primarily cloud-native ones don't need it. - **DirectQuery performance** — gateway adds latency per query; not always suitable for high-interaction reports. **Common pitfalls.** - **Single gateway as production** — outage takes down all reports. Cluster. - **Gateway server under-resourced** — slow queries, timeouts. Right-size CPU and memory. - **Stale credentials** — gateway data sources fail mysteriously; rotate and refresh. - **Insecure credentials** — gateway service account with admin rights to source. Use read-only. ## Operational reality For Dynamics 365 customers with on-prem data, the gateway is essential infrastructure. Plan for it, maintain it, monitor it like any other production service. Cloud-first analytics with cloud-first data sources doesn't need it; mixed environments do. --- # Power BI incremental refresh How Power BI incremental refresh works — partitioning by date, range parameters, the refresh policy, and the patterns for large datasets. Source: https://www.solvingdynamics365.com/guides/power-bi-incremental-refresh Section: Power Platform / Power BI Published: 2026-05-01 A semantic model with 10 years of transactional data shouldn't refresh all 10 years every day. **Incremental refresh** in Power BI partitions data by time, refreshes only recent partitions, and leaves historical partitions untouched. For any model with > 1M rows or significant data refresh latency, incremental refresh is essential. ## The concept Data is partitioned by a date column: - **Historical partitions** — older data; refreshed rarely or not at all. - **Incremental partitions** — recent data; refreshed every cycle. - **Active partition** — current period; may be refreshed. The model query has filter parameters that determine the date range; refresh dynamically computes which partition to refresh. ## Setup In Power BI Desktop: 1. Add two parameters: `RangeStart` (datetime) and `RangeEnd` (datetime). 2. Apply filter in Power Query: `Source[Date] >= RangeStart and Source[Date] < RangeEnd`. 3. Right-click the table → Incremental refresh. 4. Configure refresh policy: - **Archive data starting** — how far back to store. E.g., "5 years". - **Incrementally refresh data starting** — refresh window. E.g., "10 days". 5. Save and publish. On first publish, Power BI partitions the data; subsequent refreshes only update the recent partition. **The refresh policy.** - **Archive period** — how far back history is kept (5 years). - **Refresh period** — how recent the refresh window (10 days). - **Detect data changes** — optional column tracking modifications; refresh only modified records. The window between archive and refresh is "cold" — stored but not refreshed. ## Detect data changes Smarter incremental: - Specify a "last modified" column. - Refresh only checks rows modified since last refresh. - Most efficient for slowly-changing dimensions. ## Real-time data Combine incremental with DirectQuery: - Recent partition in DirectQuery for real-time. - Older partitions in Import. - **Hybrid Tables** feature in Power BI Premium. Hybrid combines the best of both: real-time recency, performant import for history. **Performance benefits.** - **Refresh time** — minutes instead of hours. - **Memory** — partitions loaded on demand. - **Storage** — efficient compression per partition. For a 100M-row table, incremental refresh can cut refresh time by 95%+. **Partition strategy.** - **Yearly** — for slowly changing data, longer history. - **Monthly** — most common; balances granularity and refresh cost. - **Daily** — for very recent / fast-changing data. The refresh policy determines partition granularity. **Limitations.** - **DirectQuery and Live Connection** — partial support; DirectQuery to many sources fully supports. - **Service-side scheduled refresh** — must be enabled. - **Source must support range filter** — pushdown to source for efficiency. ## Source pushdown Critical for performance: - Power BI sends the range filter to source. - Source returns only matching rows. - Source-side filter avoids transferring full data. Without pushdown, even incremental refresh reads everything. ## Premium / Premium Per User Incremental refresh requires: - **Power BI Pro** for basic incremental (limited). - **Premium / PPU** for full feature including detect data changes and hybrid tables. For meaningful data sizes, Premium is the practical choice. ## Initial load First refresh is expensive: - Reads full history per archive period. - Can take hours. - Often broken into manual partitions to manage. Plan the initial load carefully; may need to schedule it manually first. ## Partition troubleshooting Tabular Editor and SQL Server Management Studio can connect to the Premium dataset and show partitions: - Per-partition row count. - Refresh timestamp. - Memory footprint. Visibility helps when refresh seems wrong. **Common pitfalls.** - **No source pushdown.** Each refresh reads all source data; defeats incremental. - **Filter not on date column.** Filter on derived date; pushdown fails. - **Detect data changes column wrong.** Misses updated rows. - **Archive period too long.** Wastes storage on unused history. - **Initial load timeout.** First refresh exceeds limits; partitions incomplete. - **Cross-table dependencies.** Two tables with different partition strategies; joins inefficient. **Best practices.** - **One date column per fact table** — incremental aligns. - **Pushdown verified** — check query trace. - **Archive period justified.** Don't archive 10 years if 3 suffice. - **Refresh window short.** 5–10 days typical; longer if source data changes far back. - **Monitoring** — refresh duration trends. **Schema changes.** - Adding a column requires full refresh. - Changing data types may invalidate partitions. - Major changes: deploy then full refresh; subsequent refreshes incremental again. **Operational rhythm.** - **Daily / hourly** — scheduled refresh. - **Monthly** — refresh metrics review. - **Quarterly** — full refresh to reset partitions if drift. ## Strategic positioning Incremental refresh is essential for any Power BI semantic model with material data volume. The setup investment is moderate (defining parameters, configuring policy); the operational benefit is substantial (faster refreshes, predictable resource usage, scalable to billions of rows). For new models with growing data, design with incremental from the start; retrofitting later is harder. The pattern is mature; the discipline of using it is what separates production-grade models from prototypes. --- # Power BI paginated reports How paginated reports differ from interactive Power BI reports — SSRS lineage, design tool, when pixel-perfect matters. Source: https://www.solvingdynamics365.com/guides/power-bi-paginated-reports Section: Power Platform / Power BI Published: 2026-05-01 Power BI's headline experience is **interactive reports** — dashboards built in Power BI Desktop, browsed in the service. But every Power BI deployment of any size eventually needs the *other* report type: **paginated reports** — pixel-perfect, page-oriented documents born from SQL Server Reporting Services (SSRS). ## Why the distinction Interactive Power BI reports excel at exploration: filters, drillthrough, slicers, charts. They don't excel at print: a 47-page month-end pack with vendor statements, regulatory submissions, customer invoices. For these, paginated reports are the right tool. **Paginated reports in short.** - Lineage: SSRS RDL format. - Designed in **Power BI Report Builder** (free download). - Hosted in the Power BI service or Power BI Report Server. - Output formats: PDF, Excel, Word, CSV, image. - Page-based — explicit page breaks, headers, footers. - Data-bound at runtime via parameters. **Use cases for paginated.** - **Regulatory submissions** — government forms with exact layouts. - **Customer-facing invoices and statements** — branded, printable. - **Operational reports** — picking lists, packing slips, daily sales by store, formatted for printer. - **Long tabular exports** — sub-ledger details, audit packs. - **Email blasts** — generate a PDF per customer with personalised content. ## Designing a paginated report Open Report Builder: 1. **Data source** — connect to a Power BI semantic model, SQL Server, Azure SQL, Dataverse, or OData. 2. **Dataset** — query the data source. 3. **Layout** — drag controls onto pages: tables, matrices, charts, text boxes, images. 4. **Parameters** — define inputs the user provides (date range, customer ID). 5. **Formatting** — fonts, colours, page size, headers, footers. 6. **Preview** — runtime test. 7. **Publish** to Power BI service. The design experience is more traditional than Power BI Desktop — closer to Crystal Reports or SSRS than to modern interactive design tools. ## Data sources Paginated reports can query: - Power BI semantic models (modern recommended path). - Azure Synapse, Azure SQL, on-prem SQL via gateway. - Dataverse. - OData feeds. - Many others through extensions. A modern pattern is centralising in a Power BI semantic model and having paginated reports query the same model — single source of truth across interactive and paginated. **Hosting.** - **Power BI service** — the cloud, requires Premium or PPU. - **Power BI Report Server (PBIRS)** — on-prem alternative, useful for sovereignty requirements. Slower release cadence; tend to lag service features. **Triggering reports.** - **Manual** — user opens the report and provides parameters. - **Subscription** — email schedule sends PDF to recipients. - **Power Automate** — flow generates the report with parameters and routes the output (email, attach to a record, save to SharePoint). - **API** — programmatic generation. The Power Automate integration is the workhorse for operational delivery — "every Monday email each sales rep a paginated PDF of their week ahead." **Comparison to interactive Power BI.** | Aspect | Interactive | Paginated | |---|---|---| | Purpose | Exploration | Print/export | | Layout | Flexible canvas | Pixel-precise | | Output | Browser experience | PDF/Excel/etc | | Author | Power BI Desktop | Report Builder | | Data | Semantic models | Many sources | | Parameters | Slicers (in-report) | Run-time inputs | | Hosting | Service / PBIRS | Service / PBIRS | **Where paginated is still essential.** - Anything that needs to be **printed or emailed as a static document** with fixed layout. - **Regulatory-format submissions** with strict pagination. - **High-volume per-record generation** (10,000 customer statements at month end). **Modern alternatives.** - **Power BI mobile** — interactive but mobile-friendly. - **Export to PDF from interactive** — works for simple cases, awkward for complex. - **Generate documents from Power Automate** — Word templates, dynamic PDF generation; for documents with limited data and high formatting needs, sometimes simpler than paginated. **Common pitfalls.** - **Migrating SSRS reports as-is.** They work but look dated; consider redesign in Report Builder. - **Overcomplicated queries inline.** Heavy SQL embedded in datasets; performance hit. Push to views or semantic models. - **No subscription discipline.** Reports emailed forever to people who left; subscription audit is a recurring hygiene task. - **Wrong tool choice.** Building an exploration scenario as paginated, or a printable scenario as interactive — both lead to friction. - **Forgotten data refresh dependencies.** Paginated against an out-of-date semantic model emails wrong numbers. ## Operational guidance A mature Power BI deployment uses both: interactive for analytical consumption, paginated for operational document delivery. Treat them as complementary, not competing. The teams that try to force one to do the other's job end up with frustrating experiences and unhappy users. --- # Power BI row-level security — a deep dive How row-level security (RLS) works in Power BI semantic models — DAX roles, dynamic security, object-level security. Source: https://www.solvingdynamics365.com/guides/power-bi-row-level-security-deep-dive Section: Power Platform / Power BI Published: 2026-05-01 A Power BI report that shows everyone's data to everyone is rarely the right answer. Sales managers see their team; account executives see their accounts; HR sees their region. **Row-level security (RLS)** in Power BI semantic models filters data per user, so the same report shows different rows to different people. Designed well, it's transparent and reliable; designed poorly, it leaks data or breaks queries. **The two patterns.** - **Static RLS** — roles with hardcoded filter values. "Region = US" for the US Sales role. - **Dynamic RLS** — roles that filter based on the current user's properties. "AccountManager.Email = USERNAME()" returns only the current user's accounts. Dynamic is far more flexible; one role serves many users. ## Defining a role In Power BI Desktop: 1. Modeling tab → Manage Roles. 2. Add Role; give it a name. 3. Add DAX expression as a filter on relevant tables. Example role "Region Manager": ```dax Sales[Region] = LOOKUPVALUE(RegionMapping[Region], RegionMapping[UserEmail], USERNAME()) ``` Filters Sales to rows matching the current user's mapped region. ## USERNAME() function Returns the current authenticated user's identity: - In Power BI Service: email or UPN. - In Power BI Desktop: usually `DOMAIN\username`. Use `USERPRINCIPALNAME()` for consistent UPN across surfaces. ## Mapping table approach Common pattern: - Separate mapping table: `UserAccess[UserEmail, Region]`. - Role filter joins user email to the mapping. - Adding/removing user access = editing the mapping table. Cleaner than hardcoding user emails in roles. ## Testing RLS In Power BI Desktop: - View as Roles → select role. - Optionally "Other user" → enter email. - Report renders as that user would see it. Test every role before publishing. ## Assigning users to roles In Power BI Service: - Semantic model → Security. - Per role, add users or groups. - Microsoft Entra security groups recommended for scale. ## Group-based assignment Critical at scale: - Map an Entra group to a role. - Add user to the group → automatically has the role. - Remove from group → no access. Maintenance happens in Entra, not Power BI; cleaner separation. ## Multiple roles per user If user has multiple roles assigned: - Filters are OR'd. - User sees union of what each role allows. So Role A (Region = US) + Role B (Region = EMEA) = sees US + EMEA. Sometimes desirable (regional manager covering two regions); sometimes confusing (overlapping role assignments hide intent). ## Object-level security Beyond rows: - Hide specific columns from specific roles. - Hide entire tables. - Configured in Tabular Editor or Power BI external tools. Use cases: - Sales sees customer financial data; Marketing doesn't. - Engineers see technical fields; Operations doesn't. Object-level is newer; less commonly used but powerful. **Performance considerations.** - RLS filters apply on every query. - Complex DAX in roles → slow queries. - Indexes / relationships help. - Cardinality of filtering column matters. For very large datasets with many users, RLS can become a performance limiter; optimise role definitions. **DirectQuery vs Import.** - **Import mode** — RLS filters applied at query time against imported data. - **DirectQuery** — filters translated to source query. - **Direct Lake (Fabric)** — filters applied at OneLake query. All support RLS; mechanisms differ. ## Inheritance and composite models When composite (mixed import + DirectQuery): - RLS rules must cover both sources. - Misconfiguration risks data leak from unfilters source. Audit composite models carefully. **Common pitfalls.** - **Role not assigned.** User has access to report but no role → sees nothing (or all data, depending on default). - **Default access too broad.** No role = all data; should be no role = no access. - **Hardcoded user emails.** Mapping table preferred. - **Cross-filter direction not set.** Filter doesn't propagate; data leaks. - **Role left for testing.** "Test Admin" role with no filter; assigned in production. - **No audit of role changes.** Role definitions drift; security gaps emerge. **Audit and testing.** - **Periodic role audit** — what roles, who's in them, what they see. - **Penetration test** — try to access data outside role; should fail. - **Documentation** — role purpose and definition documented. **RLS vs workspace permissions.** - **Workspace permissions** — coarse: can user open this report? - **RLS** — fine: which rows does this user see? Both apply. Workspace permissions give access to the report; RLS filters within. **Dynamic vs static trade-offs.** - **Static**: simpler, more roles needed, harder to maintain. - **Dynamic**: more complex DAX, fewer roles, easier maintenance. Dynamic almost always wins for deployments with > 10 users. ## Cross-system consistency If Dataverse has its own row-level security (BU-based, hierarchical), aligning Power BI RLS to match is essential: - Same user → same data in Dataverse and Power BI. - Mapping table can be sourced from Dataverse user / team structure. ## Strategic positioning Row-level security is foundational for enterprise Power BI. Without it, every report exposes all data; reports become useless for sensitive content. With it, the same semantic model serves diverse audiences appropriately. Investment in proper role design, group-based assignment, and periodic audit pays back continuously. Skipping it means either limiting reporting scope or accepting data exposure — neither acceptable for serious deployments. --- # Power Fx explained The Power Fx formula language — Excel-like syntax, where it's used in the Power Platform, and what's different from JavaScript. Source: https://www.solvingdynamics365.com/guides/power-fx-explained Section: Power Platform / Power Apps Published: 2026-05-01 **Power Fx** is Microsoft's low-code formula language. It's the language used in Power Apps canvas apps, Dataverse formula columns, certain Power Automate scenarios, and is being adopted across more of the Power Platform every release. Designed deliberately to feel like Excel — strongly typed, declarative, functional — it's accessible to anyone who has ever written `=SUMIF(...)` in a spreadsheet. ## Excel-like syntax Power Fx looks like Excel formulas. `=` prefix isn't used in Power Apps but the syntax is `Filter(Customers, Country = "Sweden")`, `Sum(Orders.Total)`, `If(Status = "Active", "Yes", "No")`. Anyone fluent in spreadsheets is productive in Power Fx within hours. ## Declarative Power Fx is declarative — you describe what you want, not how to compute it. The runtime decides evaluation order, caching, and dependencies. Variables are mostly avoided; **named formulas** and **collections** (in-memory tables) are the idiomatic way to manage state. ## Functions Hundreds of built-in functions cover text manipulation, math, dates, table operations (Filter, Sort, AddColumns, GroupBy, Sum, Count), navigation, controls, and data connection actions. Most have direct Excel equivalents. ## Records and tables First-class data types. A **record** is a JSON-like object: `{Name: "Karen", Country: "Sweden"}`. A **table** is a list of records. Table operations are vectorised — `Filter(Customers, Country = "Sweden")` returns a table without explicit looping. ## Tables and connectors When connected to Dataverse, SharePoint, SQL, or another data source, tables in Power Fx are *backed by* the underlying source. **Delegation** matters: functions that can be evaluated server-side (delegable) run efficiently on large datasets; non-delegable functions fall back to a 2000-row client-side limit. The maker is warned in the editor when they write a non-delegable expression. **Where it's used.** - **Canvas Power Apps** — every property of every control is a Power Fx expression. - **Dataverse formula columns** — calculate values stored on records, similar to Excel formulas in a sheet column. - **Power Apps custom pages** — embedded in model-driven apps with Power Fx behaviour. - **Power Automate desktop** — increasingly in flow design. - **Excel** — the syntax is converging; some Power Fx functions are now in Excel directly. ## Differences from JavaScript No variables required, no statements, no loops. Side effects exist (`Set`, `Patch`, `Collect`, `Navigate`) but are expressions, not statements. Errors propagate as values rather than thrown exceptions. ## Limits Not Turing-complete in the traditional sense — there are no arbitrary loops. Heavy programmatic logic still belongs in JavaScript (in HTML web resources), Power Automate flows, or C# plug-ins. ## Adoption Excel-literate users build working apps in days. Microsoft is open-sourcing the language; a Power Fx command-line interpreter exists for testing expressions. ### Frequently asked questions **Where is Power Fx used?** Every property of every control in canvas Power Apps, Dataverse formula columns, custom pages embedded in model-driven apps, increasingly Power Automate, and the syntax is converging with Excel itself. **How is Power Fx different from Excel formulas?** The syntax is deliberately Excel-like — Filter, Sum, If — but expressions run against tables backed by data sources, records are first-class JSON-like values, and side effects such as Set, Patch, and Collect exist as expressions rather than statements. **What is delegation in Power Fx?** Whether a function can be evaluated server-side by the data source. Delegable expressions run efficiently on large tables; non-delegable ones fall back to a client-side limit of 2,000 rows, and the editor warns when you write one. **Can Power Fx replace JavaScript or C#?** Not for heavy programmatic logic. Power Fx has no arbitrary loops or statements; complex logic still belongs in JavaScript web resources, Power Automate flows, or C# plug-ins. --- # Power Fx named formulas How named formulas in Power Fx differ from variables — declarative, recomputed, no side effects — and how they reshape canvas app code organisation. Source: https://www.solvingdynamics365.com/guides/power-fx-named-formulas Section: Power Platform / Power Apps Published: 2026-05-01 Named formulas are a relatively recent addition to canvas apps that, once understood, change how an experienced maker organises code. They're named expressions evaluated lazily when referenced, with no explicit assignment and no implicit recomputation cost — a properly functional layer on top of Power Fx that complements (and often replaces) variables. ## The historical pattern: variables Canvas apps have long had variables — `Set(varCurrentUser, User())`, `UpdateContext({selected: thisItem})`. Variables are mutable, assigned imperatively, persist until reassigned. They're familiar to developers from imperative languages but they create classic problems: out-of-date values, race conditions on async work, scattered assignments. **Named formulas in App.Formulas.** In the canvas app `App` object's `Formulas` property: ``` CurrentUser = User(); DefaultSiteId = First(Sites).Id; TodayLabel = "Today is " & Text(Today(), "long"); GrossMargin = SalesAmount - CostAmount; ``` Each line names a formula. Anywhere the name is referenced, the formula re-evaluates. There's no `Set`, no `Update`. The compiler can detect dependencies and recompute lazily. **Properties.** - **Declarative** — you say what it is, not when to compute it. - **Pure** — no side effects allowed in the formula. - **Lazy** — only evaluated when referenced. - **Cached intelligently** — re-evaluated when dependencies change, not on every reference. - **Constant by reference** — the name always means the same expression, never "the value at a moment in time." **Compared to variables.** | Aspect | Variable | Named Formula | |---|---|---| | Assignment | `Set(name, value)` | `name = expr;` in App.Formulas | | Mutability | Mutable | Immutable definition | | Update | Manual via Set | Auto-recompute on dependency change | | Side effects | Allowed | Not allowed | | Scope | App-wide or screen-local | App-wide | | Asynchronous | Yes, can store Patch results | No, must be synchronous | **When to use named formulas.** - **Derived values** — anything computed from other state. - **Configuration constants** — labels, defaults. - **App-wide reference data** — current user, current language, today's date. - **Pure transformations** — formatted labels, filtered collections (where filter inputs are stable). **When to keep using variables.** - **Async results** — outputs from `Patch`, custom connector calls. - **Mutable UI state** — selected tab, current step in a wizard. - **Counters and toggles** — anything explicitly time-varying. ## Example: replacing OnStart variables A common pattern is loading reference data in App.OnStart: ``` Set(varCurrentUser, User()); Set(varDefaultSite, First(Sites)); Set(varTodayLabel, "Today is " & Text(Today(), "long")); ``` Equivalent with named formulas in App.Formulas: ``` CurrentUser = User(); DefaultSite = First(Sites); TodayLabel = "Today is " & Text(Today(), "long"); ``` The named formula version: - Doesn't block app start (lazy). - Recomputes automatically when underlying data changes. - Lives in one place; no need to remember Set is called somewhere. For typical reference data loads, this is a meaningful UX improvement — app starts faster. ## Dependency tracking Power Fx tracks dependencies. If `GrossMargin = SalesAmount - CostAmount` and `SalesAmount` is itself a named formula or a data source field that changes, GrossMargin re-evaluates automatically. The maker doesn't trigger updates manually. ## Performance Lazy evaluation means formulas referenced but never used cost nothing. Formulas referenced once compute once. Formulas referenced repeatedly within a render cycle benefit from caching. Heavy formulas referenced in a galaxy of bound controls can still be expensive — design accordingly. **Limitations.** - **No side effects** — `Patch`, `Notify`, `Navigate` are not allowed. - **Synchronous only** — connector calls returning async results not allowed. - **No If/With with control mutation** — pure expressions only. - **App-level scope** — named formulas live on App, not per screen. ## Component formulas Power Fx custom components can have their own named formulas, scoped to the component. Useful for component-internal derived values without polluting app scope. **Best practices.** - **Use named formulas as defaults for any derived value.** Reach for variables only when mutability is genuinely required. - **Name carefully** — these are app-wide; use Pascal or clear prefixes. - **Refactor large App.OnStart** — most Set calls can become named formulas, dramatically simplifying start logic. - **Document the dependency graph** when it gets complex — a comment block at the top of App.Formulas listing key formulas helps future maintainers. **Common pitfalls.** - **Mixing imperative thinking** — trying to "trigger" a formula recompute. Power Fx handles this; if it's not recomputing, it's because dependencies haven't changed. - **Storing async results** — won't work; needs variable. - **Over-reliance on App scope** — sometimes a per-screen variable is genuinely the right scope. ## Operational guidance Named formulas are the modern default for derived state in canvas apps. They reduce code, improve correctness, and produce apps that are easier for the next maker to understand. The "imperative variable everywhere" style is still common but increasingly outdated. --- # Power Pages for Dynamics 365 customer portals Building customer-facing portals on top of Dataverse — Power Pages templates, authentication, security, and operational realities. Source: https://www.solvingdynamics365.com/guides/power-pages-for-customer-portals Section: Power Platform / Power Pages Published: 2026-05-01 **Microsoft Power Pages** is the low-code platform for building secure, external-facing websites that read and write Dataverse. For Dynamics 365 customers, it's the standard way to deliver customer self-service portals, B2B partner extranets, public-sector citizen portals, event-registration sites, and supplier collaboration hubs. ## The shape of a Power Pages site A site has **pages** (content), **web templates** (Liquid-driven layout), **forms** (rendering Dataverse forms with controlled fields and permissions), **lists** (rendering Dataverse views), and **web files** (assets — images, scripts, stylesheets). Everything is configured through a maker portal with both visual designers and direct code editing. ## Authentication Power Pages supports multiple identity providers: **Entra ID**, **Microsoft account**, **Google**, **Facebook**, **LinkedIn**, **Apple**, and any **OpenID Connect** or **SAML 2.0** provider. **Local accounts** (username/password stored in Dataverse) are also supported but discouraged. Anonymous browsing is allowed where the use case fits (public knowledge portals); behind a login is the more common pattern. ## Identity to record mapping Authenticated users map to **Contact** records in Dataverse — one portal user is one Contact. Self-registration and identity-provider sign-up flows create the Contact automatically; admin-driven invitations are also possible. ## Web roles Permissions inside Power Pages are governed by **web roles** assigned to Contacts. Each role grants access to pages, forms, lists, and Dataverse data through **table permissions**. The pattern is similar to Dynamics 365 security roles but scoped to portal users only; production CRM users don't get portal permissions through Dataverse roles. ## Table permissions Critical concept. **Table permissions** define what portal users can read, write, create, delete on specific Dataverse tables, scoped by relationship (e.g. "this Contact can read their Account's Cases", not "any Case"). Misconfigured table permissions are the most common Power Pages security mistake — too permissive grants data leaks; too restrictive blocks users from their own data. ## Customer use cases Most Dynamics 365 customers use Power Pages for at least one of: - **Case logging** — customers create and track cases against Customer Service. - **Knowledge browsing** — exposing the customer-facing slice of the knowledge base. - **Account self-service** — customers update contact info, see invoices, pay online (with payment-processor integration). - **Partner portals** — distributors and resellers access deal registration, pricing, and shared opportunities. ## Limits Power Pages is great at moderate-complexity portals. Highly visual marketing sites, e-commerce checkouts, and complex public-facing experiences often integrate Power Pages for the data-driven sections with a separate CMS or framework for the rest. ## Operating cost Per active user per month, with a separate anonymous-page-view tier. Capacity is bought in packs. --- # Power Pages Liquid templating How Liquid templates work in Power Pages — variables, tags, filters, rendering Dataverse data, and the design patterns for customer-facing portals. Source: https://www.solvingdynamics365.com/guides/power-pages-liquid-templating Section: Power Platform / Power Pages Published: 2026-07-28 Power Pages portals — Microsoft's external-facing website platform on top of Dataverse — render content through the **Liquid** template language. Originally created by Shopify, Liquid is a logic-light templating language designed for safe content rendering. Understanding it is essential for building anything beyond the simplest Power Pages portal. ## The Liquid concept Liquid templates mix HTML with **objects** (data variables), **tags** (control flow), and **filters** (transformations). Templates compile and render server-side; the result is HTML sent to the user's browser. **Three types of Liquid elements.** - **Output** (in `{{ }}`) — print a value. - **Tags** (in `{% %}`) — control flow (if, for, capture, etc.), but no output. - **Filters** (in `| filter`) — transform values during output. Example: ```liquid {% if user.fullname %}

Welcome, {{ user.fullname | upcase }}!

{% else %}

Welcome, guest.

{% endif %} ``` The `{% if %}` and `{% endif %}` are tags; `{{ user.fullname }}` is an output; `| upcase` is a filter. ## Power Pages-specific objects The portal exposes specific objects: - **`user`** — the authenticated user (when signed in). Properties include `fullname`, `email`, `id`, `roles`. - **`page`** — the current page being rendered. Properties: `title`, `summary`, `url`. - **`entities`** — access to Dataverse entities. Used for querying records: `{% entitylist logical_name:"contact" %}`. - **`entityform`** — for forms tied to specific Dataverse forms. - **`weblinks`** — navigation menus configured in Power Pages. - **`request`** — current HTTP request context. - **`settings`** — site-level configuration. - **`now`** — current date/time. These objects give templates access to the live data layer of the portal. **Querying Dataverse records.** ```liquid {% fetchxml entities_query %} {% endfetchxml %} {% for opp in entities_query.results.entities %}

{{ opp.name }} — {{ opp.estimatedvalue | currency }}

{% endfor %} ``` The `{% fetchxml %}` tag runs a FetchXML query; the result is available in subsequent template logic. Power Pages also supports the `{% entityview %}` tag for using saved Dataverse views and `{% entitylist %}` for configured lists. **Common filters.** - **`upcase`, `downcase`, `capitalize`** — case manipulation. - **`date`** — format dates (`{{ contact.createdon | date: "yyyy-MM-dd" }}`). - **`currency`** — format money values. - **`escape`** — HTML-escape (default for user content; rarely turned off). - **`size`** — count of array or characters of string. - **`first` and `last`** — first / last element of an array. - **`limit`** — limit array to N elements. - **`truncate`** — shorten text. - **`replace`** — string replace. - **`url_encode`** — for building safe URLs. **Logic — `if`, `unless`, `case`.** ```liquid {% if user.roles contains 'VIP' %}

VIP content

{% elsif user.roles contains 'Member' %}

Member content

{% else %}

Public content

{% endif %} {% case user.country %} {% when "Sweden" %}

Welkommen!

{% when "Germany" %}

Willkommen!

{% else %}

Welcome!

{% endcase %} ``` **Loops — `for`.** ```liquid {% for opportunity in opportunities %}

{{ opportunity.name }}

{% endfor %} {% for product in products limit: 5 %}

{{ product.name }}

{% endfor %} ``` ## Capture and variables `{% capture %}` stores rendered output in a variable for later use: ```liquid {% capture greeting %} Hello, {{ user.fullname | default: "guest" }} {% endcapture %}

{{ greeting }}

``` ## Includes Reusable template fragments via `{% include %}`: ```liquid {% include 'header' %} ... main content ... {% include 'footer' %} ``` ## Performance Liquid is fast but complex queries inside loops can degrade: - Move queries outside loops where possible. - Use `{% fetchxml %}` with precise filters rather than fetching everything. - Cache repeated lookups in `capture` variables. ## Security Liquid is sandboxed — templates can't execute arbitrary code; they can only call defined functions and access defined data. This is the deliberate safety property — templates run as content, not as code. User-supplied input rendered through Liquid is escaped by default (HTML-escaped), preventing XSS. Don't bypass escaping unless you know the source is trusted. **Common pitfalls.** - **Queries inside heavy loops** — N+1 query pattern slows rendering. - **Forgetting to escape** — using `| raw` or similar to bypass escaping on user content is an XSS vulnerability. - **Templates that mix too much logic** — Liquid is for presentation; complex business logic belongs in Power Automate / plug-ins, not templates. - **Unfamiliar filter / tag** — Microsoft documents Power Pages-specific extensions; verify exists before using. ## Operational reality Liquid is straightforward once you've built a few templates. The Power Pages designer + Liquid combination produces effective portals without diving into full web development. For more complex needs (rich client interaction, custom UI), consider whether Power Pages is the right tool or if a custom-built solution makes more sense. --- # Power Pages security, in depth How Power Pages secures external-facing portals — identity providers, web roles, table permissions, page permissions, and the audit and DLP that wraps them. Source: https://www.solvingdynamics365.com/guides/power-pages-security-in-depth Section: Power Platform / Power Pages Published: 2026-05-01 Power Pages portals are exposed on the public internet, and most of them give external users authenticated access to Dataverse data. Getting the security model right matters more here than in any internal Power Platform application. The good news: the security model is well-defined and the pitfalls are documented. ## Identity Authenticated portal users are represented in Dataverse as **Contact** records. The contact has a primary identity-provider linkage — usually OAuth-2.0 via Entra ID, an external identity provider (Google, Microsoft, Facebook, Apple, LinkedIn), or a SAML/OpenID Connect federation. **Local accounts** (username/password stored in Dataverse) are supported but discouraged; identity-provider sign-in is more secure and scales better. ## Multi-factor authentication Configurable at the identity-provider level (e.g. Entra ID Conditional Access policies enforce MFA on the IdP, and Power Pages inherits it). ## Web roles Once authenticated, a portal user gets one or more **web roles**. Web roles are the portal-side equivalent of Dataverse security roles, but scoped to the portal only — they don't grant access to the underlying Dynamics 365 application. Each web role is associated with **table permissions**, **page permissions**, and **content permissions**. ## Table permissions The most important and most misconfigured Power Pages concept. **Table permissions** define what portal users (in specific web roles) can do with specific Dataverse tables. The privileges are familiar — Read, Create, Write, Delete, Append, Append-To — but the scope is what makes it nuanced: - **Global** — across all rows in the table. Use sparingly; usually too permissive. - **Contact** — rows owned by the signed-in contact. The default for self-service: a customer sees their own profile. - **Account** — rows owned by the signed-in contact's parent account. A B2B portal: a buyer sees their company's data. - **Parental** — through a configured 1:N relationship from a parent the user has permission to. E.g. cases linked to the user's account: the user has permission on cases because they have permission on the account, and the relationship grants child access. Misconfigured table permissions are the #1 source of Power Pages data leaks. Test every permission scenario before going live. ## Page permissions Control which authenticated users see which pages. Anonymous browsing of certain pages, web-role gating of others. A "members area" exists because page permissions block unauthenticated users. ## Content permissions Control which file attachments are visible per user — for portals that distribute documents (statements, policy documents) per customer. ## Anti-CSRF and request validation Power Pages includes built-in protection against cross-site request forgery, with form-level tokens. Don't disable these. ## Audit and logging Portal access events log to Dataverse audit; configure audit on sensitive tables. Identity-provider login events log at the IdP. ## DLP Power Pages can be governed by **data loss prevention policies** like any other Power Platform app, classifying connectors as Business / Non-Business and preventing inadvertent data flow. ## Operational reality Run a security review before every Power Pages launch. Test every web role with a real test user. Audit table permissions quarterly. Treat portal security with the same rigour as a public website. --- # Power Pages with Dataverse search How to make Power Pages portals searchable — enabling Dataverse search, scoping by table and security, indexing, and the patterns for portal-friendly search UX. Source: https://www.solvingdynamics365.com/guides/power-pages-with-dataverse-search Section: Power Platform / Power Pages Published: 2026-05-01 A Power Pages portal exposing dozens of tables, hundreds of articles, and thousands of cases needs **search** to be usable. The built-in answer is **Dataverse search** — the Lucene-based search service powering global search in model-driven apps, exposed to Power Pages through portal-aware components and security trimming. **What Dataverse search provides.** - **Full-text indexing** of configured tables and columns. - **Relevance ranking** across multiple tables. - **Auto-suggest** as the user types. - **Faceting** — filter by table type, by attribute. - **Security trimming** — results respect user permissions. For a portal, security trimming is the headline feature — anonymous users see public articles; authenticated contacts see public + their organisation's records. ## Enabling Dataverse search At environment level: 1. Power Platform admin centre → environment → Settings → Product → Features. 2. Enable Dataverse search. 3. Wait for initial indexing — depends on table sizes, typically minutes to hours. Per table, in the table designer: 1. Properties → Searchable: Yes. 2. Search index: add specific columns to index. Without searchable tables, Dataverse search returns nothing. ## Search in Power Pages The portal exposes search through: - **Search bar component** — drop into a page; users type, results display. - **Search page** — dedicated full results experience. - **Filtering** — facet by table or by attribute. - **Highlighting** — matched text highlighted in results. The component handles security trimming via the portal's authenticated identity (anonymous or contact-bound). ## Indexing columns thoughtfully Index columns users actually search: - Title, name, subject columns — always. - Description, body columns — usually. - Tag/keyword columns — yes. - Internal IDs, system columns — usually no, unless users search by ID. Over-indexing inflates the index and slows ranking; under-indexing makes search blind. ## Search results security Power Pages search uses **table permissions** — the portal-specific access control mechanism. A search result row is shown only if: - The user has read access to the row through the portal's web role and table permission configuration. - The row matches the search query. Anonymous users see only rows accessible to the "Anonymous Users" web role; authenticated users see additionally what their contact's web roles grant. ## Auto-suggest Typing a few characters returns instant suggestions: - Top 5–10 results. - Live as the user types. - Includes top tables to scope to. The suggestion experience is critical for portal usability — users abandon search if it's slow. ## Custom search For requirements beyond Dataverse search: - **Azure Cognitive Search** integration via custom code. - **External search engines** (Algolia, ElasticSearch) via integration. - **Liquid templates** invoking custom search APIs. Most portals stay with Dataverse search; custom search is for unusual cases (specific ranking logic, advanced linguistic analysis). **Common pages with search.** - **Knowledge base** — search KB articles. - **Case lookup** — find existing cases. - **Product catalogue** — search products. - **Forum / community** — search discussions. - **Document library** — search uploaded files. For each, the search page is configured to scope to relevant tables. ## Liquid-template integration Power Pages' Liquid templating language lets you embed search results into pages programmatically — render a featured-results widget on the home page, run a "you might also like" search based on the current page context. ## File search Power Pages supports **file attachments** on Notes and Document Locations. Dataverse search can index the content of attached files (PDF, Word, Excel, text) — searching for "warranty terms" finds the PDF where the phrase appears. Indexing is asynchronous after attachment upload. **Common pitfalls.** - **No initial indexing wait.** Search runs against an empty index for a while; users assume it's broken. - **Table permissions missing.** A table is indexed but no portal permission; search finds nothing for the user. - **Wrong columns indexed.** The user searches by SKU; SKU column isn't indexed; finds nothing. - **Too many tables enabled.** Search returns noise; faceting helps but only if the user knows to use it. - **Performance under load.** Large portals with thousands of concurrent searches hit indexing limits; Premium capacity may be needed. ## Reindexing When you change indexed columns: - The index needs to rebuild. - Power Platform handles rebuild asynchronously. - During rebuild, results may be incomplete. - Schedule reindexing for low-traffic windows. ## Operational rule Portal search is the navigation tool users actually reach for after the first day. Tune it: pick the right tables, index the right columns, design search pages that respect security, and monitor search analytics for "no results" patterns that reveal indexing gaps or missing content. A portal whose search "just works" is a portal users return to. --- # Power Platform ALM with Azure DevOps How to set up CI/CD for Power Platform using Azure DevOps — Build tools, pipelines, source control, and automated deployment between environments. Source: https://www.solvingdynamics365.com/guides/power-platform-alm-with-azure-devops Section: Power Platform / ALM & governance Published: 2026-05-01 For Power Platform teams that take application lifecycle management seriously, the canonical CI/CD path runs through **Azure DevOps** (or its sibling GitHub Actions). The Microsoft-published **Power Platform Build Tools** extension supplies the building blocks; the rest is pipeline composition. ## Power Platform Build Tools A free Azure DevOps extension Microsoft maintains. It provides tasks for: - **Authenticate** — service-principal sign-in to a Power Platform environment. - **Tool installer** — install / cache the `pac` CLI. - **Pack / unpack solution** — convert between solution.zip and unpacked source files. - **Import / export solution** — pull from or push to an environment. - **Publish customisations** — make changes effective after import. - **Apply / unpack solution upgrade** — managed solution upgrade flow. - **Solution checker** — static analysis against Microsoft's published rules. - **Set solution version** — update version in metadata before packaging. - **Reset environment** — wipe and restart a sandbox. These tasks compose into pipelines covering build, validation, and deployment. **Typical pipeline structure.** ```yaml # Build pipeline (runs on PR or main commit) - Checkout source from Git - Pack solution from unpacked source folder - Run solution checker against the packed solution - Publish artefact: the .zip # Release pipeline (deploys to environments) - Stage 1: Deploy to UAT - Import managed solution to UAT environment - Run smoke tests (Power Automate or custom) - Manual approval gate - Stage 2: Deploy to Production - Import managed solution to Production environment - Publish customisations - Notify stakeholders ``` ## Source control structure A typical repo: ``` src/ Solution.Customer/ Other/ (solution.xml, customizations.xml) Entities/ (per-table folders with metadata) Workflows/ Reports/ Plugins/ WebResources/ PluginAssemblies/ build/ build.yml release.yml ``` `pac solution unpack` extracts a solution.zip into this folder structure for source control; `pac solution pack` converts back to a .zip for deployment. ## Service principals Pipelines authenticate to Power Platform environments as **service principals** registered in Microsoft Entra ID. Each environment trusts a service principal with appropriate permissions (System Administrator role on the target Dataverse environment). Storing credentials in Azure DevOps secret variables (or Azure Key Vault for higher security) keeps them out of source. ## Solution checker integration A best practice is to gate every PR build on **solution checker** results. The checker scans for performance issues, security concerns, accessibility problems, and platform misuse. Failing the build on critical issues forces fixes before merge. ## Environment variables Solutions can contain **environment variables** that hold values differing per environment — API URLs, connection identifiers, feature flags. The pipeline injects the correct values per target environment at import time. ## Connection references Power Automate flows depend on **connection references** that abstract the specific connection used. The pipeline maps connection references to actual connections per environment, so a flow that calls SharePoint in dev hits the dev SharePoint, and in production hits production SharePoint. ## Approval gates Production deployments should require manual approval — typically a release manager or governance team signing off. Azure DevOps supports approvals with deferral, audit, and Teams integration. ## Telemetry and rollback Capture deployment success / failure events to Application Insights. Configure rollback as a separate pipeline that imports the previous solution version. Test the rollback occasionally. ## Operational reality Teams that adopt Power Platform ALM with Azure DevOps deploy more confidently and recover from issues faster. The initial investment — pipeline build, training, source-control migration of existing solutions — takes a week or two; the ongoing pay-off compounds over years. --- # Power Platform ALM with managed solutions Application lifecycle management on the Power Platform — solutions, managed vs unmanaged, environments, pipelines, and source control. Source: https://www.solvingdynamics365.com/guides/power-platform-alm-with-managed-solutions Section: Power Platform / ALM & governance Published: 2026-05-01 Application lifecycle management (ALM) is what turns one-off Power Platform experiments into a maintainable system. Microsoft's ALM story is centred on **solutions** — versioned, deployable containers of components — moving through a chain of environments with controlled promotion. ## Solutions A **solution** is a Dataverse-aware bundle of customisations: tables, columns, forms, views, charts, web resources, Power Automate flows, canvas apps, model-driven apps, business process flows, security roles, and many more. A solution has a publisher (with a prefix that scopes custom names) and a version number. ## Unmanaged vs managed Solutions exist in two states: - **Unmanaged** — editable. Components inside an unmanaged solution can be modified in the environment they live in. The state of every dev environment. - **Managed** — read-only at the component level. Imports of managed solutions install or update components without letting downstream users edit them. The state of every UAT and production environment. ## The flow Develop in an unmanaged solution in a **dev environment**. Export the solution as managed. Import the managed solution to **UAT**. Test. Import the same managed package to **production**. Repeat per release. ## Environments A healthy Power Platform deployment uses at least three environments: **Dev**, **Test/UAT**, **Production**. Larger organisations add per-feature dev environments, hotfix environments, and training environments. Each environment is administered through the **Power Platform admin centre**. ## Pipelines **Power Platform pipelines** is Microsoft's built-in promotion mechanism: configure a pipeline from dev → UAT → prod, with approvals and validation gates, and run promotions from the maker portal. For more complex needs, **Azure DevOps** or **GitHub Actions** with the **Power Platform build tools** automate end-to-end CI/CD: export solution on commit, build, validate, deploy. ## Source control Solutions can be **unpacked** with the `pac` CLI into a folder of XML and YAML files — one file per table, form, flow, app — that lives in Git. Pull requests review the diff, branches isolate features, and pipelines build and deploy on merge. This is the canonical way to manage non-trivial Power Platform development. ## Solution layering Multiple solutions can install on top of each other (e.g. ISV base + customer customisations). Layering is helpful for ISV scenarios; for in-house teams it complicates things — start with one solution per logical app. ## Anti-patterns Editing directly in production. Building in the default environment. Having no version control. All trade speed today for pain forever; resist them from day one. ## Where to go next Next: [solution patches vs upgrades](https://www.solvingdynamics365.com/guides/solution-patches-vs-solution-upgrades) for the release rhythm, [connection references and environment variables](https://www.solvingdynamics365.com/guides/connection-references-and-environment-variables) for environment-specific configuration, [import and export pipelines](https://www.solvingdynamics365.com/guides/solution-import-export-pipelines) and [ALM with GitHub Actions](https://www.solvingdynamics365.com/guides/alm-with-github-actions-for-power-platform) for automation. When an import fails, [solution import errors](https://www.solvingdynamics365.com/guides/dataverse-solution-import-errors) is the reference. --- # Power Platform environments Environments in the Power Platform — types, capacity, regions, and how they relate to Dynamics 365 and Dataverse. Source: https://www.solvingdynamics365.com/guides/power-platform-environments Section: Power Platform Published: 2026-05-01 An **environment** in the Power Platform is an isolated container for apps, flows, Dataverse data, and security. Environments are the unit of administration, capacity, region, and licensing. Every Dynamics 365 CRM-side app *is* an environment with Dataverse plus the relevant Dynamics 365 components installed. Understanding the environment model is foundational. **Environment types.** - **Default.** Every tenant has a single default environment, automatically created and owned by Microsoft Entra ID. It's intended for personal productivity makers and casual flows, *not* for production business apps. Treat it as untrusted; lock it down with DLP policies. - **Production.** A first-class environment for running real apps. Includes Dataverse. The standard target for any deployed Dynamics 365 or Power Apps app. - **Sandbox.** A non-production environment for testing, training, and demos. Can be reset, copied from another environment, and converted to production. - **Developer.** Personal environments for individual makers, with Dataverse, scoped to the maker's own work. Free up to a usage cap. - **Trial.** Time-limited environments that expire automatically. - **Microsoft Dataverse for Teams.** A lightweight, Teams-scoped environment with a constrained Dataverse for in-team apps. Different storage model from full Dataverse. ## Capacity Each tenant has Dataverse storage capacity allocated by licences and add-ons. Environments compete for that capacity; the **Power Platform admin centre** shows usage per environment. Production environments consume more capacity than sandboxes; defaults are surprisingly small. ## Regions Environments are pinned to a region (Europe, North America, Asia Pacific, etc.) at creation. Region determines where Dataverse data physically lives. Moving an environment between regions requires a Microsoft-supported migration; default to creating in the right region. ## Security groups Each environment can be assigned a **Microsoft Entra security group** that controls who's allowed in. Without one, anyone in the tenant with a sufficient licence can access the environment — usually not what you want for production. Set the security group on day one. ## Environment admin and DLP Tenant admins enforce **data loss prevention (DLP) policies** that classify connectors (e.g. SharePoint and Dataverse as Business; Twitter and HTTP as Non-Business) and forbid flows from combining Business with Non-Business. DLP applies per environment or globally. ## Lifecycle Environments can be copied (data and customisations), reset (data wiped), backed up (Dataverse storage), and restored from backup. Production environments get 28 days of point-in-time restore by default. ## Cost Beyond Dataverse storage, environments themselves are usually free up to a count. Pay-as-you-go billing is available for tenants that want capacity-billed environments without licence allocation. ## Where to go next The design question — how many, for whom — is [environment strategy for Dynamics 365 projects](https://www.solvingdynamics365.com/guides/environment-strategy-for-dynamics-365-projects). Governance on top of environments is [Managed Environments](https://www.solvingdynamics365.com/guides/managed-environments-in-power-platform) and [DLP policies](https://www.solvingdynamics365.com/guides/dlp-policies-in-power-platform), administered from [the Power Platform admin center](https://www.solvingdynamics365.com/guides/power-platform-admin-center). Capacity is explained in [Dataverse storage types](https://www.solvingdynamics365.com/guides/dataverse-storage-types-explained). ### Frequently asked questions **What should the default environment be used for?** Personal productivity and casual flows only. Every tenant gets one, owned by Entra ID, and it should be treated as untrusted and locked down with DLP policies — never as the home for production business apps. **What environment types exist?** Default, production, sandbox (resettable, copyable, convertible to production), developer (free personal environments with Dataverse up to a cap), trial (auto-expiring), and Dataverse for Teams with its constrained storage model. **How do I restrict who can access an environment?** Assign a Microsoft Entra security group to it. Without one, anyone in the tenant with a sufficient licence can get in. Set it on day one for production. **Can I move an environment to another region?** Only through a Microsoft-supported migration. Region is fixed at creation and decides where Dataverse data physically lives, so create in the right region from the start. --- # Prepayments in Business Central How Business Central handles prepayments — sales and purchase prepayment invoices, GL impact, and the integration with order processing. Source: https://www.solvingdynamics365.com/guides/prepayments-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 **Prepayments** in Business Central handle the accounting for invoices issued or received *before* the goods are delivered or services rendered. Deposit on a sales order, advance to a vendor, milestone billing tied to an order — all are prepayment scenarios. The mechanism is well-defined but unfamiliar to anyone who has only seen simple post-and-pay systems. ## The business problem A customer places an order worth 100,000. Terms require 30% on order (a deposit) and 70% on delivery. Without prepayment functionality, you'd post a separate manual invoice for 30,000, then later post the full 100,000 sales invoice, then somehow reconcile the two. Prepayments build this into the order processing flow. ## Setting up prepayments Each sales and purchase line carries a **prepayment %** field (defaulting from the customer/vendor or set per line). Prepayment **posting accounts** — separate from regular sales/purchase accounts — are configured in the general posting setup: *Sales Prepayments Account* (a balance-sheet liability for prepayments received) and *Purchase Prepayments Account* (a balance-sheet asset for prepayments paid). ## The prepayment invoice From a sales order with prepayment % set, the user issues a **prepayment invoice**. Business Central calculates the prepayment amount (sum of line × prepayment %), posts it to the Sales Prepayments Account (rather than a revenue account), and creates a customer ledger entry. The customer is invoiced, can pay, and the payment is recorded as a normal receipt against the prepayment invoice. ## The final invoice When the goods ship or the service is delivered and the *final* sales invoice posts, Business Central recognises the full revenue, then reverses the previously-posted prepayment from the Sales Prepayments Account, so the net effect is correct: revenue recognised on delivery, no double-counting of cash. ## Partial deliveries Both prepayments and final invoices can be partial; the prepayment amount remaining is tracked per line and consumed proportionally as the final invoice posts. ## Purchase prepayments The mirror image. A purchase order with prepayment % triggers a prepayment invoice received from the vendor, posted to Purchase Prepayments Account. When the goods receipt happens and the final invoice posts, the prepayment is reversed. ## VAT Prepayments are VAT-relevant. Prepayment invoices include VAT at the prepayment rate; the final invoice reconciles the VAT correctly. Country localizations vary on the exact VAT treatment — verify per country. **Common pitfalls.** - **Mixing prepayment and non-prepayment lines** on the same order is supported, but adds complexity. Keep simple where possible. - **Cancelling a prepayment invoice** before the goods ship requires reversing the prepayment and the related receipt; not difficult but rarely done, so users need training. - **Foreign currency prepayments** with FX revaluation between prepayment and final invoice produce additional FX gain/loss entries; configure FX revaluation routines to include the prepayment accounts. ## Statutory uses In several jurisdictions, prepayment invoices are statutorily required for any payment before delivery. Configure prepayment % accordingly. --- # Printers and print management in Business Central How Business Central handles printing — cloud printer setup, Universal Print, document-to-printer routing, and the patterns for warehouse and retail printing. Source: https://www.solvingdynamics365.com/guides/business-central-printers-and-print-management Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-25 Printing from a cloud SaaS application to physical printers is harder than from on-premise software. Business Central solves this through **cloud printing integrations**, **Universal Print** support, and document-to-printer routing rules. For operations that print invoices, packing lists, shipping labels, and warehouse documents at volume, configuring printing well matters. ## The historical pain BC on-premises printed directly to local printers. BC SaaS runs in Microsoft's cloud — no direct path to a printer at the customer's site. Three solutions emerged: - **Print to PDF** — generate PDF, user manually prints. Workable for low volume. - **Email to printer** — send PDF to a printer's email address. Some printers support this. - **Cloud print services** — Microsoft Universal Print or third-party (PrintNode, Printix). ## Universal Print integration Microsoft Universal Print is the strategic answer: - Microsoft cloud service. - Customer's on-prem printers registered with Universal Print. - BC sends print jobs to Universal Print. - Universal Print delivers to the physical printer. Setup involves Universal Print licence (separate from BC), printer registration, and BC's Universal Print connector configuration. **Configuration in BC.** - **Printer Selections** page maps documents to printers. - Each printer record represents a Universal Print printer. - Documents (Sales Invoice, Picking List, etc.) routed to designated printers. The mapping is per-company; admins maintain it. ## Print management on documents Some documents have **Print Management** rules: - **By customer / vendor** — specific customer gets paper invoice; others get email. - **By document type** — orders to a specific printer; invoices to another. - **By number of copies** — different copies for different recipients. The configuration sits on customer/vendor cards or globally. **Warehouse-specific printing.** - **Picking lists** — printed at the start of a pick. - **Packing lists** — at packing station. - **Shipping labels** — at the ship station. - **Receipt confirmations** — at the dock. Each station typically has its own dedicated printer; routing matters. **Retail printing (Commerce).** - **Receipts** — printed at POS terminal directly via POS hardware. - **Different model from BC printing** — POS hardware drivers handle receipt printers. - **Universal Print** less relevant for receipt printing; specialty drivers. ## Label printing Specialty: - **ZPL (Zebra)** — Zebra label printers. - **Bartender, NiceLabel** — third-party label software. - **Direct from BC** — limited; usually a label printing extension. ## Per-tenant extensions for printing Many partners build BC extensions that: - Print directly to PrintNode / similar cloud print API. - Generate barcode labels. - Support specific printer models. - Handle high-volume warehouse printing. **Cloud printer setup.** 1. Print server in customer environment connects on-prem printers to Universal Print or third-party. 2. Printers appear in cloud print service. 3. BC registered to print to those printers. The print server is a managed component; small VM running the print connector. ## Email-based printing alternatives For simple needs: - Printer email address configured. - BC sends documents as email attachments to printer. - Printer prints automatically. Works for simple cases; not all printers support this; security implications. **Common pitfalls.** - **Printer routing forgotten.** Documents print to default; chaos at multiple stations. - **Universal Print licence missed.** Required licence not provisioned. - **Print connector down.** Print server crashes; printing stops; nobody notices until queue piles. - **PDF rendering fonts.** Custom fonts not embedded; receipts look wrong. - **Receipt printer not handled.** POS uses different mechanism than BC's print management. **Operational rhythm.** - **Daily** — print queue monitoring (Universal Print console). - **Weekly** — printer maintenance, paper replenishment. - **Per outage** — restart print connector; verify queues. ## Strategic positioning Printing is unglamorous but critical for warehouse, manufacturing, and retail operations. Plan early; Universal Print is the strategic path for most scenarios. For specialty label printing or high-volume retail receipts, partner extensions or specialty drivers fill the gaps. The investment is moderate; the alternative (manual PDF printing, scattered email-to-printer hacks) costs ongoing operational pain. --- # Process designer and classic workflows in Dataverse The legacy workflow engine in Dataverse — what classic workflows do, the migration to Power Automate, and what still uses them. Source: https://www.solvingdynamics365.com/guides/process-designer-and-classic-workflows Section: Customer Engagement / Dataverse platform Published: 2026-07-08 Before Power Automate became the cloud-flow standard, Dynamics 365 had **classic workflows** — a configuration-based, code-light workflow engine running inside Dataverse. The classic engine still exists, still works for many scenarios, and is what some standard Dynamics 365 features still use internally. But Power Automate has substantially superseded it for new build. **Classic workflow basics.** A **classic workflow** is a Dataverse-internal process that runs on: - **Record events** — create, update of specific fields, delete, status change, assignment. - **Scheduled trigger** — periodic execution. - **On-demand** — invoked manually by a user. Each workflow: - Has a **scope** (User, Business Unit, Parent: Child BU, Organization). - Runs as **synchronous** (real-time, in the same transaction) or **asynchronous** (queued for background execution). - Contains a sequence of **steps** — actions to take. **Available step types.** - **Create Record** — generate a new record (e.g. create a follow-up activity when a case is created). - **Update Record** — modify the current or related record. - **Send Email** — generate an email using a template. - **Start Child Workflow** — recursive composition. - **Assign Record** — change ownership. - **Change Status** — modify status / status reason. - **Wait Condition** — pause until a condition is met (asynchronous workflows only). - **Conditional branches** — if-then-else logic. ## Designed in the Process Designer The visual designer (originally for Dynamics CRM, evolved into the modern process designer in the maker portal) provides drag-and-drop construction. Each step is configured with field-bound expressions and conditions. **Common historical use cases.** - **Welcome email** when a lead is created. - **Auto-assign cases** to queue based on attributes. - **Status change cascades** — opportunity won → create a follow-up task. - **Field defaulting** beyond what business rules support. - **Inactivity timers** — escalate cases after N hours. Many of these patterns still work; many have migrated to Power Automate equivalents. **Why Power Automate has superseded most classic workflow.** - **Connector library** — Power Automate connects to hundreds of external services; classic workflow is Dataverse-internal. - **Visual designer** — Power Automate's designer is more modern and approachable. - **Versioning and ALM** — Power Automate flows live in solutions and version cleanly. - **Error handling** — Power Automate has better retry, error, and parallel branch handling. - **Monitoring** — Power Automate run history is rich; classic workflow logs are basic. - **Microsoft strategic direction** — investment is in Power Automate; classic workflow is in maintenance. **Where classic workflow still matters.** - **Synchronous in-transaction logic** — classic synchronous workflows run *inside* the Dataverse transaction. Power Automate flows run asynchronously after the transaction commits. For logic that must succeed-or-fail with the originating operation, classic synchronous workflows have an advantage. - **Legacy customisations** — existing workflows that work fine; migration cost may not be worth the benefit. - **Some standard Dynamics 365 features** still implement internal logic as classic workflows (e.g. some Quote → Order conversion patterns). - **Real-time field updates** — quick synchronous workflow updates can be more performant than Power Automate at very high volume. ## Migrating from classic to Power Automate Microsoft provides migration tooling — point at a classic workflow, generate a Power Automate flow template that approximates the same behaviour. Often requires manual refinement. Migration patterns: - Simple "on create, do X" workflows → straightforward Power Automate trigger flow. - Workflows with wait conditions → Power Automate flows with delay actions. - Multi-stage workflows → Power Automate with multiple steps. For workflows that mix simple logic with classic-workflow-specific behaviour (synchronous in-transaction needs), the migration to Power Automate may not preserve semantics — careful review needed. ## Inventory existing classic workflows Before migration: - List every active classic workflow in the environment. - Document its purpose, trigger, scope, status. - Assess: is it still needed? Can it be retired? Should it migrate? - Plan migration over time — don't try to migrate all at once. **Common pitfalls.** - **Migration assumed automatic** — the tooling produces a starting point, not a finished migration. Validate behaviour. - **Forgetting that classic workflows aren't being invested in** — building new classic workflows when Power Automate would serve better. - **Synchronous vs async confusion** — replacing synchronous classic workflow with async Power Automate changes transaction semantics. ## Operational reality For new functionality, default to Power Automate. For legacy classic workflows, retire when convenient; don't force a fragile migration. The two coexist cleanly; gradual modernisation is the practical path. --- # Process mining in Power Automate How Power Automate Process Mining analyses real process data to discover process variants, identify bottlenecks, and recommend automation — what it does. Source: https://www.solvingdynamics365.com/guides/process-mining-in-power-automate Section: Foundations Published: 2026-05-01 Power Automate Process Mining (originally acquired as Minit, now an integrated capability) analyses **event logs** from business systems to reconstruct what processes actually do — not what the documentation says they do, not what stakeholders believe they do, but what happens in practice. The output is a quantified map of process variants, durations, and exception paths, with automation recommendations. ## The core idea Every business process leaves a trail of events in source systems — "order created", "approval granted", "invoice posted", "payment received". Stitching these events together by a common case ID (order number, invoice number) reveals the actual flow: how long each step takes, which variants are common, where rework happens, where SLAs miss. ## Input data — the event log The minimum: - **Case ID** — the entity being tracked (order, ticket, invoice). - **Activity name** — what happened. - **Timestamp** — when. Optional but valuable: - **Resource** — who did it (user or team). - **Cost** — financial impact. - **Outcome** — final status. - **Attributes** — customer type, region, amount, anything segmentable. The event log is the artefact process mining consumes. Building it cleanly from source systems is the bulk of the work. **Data sources.** - **Dynamics 365 / Dataverse** — out-of-the-box connectors pull activity records. - **SQL Server / databases** — query historical event tables. - **SAP, Salesforce** — via connectors or extracted exports. - **Custom systems** — CSV upload or custom connector. - **Process desktop activity** — process advisor recording desktop UI events. **What process mining produces.** - **Process map** — a directed graph of activities with frequencies and durations on edges. - **Variants** — every unique path taken; ranked by frequency. - **Bottlenecks** — activities or transitions with long wait times. - **Rework loops** — activities that occur multiple times per case. - **Compliance deviations** — paths violating expected process rules. - **Filtering and drill-down** — slice by attribute (region, customer segment, time period). ## Variants Real processes diverge into dozens or hundreds of variants: - **Variant 1 (60% of cases)** — happy path, all steps in order. - **Variant 2 (15%)** — manual exception handling. - **Variant 3 (5%)** — rework loop. - **Long tail** — hundreds of low-frequency variants with idiosyncratic paths. Quantifying variants reveals where standardisation could yield large gains. ## Automation recommendations Process Mining identifies activities suitable for automation: - **High-frequency manual activities** — automation impact is volume × per-instance time saving. - **Repetitive rework loops** — pre-validation could eliminate. - **Approval bottlenecks** — automated routing or AI-based pre-decisioning. Recommendations link directly to Power Automate templates — the AI suggests a flow to start with. ## Process Advisor — desktop process recording A complementary capability: a recording agent on a user's desktop captures clicks, keystrokes, and screen events. Multiple recordings cluster into a "as-is" desktop process, ready for RPA automation. Useful for processes whose digital footprint isn't in events but in user actions. **Use cases where process mining wins.** - **AP processes** — invoice arrival to payment, where rework and exceptions cost real money. - **Order to cash** — quote to invoice cycle time analysis. - **Customer service tickets** — resolution time, escalation patterns. - **Loan applications** — approval bottleneck analysis. - **Manufacturing** — order to ship cycle decomposition. **Use cases where it doesn't fit well.** - **Processes with poor event capture** — manual processes without timestamps in systems. - **Highly variable creative work** — no repeating pattern to mine. - **Strategic processes** — board decisions, M&A; the value is in judgement, not flow. ## The hard part — data preparation Getting clean event data is 70%+ of a process mining project: - **Identifying the case ID** across systems. - **Reconciling activity names** — "Invoice Received" in one system, "Invoice Captured" in another, same event. - **Filtering noise** — system events, not business events. - **Handling missing timestamps** — gaps in event capture. - **Volume management** — millions of events per process. Underestimating this is the most common project failure mode. ## Compliance and conformance checking Beyond exploration, process mining can check whether actual paths conform to a defined reference model. Deviations are quantified — useful for regulatory processes where prescribed sequence matters. **Common pitfalls.** - **Boil-the-ocean scope.** Trying to mine every process at once. Start with one high-impact, well-instrumented process; demonstrate value; expand. - **Ignoring the data preparation cost.** Sponsors expect insights in days; reality is weeks of data work first. - **Action follows insight, but slowly.** Mining reveals problems; fixing them requires process redesign and change management. - **Variants over-aggregated or under-aggregated.** Too aggregated, you miss patterns; too disaggregated, the long tail is noise. Tune. - **Privacy.** Event logs include user IDs — process mining requires DPIA in regulated industries. ## Operational guidance Process mining is a powerful diagnostic tool; treat it as a continuous capability, not a one-time project. Mine, fix, mine again. The teams that get value embed mining into their continuous improvement cadence and tie insights to specific automation, process redesign, or training actions. --- # Procurement transparency for public sector on Dynamics 365 Finance How public bodies run transparent, auditable procurement on Dynamics 365 Finance and Supply Chain Management — purchasing policies and thresholds. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-public-sector-procurement-transparency Section: Industries / Public sector Published: 2026-09-02 Public procurement has one requirement commercial procurement does not: it must be seen to be fair. Thresholds decide which procedure applies, competing bids must be evaluated against published criteria, the decision must be documented, and the spend must be reportable — to auditors, to elected members, and under freedom-of-information regimes to anyone who asks. Dynamics 365 Finance and Supply Chain Management provides the workflow, policy, and audit machinery; the tendering portal and the statutory notices remain outside it. This guide walks the procurement cycle from a transparency standpoint. For fund accounting, budget control, and encumbrance, see [public sector features](https://www.solvingdynamics365.com/guides/dynamics-365-public-sector-features). ## Policies encode the rules **Purchasing policies** are the mechanism for turning procurement regulations into system behaviour. Policy rules are assigned to organisation hierarchies — a legal entity, a department, a fund — and cover: - **Requisition control**: who may raise requisitions, for which categories, and whether a catalogue item is required. - **Purchase order creation and consolidation**: whether requisitions become orders automatically or wait for a buyer. - **RFQ requirements**: the rule that requisitions above a threshold amount must go through a request for quotation before an order can be raised. This is the rule that implements "three quotes above this value" and "formal tender above that value". - **Purchase agreement application**: lines must draw down from an existing framework agreement where one exists for the category. - **Category access**: which procurement categories each part of the organisation may buy from. Set the thresholds to match the regulation, tie them to the organisation hierarchy that mirrors delegated authority, and review them when the regulation changes. The policy is the documented control; auditors can read it directly. ## Requisition to approval Purchase requisitions with workflow are the entry point for controlled spend. The workflow routes by amount, category, and organisation — through a line manager, a budget holder, and above a threshold a procurement officer — with the [purchase requisitions and approvals](https://www.solvingdynamics365.com/guides/purchase-requisitions-and-approvals-in-f-and-o) guide covering the configuration. Budget control checks the fund at submission and reserves it as a pre-encumbrance, so that a requisition cannot proceed against an exhausted budget; the [budget control](https://www.solvingdynamics365.com/guides/budget-control-in-f-and-o) guide covers the mechanics. The transparency value is the workflow history: who approved what, when, with what comment, held on the requisition and reportable. A requisition approved outside the system — an email chain and a manually raised order — has no such history, and the policy should make that path impossible rather than merely discouraged. ## Requests for quotation and scored bids For competitive procedures, the **request for quotation** (RFQ) is the in-product mechanism. An RFQ is issued to selected vendors or opened for response, vendors reply with prices and delivery, and the replies are compared. Two features carry the fairness burden: - **Vendor collaboration** lets vendors see the RFQ and submit their bid through the portal, with a timestamp, rather than by email to a buyer. The [vendor collaboration](https://www.solvingdynamics365.com/guides/vendor-collaboration-in-f-and-o) guide covers the setup. Sealed-bid behaviour — nobody sees replies until the deadline — is a process control on top of it, not a lock in the product. - **Scoring criteria** on the RFQ let evaluators rate each bid against weighted criteria — price, quality, delivery, sustainability — with the scores recorded per evaluator and per reply. The award recommendation is then a documented calculation, not a buyer's preference. Configure the criteria before the RFQ is issued; adding them afterwards is exactly what a losing bidder's challenge will point to. The RFQ, replies, scores, and award create a complete record of the competition. What the RFQ does not do is publish the notice in the official journal, run a full e-tendering procedure with clarifications and standstill periods, or handle the structured questionnaires that formal tenders require. Public bodies use their jurisdiction's e-tendering platform for that, and the F&O RFQ either mirrors the result or is skipped for formal tenders, with the award recorded directly as a purchase agreement. ## Framework agreements Public bodies buy most routine goods and services under frameworks. **Purchase agreements** model them: a vendor, a validity period, committed quantities or values by category or item, prices, and release orders drawn against them. Policy can require that lines in a category use the framework, and consumption against the agreement is visible, which is what a compliance review checks first. The [sales and purchase agreements](https://www.solvingdynamics365.com/guides/sales-and-purchase-agreements-in-f-and-o) guide covers the mechanics. ## The audit trail Every document in the cycle carries its workflow history, its change history where database logging is enabled, and its posting trail. For public bodies the additional habits are enabling the **database log** on vendor bank details and vendor master changes (the classic fraud vector), keeping document attachments — the specification, the evaluation report, the conflict-of-interest declarations — on the RFQ or agreement rather than in a shared drive, and retaining procurement records for the statutory period. Financial reporting and Power BI over the purchasing tables give auditors and members the spend by vendor, category, and procedure. ## Publishing spend Many jurisdictions require publication of spend above a threshold, contracts awarded, and supplier lists. The data is in F&O; the publication is a scheduled export. Azure Synapse Link or the data lake export feeds a reporting layer from which the open-data file or the transparency report is produced with the required fields and redactions; the [data lake export](https://www.solvingdynamics365.com/guides/data-lake-export-for-dynamics-365-finance) guide covers the plumbing. Do not build the transparency report as a direct query against production. ## Where Business Central fits Smaller public bodies — parish and town councils, arm's-length bodies, schools trusts — run **Business Central**, which has purchase quotes, approval workflows by amount, and dimensions for fund and cost centre, but no purchasing policies, no RFQ with scoring, and lighter budget control. It is adequate where the procurement regulation is simple and the formal tenders run on the national portal anyway. The transparency burden is then met by the approval workflow history and a spend export, and the bid evaluation record lives with the portal. ## The gap to name early The product provides the controlled process and the evidence. It does not know the regulation — the thresholds, the standstill periods, the publication obligations — and the implementation must encode them in policy, workflow, and procedure. Procurement teams should own that configuration alongside finance, because the first time a threshold changes and the policy does not, the audit finding will be theirs. --- # Production scheduling in Dynamics 365 Supply Chain How scheduling works in Dynamics 365 SCM — operations vs job scheduling, finite vs infinite capacity. Source: https://www.solvingdynamics365.com/guides/production-scheduling-in-f-and-o Section: Finance & SCM / Manufacturing Published: 2026-05-01 Production scheduling in Dynamics 365 Supply Chain Management has more dials than any other module. The scheduling decisions made at implementation determine whether the system supports the planner's job or fights it every day. **Two scheduling layers.** - **Master planning** — high-level material and capacity plans across the planning horizon. Driven by **Planning Optimization** (the modern engine that replaced the legacy MRP). Outputs planned production orders sized to match demand and constrained by lead times. - **Production scheduling** — the operation-level sequencing of work on specific work centres, with start times, end times, and resource allocations. This is the planner's daily working surface. ## Operations vs job scheduling When a production order is firmed and released, it can be scheduled in two granularities: - **Operations scheduling** — schedules each routing operation as a whole, with single start and end times. Faster, less granular. Suitable when the work centre capacity is the main concern and within-operation sequencing isn't critical. - **Job scheduling** — schedules each job (a single occurrence of an operation on a specific work centre) at the lowest level, with full precedence and sequencing. Slower to compute, much more accurate. Required for any scenario where minute-level sequencing matters (e.g. tight changeovers between SKUs). **Finite vs infinite capacity.** - **Infinite capacity** — the scheduler ignores work-centre capacity limits. Useful for planning what *should* happen given demand; less useful for committing to delivery dates. - **Finite capacity** — the scheduler respects work-centre calendars and existing load. Operations that can't fit get pushed out. Required to produce realistic delivery dates. Most production environments switch on finite capacity from day one; the trick is configuring the calendars and capacities accurately. ## Forward vs backward scheduling A production order can be: - **Forward scheduled** from a start date — operations begin at the start date and run forward; the finish date is computed. - **Backward scheduled** from a finish date — operations are scheduled to end on the finish date; the start date is computed. The choice depends on the business need. Make-to-stock production with no specific delivery date forward-schedules from earliest start. Make-to-order with a customer delivery date backward-schedules from the required ship date. ## The Gantt chart F&O's production scheduling Gantt chart visualises operations across work centres and time. Planners drag operations to reschedule, hold operations to free capacity, and assess load by work centre. The Gantt is functional but not as polished as dedicated APS (Advanced Planning and Scheduling) tools. ## Constraints not covered Out of the box, F&O's scheduler handles work-centre capacity, calendars, and operation duration. It does *not* natively handle: - **Material constraints** — the scheduler assumes material will be available. Real shortages aren't reflected automatically. - **Sequence-dependent setup times** — switching from product A to product B vs A to C may take different setup times; the standard engine doesn't model this. - **Tooling and labour constraints** as independent resources. - **Campaigning** — running batches of similar SKUs together to minimise changeovers. For these, customers add **partner APS solutions** (Asprova, PlanetTogether, Preactor, Simio) that integrate to F&O. ## Master scheduling cadence Most operations run a regenerative or net-change plan nightly; finite scheduling of the planning horizon runs in the morning. The shop-floor sees a stable, realistic plan when they start work. ## Where ROI compounds Finite, accurate scheduling moves on-time delivery from "we missed several this week" to "we hit them" — and the difference compounds in customer relationships and inventory cost. --- # Project governance for Dynamics 365 implementations How to structure governance for a Dynamics 365 project — steering committee, project management office, decision rights. Source: https://www.solvingdynamics365.com/guides/project-governance-for-dynamics-365 Section: Implementation / Project execution Published: 2026-05-01 A Dynamics 365 implementation involves dozens of decisions per week — scope changes, technical trade-offs, resource priorities, vendor management. **Project governance** is the structure that ensures these decisions happen at the right level, by the right people, with the right input. Done well, governance keeps the project moving; done badly, it becomes bottleneck or rubber-stamp. **Why governance matters.** - **Decision velocity** — projects without governance suffer slow decisions or wrong-level decisions. - **Accountability** — clear who decides what. - **Risk management** — issues surfaced and addressed. - **Stakeholder alignment** — common direction. - **Audit trail** — what was decided and why. For multi-million-dollar implementations, governance is essential, not optional. **Governance bodies.** - **Steering Committee** — strategic; meets monthly typically. - **Project Management Office (PMO)** — operational coordination. - **Working groups** — domain-specific (Finance, Sales, etc.). - **Technical advisory** — architecture decisions. Each has scope and authority. **Steering Committee composition.** - **Executive sponsor** — typically C-level or senior VP. - **Business leads** per major function. - **CIO / IT leader.** - **Partner / vendor lead.** - **Project sponsor** from customer side. 5-8 people typically; larger becomes ineffective. **Steering Committee responsibilities.** - Approve major scope changes. - Resolve cross-functional conflicts. - Approve budget increases. - Make go / no-go decisions at milestones. - Address escalated risks. - Provide strategic direction. Doesn't manage day-to-day; sets direction and resolves stuck issues. **Meeting cadence.** - **Monthly** standard. - **Weekly** during critical phases (pre-go-live, cutover). - **Ad-hoc** for urgent issues. Cadence calibrates to project phase. **Standard steering committee agenda.** - Status dashboard. - Risks and issues. - Decisions required. - Scope change requests. - Budget and timeline. - Quality metrics. - Next phase preview. Time-boxed; not everything every meeting. **Project Management Office (PMO).** - Day-to-day coordination. - Status tracking. - Risk and issue logs. - Communications. - Documentation management. - Vendor coordination. For larger projects, dedicated PM; for smaller, part-time PM. **Working groups.** - Per business function (Finance, Sales, Operations, IT). - Subject matter experts. - Weekly typically. - Detail-level decisions in domain. Working groups make most decisions; steering only sees what gets escalated. **Decision rights.** - **RACI matrix** — Responsible, Accountable, Consulted, Informed per decision type. - **Documented decision authority** — what level decides what. - **Escalation triggers** — when does a decision move up? Without clear authority, decisions stall or get made at wrong level. **Common decision types.** - **Scope inclusion / exclusion.** - **Customisation vs standard.** - **Architecture choices.** - **Vendor performance issues.** - **Resource changes.** - **Schedule changes.** - **Budget changes.** Each should have defined authority. **Risk management.** - **Risk register** maintained. - **Per risk**: probability, impact, mitigation, owner. - **Review cadence** — weekly in PMO, monthly in steering. - **Top risks elevated** — focus attention on highest impact. Active risk management is a leading indicator of project health. **Issue management.** - **Issue log** — known problems requiring action. - **Per issue**: description, impact, target resolution, owner. - **Escalation** path defined. Stuck issues elevated to higher levels. **Communication.** - **Status reports** — weekly or biweekly. - **Stakeholder updates** — periodic to broader audience. - **All-hands** — milestone communications. - **Issue alerts** — ad-hoc on critical events. Communication discipline keeps stakeholders engaged. ## Status reporting A typical weekly status: - **Highlights** — what's progressing well. - **Lowlights / risks** — what's concerning. - **Decisions needed.** - **Forecast** — on/off track per milestone. - **Quality metrics** — defects, performance. - **Next week's focus.** Concise, honest reporting; over-rosy reports lose credibility. **RACI matrix example.** | Decision | Customer Lead | Project Mgr | Steering | Partner | |---|---|---|---|---| | Customisation request | R | A | C (if material) | C | | Vendor change | I | R | A | I | | Scope expansion | C | R | A | C | | Technical architecture | C | R | I | A | | Go-live date | C | R | A | C | R = Responsible, A = Accountable, C = Consulted, I = Informed. Clear up front; reduces ambiguity. **Quality metrics.** - **Defect count** — by severity. - **Test pass rate** — current cycle. - **User acceptance status** — UAT progress. - **Customisation count** — vs plan. - **Burn rate** — actual vs budget. Quantitative metrics drive objective decisions. **Vendor management.** - **Performance against SOW.** - **Quality of deliverables.** - **Team engagement.** - **Issue resolution speed.** Periodic vendor performance review; address issues early. **Change control.** - **Formal change request process.** - **Impact analysis** per change. - **Approval at appropriate level.** - **Documentation updated.** Without change control, scope drifts; with too much, every minor adjustment becomes process. **Common pitfalls.** - **Governance theatre.** Meetings happen; decisions don't. - **Decisions at wrong level.** Steering deciding details; working groups stuck on strategy. - **Slow decisions.** Bottlenecks build. - **No escalation discipline.** Stuck issues never elevated. - **Status reporting sugar-coats.** Steering surprised by go-live problems. - **Sponsor disengaged.** Project lacks executive air cover. **Phased governance evolution.** - **Discovery** — lighter governance. - **Design / Build** — full governance. - **UAT / Cutover** — intensified. - **Hypercare** — adjusted focus. - **Operations** — transition to standard ops governance. Governance shape evolves with project phase. ## Strategic positioning Governance is what turns a complex project into a manageable one. The structure isn't intrinsically valuable; the discipline of using it is. Mature implementations have governance that produces decisions, surfaces risks, and aligns stakeholders. For project sponsors: - Design governance early. - Ensure decision authority is clear. - Maintain meeting discipline. - Use the structure; don't go around it. - Adjust as the project evolves. The cost is meeting time; the benefit is on-track delivery, fewer surprises, and informed stakeholders. Underinvested governance leads to project drift; overinvested becomes bureaucratic friction. The right level is enough to coordinate but not so much it becomes the work. --- # Project Operations deployment types How Project Operations comes in three deployment shapes — Lite, Resource & Non-Stocked, and Finance — what differs between them. Source: https://www.solvingdynamics365.com/guides/project-operations-deployment-types Section: Customer Engagement / Project Operations Published: 2026-05-01 **Dynamics 365 Project Operations** is offered in three distinct deployment types, each targeting a different project services scenario. They aren't interchangeable — picking the wrong one means rebuilding later. Understanding the three at the start of any project-services Dynamics initiative saves significant time and licence churn. **The three deployments.** - **Project Operations — Lite (PO Lite)** — for opportunity-to-cash on Dataverse only. - **Project Operations — Resource and Non-Stocked / Production-Based** — for organisations needing tighter integration with Finance & Operations. - **Project Operations — Finance and Operations Integrated** — for organisations on F&O with full ERP-grade project management. The naming has shifted over recent waves; current branding emphasises the underlying scenarios rather than the deployment names directly. Microsoft documents the three shapes consistently. ## PO Lite — Dataverse only Best for: - Smaller professional services firms. - Project-centric work without complex ERP needs. - Organisations on the CE-side of Dynamics 365 (Sales, Customer Service). - Time-tracking, project billing, basic revenue recognition. What it offers: - Project planning (tasks, schedule, resources). - Time and expense entry. - Project quotes and contracts. - Invoicing via sales orders or directly. - Basic revenue and cost reporting. What it doesn't offer: - Deep inventory integration. - Complex revenue recognition standards (ASC 606 multi-element). - Advanced manufacturing-style WIP and cost accounting. - Multi-currency consolidation at scale. Licensing: priced per user; Dataverse-only deployment cheaper and simpler. ## Resource and Non-Stocked-Based Best for: - Mid-market and enterprise services firms. - Organisations needing F&O for finance but project management on the CE side. - Hybrid scenarios where parts of operations are on F&O. Architecture: - Project, resource, time entry on Dataverse (CE side). - Project accounting, revenue recognition, billing on F&O. - Dual-write integration syncs between. The advantage: front-line teams use a CE-style modern UX while finance gets F&O-grade accounting. The cost: integration complexity; dual-write maintenance. ## F&O Integrated (full ERP) Best for: - Large project-driven manufacturers. - Engineer-to-order, build-to-order businesses. - Organisations on F&O for everything; want projects integrated into the broader ERP. Architecture: - Project module within F&O itself. - Full integration with inventory, production, procurement. - Project ledger, cost categories, WIP, revenue recognition all in F&O's project sub-ledger. Capabilities: - Manufacturing projects (the project consumes BOMs and produces output). - Construction-style projects (long-lead, milestone-based). - Government contracting (DCAA / FAR compliance). - Multi-LE projects (entities collaborating on one project). This is the heaviest deployment but the most capable for complex scenarios. **Picking between them.** - **Pure services with simple needs** → PO Lite. - **Services with F&O finance integration** → Resource and Non-Stocked. - **Manufacturing or complex projects on F&O** → F&O Integrated. If unsure, lean toward the lighter option — upgrading is non-trivial, but starting too heavy is operational overkill. ## Migration between deployments A common scenario: company starts with PO Lite, grows, decides to integrate with F&O. Migration is possible but involves: - Re-platforming project schedules. - Re-establishing financials in F&O. - Re-training teams. - Data conversion. Plan months for a real migration, not weeks. The decision to deploy on the right type from the start saves significant cost later. **Common cross-deployment concepts.** - **Project** — the core entity. - **Project task / WBS** — work breakdown structure. - **Project resource** — people assigned to the project. - **Time entry / expense entry** — actuals. - **Project contract** — billing arrangement (fixed-price, T&M, milestone). - **Project invoice** — billing to customer. - **Project actuals** — committed costs and revenue. These exist in all three but vary in depth. ## Resource scheduling All deployments include resource scheduling: - **Resource Scheduling Optimization (RSO)** — ML-driven resource matching. - **Schedule board** — manual assignment. - **Resource fulfillment** — bookings on the project. Field Service and Project Operations share scheduling infrastructure; an organisation running both gets unified scheduling. ## Time entry Universal pattern: - Resource enters time against project / task daily or weekly. - Manager approves. - Time posts to project actuals — flowing to billing and revenue recognition. PO Lite has a simpler time entry surface; F&O Integrated has additional time entry features (multiple time categories, regulatory timekeeping). **Common pitfalls.** - **Wrong deployment chosen at start.** Cost of correction high. - **Integration complexity underestimated.** Dual-write reliability work is real ops effort. - **Configuration sprawl.** Every customer's slightly different; managing varied configs across many customers is heavy for partners. - **Licensing confusion.** Three deployments → multiple SKUs and add-ons; getting licensing right takes specialist help. - **Roadmap misalignment.** Some features land in one deployment before others; planning around current capability matters. ## Strategic positioning Microsoft's investment is across all three, but the most innovation lands in the integrated deployments (Resource/Non-Stocked and F&O). PO Lite remains supported for the simpler scenarios but doesn't always get newest features first. Choose deployment based on actual business needs, not aspirations. Start lighter, upgrade only with concrete evidence of need. The deployment choice is one of the biggest decisions in any Project Operations project — give it the analysis it deserves. --- # Projects in Business Central How Business Central handles project accounting, resourcing, time, and billing — and when to step up to Project Operations. Source: https://www.solvingdynamics365.com/guides/business-central-projects Section: Business Central / Service & projects Published: 2026-05-01 Updated: 2026-08-31 Business Central's project module (called **Jobs** in older versions; **Projects** in newer ones) is built for services-led businesses that need to track time and cost against engagements and bill customers from them. It is genuinely capable for SMB consulting, agency, light professional services, installation, and field-work organisations — and stops short of being a full PSA (professional services automation) suite. ## Projects and tasks A **project** belongs to a customer and contains a hierarchy of **project tasks**. Each task has a budget and a billable plan. Tasks roll up into the project for profitability and WIP reporting. ## Planning lines Within a task, **planning lines** describe what is budgeted, billable, or both: hours of a resource at a sell rate, items consumed at cost, GL expenses. Planning is in three flavours — *Budget* (cost only), *Billable* (revenue only), or *Both* (combined). This separation makes it easy to model fixed-price work, time-and-materials, and capped engagements. ## Resources and time Resources (people or equipment) have unit costs and price lists. **Time sheets** let users enter hours by week against projects and tasks, which then post to job journals. Resource availability and basic capacity planning are included. ## Posting and WIP As resources consume time and items are issued to a project, **job ledger entries** record cost and the WIP module can defer those costs to the balance sheet via WIP journals, recognised as revenue and COGS on completion or percentage-of-completion. ## Billing **Job Sales Invoices** are created from billable lines, in advance or in arrears, with milestone schedules, retainers, and progress billing all supported. ## WIP methods — the decision that bites later The WIP setup is where project accounting projects go wrong, because the method chosen at implementation determines how revenue and cost hit the P&L for every project afterwards. BC ships several **WIP methods** — completed contract (nothing to P&L until the project closes), cost value, sales value, percentage of completion, and cost of sales — and the right one is an accounting-policy decision, not a system preference. Two practical warnings. First, the WIP calculation is only as good as the **budget** (percentage-of-completion divides actuals by budget, so an unmaintained budget produces confidently wrong revenue recognition). Second, WIP calculation and WIP posting are separate, deliberate steps — run monthly, reviewed by someone who understands the numbers, not automated into the dark. The mechanics get their own guide in [WIP and recognition for jobs in BC](https://www.solvingdynamics365.com/guides/wip-and-recognition-for-jobs-in-bc), and the terminology in the [WIP glossary entry](https://www.solvingdynamics365.com/glossary/wip). ## Purchasing against projects Cost doesn't only arrive through time sheets. Purchase order and purchase invoice lines carry project and task fields, so subcontractor invoices, materials, and expenses post straight onto the project as job ledger entries. This is also the discipline point: costs booked to a plain G/L account without the project reference simply vanish from project profitability, and no report finds them later. Make the project field effectively mandatory for project-driven purchase categories, and review "project-less" cost postings weekly during the first months. ## Making it work in practice - **Time discipline is the whole game.** Project profitability in BC is a report over job ledger entries; if consultants book hours weekly-ish and generously round, every downstream number is fiction. Weekly time sheet approval with a named approver is a process decision that matters more than any configuration. - **Model engagement types deliberately.** Fixed-price work: budget lines as *Budget*, invoicing via *Billable* milestone lines. T&M: *Both*, so every posted hour creates a billable line. Mixing the patterns on one task produces double-billing or unbilled work. - **Keep the task structure shallow.** Two or three levels. A task hierarchy mirroring a 200-line project plan makes time entry a treasure hunt and guarantees miscoded hours. - **Invoice from the system.** Creating invoices in Word "because the layout is nicer" breaks the link between billed and posted amounts. Fix the [document layout](https://www.solvingdynamics365.com/guides/document-layouts-and-report-design-in-business-central) instead. ## Limits — and when Project Operations earns its cost Resource-level utilisation reporting, formal resource scheduling boards, and complex pricing/billing rules (multi-currency milestone with retention, for example) are basic. Companies that need full PSA — opportunity-to-cash for services with resourcing, scheduling, and complex billing — typically move to **Project Operations**, which is a separate Dynamics 365 app that integrates back to BC or Finance. The honest dividing line: if projects are *what you sell* and the pain is in winning, staffing, and scheduling them — sales pipeline for engagements, bench management, skills-based resourcing — BC's module was never meant to solve that, and [Project Operations](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-project-operations) is the answer. If projects are how you *account* for delivery and the pain is cost capture, WIP, and billing, BC's module is enough and considerably cheaper. Moving up for prettier Gantt charts alone is an expensive way to buy a picture; the comparison is walked through in [BC jobs vs Project Operations](https://www.solvingdynamics365.com/guides/business-central-jobs-vs-projects). --- # Public sector features in Dynamics 365 How Dynamics 365 Finance supports public-sector accounting — fund accounting, budget control, encumbrance, grants, and compliance. Source: https://www.solvingdynamics365.com/guides/dynamics-365-public-sector-features Section: Finance & SCM / Public sector Published: 2026-05-01 Dynamics 365 Finance ships a **Public Sector** feature set that turns the standard ERP into a government-grade fund-accounting system. Public-sector finance is fundamentally different from commercial finance — fund-balance accounting, mandatory budget control, encumbrance, and stricter audit — and these features are how F&O reaches that bar. ## Fund accounting Public bodies don't run a single P&L; they account by **fund**, where each fund is a self-balancing set of accounts representing a programme, grant, or restricted purpose. Public Sector mode adds **derived financial hierarchies** that classify GL postings by fund, function, programme, and other public-finance dimensions, with intra-fund balance enforcement. ## Budget control General Public Sector users run **budget control** in *hard-stop* mode — a transaction that would exceed its budget line is blocked at entry, not warned. Budget control checks happen at multiple points (requisition, purchase order, invoice) with configurable rules. Funds are released and consumed throughout the year and reconciled at period-end. ## Encumbrance and pre-encumbrance When a purchase requisition is approved, F&O posts a **pre-encumbrance** against the budget — money set aside but not yet committed. When the requisition becomes a purchase order, the pre-encumbrance converts to an **encumbrance**. When the vendor invoice arrives, the encumbrance is relieved and an actual expense posts. This three-stage commitment accounting is mandatory in most public-sector environments. ## Grants management Awards, sub-awards, billing schedules, and grant-specific budget tracking. Costs incurred against a grant can be allocated and billed back to the granting authority through standard or custom rules. ## Year-end procedures Public-sector year-end carries forward open encumbrances, closes the fund balances, and produces the required statutory disclosures. The standard close routines extend with public-sector-specific steps. ## Procurement compliance Public-sector procurement often requires open competitive bidding, vendor pre-qualification, and audit trails for every step. F&O's Procurement and Sourcing module is the workhorse here, configurable for the bidding rules of the jurisdiction. ## Vendor 1099 (US) and equivalents Year-end vendor reporting for tax authorities ships standard for the US (1099) with localization variants for other countries. ## Where it fits Federal, state/provincial, and large municipal governments are the target. Smaller public bodies (small cities, school districts) can run Public Sector but the implementation cost is meaningful — for very small public organisations, Business Central with a fund-accounting ISV add-on is sometimes the more proportionate fit. --- # Purchase requisitions and approvals in Dynamics 365 Finance How F&O's purchase requisition workflow handles requesters, approvers, conversion to PO, and the integration with procurement policy and budget control. Source: https://www.solvingdynamics365.com/guides/purchase-requisitions-and-approvals-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-06-16 For enterprise organisations, every meaningful spend should start as a **purchase requisition** — a formal request from an employee asking the organisation to commit to buying something. The requisition routes through approval, gets approved (or rejected), and then converts to a purchase order that the procurement team executes. Dynamics 365 Finance handles the full lifecycle. ## The requester experience An employee identifies a need: - Buy office supplies. - Engage a contractor. - Purchase software licences. - Order equipment. - Pay for training. Through a self-service workflow (often via a Power Apps interface or directly in F&O), the requester: 1. **Creates the requisition** — selects items / services from the catalogue, enters details, attaches supporting documents (quotes, justifications). 2. **Submits** — the workflow engages. 3. **Tracks** the requisition's status as it moves through approval. 4. **Receives notification** when approved (or rejected with reason). ## The approval workflow F&O's workflow engine routes the requisition: - **Manager approval** — first line, the requester's direct manager. - **Budget check** — does the requested amount fit within the cost-centre's available budget? - **Procurement category approval** — different category-specific approvers (IT requisitions to IT lead, HR requisitions to HR lead). - **Threshold-based escalation** — over €10,000 requires director; over €50,000 requires VP; over €100,000 requires CFO. - **Compliance review** — for specific scenarios (contractor engagements need legal review). The exact routing is configured per organisation; F&O's workflow engine accommodates substantial complexity. **Approval responses.** - **Approve** — moves to the next step or, if final, marks requisition approved. - **Reject** — requester is notified; requisition can be re-submitted with changes. - **Request change** — the approver asks for modifications before approving. - **Delegate** — pass to a substitute approver. - **Recall** — the requester withdraws their request. Each action is logged with timestamp, comments. ## Budget control integration For organisations using **budget control** (mandatory in public sector, common in cost-controlled commercial operations): - The requisition's projected expense reserves budget on submission (pre-encumbrance). - Approved requisition converts pre-encumbrance to encumbrance. - The encumbrance commits budget against the cost centre. If submitting a requisition would exceed available budget, the workflow either blocks (hard-stop) or warns (soft, requires override). Public Sector configurations typically run hard-stop. ## Procurement category management Spend is classified into **procurement categories** — a hierarchical taxonomy: - IT > Software > SaaS subscriptions. - IT > Hardware > Laptops. - HR > Recruitment > Headhunter fees. - Marketing > Events > Sponsorships. Categories drive: - Approval routing — different categories to different approvers. - Catalog visibility — what items / services requesters can see. - Reporting — spend analysis by category. - Sourcing policy — preferred-vendor rules per category. ## Vendor management Approved requisitions can be sourced from: - **Preferred vendors** — pre-qualified with negotiated pricing. Default for many categories. - **New vendors** — requires vendor onboarding workflow first (financial, compliance, regulatory checks). - **Punch-out catalogues** — for commodity items, requesters browse external vendor catalogues (Amazon Business, vendor-specific portals) with prices and details flowing back into F&O. ## Conversion to purchase order Once a requisition is approved, the procurement team: - **Manually converts** — reviews and creates the PO. - **Auto-converts** — for low-value, low-risk categories, the system auto-creates the PO without manual intervention. - **Combines requisitions** — multiple small requisitions for the same vendor can combine into one PO. The PO becomes the formal commitment to the vendor. **Procurement controls beyond requisitions.** - **Three-way matching** — at invoice posting, F&O matches the invoice to the PO and the receipt; mismatches require explicit override. - **Contract compliance** — POs reference framework contracts; pricing pulls from agreed rates. - **Receiver reporting** — once goods arrive, they're received against the PO; this triggers accruals. **Reporting.** - **Open requisitions** — pending approval per stage. - **Approved-but-not-converted** — requisitions waiting for procurement. - **Spend by category** — analytical view of procurement activity. - **Average approval cycle time** — workflow performance. - **Off-contract spend** — requisitions sourced outside preferred vendors. **Common pitfalls.** - **Approval workflow too complex** — every step requires sign-off; requisitions take weeks. - **Insufficient category structure** — everything is "Other"; reporting is useless. - **No conversion automation** — every requisition manually converted; procurement is a bottleneck. - **Catalogue out of date** — requesters can't find what they need; raise ad-hoc requisitions. ## Operational reality Mature procurement processes route the bulk of spend through structured requisitions; only true emergencies bypass. The discipline produces visibility, control, and cost savings — usually several percent of total procurement spend. --- # Quality management in Dynamics 365 SCM How F&O's quality management module handles inspection plans, quality orders, nonconformance, and the link from quality data to operational decisions. Source: https://www.solvingdynamics365.com/guides/quality-management-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 For regulated industries (food, pharma, medical devices) and quality-sensitive operations (automotive, electronics), F&O's **Quality Management** module captures the inspection and nonconformance workflows that determine whether incoming, in-process, and outbound material can be used. Done right, it ties directly into operational decisions — block, release, rework, scrap. **Core entities.** - **Test** — a specific measurement (dimensional, chemical, visual). - **Test group** — a collection of tests applied together. - **Quality association** — defines when a quality order is auto-created (e.g. on receipt of items in this group from these vendors). - **Quality order** — the actual inspection record, with results per test, disposition, and follow-up actions. - **Nonconformance** — a captured defect with root cause analysis fields and corrective action. ## Quality associations The auto-creation rules: - **Event** — Purchase receipt, Production reporting as finished, Inventory transaction, Sales picking, etc. - **Reference** — item group, item, vendor, customer, or specific products. - **Sampling plan** — full inspection, percentage, fixed quantity. - **Test group** — which tests to run. Quality association rules are the engine that translates "we always inspect first lot from any new vendor" into automatic quality orders without operator decision. **Sampling plans.** - **100%** — every unit. - **Quantity per lot** — fixed sample size. - **Percentage** — proportional sample. - **Acceptance sampling (AQL)** — statistical sampling per ISO 2859 or military standards. The right plan depends on test cost and consequence of escape. Visual checks may be 100%; destructive testing is small samples. **The inspection workflow.** 1. Quality association fires; quality order is created. 2. The inspected quantity is segregated to a quarantine warehouse or quarantine bin until disposition. 3. Quality engineer runs the tests, records results per test line. 4. The system evaluates pass/fail per test against limits. 5. Overall disposition is set: **Pass**, **Fail**, **Conditional**. 6. Disposition drives next steps: release to stock, return to vendor, rework, scrap. ## Quarantine integration Items being inspected are typically segregated to a **quarantine warehouse** or **quarantine bin**. Until the quality order is dispositioned, the material is not available for normal operations. The integration is automatic with warehouse-managed receipts: receipt → quarantine, quality order pass → move to normal inventory. ## Nonconformance A failed quality result, or a problem discovered downstream, generates a **nonconformance**: - **Problem type** — internal, customer, vendor. - **Diagnosis** — what was found. - **Cause** — root cause (5 Whys, fishbone analysis fields). - **Operations** — corrective actions taken (rework, scrap, return, accept with deviation). - **Costs** — labour and material costs of the response. Nonconformance records aggregate into supplier scorecards (vendor X has Y nonconformances/quarter) and trend analysis. ## Corrective and preventive actions (CAPA) For regulated industries, nonconformance leads to formal CAPA — actions designed to prevent recurrence. F&O has CAPA fields but for FDA-regulated environments, dedicated CAPA software is often layered on top. ## Certificate of analysis (CoA) Quality results can be printed as a Certificate of Analysis sent to customers with shipments — proof of test results. Configure the report to pull from quality order data, sign off by quality manager, attach to shipping. ## Production integration In manufacturing: - **In-process inspections** — quality orders triggered at specific operations. - **Final inspection** — before reporting production complete. - **Statistical process control** — measurements tracked over time; trends visible. ## Vendor integration Quality data informs vendor management: - **Supplier scorecard** — pass rate, defect rate, response time. - **Vendor approval status** — restricted, approved, preferred. - **Inspection level** — first-article inspection for new items, reduced inspection for proven items. **Common pitfalls.** - **Quality associations too narrow.** Missing items not covered → inspection skipped. - **Tests poorly defined.** Vague test descriptions; results inconsistent across inspectors. - **No quarantine discipline.** Items released to stock before disposition; operational risk. - **Nonconformance not analysed.** Records accumulate, no trend analysis, no CAPA — quality module becomes paperwork. - **CoA out of sync with results.** A CoA prepared at receipt sent later doesn't reflect any retests — process must enforce final result on CoA. ## Operational rhythm Quality data is most valuable when reviewed regularly: weekly nonconformance trends, monthly vendor scorecard reviews, quarterly process capability analysis. The module is a tool for those rhythms — without the rhythm, it's data collection without action. ## When it's not enough Pharma GxP environments often need eQMS systems (Veeva, MasterControl, Tracewise) layered on top for validated audit trails, electronic signatures, and regulatory submission. F&O integrates with these via APIs. --- # Quick view and quick create forms in Dataverse How quick view forms and quick create forms streamline data entry and lookup in Dynamics 365 — design, embedding, and the user-experience impact. Source: https://www.solvingdynamics365.com/guides/quick-view-and-quick-create-forms Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Beyond the main form on a Dataverse record, two specialised form types — **quick view forms** and **quick create forms** — provide compact, focused views for specific UX patterns. Used well, they substantially reduce the user's clicks and form-switching effort. **Quick view forms.** A **quick view form** displays read-only data from a *related record* embedded inside the parent form. The classic example: on an Opportunity form, a quick view showing the related Account's address, primary contact, and credit limit — without navigating to the Account. Each quick view form has: - **Source table** — what kind of record it shows (Account, Contact, Asset, etc.). - **Columns shown** — what fields to display. - **No sections / tabs** — quick views are flat layouts. Quick views can be **embedded in parent forms** through field-style quick view controls. On the Opportunity form, you add the customer account's quick view; the form designer surfaces it as a panel beneath the lookup. When the lookup changes (different customer selected), the quick view refreshes with the new record's data. **Common patterns.** - Account info on Opportunity / Lead / Case forms. - Contact info on activities. - Asset info on work orders. - Product info on quote / order lines. - User info anywhere relevant. The pattern saves users from constantly clicking through lookups to read related data. **Quick create forms.** A **quick create form** is a slim, inline creation form that appears as an overlay or panel — typically for creating a new record without leaving the current context. Examples: - "New Contact" quick create from an Account record — minimal fields (name, email, phone), one click to create and link. - "New Activity" quick create — create a phone call or task without opening the full activity form. - "New Opportunity" quick create from a Contact — capture the essentials, then optionally open the full form to complete. A quick create form has: - **Subset of fields** — only the essentials needed for the create. - **No sections / tabs** typically — flat layout for speed. - **Optional auto-link** — if launched from a parent record, can pre-populate the lookup back to the parent. Quick create dramatically reduces friction for casual record creation. Users can capture notes, contacts, tasks without losing context in what they were doing. **Configuration.** - **Per-table** — each Dataverse table can have one quick create form and one or more quick view forms. - **Enable quick create** — per table, a toggle controls whether the quick create form is available. - **Form picker** — for tables with multiple quick view forms, the parent-form designer picks which to embed. **Design principles.** For **quick view forms**, show only what's relevant in context. Don't replicate the full record; show the 5–8 fields a user looking at the parent needs. For **quick create forms**, capture the minimum needed for a valid record — name, key relationship fields, mandatory fields. Trust users to open the full form for the rest. The friction tax of unnecessary fields kills quick create's value. **Limits.** - **Read-only for quick view** — can't edit related-record fields inline through the quick view. For inline editing of related records, use editable subgrids or in-line editing patterns. - **No business process flows** in quick create — only the main form supports BPF. - **Limited form scripting** — quick view forms have minimal JavaScript hooks compared to main forms. - **Mobile rendering** — both render on mobile, but complex quick views can be cramped on small screens. Test. ## Performance Each quick view embedded in a parent form is a separate Dataverse query at form load. Pages with many embedded quick views slow down. Audit which ones genuinely add value. **Common patterns and pitfalls.** - **Don't embed quick view of grandparent** — Account → Opportunity → Quote. Embedding Account's quick view on the Quote is multi-hop and slow. Replicate the key fields if needed. - **Quick create blocked by required fields** — too many required fields on the quick create form defeats its purpose. Make only the truly mandatory required. - **Forgetting to enable quick create** — users complain that "+ New" doesn't open quickly; the toggle is off. ## Operational reality Quick view and quick create forms are some of the most user-loved features when designed well. Spend deliberate UX time on them per major table; they pay back in adoption. --- # Quote-to-cash for distributors on Dynamics 365 How the quote-to-cash cycle runs for a wholesale distributor on Dynamics 365 — quoting in the ERP versus in Sales, the pricing stack, credit and margin control. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-distributors-quote-to-cash Section: Industries / Distribution Published: 2026-09-02 Distributors live on volume, thin margin, and speed. A quote-to-cash process that takes three systems and two re-keys is not a process, it is a cost. Dynamics 365 can run the full cycle inside the ERP — quote, order, credit check, pick, ship, invoice, collect — and the main design question is what, if anything, the CRM app adds. This guide walks the cycle for a wholesale distributor and is blunt about the ISV boundaries. For the multi-warehouse side of fulfilment see [multi-warehouse fulfilment](https://www.solvingdynamics365.com/guides/dynamics-365-for-distributors-multi-warehouse-fulfilment); for the industry overview, [Dynamics 365 for wholesale distribution](https://www.solvingdynamics365.com/guides/dynamics-365-for-wholesale-distribution). ## Where the quote lives There are two places a quote can be created: the ERP (**Supply Chain Management** sales quotations or **Business Central** sales quotes) and **Dynamics 365 Sales**. Distributors should default to the ERP. The ERP quote has the real prices, the real stock, the customer's real credit position, and converts to a sales order without integration. A quote in Dynamics 365 Sales has the opportunity, the contact history, and the pipeline, and it converts to a sales order only through Dual-write, a connector, or an integration, all of which have to carry the pricing outcome across. For a distributor doing hundreds of transactional quotes a day, that integration is a liability. The case for Sales is account management, not quoting: territory planning, opportunity tracking on new-account wins, activity history, and marketing follow-up. Distributors that run Sales successfully use it for the relationship and let the ERP own every priced document. The [wholesale distribution overview](https://www.solvingdynamics365.com/guides/dynamics-365-for-wholesale-distribution) discusses this split. ## The pricing stack Distribution pricing is where the ERP earns its licence. Supply Chain Management's stack, from the bottom up: - **Base sales price** on the item. - **Trade agreements** — price and discount journals by item, item group, or all items, against customer, customer group, or all customers, with quantity breaks, date ranges, and currency. Line discounts, multiline discounts, and total discounts stack according to the discount parameters. - **Sales agreements** — contractual commitments by quantity or value with a customer, which the [sales and purchase agreements](https://www.solvingdynamics365.com/guides/sales-and-purchase-agreements-in-f-and-o) guide covers. - **Unified pricing management** — the newer rule-based pricing engine shared with Commerce, which adds price components, margin-based and attribute-based pricing, and a clearer evaluation trace than legacy trade agreements. Distributors implementing today should evaluate it rather than defaulting to trade agreements. - **Rebates and trade allowances** — accrued off the invoice, covered in [trade allowance and rebates](https://www.solvingdynamics365.com/guides/trade-allowance-and-rebates-in-f-and-o). Business Central's stack is simpler — the price and discount lists of the new pricing experience, with customer price groups, campaigns, and quantity breaks — and adequate for most SMB distributors. What neither product does: price optimisation (what *should* the price be for this customer and item given elasticity and competitor data), and guided selling for complex product mixes. Both are ISV territory. A distributor asking for "AI pricing" is asking for an ISV or a data-science project over the ERP's transaction history. ## Margin and credit control at order entry Two checks belong on the sales line, not in a month-end report: - **Margin visibility and floors.** Supply Chain Management can show cost and margin on the line and alert on lines below a threshold; enforcing a floor needs a small extension or a workflow. Business Central shows profit on the line and needs an extension to block. Either way, the sales desk should see the margin and someone should own the exceptions. - **Credit check.** Supply Chain Management's credit management module runs blocking rules at order entry, confirmation, picking, packing slip, or invoice, with a release workflow. It is genuinely good and under-used. The [credit and collections](https://www.solvingdynamics365.com/guides/credit-and-collections-management-in-f-and-o) guide covers it. BC has credit limits with a warning or a block, and the [customer credit limits](https://www.solvingdynamics365.com/guides/customer-credit-limits-and-blocking-in-bc) guide covers the options. ## Confirmation, EDI, and self-service Large customers send orders by EDI and expect acknowledgements, ASNs, and invoices back the same way. Neither product ships an EDI translator; the pattern is an EDI ISV or a managed EDI service mapped to the sales order and packing slip entities, and the [EDI guide](https://www.solvingdynamics365.com/guides/edi-with-business-central) covers the BC side. The order confirmation, once posted, is the commitment the customer holds you to, so the price and delivery date on it must be final — confirm after credit check and ATP, not before. For smaller customers, **customer self-service** in Supply Chain Management or a Power Pages portal over BC gives order entry, order status, and invoice copies without a phone call. The [customer self-service](https://www.solvingdynamics365.com/guides/customer-self-service-in-f-and-o) guide describes the first-party option. It is basic; a distributor whose customers expect a B2B web shop with rich search and personalised catalogues is looking at Commerce's B2B storefront or a partner e-commerce platform. ## Fulfilment through invoice From confirmed order to invoice, the flow is standard: release to warehouse, pick, pack, ship with packing slip or shipment, invoice. The distribution-specific decisions: - **Invoice timing.** Per shipment, daily per customer, or on a summary schedule. Supply Chain Management's summary update parameters and BC's combine-shipments both handle consolidated invoicing; choose per customer group and stop arguing about it. - **Charges.** Freight, handling, and small-order surcharges as auto charges on the order rather than manual lines, so they are consistent and tax-correct. - **Direct delivery** for lines the distributor does not stock, which the [drop-ship patterns](https://www.solvingdynamics365.com/guides/dynamics-365-for-distributors-drop-ship-patterns) guide covers. ## Collections The cycle ends when cash arrives. Supply Chain Management's collections workspace, aging, collection letters, and interest handle a large ledger; BC's reminders and finance charge memos handle a smaller one. Distributors with thousands of small accounts benefit from customer payment portals and card-on-file, both partner territory. The single highest-impact habit is disputing invoices at line level in the system rather than in email, so that the dispute is visible to the collector, the salesperson, and the customer. ## Measuring it Quote-to-order conversion, order-to-ship time, invoice accuracy (credit notes as a share of invoices), and days sales outstanding. All four come out of the transaction tables in Power BI; none of them come out of the box as a distributor dashboard. Build the four measures in the first month after go-live and review them weekly; they will show where the re-keying still hides. --- # RapidStart Services in Business Central How RapidStart Services accelerates Business Central setup — configuration packages, questionnaires, worksheets. Source: https://www.solvingdynamics365.com/guides/business-central-rapidstart-services Section: Business Central / Admin & ops Published: 2026-05-01 Updated: 2026-08-25 **RapidStart Services** is the setup-acceleration toolkit in Business Central. Designed to make new-tenant configuration faster — through configuration packages, questionnaires, and worksheets — it has been the standard tool for partner implementations since the NAV days. Today, RapidStart coexists with newer tools (PowerShell-based deployment, Power Automate, custom dataflows), but remains useful for specific scenarios. **The three RapidStart components.** - **Configuration packages** — export/import of setup data and master data. - **Configuration questionnaires** — guided question-and-answer for setup decisions. - **Configuration worksheets** — workflow tracking of setup tasks. Each serves a different purpose; together they form a configurable setup methodology. ## Configuration packages A package contains: - **Tables** to be exported / imported. - **Filters** on each table (which records). - **Field selections** per table. - **Dimensions** — capture related dimension data. Example workflow: 1. Partner creates package in their master / reference company. 2. Exports as Excel or RapidStart .rapidstart file. 3. Imports into the customer's new company. 4. Reviews and adjusts. 5. Applies to populate setup tables. For typical setups (chart of accounts, payment terms, units of measure, posting groups), packages turn manual data entry into bulk import. ## Templates Microsoft ships templates for common scenarios: - Manufacturing setup. - Service company setup. - Retail setup. Partners build their own templates for industry verticals. **Questionnaires.** - A structured list of setup questions. - Customer answers; answers map to setup values. - Applied to populate setup tables. The pattern: "What's your fiscal year start?" → answer → populates Accounting Periods. In practice, questionnaires are used less often than configuration packages — most setup data is bulk imported rather than answered per field. **Configuration worksheets.** - List of configuration tasks. - Each task tracks status (Not Started, In Progress, Completed). - Assigned to specific resources (consultants, customer team). - Tracks dependencies. It's project management for setup work. Useful for keeping a structured implementation visible. ## Migration packages A specific RapidStart use case: - Export master data from old system to Excel. - Import via configuration package. - Customer's customers, vendors, items populated. This is the standard pre-go-live data migration approach for small-to-mid migrations. For large migrations, Data Management Framework (DMF) or custom ETL is preferred. **Limitations.** - **Volume** — slow for huge datasets (>100K records). - **Complex relationships** — multi-table imports with foreign keys require careful sequencing. - **Validation** — limited; bad data still imports. - **No incremental updates** — designed for initial population, not ongoing sync. For these reasons, RapidStart is best suited to: - Initial setup of configuration tables. - Small-to-mid master data migrations. - Standardising setup across multiple customer implementations. **Modern alternatives.** - **Power Automate** for ongoing data sync — better for recurring loads. - **Custom REST API import** — programmatic and scalable. - **Configuration via AL** — for partner extensions defining setup. - **Business Central installation code** (`OnInstallApp` event) for extension-specific setup. **Best practices.** - **One package per logical domain** — Finance setup, Sales setup, Inventory setup; don't have one giant package. - **Test packages on a fresh sandbox** before production import. - **Document package contents** — what's in it, where it came from, what it overrides. - **Version-control packages** alongside extensions in git. **Common pitfalls.** - **Importing wrong data.** Production-data packages imported into new tenant accidentally. - **Re-importing breaks setup.** Importing a package twice can corrupt data. - **Sequencing errors.** Importing customers before payment terms exist; FK violations. - **Manual edits after import.** Customer edits packaged data; next package import overwrites. - **No reset mechanism.** Mistakes in setup hard to undo without rebuilding the company. ## Sandbox vs production RapidStart can run in sandbox without affecting production. Always test imports in sandbox first; verify counts, spot-check records, validate workflows. ## Multi-company setup A common pattern: one configuration package applied across multiple companies for consistency. Limitations: - Company-specific data (number sequences, posting groups specifics) often needs per-company adjustment. - Master data should be the same across companies. ## Strategic positioning RapidStart Services is mature but increasingly an "implementation acceleration" tool rather than a strategic platform. New customers benefit from quick setup; ongoing data operations should use modern tools. Partners building methodologies should layer RapidStart with newer tooling — configuration packages for initial setup, Power Automate for ongoing sync, REST APIs for high-volume programmatic operations. The toolkit isn't going away; it's just one tool among many in the modern BC implementer's bag. --- # Real-time vs background workflows in Dataverse The two execution modes for Dataverse classic workflows — real-time / synchronous vs background / asynchronous — and the implications for behaviour. Source: https://www.solvingdynamics365.com/guides/real-time-vs-background-workflows Section: Customer Engagement / Dataverse platform Published: 2026-07-10 A classic Dataverse workflow runs in one of two modes — **real-time (synchronous)** or **background (asynchronous)**. The same workflow definition behaves quite differently in each mode; the choice matters for transaction semantics, performance, and operational behaviour. **Real-time workflows.** A **real-time workflow** runs **synchronously** as part of the same Dataverse transaction that triggered it: - The user (or API call) initiates an operation (Create, Update, Delete, etc.). - Dataverse runs the operation. - Real-time workflows registered to fire on that event execute *inside* the transaction. - Any errors in the workflow can roll back the entire transaction. - The user / API caller waits for the workflow to complete before getting the response. **Implications:** - **Transactional integrity** — workflow logic that fails rolls back the originating operation. Use case: a workflow that validates customer credit before allowing an opportunity to advance can refuse the operation by raising an error. - **Synchronous execution** — the user pays for the workflow time. Slow workflows make the UI feel slow. - **Latency contribution** — every real-time workflow adds latency to its trigger event. - **Error visibility** — workflow errors surface immediately to the user. - **Cannot use wait conditions** — synchronous execution can't pause indefinitely. **Background workflows.** A **background workflow** runs **asynchronously** after the originating operation: - The user initiates the operation; Dataverse processes it. - Background workflows queue for later execution. - A separate execution thread picks them up and runs them. - Workflow errors are logged to the workflow history but don't affect the original operation. **Implications:** - **No transaction rollback** — the originating operation already committed; the workflow can't undo it. - **No user-visible latency** — the originating operation completes immediately. - **Eventual consistency** — there's a delay between the originating operation and the workflow's effects. - **Wait conditions supported** — workflows can pause for hours or days waiting for conditions. - **Failure handling** — failed workflows can be retried automatically or surfaced in the workflow log for investigation. - **Higher throughput** — many background workflows process in parallel. **Choosing.** Use **real-time** when: - The workflow is fast (milliseconds). - Errors in the workflow should roll back the originating operation. - Synchronous data integrity is essential. Use **background** when: - The workflow takes more than a fraction of a second. - Wait conditions, delays, or polling are involved. - The workflow makes external calls (API, integration). - The workflow is part of an asynchronous business process. - Errors should be recoverable but not block the original operation. **Real-time workflow caveats.** - **Avoid external API calls** — adds unpredictable latency to user operations. - **Avoid heavy logic** — substantial computation slows the user experience. - **Be careful with side effects** — modifications cascade through other triggers and other workflows. - **Test under load** — real-time workflows that work at low volume may bottleneck at scale. **Background workflow caveats.** - **Queue backlog** — heavy background workflow load can produce queue delays. A workflow that "should fire immediately" might fire minutes later if the queue is full. - **No automatic compensation** — if a background workflow needs to roll back its effects, you must write compensation logic explicitly. - **Wait state cleanup** — workflows with wait conditions sitting indefinitely consume resources. Clean up abandoned waits. ## The Power Automate parallel The same dichotomy applies to Power Automate flows: - **Instant flows** triggered synchronously in a UI context — equivalent to real-time. - **Automated flows** triggered on Dataverse events — typically asynchronous, equivalent to background. Modern Dynamics 365 implementations use Power Automate for most asynchronous orchestration; classic background workflows survive for legacy logic; real-time classic workflows survive where in-transaction semantics matter. **Monitoring.** - **Real-time** — failures surface to users immediately. Application Insights captures the trigger context. - **Background** — workflow history table records every execution with status. Long-running queues need active monitoring. **Common pitfalls.** - **Wrong mode chosen** — real-time workflow doing heavy work slows the UI; background workflow doing critical validation lets bad data slip through. - **External calls in real-time mode** — API timeouts make the UI freeze. - **No queue monitoring for background workflows** — workflows pile up unnoticed. - **Wait conditions abandoned** — stuck waits consume resources indefinitely. ## Operational reality For new logic, default to Power Automate (typically asynchronous). For existing classic workflows, audit which should be real-time vs background based on what the logic actually requires. Mode mismatches are one of the most common workflow performance and behaviour issues. ### Frequently asked questions **What is the difference between a real-time and a background workflow?** A real-time workflow runs synchronously inside the triggering transaction — it can roll the operation back and the user waits for it. A background workflow queues and runs afterwards; the original operation has already committed and failures are logged rather than blocking. **Can a real-time workflow use wait conditions?** No. Synchronous execution cannot pause; wait conditions, delays, and polling require background workflows, which can wait hours or days. **Should new logic be a classic workflow at all?** Usually not. Default to Power Automate for asynchronous orchestration. Real-time classic workflows survive where in-transaction validation matters; background workflows survive as legacy logic. **Why are my background workflows firing late?** Queue backlog. Heavy background workflow volume delays execution by minutes, and abandoned wait states consume resources — monitor the queue and clean up stuck waits. --- # Real-time vs outbound journeys The two journey models in Customer Insights – Journeys — when to use each, key differences, and the Microsoft direction of travel. Source: https://www.solvingdynamics365.com/guides/real-time-vs-outbound-journeys Section: Foundations Published: 2026-05-01 Customer Insights – Journeys (the successor to Dynamics 365 Marketing) ships two distinct journey models — **real-time journeys** and **outbound journeys**. They look similar in the designer but operate on very different mechanisms. Microsoft is moving customers toward real-time as the default; understanding why matters for both new builds and existing-tenant migrations. ## Outbound journeys The original model, inherited from the older Dynamics 365 Marketing product. Built around: - **Segments** — saved queries that produce static lists of contacts at journey-start time. - **Static membership** — once the journey starts, the contact list is largely fixed; mid-journey additions are limited. - **Scheduled execution** — the journey runs on a calendar, sending email at planned times. - **Email-centric** — historically email-heavy with limited support for other channels. - **Less personalisation** — limited mid-flight branching on real-time signals. Outbound is the right pattern for traditional campaigns: "send this email to everyone in segment X tomorrow at 9am, follow up with a second email three days later if they didn't open the first". ## Real-time journeys The modern model, built natively for the new Customer Insights – Journeys product. Built around: - **Triggers** — events that fire the journey for one specific person at the exact moment the event happens. Triggers come from Dataverse changes, web form submissions, API calls, page visits, custom events. - **Dynamic membership** — every event evaluates eligibility; the journey activates per individual the moment their data matches. - **Real-time execution** — milliseconds-to-seconds between trigger and action. - **Multi-channel** — email, SMS, push notifications, in-product messages, Teams cards, custom channels. - **Richer branching** — wait for behaviour signals (opened the email? clicked? visited the page?) and adapt the next step. Real-time is the right pattern for behaviour-driven engagement: "when a customer downloads a whitepaper, wait 24 hours, send a follow-up email, wait for their click, if they clicked the demo link, send a sales-handoff email; if they didn't, send a different nurture email". **The differences in practice.** | Aspect | Outbound | Real-time | |---|---|---| | Trigger | Segment + schedule | Event | | Membership | Mostly static | Fully dynamic | | Latency | Seconds-to-hours | Near-instant | | Channels | Email-led | Multi-channel native | | Mid-journey branching | Limited | Rich | | Volume | Large batches | Distributed bursts | | Compliance | Legacy | Modern (consent-by-design) | ## Microsoft direction Microsoft is investing in real-time as the strategic platform. Outbound is in maintenance mode — supported, but not the focus of new feature work. Microsoft has announced timelines for outbound deprecation; new customers should build real-time-first. ## Migration For existing customers with outbound journeys, Microsoft provides tools to migrate journeys to the real-time model. Many require rebuilding (the underlying mechanics differ enough that automatic conversion has limits). Plan migration as a small project, not a flip-switch. ## When outbound is still right Some scenarios remain outbound-friendly: bulk monthly newsletters with no behaviour-driven follow-up, simple announcement campaigns, lift-and-shift legacy campaigns awaiting migration. But for any *new* behaviour-driven engagement, build real-time. ## The hybrid period Mature tenants run both side-by-side during the migration window — real-time for new builds, outbound for legacy campaigns yet to migrate. Document which lives where and migrate the highest-value journeys first. ## Operational reality Real-time journeys demand cleaner data and better event design. The reward is dramatically more relevant customer experiences; the investment is real but bounded. ### Frequently asked questions **What is the difference between real-time and outbound journeys?** Outbound journeys start a mostly static segment on a schedule and are email-led. Real-time journeys start per person on an event — a form fill, a Dataverse change, an API call — with dynamic membership, near-instant execution, multi-channel sends, and rich behaviour-based branching. **Is outbound marketing being retired?** Yes. Microsoft has put outbound in maintenance mode, announced deprecation timelines, and provisions new environments as real-time only. New journeys should be built real-time-first. **Can outbound journeys be migrated automatically?** Partly. Microsoft provides migration tooling, but the mechanics differ enough that many journeys need rebuilding. Treat it as a small project and migrate the highest-value journeys first. **When is outbound still acceptable?** For legacy bulk newsletters and simple announcements awaiting migration during a hybrid period. Any new behaviour-driven engagement belongs in real-time. --- # Reason codes in Business Central How Business Central uses reason codes to classify transactions — returns, inventory adjustments, credit memos — and the reporting they enable. Source: https://www.solvingdynamics365.com/guides/reason-codes-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 **Reason codes** in Business Central are short tags attached to transactions to explain *why* they happened. They look unimportant in setup; they become the foundation of meaningful operational reporting when used consistently. ## Where reason codes appear Most transactional documents and journals carry a *Reason Code* field: - **Sales credit memos** — why is this credit being issued? (Damaged goods, wrong item shipped, pricing error, customer complaint, return for refund.) - **Sales returns** — why is the customer returning? (Wrong item, defective, no longer needed, ordered too many.) - **Purchase credit memos** — why are we sending this back to the vendor? (Damaged in transit, wrong item received, quality issue.) - **Purchase returns** — same reasons mirrored on the inbound side. - **Inventory adjustments** — why is stock being adjusted? (Cycle count variance, damage, found, theft, expired, sample.) - **G/L journal entries** — categorisation of manual journals. - **Item ledger entries** — explanation for movements outside the normal posting flow. ## The reason code table Setup is minimal: - **Code** — a short identifier (RET-DEFECT, RET-WRONG, COUNT-VAR, etc.). - **Description** — human-readable label. Codes can be created freely and updated; deleting a code used historically requires care. ## Default values Documents can default a reason code from a customer template, vendor template, or location, so the most common reason auto-fills. ## Why they matter — reporting Reason codes are the analytical axis for *why* questions: - **Return rate by reason** — what proportion of returns are defective vs wrong-item vs customer error? Drives supplier scorecards and quality programs. - **Inventory variance analysis** — what's the breakdown of variance reasons? Damage vs theft vs counting error vs spoilage. - **Customer complaint categorisation** — credit memo reason codes feed customer-service quality metrics. - **Operational improvement** — patterns in reason codes reveal which processes need fixing. ## Reporting through dimensions Reason codes are *not* dimensions — they live on a separate field on each transaction. Standard BC reports filter by reason code; Power BI dashboards group and chart by it. ## Coding discipline This is where most companies fail. Reason codes only work if they're: - **Used consistently** — every credit memo gets a reason code, not just some. - **Coded specifically** — "Other" as 50% of all reasons reveals nothing. - **Limited in number** — 8–15 reason codes per area, not 50. Too many and users pick the first option to escape. - **Reviewed annually** — codes that aren't used should be retired; new operational categories should be added. ## Mandatory configuration For documents where reason coding is critical (e.g. sales credit memos), make the field **mandatory** through workflow rules or page customisation. Users cannot post the document without selecting a reason. Annoying for users in the short term; invaluable for the data over months. ## Cross-system analysis When reason codes are consistently captured, the Power BI dashboards built on top illuminate operational dynamics the team didn't know were there: a spike in "damaged in transit" returns linked to a specific carrier, a seasonal pattern in "customer ordered too many" suggesting demand-planning improvements, a vendor whose "defective" rate is 3× the average. ## Limits Reason codes are flat — a single value per transaction. For multi-dimensional categorisation (reason + sub-reason + root cause), customers add custom fields or use a dedicated quality module. ## Operational reality Reason codes are unglamorous, painfully simple, and remarkably powerful. Spend 30 minutes designing a good set; train the team; report on it monthly. --- # Recurring journals in Business Central How to use recurring journals in Business Central for periodic postings — fixed amounts, variable amounts, allocations, and expiration dates. Source: https://www.solvingdynamics365.com/guides/recurring-journals-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 **Recurring journals** in Business Central automate the periodic postings that finance teams would otherwise re-key every month: rent, lease payments, scheduled accruals, depreciation outside the FA module, payroll provisions, intercompany cost transfers, and any other regular non-document journal. ## The recurring journal It looks like a regular general journal but with extra columns that control repetition. Each line carries: - **Recurring Method** — how the amount is calculated: - **Fixed** — same amount each period. - **Variable** — amount manually entered each period; otherwise zero. - **Balance** — reverses to zero the GL account's balance each period (used for clearing accounts). - **Reversing Fixed / Variable / Balance** — same as above plus an automatic reversing entry the following day (for accruals that reverse next period). - **Recurring Frequency** — a date formula expressing how often the line should re-post: `1M` (monthly), `1Q` (quarterly), `1Y` (annually), `7D` (weekly), or compound formulas. - **Posting Date Formula** — the formula that computes the next posting date when the journal is run. - **Expiration Date** — when the line stops re-posting (blank for indefinite). ## How it works When the user posts a recurring journal, Business Central: 1. Posts the lines using the dates and amounts. 2. Advances the **Posting Date** of each line by the **Recurring Frequency**. 3. Resets the **Amount** to zero on Variable lines (forcing manual entry next period) or keeps the Fixed amount. 4. Skips lines whose expiration date has passed. The same journal is then ready for next period's run — no manual rebuild. ## Allocations Recurring journal lines support **allocations** — splitting a single posting across multiple destinations by percentage. Common use: an IT cost recorded centrally, allocated 40% to Sales, 30% to Operations, 20% to Finance, 10% to Other. The allocation rule is configured once, executed on every run. ## Dimension defaults Each recurring line carries default dimensions, so postings tag the right cost centre, project, or other dimension without manual entry every period. ## Reversing entries The reversing recurring methods are the classic accrual pattern: post an accrual on month-end, automatically reverse on the first of the next month, accrue again with new amounts. Standard finance hygiene without manual reversal effort. ## Multiple batches Recurring journals live in batches like regular journals, so you can organise by frequency, owner, or purpose: a "Month-End" batch with all monthly accruals, a "Quarterly" batch, a "Weekly Payroll Provision" batch. ## Approval workflow Like other journals, recurring journals can be routed through approval workflow before posting. **Operating discipline.** - **Document the purpose** of each recurring line in the *Description* and the *External Document No.* fields — controllers six months in should understand why each line exists. - **Review quarterly** — recurring entries become invisible noise if nobody reviews them. Expired contracts, changed allocations, stale amounts all degrade the GL. - **Use expiration dates** for time-bounded postings (a 24-month lease, for example). - **Standardise the batches** — month-end accruals in one batch, fixed monthly costs in another, allocations in a third. ## Limits Very complex calculation logic (e.g. allocations based on a formula across actuals) belongs in custom code or a Power Automate flow that builds the journal from a calculation — recurring journals handle fixed-rule patterns well, not data-driven complex logic. --- # Relationship Analytics in Dynamics 365 Sales How Relationship Analytics scores account and contact health — input signals, the relationship health score, KPIs surfaced. Source: https://www.solvingdynamics365.com/guides/relationship-analytics-in-dynamics-365-sales Section: Customer Engagement / Sales Published: 2026-05-01 A salesperson with 80 active accounts can't deeply intuit each relationship's health. **Relationship Analytics** in Dynamics 365 Sales (Premium SKU) aggregates engagement signals into a quantified health score per contact and account, with trends and drill-down. Used well, it surfaces risks and opportunities reps would otherwise miss; used badly, it becomes a gamed metric. ## The relationship health score A single number per account or contact: - **Healthy** — green; relationship is active and positive. - **Fair** — yellow; some concerns. - **Poor** — red; relationship needs attention. The score is computed from multiple inputs: - **Activity frequency** — how often emails, calls, meetings happen with the customer. - **Sentiment** — derived from email and conversation analysis. - **Engagement breadth** — how many people on the customer side are engaged. - **Pipeline activity** — open opportunities, momentum. - **Communication recency** — when was the last meaningful touch. The model is opaque (an ML black box from the user's perspective) but the contributing signals are transparent. ## Trends A single point-in-time score is information; a trend is insight. Relationship Analytics tracks score over weeks/months. A score declining from healthy to fair to poor is a leading indicator of risk — usually 1–2 months ahead of pipeline impact. **The conversation it enables.** - **Account review:** "These three accounts are declining; what's happening?" - **Quarterly planning:** "Half my book is yellow; I need a coverage plan." - **Manager 1:1:** "Your top 5 accounts are healthy, your tail 20 are red — should we restructure your time?" **Signals in detail.** - **Emails** — counted; sentiment scored; reply velocity tracked. Captured via Outlook integration or server-side sync. - **Meetings** — frequency from calendar; participants counted. - **Phone calls** — if a dialler is integrated, calls logged automatically. - **Customer responses** — explicit responses to outreach factored in. Without the capture layer, signals are blind. The richer the activity capture, the more accurate the analytics. **Engagement KPIs surfaced.** - **Last meaningful interaction** — date of last in-person meeting or substantive email exchange. - **Number of decision-makers engaged** — count of contacts at the account. - **Stakeholder coverage** — are all key roles touched? - **Response time** — how quickly does the customer respond to us? These KPIs are visible per account; reps drill into them to understand the score. ## Combining with predictive opportunity scoring Relationship health and opportunity score are complementary: - **High health + high opportunity score** — sweet spot; double down. - **High health + low score** — relationship is strong, deal is stalling; the deal might be wrong but the customer is worth retaining. - **Low health + high score** — vulnerable; risk of competitor displacement. - **Low health + low score** — disengagement; consider account triage. This 2x2 framing is useful for territory reviews. **Setup requirements.** - **Email** — Server-side sync or Outlook integration capturing emails to/from customer addresses. - **Calendars** — calendar appointments synced to Dynamics activities. - **Account-contact linkage** — contacts mapped to the right account; emails routed to the right relationship. - **Sales Premium licence** — Relationship Analytics is Premium-only. Without these, the data is sparse and scores meaningless. **Data hygiene matters.** - **Contact role classification** — knowing who's a decision-maker vs influencer makes engagement coverage analysis meaningful. - **Account membership accuracy** — contacts wrongly linked to accounts distort scores. - **Activity capture discipline** — reps logging activities manually adds signal beyond automated capture. The analytics are only as good as the data. A rep who diligently logs calls and meetings gets a meaningful score; a rep who doesn't gets noise. **Operational adoption patterns.** - **Score visible on the account card** — reps see it in their daily flow. - **Score in the "my accounts" view** — sortable; manage by risk. - **Manager dashboards** — book health summary by rep. - **Triggers** — score drops below threshold → alert manager. The data has value when it flows into specific operational decisions. Score on a dashboard nobody reviews is wasted. **Common pitfalls.** - **Score gamed.** Reps log fake activities to inflate scores. Mitigation: use customer-side response data heavily. - **Score believed without checking signals.** Score is low — reps blame the model, ignore the signal underneath. Always drill: what's actually missing? - **Capture gaps.** No email integration; score artificially low because no signal. Fix capture before measuring. - **Threshold definitions unclear.** Healthy / Fair / Poor cutoffs not aligned with the team's reality; recalibrate per segment. - **Comparisons across segments.** Enterprise accounts have fewer activities than mid-market by nature; comparing scores cross-segment is misleading. ## Strategic positioning Relationship Analytics is a coaching and triage tool, not a replacement for rep judgment. The best use: surface the questions ("why is this dropping?") rather than dictate the answers. Combined with conversation intelligence and predictive opportunity scoring, it forms a complete account-health picture — but only for teams with the capture and adoption discipline to make it real. --- # Release management for Dynamics 365 How to manage releases for Dynamics 365 — release cycles, change advisory, version control, deployment runbook. Source: https://www.solvingdynamics365.com/guides/release-management-for-dynamics-365 Section: Implementation / Operations & support Published: 2026-05-01 A Dynamics 365 environment that goes from configuration to production needs a release management process that handles change governance, testing, deployment, and rollback. The process scales from a small team shipping weekly to an enterprise programme shipping monthly to multiple customers. The structure of the process matters less than its consistency. ## Why release management Without process: - Changes happen ad-hoc; nobody knows what's in production. - Defects re-emerge because fixes weren't promoted to upstream environments. - Deployments fail because dependencies weren't included. - Audits fail because change isn't tracked. A release management process imposes structure: what gets released, when, with what review, by whom, with what fallback. **Release types.** - **Major release** — significant new functionality, breaking changes, training required. - **Minor release** — smaller features, configuration changes. - **Patch / hotfix** — urgent bug fixes; smaller scope. - **Microsoft platform updates** — handled by Microsoft per the release wave cadence. Each type has different governance overhead — major releases get full review, hotfixes get expedited path. **Release cadence patterns.** - **Weekly** — small-scope team; high agility; production-ready every Friday. - **Bi-weekly** — common for mid-size teams; matches sprint cadence. - **Monthly** — common for enterprise; allows full regression testing. - **Quarterly** — heavy enterprise; aligns with budget and planning cycles. The cadence should be a deliberate choice based on team capability, business tolerance, and risk profile. Faster isn't better universally — small teams can ship faster; large teams benefit from slower, batched cadence. ## Microsoft's release waves Microsoft ships two annual waves: - **Wave 1** — April / May. - **Wave 2** — October / November. Plus continuous minor updates monthly. Customers can defer wave updates by one cycle but not indefinitely. Coordinate customer releases with Microsoft's calendar — avoid heavy customer-side release work during Microsoft wave application. **Release planning.** - **Roadmap** — items in scope for upcoming releases (next 1–3 releases visible). - **Backlog** — prioritised items not yet scheduled. - **Release content** — final list for a specific release, frozen N days before deployment. Content freeze is a discipline — once frozen, no new items added without exception process. Without freeze, releases bloat and slip. **Change advisory.** - **Change Advisory Board (CAB)** — stakeholders reviewing proposed changes. - **Change ticket** — every change documented with risk assessment, testing plan, rollback plan. - **Approval gates** — major changes need formal approval before promotion. For regulated industries, formal CAB is mandatory; for less regulated, lightweight equivalents work. **Version control.** - **Solutions** stored in source control. - **Configuration data** versioned alongside. - **Documentation** in same repo. - **Branching strategy** — feature branches; main always deployable. Every release tagged in source control; reconstructible at any time. **Testing strategy.** - **Unit tests** — for plug-ins, low-code plug-ins, Power Fx. - **Integration tests** — flows, end-to-end scenarios. - **UAT** — business user acceptance. - **Regression tests** — automated suite re-run for every release. - **Performance tests** — for load-sensitive changes. - **Security tests** — for access-control changes. Test depth scales with risk; hotfixes get minimal testing, major releases get comprehensive. ## Deployment runbook Per release, a detailed runbook: - Pre-deployment checks (downstream environment state, backup taken). - Deployment steps in order. - Validation per step. - Rollback procedures. - Communication plan. - Post-deployment validation. The runbook is rehearsed in pre-production; deployment to production should feel anticlimactic. **Deployment windows.** - **Off-hours** — common for high-availability production (nights, weekends). - **Business hours** — for low-impact changes with rollback safety. Communicate windows in advance; expect users to plan around. ## Rollback strategy Every release has documented rollback: - Restore from pre-deployment backup. - Re-install previous managed solution version. - Re-apply previous configuration. Untested rollback is worse than no rollback — rehearse in pre-production. **Communication.** - **Pre-release** — what's coming, when, who's affected. - **During deployment** — status updates. - **Post-deployment** — success / issues; quick acknowledgment of any problems. Communication transparency builds trust; silence during incidents breeds anxiety. **Post-deployment monitoring.** - Health checks immediately after deployment. - Error rate monitoring vs baseline. - User-reported issues. - Performance metrics. The window after deployment is high-risk; monitoring catches issues that automated tests missed. **Common pitfalls.** - **No release calendar.** Random deployments; teams blindsided. - **Hotfixes accumulate.** Each emergency change bypasses process; total drift between environments grows. - **No rollback rehearsal.** First time rolling back is during a real incident. - **Heavy process for small changes.** CAB for typo fix; productivity dies. - **Light process for big changes.** Major release pushed without testing; production breaks. - **Communication absent.** Users frustrated by surprise downtime. - **Documentation rot.** Release notes promised but never written; institutional memory in heads only. **Operational rhythm.** - **Daily** — backlog grooming, in-progress work. - **Weekly** — release planning, CAB if relevant. - **Per release** — content freeze → testing → deployment → post-deployment review. - **Quarterly** — process retrospective; improve based on incidents and friction. ## Strategic positioning Release management is one of the highest-leverage process investments in any production Dynamics 365 deployment. Good release management makes change cheap and safe; bad release management makes change expensive and risky. The discipline isn't glamorous — checklists, runbooks, CAB meetings — but the alternative (constant fire-fighting, lost trust, failed audits) is much worse. Build it early; refine continuously; measure with cycle time, failure rate, and rollback frequency. --- # Reminders and finance charges in Business Central How Business Central handles customer payment reminders and finance charge memos — terms, levels, escalation, and the integration with collections. Source: https://www.solvingdynamics365.com/guides/reminders-and-finance-charges-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 For any business that sells on credit terms, some customers pay late. Chasing them — sending reminders, escalating to formal demands, charging interest on overdue balances — is unglamorous but essential. Business Central's **reminders** and **finance charges** capabilities give finance teams the structured process to do it efficiently. ## Reminder terms A **reminder term** defines an escalation ladder. Each term has multiple **reminder levels**, each with: - **Grace period** — days after due date before this reminder applies. - **Due date calculation** — when the reminder itself is due (typically a short window). - **Calculate interest** — yes / no for this level. - **Additional fee** — flat fee added to the reminder (administrative charge). - **Suggest line description / text** — boilerplate text for the reminder document. A typical setup might have three levels: - **Level 1** — friendly reminder, 7 days past due, no interest, small fee. - **Level 2** — formal reminder, 21 days past due, interest charged, larger fee. - **Level 3** — pre-legal notice, 60 days past due, interest accrued, escalation flagged. Different reminder terms can apply to different customer segments — *Standard*, *Strategic*, *Government* — each with its own escalation logic. Customers carry a default reminder term on their card. ## Generating reminders The **Create Reminders** routine scans open customer ledger entries past their due date, identifies entries eligible for each reminder level, and proposes a reminder document per customer. The user reviews proposals, edits text or excludes entries on a case-by-case basis, and posts. A posted reminder: - Records the reminder action on the customer ledger. - Increments the reminder level for the next time. - Optionally posts a *fee* line that adds to the customer's outstanding balance. - Generates a printable / emailable reminder document — typically a Word-templated layout with the overdue invoices listed. ## Finance charge memos Beyond reminders, **finance charge memos** specifically post **interest** on overdue balances: - A **finance charge term** defines the interest rate, calculation method (interest by day, by period), grace period. - The **Create Finance Charge Memos** routine identifies eligible overdue entries and proposes memos with calculated interest amounts. - Posted memos add interest entries to the customer ledger, payable by the customer. ## Integration with collections Beyond the basic mechanics, mature collections processes: - **Hold further sales** — block new sales orders to customers at advanced reminder levels. - **Manager escalation** — Power Automate flows notify the account manager and CFO when customers reach Level 3. - **Collections workflow** — assign overdue customers to a collections specialist for active follow-up. - **Payment promise tracking** — record customer commitments to pay; reminder routines respect the promised date. Specialist collections ISVs (Cashbook, Continia Collections Management) add the deeper workflow — payment-promise tracking, dunning escalation matrices, call logging, dispute management. ## Document layouts Reminder and finance charge memo layouts are Word templates; the company brand, tone, and detail level are configurable per layout. Multi-language reminders to international customers honour the customer's language code. ## Compliance Some jurisdictions regulate maximum interest rates, mandatory grace periods, and reminder content. Check local regulations; the system supports configuration, but compliance is the customer's responsibility. ## Operational reality Reminders work when run consistently — weekly or biweekly, not "when someone remembers". Schedule the routine; review proposals; send. The system handles the mechanics; the operational discipline produces the cash flow. --- # Reporting tools in Dynamics 365 Finance The reporting stack in Dynamics 365 Finance — Financial Reporting, electronic reporting, Power BI, and where each one fits. Source: https://www.solvingdynamics365.com/guides/dynamics-365-finance-reporting-tools Section: Finance & SCM / Finance Published: 2026-05-01 Dynamics 365 Finance ships with several reporting tools that overlap on the edges. Picking the right tool for each job is the difference between a clean reporting stack and a sprawl of one-off reports nobody trusts. ## Financial Reporting A row-and-column reporting engine descended from Management Reporter (and FRx before it), built specifically for financial statements: P&L, balance sheet, cash flow, statutory disclosures. Reports are designed in a web UI inside F&O, executed against the GL with full dimension support, and rendered on screen or exported to PDF/Excel. The right tool for management accounts and statutory reporting, period. ## Electronic Reporting (GER) Microsoft's **Globalization Studio / Electronic Reporting** is a configurable, no-code framework for generating structured outputs in fixed formats — XML, JSON, fixed-width — and consuming the same in. It's used for **statutory e-invoicing**, country tax filings, SAF-T exports, payment file generation (SEPA, BACS, ACH), and bank statement imports. ER configurations are sourced from a global repository so customers and partners can share country implementations. ## Power BI Self-service interactive analytics. F&O ships pre-built **Power BI apps** for finance, supply chain, sales, and retail. Customers extend or replace them with their own datasets. Power BI is the right tool for dashboards, exploratory analytics, and any visualisation that goes beyond tabular financial reports. ## Microsoft Fabric and Synapse Link **Synapse Link for Dataverse** and **Microsoft Fabric** stream F&O data into a lakehouse where it can be combined with non-Microsoft sources, transformed with notebooks, and consumed by Power BI or other tools. The right pattern when reporting needs F&O data joined with non-Dynamics data, or when transformations exceed what Power BI's model can do directly. ## SSRS reports The legacy **SQL Server Reporting Services** reports inside F&O (invoices, packing slips, statements) still exist. They're typically used for transactional documents printed and emailed at posting time. Customisation of standard SSRS reports is done in Visual Studio. ## Where it stops Workforce analytics, complex consolidation reporting, and demand sensing usually combine **Power BI + Fabric + an analytical model** rather than relying on F&O's built-in tools alone. Treat F&O's built-ins as the source of truth and Fabric/Power BI as the analytical surface. ## Practical guidance Statutory financials → Financial Reporting. Country filings → Electronic Reporting. Operational dashboards → Power BI. Customer documents → SSRS. Cross-system analytics → Fabric. --- # Requirements gathering for Dynamics 365 implementations How to gather requirements effectively for a Dynamics 365 implementation — workshop techniques, business process analysis, prioritisation. Source: https://www.solvingdynamics365.com/guides/requirements-gathering-for-dynamics-365 Section: Implementation / Project execution Published: 2026-05-01 Requirements gathering is the foundation of every Dynamics 365 implementation. Done well, it produces clear functional designs and confident scoping; done badly, it leads to discovery surprises, rework, and budget overruns. The methodology matters less than the discipline applied. **The output goals.** - Clear understanding of as-is processes. - Defined to-be processes. - Specific functional requirements. - Non-functional requirements (performance, security, etc.). - Prioritisation (must-have, should-have, nice-to-have). - Documented assumptions and risks. - Stakeholder consensus. The output feeds FDDs, TDDs, and project planning. ## Workshop-based approach Most common: - Facilitated workshops per business area. - Stakeholders engaged in person or virtually. - Documented in real-time. - Iterative validation. The workshop format produces alignment alongside requirements. **Workshop preparation.** - Pre-read materials sent. - Specific agenda. - Right participants invited. - Workshop length appropriate (half-day to multi-day). - Logistics organised. Unprepared workshops waste senior time; preparation matters. **Discovery techniques.** - **Process mapping** — walk through current state step by step. - **Pain point analysis** — what's broken in current process? - **Aspirational visioning** — what would the future look like? - **Quick-win identification** — what's easy and high-impact? - **Edge case discussion** — what unusual scenarios occur? Combine techniques to draw out comprehensive requirements. **As-is vs to-be.** - **As-is** — current state documentation. - **To-be** — desired future state. The gap analysis between them is the implementation scope. ## Why document as-is Tempting to skip: - Saves time. - Future-focused. But: - Reveals dependencies on legacy. - Surfaces process knowledge held by individuals. - Provides context for to-be design. Always document as-is, even briefly. **To-be process design.** - Reflect best practices. - Match Dynamics 365 standard processes where appropriate. - Customise only where business genuinely demands. - Validate with stakeholders. The "fit-gap" analysis identifies where standard fits and where it doesn't. **Functional vs non-functional requirements.** - **Functional** — what the system does (e.g., "create sales order"). - **Non-functional** — quality attributes (performance, security, scalability, usability). Both essential; non-functional often overlooked until late. **Common non-functional requirements.** - **Performance** — response time targets. - **Availability** — uptime requirements. - **Scalability** — user count, data volume. - **Security** — encryption, access control, audit. - **Compliance** — regulatory requirements. - **Accessibility** — WCAG, Section 508. - **Localisation** — multi-language, multi-currency. These shape architecture and implementation. **Prioritisation methods.** - **MoSCoW** — Must, Should, Could, Won't. - **High / Medium / Low.** - **Value vs effort matrix.** - **Cost / benefit analysis.** Force ranking — be explicit about trade-offs. **Stakeholder management.** - **Executive sponsors** — strategic direction. - **Business owners** — process accountability. - **Subject matter experts** — operational detail. - **Power users** — daily use perspective. - **IT team** — technical integration. Engage appropriate level for each requirement type. **Documentation formats.** - **Process narrative** — text describing flow. - **Flow diagrams** — visual. - **User stories** — "As a [role], I want [action], so that [benefit]." - **Use cases** — formal scenarios. - **Requirements catalogue** — structured list. Different audiences prefer different formats; multiple representations may help. **Tools.** - **Microsoft Word / Excel** — common. - **Microsoft Loop / OneNote** — collaborative. - **Confluence** — for development-led teams. - **DevOps Boards** — user stories tied to development. - **Specialised requirements tools** — IBM DOORS, others. Tool choice less important than discipline. **Validation cycles.** - **Draft** requirements. - **Review** with stakeholders. - **Revise** based on feedback. - **Validate** with final readers. - **Sign-off** at design completion. Iteration is healthy; first-draft signed off rarely matches reality. **Common pitfalls.** - **Wishlist syndrome.** Every nice-to-have included; scope explodes. - **Anchoring on current.** "Same as today but in Dynamics" — misses opportunity. - **Missing edge cases.** Happy path documented; exceptions emerge in test. - **No prioritisation.** Everything's a "must"; budget impossible. - **Stakeholder absence.** Key person missed; requirements gap. - **Verbal-only agreement.** Documented vaguely; interpretation differs. **Discovery anti-patterns.** - **Boil-the-ocean discovery.** Months of analysis paralysis. - **Insufficient discovery.** Rush to build; discoveries come later as change orders. - **Wrong abstraction level.** Either too detailed too early or too vague throughout. ## Time-boxing Discovery shouldn't be indefinite: - Plan phase duration. - Acknowledge some unknowns won't resolve until later. - Document what's known and assumed. - Move forward; refine during build. ## Iterative discovery For agile implementations: - High-level requirements upfront. - Detailed per-sprint discovery. - Backlog grooming. Suitable for some projects, not all; depends on scope clarity. ## Standard vs custom Important judgement: - **Adopt standard** wherever possible — easier maintenance. - **Customise** only where business value clearly justifies. The "we always do it this way" reflex often hides opportunities to adopt better-fitting standards. ## Strategic positioning Requirements gathering is investment in clarity. Spent well, it produces confident designs; spent poorly, it produces brittle specifications that don't survive contact with build. Mature implementations balance enough discovery to design confidently with enough humility to refine during build. For project leaders: - Plan discovery time deliberately. - Engage right stakeholders. - Document candidly, not aspirationally. - Prioritise ruthlessly. - Iterate; don't expect first pass to be final. The discipline is constant attention to clarity and stakeholder engagement; the payback is build phases that proceed smoothly without constant re-questioning of requirements. ## Where to go next Requirements feed [fit-gap analysis](https://www.solvingdynamics365.com/guides/fit-gap-analysis-for-dynamics-365), sit on [business process maps](https://www.solvingdynamics365.com/guides/business-process-mapping-for-dynamics-365), and become [functional design documents](https://www.solvingdynamics365.com/guides/functional-design-documents-for-dynamics-365). The gaps raise the [build vs buy](https://www.solvingdynamics365.com/guides/build-vs-buy-in-the-dynamics-365-ecosystem) question, and the same requirements return as scenarios in [user acceptance testing](https://www.solvingdynamics365.com/guides/user-acceptance-testing-for-dynamics-365). --- # Resource management in Dynamics 365 Project Operations How Project Operations matches people to projects — resource roles, skills, fulfillment requests, schedule board, and the resource manager workflow. Source: https://www.solvingdynamics365.com/guides/project-operations-resource-management Section: Customer Engagement / Project Operations Published: 2026-05-01 Resource management — getting the right people on the right projects at the right time — is the operational heartbeat of a services firm. **Project Operations** provides the data model, the matching engine, and the workflows to make resource assignment systematic rather than ad-hoc spreadsheet-driven. The capability is there; the discipline to use it well is the differentiator. **Resource model.** - **Bookable Resource** — anyone who can be scheduled. Internal employees, contractors, sub-contractors. - **Resource Role** — what kind of resource (Senior Consultant, Project Manager, Solution Architect). - **Resource Skill** — specific competencies (.NET, Power Platform, SAP integration). - **Skill Proficiency** — level (Beginner, Intermediate, Expert). - **Certifications** — formal credentials. - **Availability** — calendar of bookings, time-off, capacity. A resource has one or more roles, multiple skills with proficiency levels, and a calendar. The matching engine uses all of this. ## Project resource requirements When a project manager builds a team: - Specify required roles per task or phase. - Specify required skills (mandatory and preferred). - Specify time period and percentage allocation. Each requirement is a **resource requirement** record waiting to be filled. **Fulfillment process.** 1. **Resource Request** raised against the requirement. 2. **Resource manager** (or auto-fulfillment) reviews requests. 3. **Search for matching resources** with required skills, availability, location. 4. **Propose** specific resources; PM accepts or counters. 5. **Book** the resource on the project. The resource manager is a key role — they balance demand across projects, allocate scarce skilled people, advocate for re-allocation when priorities shift. ## Schedule board Visual resource scheduling: - Time-grid view (days, weeks). - Resources as rows, time as columns. - Bookings as blocks. - Drag-and-drop to assign or move. - Filters: skills, role, location. - Conflict warnings. For 20–50 resources, manual scheduling on the board works. For larger pools, optimisation helps. ## Resource Scheduling Optimization (RSO) ML-driven auto-scheduling: - Reads open requirements. - Considers resource availability, skills, location, cost. - Produces optimised assignments. Configurable per organisation; can be advisory or automatic. Effective for high-volume scheduling (Field Service) and growing for Project Operations. **Soft vs hard book.** - **Soft book / proposed** — resource tentatively allocated; not committed. - **Hard book / confirmed** — resource committed; counts against availability. Soft books reserve while details are negotiated; once confirmed, they convert. Soft books expire if not confirmed within a configurable window. ## Conflict and overbook System warns when: - Booking exceeds resource capacity. - Skills missing. - Time-off conflict. - Travel time tight between projects. Overbooking is sometimes intentional (resource will work overtime); explicit overbook is allowed with reason. ## Demand forecasting Beyond current bookings, **resource demand forecast**: - Roles needed in coming quarters. - Skill gaps emerging. - Hiring or contractor decisions. Generated from the pipeline (open opportunities likely to land) plus committed projects. **Resource utilisation.** - **Billable utilisation** — billable hours / capacity. The headline metric. - **Variance vs target** — over- and under-utilised. - **Trend over weeks** — patterns of overload or slack. Utilisation drives staffing and hiring decisions. **Cost vs bill rate.** - **Cost rate** — what the resource costs (loaded labour cost). - **Bill rate** — what the customer pays. - **Margin** — bill - cost. Each role has standard cost and bill rates; specific projects can override. Resource manager balances assigning the right rate-margin combination. ## Contractor management Contractors are bookable resources with: - External vendor relationship. - Different cost structure (rates per agreement). - Limited internal access (no proprietary IP). - Per-contract availability. Many services firms blend FTE and contractor resources; the model supports both natively. ## Cross-location resourcing Geographic factors: - Time zone — meetings hours overlap. - Travel cost — if on-site work needed. - Compliance — visa, tax, regulations. - Cultural — language, workflows. The matching engine considers location; the resource manager applies judgment. **Common pitfalls.** - **Skills data stale.** Resource grew but skills profile didn't update; not found by skill match. - **Soft books that never become hard.** Pipeline of proposed assignments; never confirmed; demand artificial. - **Overbooking ignored.** Warnings dismissed; resource burns out; PTO request blocked. - **No demand forecast.** Hiring decisions reactive; staffing always behind. - **Schedule board chaos.** Hundreds of resources, complex view; usability collapses; people work from spreadsheets again. ## Operational rhythm Weekly resource managers meeting — review pending requests, debate priorities, confirm assignments. Monthly review — utilisation trends, demand forecast, hiring decisions. Quarterly — re-baseline rates, refresh skills profiles. ## Strategic positioning Resource management is where competitive services firms win or lose. The firms that consistently allocate the right people to the right projects build reputations and margins. The firms that scramble produce slow project starts, mismatched skills, and burned-out resources. The system supports the discipline; the discipline must come from leadership and the resource management function. Without that, no software fixes the problem. --- # Resource Scheduling Optimization (RSO) How Microsoft's Resource Scheduling Optimization works for Dynamics 365 Field Service and Project Operations. Source: https://www.solvingdynamics365.com/guides/resource-scheduling-optimization Section: Customer Engagement Published: 2026-05-01 **Resource Scheduling Optimization (RSO)** is the AI-driven scheduling engine for Dynamics 365 Field Service and Project Operations. It takes the human-intensive task of assigning work orders to technicians (or project tasks to consultants) and runs it as an optimisation problem, producing schedules that respect skills, calendars, travel time, SLAs, and many other constraints — at a speed and quality humans can't match for fleets above a few dozen resources. ## The optimisation problem Given: - N work orders (or project assignments), each with required skills, location, duration, time window, priority, SLA. - M resources, each with skills, calendar, working location, working hours. - Travel time between locations. - Constraints — overtime allowed?, regulations on driving time?, preference for same technician returning? …find the assignment of work orders to resources, in what order, with what start times, that maximises a multi-objective goal: meet SLAs, minimise travel, maximise utilisation, respect priorities. This is an NP-hard combinatorial problem; humans solve it heuristically (and badly at scale); RSO solves it computationally. ## The optimisation engine Microsoft's RSO uses heuristic optimisation algorithms with configurable weights. The optimisation **objectives** are user-configurable: e.g. "75% meet SLA, 20% minimise travel, 5% maximise utilisation". Adjusting weights changes the schedule's character — high SLA weight pushes urgent jobs to the front even at the cost of more travel; high utilisation weight squeezes more jobs into fewer days. ## Optimisation scope Each RSO run is configured with: - **Schedule range** — the time horizon to optimise (next 7 days is common). - **Resource pool** — which resources are eligible. - **Work order pool** — which orders to schedule (typically all unscheduled + reschedulable). - **Constraints** — must-respect rules (skill match, customer preference, geographic boundary). - **Objectives and weights** — what to optimise for. ## Running RSO A run is launched manually by a dispatcher or scheduled on a recurring basis (e.g. nightly run for the next day's plan). Results are previewed in the schedule board before being committed; dispatchers can selectively accept, reject, or modify. ## Live re-optimisation Beyond scheduled runs, RSO supports **real-time optimisation** triggered by events — a new high-priority work order arrives, a technician calls in sick, traffic delays push back the morning route. RSO recomputes the affected slice and proposes adjustments. ## Constraints — the configuration depth RSO supports dozens of constraints: - Skill match (required vs preferred, proficiency level) - Customer preferences (preferred technician, blacklisted technician) - Geographic boundaries (driving distance limits, route territories) - Resource time windows (working hours, breaks, lunch, end-of-shift home location) - Multi-day jobs spanning days - Crew jobs requiring multiple technicians - Customer arrival windows (commit to 2-hour window, not just "today") - Inventory on truck (technician must have the right parts) - Travel mode (driver-bound vs flying) **Operational realities.** - RSO produces dramatically better schedules than manual at scale (50+ resources). The gain is real — first-time-fix rate, on-time arrival, technician utilisation all improve materially. - RSO requires *clean* underlying data. Wrong skills, wrong calendars, wrong locations on resources sabotage the engine. - RSO is part of the broader Field Service licence; check the SKU when planning. ## Limits Very large fleets (1,000+ resources) or unusual industry constraints sometimes need partner schedulers (ClickSoftware, IFS, ServicePower) integrated alongside or in place of RSO. ## Where to start Pilot RSO with a single team or region. Measure travel reduction and SLA meet rate. Tune objective weights against business priorities. Expand. --- # Retail channel data management in Dynamics 365 Commerce How D365 Commerce manages data flows between HQ and channels — channel databases, sync jobs, distribution schedules, and operational reliability. Source: https://www.solvingdynamics365.com/guides/retail-channel-data-management Section: Finance & SCM / Retail & commerce Published: 2026-05-01 In Dynamics 365 Commerce, **channel data management** is the discipline of keeping store, POS, and online channels synchronised with the headquarters (F&O) master data and transactional records. The architecture is distributed; each channel has its own database; data flows in defined patterns. Mastering this is essential for any Commerce deployment. **The architecture refresher.** - **HQ** — F&O instance with master data and consolidated reporting. - **Commerce Scale Unit (CSU)** — cloud (or on-premise) mediator. - **Channel database** — per-store (or per-pool); local data store. - **POS / online clients** — access channel database. Data flows: master from HQ → CSU → channel; transactions from channel → CSU → HQ. **What flows from HQ to channels.** - **Products and prices** — current catalog. - **Customers** — customer master. - **Employees** — store associates with their permissions. - **Tax rates and tax groups.** - **Channels and store configurations.** - **Promotions and discounts.** - **Loyalty programs and customer balances.** - **Currency and exchange rates.** Each data type has its own sync job. ## Distribution schedules Per-data-type schedules: - **1010 (Channel configuration)** — infrequent. - **1020 (Customer)** — every few hours. - **1040 (Discounts)** — frequent (promotions change often). - **1050 (Loyalty)** — frequent. - **1070 (Tax)** — moderate. - **1090 (Bar codes)** — infrequent. The schedule configured per job; frequencies tuned to data volatility. **What flows from channels to HQ.** - **Sales transactions** — every sale. - **Tender entries** — payment details. - **Inventory movements** — receipts, transfers. - **Customer additions** — new customers created at store. - **Audit events** — operator activities. The **P-job (1090 transaction collection)** pulls transactional data from CSU to HQ. **Pull vs push.** - **Push** — HQ initiates; sends to CSU; CSU stores; channel pulls when online. - **Pull** — channel asks CSU; CSU asks HQ. Most flows are push (HQ to channel). Transactional flow is pull-based (channel to CSU, then HQ pulls from CSU). ## Real-time service (RTS) Some operations need real-time HQ: - **Customer lookup** — current balance. - **Inventory check** — real-time stock. - **Order status** — cross-channel. RTS bypasses the channel DB for live HQ queries. Slower than channel DB but always current. **Offline mode resilience.** - Channel DB has enough data for autonomous operation. - Lost connection to CSU → channel runs from local DB. - Transactions captured locally. - Reconnection → transactions sync up. The offline pattern is critical for retail uptime. ## Job execution Sync jobs in F&O batch processing: - **Job groups** — bundle related jobs. - **Schedule** — cron-like. - **Logging** — job execution history. - **Error handling** — retry on failure. Most stores have specific job groups they participate in. ## Initial download / channel reload When a channel is first set up: - Bulk download of all required data. - Can take hours for large catalogs. - Subsequent updates incremental. For a new store, initial reload is a planned event. **Common scenarios.** - **New product added at HQ** — distribution job runs; appears in channel after few minutes. - **Promotion activated** — distribution to all stores within configured frequency. - **Price changed** — same. - **Customer makes purchase** — captured at POS; transferred via P-job to HQ. - **HQ receives the transaction** — posts customer ledger, item ledger, financial entries. **Latency considerations.** - Master data → channel: minutes to hours depending on job. - Channel → HQ: minutes via P-job. - Online → channel: real-time-ish. - Real-time queries (RTS): seconds. For end customers, "current" data within minutes is usually acceptable; not all data is real-time. **Common pitfalls.** - **Job schedule too infrequent.** Prices change but stores see old prices for hours. - **Channel DB drift.** Manual changes at channel diverge from HQ; resolution painful. - **Failed jobs unnoticed.** Sync stops; data stale; customers see wrong prices. - **P-job backlog.** Channel-to-HQ flow stalls; transactions accumulate. - **Initial load takes too long.** Storeopen delayed. - **Wrong channel configuration.** Store has wrong job groups; missing data. **Monitoring.** - **Job execution dashboard** — last run, success / failure. - **Channel database state** — heartbeat from each channel. - **Transaction backlog** — pending sync. - **RTS availability** — uptime metric. Without monitoring, sync issues surface as user-reported problems hours or days late. **Performance considerations.** - **Heavy product catalogs** stress sync — design with locale / channel filtering. - **Frequent promotion changes** drive heavy job traffic. - **Channel database size** — for large catalogs, channel DB can be large; SSD recommended. **Operational rhythm.** - **Daily** — monitor sync health. - **Weekly** — review failed jobs; fix root causes. - **Monthly** — review job schedule appropriateness. - **At store open** — verify channel data fresh. ## Strategic positioning Channel data management is the operational core of D365 Commerce. The patterns are mature; the discipline is constant. Mature retail operations have dashboards, alerts, and runbooks for sync issues. The investment in setup and monitoring pays back continuously through smooth store operations and accurate cross-channel commerce. Skip this and the operations suffer in subtle, customer-visible ways — old prices, stale promotions, missed loyalty. --- # Retail loyalty programs in Dynamics 365 Commerce — a deep dive How D365 Commerce models loyalty — schemes, tiers, points, rewards, redemption, and the integration across channels for unified loyalty experience. Source: https://www.solvingdynamics365.com/guides/retail-loyalty-program-deep-dive Section: Finance & SCM / Retail & commerce Published: 2026-05-01 Loyalty programs are central to modern retail strategy — driving repeat purchases, increasing basket size, capturing customer identity for marketing. **Dynamics 365 Commerce** has a flexible loyalty engine supporting tiered programs, multi-currency points, partner redemptions, and unified cross-channel experience. Implementing it well requires understanding both the configuration and the operational details. **Core loyalty entities.** - **Loyalty Program** — the named program (e.g., "VIP Rewards"). - **Loyalty Schemes** — earning rules. - **Loyalty Tiers** — Silver / Gold / Platinum levels. - **Reward Points** — the points/currency earned. - **Loyalty Card** — customer's identifier in the program. - **Loyalty Customer** — customer participating. ## Earning rules Configurable schemes: - **Points per dollar** — 1 point per $1 spent. - **Tier-based earning** — Gold members earn 2× points. - **Category-based** — bonus points on specific products / categories. - **Promotional periods** — temporary multipliers. - **Birthday bonus** — extra points on customer birthday month. - **Sign-up bonus** — initial points for joining. Each scheme has criteria (channel, product, customer attribute) and a points formula. ## Tiers Status levels: - Tier qualification — typically annual spend or points threshold. - Tier benefits — earning rate, access to exclusive products, free services. - Tier maintenance — minimum activity to retain status. - Tier expiration — points expire if customer inactive. Tiers create aspirational dynamics — customers strive for next tier. ## Redemption How points become rewards: - **Discount at POS** — points reduce purchase price. - **Free items** — redeem points for specific products. - **Tier upgrades** — temporary higher tier. - **Partner rewards** — points redeemed at partner vendors. - **Charitable donation** — points converted to charity. The redemption catalog is configurable; rewards added and removed seasonally. ## Cross-channel Loyalty must work seamlessly: - **Store POS** — earn and redeem at register. - **Online** — at e-commerce checkout. - **Mobile app** — track points, browse rewards. - **Call center** — agent applies points. D365 Commerce's channel architecture ensures loyalty state synchronises across channels. ## Loyalty card Identifies the customer: - Physical card with number / barcode. - Mobile app digital card. - Phone number / email as identifier. At POS, scan card → loyalty profile loaded → earn / redeem applied. ## Anonymous customers Pre-registered customers: - Earn points to a temporary card. - Activate by registering later. - Points carry over. Captures customer identity from non-loyalty members. ## Promotions and loyalty interaction Loyalty earning often interacts with promotions: - Promotion gives discount; do customers earn points on pre- or post-discount price? - Configurable per scheme. - Best practice: earn on post-discount; customers grumble otherwise. ## Multi-program A customer can be in multiple programs: - Standard rewards program. - Premium credit-card-linked program. - Partner programs. Each program has its own points; customer sees combined. **Points expiration.** - **Rolling expiration** — points expire 12 months after earning. - **Annual cycle expiration** — points expire at year-end. - **Tier-dependent expiration** — higher tiers get longer expiration. Expiration drives engagement but frustrates if too aggressive. ## Reward catalog Items / discounts customers can redeem: - Stocked items with point prices. - Vouchers (10% off). - Experiences (free coffee, free shipping). - Charity options. Catalog management is operational work — keeping rewards fresh and aspirational. **Reporting and analytics.** - **Active loyalty members** — engaged in last 90 days. - **Tier distribution** — % at each tier. - **Points liability** — outstanding points × redemption value (a balance sheet item). - **Redemption rate** — % of earned points redeemed. - **Lift analysis** — loyalty members vs non-members spend. These metrics drive program design decisions. ## Integration with Customer Insights Loyalty data flows to Customer Insights: - Profile enriched with loyalty status. - Segments by tier, by activity. - Journey orchestration triggered by loyalty events (tier upgrade, points expiring). The combination of Commerce + Customer Insights produces personalised loyalty marketing. **B2C considerations.** - **GDPR compliance** — loyalty data is personal data. - **Right to forget** — anonymise loyalty history on request. - **Consent** — explicit opt-in. **Common pitfalls.** - **Overcomplicated tier structure.** Too many tiers; customers confused. - **Reward catalog stale.** Same rewards for years; engagement drops. - **Points liability ignored.** Significant balance sheet item; financial reporting must account. - **Cross-channel sync fails.** Customer earns online but POS doesn't see it; frustration. - **Tier requalification surprises.** Customer drops tier unexpectedly; complaints. - **Promotion / loyalty interaction unclear.** Earning rate ambiguous; trust eroded. **Operational rhythm.** - **Daily** — monitor for anomalies (point gaming, fraud). - **Monthly** — segment analysis, marketing campaigns. - **Quarterly** — catalog refresh. - **Annual** — tier recalibration; expiration runs. ## Strategic positioning Loyalty is one of retail's strongest competitive tools when done well. D365 Commerce's loyalty engine is configurable and capable; the design (tier structure, earning rules, rewards) matters more than the underlying mechanics. Invest in research before launching: customer preferences, competitive benchmarks, financial modelling of liability. A well-designed program drives material revenue uplift; a poorly designed one frustrates customers and produces a balance sheet headache without commercial benefit. --- # Retry policies with Azure services for Dynamics 365 integrations How to implement retry policies in Azure-based Dynamics 365 integrations — exponential backoff, idempotency, circuit-breaker integration. Source: https://www.solvingdynamics365.com/guides/retry-policies-with-azure-services Section: Integrations / Resilience & ops Published: 2026-05-01 Network blips, rate limiting, downstream slowness — transient failures are inevitable in distributed systems. **Retry policies** absorb these failures by trying again with appropriate backoff. Implemented well, they make integrations resilient; implemented badly, they amplify failures into incidents. **Transient vs permanent failures.** - **Transient** — temporary; succeeds on retry. Network glitch, rate limit, brief downstream outage. - **Permanent** — won't succeed however many retries. Schema mismatch, auth failure, business validation failure. Retry only transients; permanent failures need different handling (alert, dead-letter, manual). ## Failure classification Decide per error type: - **HTTP 5xx** — usually transient. - **HTTP 429 Too Many Requests** — definitely transient; respect Retry-After. - **HTTP 4xx** — usually permanent (validation, auth). - **HTTP 408 Request Timeout** — transient. - **Connection errors** — transient. - **Specific application errors** — depends. The classifier is critical; misclassifying causes infinite retry of permanent failures. **Backoff strategies.** - **Fixed delay** — wait N seconds, retry. - **Linear backoff** — N, 2N, 3N seconds. - **Exponential backoff** — N, 2N, 4N, 8N seconds. - **Exponential with jitter** — exponential + random variance. Exponential with jitter is modern default; prevents thundering herd. **Why jitter.** - Without jitter, all retries synchronise. - Many clients failing simultaneously retry at the same moment. - Spike overwhelms the recovering downstream. Random jitter spreads retries; smoother recovery. **Max retries.** - **Bounded** — give up after N attempts. - **Unbounded** — retry forever (rare; usually wrong). Bounded count protects against permanent failures masquerading as transient. ## Retry-After header When server says how long to wait: - HTTP response includes `Retry-After: 30` (30 seconds) or absolute time. - Honour it; don't retry sooner. - Common in 429 (rate limit) responses. Ignoring Retry-After can extend the throttling. **Implementation libraries.** - **Polly (.NET)** — declarative retry policies. - **Resilience4j (Java)** — similar. - **AxiosRetry (Node)** — for axios HTTP client. - **Azure SDK** — built-in retry on many operations. Choose mature library; rolling your own retry is error-prone. **Polly example.** ```csharp var retryPolicy = Policy .Handle() .Or() .WaitAndRetryAsync( retryCount: 5, sleepDurationProvider: attempt => TimeSpan.FromSeconds(Math.Pow(2, attempt)) + TimeSpan.FromMilliseconds(jitterer.Next(0, 1000)) ); await retryPolicy.ExecuteAsync(async () => await client.PostAsync(url, content)); ``` Five retries with exponential backoff and jitter; handles common transient cases. ## Idempotency Critical for retries: - Retry might succeed after thinking it failed. - Duplicate processing on receiving side. - Idempotency means same input → same outcome, regardless of count. Patterns: - **Idempotency-Key header** — receiver dedupes by key. - **Natural keys** — operation tied to unique business identifier. - **State-based** — set state idempotently. Without idempotency, retries cause data corruption. ## Retry + circuit breaker Combined patterns: - **Retry** handles individual call failures. - **Circuit breaker** handles sustained failure patterns. Wrap retry inside circuit breaker: - Retries happen within circuit-closed state. - When too many failures total, circuit opens; retries stop. - Periodic test to re-open if downstream recovered. Covered in [[circuit-breakers-in-dynamics-365-integrations]]. **Per-service retry policies.** - **Dataverse** — handle 429s, 5xx; respect Retry-After. - **Service Bus** — built into SDK; configurable. - **Azure Storage** — built-in retries; can override. - **External APIs** — per-API characteristics. Each service may need tuned policy. ## Retry budget Limit total retry effort: - Per-request retry count (5 attempts). - Per-time-window total retries (1000 retries per minute across all requests). Without budget, retry storms exhaust resources. **Retry observability.** - **Retry count metric** — how often retries happen. - **Success-after-retry rate** — what % succeed. - **Failures after exhausted retries** — what truly fails. These metrics reveal integration health beyond just success/failure. **Distributed retry.** - Multiple consumers each retry. - Aggregate retry traffic significant. - Coordination via shared rate limiter helpful. For high-scale, single-client retry isn't enough. ## Dead-letter on exhaustion When all retries fail: - Message → dead-letter queue. - Alert raised. - Operator inspects. - Manual resubmission or remediation. Closes the loop on retry-failed messages. **Common pitfalls.** - **No retry.** First transient failure becomes user-visible. - **Naive retry.** No backoff; tight retry loop hammers downstream. - **Retry permanent failures.** Forever; resource exhaustion. - **Idempotency forgotten.** Retries cause duplicates. - **Throttling ignored.** Retries faster than allowed; permanently throttled. - **No timeout** on individual attempts. Stuck retry; resource leak. - **Retry on wrong layer.** Application retries when SDK already retried; effective retry count multiplies. **Best practices.** - **Use library** — Polly, Resilience4j, etc. - **Classify errors** — transient vs permanent. - **Exponential + jitter.** - **Bounded count.** - **Timeout per attempt.** - **Observable metrics.** - **Dead-letter on exhaustion.** - **Idempotent receivers.** ## Strategic positioning Retry policies are foundational reliability infrastructure. Mature integrations have considered retry policies per integration; immature ones have ad-hoc or no retries. The investment is modest — using libraries, classifying errors, building monitoring. The benefit is integrations that survive transient issues without operational intervention. For architects: - Default to library-based retry. - Document policy per integration. - Monitor retry metrics. - Combine with circuit breaker, dead-letter, idempotency. Production-grade integration architecture has all these patterns working together. Skipping any one weakens the whole. Invest in the foundation; benefit through every integration thereafter. --- # Revenue recognition for services firms on Dynamics 365 How revenue recognition works for professional services on Dynamics 365 — time-and-materials, fixed-price, and retainer contracts. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-professional-services-revenue-recognition Section: Industries / Professional services Published: 2026-09-02 Services firms recognise revenue as work is performed, not when the invoice goes out. Under IFRS 15 and ASC 606 that principle is formal: identify the performance obligations, allocate the transaction price, and recognise as each obligation is satisfied — over time for most services. Dynamics 365 supports this well or barely depending on which product and which deployment mode a firm is on, and that choice is often made by the delivery team before finance has seen it. This guide sets out what each option actually does. ## The three contract shapes **Time and materials.** Revenue equals approved hours times the contract rate. Recognition follows delivery; the only timing question is whether to accrue revenue on approved-but-uninvoiced time at period end. **Fixed price.** The firm commits to an outcome for a price. Revenue is recognised over time by progress — percentage of completion based on cost or hours — or, less often, at milestones. This is where systems differ most. **Retainers and subscriptions.** A fixed fee per period for a capacity or a service. Recognised evenly over the period regardless of hours delivered, with deferred revenue for advance billing. Most firms have all three, often on the same client. ## Project Operations: it depends on the deployment **Lite deployment** (Dataverse only, with a separate accounting system) manages contracts, time, expense, and invoicing. It does not do revenue recognition. Invoices are the only financial output, so a fixed-price project billed at three milestones shows three lumps of revenue in whatever ledger the invoices land in. Firms on Lite that need over-time recognition do it in the accounting system or in a spreadsheet from Project Operations' actuals. That is workable for a small firm with mostly T&M work and unacceptable for one with material fixed-price revenue and an auditor. **Project Operations with Finance and Operations** (the resource-based and stocked deployments) posts actuals into the F&O project accounting module, and that is where recognition lives: - **T&M**: revenue accrues when time and expense post, on the accrue-revenue setting of the project group, and reverses when the invoice posts. Unbilled revenue sits on the balance sheet between the two. Works out of the box. - **Fixed price**: the project uses an estimate project with a completion method — completed contract or percentage of completion, with the percentage derived from cost or from a manually entered completion. Period-end estimate runs post revenue, WIP, and cost of sales. This is the real percentage-of-completion engine and it is capable, but it needs finance to configure cost templates, define which cost lines count as progress, and run the estimates as part of close. - **Retainers**: modelled as fixed-price with on-account billing, or increasingly through F&O's **subscription billing** feature, which handles deferrals and recurring invoices and is Microsoft's direction after the older revenue recognition feature was marked for deprecation. The [deployment types](https://www.solvingdynamics365.com/guides/project-operations-deployment-types) guide covers the choice; the recognition requirement should be one of the inputs to it, and often is not. ## Business Central Business Central's projects (formerly jobs) have **WIP methods** per project: cost value, sales value, cost of sales, percentage of completion, and completed contract. The WIP calculation batch posts the accounting entries at period end. It is a proper over-time recognition mechanism for an SMB firm and the [WIP and recognition for jobs](https://www.solvingdynamics365.com/guides/wip-and-recognition-for-jobs-in-bc) guide walks it. Its limits: one method per project, progress driven by cost or a manually entered percentage, and no concept of performance obligations below the project. Firms whose contracts bundle several obligations at different progress rates split them into separate projects or tasks with separate WIP treatment. ## What the standards change about contract design IFRS 15 and ASC 606 are usually treated as an accounting problem. In Dynamics 365 they are a data-model problem, because recognition is driven by the structure of the contract lines. - **One performance obligation per contract line.** In Project Operations, the contract line is the unit that carries billing method, price, and the mapping to project tasks. A fixed-price line covering two deliverables with different completion profiles cannot be recognised correctly; split it. - **Allocation of discounts.** A bundled discount must be allocated across obligations. Neither Project Operations nor BC allocates automatically across lines; the allocation is done when the contract is priced and entered per line. - **Variable consideration** — success fees, penalties — has no first-class home. Treat it as a separate line with its own recognition treatment, or hold it outside the system until it is probable. - **Contract modifications** are the hard case. A change order that adds scope to an existing fixed-price line changes the percentage of completion retrospectively. Project Operations handles it through the contract line's revised value and the estimate project picking up the new total; it does not restate prior periods, which is usually correct under the standard but needs finance to be looking. ## Month-end sequence For firms on Project Operations with F&O, the close order that avoids rework: approve all time and expense, post them to F&O, run project invoicing, run the estimate process for fixed-price projects, review WIP and unbilled revenue by project, then close the period. Running estimates before all time is posted understates progress and creates a correction next month. For BC firms: post all project journals, run WIP calculation, review, post WIP to GL, close. ## What needs a partner or a spreadsheet Multi-element arrangement allocation with standalone selling prices, automated contract modification accounting, and disclosures such as remaining performance obligations are not in any Dynamics 365 product for services contracts. Larger firms use a revenue-management ISV or handle it in the consolidation layer. Smaller firms keep a schedule. Either way, the decision to do fixed-price work at scale is a decision to run the estimate process properly, and firms that skip it discover the gap at their first audit rather than their first month-end. --- # Reverse and undo in Business Central How Business Central handles corrections — undo shipment, undo receipt, reversing journals, correcting credit memos, and the audit trail they leave. Source: https://www.solvingdynamics365.com/guides/reverse-and-undo-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 Mistakes happen. A sale gets posted at the wrong price; a shipment goes out incomplete; a journal entry hits the wrong account; an invoice is sent to the wrong customer. Business Central offers several mechanisms to correct posted transactions while maintaining an audit trail — but the right mechanism per scenario isn't always obvious. ## Posted documents are immutable A foundational principle: once a sales invoice, shipment, journal, or other transaction is posted, the original record cannot be edited. Corrections happen through reversing or correcting transactions that preserve history. ## Undo shipment Posted sales shipments and posted purchase receipts can be *undone* under certain conditions. The **Undo Shipment** action on a posted sales shipment line reverses the inventory movement, returns the items to stock, and marks the line as undone. The original posted shipment remains visible in history; the undo creates a counter-entry. Conditions: - Item hasn't been invoiced yet (still open inventory entry). - Item hasn't been further processed (sold to another customer, transferred, etc.). - No item charge has been applied. Undo Receipt works the same way on the purchase side. ## Cancel posted invoice A posted sales invoice or purchase invoice has a **Cancel** action that creates a corresponding credit memo and applies it, effectively reversing the financial transaction. The original invoice remains; the credit memo is its formal reversal. Audit trail shows both with cross-references. ## Correct posted invoice A more powerful pattern. The **Correct** action on a posted sales invoice: 1. Creates a credit memo reversing the original. 2. Creates a *new* unposted sales invoice as a copy of the original. 3. The user edits the copy to the correct values. 4. The user posts the corrected invoice. The result: the original (wrong) invoice, a credit memo that reverses it, and a new (right) invoice. Three documents in the audit trail tell the full story. ## Reversing journal entries Posted G/L journals can be reversed: - **Reverse Transaction** — creates a journal entry that exactly negates the original. - **Reverse Register** — reverses an entire batch of journal entries posted in one run. Both leave the original visible and add the reversal as a separate posting. Useful for misclassified entries, wrong amount, wrong account. ## Recurring vs reversing journals Different concept: a **reversing recurring journal** is configured to automatically post the reverse next period (the standard accrual pattern). Not a correction tool — it's a normal accounting mechanism. ## Reversing customer / vendor applications When a payment was applied to the wrong invoice (or wrong customer), the **Unapply Customer / Vendor Entries** action reverses the application without reversing the underlying payment. Re-apply correctly afterwards. Useful for AR/AP cleanup. **What can't be reversed easily.** - **Cost-adjustment cascades** — once Adjust Cost — Item Entries has propagated cost into many outbound entries, reversing the originating inbound requires substantial work. - **VAT-period-closed transactions** — corrections may require special VAT correction journals per country regulation. - **Statutory-locked period** — reversing transactions in a closed period is restricted; may require period re-opening (audit-trail event) or posting the reversal in the current period. ## Audit trail Every reversal, undo, and correction is logged. The **Change Log** (if enabled) records the actions; posted documents carry references to their reversals; the GL register shows the original and the reversal side by side. Auditors can reconstruct what happened cleanly. **Common pitfalls.** - **Deleting unposted documents thinking they're posted** — unposted documents can be deleted outright, but a deleted draft leaves no trail. Be sure of the state before deleting. - **Reversing the wrong way** — posting a credit memo to "fix" an invoice but not applying it to the original leaves both open. Use Cancel / Correct for proper linkage. - **Reversing in a closed period** — runs into period-control errors. Reverse in the current period instead. ## Operational discipline Train users on the right mechanism per scenario. Mistakes are normal; messy mistakes are avoidable. --- # Ribbon and command bar customisation How to add, remove, and modify commands on the model-driven app command bar — the modern command designer and the ribbon-XML legacy. Source: https://www.solvingdynamics365.com/guides/ribbon-and-command-bar-customisation Section: Customer Engagement / Dataverse platform Published: 2026-05-01 The **command bar** (formerly called the **[ribbon](https://www.solvingdynamics365.com/glossary/ribbon)**) is the row of actions at the top of every model-driven app page — Save, New, Delete, Email, Export, custom actions specific to the app. Customising it lets you surface organisation-specific functions in the right place. The modern path is friendly; the legacy ribbon-XML pattern is still relevant for older customers. ## The modern command designer Microsoft now provides a graphical **command designer** inside the modern maker portal. From the maker portal, navigate to a table's command bar; the designer shows the existing commands and lets you: - **Add a command** — name, icon, label, and the action it performs. - **Edit a command** — change label, icon, visibility, action. - **Delete or hide** an existing command (without affecting other apps). - **Set visibility rules** — show / hide the command based on field values, user role, or business state. - **Set enabled rules** — grey out the command unless conditions are met. - **Sort the order** in which commands appear. ## Action types A command can do one of several things: - **Run a JavaScript function** — the classic ribbon pattern; calls a custom function in a web resource. - **Run a Power Fx formula** — newer pattern; the action is expressed in Power Fx (the same language as canvas apps). - **Run a Power Automate flow** — trigger a cloud flow with the current record context. - **Open a Power App** — launch a canvas or custom app with parameters. - **Open a URL** — navigate to an external page. ## Visibility and enabled rules Both rules are Power Fx expressions evaluating in the form's context: - **Visibility** — `Self.Selected.AllItems.Status = "Active"` shows the command only for active records. - **Enabled** — `User().Email = "..."` enables only for specific users (rare; usually role-based instead). - **Run command** — what happens when clicked. The Power Fx integration replaces what previously required JavaScript display rules and enable rules. ## Where commands appear The same table can have commands in different contexts: - **Main form** command bar — on the record-level view. - **List view** command bar — at the top of the table's grid. - **Subgrid** command bar — embedded in a parent form's subgrid. - **Associated view** command bar — when viewing related records. Each context has its own command set; you can have a command on the main form but not in the list view, or vice versa. ## App-specific commands Modern command customisation can be **app-scoped** — a command appears in App A but not App B, even on the same table. Useful when multiple apps share a table but need different actions. ## The ribbon-XML legacy Older customisations use **ribbon XML** — verbose XML files defining commands, display rules, enabled rules, library references. Ribbon XML is still supported but no longer recommended for new work; migrate to the modern command designer when possible. **Common patterns.** - **One-click custom action** — "Generate Quote PDF", "Send to ERP", "Mark as VIP", "Calculate Discount" — buttons that run a flow or script. - **Hide standard commands** — for security or simplification (hide Delete from non-admin users). - **Conditional surface** — "Approve" button visible only when status is Pending Approval AND user is in Approvers role. - **App-specific surfacing** — "Send Quote" in the Sales app but not in the Service app on the same Quote record. **Limits.** - **No nested submenu beyond one level** — keep commands flat. - **Custom icons** are limited to predefined icon set; uploading bespoke icons is supported but with effort. - **Performance** — many commands with complex Power Fx rules slow form load. Audit. **Common pitfalls.** - **Hiding standard commands that users need** — users complain "I can't find Save anymore". Always test as the user. - **Visibility rules that don't account for record states** — commands invisible when they should be visible. - **Cross-app surprises** — adding a command in one app accidentally affects another. Use app-scoped commands. ## Operational discipline Document the command catalogue per app per table. Audit annually — retire commands that aren't used; surface new ones for emerging workflows. Train users when adding meaningful new commands. --- # Risk management on Dynamics 365 projects How to identify, track, and mitigate risks on Dynamics 365 implementations — the risk register, scoring framework, escalation. Source: https://www.solvingdynamics365.com/guides/risk-management-on-dynamics-365-projects Section: Implementation / Project execution Published: 2026-08-11 Dynamics 365 implementations fail in predictable ways. Data migration that's harder than scoped. Integration complexity discovered too late. Change management neglected. Customisation that breaks at the next release wave. Scope creep that eats the budget. Each failure mode is preventable; collectively, ignoring risk management is the dominant cause of project disappointment. **The risk register.** A **risk register** is the central document tracking risks: - **Risk title** — short description. - **Category** — technical, organisational, financial, scope, resource, vendor. - **Description** — what could happen? - **Likelihood** — Low / Medium / High. - **Impact** — Low / Medium / High. - **Risk score** — likelihood × impact, expressed as Low/Medium/High/Critical. - **Mitigation** — what we're doing to reduce likelihood or impact. - **Contingency** — what we'll do if it happens anyway. - **Owner** — accountable person. - **Status** — Open, In Mitigation, Closed, Realised. - **Next review date** — when to revisit. The register lives in a shared location (Azure DevOps, SharePoint, project tool); it's reviewed in every steering committee meeting. **Common Dynamics 365 risks.** **Data migration.** - Source data is dirtier than initially assessed. - Volume is higher than estimated. - Country-specific data quality variances. - Inability to extract historical detail from legacy. Mitigation: deep dive into source data early; pilot migration cycles; involve data quality team from kick-off. **Integration complexity.** - Late discovery of integration requirements. - Partner system APIs are weaker than expected. - Performance at production scale. - Vendor APIs change during the project. Mitigation: integration discovery in the analysis phase; performance testing at scale before UAT; vendor contracts that include API stability commitments. **Customisation depth.** - More customisations needed than estimated. - Customisations conflict with release-wave updates. - Per-tenant extensions vs AppSource trade-off late. Mitigation: rigorous fit-to-standard analysis; commit to Power Platform-first; budget for release-wave validation. **Resource availability.** - Key partner consultant leaves mid-project. - Customer SME unavailable during critical phase. - Specialist skills (specific localisation, complex finance) hard to find. Mitigation: identify single-point-of-failure individuals; ensure backup; cross-train. **Change management.** - User adoption resistance. - Training delivered too early / too late. - Sponsor disengagement. - Communication gaps. Mitigation: explicit change management workstream; sponsor accountability; user-centric design throughout. **Scope creep.** - Stakeholders adding requirements during build. - "Just one more" customisations. - Re-org changes scope mid-project. Mitigation: rigorous change-control process; sponsor sign-off on scope changes; budget contingency. **Vendor dependency.** - ISV solution doesn't deliver promises. - Partner exits the engagement. - Microsoft platform deprecates a feature you depend on. Mitigation: vendor due diligence; contractual remedies; backup vendors identified; exit clauses. **Scoring framework.** A simple 3×3 likelihood × impact matrix: - **High likelihood × High impact** = **Critical** — daily focus. - **High × Medium** or **Medium × High** = **High** — weekly focus, mitigation in progress. - **Medium × Medium** = **Medium** — monthly review; mitigation as bandwidth allows. - **Low** in any combination = **Low** — tracked but minimal active work. Critical risks dominate steering committee discussion. Realised risks (a risk that's happened) get explicit incident response, with lessons captured for future projects. **Risk lifecycle.** - **Identification** — risks identified continuously; not just at kick-off. New phases reveal new risks. - **Assessment** — scored against likelihood and impact. - **Mitigation** — actions assigned to owners; mitigation work tracked. - **Monitoring** — periodic review; status updates. - **Closure** — risks resolved get closed; documentation captured. - **Realisation** — when a risk happens, it transitions to incident response; lessons feed back into risk practice. **Steering committee involvement.** The risk register is on every steering committee agenda. Top risks discussed; mitigation status reviewed; escalations made to leadership. Without steering involvement, risks are noted but not acted on. **Mitigation vs contingency.** - **Mitigation** — actions taken to *reduce likelihood or impact* before the risk happens. - **Contingency** — actions to take *if* the risk happens. Both matter. A risk with strong mitigation may not need contingency; a risk with no mitigation absolutely needs contingency. **Risk communication.** - **Transparency with sponsors** — sponsors who hear about risks late, after they realised, lose trust. Communicate early and often. - **Risk-adjusted timelines and budgets** — contingency reserves explicitly allocated for risks. - **No surprises** — sponsors should never be surprised by realised risks; the risk register should have flagged them. **Common pitfalls.** - **No risk register** — risks are tribal knowledge; nothing tracked. - **Risk register without review** — file maintained but never opened. - **Mitigation as documentation only** — risks listed but no actual mitigation work happening. - **Politeness over honesty** — risks downplayed to avoid difficult conversations. - **Late identification** — risks recognised only after they realised. ## Operational reality Risk management is unglamorous discipline. Adopt it from kick-off; maintain it through go-live; review it in steady-state operations. The cost is small; the value compounds across every meaningful surprise prevented. --- # Risk register for Dynamics 365 projects How to maintain an effective risk register for a Dynamics 365 implementation — risk identification, scoring, mitigation, monitoring. Source: https://www.solvingdynamics365.com/guides/risk-register-for-dynamics-365-projects Section: Implementation / Project execution Published: 2026-05-01 Every Dynamics 365 implementation has risks — data quality, scope creep, key person dependence, integration complexity. A **risk register** systematically captures these, tracks mitigation, and surfaces what needs attention. Done well, it's a working tool; done poorly, it's a forgotten document. **Risk vs issue.** - **Risk** — something that might happen. - **Issue** — something that has happened. Risks become issues when they materialise. The register tracks risks; an issue log tracks issues. They flow into each other. **Common Dynamics 365 project risks.** - **Data quality** — migration data dirty. - **Stakeholder availability** — SMEs over-allocated. - **Scope creep** — requirements keep growing. - **Integration complexity** — external system integration harder than expected. - **Customisation overruns** — code more complex than estimated. - **Vendor performance** — partner under-delivers. - **Key person dependency** — one person knows critical area. - **Change resistance** — users won't adopt. - **Compliance gaps** — regulatory needs missed. - **Performance under load** — slow at scale. - **Skill gaps** — team lacks specific expertise. Most projects share many of these. ## Risk register structure Per risk: - **ID** — unique identifier. - **Description** — what could go wrong. - **Category** — technical, business, operational, etc. - **Probability** — how likely (1-5 or H/M/L). - **Impact** — how severe (1-5 or H/M/L). - **Risk score** — Probability × Impact. - **Mitigation strategy** — how to reduce probability or impact. - **Contingency** — what to do if it happens. - **Owner** — accountable person. - **Status** — Open, Mitigated, Closed, Realised. - **Last updated.** Standard columns; consistent across projects. **Risk identification techniques.** - **Brainstorming** — team session listing concerns. - **Lessons learned** — from prior projects. - **Industry knowledge** — common Dynamics 365 risks. - **Pre-mortem** — "imagine the project failed; why?" - **Stakeholder interviews** — different perspectives. Identification isn't one-time; ongoing throughout project. **Risk scoring.** - **Probability** — 1 (rare) to 5 (almost certain). - **Impact** — 1 (minor) to 5 (catastrophic). - **Score** — multiplied; 1-25 range. Color coding: - **Red** (15-25) — critical; active management. - **Amber** (5-14) — significant; monitor. - **Green** (1-4) — low; awareness only. The colour coding helps prioritisation. **Mitigation strategies.** - **Avoid** — change plan to eliminate the risk. - **Reduce** — actions to lower probability or impact. - **Transfer** — insurance, contractual. - **Accept** — acknowledge; no action. Most risks get reduced; some accepted; few avoided entirely. ## Per-risk action What specifically: - "Engage data quality team early." - "Hire backup architect for redundancy." - "Build integration prototype in Week 4." - "Include compliance review in design phase." Vague mitigations don't change anything; specific actions do. **Risk review cadence.** - **Weekly** at PMO level — full register. - **Monthly** at steering — top risks. - **Per phase transition** — comprehensive review. - **Ad-hoc** when new risks identified. Without cadence, register becomes static. **Trending.** - **New risks** — what surfaced this period. - **Closed risks** — what's resolved. - **Escalating risks** — increasing in score. - **De-escalating** — getting better. Trend tells more than snapshot. ## Top 10 Focus mechanism: - The top 10 risks (by score) discussed each meeting. - Lower-scored risks listed but not focal. - Movement in / out of top 10 is itself signal. Manageable scope for attention; comprehensive coverage maintained. ## Risk owners Each risk has a person: - Responsible for mitigation execution. - Accountable for status updates. - Has authority and resources to act. Without owners, risks have no one acting on them. ## Materialised risks When risk becomes issue: - Move to issue log. - Mitigation becomes resolution plan. - Track separately as issue. - Post-incident learn for future projects. **Communicating risks.** - **Steering committee** — top risks, status, trends. - **Stakeholders** — risks affecting them. - **Partners** — joint mitigation discussion. Risk transparency builds trust; hiding risks always backfires. **Risk register tools.** - **Excel / spreadsheet** — common, fine for small projects. - **Azure DevOps** — integrated with backlog. - **Project management tools** — Smartsheet, Jira, etc. - **Risk-specific tools** — for enterprise. Tool less important than discipline. **Common pitfalls.** - **Register not maintained.** Created once; ignored. - **All risks scored "amber".** No prioritisation. - **No owners.** Risks float; nobody acts. - **Mitigations vague.** "We'll watch this" isn't a mitigation. - **No escalation.** High-score risk stays at PMO; steering surprised. - **Closure without verification.** "Mitigated" without confirming. - **Risk theatre.** Performative discussion; no real action. **Risk culture.** - **Reward risk surfacing** — don't shoot messenger. - **Open discussion** — risks aren't fault. - **Honest scoring** — don't downplay to look good. - **Action on top risks** — visible response. The culture determines whether the register is a useful tool or a checkbox. ## Lessons learned Post-project: - Which risks materialised? Why didn't mitigation work? - Which risks didn't? Was mitigation good or risk overstated? - What risks weren't on register? Why not identified? Inputs to next project's risk identification. ## Strategic positioning Risk management is one of the strongest predictors of project success. Mature implementations have active risk registers; struggling projects have either no register or a register that exists but doesn't drive action. For project leaders: - Build register early. - Maintain weekly. - Drive mitigation actions. - Surface top risks visibly. - Reward honest reporting. The investment is meeting time and tool maintenance; the benefit is fewer surprises and earlier intervention on issues. The teams that take risk management seriously have boring delivery; the teams that don't have dramatic delivery — and not in a good way. --- # Role centers and personalization in Business Central How Business Central's role-tailored experience works — role centers, profiles, personalization, and tenant-wide customisation. Source: https://www.solvingdynamics365.com/guides/role-centers-and-personalization-in-business-central Section: Business Central / Admin & ops Published: 2026-05-01 One of the things that makes Business Central feel different from generic enterprise software is its **role-tailored experience**. Every user opens to a *role center* — a home page curated for what they do. Behind it sits a layered customisation model that lets each user, each role, and the whole tenant shape the interface. ## Role centers A **role center** is a Business Central page customised as the user's home screen, showing what matters for their job: relevant cues (open orders, overdue invoices, items below safety stock), shortcut actions, embedded charts, frequently-used reports, and notifications. Microsoft ships role centers for common roles — Business Manager, Accountant, Order Processor, Sales Manager, Purchasing Agent, Production Planner, Warehouse Worker, Project Manager, IT Manager — and customers extend or build their own. ## Profiles A **profile** is the assignment of a role center to a category of users. Each profile has a code, a role center, default permissions, default settings, and a description. Users are assigned a profile through the user setup; switching profile changes the role center and the available menu. ## Personalization Within their assigned role, individual users **personalize** their experience: hide columns on lists they don't use, reorder columns, change column widths, hide fields on cards, hide cues on the role center, add favourites to navigation. Personalization is per-user and per-page; it doesn't affect other users. ## Designer A more powerful customisation tool, **Designer**, lets users with appropriate permissions: - Add or hide fields, columns, parts, FactBoxes on pages. - Move items between sections. - Add custom captions. - Save as a tenant customisation (affecting all users of the page) or as a personal customisation. Designer customisations are stored as **page metadata extensions** that survive upgrades. Heavy customisation is better delivered as an AL extension; Designer is for lightweight tweaks. ## Tenant customisation A super-user can take their personalized layout and **save it as a tenant default** — every user of that profile inherits the change. This is how administrators tune the standard experience for their company without involving a developer. ## Cues and headlines The role center features prominently: - **Cues** — large numeric tiles showing key counts (open orders, items needing approval, overdue invoices). Each cue is filterable and clickable to drill into the underlying list. - **Headlines** — a horizontal banner showing personalised notifications, AI insights, or business-specific alerts. - **Charts** — small embedded Power BI or built-in chart visualisations. - **Activities** — task lists showing pending items. ## Mobile Role centers render on mobile through the Business Central mobile app. The layout reflows for small screens; cues and key actions remain visible. ## The boundary Role centers and personalisation are *configuration*. For genuinely new business logic — calculated fields, custom workflows, new tables — write an AL extension. The two layer cleanly: extensions add the structure, role centers and Designer expose it the way users want to see it. ## Operational discipline Most BC implementations underuse the role-center investment. Spend deliberate time per role configuring the cues, charts, and shortcuts that match daily work. Adoption improves dramatically. --- # Routing rules in Dynamics 365 Customer Service How cases and conversations route to agents in Customer Service — basic routing, Unified Routing, classification, and skill-based assignment. Source: https://www.solvingdynamics365.com/guides/customer-service-routing-rules Section: Customer Engagement / Customer Service Published: 2026-05-01 How a case or conversation gets to the right agent is the question every Customer Service implementation grapples with. Dynamics 365 ships two routing engines — a simple, legacy one and a modern, AI-aware one — and customers should adopt the modern one. ## Basic routing rules The legacy mechanism is a list of **basic routing rule sets** with conditional logic that assigns incoming cases to queues based on attributes (priority, channel, product line). Basic rules are easy to set up, run synchronously on case creation, and don't consider agent capacity or skills. They're still in use on simpler tenants but are increasingly being replaced. ## Unified Routing The modern engine. Unified Routing handles **cases**, **conversations** (chat, voice, SMS, social), **records** of any other entity, and **emails** through a single configuration. It runs in three phases: 1. **Classification.** Incoming work is enriched with derived attributes: priority based on customer tier, language detected by AI, sentiment from the email body, product category from the subject. Classification rules are configured per channel and can call AI models. 2. **Routing rule sets.** A set of rules evaluates the classified work and assigns a **queue** — typically a queue per skill area, region, or service tier. 3. **Assignment.** Within the queue, an **assignment method** picks an agent: longest-idle, round-robin, highest-priority-first, or **percentage-based** for blended skills. Assignment honours **agent capacity** (how many active items each agent can handle), **operating hours**, and **presence status**. ## Skills A skills hierarchy is configurable; agents are tagged with skills and proficiency levels. Routing rules can require a skill match — only Spanish-speaking agents handle Spanish chats; only senior agents handle escalations. Skills are also AI-recommended based on conversation analysis. ## Capacity profiles A **capacity profile** declares how much work an agent can hold simultaneously per channel — typically 1 voice call, 3 chats, 5 cases. Routing respects the profile and queues work that exceeds capacity. ## Overflow and escalation Time-based overflow re-routes work that's waited too long; manual reassignment by supervisors covers the edge cases. ## Telemetry Real-time supervisor dashboards show queue depths, longest waits, agent occupancy, and SLA risk, with the ability to intervene. ## Migration Microsoft is gradually deprecating basic routing in favour of Unified Routing. New implementations should configure Unified Routing from day one. ## Configuration discipline Routing complexity grows quickly — one rule turns into twenty. Start with a small skill taxonomy, a flat queue topology, and a handful of routing rules; add complexity only when measured queue wait times or quality metrics demand it. --- # Routings and capacity centers in Business Central manufacturing How Business Central models manufacturing operations — routings, work centers, machine centers, capacity calendars, and cost flow into production. Source: https://www.solvingdynamics365.com/guides/routings-and-capacity-centers-in-bc-manufacturing Section: Foundations Published: 2026-05-23 Manufacturing in Business Central Premium centres on three master data objects: **production BOMs** (what to make from what), **routings** (the steps to make it), and **work / machine centers** (where the steps happen). The routings and capacity model is what turns inventory operations into a manufacturing system. ## Work centers A **work center** is an organisational unit that performs operations — a department, a cell, or a logical grouping of capacity. Each carries: - **Code and Name** — the identifier. - **Capacity** — how many parallel runs can happen (e.g. 2 simultaneous operations). - **Efficiency** — productivity adjustment (90% means 90% of nominal). - **Shop Calendar Code** — when the work center is open (Mon-Fri 8am-5pm, etc.). - **Direct Unit Cost** — internal cost rate per time unit. - **Indirect Cost %** — overhead applied to direct cost. - **Posting groups** — for GL accounting of consumed capacity. - **Unit of Measure** — how time is measured (typically minutes or hours). ## Machine centers A **machine center** is a more granular capacity unit — a specific machine, lathe, oven, packaging line. Machine centers belong to a parent work center; the work center can have multiple machine centers under it (an assembly cell with three workstations). Operations can be planned against a work center (any machine within) or a specific machine center. Machine centers carry the same fields as work centers plus: - **Parent Work Center** — the work center this machine belongs to. - **Maintenance Calendar** — scheduled downtime. ## Shop calendars A **shop calendar** is a weekly schedule of working / non-working time: - **Working days** of the week. - **Working hours** per working day (e.g. 8am-5pm with a 1-hour lunch). - **Holidays** — closed days even if normally working. - **Special overtime** — extended hours on specific dates. Calendars roll up to work centers and down to machine centers. Capacity planning honours the calendar — operations can't be scheduled outside the working window. ## Routings A **routing** describes the sequence of operations to make an item. Each operation specifies: - **Operation No.** — the step sequence. - **Type** — Work Center or Machine Center. - **No.** — which work / machine center. - **Description** — what's being done. - **Setup Time** — per-run setup independent of quantity. - **Run Time** — time per unit. - **Wait Time** — between operations (cooling, drying, queue). - **Move Time** — between work centers. - **Send-Ahead Quantity** — if subsequent operation can start before this one completes for the full lot. - **Concurrent Capacities** — if multiple workers can run in parallel. Routings can be **serial** (operation 1 must finish before operation 2 starts) or **parallel** (operations can overlap). Most are serial. ## Routing versions Routings are versioned the same way as BOMs — multiple versions per finished item with effective dates. Changes to the manufacturing process activate as a new routing version with a future effective date; planning honours which version applies for which dates. **Cost flow.** - **Setup time + Run time × Quantity** = total time on the work / machine center. - Time × Direct Unit Cost = direct capacity cost. - Indirect Cost % adds overhead. - The total capacity cost is consumed into WIP, then absorbed into the finished item's cost. For standard-cost items, the standard captures the expected capacity cost; variances post to variance accounts when actual differs. ## Subcontracted operations A routing operation can be marked **Subcontracted** — done by an external vendor rather than internally. Subcontracted operations auto-create purchase orders to the vendor when the production order releases. The vendor's invoice maps back to the operation's cost flow. ## Capacity planning Master planning considers work / machine center capacity: - The planning engine calculates load — minutes / hours required per period. - Compares load against available capacity from the calendar. - Suggests rescheduling when load exceeds capacity (in finite mode) or warns (in infinite mode). Business Central's capacity planning is functional but less sophisticated than Dynamics 365 SCM's; complex finite scheduling typically requires an APS add-on. **Reports.** - **Capacity load** — load per work center per period. - **Routing cost** — cost analysis per item per routing. - **Variance reports** — actual vs standard capacity cost. **Common pitfalls.** - **Incorrect setup / run times** — production orders schedule wrong; floor planning becomes unreliable. - **Shop calendar mismatches** — actual operations don't reflect the configured calendar; capacity planning is wrong. - **Routings without versions** — process changes overwrite history; historical production orders look wrong. ## Operational reality Routings and capacity centers reward attention to detail. The data is the operational model of manufacturing; sloppy data makes the system unusable. --- # Run book operations after Dynamics 365 go-live How to run Dynamics 365 in steady-state — daily, weekly, monthly, and release-wave operations, with the run book that captures who does what when. Source: https://www.solvingdynamics365.com/guides/run-book-operations-after-dynamics-365-go-live Section: Implementation / Operations & support Published: 2026-08-13 Go-live is the start, not the finish. A Dynamics 365 system needs ongoing operation — monitoring, periodic maintenance, release-wave updates, capacity management, security review, user support. The **operations run book** captures who does what when. Without it, operational work happens ad-hoc; with it, the system stays healthy at a known cost. **The run book's role.** A run book is a documented set of recurring procedures, each with: - **Procedure name** — what's done. - **Trigger** — when it happens (daily, weekly, monthly, on event). - **Owner** — accountable role / person. - **Steps** — detailed how-to. - **Validation** — how to know it succeeded. - **Escalation** — what to do if something goes wrong. - **Last updated** — when the procedure was reviewed. The run book lives in a shared location accessible to the operations team — typically Confluence, SharePoint, an Azure DevOps wiki, or a similar collaboration tool. **Daily operations.** - **Application Insights review** — check tenant telemetry for errors, slow operations, anomalies. 10 minutes of dashboard glance. - **Job queue / batch failures** — review failed jobs; investigate top failures. - **Integration health** — verify cross-system flows running successfully. Webhook deliveries, Service Bus queues, scheduled imports. - **User support tickets** — triage incoming. New tickets categorised; high-priority assigned for same-day work. - **Service health** — Microsoft service status; any incidents affecting your tenant. Total daily ops effort: 30 minutes to an hour for a mid-sized tenant in steady state. **Weekly operations.** - **Capacity review** — Dataverse storage, API call usage, AI Builder credit consumption. Trend against thresholds. - **License review** — newly-added users; license alignment; unused licenses. - **Power Platform inventory review** — new apps, flows; orphaned assets from departed users. - **Solution health review** — any failed deployments; release pipeline status. - **Security review** — access changes; privileged role grants; suspicious activity logs. - **Bulk delete jobs** — verify scheduled cleanup is running. - **User training metrics** — adoption / engagement statistics; gaps identified. Total weekly ops effort: 1-2 hours. **Monthly operations.** - **Period close support** — finance close is monthly; ops team supports with batch monitoring, error resolution, escalation handling. - **Compliance review** — audit logs reviewed; any access or change anomalies investigated. - **Backup verification** — point-in-time restore drill to a sandbox; verify the restore process actually works. - **Performance review** — slow operations; high-load pages; query analysis. - **DR scenario rehearsal** — once a quarter or every 6 months; full DR procedure tested. - **Power Platform governance review** — new apps deployed; compliance status; risk apps flagged. - **Vendor invoices / contract review** — license invoices reconciled; contract terms revisited. Total monthly ops effort: half a day to a day. **Release-wave operations.** Every 6 months when a Microsoft release wave (Wave 1 in April, Wave 2 in October) approaches: - **8 weeks before**: review Microsoft's published Release Plan; identify features to enable, deprecations affecting our tenant. - **6 weeks before**: install preview build in a sandbox; run regression suite; verify extensions / customisations. - **4 weeks before**: brief business stakeholders on changes; update documentation. - **2 weeks before**: training users on new features they'll see. - **Wave week**: verify production update; immediate post-update validation; user-facing communication. - **2 weeks after**: post-update review; bug fixes / configurations adjusted. Total release-wave effort: 2-3 days spread across the 8-week window. **Incident response.** When something breaks: - **Severity 1 (system unusable for many users)** — immediate response. Escalate to partner; engage Microsoft Support if needed; alert leadership. - **Severity 2 (significant impact for some users)** — same-day response. Internal investigation; partner engagement if needed. - **Severity 3 (minor inconvenience)** — within-day response. Standard ticket handling. Documented in the run book; everyone knows the playbook. **Quarterly operations.** - **Risk register review** — operational risks identified; mitigation status. - **Roadmap planning** — features in pipeline; capacity for build work. - **Steering committee** — leadership review of system health, costs, value. - **Annual cost review** (when in scope) — license costs vs value; renegotiation opportunities. **Annual operations.** - **Full DR drill** — complete disaster recovery rehearsal. - **Security audit** — full review of access, configurations, policies. - **Vendor performance review** — partner, ISV evaluations. - **Strategic review** — does the system still fit the business? Major changes warranted? - **License optimisation** — comprehensive license audit (see the license optimisation guide). **Who runs operations.** - **Customer's internal IT** — typically owns operations day-to-day. - **Implementation partner** — provides escalation and specialist support. - **Microsoft Support** — for platform-level incidents (often escalated through the partner). Roles documented in the run book — who calls Microsoft, who calls the partner, who handles incidents. **Common pitfalls.** - **No run book** — operations happen ad-hoc; key procedures rely on tribal knowledge. - **Run book without ownership** — procedures listed but no clear owner; nothing happens. - **Run book unmaintained** — procedures from go-live still listed; current procedures undocumented. - **Tool sprawl** — different procedures live in different places; ops team can't find them. ## Operational reality Run book operations are the unglamorous infrastructure of running a Dynamics 365 system well. Build the run book during hypercare; mature it across the first six months; treat it as a living document. The cost is small; the system's reliability over years is substantial. --- # Sales and purchase agreements in F&O How Dynamics 365 Supply Chain handles sales and purchase agreements — commitments, releases, fulfilment tracking, and the integration with planning. Source: https://www.solvingdynamics365.com/guides/sales-and-purchase-agreements-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 **Sales agreements** and **purchase agreements** in Dynamics 365 Supply Chain Management are the formal mechanism for long-term commitments between two parties — frame agreements where a quantity, period, and price are fixed, and individual orders are "released" against them over time. They replace the older Business Central concept of *blanket orders* with a richer commitment model. ## The shape of an agreement A **sales agreement** is a parent record carrying: - **Customer** — who's committing to buy. - **Effective period** — start and end dates of the commitment. - **Default fields** — payment terms, delivery terms, currency, etc. - **Lines** — what's being committed to: - **Product Quantity Commitment** — "buy 1000 units of Product A over the period". - **Product Value Commitment** — "buy €100,000 worth of Product A". - **Product Category Quantity Commitment** — quantity across a category. - **Product Category Value Commitment** — value across a category. - **Value Commitment** — overall value across all products. **Purchase agreements** mirror the structure on the procurement side. ## Releases Against an agreement, **release orders** are created — standard sales orders (or purchase orders) referencing the agreement. Each release decrements the agreement's remaining quantity or value. The system enforces: - Cannot release more than the committed amount. - Cannot release outside the effective period. - Pricing comes from the agreement (overriding the customer's standard price list). - Other terms (payment, delivery) default from the agreement. ## Fulfilment tracking The agreement view shows progress: committed, released, delivered, invoiced, remaining. Visibility for both sides: - The customer-facing salesperson knows how much of the customer's commitment is still to release. - The supply-chain side plans against the *expected* releases, not against ad-hoc orders. ## Integration with planning Master planning honours sales agreements — the planning engine can forecast against open agreement quantities, ensuring supply is in place to meet the commitment. The forecast pattern: if the customer committed to 1000 units over the year, the planner expects ~250 per quarter and pre-positions supply. ## Purchase-side mirror Purchase agreements work the same. A frame deal with a key supplier — "we'll buy 50,000 units of raw material A this year at €5/unit" — creates a purchase agreement; individual purchase orders release against it; supplier price honoured for the duration regardless of market movement. ## Pricing Agreement pricing can be: - **Fixed** — the agreed price holds for the duration. - **Discount %** — discount off the standard price list at release time. - **Markup %** — for cost-plus arrangements. - **Tiered** — different prices at different volume bands within the commitment. ## Renewals Agreements expire on the end date. Renewal workflows in Power Automate can prompt the salesperson 30/60/90 days before expiry to negotiate the next year's commitment. ## Reporting Sales agreement reports: - **Customer commitment summary** — what every customer is committed to. - **Fulfilment progress** — % consumed across active agreements. - **At-risk agreements** — agreements where the customer hasn't released enough to consume the commitment, suggesting expiry without full delivery. - **Pricing analysis** — actual vs committed price across the portfolio. **Common pitfalls.** - **Agreements that drift** — released against but never tracked to closure; expire silently. - **Pricing misalignment** — agreement price changed after creation; some releases at old price, some at new. - **Multi-currency complications** — agreement in customer currency but cost in supplier currency; FX swings between commitment and fulfilment. ## Operational reality Agreements demand discipline — formal commitment management, active tracking, scheduled renewals. The reward is predictable revenue and supply, and tighter customer/supplier relationships. The cost is the operational discipline; ignored, the agreements become bureaucratic noise. --- # Sales and purchase returns in Business Central How Business Central handles returns — return orders, credit memos, exact cost reversal, the difference between return-receipt and credit-memo flows. Source: https://www.solvingdynamics365.com/guides/sales-and-purchase-returns Section: Foundations Published: 2026-05-01 Returns processing is one of those areas everyone hopes won't matter and that always does. Business Central handles returns through dedicated **return order** and **credit memo** document types, with cost reversal mechanics that keep inventory value and the GL straight. ## Sales returns — the typical flow A customer wants to return goods. The seller's sequence: 1. Create a **Sales Return Order** (a return-flavoured sales document). The user can manually enter the items being returned, or pull from a previously-posted shipment using **Copy Document** which fills in the original items, quantities, prices, and references. 2. **Get Posted Document Lines to Reverse.** When tied to a specific historical sale, this function pulls the exact lines and ensures cost reversal matches the original cost — not the current average. This is critical for FIFO and Specific costing items. 3. The return order is **released** and the **return receipt** is posted when the goods physically arrive back. Inventory goes up; item ledger entries are inbound with the *exact* cost from the linked outbound. 4. A **sales credit memo** is posted (either from the return order directly or as a separate document) to credit the customer. The customer ledger is reduced; GL revenue is reversed; COGS is reversed. ## Two-step vs one-step The above is the **two-step return** flow (return receipt + credit memo). It's the right pattern when: - Goods physically come back. - The credit memo timing differs from the receipt timing. - Inspection or refurb of the returned goods is required before credit. A **one-step** alternative is to post a **sales credit memo** directly without a return receipt. Used for credits that don't involve physical returns — pricing adjustments, billing corrections, customer service goodwill. No inventory impact; just AR and GL. **Purchase returns — the mirror image.** 1. Create a **Purchase Return Order**. 2. **Get Posted Document Lines to Reverse** from the original purchase receipt to ensure cost reversal at the exact landed cost. 3. Post the **return shipment** (inventory leaves the seller's warehouse heading back to the vendor) and the **purchase credit memo** (vendor balance reduced). Or, for pure billing corrections without physical movement, post a **purchase credit memo** alone. ## Exact cost reversal This is the non-obvious feature that matters. Standard inventory accounting under FIFO would value a returned item at the *next FIFO layer* cost when it comes back — which is wrong if the original sale was at an older, different cost. **Exact Cost Reversing** option, set on the return order header, forces the return to inherit the exact cost of the original outbound (or inbound) transaction, restoring inventory value to where it was before the original transaction. Always use Exact Cost Reversing for genuine returns. The setting is on by default when **Get Posted Document Lines to Reverse** is used. ## Return reasons Return orders carry a **return reason code** that classifies the return — defective, wrong item, customer error, no longer needed. Reason codes feed quality reporting and supplier scorecards. ## Restocking charges A sales credit memo can carry a restocking charge line — a small additional charge to the customer for processing the return — posted to a configured GL account. ## Reporting Returns analysis reports show return volume, value, reason codes, and supplier-side patterns. The data is invaluable in supplier reviews and product quality programmes. --- # Sales and purchasing in Business Central How the order-to-cash and procure-to-pay flows work in Business Central — quotes, orders, invoicing, requisitions, and approvals. Source: https://www.solvingdynamics365.com/guides/business-central-sales-and-purchasing Section: Business Central / Sales & purchasing Published: 2026-05-01 Updated: 2026-08-30 The sales and purchasing modules are where most day-to-day Business Central users spend their time. Both follow the same document-driven pattern — quote → order → shipment/receipt → invoice → posting — which keeps the system consistent and easy to learn. Understand the pattern once and you understand half the application: the same logic that turns a sales order into a posted shipment turns a purchase order into a posted receipt, a transfer order into a transfer shipment, and a return order into a reversal. ## Sales (order-to-cash) Sales starts with a customer card carrying credit terms, prices, currency, and posting groups. From there, salespeople create **sales quotes**, which convert to **sales orders** once accepted. Orders can be partially or fully shipped (creating posted shipments and inventory transactions), and partially or fully invoiced (creating posted invoices and ledger entries). Standalone sales invoices and credit memos exist for transactions that don't need order tracking. Sales returns are handled through return orders that reverse inventory and value. Two document types deserve more attention than they usually get. **Blanket sales orders** hold a negotiated quantity over a period and release call-off orders against it — the right tool for contract customers, and much cleaner than cloning orders month after month. **Drop shipments** and **special orders** link a sales line directly to a purchase line, so goods ship from your vendor to your customer without touching your warehouse; the requisition worksheet picks these up and creates the linked purchase orders for you. ## Pricing and discounts Pricing is driven by **price lists**, customer-specific prices, line and invoice discounts, and customer/item discount groups. The practical guidance: keep the structure as flat as you can. Every layer of customer-specific pricing you add is a layer someone has to maintain and a layer that makes "why did this order get that price?" harder to answer. Line discounts and invoice discounts also post differently — see the [line vs invoice discount comparison](https://www.solvingdynamics365.com/guides/sales-line-discounts-vs-invoice-discounts) before you design commission or margin reporting around them. ## Purchasing (procure-to-pay) Purchasing mirrors sales: vendor cards, **purchase quotes**, **purchase orders**, partial receipts and invoices, and posted credit memos for returns. The **requisition worksheet** plans purchases based on demand from sales, projections, or minimum stock, suggesting POs to release. A built-in **vendor item catalog** lets you map your item numbers to a vendor's, and price/discount agreements can be time-bounded. **Item charges** are the piece new implementations most often miss: freight, duty, and insurance invoices can be allocated across received lines — by amount, quantity, weight, or volume — so landed cost actually lands in inventory value rather than sitting in a freight expense account distorting margins. If your business imports, set this up on day one; retrofitting correct landed cost after months of posting is painful. The gap between "received" and "invoiced" matters in purchasing more than people expect. Goods received but not yet invoiced sit in the **GR/IR-style interim accounts** defined by posting setup, and month-end close includes reconciling them. Three-way match — order, receipt, invoice — is the default behaviour, not an add-on. ## Approvals Both sides support **workflow-driven approvals** — sales quotes over a threshold, purchase orders over a vendor limit, customer credit-limit overrides — configured in the workflow designer and routed through users or roles. Approvers can act from Outlook, Teams, or the web client. Keep approval chains short: every additional mandatory approver is a place where an order sits still. The most successful setups approve on the exception (over threshold, new vendor, credit override), not on every document. For deeper chains and delegation rules, see [approval workflows in Business Central](https://www.solvingdynamics365.com/guides/business-central-approval-workflows). ## Documents and reporting Posted documents are immutable and can be reprinted, emailed, or sent as PDFs — and increasingly as e-invoices where the country localization or an ISV connector supports the local format. Each posted document writes to the relevant **vendor ledger**, **customer ledger**, **item ledger**, and **value entry** tables, which are the foundation for AR/AP ageing, sales analytics, and inventory valuation. ## Where implementations go wrong Three patterns account for most of the mess we see in running systems. First, **posting groups configured in a hurry**: general business and product posting group combinations decide which GL accounts every sale and purchase hits, and untangling a wrong mapping after a year of posting is a project. Second, **open orders never closed**: partially shipped orders that will never complete should be closed, or they haunt the planning engine and the order lists forever. Third, **using invoices where orders belong** — standalone invoices skip inventory reservation and warehouse handling, which is fine for services and fatal for stocked goods. Get the document flow, posting groups, and item charges right at the start, and sales and purchasing in Business Central largely runs itself; the daily work becomes exceptions and approvals rather than data entry. --- # Sales forecasting in Dynamics 365 How forecasting works in Dynamics 365 Sales — hierarchies, submitted values, AI-predicted forecasts, snapshots, and management cadence. Source: https://www.solvingdynamics365.com/guides/sales-forecasting-in-dynamics-365 Section: Foundations Published: 2026-05-01 Forecasting is where sales-management discipline gets tested. Dynamics 365 Sales ships a configurable forecasting module that fits the cadences most B2B sales organisations actually run. ## The model A **forecast configuration** defines the dimensions of the forecast: the sales **hierarchy** (org chart, territory, product line), the **period** (monthly, quarterly), and the **measures** to surface for each cell of the grid. Default measures: *Submitted* (the seller's committed number), *Best case*, *Pipeline*, *Won*, *Quota*. Custom measures (rollups, calculated columns) can be added. ## Hierarchy A forecast is most useful when it rolls up. The standard rollup is the **manager hierarchy** (your team aggregates into you), but **territory-based** and **product-line-based** hierarchies are equally common — and configurable on the same data. Multiple forecasts per organisation are normal. ## Predicted forecast Beyond seller-submitted numbers, Dynamics 365 Sales runs an **AI-predicted forecast** based on historical close rates, opportunity attributes, stage progress, and engagement signals. The predicted forecast appears alongside the submitted forecast in the grid, giving managers a number to compare against. ## Snapshots Forecasts are **versioned and snapshotted** — daily by default — so you can see how the forecast for next quarter has drifted week over week. The snapshot history is the basis for forecast accuracy analysis and for spotting drift early. ## Manager adjustments A manager can override an aggregated number with a **manager judgment**. Both the original rolled-up value and the override are stored, so audit and accuracy analysis can see where overrides happened and how they panned out. ## Workflow Forecasts have **submission states** — Draft, In Review, Submitted — and can be locked at a snapshot deadline so the team commits to a number at a moment in time. ## Inline editing Sellers and managers work directly in the forecast grid; clicking an opportunity opens a slide-out for in-place editing without leaving the forecast. ## Copilot Generative AI explains the forecast: why is this quarter trending down, which deals are slipping, which late-stage opportunities lack required actions. Natural-language queries return data without the seller leaving the grid. ## Integration Forecasts can publish to Power BI for executive dashboards, and to Excel for finance integration. Many companies still take the final number to a separate budget/forecast process in finance. ## Operational reality The mechanics are easy; the discipline is hard. Forecasting only works if pipeline hygiene is real — stale opportunities, optimistic close dates, and dead leads pollute the forecast as much as the AI predictions can correct. --- # Sales forecasting in Dynamics 365 Sales — a deep dive How Dynamics 365 Sales forecasting works — forecast configurations, hierarchies, manual adjustments, predictive forecasting. Source: https://www.solvingdynamics365.com/guides/dynamics-365-sales-forecasting-deep-dive Section: Customer Engagement / Sales Published: 2026-05-01 A sales forecast is the executive team's bet on next quarter. It drives capacity decisions, hiring, expense management, and external commitments. Dynamics 365 Sales has a multi-layered forecasting capability — from manual quota-driven dashboards to ML-powered predictive forecasts. The operational discipline around it matters more than the technical configuration. **Three flavours of forecasting.** - **Forecast** — the configurable forecast type; the workhorse. Hierarchical, period-based, role-based. - **Premium forecast** — adds AI predictive lines, premium analytics. - **Custom forecast scenarios** — additional rollups (revenue, ACV, units) per opportunity. ## Forecast configuration Admin defines: - **Forecast type** — usually by territory hierarchy or manager hierarchy. - **Time periods** — monthly, quarterly. - **Currency** — usually a single currency for the forecast, with FX conversion at source. - **Layouts** — what columns visible per period (Committed, Best Case, Pipeline, Closed Won). - **Rollup columns** — which opportunity fields aggregate (estimated revenue, weighted revenue, ACV). - **Forecast hierarchy** — who reports to whom for rollup purposes. Setup is non-trivial; expect 1–2 weeks for an initial configuration with stakeholder alignment on what's measured. ## Hierarchy A typical sales org has SDR → Account Executive → Manager → Director → VP → CRO. Forecast rolls up this hierarchy: - AE's forecast = sum of their opportunities, manually committed amount. - Manager's forecast = sum of AE forecasts, with manager's manual adjustment. - Director's forecast = sum of manager forecasts, with director's adjustment. At each level, the user sees their team's roll-up and can override (add or subtract from the rolled-up number). The override captures the leader's judgment about deals beyond the system's view. ## Forecast categories Each opportunity carries a **forecast category**: - **Pipeline** — early; not committed. - **Best Case** — could win, not confident. - **Commit** — confident it'll close in the period. - **Closed Won** — done. - **Omitted** — excluded from forecast. Rep updates the category as deals progress. The forecast aggregates per category: pipeline view shows total pipeline; commit view shows what reps have promised. ## Manual adjustments Critical and frequently misunderstood. The manager sees the rolled-up commit of their reps. They believe the actual commit number should be different (some reps over-call, others under-call). They enter a manual adjustment: +$50K (I'll bring in $50K more than they're showing) or –$30K (I doubt their pipeline). The adjustment passes up the hierarchy as part of the manager's commit. This is the human judgment layer. A forecast without manual adjustments is just the sum of rep optimism. ## Underlying data Forecast pulls from opportunities. The fields that matter: - **Estimated revenue** — the deal value. - **Estimated close date** — which period the deal lands in. - **Probability** — implicit in the forecast category. - **Forecast category** — manual category. - **Owner** — who's the rep. A clean forecast requires clean opportunity data. Garbage in → garbage out is the dominant failure mode. ## Predictive forecasting (Premium) Uses ML to score: - **Win probability** — likelihood the deal closes won. - **Predicted close date** — when (revised vs rep's manual date). - **Predicted revenue** — what's likely to come in. The system aggregates predictions across the team and presents a "predicted forecast" alongside the manually-committed number. Comparing the two reveals where rep judgment systematically over- or under-calls. ## Quotas Each rep, manager, etc. has a quota for the period. The forecast overlay shows commit vs quota: - **% to quota** — how much of the goal is in commit. - **Gap to quota** — how much more is needed. Forecast doesn't drive quotas directly (quotas come from sales ops processes) but the comparison drives the conversation. **Forecast operational rhythm.** - **Weekly forecast call** — managers review with their reps; reps update categories. - **Manager review** — managers' commits roll up, leaders make adjustments. - **Monthly close-of-period** — actual closed vs forecast; variance analysis. - **Quarterly recalibration** — quotas adjusted, hierarchies refreshed. This rhythm is the management process; the system supports it but doesn't replace it. ## Snapshots and historical forecast Forecasts can be snapshotted weekly to compare "what I committed in Week 1" vs "actual." Variance analysis (commit accuracy by rep, by team) drives coaching. **Common pitfalls.** - **Forecast as a vanity dashboard.** Numbers entered, no leadership review; no behavioural impact. - **Category meanings drift.** Reps interpret "Commit" loosely; some include best case. Standardise definitions and enforce in coaching. - **Hierarchy not maintained.** Reps reorganise but the forecast hierarchy doesn't; rollups wrong. - **Opportunity hygiene poor.** Stale opportunities clogging pipeline; forecasts based on dead data. - **Predictive forecast vs manual divergence ignored.** ML says $X, reps commit $Y, leaders don't reconcile; insight wasted. ## Where it sits in the broader stack Beyond Dynamics, large sales organisations layer Clari, BoostUp, Outreach Commit on top for additional analytics. Dynamics forecasting is the system of record; specialist tools add coaching workflows, scenario modelling, and external data overlays. Whether to add layers depends on the org's sophistication; Dynamics's native forecasting is sufficient for most mid-market sales teams. --- # Sales line discounts vs invoice discounts in Business Central How the two discount mechanisms in Business Central differ — line-level vs document-level — and the configuration choices that make them coherent. Source: https://www.solvingdynamics365.com/guides/sales-line-discounts-vs-invoice-discounts Section: Foundations Published: 2026-05-17 Business Central has two distinct discount mechanisms — **line discounts** and **invoice discounts** — that look similar at first glance but compute and post differently. Understanding the difference and configuring them coherently is the difference between predictable margin reporting and constant reconciliation surprises. ## Line discounts A **line discount** is applied to a single sales line. It can come from: - A manual override on the line (the seller types 10% in the *Line Discount %* field). - A **sales discount** in a price list that intersects customer + item + quantity criteria. - A **customer-specific discount** on a price list bound to the customer's group. - A **campaign discount** active for the customer. The discount reduces the *line amount* before VAT and posting. The system records both the original price and the discounted amount on the posted document; the GL posting reflects the discounted revenue. ## Invoice discounts An **invoice discount** is applied to the *whole document* — a percentage off the document total, or a fixed amount across the whole invoice. It comes from: - **Invoice discount table** — customer-specific minimum amount tiers ("If invoice over 10,000, give 5% off the whole invoice"). - **Manual entry** at posting time by the seller. The invoice discount is calculated *after* line discounts. It distributes proportionally across all lines, posting to a designated *Sales Invoice Discount Account* in the GL — separate from regular sales revenue. This separation makes the management view of revenue vs discount transparent. ## The interaction A single sales document can have both: - Each line's amount = unit price × quantity × (1 − line discount %). - The sum of line amounts is the *Total Excluding VAT before invoice discount*. - Invoice discount applies to that total. - The final invoice amount reflects both reductions. The GL posts: - Revenue at the line discount level (to standard sales accounts). - The invoice discount portion to the dedicated invoice discount account. This lets finance see "we discounted X via line, Y via invoice" without conflating them. **Configuration choices.** - **Calculate Invoice Discount** field on customers — toggles whether invoice discount applies automatically. - **Customer invoice discount table** — configurable thresholds and percentages per customer or customer group. - **GL accounts** for invoice discount — typically separate from line discount accounts. - **Posting setup** — whether discounts post net (reducing revenue) or gross (revenue full, discount as expense). Most implementations post net — revenue shows after discount. **When to use which.** - **Line discount** — for product-specific or quantity-based discounts. "20% off Item X for Customer Y" goes on the line. "Volume tier of 100+ units gets 10% off" goes on the line via price-list configuration. - **Invoice discount** — for whole-order incentives. "Spend over 10,000, get an additional 5% off the whole order". The customer sees a single line discount on the invoice that doesn't depend on individual items. **Reporting implications.** - **Sales by product** — line discounts directly affect product-level revenue. A product with heavy line discounts shows lower per-unit margin. - **Discount analysis** — separating line vs invoice discount lets finance see which sales tactics drive margin erosion. - **Customer profitability** — both discount types reduce the customer's contribution; combined view is the meaningful one. **Common pitfalls.** - **Stacking unintended discounts.** A customer-specific line discount plus a campaign discount plus an invoice discount can cumulate to give away more than intended. Audit periodically. - **Wrong GL account configuration.** Invoice discount posting to the same account as revenue obscures the distinction. - **Manual overrides without policy.** Sellers manually entering discounts at posting without managerial discipline erodes margin over time. ## Operational discipline Define the discount policy at customer-group level; use price lists for systematic discounts; reserve manual line discounts for exceptions; use invoice discount tables for whole-order incentives. Review quarterly. ### Frequently asked questions **What is the difference between a line discount and an invoice discount?** A line discount reduces a single sales line — from a manual override, a price list, a customer-specific discount, or a campaign. An invoice discount applies a percentage or fixed amount to the whole document, is calculated after line discounts, and distributes proportionally across lines. **How do the two discounts post to the general ledger?** Line-discounted revenue posts to the standard sales accounts; the invoice discount portion posts to a dedicated Sales Invoice Discount account, so finance can see how much was given away at line level versus order level. **How do I make invoice discounts apply automatically?** Set Calculate Invoice Discount on the customer and configure the customer invoice discount table with minimum-amount thresholds and percentages per customer or customer group. **What is the most common discount mistake?** Unintended stacking — a customer-specific line discount plus a campaign discount plus an invoice discount can give away far more than intended. Define policy at customer-group level, use price lists for systematic discounts, and audit quarterly. --- # Sales mobile and offline in Dynamics 365 The Dynamics 365 mobile experience for sellers — Power Apps mobile, offline sync, conflict handling, and what works well vs what doesn't. Source: https://www.solvingdynamics365.com/guides/sales-mobile-offline Section: Customer Engagement / Sales Published: 2026-05-01 The Dynamics 365 mobile experience for sellers runs primarily through the **Power Apps mobile app** on iOS and Android. The same app that hosts model-driven Power Apps also hosts the Dynamics 365 Sales, Customer Service, and Field Service apps. For sellers in the field — visiting customers, working between meetings, attending events — mobile is the primary work surface. ## The Power Apps mobile app Available free from the Apple App Store and Google Play. Sign in with the user's Microsoft Entra ID; the app discovers which Dynamics 365 model-driven apps the user has access to and lists them. Tap an app, and the experience renders forms, views, and dashboards in a mobile-friendly layout. ## Form design for mobile Model-driven forms render on mobile through the same form designer; mobile-specific properties let the form-designer hide non-critical columns, reorder fields, and use **mobile-only forms** where the desktop and mobile experiences should diverge. Best practice: - Show the seller's *next actions* first — open opportunities, today's meetings, recent activities. - Hide configuration-style fields that sellers rarely change. - Keep forms short — three to five sections, not fifteen. ## Offline mode A serious differentiator. The Sales mobile experience supports **offline access** for configured tables — the seller can browse, edit, and create records without connectivity, syncing when online. The configuration determines: - **Offline profiles** per security role — which tables, which views, which related tables, how many records, how recent. - **Filtering** — only customer-owned accounts, only opportunities for this seller, only the next 30 days of appointments. - **Storage** — bounded by device storage and a configurable limit. ## Sync behaviour Offline data syncs: - When connectivity returns. - Periodically in the background. - On user request from the app. Sync is incremental — only changes since the last sync are transferred — and uses Dataverse change tracking for efficiency. ## Conflict resolution If the same record is edited offline by the seller and online by someone else, sync detects the conflict and surfaces it for resolution. Default policies (last-writer-wins, client-wins, server-wins) are configurable; complex policies (field-level merge) require custom code. ## Outlook and Teams integration The seller's mobile email and meetings are in Outlook; the Sales app coordinates: opening an email or meeting from a tracked customer shows related CRM context inline. Teams calls and meetings on mobile capture activity records back to CRM if Server-Side Sync and the Dynamics 365 App for Outlook are configured. ## Mobile push notifications Configured Power Automate flows can push notifications to the mobile app — new high-priority lead, opportunity stage change, contract due for renewal, customer satisfied survey response. ## Copilot on mobile Mobile-aware copilot features summarise records, draft replies, and answer questions from the app. The mobile UI is more constrained than desktop; the most valuable copilot uses are short-form (summarise this customer, draft this reply). **Limits.** - Some complex form controls and custom PCF controls don't render identically on mobile; test before assuming parity. - Offline-mode performance degrades with very large offline data sets; bound the offline profile carefully. - Some integrations (embedded Power BI, complex iframes) are unfriendly on small screens. ## Operational reality The seller's mobile experience is the seller's daily reality. Spend serious form-design and offline-profile-design time on it — far more than typical for the desktop experience. --- # Sales prices and price lists in Business Central How Business Central handles pricing — the modern price list model, prioritisation, discounts, and the migration from the old per-customer pricing tables. Source: https://www.solvingdynamics365.com/guides/sales-prices-and-price-lists-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 Pricing in Business Central went through a substantial redesign a few years ago. The old per-customer / per-item discount-and-price tables — scattered across multiple objects, hard to maintain at scale — were replaced by a unified **price list** model. Most new tenants run the new model exclusively; some upgraded tenants still carry historic structures. Understanding the modern model and how prices resolve at the line is essential. ## The price list A **price list** is a header carrying a code, a description, a status (Draft, Active, Inactive), a currency, a start/end date, a definition (Sales or Purchase, Price or Discount), and a *source* — Customer, Customer Price Group, Campaign, All Customers, or specific Salesperson. Underneath the header are **price list lines**, one row per item-and-variant-and-unit-of-measure with the price or discount. ## Price vs discount A price list can be a **price list** (sets the absolute unit price) or a **discount list** (applies a percentage discount on top of an underlying price). The two compose: a customer-specific discount list applies on top of the standard price list. ## Source priorities When a sales line is created, the system finds the best applicable price by checking sources in priority order: 1. **Customer-specific** price lists (highest priority). 2. **Customer Price Group** the customer belongs to. 3. **Campaign** active for the customer. 4. **All Customers** (lowest priority, the default catalogue). Within each source, the most-specific item / variant / UoM line wins. Higher-priority sources override lower; an active customer-specific price beats the catalogue price. ## Effective date Price list lines respect start and end dates, so promotional pricing can be set in advance and expires automatically. The system uses the *order date* (configurable to *posting date*) to decide which prices are valid. ## Customer Price Groups A **customer price group** is a tag attached to customers (or defaulted from a customer template) used by price lists to apply the same prices to many customers without listing each one. Common: "Distributors", "End-Customers", "Strategic Accounts", with different price lists. ## Currency A price list is currency-specific. A customer transacting in EUR uses the EUR price list; the same customer in USD uses a separate one. ## Migration from old structures Older BC tenants may still have the legacy *Sales Price* and *Sales Line Discount* tables in addition to price lists. The *Feature Management* page lets administrators enable the new model and run a migration that converts the old data into price lists. **Operational discipline.** - **One catalogue price list** for All Customers. Maintain it cleanly. - **A handful of customer-price-group lists** for major customer segments. - **Customer-specific lists** only for genuine exception pricing — strategic accounts, contracted prices. - **Time-bounded promotions** as separate lists with start/end dates. Avoid scattering customer-specific prices across many sources. The clearer the source hierarchy, the easier troubleshooting and audit. --- # Sales tax setup in Dynamics 365 Finance How to configure US-style sales tax in F&O — tax authorities, tax codes, tax groups, item tax groups, and the integration with Avalara / Vertex. Source: https://www.solvingdynamics365.com/guides/sales-tax-setup-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 US-style **sales tax** is fundamentally different from European-style VAT. Where VAT is harmonised across countries with standard rates, sales tax in the US is fragmented — 45 states, thousands of local jurisdictions (county, city, special districts), each with their own rates, taxable categories, and exemptions. Dynamics 365 Finance supports US sales tax natively and integrates with **Avalara** and **Vertex** for the deep complexity most US operations face. ## The F&O native engine The native sales tax engine works through: - **Sales tax authorities** — the regulator (state, county, city). Each has a tax-payment recipient configured. - **Tax codes** — specific rates for specific authorities. e.g. NY State 4%, NYC City 4.5%, NY MCTD 0.375%. - **Tax groups** — bundles of tax codes that combine for a given customer / location. A New York City customer gets the NY State + NYC + MCTD group. - **Item sales tax groups** — bundles of tax codes that apply to a given item. Most goods are taxable; some (groceries, prescription drugs in many states) are exempt. - **Intersection** — the customer's tax group × the item's item tax group = which tax codes actually apply. - **Settlement periods** — when each authority's tax is settled and remitted. ## The challenge of US sales tax Sourcing — which jurisdiction applies — depends on whether the state uses **origin-based** sourcing (where the seller is located) or **destination-based** sourcing (where the customer receives). Most states are destination-based; this means a single seller must compute tax based on the customer's address, with potential exposure across thousands of jurisdictions. ## Nexus A seller has **tax nexus** in a state — and must collect tax there — if they have physical presence, economic presence (revenue / transaction thresholds, post-**South Dakota v Wayfair** 2018), or specific business activities. Determining nexus is a tax-advisory question; F&O collects tax in jurisdictions configured to be in scope. ## Why Avalara / Vertex The native engine handles tax computation if you maintain the rates and rules manually. For a seller selling into 5 states with 10 jurisdictions, manual maintenance is feasible. For a seller selling nationwide, with rates that change frequently, with product-specific taxability rules, and with exemption certificate management — manual maintenance is infeasible. **Avalara** and **Vertex** are tax-engine SaaS platforms that maintain the rates / rules and provide API-level tax computation. **The integration pattern with Avalara / Vertex.** 1. F&O has a configured Avalara / Vertex connector. 2. At sales-order creation (and re-validation at posting), F&O calls Avalara / Vertex with the transaction details: ship-to address, ship-from address, products, customer category, exemption certificate ID. 3. Avalara / Vertex returns the tax computation: which authorities, which rates, which exemptions, total tax. 4. F&O stores the tax computation on the transaction. 5. At posting, the tax posts to the standard sales tax accounts but with the Avalara / Vertex breakdown. 6. Periodic returns: Avalara / Vertex can file directly to authorities (Avalara Returns) or provide return-prep data for the seller's tax team. ## Exemption certificates Many B2B transactions are exempt — wholesalers, manufacturers, resellers, non-profits, government. Exemption certificates document the buyer's exempt status. Avalara CertCapture / Vertex Returns / similar tools manage the certificate lifecycle — capture, verification, expiry, renewal, audit. **Special rules.** - **Tax holidays** — states declare temporary exemptions for specific products in specific periods (back-to-school, hurricane preparedness). - **Tax-included pricing** — some B2C scenarios price tax-inclusive; F&O supports though most B2B is tax-exclusive. - **Marketplaces** — sellers via Amazon / eBay / Walmart marketplaces typically have the marketplace collect tax on their behalf; the seller's F&O records the marketplace-collected tax separately. - **Digital goods** — taxability varies wildly by state for digital products and services. ## Compliance and audits US sales tax audits are rigorous. Documentation requirements: - Every taxable transaction with full breakdown. - Every exempt transaction with the supporting certificate. - Periodic returns filed on time per authority. - Reconciliation between collected tax and paid tax. ## Operational reality US-based F&O implementations almost always integrate with Avalara or Vertex. The native engine is functional but isn't built for nationwide US complexity at scale. Plan for the integration from day one. --- # Sales territories and quotas in Dynamics 365 How territory management and quotas work in Dynamics 365 Sales — assignment rules, hierarchy, and the integration with forecasting. Source: https://www.solvingdynamics365.com/guides/sales-territories-and-quotas Section: Customer Engagement / Sales Published: 2026-05-01 Once a sales team is larger than a handful of people, **territories** and **quotas** become essential structural elements: who's responsible for which prospects and accounts, what's expected of them in revenue, and how performance is tracked. Dynamics 365 Sales models both with first-class objects and integrates them into forecasting and reporting. ## Territories A **territory** in Dynamics 365 Sales is a defined slice of the market: - **Geographic** — by country, region, postal code. - **Industry** — by industry vertical. - **Account-size** — by revenue band, employee count. - **Named account** — a specific list of accounts. - **Hybrid** — combinations of the above. Each territory has a manager and a set of assigned sellers (one seller can belong to multiple territories; one territory can have multiple sellers). ## Territory assignment Accounts and leads are tagged with a territory either: - **Manually** — the salesperson or admin assigns at record creation. - **Auto-assigned** — via Power Automate flow or routing rules that evaluate the record's attributes (country, industry, size) and set the territory accordingly. - **Via Customer Insights – Data** — for sophisticated enterprises with complex assignment rules. ## Territory hierarchy Territories support parent-child relationships, so reporting rolls up: Country → Region → Local Territory. A manager at the regional level sees aggregated pipeline across local territories. ## Quotas A **quota** is the revenue or unit target assigned to a seller (or a territory, or a team) for a period — quarterly, annually, or both. Dynamics 365 Sales models quotas through: - **Goal** records — the entity that holds the target value. - **Goal metric** — what's measured (revenue, won opportunity count, new logos). - **Goal hierarchy** — quotas can roll up from individual sellers to managers to regions. - **Actual calculation** — automated rollups from opportunity / order data based on configurable rules. ## Quota cadence Most organisations set quotas annually with quarterly cadences, often with split targets per quarter to handle seasonality. Quotas can be: - **Fixed** — same amount per quarter regardless. - **Time-weighted** — Q4 is 30%, Q1 is 20%, reflecting fiscal seasonality. - **Manually adjusted** — for mid-year re-orgs or one-off changes. ## Integration with forecasting **Sales forecasting** in Dynamics 365 Sales rolls up opportunity pipeline by seller and compares to quota: pipeline coverage ratio, gap to quota, predicted close vs target. Forecasts snapshot weekly; managers see drift over time. ## Commission integration Quotas often link to commission calculations — sellers earn rate X up to quota, rate Y above. Dynamics 365 Sales doesn't ship a full commission engine; partners offer commission ISVs (Spiff, Performio, CaptivateIQ, Iconixx) that integrate with the quota and actual data. **Operational discipline.** - **Quota-setting cadence** — annual quotas set 4–6 weeks before the year starts, with manager sign-off. Late quotas demotivate. - **Mid-year adjustment** — re-orgs, market changes, major customer changes warrant quota adjustments. Document and approve. - **Coverage targets** — pipeline coverage of 3× to 5× the quota is healthy; lower means at-risk, higher means inflated pipeline. - **Win-rate analysis** — quotas without honest win-rate context are fantasy. Calibrate quota to historical conversion. ## Where it stops Very sophisticated incentive compensation, multi-currency quotas across multi-entity groups, or complex split-credit scenarios (one deal credited 60% to inside sales, 40% to field) usually need specialist commission/quota tools. For mainstream quota tracking, Dynamics 365 Sales's built-ins are sufficient. --- # Sales territory design in Dynamics 365 — a deep dive How to design and manage sales territories in Dynamics 365 Sales — territory hierarchies, account assignment rules. Source: https://www.solvingdynamics365.com/guides/dynamics-365-sales-territory-design-deep-dive Section: Customer Engagement / Sales Published: 2026-05-01 Sales territories define who owns which customers. **Dynamics 365 Sales** models territories as a hierarchical structure with account / lead assignment rules. Done well, territories give clear ownership and balance workload; done badly, they create disputes and gaps in coverage. **Territory model.** - **Territory** — named region (US-Northeast, EMEA-North, etc.). - **Manager** — the territory's leader. - **Members** — sales reps in the territory. - **Hierarchy** — territories nest under parent territories. **Territory criteria.** - **Geographic** — by country, region, state, city, postal code. - **Industry** — vertical-based. - **Account size** — enterprise vs SMB. - **Product line** — sales focused on specific products. - **Hybrid** — combination. Most organisations combine multiple dimensions; matrix territories common. **Account assignment.** - **Manual** — sales ops assigns each account to a territory. - **Rule-based** — territory determined by account attributes. - **Auto-assignment** — system applies rules on account creation. For thousands of accounts, manual is impractical; rule-based essential. **Assignment rules.** ``` IF AccountAddress.Country = "Sweden" AND AccountSize = "Mid-Market" THEN Territory = "EMEA-Nordic-MidMarket" ``` Rules expressed as conditions; complex hierarchies of rules supported. **Lead routing.** - New lead created. - Auto-assignment runs. - Rule matches → routed to territory's leads queue. - Specific rep picks up. For high-volume inbound, automation crucial. **Quotas.** - Each territory has a quota. - Cascaded from regional / company quota. - Member quotas roll up to territory quota. - Track attainment. Quota structure aligns with territory structure; misalignment causes confusion. ## Territory changes Periodic redesign: - **Annual rebalance** — equalise workload across territories. - **Acquisition adjustment** — new accounts integrated. - **Reorg** — major restructure. Each change has operational impact: customers reassigned, open opportunities transferred, history maintained. **Operational implications of changes.** - **Customer relationship continuity** — long-time rep transition. - **Forecast adjustments** — pipeline owners change. - **Commission complications** — who gets credit for in-flight deals. - **Customer surprise** — "Why is someone new calling me?" Mature reorgs include change management — communications, transition periods, dual coverage during handoff. **Coverage gaps.** - Account created but no matching territory rule. - Customer in a "gap" — falls outside any defined territory. - Lead languishes unassigned. Periodic gap audits surface these; rules adjusted. **Overlapping territories.** - An account matches multiple territories. - Conflict — which territory owns? - Resolution rules or manual intervention. Cleanest: rules unambiguous. Reality: some accounts have rationale for multiple territories (mother company in one region, subsidiary in another). ## Multi-dimension matrix Modern sales orgs: - Geographic territory + product specialist. - Account exec (relationship) + solution specialist (product depth). - Two reps on one account. Dynamics supports through multiple roles per account but the policy clarity matters more than the system flexibility. **Hunter / farmer split.** - **Hunter** — pursues new logos in a geo. - **Farmer** — manages existing accounts in same geo. - Hunter passes won deal to farmer for ongoing. Territories with this split need clear handoff protocols. ## Quota relief and protection When territories change: - Reps may lose accounts they prospected — credit for in-flight deals. - Quota protection during transition periods. - Commission grace. Without protections, reorgs hurt rep motivation. **Reporting by territory.** - Revenue by territory. - Pipeline by territory. - Quota attainment. - Win rate. Standard sales reporting decomposes by territory; managers compare and coach. **Common pitfalls.** - **Manual assignment.** Doesn't scale; inconsistent. - **Stale rules.** Reality changes; rules don't. - **No conflict resolution.** Overlapping rules; deals disputed. - **Reorg without transition.** Customers and reps both unhappy. - **No quota alignment.** Territory model says one thing; quotas reflect old structure. **Best practices.** - **Document the model** — what territories, why, how assigned. - **Periodic review** — annually at minimum. - **Coverage audit** — every account has clear ownership. - **Change management** — reorgs include comms and transitions. - **Quota alignment** — structure matches. ## Territory and forecasting integration Forecasting hierarchy typically aligns with territory hierarchy: - Rep → Manager → Director → VP. - Same path for quota cascade and forecast roll-up. ## Strategic positioning Territory design is the structural decision affecting daily sales execution. Get it right and the team operates smoothly; get it wrong and disputes consume management attention. The investment in clean rules, regular review, and disciplined change management pays back in sales execution clarity. Treat territories as a strategic asset; the alternative — ad-hoc assignment and constant reorgs — costs material productivity. --- # Salesperson configuration and commissions in Business Central How Business Central tracks salesperson assignments and computes basic commissions — and where the limits are for serious incentive compensation. Source: https://www.solvingdynamics365.com/guides/salesperson-and-commissions-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 Business Central has built-in **salesperson / purchaser** master records and a basic **commission** calculation tied to them. The functionality covers simple flat-percentage commissions cleanly; complex incentive compensation needs an external tool. ## The salesperson master A **salesperson / purchaser code** is a Dataverse-like record representing an internal salesperson or buyer. Each carries: - **Code** — short identifier. - **Name** — human-readable. - **Commission %** — flat percentage for simple commission calculation. - **Email** — for routing notifications. - **Team / Phone / Job Title** — operational fields. - **Dimension defaults** — financial dimensions to attach to transactions where this salesperson is involved. The salesperson code is *not* a Microsoft 365 user account — it's a sales-team-role record. A salesperson can map to a user account through configuration, but doesn't have to. ## Assignment to customers Each customer card has a **Salesperson Code** field — the default salesperson responsible for that customer. New sales documents (quotes, orders, invoices) default the salesperson from the customer; users can override at the line level if needed. ## Per-document overrides Documents can carry a salesperson different from the customer's default — useful for splits, joint sales, internal handovers. Each posted document records the salesperson at posting time, locked for audit. ## Commission calculation The basic approach: - Each salesperson has a flat **Commission %**. - Posted sales documents accumulate commission based on the salesperson code and the percentage. - The **Salesperson Statistics** view shows commission earned per period. - Commission amounts can be posted to GL accounts through the General Posting Setup. ## Limits Real-world commission schemes are usually more complex: - **Tiered rates** — different % at different revenue bands. - **Product-specific rates** — higher commission on strategic products. - **Margin-based commission** — commission as % of gross margin, not revenue. - **Splits** — multiple salespeople sharing a deal at configured percentages. - **Accelerators** — commission rates increase above quota attainment. - **SPIFs (Sales Performance Incentive Funds)** — one-time bonuses for specific products / campaigns. - **Clawbacks** — commission reversed if the customer doesn't pay or returns goods. - **Multi-currency** — different rates per region or currency. - **New-vs-renewal** — different rates for new business vs renewal. The built-in BC commission engine handles none of this beyond the flat percentage. For complex schemes, the options are: 1. **External commission engines** integrated with BC — Spiff, Performio, CaptivateIQ, Iconixx, regional ISVs. These pull sales data from BC and compute commission externally; payouts feed back to payroll or AP. 2. **Custom AL extensions** — for moderate-complexity schemes that don't justify external tools. 3. **Excel models** outside BC — for small organisations where formality isn't worth the tool cost. ## Multi-salesperson allocation Some businesses split sales between two salespeople (inside seller, field seller, or by territory ownership). BC's built-in supports a single salesperson per document; splits typically use custom fields and reporting logic in Power BI. ## Reporting Salesperson-keyed reports cover: - Revenue by salesperson. - Margin by salesperson. - Open opportunities (if using BC's Relationships module). - Commission earned (basic flat-rate calculation). Power BI dashboards extend with team views, attainment-vs-quota, trend analysis. ## Operational reality For very simple commission schemes (single flat rate, no splits, no tiers), the BC built-in suffices. The moment the scheme has tiers, products, or splits, plan for an external commission engine. Trying to bend BC's flat percentage into complex logic creates fragile customisations. --- # Seasonal forecasting for retail on Dynamics 365 How to forecast seasonal retail demand with Dynamics 365 — Demand Planning for store-SKU seasonality, Commerce replenishment for allocation. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-retail-seasonal-forecasting Section: Industries / Retail Published: 2026-09-02 Retail forecasting has a shape that generic ERP forecasting handles badly: strong seasonality, short product lifecycles, promotions that move demand rather than create it, and a store-times-SKU matrix large enough that nobody can review it line by line. Dynamics 365 has three different tools that touch this problem, each aimed at a different size of retailer, and none of them is a complete merchandise planning suite. This guide is about choosing the right one and knowing where it stops. ## The three tools **Demand Planning** (part of Supply Chain Management, with its own app experience) is the current statistical forecasting product. It ingests historical demand at whatever grain you load — item, site, warehouse, customer group, calendar — runs a choice of models including ones that fit seasonality, and lets planners adjust the result in a worksheet before publishing it back as a demand forecast for master planning. This is the tool for mid-to-enterprise retailers on the Finance and Operations stack. The [Demand Planning overview](https://www.solvingdynamics365.com/guides/dynamics-365-demand-planning) covers the mechanics. **Commerce replenishment** is not a forecasting engine. It is an allocation and distribution engine: buyer's push to distribute a purchase across stores by weight, cross-docking to route inbound stock straight to stores, and replenishment rules that top stores up against minimums and maximums. It consumes a plan; it does not produce one. **Business Central's Sales and Inventory Forecast extension** is a lightweight monthly forecast driven by an Azure AI model. It gives a small retailer a reasonable per-item forecast for reorder decisions with essentially no setup. It does not do store-level, weekly, or promotion-aware forecasting, and it should not be asked to. ## Forecast at the grain you can actually manage The first mistake retailers make with Demand Planning is forecasting every SKU at every store every week because the tool allows it. The result is millions of series, most with sparse, noisy history, and a planner who cannot review any of it. The pattern that works: - **Forecast at category or sub-category by store cluster** — stores grouped by format, size, or climate zone — at weekly grain. The history is dense enough for the seasonal models to find a real pattern. - **Disaggregate to store-SKU** using recent sales mix, which Demand Planning does when you publish at a lower level than you forecast. Accept that the disaggregation is mechanical. - **Review exceptions, not rows.** Configure the worksheet to surface series where the model's forecast diverges from last year's actuals or the planner's override by more than a chosen band. Store clusters are also the natural unit for Commerce's buyer's push, so the forecast grain and the allocation grain line up. ## Seasonality, promotions, and new items Seasonal patterns are what the statistical models are good at, provided the history is long enough — a minimum of two full cycles, three is better. Retailers migrating from another system should load at least that much history rather than starting the clock at go-live. Promotions are where most retail forecasts go wrong. A model that sees last Easter's promoted volume as baseline demand will over-forecast this Easter's unpromoted week. Demand Planning's approach is to let you separate the history into baseline and promotional components and handle the uplift as an adjustment, but it depends on the retailer having tagged promotional periods in the history. Commerce discount data can supply the tags; wiring that up is a project step, not a checkbox. New items have no history. The standard technique is like-item modelling — copy the seasonal profile of a comparable item and scale it — which Demand Planning supports through profile assignment. Fashion retailers with hundreds of new SKUs a season will find the effort per item too high and typically need a merchandise planning ISV that handles attribute-based new-item forecasting. ## What is not in the product Be clear with the merchandising team before they see a demo: - **Open-to-buy** — the financial budget that constrains purchasing by category and period — is not a Dynamics 365 feature. It is a spreadsheet, a Power BI model over the forecast and commitments, or a merchandise financial planning ISV. - **Assortment planning and range building** are merchandising decisions the product records but does not optimise. - **Markdown optimisation** is ISV or data-science territory. - **Size-curve and pack optimisation** for apparel is ISV territory. The forecast tools produce a demand number; turning it into a buy that fits the budget and the range is still human and partner work. ## From forecast to orders Once a forecast is published, Supply Chain Management's master planning consumes it to generate planned purchase and transfer orders, netted against on-hand and open orders, with the forecast-reduction rules deciding how actual sales consume the forecast. For retailers, the useful configuration is forecasting at the distribution centre and letting Commerce replenishment handle store distribution, rather than planning every store as an independent demand point. Planning at every store produces thousands of tiny transfer orders and a warehouse that hates the planning team. On Business Central, the forecast extension feeds the item's reorder logic and the planning worksheet. It is adequate for a retailer with one or two locations and a few thousand items. Beyond that, the honest advice is that BC retailers use their POS ISV's replenishment features or an external planning tool; BC is the ledger and inventory record, not the planning brain. ## Measuring whether it works Forecast accuracy metrics are built into Demand Planning, but the retail measure that matters is stock-out rate on seasonal lines during the season and residual stock at season end. Track both by category and cluster in Power BI against the forecast that was published. A forecast that is statistically accurate but published too late to influence the buy has done nothing. --- # Segment builder in Customer Insights — Journeys How the segment builder in Customer Insights — Journeys lets marketers define audiences — visual designer, query language, dynamic vs static. Source: https://www.solvingdynamics365.com/guides/customer-insights-journeys-segment-builder Section: Customer Engagement / Customer Insights / Marketing Published: 2026-05-01 A segment in Customer Insights — Journeys is the audience for a campaign or journey. Building good segments — focused, accurate, dynamic — is the foundation of marketing effectiveness. The **segment builder** is the visual interface that lets marketers compose segment definitions without writing query code, while supporting advanced expressions when needed. **The segment concept.** - A named audience. - Defined by criteria filtering profiles. - Members computed at refresh time. - Used by journeys, campaigns, analytics. **Visual designer.** - Drag-and-drop attribute selection. - Build conditions: equals, greater than, contains, etc. - Combine with AND / OR. - Group conditions for complex logic. The visual designer covers most common cases without query language. ## Attribute sources Available attributes include: - **Profile fields** — demographic, contact information. - **Behavioural** — engagement history (opened emails, clicked links). - **Transactional** — purchases, total spend. - **Inferred** — propensity scores, lifecycle stage. - **Custom** — anything from Customer Insights — Data or Dataverse. The richer the unified profile, the more segmentation possibilities. **Conditions.** - **Demographic** — "Country = Sweden AND Age > 30". - **Behavioural** — "Opened email in last 30 days". - **Transactional** — "Total purchases > $1000". - **Engagement** — "Visited website in last 7 days". - **Negative** — "NOT in opt-out list". **Composing complex segments.** ``` (Country = Sweden OR Country = Norway) AND TotalPurchases > $500 AND NOT InOptOutList AND LastEngagement < 90 days ago ``` The visual designer supports this; complex segments need clear naming and documentation. **Segment types.** - **Static** — snapshot; doesn't update. - **Dynamic** — recalculated at refresh. - **Compound** — combination of other segments. Most production segments are dynamic. ## Compound segments Combine existing segments: - "VIP Sweden" = "Sweden segment" AND "VIP customers segment" - "Promotable Spaniards" = "Spain segment" AND NOT "Recent purchasers" This composability prevents duplicate segment logic. **Refresh patterns.** - **Continuous refresh** — near real-time as profiles change. - **Scheduled refresh** — daily / hourly batch. - **On-demand refresh** — operator-triggered. Different segments have different needs; choose based on use case. **Segment size.** - Visual indicator of estimated count. - Real count after refresh. - Track over time for trend. A segment dropping unexpectedly signals data issue or audience shrinkage. ## Profile attribute completeness Segments depend on data: - Missing data → smaller segments than expected. - Data quality issues → segments wrong. Audit profile data completeness; fill gaps where impactful. ## Negative segments Exclude: - Suppression lists (opt-outs, complaints, deceased). - Already-converted (don't re-message). - In other journeys. Negative criteria essential for clean targeting. **Time-based criteria.** - **Within last N days** — recent activity. - **More than N days ago** — dormancy. - **Specific date range** — campaign-relative. Time is a critical segmentation dimension; "active in last 30 days" segment behaves very differently than "active in last 365 days". ## Lookalike segments AI-derived: - Seed audience (e.g., VIP customers). - Find profiles similar to seed. - Useful for finding prospects. Built on Customer Insights — Data ML capabilities. **Segment in journey vs segment alone.** - **Segment alone** — used for one-off campaigns or analytics. - **Segment as journey audience** — drives journey membership. When used as journey audience: - Profiles entering segment → enter journey. - Profiles leaving segment → may exit journey or stay. The journey designer specifies entry/exit behaviour. **Performance considerations.** - **Complex queries** — refresh slower. - **Large data sets** — refresh duration. - **Frequent refresh** — system load. For high-volume marketers, segment performance affects journey responsiveness. **Common pitfalls.** - **Segment criteria too broad.** Sends generic message to wrong people. - **Segment criteria too narrow.** Tiny audience; doesn't justify campaign effort. - **Segments don't respect opt-outs.** Compliance violation. - **No segment lifecycle management.** Stale segments accumulating. - **Refresh schedule mismatch.** Segment computed daily but journey triggers hourly; lag matters. - **No documentation.** Segment definitions evolve; rationale lost. **Best practices.** - **Naming convention** — purpose, owner, refresh frequency. - **Description field** populated. - **Ownership** — each segment has a named owner. - **Periodic audit** — segments inactive 90+ days flagged for retirement. - **Suppression always applied** — opt-outs subtracted from every segment. ## Strategic positioning Segment design is one of the highest-leverage marketing activities. The segment builder makes the mechanics easy; the strategic work is understanding the audience, choosing the right criteria, and maintaining segment quality over time. Mature marketing operations treat segments as managed assets — designed, monitored, retired. The teams that take segmentation seriously have measurably better campaign performance than teams that just blast everyone with everything. --- # Sequences in the Sales accelerator How sales sequences automate seller cadence in Dynamics 365 Sales — steps, conditions, branching, and the role in inside-sales workflow. Source: https://www.solvingdynamics365.com/guides/sequences-in-the-sales-accelerator Section: Customer Engagement / Sales Published: 2026-05-01 The **sales accelerator** in Dynamics 365 Sales prioritises a seller's day with a queue of leads and opportunities ranked by AI-driven signals. **Sequences** are the cadence engine inside the accelerator — defined, repeatable sets of seller actions (calls, emails, follow-ups, LinkedIn outreach) that move a lead or opportunity forward predictably. They're how inside-sales teams turn ad-hoc prospecting into a process. ## The model A **sequence** is a list of ordered **steps**, each defining one seller activity: - **Activity type** — phone call, email, LinkedIn connection, LinkedIn message, task, custom activity. - **Wait** — a delay before the next step (1 day, 2 days, etc.). - **Branching condition** — optional logic that picks the next step based on signal (e.g. *if email was opened, go to step 5; if not opened, go to step 6*). - **Email template** — for email steps, the pre-written template (with merge fields) the seller will send. - **Notes / script** — for call steps, the script or talking points the seller should follow. A typical sequence for outbound prospecting might look like: 1. Day 1: send connection email (template A). 2. Day 2: call. 3. Day 4: send follow-up email if no response. 4. Day 6: LinkedIn connection request. 5. Day 9: second follow-up email. 6. Day 12: call. 7. Day 15: closing email — "still interested?". ## Branching on signals Sequences can branch based on detected behaviour: if the prospect opened the email, follow up sooner with a call; if they replied, move to opportunity creation; if they didn't engage, suppress further sends to avoid being marked as spam. ## Sequence assignment Leads, opportunities, accounts, or contacts can be **assigned to a sequence** — either manually by the seller or automatically by routing rules. Once assigned, the next-action queue surfaces the relevant step at the right time, so the seller never has to remember the cadence. ## The seller's daily work Inside the accelerator workspace, the seller sees: - **Today's tasks** — every sequence step due today across their assignments. - **Step details** — the relevant template, script, or notes inline. - **Quick actions** — execute the step (send email, log call, skip) with one click. - **Outcome tracking** — record outcomes that influence next step routing. ## Why sequences work Sales cadence research is consistent: the difference between sellers who close consistently and sellers who don't is usually disciplined follow-up. The average prospect needs 6–10 touches before responding; most untrained sellers give up after 2. Sequences enforce the cadence and remove the willpower problem. **Sequence design discipline.** - **Start with the team's best practices** — what do top sellers actually do? Codify that. - **Vary the channel** — calls, emails, LinkedIn alternated produce better engagement than all-email. - **Personalise within structure** — templates with merge fields and customisation room, not robotic generic sends. - **Measure outcomes per step** — which steps drive conversions? Which are noise? - **Iterate quarterly** — sequences age; refresh based on what's working. ## Copilot integration Generative AI suggests sequence step content (email phrasings, call scripts) based on the prospect's profile and the seller's intent. The seller reviews and personalises before sending. Combines structure with adaptive content. ## Where it stops Very high-volume B2C prospecting belongs in dedicated cadence tools (Outreach, SalesLoft, Apollo). For B2B inside-sales teams with hundreds of accounts each, the sales accelerator with sequences is the right answer. --- # Service Management in Business Central Business Central's service module — service items, contracts, work orders, dispatch, and where the limits sit. Source: https://www.solvingdynamics365.com/guides/business-central-service-management Section: Business Central / Service & projects Published: 2026-05-01 Updated: 2026-08-25 Service Management is a module in the **Premium** SKU of Business Central, aimed at companies that install, maintain, and repair equipment for customers — typical fits include equipment dealers, lifts and HVAC, IT hardware service, and similar after-sales operations. ## Service items A **service item** is a serialised installation at a customer site: the equipment, its location, warranty terms, service history, and any contract that covers it. Service items can be created from sales of inventory items (so when you sell a serial-numbered machine, a service item record auto-generates), or registered manually for items installed before BC went live. ## Service contracts A **service contract** binds a set of service items to a customer with agreed pricing, periodicity, response time, included visits, and renewal terms. Contract invoicing is run in a cycle (monthly, quarterly, annually) and produces sales invoices automatically. Contract renewals can be price-adjusted in bulk. ## Service orders A **service order** records customer requests — symptoms, fault codes, required parts and labour, dispatch information, and the resolution. Orders link to one or more service items, capture allocated resources, and post both consumed inventory and labour resource time on completion. ## Service quotes and price agreements Customers can be issued service quotes for non-contracted work; service price groups offer discounted rates per customer or contract. ## Dispatch The **dispatch board** shows service orders against resources with drag-and-drop scheduling. It's a planning tool rather than a full route-optimisation engine — for serious field operations, customers step up to **Dynamics 365 Field Service**. ## Mobile Business Central's service mobile experience is modest — companies with heavy field activity layer Field Service on top of, or instead of, Service Management. ## Posting and reporting Posted service orders create item ledger entries (parts consumed), resource ledger entries (labour), and service ledger entries (revenue and cost). Standard reports cover service profitability, contract margins, response times, and recurring revenue. ## Where the limits sit Service Management is excellent at depot, dealer, and contract-driven service models. It is *not* a full field-service-management platform with route optimisation, IoT-driven work orders, customer-facing self-service, or a first-class mobile experience. Companies that need those move to Field Service while keeping BC as the back office. --- # SharePoint document management for Dynamics 365 How Dynamics 365 stores documents — the SharePoint integration model, folder structure, permissions, and operational gotchas. Source: https://www.solvingdynamics365.com/guides/sharepoint-document-management-for-dynamics-365 Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Documents in Dynamics 365 don't live in Dataverse — they live in **SharePoint Online**. The integration is configured per record type, automatic per record, and almost always the right choice. Understanding how it actually works prevents the surprises that catch new admins out. ## The model When an admin enables SharePoint integration for a Dataverse table (say, Account), every record of that table automatically associates with a **folder** in a configured SharePoint site. Users see a Documents tab on the record that shows the contents of the folder; uploads, downloads, and edits happen through the SharePoint experience, but inline with the CRM record. ## The folder structure By default the structure is: ``` // ()/ ``` So Account "Contoso Ltd" gets a folder named "Contoso Ltd (a1b2…)" inside the Accounts library. The GUID suffix is what disambiguates two records with the same name and what keeps the link stable if the name changes. ## Hierarchical folders A common configuration nests folders to follow a hierarchy — e.g. Contacts under their Account, Opportunities under their Account. This requires *folder-based document management* to be enabled per table. ## Permissions Documents inherit SharePoint permissions, not Dataverse permissions. By default the SharePoint site is shared with all Dynamics 365 users, so anyone with CRM access sees the documents. For finer-grained control, customers configure SharePoint at the library or folder level. This is the most common cause of "I can see the record but not the documents" support tickets. ## Search Dataverse search indexes document metadata and titles but not always the document content; SharePoint search indexes content. Cross-system search is improving but isn't seamless yet. ## Co-authoring and check-in/check-out All standard SharePoint features apply: simultaneous editing in Office on the web, versioning, check-in/check-out for sensitive documents. **Limits.** - 5 GB per file (SharePoint limit, occasionally tighter on tenants). - 30 million items per SharePoint library before list-view performance degrades. - Renaming the underlying record doesn't rename the folder (it keeps the original name to maintain link stability). ## Migration Moving existing documents into a freshly-configured SharePoint integration is a structured task — migrate documents while preserving folder structure, then run the metadata mapping job to associate them with Dataverse records. Third-party tools (ShareGate, Metalogix, Power Automate flows) speed this up considerably. ## Why SharePoint, not Dataverse Dataverse storage is expensive; SharePoint storage is cheap, included generously with Microsoft 365 licences, and built for document collaboration. The integration gives you both: relational data in Dataverse, documents in SharePoint, unified at the record level. --- # Shop floor control patterns in Dynamics 365 Supply Chain Management How shop floor execution works in Dynamics 365 Supply Chain Management — the production floor execution interface, job registrations and feedback. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-manufacturing-shop-floor-control Section: Industries / Manufacturing Published: 2026-09-02 Shop floor control is where a manufacturing ERP either earns its keep or gets ignored. If operators can start a job, report quantity, and log scrap in a few taps on a shared tablet, the production data in the system is real and the costing is trustworthy. If they cannot, supervisors key it in at the end of the shift from paper, and the ERP becomes a slightly delayed record of what a whiteboard already knew. Supply Chain Management has a genuine shop-floor layer; this guide covers what it does, how to configure it so operators tolerate it, and where a dedicated MES still wins. ## Two ways to feed back production There are two modes for reporting production in Supply Chain Management, and choosing between them is the first decision. **Journal-based feedback.** Supervisors or operators post route card and job card journals for time and quantity, picking lists for material, and report-as-finished journals for output. Simple, no clock-in concept, and no shop-floor terminal. Fine for small operations with few operations per order and a supervisor who owns the data. **Manufacturing execution** (the production floor execution interface). Workers sign in on a shared device, see their jobs, start and stop them, register quantities and scrap, and the system computes elapsed time, splits it across parallel jobs, and generates the journals automatically. Costing gets actual labour hours from actual registrations. This is the mode meant by "shop floor control", and it is what the rest of this guide is about. ## The production floor execution interface The current interface is a touch-first, configurable app that runs in a browser on a tablet or a mounted screen at the workstation. Workers badge in with a badge ID or pick their name, and the screen shows the job list for their resource or resource group. Available tabs cover starting jobs, reporting progress, reporting as finished, registering indirect activities such as maintenance or meetings, and viewing job details including attached documents and BOM lines. Configuration lives in a few places: - **Configurations of the interface** decide which tabs and buttons appear per device or per production unit. The strongest advice is to remove everything a station does not need. A screen with four large buttons is used; a screen with twenty is bypassed. - **Calculation parameters and registration workflows** on the production parameters and time-and-attendance parameters decide whether multiple jobs can run in parallel on one worker (bundled jobs), whether time is split evenly or by estimate, whether approval is required before registrations are transferred, and how rounding works. - **Production units and resource groups** map physical areas to devices, so a worker at the paint line sees paint-line jobs. What operators register is deliberately small: start, quantity good, quantity scrapped with a reason, finished. Material consumption is usually auto-flushed on start or finish rather than registered by the operator, which is right for most discrete shops and wrong for process shops where actual consumption varies — those use the pick-list registration or a weighing integration. ## Time and attendance, and where payroll is not The same registrations feed the **Time and attendance** module, which computes worked hours, breaks, overtime, and flex balances against profiles and pay agreements, and produces pay items for export. It is a capable time-capture system for a factory workforce. What it is not is payroll. Supply Chain Management does not calculate or pay wages. The pay items are exported to a payroll system, and the mapping from pay agreement to that system's codes is an implementation task that takes longer than expected because every union agreement has a special case. If the manufacturer does not need time and attendance for payroll — only for job costing — the module can run in a lighter configuration where registrations are approved for costing but pay calculation is ignored. ## Machine data and IoT Operators are one source of truth; machines are another. The **Sensor Data Intelligence** add-in ingests IoT signals into Supply Chain Management for scenarios such as machine status, production delays, and quality deviations, and can raise notifications or create records from them. It is a lightweight bridge, not a historian or SCADA system. Manufacturers with serious machine data run it into an industrial platform first and surface only the operationally relevant events into the ERP. ## When to use a dedicated MES Supply Chain Management's shop-floor layer covers execution reporting well. It does not do detailed work-instruction management with revision control at the station, electronic batch records with full 21 CFR Part 11 signature trails, real-time OEE from machine signals, or genealogy at the level regulated industries require. Those are the domain of a manufacturing execution system. For that case there is a first-party **MES integration framework**: production orders and their operations are published to the MES, and the MES sends back start, quantity, scrap, material consumption, and finish messages through defined message types and a queue. It means the ERP owns planning and costing while the MES owns execution, without a custom integration. The framework covers the common messages; anything exotic still needs extension work. The rule of thumb: if the shop needs to know what is running and how much came out, use the built-in floor execution. If the shop needs to control *how* it is made — instructions, interlocks, signatures, machine parameters — put an MES in front and integrate. ## Business Central manufacturers Business Central has no shop-floor terminal. Output journals, consumption journals, and capacity ledger entries are posted by people, and it works for a shop where a supervisor keys in the day's output. Manufacturers wanting operator-level start/stop, badge sign-in, and a tablet at every station use a shop-floor ISV from AppSource, of which there are several mature ones. Evaluate them on how they post to BC — direct capacity and output entries against production order routing lines is right; a nightly batch of journal lines is a red flag — and on how they handle a job that spans a shift change. ## Rollout advice Pilot on one line with the smallest possible interface. Measure two things: the share of production orders whose actual time comes from registrations rather than estimates, and the gap between reported and physically counted output. When both are stable, add the next line. Manufacturers that switch the whole plant to floor execution on day one with a full-featured screen generally switch it off again by week three. --- # Sitemap customisation in model-driven apps How to customise the navigation of model-driven Power Apps — areas, groups, subareas, role-based visibility, and the user-experience impact. Source: https://www.solvingdynamics365.com/guides/sitemap-customisation-in-model-driven-apps Section: Customer Engagement / Dataverse platform Published: 2026-05-01 The **site map** of a model-driven app — the left-side navigation menu users see — is the structural backbone of how they experience the app. Customising it well makes the app feel coherent and on-purpose; leaving it as Microsoft's default leaves users with menu items they don't recognise and missing items they need. **The hierarchy.** - **Area** — top-level grouping. A button at the bottom of the navigation lets users switch areas. Example areas: *Sales*, *Service*, *Marketing*, *Settings*. - **Group** — a label within an area, dividing related items. Example groups within Sales: *My Work*, *Customers*, *Sales*, *Marketing Lists*, *Goals*, *Tools*. - **Subarea** — the actual navigation items users click. Each subarea points to a destination: a table's main page (showing default view), a specific view, a dashboard, a URL, a custom page, a web resource. The maker designs the area / group / subarea structure to match how users think about the app. **Design principles.** - **Mirror the work, not the data model.** Group by what users do, not by the tables underneath. *My Work* (combining Activities, Tasks, Appointments) is more user-friendly than separate menu items per Dataverse table. - **Limit depth** — three levels (area / group / subarea) is enough. Don't over-nest. - **Frequency-ordered** — most-used items at the top of each group. - **Verb-noun phrasing** — *My Open Opportunities* beats *Opportunities (Mine)*. - **Icon consistency** — use the platform icon library; bespoke icons can be uploaded but rarely worth the maintenance burden. - **Avoid orphan tables** — every important table should be reachable from the navigation without searching. ## Role-based visibility Sitemap items can be visible only to specific security roles: - Managers see *Forecast* and *Team Performance*. - Sellers don't see *Settings* or *Administration*. - Service agents don't see Sales-specific tabs. Configured per subarea; the platform respects the user's roles automatically. ## Customising the standard Dynamics 365 sitemaps Sales Hub, Customer Service Hub, Field Service all ship with predefined sitemaps. Customisation typically: - Adds custom tables to relevant groups. - Hides Microsoft's defaults that aren't in use. - Reorders items to match the customer's process. - Adds external links (intranet pages, knowledge base URLs). - Adds dashboards that match the customer's KPI structure. ## Multi-app sitemaps Different apps in the same environment have different sitemaps. The Sales app's site map has Sales tables; the Service app's has Service tables. Same Dataverse, different navigations per persona. ## The modern site map designer Microsoft has been migrating from the older site map designer (in the classic UI) to the **modern designer** in the Power Apps maker portal. The modern designer offers: - Drag-and-drop reordering. - Visual preview. - Inline editing of labels, icons, destinations. - Role-based visibility configuration. - Validation against the current solution. Older XML-based customisations remain supported but new work should use the modern designer. ## Mobile rendering The site map renders on Power Apps mobile differently — typically as a hamburger menu with the same hierarchy. Areas appear as top-level navigation; groups and subareas inside. Test on mobile during design — a beautiful desktop site map can be unusable on mobile. ## Customised landing experience Beyond the site map, the app's landing experience can be tuned: - **Default landing area / subarea** — the page users see when they open the app. - **Personalised home dashboard** — combining cues, charts, and shortcuts. Configured per app or per profile. **Common patterns.** - **My Work** as the top group with Activities, Open Records, Recent — the "today" view. - **Customers** group with Accounts, Contacts. - **Sales / Service** group with Leads, Opportunities, Quotes / Cases, Knowledge. - **Reports & Dashboards** group at the bottom. - **Admin / Settings** area restricted to admin roles. **Common pitfalls.** - **Too many items per group** — 15 subareas per group is unusable; split into multiple groups. - **Wrong default landing** — users open the app to an irrelevant page and immediately have to click elsewhere. Set sensibly. - **Bottom-of-menu critical items** — important items below the fold get ignored. Surface them higher. - **Stale references** — site map links to deleted dashboards or removed tables produce broken navigation. ## Operational discipline Treat the site map as UX investment. Iterate based on user feedback; A/B test if changes are substantial. The site map is the daily face of the app. --- # Skills-based routing in Dynamics 365 Customer Service How skills-based routing matches customer interactions to appropriately skilled agents — skill definitions, proficiency levels, queue setup. Source: https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-skills-based-routing Section: Customer Engagement / Customer Service Published: 2026-05-01 Not all agents can handle all issues. A Spanish-speaking customer needs a Spanish-speaking agent; a tier-2 technical issue needs a technical specialist; a high-value account needs a senior agent. **Skills-based routing** in Dynamics 365 Customer Service matches interactions to agents with the right capabilities — improving resolution rates and customer experience. **The skill model.** - **Skill** — a named capability ("Spanish", "Tier 2 Technical", "Manufacturing Domain"). - **Proficiency level** — Beginner / Intermediate / Expert. - **Agent skill assignment** — each agent has skills with proficiency. - **Skill requirements on interactions** — which skills needed. The matching engine pairs interactions to agents. **Skill categories.** - **Language** — Spanish, French, German. - **Technical** — programming languages, products, tools. - **Domain expertise** — industry vertical, regulatory domain. - **Soft skills** — VIP handling, escalation skills. - **Certifications** — formal qualifications. A typical agent has 10–20 skills with varying proficiency. **Proficiency levels.** - **Beginner (1)** — basic competency. - **Intermediate (2)** — comfortable; routine cases. - **Advanced (3)** — handles complex. - **Expert (4-5)** — deep specialisation. Numeric levels enable threshold matching ("requires Skill X at level 3+"). **Determining required skills.** - **From case type** — case category drives skill needs. - **From customer attributes** — VIP requires VIP handler. - **From content analysis** — AI extracts likely skills from incoming text. - **From channel** — Spanish chat → Spanish skill. The skill requirements set the matching criteria. ## Unified routing D365's modern routing engine: - ML-based. - Considers skills, availability, capacity, historical performance. - Optimises for resolution. Replaces older rule-based routing for many scenarios. **Matching algorithm.** - Check available agents. - Filter by required skills at required proficiency. - Among matching, prioritise by: - Lowest current load. - Highest historical resolution rate. - Customer-specific preference (preferred agent if specified). - Assign. ## Capacity constraints Each agent has capacity: - Max concurrent chats (e.g., 3). - Max concurrent voice calls (e.g., 1). - Max active cases. Routing respects capacity; over-loaded agents skipped. **Skill assignment for agents.** - HR system or training records feed agent skill profile. - Skills updated as agents complete training. - Periodic refresh. For mature operations, skill data lives alongside HR; not in the head of the supervisor. ## Multiple required skills Interactions can require multiple skills: - "Spanish-speaking" AND "Manufacturing domain" AND "Tier 2". - Matches agents with all three. - Stricter criteria → smaller eligible pool → potential delays. Balance specific routing vs availability. ## Fallback routing When no agent matches: - Drop one skill requirement; retry. - Route to general queue. - Escalate to supervisor. - Customer waits. Mature deployments define fallback paths; without them, customer hangs. ## Skill assessment Validating agent skills: - Self-reported (least reliable). - Manager-assessed. - Test-based (technical skills). - Performance-based (historical resolution rate). Combine multiple inputs; skill data quality affects routing quality. **Cross-channel skills.** - Chat skills. - Voice skills. - Email skills. Some agents excel in chat but not voice; route accordingly. **Reporting.** - **Skill demand vs supply** — gaps where customer needs unmet. - **Per-skill resolution times.** - **Agent skill utilisation.** - **Routing decisions** — where did interactions go and why. These metrics guide training, hiring, and routing tuning. **Common pitfalls.** - **Skill explosion.** Hundreds of skills; agents over-tagged; routing complex. - **Stale skill data.** Skills set at hire; agent grew; skill profile not updated. - **Required skills too strict.** Long wait times; customer abandons. - **No skill validation.** Self-reported expertise; routing wrong. - **Capacity ignored.** Skilled agent overloaded; quality degrades. - **No fallback.** Customer waits forever for the one matching agent. **Best practices.** - **Curated skill taxonomy** — 30–50 skills, not hundreds. - **Periodic skill assessment** — quarterly review. - **Validated proficiency** — based on performance. - **Fallback paths defined.** - **Capacity tuning** based on real workload. **Training integration.** - Agent completes training course. - Skill / proficiency updates automatically. - Routing immediately reflects new capability. LMS integration enables this; manual entry fragile. **AI assistance for skill assessment.** - Analyse agent's case history. - Identify topics handled well. - Suggest skill updates. Reduces manual skill maintenance burden. ## Strategic positioning Skills-based routing is the operating model for any moderately-sized contact centre. Without it, routing is by queue alone — generic, often inappropriate matching. With it, customers more often get the right help fast; agents more often work within their expertise; metrics improve. The investment is meaningful — skill taxonomy design, agent profiling, ongoing maintenance — but the operational and CX benefits compound. For any organisation aspiring to differentiated service, skills-based routing is foundational, not optional. --- # SLA management in Customer Service How SLAs work in Dynamics 365 Customer Service — KPIs, warning and failure thresholds, business calendars, and KPI roll-up reporting. Source: https://www.solvingdynamics365.com/guides/sla-management-in-customer-service Section: Customer Engagement / Customer Service Published: 2026-05-01 **[Service Level Agreements (SLAs)](https://www.solvingdynamics365.com/glossary/sla)** in Dynamics 365 Customer Service are how commitments to customers — "we'll respond within 1 hour, resolve within 4 hours" — get tracked, enforced, and reported. SLAs encode the response-time and resolution-time expectations that drive both customer satisfaction and operational discipline. ## The model An **SLA** record defines: - **Applicable to** — usually the *Case* table, but configurable. - **Applicable when** — conditions that determine when this SLA applies (e.g. only Premium-customer cases, only Voice-channel cases). - **Business hours** — the operating calendar (24/7, business hours, multi-region) the SLA respects. - **SLA KPIs** — the measurable commitments (first response time, resolution time, etc.). - **Status** — Active or Inactive. An **SLA item** is the specific KPI within an SLA: - **KPI** — the field being tracked (First Response By KPI, Resolve By KPI, or custom KPIs). - **Applicable when** — sub-condition that narrows this item to a slice (e.g. high-priority cases get tighter timing than normal-priority). - **Success criteria** — what counts as "met" (e.g. case status is *Resolved*). - **Warning after** — duration after which the SLA is at *Warning* state (e.g. 80% of the resolution window consumed). - **Failure after** — duration after which the SLA is *Breached* (the commitment is missed). ## Business calendars SLAs respect business calendars — a 1-hour response SLA at 5pm Friday with a Mon-Fri business calendar doesn't breach over the weekend; the clock pauses outside business hours. Multi-region operations use multi-calendar SLAs that apply per customer's local time. ## SLA timer Inside the case form, the agent sees a **timer widget** for each active KPI: time remaining, status (Active / Warning / Breached), with colour coding (green / amber / red). The visible countdown changes behaviour — agents prioritise cases that are about to breach. ## Pause and resume SLAs pause automatically when the case enters certain statuses (e.g. *On Hold — Waiting for Customer*) and resume when status changes back. Pause rules are configured per SLA; the pattern keeps the clock honest about *active service time* vs *waiting time*. ## Escalation When an SLA approaches warning or breach, Power Automate flows can trigger escalation actions: notify the supervisor, reassign the case, create a Teams notification, escalate the customer relationship. Configured per SLA item. ## Entitlements integration SLAs are typically applied through **entitlements** — contracts the customer has that grant specific SLA terms. Premium-support customers get Premium SLAs; basic customers get standard. Entitlement configuration drives which SLA applies to a given case. ## Reporting SLA performance feeds into: - Real-time agent and supervisor dashboards — current cases approaching warning / breach. - Historical KPI reports — % cases meeting SLA, average response/resolution time, breach reasons. - Customer scorecards — per-customer SLA performance over time, used in QBRs. **Common pitfalls.** - **No business calendar** — SLA clock runs 24/7 and looks bad even when service was fine. - **SLA fires for cases that shouldn't have one** — over-broad "Applicable when" conditions cause noise. - **No pause configuration** — customer-wait time is counted against the support team, demoralising and misleading. - **Reporting only after breach** — should warn at 80%, not at 110%. ## Operational discipline Tune SLAs based on actual data, not aspirations. Start with achievable targets and tighten over time as the team performs. SLAs that breach constantly become noise; SLAs that always succeed are not stretch targets. ## Where to go next SLAs apply through [entitlements](https://www.solvingdynamics365.com/guides/entitlements-in-customer-service) and land on cases that [routing rules](https://www.solvingdynamics365.com/guides/customer-service-routing-rules) assigned; the case itself is covered in [case management deep dive](https://www.solvingdynamics365.com/guides/case-management-deep-dive-in-customer-service) and the agent's view of the timers in [the agent workspace](https://www.solvingdynamics365.com/guides/customer-service-agent-workspace). Which licence tier includes what is in [omnichannel licensing](https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-omnichannel-licensing). --- # SOAP vs REST vs GraphQL for Dynamics 365 How the three API styles compare for Dynamics 365 integrations — capabilities, when each fits, and the practical considerations for choosing. Source: https://www.solvingdynamics365.com/guides/soap-vs-rest-vs-graphql-for-dynamics-365 Section: Integrations / Architecture patterns Published: 2026-05-01 Three predominant API styles offer different trade-offs for Dynamics 365 integrations: **SOAP** (the legacy enterprise standard), **REST/OData** (the dominant modern API style, what Dataverse uses), and **GraphQL** (the modern query-language alternative). Each has a place; choosing wisely matters. **SOAP overview.** - XML-based. - WSDL contract. - Strict typing. - Built-in standards (WS-Security, WS-AtomicTransaction). - Verbose payloads. Origin: late 1990s enterprise integration; still common in legacy. **REST overview.** - Resource-oriented. - HTTP verbs (GET, POST, PUT, DELETE). - JSON typical. - Stateless. - Lighter than SOAP. Dominant since mid-2000s; modern default. ## OData A specific REST flavour: - Standardised query semantics ($select, $filter, etc.). - Used by Dataverse and F&O. - Rich query capability. **GraphQL overview.** - Single endpoint. - Client specifies query shape. - Strongly typed schema. - Subscriptions for real-time. - One round-trip for complex data. Emerged 2015 from Facebook; popular for client-rich apps. **Comparison.** | Aspect | SOAP | REST/OData | GraphQL | |---|---|---|---| | Format | XML | JSON | JSON | | Verbosity | High | Moderate | Moderate | | Contract | WSDL | OpenAPI | Schema | | Query flexibility | Low | Moderate (OData) | High | | Caching | Hard | HTTP-friendly | Custom | | Tools | Mature, enterprise | Vast | Growing | | Real-time | WS-* extensions | Push patterns | Subscriptions | **Dynamics 365 native.** - **Dataverse** — REST/OData. SOAP organization service still supported but deprecated. - **F&O** — REST/OData via data entities. Custom services can use either. - **GraphQL** — not native; available via wrappers. For Dynamics integrations, REST/OData is the canonical choice. **When SOAP still appears.** - Integration with legacy enterprise systems (SAP, mainframes, banking). - Existing investments unfeasible to migrate. - Specific industry standards requiring SOAP. - Some Microsoft legacy APIs (older organization service). For Dynamics, SOAP is for legacy compat, not new development. **When REST/OData wins (most Dynamics scenarios).** - Calling Dynamics from any system. - Standard tools and libraries. - HTTP-friendly (caching, proxies). - Lighter than SOAP. Default for new Dynamics integrations. **When GraphQL helps.** - Front-end consumer benefits from query flexibility. - Mobile / bandwidth-constrained scenarios — request only what's needed. - Multiple data sources federated. - Strong developer experience preference. Less common in Dynamics native scenarios; useful when fronting Dynamics + other systems. **Performance comparison.** - **REST** — multiple endpoints; potentially multiple round-trips for related data. - **OData $expand** — fetch related in one call. - **GraphQL** — request exact shape; one round-trip. - **SOAP** — typically heavier payloads. For complex queries, GraphQL can be most efficient; OData $expand often sufficient. **Caching.** - **REST** — HTTP caching (ETags, Cache-Control). - **GraphQL** — harder; POST-based queries. - **SOAP** — typically no caching. Caching favours REST. **Versioning.** - **REST** — `/v1/`, `/v2/` paths or headers. - **GraphQL** — schema evolution (deprecate fields). - **SOAP** — namespace versions. Each has pattern; all manageable. **Tooling.** - **REST** — Swagger / OpenAPI, Postman, curl, every language. - **OData** — additional tools for OData specifically. - **GraphQL** — Apollo, Relay, GraphQL Playground. - **SOAP** — older tools; still many. For Dynamics, REST tooling dominant. **Security.** - **REST** — OAuth 2.0 typical. - **GraphQL** — same. - **SOAP** — WS-Security with signatures and encryption. Modern: OAuth for all; WS-Security in legacy contexts. **Custom Dynamics services.** - **OData custom actions / functions** — extend Dataverse standard API. - **Custom REST APIs in Azure Functions** — for non-Dataverse logic. - **GraphQL wrappers** — for specific scenarios. - **SOAP services** — rare; for legacy integration. The right choice depends on consumer and pattern. **Multi-API support.** - Some integrations expose multiple flavours. - API Gateway abstracts; consumers choose. - More work but maximises consumer choice. **Migration considerations.** - **SOAP → REST** — common modernisation; significant effort. - **REST → GraphQL** — quality-of-life upgrade; substantial work. - **REST to additional GraphQL** — coexist; not migration. **Common pitfalls.** - **SOAP for new development.** Almost always wrong choice today. - **REST without OpenAPI** — undiscoverable, hard to integrate. - **GraphQL without query depth limits** — DoS vulnerability. - **OData over-fetch** — without $select, fetching too much. - **API style chosen by trend, not fit.** **Best practices.** - **Default to REST/OData** for Dynamics consumers. - **Document with OpenAPI.** - **Use OAuth.** - **Version explicitly.** - **Consider GraphQL for complex client-rich apps**. - **Maintain SOAP only for legacy.** ## Hybrid landscapes Most enterprises have all three: - Legacy SOAP for old integrations. - REST/OData for most. - GraphQL for specific scenarios. Not religious choice; pragmatic per integration. ## Strategic positioning REST/OData is the right default for Dynamics 365 integrations. GraphQL is occasionally useful when client experience demands. SOAP is for legacy connectivity only. For architects: - Choose pragmatically per integration. - Standardise where possible. - Document API styles in architecture. - Plan modernisation of SOAP legacy. The teams that obsess over API style choice often lose sight of what matters: clear contracts, reliable operations, manageable evolution. Pick a style, do it well, focus on the outcomes. ### Frequently asked questions **Which API style does Dynamics 365 use natively?** REST with OData. Dataverse exposes an OData v4 Web API, and Finance and Operations exposes data entities over OData. The SOAP-era organization service still exists for legacy compatibility, and GraphQL is only available through wrappers. **When does SOAP still appear?** In legacy enterprise integrations — SAP, mainframes, banking — and industry standards that mandate it. For new Dynamics development it is almost always the wrong choice. **When is GraphQL worth adding?** When a client-rich or mobile front end benefits from requesting exactly the shape it needs, or when several back ends are federated behind one endpoint. Add it alongside OData rather than replacing it, and enforce query depth limits. **What is the most common OData mistake?** Over-fetching — calling endpoints without $select and pulling every column. $select and $expand together usually make a single OData call as efficient as a GraphQL query. --- # Solution Checker and App Checker in Power Platform How Solution Checker analyses Dataverse solutions for issues — categories of findings, integration with Managed Environments. Source: https://www.solvingdynamics365.com/guides/solution-checker-and-app-checker Section: Power Platform / ALM & governance Published: 2026-05-01 Power Platform's static analysis tools — **Solution Checker** for Dataverse solutions and **App Checker** for canvas apps — surface issues before they bite in production. Performance traps, deprecated APIs, security warnings, accessibility issues, plugin best-practice violations. Used systematically, they catch issues that would otherwise emerge as user-facing problems. ## Solution Checker scope Analyses Dataverse solution content: - Plug-in code (.NET DLLs). - Web resources (JavaScript, HTML, CSS). - Workflow definitions. - Power Automate flows. - Forms, ribbons, sitemaps. - Custom connectors. - Metadata (tables, columns, relationships). **Findings categories.** - **Performance** — patterns that slow operations (`RetrieveMultiple` without paging, excessive plug-in cascading). - **Reliability** — patterns that cause runtime failures (null reference risks, missing exception handling). - **Security** — patterns risking unauthorised access (plug-in running as system without checks, hardcoded credentials). - **Usability and accessibility** — forms missing labels, poor keyboard navigation. - **Best practices** — deprecated APIs, outdated patterns. Findings have severity (Critical, High, Medium, Low) and category. Each links to documentation explaining the issue. **Running Solution Checker.** - **From the maker portal** — Solution → Run Solution Checker. - **From Power Platform admin centre** — at scale across environments. - **From CI/CD pipelines** — via `pac` CLI or Build Tools. - **Automatic on import** — when Managed Environments + enforcement enabled. Per run, a report lists findings with file/object/line references. ## Managed Environments enforcement With Managed Environments, Solution Checker can be enforced: - Solutions must pass before import to production. - Critical/High findings block; lower severities warn. - Bypass requires admin justification (audit logged). This is the lever that turns Solution Checker from optional to load-bearing in the ALM pipeline. ## App Checker — canvas apps Built into Power Apps Studio: - Live findings as the maker designs. - Performance warnings (slow data sources, large galleries). - Accessibility violations. - Formula errors. - Connector usage patterns. App Checker runs continuously in the studio; serious issues block save / publish. **Performance findings (canvas apps).** - **OnStart load patterns** — heavy logic blocks app start. - **Filter / Search not delegating** — performance collapses on large data. - **Excessive use of Set()** — variables proliferating. - **Image controls referencing large blobs** — load slow. **Accessibility findings.** - **Color contrast** — text too light against background. - **Missing AccessibleLabel** on controls. - **Tab order** chaotic. - **No keyboard navigation** path. For organisations subject to accessibility regulations (US Section 508, European EN 301 549), App Checker is the first-line tool. ## Delegation warnings Specific to Power Fx on data sources: - Some functions delegate (server executes); others don't (client downloads all rows). - Non-delegating function on a large data source = performance bomb. - App Checker flags non-delegating patterns with yellow warning. Makers can ignore the warning (often without consequence on small data); large-data scenarios must respect it. ## False positives Both tools produce some false positives: - A plug-in genuinely needs to run as system; finding flagged but is correct. - A canvas app uses a function intentionally despite delegation warning. Annotations on the codebase mark explicit acknowledgments — "I read this finding, this is intentional." ## Custom rules Limited but growing: - Organisations can author custom rules for Solution Checker. - Specific to internal coding standards. - Less mature than for traditional linters. **Reporting and dashboards.** - **Per-solution finding count** over time. - **Most common finding categories** — coaching theme for makers. - **Trend** — are we getting cleaner or accumulating debt? **Common pitfalls.** - **Findings ignored.** Run Solution Checker, look at output, dismiss; the findings reappear in production as incidents. - **No baseline.** New project has 500 findings; team disheartened; sets unrealistic expectations. - **All-or-nothing enforcement.** Critical findings block; team has to fix 50 critical findings before any deployment; frustration. - **Outdated rule sets.** Tools update; new patterns flagged; baseline shifts. - **Solution Checker only at deployment.** Should run continuously during development, not gate-keep at the end. **Integration with development.** - **Local checker** — run during development. - **Pre-commit hooks** — run on every commit. - **Pull request gates** — must pass to merge. - **Deployment gates** — must pass to promote to production. Each layer catches issues earlier; left-shift saves time. **Operational rhythm.** - **Continuous in development** — App Checker runs live. - **Per commit** — Solution Checker via CI. - **Pre-deployment** — required for production import. - **Periodic audit** — re-scan existing solutions; track debt. ## Strategic positioning Solution Checker and App Checker turn intuition-driven quality into data-driven quality. They don't catch everything — domain-specific bugs, business logic errors, integration issues escape — but they catch a meaningful fraction of common issues at low cost. Mature Power Platform programmes treat them as essential development tools, not optional reports. The investment in addressing findings systematically pays back in fewer production incidents and easier maintenance. --- # Solution dependencies and managed layer conflicts How solution dependencies work in the Power Platform — required components, layer stacking, conflict resolution, and the maintenance discipline. Source: https://www.solvingdynamics365.com/guides/solution-dependencies-and-managed-layer-conflicts Section: Power Platform / ALM & governance Published: 2026-05-01 Power Platform solutions don't live in isolation. They reference Microsoft's standard components, ISV components from AppSource, and components from other internal solutions. Understanding **dependencies** and **managed layers** is essential for clean deployment, predictable behaviour, and successful upgrades. **Component dependencies.** A solution component depends on others when it references them: - A **flow** depends on **Dataverse tables** it reads or writes. - A **canvas app** depends on **connection references** it uses and **tables** it references. - A **business rule** depends on the **fields** it references. - A **report** depends on the **tables** and **views** it queries. - A **plug-in** depends on the **assemblies**, **tables**, and **other plug-ins** it interacts with. When a solution is exported, dependencies are tracked. When the solution is imported into a target environment, all dependencies must be present — either in the target already, or imported as separate solutions first. **Tracking dependencies.** The maker portal's **Dependencies** view on each solution and each component shows: - **Components that depend on this** — who's pointing at me. - **Components I depend on** — what I need to function. Before deleting a component, check who depends on it. Removing a field that 50 flows reference breaks all 50. ## Solution dependency chain Solution A depends on Solution B (e.g. *Customer Service Customisations* depends on the Microsoft *Customer Service* base solution). Imports must happen in order: 1. Microsoft base solution (Customer Service) — already in the environment from Dynamics 365 install. 2. ISV solution from AppSource (industry vertical for service). 3. Customer-customisation solution layered on top. The target environment must have all parent solutions before child solutions can import. **Managed layers.** When multiple solutions modify the same component, they stack as **layers**: - **Layer 0**: System defaults — the original definition shipped by the platform. - **Layer 1+**: Each managed solution that touches the component adds a layer. - **Top layer**: Unmanaged customisations in the dev environment. The component's effective behaviour is determined by the **topmost active layer**. Underlying layers are hidden but preserved; if a top layer is removed (solution uninstall), the next layer down takes effect. The **Solution Layers** view on each component lists the layers stacked there, with the source solution for each. **Conflicts and resolution.** When multiple managed solutions modify the same component (e.g. two AppSource ISV solutions both adding columns to the Account table), the system stacks both layers; runtime behaviour combines both modifications. For more substantive conflicts (two solutions defining the same workflow on the Account, two solutions changing the same field's display name): - The **last imported** wins typically. - But the system tries to preserve all modifications, which can produce surprising layered effects. - Conflicts are visible in the Solution Layers view. Resolving conflicts is manual — remove one layer's modification or merge intent into one solution. **Common patterns.** - **Microsoft base + AppSource ISV + customer customisation.** Three layers, in that order. The customer-customisation solution depends on the ISV depends on the Microsoft base. - **Multiple customer solutions for separate features.** A *Sales Customisations* solution, a *Service Customisations* solution, a *Reporting* solution. Each has its own scope; minimal overlap. Clean dependency graph. - **One-big-solution anti-pattern.** A single huge customer solution containing everything. Simpler to deploy but harder to reason about, slower to import, harder to retire individual features. **Uninstalling solutions.** Uninstalling a managed solution removes its layer. The underlying state takes effect again. But: - **Data is not removed** — records that depend on the solution's tables remain. - **Dependencies must be checked** — if other solutions depend on this one, uninstall is blocked. - **Order matters** — uninstall top-most solutions before underlying ones. **Common pitfalls.** - **Circular dependencies** — solution A depends on B and B depends on A. The system rejects this; resolve by separating shared components into a third solution. - **Missing dependency on import** — solution import fails because a required parent isn't in the target. Import the parent first. - **Orphan layers after uninstall** — the layer is removed, but the data referencing the removed components becomes orphan. Data cleanup may be needed. - **Solution gigantism** — solutions grow to encompass everything; imports take hours; reasoning is impossible. Split. **Operational discipline.** - **Map your solution dependency graph** — document which solutions depend on which. - **Plan release order** — when releasing multiple solutions together, plan import order. - **Audit layers periodically** — accumulated layers from old solutions clog environments. - **Refactor solutions** when their scope grows unmanageable. Healthy solution architecture pays back over years of operation. --- # Solution history and rollback strategies in Dataverse How to track solution changes over time and roll back when promotions go wrong — solution history table, backup-first patterns. Source: https://www.solvingdynamics365.com/guides/solution-history-and-rollback-strategies Section: Power Platform / ALM & governance Published: 2026-05-01 When a production solution promotion goes wrong — a workflow regression, a broken plug-in, an incorrect form change — the question becomes: how do we get back to the previous state quickly? Dataverse provides some native rollback capabilities but with important limits. A robust rollback strategy combines native features with deployment discipline. ## Solution history Dataverse maintains a **Solution History** record for each import: - Solution name and version. - Type (managed/unmanaged). - Operation (Install, Upgrade, Update, Patch, Uninstall). - Start and end timestamps. - Status (success, failed). - Linked solution file. Navigation: Power Platform admin centre → environment → Solutions → History; or in maker portal. Each history record corresponds to one promotion. Auditable trail of what was installed when. The history doesn't include unmanaged-solution changes — only solution-aware operations. ## Solution layers Multiple managed solutions can layer over the same component (table, column, form). The **active layer** shows which solution's customisation is currently active. When a solution is uninstalled, its layer is removed, exposing the layer beneath. This is the foundation of rollback: if Solution v2 introduces a bug, uninstalling it (or installing v1 as a higher version) re-exposes v1's behaviour. **The four rollback approaches.** **1. Solution version rollback (managed solutions).** Install the previous version as a managed solution upgrade: - Take the previous managed solution package (`MySolution_1.0.0.0.zip`). - Import to the broken environment. - The platform replaces v2 with v1. - Data is preserved (rows aren't deleted on solution rollback). This is the cleanest rollback when the previous package is archived. It requires *archiving every production package* before its successor lands — pipeline practice. **2. Solution patch reversal.** If the change was a patch (not a new version), reverse-patching is more nuanced. Often easier to uninstall the patch (if uninstall is supported) than to apply a counter-patch. **3. Manual repair in the UI.** Open the broken environment in the maker portal; revert the specific changes that broke. Risky and error-prone; only viable for tiny issues. Doesn't update solution metadata cleanly — drift between solution and environment results. **4. Restore from backup.** Each environment has automated **system backups** (typically every few hours, retained 7–28 days depending on tier). Restoring rolls the environment back to a backup timestamp — including data changes since. This is the nuclear option: - Wipes all data created since the backup. - Acceptable for some severe cases where data corruption accompanies the bad deployment. - Not acceptable for most production rollbacks because of data loss. ## Backup-first pattern Before every production solution import: - Take a manual backup (the admin centre supports this). - Note the backup label. - Import the solution. - If the import fails or produces unexpected behaviour, restore the backup. This is the safety net; configure it as a mandatory pipeline step before any production import. ## Pre-deployment validation The cheaper rollback is the one you don't need: - **Test environment** — every solution lands in test before prod; smoke tests run. - **Solution checker** — static analysis catches many regressions before deployment. - **Automated tests** — Easy Repro framework, custom Power Fx tests, or external test harnesses; run before promotion. - **Approval gates** — admin must sign off on prod imports. A robust pre-prod testing discipline reduces production rollback frequency by an order of magnitude. ## Tracking changes outside solutions Some changes don't go through solutions: - **Direct database operations** by users with admin rights. - **Power Apps and flows** edited directly in prod. - **Workflow / business rule changes** edited without solution awareness. These changes don't appear in solution history; rolling them back requires backups or re-editing. The Managed Environments setting "block direct production changes" mitigates this. **Common pitfalls.** - **Previous package not archived.** Can't rollback because the v1 package was lost. - **Backup retention period misunderstood.** Backups only last so long; major regressions discovered weeks later have no backup option. - **Data created since the bad deployment is valuable.** Restoring loses it; manual repair of v2 with care to preserve data is the only path. - **Cascading dependencies.** Solution A's rollback breaks Solution B that depended on changes in A. Solutions should be released together and rolled back together for related changes. - **Async work in flight.** Rolling back while async jobs are processing creates inconsistent state. ## Operational rule Build the rollback path explicitly: - **Archive every production solution package** in a versioned artifact store. - **Pre-import backup** mandatory before any production solution import. - **Document the rollback procedure** as runbook. - **Test the rollback** periodically in a sandbox. A team that has never rehearsed a rollback discovers in the middle of an incident that their plan doesn't work. The rehearsal is the value, not just the documentation. --- # Solution import / export pipelines for Dataverse How to automate Dataverse solution promotion through dev / test / prod — Power Platform CLI, Build Tools, GitHub Actions, and Power Platform Pipelines. Source: https://www.solvingdynamics365.com/guides/solution-import-export-pipelines Section: Power Platform / ALM & governance Published: 2026-05-01 A Dataverse solution moves through environments — typically dev → test → prod, sometimes with additional pre-prod or staging layers — via export, import, and publish. Manual promotion is slow and error-prone. **Pipelines** automate this lifecycle, and there are now several distinct approaches with different trade-offs. **The lifecycle being automated.** 1. Maker / developer builds in **dev environment**, creating components in an unmanaged solution. 2. Solution is **exported** as a managed solution package. 3. Package is **imported** to test environment. 4. Tests pass. 5. Package is **imported** to production. Manual: download a ZIP, click upload in target environment. Repetitive, error-prone, no audit trail. Pipelines fix all three. ## Approach 1: Power Platform CLI (`pac`) The command-line tool ships with everything needed for scripted solution management: ``` pac auth create --url https://dev.crm.dynamics.com pac solution export --path mySolution.zip --name MySolution --managed pac auth select --index 2 # switch to test environment pac solution import --path mySolution.zip ``` Scriptable from any CI/CD runner — GitHub Actions, Azure DevOps Pipelines, Jenkins, GitLab CI. Minimal abstraction; pure commands. ## Approach 2: Power Platform Build Tools Microsoft-published tasks for Azure DevOps Pipelines and GitHub Actions: - `microsoft/powerplatform-actions/who-am-i@v1` — verify connectivity. - `microsoft/powerplatform-actions/export-solution@v1` — export. - `microsoft/powerplatform-actions/import-solution@v1` — import. - `microsoft/powerplatform-actions/pack-solution@v1` — pack unpacked solution. - `microsoft/powerplatform-actions/unpack-solution@v1` — unpack solution for source control. These are wrappers over `pac`. Cleaner pipeline syntax; integrated with CI/CD tooling. ## Approach 3: Power Platform Pipelines A Power Platform–native, in-product capability under Managed Environments: - Configure dev → test → prod stages in the maker portal. - Makers click "Deploy" — solution promotes through the pipeline. - Approvals at each stage. - Audit log in the platform. Designed for citizen developers; no need to learn YAML or CI/CD. Less powerful than full GitHub Actions; great for low-code teams. **Comparing the three.** | Aspect | `pac` scripts | Build Tools | Power Platform Pipelines | |---|---|---|---| | Audience | Pro devs | DevOps teams | Citizen makers | | Source control | Native | Native | Limited | | Approval gates | Via CI | Via CI | Built-in | | Branching strategy | Full | Full | None | | Solution patches | Yes | Yes | Limited | | Power Apps deployment | Yes | Yes | Yes | | Cost | Free | Free (license-dependent) | Bundled with ME | ## Source control pattern The mature pattern: solutions are *not* the source of truth. The source of truth is **unpacked solution source** in a git repository. - `pac solution unpack --zipfile solution.zip --folder src/Solution/` — explodes the ZIP into a directory tree of XML, JSON, JS, CS files. - Developers commit changes to the source tree. - CI pipeline packs the source back into a ZIP and imports to the environment. This pattern enables diffs, code review, branching, conflict resolution — proper engineering workflow. The alternative (export-import shuttling) loses all this. **Managed vs unmanaged.** - **Unmanaged** — for development environments where active editing happens. - **Managed** — for everywhere else; layers prevent unauthorised changes. Promote unmanaged from dev → export as managed → import managed to downstream. Mixing layers creates messes. ## Solution dependencies A solution depends on tables, columns, web resources from other solutions. Pipeline must promote dependencies first. Most pipelines: 1. Build all solutions. 2. Topologically order by dependency. 3. Import in order. **Solution upgrades vs patches.** - **Solution upgrade** — replace the previous managed solution version completely; clean state. - **Solution patch** — apply a delta on top of the previous version; smaller package. For complex production deployments, upgrades; for hotfixes, patches. **Common pipeline failures.** - **Missing dependencies** — solution X imported before Y it depends on; fails. - **Schema breakage** — column type change between versions; import fails. - **Workflow assemblies version mismatch** — plug-in DLLs binary-incompatible with target. - **Solution layer drift** — manual changes in target environment block the managed layer; "drift detection" should fail the pipeline early. - **Connection references missing** — connections need to be created in target before solution imports. ## Connection references and environment variables Solutions reference external resources via: - **Connection references** — abstract references to connectors; bound to actual connections per environment. - **Environment variables** — configurable values per environment. Pipelines set these up post-import — either through pipeline scripts or manual configuration. Without them, flows and connectors fail to run in the target environment. **Common pitfalls.** - **No automation.** Manual promotion in 2026 is hard to justify; pipelines pay back fast. - **Skipping test environment.** "Just promote to prod" — production crashes; rollback under pressure. - **No rollback strategy.** Bad import in prod; no clean way back. Always have export-of-previous before import-of-new. - **Secrets in pipeline scripts.** Connection strings, API keys committed; rotate compromised credentials. - **No success metrics.** Pipeline succeeds technically; nobody verifies the solution actually works in target. ## Operational rule Every production Dataverse environment should be downstream of a pipeline — not directly editable by makers in production. The pipeline enforces process, audit, and rollback safety. The maker's perception of "I just made a change" should be implemented as "the pipeline promoted my change," not as "I clicked Save in prod." --- # Solution patches vs solution upgrades How patches and upgrades differ in Power Platform solution lifecycle — what each does, when to use which, and the trade-offs across layers. Source: https://www.solvingdynamics365.com/guides/solution-patches-vs-solution-upgrades Section: Power Platform / ALM & governance Published: 2026-05-01 In the Power Platform solution lifecycle, deploying changes to an existing solution in a target environment can happen two ways: as a **patch** or as an **upgrade**. Both look similar from the maker's perspective but produce fundamentally different states in the target environment, and the long-term implications of each pattern matter for ongoing maintenance. **Solution patches.** A **patch** is a delta — a solution that contains *only the changes* made since the base solution version. When a patch is imported, it's layered on top of the existing base solution in the target environment. The base solution remains unchanged in the target environment; the patch adds its modifications on top. **Characteristics:** - **Faster to build and deploy** — only the changed components are packaged. - **Smaller solution files** — minutes to import rather than hours. - **Multiple patches can stack** — patch 1, patch 2, patch 3 all layer on top of the base. - **Cannot remove components** — patches can only add or modify, not delete components from the base. - **Eventually cumulate** — over time, the patch stack grows messy. **When to use patches:** Quick fixes, hotfixes, additive features that don't restructure existing components. Especially useful for production hotfixes where a full re-deploy would be too disruptive. **Solution upgrades.** An **upgrade** is a full replacement — the new solution version replaces the existing base solution and all its patches in the target environment. The system reconciles the new version against the existing state, applying additions, modifications, and *deletions*. **Characteristics:** - **Comprehensive** — captures the full current state of the solution. - **Can remove components** that were in the base but no longer in the new version. - **Slower to build and deploy** — larger package, more processing. - **Replaces patches** — after an upgrade, the patch stack collapses into the new base. - **More disruptive** — longer import time, potentially affecting running services. **When to use upgrades:** Planned major releases, end-of-month rollups consolidating recent patches, major feature waves where significant components have changed. **The combined pattern.** The healthy lifecycle pattern: 1. **Base solution** in production. 2. **Patches** for incremental changes (weekly, biweekly, or on demand for fixes). 3. **Upgrade** periodically (monthly, quarterly) consolidating the patches into a new base. This combines the speed of patches with the cleanliness of periodic upgrades. Avoid letting the patch stack grow indefinitely; it becomes harder to reason about, harder to maintain, and slower to deploy as patches multiply. ## Apply upgrade vs Stage for upgrade When importing an upgrade, two modes: - **Apply upgrade** — applies the upgrade immediately. The new version replaces the old in one operation. - **Stage for upgrade** — imports the new version as a "Holding" solution alongside the existing one, then a separate "Apply solution upgrade" step finalises. Lets you test the staged solution before committing. The stage-then-apply pattern is safer for production deployments where validation between import and activation matters. **Managed vs unmanaged considerations.** - In **development environments** (where the base is unmanaged), patches and upgrades work the same way but components can be edited. - In **production environments** (where the base is managed), patches and upgrades override the managed components in their layer; underlying managed components remain read-only. - **Solution layers** stack — managed components from one solution can be modified by patches from another, with the most-recent layer winning. **Common pitfalls.** - **Forgetting components are missing from upgrade** — you intended to delete component X from the base, but it's still in production because the upgrade reconciliation missed it. Verify post-upgrade. - **Patch overload** — 50 patches on top of a base from a year ago. Performance degrades; troubleshooting gets painful. Consolidate. - **Importing patches in wrong order** — patches generally must be imported in sequence; out-of-order imports may fail or produce surprising states. - **Patches that conflict** — two patches both modifying the same component create conflicts the system resolves automatically (last one wins), sometimes surprisingly. **Operational discipline.** - **CI/CD pipelines** for both patch and upgrade workflows, with appropriate approval gates. - **Versioning convention** — semantic versioning on base solutions and patches: `1.0.0` base, `1.0.1` patch, `1.1.0` minor upgrade, `2.0.0` major upgrade. - **Documentation** — what's in each patch and upgrade, communicated to stakeholders. - **Quarterly consolidation** — fold patches into a new base periodically. Done right, the patch-and-upgrade rhythm keeps deployments fast and reliable; done badly, it degrades into an unmanageable mess over months. ### Frequently asked questions **What is the difference between a solution patch and an upgrade?** A patch is a delta containing only components changed since the base version, layered on top of the base — small, fast, but unable to delete components. An upgrade is a full replacement that reconciles additions, modifications, and deletions and collapses the patch stack into a new base. **Can a patch remove a component?** No. Patches only add or modify. To delete a table, column, or flow from the target environment you must ship an upgrade, and verify after import that the reconciliation actually removed it. **What is the healthy patch-and-upgrade rhythm?** Patches for weekly or on-demand fixes, consolidated into an upgrade monthly or quarterly. Letting fifty patches pile on a year-old base degrades performance and makes troubleshooting painful. **What is stage for upgrade?** Importing the new version as a holding solution alongside the existing one, validating it, then running a separate apply step. It is the safer path for production where checks between import and activation matter. --- # Stakeholder management for Dynamics 365 implementations How to identify, engage, and manage stakeholders through a Dynamics 365 project — RACI, communication plans, influence mapping. Source: https://www.solvingdynamics365.com/guides/stakeholder-management-for-dynamics-365 Section: Implementation / Project execution Published: 2026-05-01 A Dynamics 365 implementation affects many people — executives funding it, business users using it, IT supporting it, partners delivering it, vendors of integrated systems. **Stakeholder management** ensures the right people are engaged at the right level at the right time. Done poorly, projects ship to surprised stakeholders who don't adopt; done well, projects launch with stakeholder buy-in. **Who's a stakeholder.** - **Executive sponsor** — funds and supports. - **Project sponsor** — operational owner. - **Business leaders** — affected functional heads. - **End users** — daily system users. - **IT leadership** — technical accountability. - **Process owners** — own affected processes. - **Subject matter experts** — domain knowledge. - **External partners** — implementation partner, integration partners. - **Customers / suppliers** — affected externally. - **Regulators** — compliance bodies. - **Board** — for material investments. Each has stake, interest, and influence; each warrants attention. **Stakeholder identification.** - List by role. - Include each affected function. - Identify formal and informal influence. - Capture in stakeholder register. Often: 30-100 stakeholders for a typical mid-market project. **Stakeholder analysis.** Per stakeholder: - **Interest** — how affected. - **Influence** — power over outcome. - **Position** — supportive / neutral / resistant. - **Concerns** — what worries them. - **Communication preference** — format, frequency. The analysis informs engagement strategy. ## Influence-interest matrix Classical model: - **High influence + high interest** — manage closely; senior engagement. - **High influence + low interest** — keep satisfied; not overwhelmed. - **Low influence + high interest** — keep informed. - **Low influence + low interest** — monitor. Different engagement intensity per quadrant. **RACI per decision type.** - **Responsible** — does the work. - **Accountable** — answers for outcome. - **Consulted** — input solicited. - **Informed** — kept aware. For each major decision type, define RACI; reduces ambiguity. **Communication planning.** - **What** — content per audience. - **Who** — sender, recipient. - **When** — frequency. - **How** — format (email, meeting, demo, report). Plan upfront; adjust as project evolves. **Communication channels.** - **Executive briefings** — concise, status-focused. - **All-hands** — milestone announcements. - **Departmental sessions** — function-specific. - **Power user community** — change ambassadors. - **Newsletters / portal** — broader. - **Training events.** - **Q&A sessions** — open forum. Different audiences need different formats. **Building support.** - **Show progress** — early wins visible. - **Address concerns** — surface and respond. - **Demonstrate value** — link to business outcomes. - **Listen** — feedback acknowledged. - **Personalise** — what's in it for them. Support isn't passive; built actively. **Managing resistance.** - **Acknowledge** — concerns are valid. - **Understand** — why is this person resistant? - **Engage** — give them voice. - **Adapt** — adjust where reasonable. - **Override** when necessary — but visibly and respectfully. Pure ignoring resistance never works; surfacing and addressing usually does. **Change champions.** - **Identify influential supporters** in each area. - **Equip them** — early visibility, training. - **Empower** — they speak with credibility. - **Recognise contribution.** Champions accelerate adoption; bypassing them slows it. **Common stakeholder issues.** - **Sponsor disengagement.** Active early, fades; project loses air cover. - **Mid-level resistance.** Managers defend status quo. - **End user surprise.** First exposure to new system is at training; insufficient prep. - **External party gaps.** Suppliers, customers not informed; integration breaks at go-live. - **Conflicting priorities.** Two stakeholders want different things; resolution required. **Stakeholder mapping over time.** - **Pre-project** — stakeholders identified. - **Early project** — engagement intense. - **Build phase** — focused engagement. - **UAT / Cutover** — broad re-engagement. - **Hypercare** — close support. - **Steady state** — ongoing governance. Cadence of engagement varies; full re-mapping at major transitions. **Communication artifacts.** - **Project portal** — central information. - **Status reports** — periodic. - **Town halls** — milestone events. - **Training materials.** - **FAQs.** - **Demo videos.** Mix of pull (portal) and push (reports, town halls). ## Customer stakeholder management When customers affected (B2B mostly): - **Pre-announcement** of upcoming changes. - **Migration communication.** - **Support during transition.** - **Post-cutover check-in.** External stakeholders are easy to overlook; significant brand risk if mishandled. **Vendor stakeholder management.** - **Existing integration partners** affected. - **New ISV vendors** onboarded. - **Microsoft account team** informed. Coordination prevents end-of-project surprises. **Common pitfalls.** - **Stakeholder map outdated.** People move; map static. - **Communication frequency wrong.** Too much or too little. - **One-size-fits-all messaging.** Same content to all; doesn't resonate. - **No feedback loop.** Communicated to, not heard from. - **Champion network neglected.** Champions burn out without support. - **Late escalation.** Resistance hidden until late; too late to address. **Cultural considerations.** - **Hierarchical organisations** — respect levels. - **Collaborative cultures** — broader consultation. - **Risk-averse cultures** — emphasise mitigation. - **Action-oriented** — focus on progress. One-size doesn't fit; adapt approach. ## Strategic positioning Stakeholder management is one of the highest-leverage soft skills in project leadership. Implementations fail more often from stakeholder issues than technical ones. The discipline of identifying, engaging, and listening to stakeholders prevents the biggest project failure modes. For project leaders: - Map stakeholders deliberately. - Engage proportionally to influence and interest. - Communicate consistently. - Address resistance early. - Build champion network. - Reassess regularly. The investment is meeting time and intentional communication; the benefit is stakeholders who back the project through inevitable difficulties. The teams that get stakeholder management right ship to acceptance; the teams that don't ship to resistance. --- # Statement of Work for Dynamics 365 implementations How to structure an effective SOW for a Dynamics 365 engagement — scope, deliverables, acceptance criteria, change control, and the protections both sides need. Source: https://www.solvingdynamics365.com/guides/statement-of-work-for-dynamics-365 Section: Implementation / Vendor & contracting Published: 2026-05-01 A Statement of Work (SOW) is the contractual document that defines what an implementation partner will deliver, when, for how much, and on what terms. Vague SOWs lead to disputes and cost overruns; well-structured SOWs hold both parties accountable while preserving flexibility for real-world adjustments. **Core SOW components.** - **Scope of work** — what's being done. - **Deliverables** — specific outputs. - **Timeline** — milestones and dates. - **Resources** — staffing. - **Pricing** — cost and payment terms. - **Acceptance criteria** — how success is measured. - **Change management** — process for scope changes. - **Assumptions** — preconditions for the work. - **Risks** — known risks and mitigations. - **Roles and responsibilities.** Each section deserves real attention; templates are starting points, not endpoints. ## Scope of work Explicit: - Which Dynamics 365 modules? - What functional areas? - Which integrations? - How many users / legal entities? - Specific business processes to be implemented? Out-of-scope items also listed — what's not included. ## Deliverables Tangible outputs: - **Functional Design Documents (FDDs).** - **Technical Design Documents (TDDs).** - **Configured environment.** - **Custom code / extensions.** - **Test scripts and results.** - **Training materials.** - **Cutover plan.** - **Documentation.** Each deliverable described with: - Description. - Format. - Acceptance criteria. - Owner. ## Timeline Milestones: - Project kick-off. - Design phase completion. - Build phase completion. - UAT start / completion. - Cutover. - Go-live. - Hypercare end. Dates with dependencies; critical path identified. **Resource commitments.** - Named team members. - Roles (architect, developer, business analyst). - Allocation percentages. - Duration of engagement. Beware "team members to be named" — vague. ## Pricing structure Match to project type: - **Fixed price** — clear deliverables, clear scope. - **Time and materials** — exploratory, evolving scope. - **Milestone-based** — payments tied to deliverable acceptance. - **Capped T&M** — cost ceiling. Each has implications; the right choice depends on certainty of scope. ## Acceptance criteria How is each deliverable judged complete? - **Document deliverables** — reviewed and signed off. - **System deliverables** — meets functional and non-functional requirements. - **Test deliverables** — pass rate above threshold. Specific criteria prevent "looks fine to us" disputes. ## Change management process Inevitable in any real project: - **Change request** initiated by either party. - **Impact assessment** — scope, schedule, cost. - **Approval** — by both parties. - **Updated SOW addendum** or change order. Without documented process, every change is an argument. ## Assumptions Preconditions: - "Customer provides timely access to subject matter experts." - "Existing systems documentation is current." - "Customer has data ready for migration by date X." If assumptions don't hold, partner can invoke renegotiation. Document candidly. ## Risks Known risks: - Data quality. - Stakeholder availability. - Integration complexity. - Custom development scope. For each, mitigation approach. ## Roles and responsibilities Who does what: - **Customer responsibilities** — provide data, attend meetings, sign off. - **Partner responsibilities** — deliver per scope. - **Joint responsibilities** — testing, decisions. A RACI chart often helps. **Governance structure.** - Steering committee membership. - Reporting cadence. - Issue escalation path. - Decision authority. **Termination provisions.** - For convenience. - For cause. - Notice periods. - Wind-down procedures. Hopefully never invoked but essential. **Warranties and remedies.** - What partner warrants (deliverables work, free of defects). - For how long (typically 30-90 days post-acceptance). - Remedies for breach. **Liability limits.** - Cap on partner liability typically. - Carve-outs (IP infringement, confidentiality, gross negligence). **Intellectual property.** - Who owns deliverables? - Pre-existing IP retained by each party. - Custom code typically client-owned. ## Confidentiality NDAs separate or integrated. **Common pitfalls.** - **Vague scope.** "Implementation of Dynamics 365 Sales" — what does that mean specifically? - **No change management.** First change request becomes a fight. - **No assumptions documented.** Partner assumed something; customer didn't; cost overrun. - **Pricing ambiguous.** "Up to" or "approximately" — interpretation differs. - **Acceptance vague.** Customer doesn't accept; project drags. - **No exit clauses.** Either party stuck. **SOW negotiation.** - Lawyers and contracts teams involved. - Take time; rushing produces problems. - Push back on partner's standard terms where reasonable. - Customer-friendly language matters. **Multi-phase engagements.** - Phase 1 SOW. - Phase 2 SOW signed at appropriate point. - Each phase has clear scope and outcomes. Cleaner than mega-SOW covering everything. ## Master Services Agreement + SOW A common structure: - **MSA** — overarching terms (liability, IP, confidentiality). - **SOWs** under MSA — specific projects. Reduces negotiation per project; useful for ongoing relationships. ## Strategic positioning The SOW is the project's commercial backbone. Time invested upfront pays back through clarity and accountability. Common mistake: signing weak SOWs to start work fast — leads to scope creep, disputes, and unhappy outcomes. For decision-makers: - Engage legal and procurement early. - Be specific about scope and deliverables. - Build in change management. - Define acceptance objectively. - Document assumptions candidly. A well-crafted SOW protects both parties and sets the foundation for a productive partnership. Don't accept the partner's standard template without thoughtful review and negotiation — every clause has implications for the engagement. --- # Steering committee design for Dynamics 365 programs How to structure and run a Dynamics 365 steering committee — composition, cadence, agenda, decision rights, and the discipline that keeps programs aligned. Source: https://www.solvingdynamics365.com/guides/steering-committee-design-for-dynamics-365 Section: Implementation / Operations & support Published: 2026-08-15 A Dynamics 365 program is a multi-million-dollar, multi-year, cross-functional change initiative. Without senior alignment, the program drifts — competing priorities pull in different directions, decisions get reversed, scope expands without trade-off. The **steering committee** is the executive body that keeps the program aligned. Design and run it well; programs succeed. Skip it or run it badly; programs struggle. **Composition.** The steering committee includes: - **Executive sponsor** — the senior leader accountable for the program's success. Typically a C-level (CFO for ERP programs, COO for operations-focused, CIO for technology-led, sometimes CEO for transformational). Chairs the committee. - **Functional leaders** — heads of departments materially affected. Finance lead. Sales lead. Operations lead. HR if HR is in scope. Their teams will use the system; they bring the business priorities. - **IT leader** — CIO or VP of IT. Owns the technology side; accountable for integrations and ongoing operations. - **Partner sponsor** — the senior partner-side person accountable for the implementation. Brings expertise; held accountable for partner delivery. - **Program manager** — the customer-side person running the program day-to-day. Prepares agendas; tracks decisions; ensures follow-through. - **Project manager(s)** — depending on program scale, the PM(s) responsible for execution. For very large programs, two-tier governance is common — a top-level executive committee (quarterly, big strategic decisions) and a working steering committee (monthly, operational decisions). **Cadence.** - **During the project** — monthly is standard; bi-weekly during critical phases (cutover preparation, hypercare). - **Steady-state operations** — quarterly typically suffices; monthly if change activity continues. Meetings are real meetings — agendas distributed in advance, decisions documented, follow-up assigned. **Standard agenda.** A working steering committee meeting: 1. **Updates from program manager** — status, milestones, key activities since last meeting. 2. **Risk register review** — top risks, mitigation status, new risks. 3. **Issues requiring decisions** — items the program manager has escalated as needing steering input. 4. **Financial status** — budget vs actual, forecasts, committed cost. 5. **Scope status** — what's in scope, what's been added / removed since last review. 6. **Resource status** — people, vendor engagement, contractor utilisation. 7. **Decisions** — explicit votes / consensus on items needing steering decision. 8. **Action items** — follow-up actions assigned to specific committee members. Each item is short — committee meetings shouldn't be hours-long; 60-90 minutes is the goal. **Decisions vs information.** Steering committees decide. Informational updates can happen by email or shorter touchpoints; meeting time should focus on items where the committee adds value: - **Scope changes** — accept, reject, defer. - **Major risks** — accept, escalate, mitigate. - **Resource conflicts** — prioritise across competing demands. - **Vendor performance issues** — escalate to vendor management. - **Strategic direction** — major architectural or product choices. Items that don't need a decision shouldn't dominate the agenda. **Pre-reads.** - **Decision items** — distributed 48 hours before the meeting. Each item has context, options, recommendation, decision asked. - **Status report** — concise, factual, not promotional. Honest about what's behind, ahead, at risk. Members come prepared; meeting time is for discussion, not for reading the material. **Documentation.** - **Minutes** — concise; decisions and action items prominent. - **Action items** — owner, due date, status. Reviewed at the next meeting. - **Decision log** — running record of every decision made; referenced as the program proceeds. Without documentation, decisions get lost; "I thought we decided X" becomes a recurring theme. **Conflict management.** Steering committees often surface conflict — finance and operations have different priorities; partner and customer disagree on a design choice; budget vs scope tension. The steering committee is where conflict gets surfaced and resolved. - **Surface conflict explicitly** — name it; don't paper over. - **Decisions in the room** — when consensus isn't possible, the executive sponsor decides. - **No revisiting outside the room** — once decided, the team executes; reversing a decision requires bringing it back to the committee. **Sponsor accountability.** The executive sponsor is the single point of accountability for program success. They: - **Defend the program** internally — protect resources, defend budget against cuts, maintain priority. - **Make the hard decisions** — when consensus isn't possible. - **Hold the partner accountable** — for delivery against contract. - **Hold the team accountable** — for execution. - **Communicate up** — keep their own peers and superiors aware. Without an engaged sponsor, programs drift. Sponsor engagement is the single best predictor of program success. **Common pitfalls.** - **No steering committee** — program operates without senior alignment; drifts. - **Steering committee without decision rights** — meetings are theatre; real decisions happen elsewhere. - **Wrong composition** — missing key functional leader; their priorities ignored; later resistance. - **Sponsor disengaged** — meetings happen but with reduced effect. - **Inconsistent attendance** — different attendees each meeting; institutional memory lost. - **Meeting cancelled when "nothing to discuss"** — alignment work skipped; reappears as crisis later. ## Operational reality Steering committee discipline is a small overhead — a few hours per executive per month. The return is enormous: a program that stays aligned with the business, decisions made and recorded, sponsors who own outcomes. Design and run the committee like a serious governance function from day one. --- # Store operations in Dynamics 365 Commerce How D365 Commerce runs physical store operations — the channel database, offline mode, daily routines, cash management, inventory, and the integration with HQ. Source: https://www.solvingdynamics365.com/guides/dynamics-365-commerce-store-operations Section: Finance & SCM / Retail & commerce Published: 2026-05-01 A retail store needs to keep running when the network drops, the head office is asleep, and the holiday rush hits unexpected volume. **Dynamics 365 Commerce** runs store operations on a distributed architecture — channel databases at each store, replicated transactions to HQ, and POS clients that fall back to offline mode when needed. Understanding the data flow and operational rhythms is essential for any Commerce deployment. **Architecture overview.** - **Headquarters (HQ)** — F&O instance holding master data and consolidated reporting. - **Channel database** — store-level SQL database with the data the store needs. - **Modern POS (MPOS)** — POS application on store terminals. - **Cloud POS** — browser-based version for tablets and back-office PCs. - **Commerce Scale Unit (CSU)** — cloud service or on-premise unit that mediates between POS and HQ. Data flows: master from HQ → CSU → channel DB → POS; transactions from POS → channel DB → CSU → HQ. ## Channel database Per store (or per shared physical network of stores). Holds: - Products and prices effective at that store. - Customer records. - Pending and completed transactions. - Employees and permissions. - Inventory levels. The store can run autonomously against this database when the network is down. ## Offline POS When the connection to CSU drops: - POS continues operating against the channel DB. - Transactions captured locally. - On reconnection, transactions sync to HQ. The threshold for offline behaviour: if CSU is unreachable for N seconds, POS goes offline. Reconnection automatically re-syncs. **Daily store routines.** - **Open store** — first transaction of the day; cash drawer set up. - **Tender declaration** — operator declares starting cash. - **Transactions throughout the day.** - **Shift change** — cashier signs off; new cashier signs on; drawer balanced. - **End-of-day** — final tender declaration; cash reconciliation. - **Close store** — settle drawers, run reports, prepare deposit. Each routine is enforced via store workflow. ## Transactions Beyond standard sale: - **Returns** — with or without original receipt. - **Exchanges.** - **Layaway** — partial payment, hold inventory. - **Special orders** — sell items not in stock. - **Customer orders** — for delivery vs in-store pickup. The POS handles each transaction type with appropriate UI and accounting. ## Inventory at store level Critical question: where's the stock? - **On-hand** — physical at store. - **In transit** — being transferred between stores or from DC. - **Reserved** — customer order or hold. - **Damaged / quarantined.** POS shows real-time on-hand from the channel DB. Replenishment to the store happens via transfers from DCs. ## Cash management Stores handle cash: - **Cash drawer per terminal** — count on open, count on close. - **Float / starting cash** — set at open, reconciled at close. - **Drops** — moving cash to safe during the day. - **Bank deposit** — end-of-day cash to bank. - **Loomis/Brink's pickup** — cash-in-transit handling. Cash reconciliation is a core finance control — discrepancies investigated immediately. ## Pricing and promotions Real-time pricing engine at POS: - **List price** from product master. - **Trade agreements** — store-specific pricing. - **Promotions** — active promo applied automatically. - **Discount overrides** — manager-approved overrides. - **Loyalty rewards** — points applied. Promotions and pricing fully cached in the channel DB so they work offline. ## Loyalty Loyalty data: - **Customer profile** with loyalty card. - **Points balance.** - **Tier status.** - **Rewards earned.** At POS, scanning the loyalty card pulls profile; points earned and burned in transactions. **Returns processing.** - **With receipt** — easy; identify original transaction. - **Without receipt** — manager approval; refund to gift card or store credit; restocking inspection. - **Damaged returns** — additional processes for quality assessment. - **Cross-channel** — online purchase returned at store; "endless aisle." The return policy is configurable; system enforces. **Workforce management.** - **Schedules** — store managers schedule employees. - **Clock in/out** — at POS or dedicated time clock. - **Hours tracking** — for payroll. - **Compliance** — break requirements, minor work restrictions. Integration with HR for employee master; with payroll for hours. **End-of-day procedures.** 1. Final transactions of the day completed. 2. Each cashier counts down drawer; variance recorded. 3. Manager reviews and approves variances. 4. Final reports printed (sales summary, tender, refunds). 5. Cash deposited or secured. 6. Channel DB syncs to HQ. This is a 30–60 minute routine per store, often a frustration point if the system is slow. **Common pitfalls.** - **CSU connectivity flakey.** Frequent offline-mode transitions; data sync issues; reconciliation problems. - **Channel DB drift.** Master data not syncing from HQ; store sees wrong prices. - **Cash variance ignored.** Small daily variances accepted; over months become significant. - **Offline transactions stuck.** Some transactions not syncing back when online; investigation needed. - **Performance issues at POS.** Hardware aging; transactions slow; checkout queues form. - **Wrong tax rates.** Tax configuration off; charges incorrect; reconciliation pain at month end. ## Operational rhythm Daily open/close routines per store; daily sync to HQ; weekly inventory adjustments; monthly cycle counts; monthly P&L per store. Mature retail operations have well-defined runbooks and clear ownership of each routine. ## Strategic positioning Retail store operations are the front line of customer experience. Reliability matters — a POS that crashes during checkout loses sales and frustrates customers. The distributed architecture of Commerce is designed for resilience, but it requires attention to ensure each store stays in sync with HQ and that offline-mode transitions are seamless. Investment in store-level operations (training, hardware, network) pays back directly in customer satisfaction and revenue. --- # Student information system integration patterns for Dynamics 365 How to integrate Dynamics 365 with a student information system — what the SIS keeps, which entities flow into Dataverse and in which direction. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-education-sis-integration Section: Industries / Education Published: 2026-09-02 Every college and university has a student information system — Banner, PeopleSoft Campus Solutions, Workday Student, Colleague, or a national equivalent — and it is not going anywhere. It owns enrolment, registration, grades, financial aid, and the official student record. Dynamics 365 in education lives around it: recruitment and admissions in Sales and Customer Insights, student services and advising in Customer Service, alumni and advancement afterwards. The integration between the two decides whether the CRM is trusted. This guide covers the patterns that hold up. For where Dynamics 365 fits at all, see [Dynamics 365 for education](https://www.solvingdynamics365.com/guides/dynamics-365-for-education). ## Decide what the SIS owns, in writing The SIS is the system of record for the student *as a student*: identity once matriculated, programme, enrolment status, term registrations, academic standing, holds, and financial aid status. Dynamics 365 is the system of record for the *relationship*: prospect and applicant data before matriculation, interactions, cases, communications, consent, and after graduation the alumni record. Write that boundary down as a table of entities with an owner per entity. Every integration argument for the next five years comes back to it, and the projects that skip it end up with advisors editing programme codes in the CRM that the SIS overwrites overnight. ## What flows, and which way The core feed is SIS to Dataverse, read-mostly: - **Person** — student identifier, names, demographic fields the institution has decided to share, contact details as held by the SIS. - **Programme and plan** — what the student is studying, with the academic organisation. - **Enrolment and term status** — enrolled, withdrawn, on leave, graduated, per term. - **Holds and flags** relevant to service — a registration hold is exactly what a student-services agent needs to see on the contact. - **Course enrolments** only if a use case needs them (advising, retention outreach by course). They are the high-volume entity; load them only when someone will act on them. The reverse direction is narrow: consent and communication preferences maintained in the CRM may need to reach the SIS, and the admissions handoff below creates the student in the SIS. Grades, financial data, and disciplinary records should not enter Dataverse without a specific, reviewed reason. Microsoft's education accelerator data model for Dataverse — with tables for academic periods, programmes, course sections, and registrations — is a reasonable starting schema, and using it avoids inventing a student table per department. ## Identity matching The student identifier from the SIS is the key, defined as a Dataverse **alternate key** on the contact so that upserts from the integration are idempotent; the [alternate keys](https://www.solvingdynamics365.com/guides/dataverse-alternate-keys) guide covers them. The hard part is before the identifier exists: a prospect in the CRM who applies through a separate application system and becomes a student in the SIS. The pattern: 1. The CRM contact carries an applicant identifier from the application platform as a second alternate key. 2. When the SIS creates the student, the application identifier travels with it. 3. The SIS-to-Dataverse feed matches on the application identifier first, sets the student identifier, and from then on matches on that. Matching on name and date of birth is the fallback, must be reviewed by a human, and should be measured — a match rate below what the institution expected is the signal that step two was skipped somewhere. ## The applicant-to-student handoff Institutions that run admissions in Dynamics 365 Sales and Customer Insights – Journeys — a viable pattern, though the specialist admissions CRMs dominate that market — reach a point where the admitted, deposited applicant must become a student in the SIS. That is a create-in-SIS transaction, usually through the SIS's API or an integration platform, and it is the one place the CRM writes to the SIS. Keep it to the minimum record the SIS needs and let the SIS assign the student identifier, which then flows back. ## Batch or event Most SIS integrations are nightly batch, and for programme and status changes that is fine. Two categories justify near-real-time: holds and flags that a service desk must see immediately, and events that trigger journeys — a withdrawal that should start a retention outreach within hours, not tomorrow. Modern SIS platforms expose events or webhooks; older ones are polled through a database view or an integration platform. The [polling versus push](https://www.solvingdynamics365.com/guides/polling-vs-push-patterns-for-dynamics-365) guide covers the trade-off; the pragmatic design is nightly batch for everything plus a small event feed for the handful of fields that matter same-day. Term start is the load test. Registration and status changes for the whole student body arrive within days, and an integration that comfortably handles a hundred changes a night faces fifty thousand. Use batch upserts through the Dataverse API, throttle deliberately, and run the first term start with someone watching. ## Analytics goes the other way Do not build reporting integrations from Dataverse back to the SIS or from the SIS into Dataverse for analytics. Both belong in a lake or warehouse: Azure Synapse Link or Fabric for the Dataverse side, the SIS's own export for its side, joined on the student identifier. Retention dashboards, yield analysis, and engagement scoring are built there, and the CRM receives only the derived flags it needs to act on (an at-risk indicator, a propensity score) through a small write-back. ## Access and FERPA US institutions operate under FERPA; others have equivalent student-privacy regimes. In the CRM this means security roles scoped by what each function legitimately needs, column security on directory-restricted fields, and auditing on the student tables. A student who has opted out of directory information must be flagged in the feed and the flag enforced by the roles and by journeys. The [data protection and compliance](https://www.solvingdynamics365.com/guides/dynamics-365-data-protection-and-compliance) guide covers the controls; the education-specific step is mapping each SIS field to a FERPA category before it is loaded. ## Sequencing Person and status first, matched on the SIS identifier. Then holds and the same-day event feed. Then programme detail and course enrolments if a use case demands them. Then the admissions handoff if the institution runs admissions in Dynamics 365. Institutions that start with the full course-enrolment history load a great deal of data that nobody looks at and delay the feed that student services actually needed. --- # Subcontracting in Business Central production How Business Central handles subcontracted manufacturing operations — vendor work centers, the subcontracting worksheet, automatic POs, and cost flow. Source: https://www.solvingdynamics365.com/guides/subcontracting-in-bc-production Section: Foundations Published: 2026-05-25 Manufacturers regularly send work out — heat treatment, plating, anodising, specialty machining, painting, calibration — operations a vendor performs better, cheaper, or because internal capacity is constrained. Business Central's **subcontracting** mechanism handles the workflow: subcontracted routing operations automatically generate purchase orders to the chosen vendor, with the cost flowing back into the production order's cost stack. **The setup.** - **Vendor as work center.** Create a **work center** that represents the subcontractor. The work center carries the vendor's number (linking to the vendor card), shop calendar (vendor's availability), and cost rates. - **Subcontractor field** on the work center — links the work center to a vendor. - **Routing operations** referencing the vendor work center are automatically subcontracted. **The flow.** 1. **Production order** is released with a routing that includes one or more subcontracted operations. 2. **Subcontracting worksheet** runs — it scans released production orders for subcontracted operations and proposes purchase orders to the assigned vendors. 3. User reviews proposals and runs **Carry Out Action Message**, which creates the purchase orders. 4. The POs reference the production order; the vendor's quoted price for the service is the PO amount. 5. The user ships intermediate goods (the work-in-progress at the operation's stage) to the vendor — typically tracked as a transfer or a special-purpose shipment. 6. The vendor performs the operation and ships back. 7. **Goods are received** as completed work on the production order — typically captured through the production journal as the next operation's input. 8. The vendor invoices for the service. 9. **Purchase invoice posts** — cost flows into the production order's WIP, becoming part of the finished item's cost. **The cost mechanics.** - The subcontracted operation's cost on the routing is what the system expects the operation to cost (estimated or standard). - The actual vendor invoice may differ (price change, quantity variance, additional charges). Variances post to variance accounts at production order completion. - For standard-cost items, the difference between routing standard and actual vendor cost becomes a production variance. **Tracking material across the subcontractor.** The most common pattern: ship raw or in-process material to the vendor; receive completed work. Several options for tracking: - **Treat as transfer** — issue a transfer order to the vendor's "location" (modelled as a location card), receive at vendor; post the operation; transfer back to the production line. - **Issue as consumption** — consume the material against the production order before sending; the vendor sends back the finished work consumed against the operation. - **Lot / serial tracking** — for sensitive items, every unit tracked to the vendor and back with full traceability. Operations differ by industry; configure to fit how the floor actually works. **Quality and rework.** - Subcontracted work that fails quality can be returned to the vendor for rework. - The return is tracked as a purchase return; the vendor reships after rework. - Rework cost may or may not be re-billed depending on contract. ## Capacity planning Subcontracted work centers can have **finite or infinite capacity** modelling: - **Finite** — the vendor has limited capacity per period; load is tracked; over-capacity dates re-schedule. - **Infinite** — assume the vendor accepts any load; load reporting is informational only. Most subcontracted vendors are modelled as infinite-capacity in BC; vendor relationships rarely encode actual capacity availability. ## Vendor selection A routing operation is assigned to a specific vendor at routing-creation time. For operations with multiple potential vendors (lowest-price wins, fastest-turnaround wins, certified-supplier-only), the routing carries one vendor and changes go through routing revision — or partner ISVs offer multi-vendor subcontracting modules. **Reporting.** - **Subcontracting worksheet** — open subcontracted operations awaiting PO creation. - **Vendor scorecards** — performance per subcontractor (on-time, quality, cost). - **Production cost variance** — subcontract variance per item per period. **Common pitfalls.** - **Subcontract operation not yet released** — the worksheet doesn't propose POs for not-yet-released production orders. Release sequencing matters. - **Vendor not linked to work center** — the subcontract routing fails silently; check the link. - **Material in transit to vendor unaccounted** — physical goods at the vendor but no system record of their location. - **Vendor invoice for different quantity** — variance handling needs explicit attention. ## Operational reality Subcontracting in BC works well for standard scenarios. Complex multi-vendor sourcing, dynamic pricing, or sophisticated quality workflows often justify a partner ISV. For mainstream subcontracting in mid-sized manufacturing, BC's built-in is adequate. --- # Subcontracting in Project Operations How Project Operations handles subcontractor management — engaging external resources, time and expense capture, billing, and the accounting flow. Source: https://www.solvingdynamics365.com/guides/subcontracting-in-project-operations Section: Customer Engagement / Project Operations Published: 2026-05-01 Subcontracting — engaging external companies or individuals to deliver part of a project — is standard for services businesses managing peak demand, niche skills, or geographic coverage. Dynamics 365 Project Operations handles subcontractor engagement with first-class objects for resource sourcing, time and expense, billing, and accounting reconciliation. ## Why subcontracting is harder than employees Internal employees come with known cost rates, accessible time-entry tools, and integrated approval flows. Subcontractors come from external vendors with their own rate negotiations, different time-capture experiences, separate accounting flows, and contract-bound deliverables. Project Operations models the differences explicitly. **The subcontracting flow.** 1. **Identify the need.** A project requirement that can't be filled internally — the resource hub flags it as unfilled or the project manager explicitly requests external sourcing. 2. **Engage a vendor.** The vendor is a Dataverse Account; the agreement is a **purchase agreement** specifying rate, terms, deliverables. 3. **Bookable resource for the subcontractor.** The subcontractor's named individual is created as a **bookable resource of type Account** (or Contact for a specific individual), tied to the vendor. 4. **Booking against the project.** The subcontractor is booked to project tasks like any other resource, with skill match and capacity. 5. **Time and expense capture.** The subcontractor enters time and expense, either directly (through a Power Pages portal granting limited access) or via the prime contractor's project manager entering on their behalf from invoices received. 6. **Approval.** The customer's project manager approves time and expense. 7. **Vendor invoice posts.** A purchase invoice from the subcontractor's company posts in F&O or BC, referencing the project. The cost lands in the project's cost ledger. 8. **Customer billing.** The customer is billed for the work (possibly with markup) as part of the regular project invoicing. ## Cost vs price The subcontractor's cost (what you pay them) and the customer price (what the customer pays for that work) are distinct. Typical pattern: the project has a "Subcontractor Hours" billable plan billable at the customer rate; the actual cost posts at the subcontractor's vendor rate. Margin equals the difference. Reporting shows both. **Three engagement models.** - **Time and Materials subcontracting** — pay the subcontractor for their time at agreed hourly rates; bill the customer at the customer rate. - **Fixed-fee subcontracting** — pay the subcontractor a fixed amount for a deliverable; bill the customer on the project's terms (possibly fixed-fee, possibly T&M). - **Capped T&M** — pay the subcontractor T&M up to a capped total; protect against overruns. ## Sourcing through purchase requisitions For larger organisations, formal sourcing through purchase requisitions and POs gives procurement oversight on subcontractor engagements. The PO references the project and the resource requirement, creating a paper trail. ## Portal access for subcontractors A **Power Pages portal** can give subcontractors restricted access to log time and expense against the projects they're booked to. Pre-configured permissions limit what they see to their own work, with no exposure to other client projects. ## Compliance Subcontractor engagements often have regulatory dimensions: - **IR35 / worker classification** in some countries — is the subcontractor genuinely independent or effectively an employee for tax purposes? - **Background checks** — required by customer or industry. - **Confidentiality agreements** — managed as contract documents. - **GDPR / data protection** — subcontractors processing customer data need explicit data-protection agreements. Document these alongside the engagement record. ## Reporting Subcontractor margin per project, per vendor; subcontractor utilisation; subcontractor performance ratings against deliverables; spend by vendor over time. **Common pitfalls.** - **Subcontractor cost not posted to project** — billed to customer but no offsetting cost, inflating margin. - **Time captured without approval** — subcontractor invoices for hours the customer didn't approve. - **Markup transparency** — some customer contracts require disclosing subcontractor rates; others forbid the customer from knowing. - **Currency mismatches** — pay in one currency, bill in another; FX gains/losses surprise. ## Operational discipline Subcontracting works when the engagement is paperwork-disciplined and the time-and-cost flow is honest. Skip the discipline and subcontractor work becomes a profitability mystery. --- # Subcontracting workflows in Dynamics 365 Supply Chain Management How subcontracted production works in Dynamics 365 Supply Chain Management — the service-item and vendor-line-type pattern, vendor resources on routes. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-manufacturing-subcontracting-in-f-and-o Section: Industries / Manufacturing Published: 2026-09-02 Subcontracting — sending a partly finished item to an outside vendor for an operation such as plating, machining, or heat treatment, then getting it back — is routine in discrete manufacturing and awkward in most ERPs. Supply Chain Management has a coherent model for it, but it involves more objects than people expect: a service item, a purchase order, a vendor resource, a vendor warehouse, and a production order that all have to line up. This guide walks the model and the operational decisions around it. For Business Central, see [subcontracting in BC production](https://www.solvingdynamics365.com/guides/subcontracting-in-bc-production); for services businesses, [subcontracting in Project Operations](https://www.solvingdynamics365.com/guides/subcontracting-in-project-operations). ## The model in one paragraph The subcontracted operation is a route operation whose resource is a **vendor-type resource**. The cost and purchasing of that operation are carried by a **service item** placed on the BOM with **line type Vendor**, which tells the system to create a purchase order to the subcontractor when the production order is estimated. The components the vendor needs are moved to a **warehouse that represents the vendor**. When the service item's purchase order is received, the operation is reported as finished and the production order continues. Costing flows from the purchase price of the service item into the produced item's cost. Every piece of that sentence is a configuration decision. ## Setting it up **The vendor resource.** Create a resource of type Vendor linked to the vendor account, put it in a resource group, and use it on the subcontracted operation of the route. Capacity on a vendor resource is usually set to infinite, because the manufacturer does not schedule the vendor's shop. Lead time lives on the operation as run time or, more commonly, as the service item's purchase lead time. **The service item.** An item of product type Service, with a purchase price from the subcontractor's trade agreement. On the BOM of the produced item, add it as a line with line type *Vendor*, and set the operation number to the subcontracted operation so that the purchase order is tied to the right step. Whether the service item consumes at operation start or finish is a BOM-line flushing decision. **The vendor warehouse.** The subcontractor's premises are modelled as a warehouse — one per subcontractor if material is tracked at them, or a single "at subcontractor" warehouse if only the accounting matters. The BOM lines for components consumed at the vendor's operation point to this warehouse. Getting them there is a transfer order or a transfer journal, which is the first of the manual steps. **Line type and purchase order timing.** With line type Vendor, estimation of the production order creates the purchase order to the subcontractor. Schedule the production order and the PO's requested delivery date follows the operation's scheduled end. Change the production schedule after the PO exists and the dates do not update automatically — a planner has to. ## The operational flow 1. Production order created and estimated. PO to the subcontractor is generated for the service item. 2. Components for the vendor operation are transferred to the vendor warehouse. In a warehouse-management-enabled setup, this is a transfer order with picking work; without it, a transfer journal. 3. Physical shipment of components with a packing slip from the transfer order, which doubles as the paperwork the subcontractor needs. 4. Subcontractor does the work. Nothing happens in the system unless vendor collaboration or a portal is in use for acknowledgement. 5. Finished or semi-finished items come back. The service item PO is received; the receipt reports the operation's quantity as finished. If the route operation is the last one, the production order can be reported as finished from here. 6. Vendor invoice matched to the PO. Cost lands on the production order via the service item's consumption. Two points trip up first implementations. The PO receipt drives the operation feedback, so receiving the wrong quantity or receiving before the goods arrive corrupts the production order's progress. And the material at the vendor warehouse is consumed by the production order at the vendor operation, so if the transfer was skipped, the consumption journal will show negative stock at the vendor warehouse, which is how many manufacturers discover their process is not being followed. ## Costing The subcontract cost is the purchase price of the service item, which flows into the produced item's cost as a material-type cost by default. Manufacturers that want subcontract cost broken out on the cost roll-up define a dedicated cost group for service items, so that the produced item's standard cost shows material, labour, overhead, and subcontracting separately. Do this at design time; recategorising later means re-rolling every standard cost. Standard-cost manufacturers also need a policy for subcontract price variance, because the PO price and the standard rarely match. It posts through the normal purchase price variance accounts and is visible per production order. ## Warehouse management and subcontracting With advanced warehouse management, the vendor warehouse is warehouse-management-enabled or not, and that choice has consequences. Enabling it gives proper picking and shipment work for the outbound transfer but makes the receipt of the service item a warehouse process too, which is unnecessary ceremony for a service. The common compromise: outbound transfers under warehouse management from the main warehouse, vendor warehouse not warehouse-management-enabled, receipt of the service item as a plain PO receipt. ## What is not in the product There is no subcontractor portal for the vendor to see what is at their site and report progress. **Vendor collaboration** gives the subcontractor PO acknowledgement and invoice visibility, which is useful but not shop-floor status. Partners offer subcontractor portals built on Power Pages. There is also no automatic rescheduling of the subcontract PO when the production order moves; the linkage is created at estimation and maintained by people. Quality inspection on returned items works through the standard quality management module, with a quality order triggered at PO receipt of the service item — set the quality association on the service item, not the produced item, or the trigger never fires. ## Deciding how much to model A manufacturer with three subcontractors and a few operations can run the full model comfortably. One with sixty subcontractors and hundreds of service items needs to think about whether every subcontractor warrants a warehouse and whether transfer orders per shipment are sustainable. The alternative — a single vendor warehouse and periodic transfer journals — loses traceability of what is at which vendor. There is no right answer, but the decision should be made deliberately, because changing it after go-live means changing every BOM. --- # Subscription billing in Dynamics 365 Finance Microsoft's Subscription Billing module — recurring contracts, revenue recognition, billing schedules, and where it fits in the F&O stack. Source: https://www.solvingdynamics365.com/guides/dynamics-365-finance-subscription-billing Section: Finance & SCM / Finance Published: 2026-05-01 **Subscription Billing** is a relatively recent addition to Dynamics 365 Finance, built to handle the recurring-revenue, contract-driven business models that are now common across software, telecoms, equipment-as-a-service, and B2B services. It replaces a long history of customer-built workarounds for handling subscriptions in AX/F&O. ## Three integrated components Subscription Billing combines three working units: 1. **Recurring Contract Billing** — manages contracts, billing schedules, mid-term changes (add/remove products, prorations, upgrades/downgrades), and renewals. 2. **Revenue and Expense Deferrals** — manages straight-line and milestone deferrals of revenue or expense across periods, automating the journals. 3. **Multiple Element Allocations** — handles the ASC 606 / IFRS 15 problem of allocating contract revenue across performance obligations when a contract bundles multiple products or services. ## Contracts A subscription contract holds the customer, term, billing cadence, products, prices, discounts, and any special clauses. Contracts can be billed monthly, quarterly, annually, on milestones, or on usage. Mid-term changes (adding a seat, upgrading a tier, partial cancellation) prorate automatically. ## Revenue recognition Revenue recognition is decoupled from billing — invoicing a customer for an annual contract doesn't recognise twelve months of revenue at once. The deferral component spreads revenue across the contract period to comply with accounting standards. Performance-obligation-based recognition handles bundled contracts. ## Usage billing For consumption-based components, usage data feeds Subscription Billing through a Data Management interface or an API, where it's priced and billed alongside the recurring component on the same invoice. ## Pricing Tiered pricing, volume discounts, ramp-ups, and prepaid balances are all configurable without custom code. ## Integration with the rest of F&O Subscription Billing posts to the standard AR sub-ledger, so customer balances, payments, and statements work as normal. Revenue recognition entries land in the GL with deferred-revenue control accounts and recognised-revenue accounts mapped by product. ## Reporting ARR (annual recurring revenue), MRR (monthly recurring revenue), churn, contract value, and waterfall reports are produced via Power BI templates that ship with the module. ## Where it doesn't fit Very high-volume B2C subscriptions (tens of millions of subscribers) typically sit better with a dedicated subscription platform (Stripe Billing, Zuora) that feeds F&O the financial summary. For B2B subscription businesses up to mid-market, Subscription Billing is increasingly the right answer in-product. --- # Sustainability in Business Central How Business Central's Sustainability module tracks emissions and environmental data — emission scopes, accounting. Source: https://www.solvingdynamics365.com/guides/sustainability-in-business-central Section: Business Central / Compliance & localisation Published: 2026-05-01 Sustainability reporting has moved from nice-to-have to regulatory obligation in many jurisdictions — the EU's **Corporate Sustainability Reporting Directive (CSRD)** is the most prominent example, with similar regimes in the UK, US, and elsewhere. Microsoft added a **Sustainability** module to Business Central to put emissions tracking and environmental data inside the same system that already holds the financial transactions. ## The model Sustainability in Business Central works in parallel to the financial ledger — but instead of debits and credits, the entries are **emissions** in CO₂-equivalent units. Each environmental transaction has: - **Date** — when the emission occurred. - **Source** — what produced it (item purchased, fuel consumed, electricity used, business travel, waste). - **Emission scope** — Scope 1, Scope 2, or Scope 3 (the GHG Protocol categories). - **Quantity** — the volume of activity (litres of fuel, kWh of electricity, kg of material). - **Emission factor** — the conversion factor from activity to CO₂-equivalent (e.g. 2.3 kg CO₂e per litre of diesel). - **CO₂-equivalent amount** — quantity × factor. **Emission scopes.** - **Scope 1** — direct emissions from operations the company owns (company fuel use, company-owned vehicles, on-site combustion). - **Scope 2** — indirect emissions from purchased energy (grid electricity, district heat). - **Scope 3** — all other indirect emissions in the value chain (purchased goods and services, business travel, employee commuting, downstream product use, end-of-life). Scope 3 is typically the largest and hardest to track — it includes the emissions embedded in everything the business buys. ## Emission factors A library of **emission factors** maps activity types to CO₂-equivalent rates. Factors are jurisdiction-specific (electricity grid carbon intensity differs by country) and update periodically. Microsoft ships baseline factors; customers extend with industry-specific ones or third-party factor providers. ## Integration with financial transactions The powerful pattern: link emissions to financial activity. A vendor invoice for diesel posts both a financial transaction (cost) and an emissions transaction (Scope 1 from fuel). A purchase of materials posts both cost and Scope 3 embedded emissions if the vendor's product carbon footprint is known. This automation — emissions captured as a by-product of normal posting — is what makes ongoing reporting sustainable rather than a quarterly research project. ## Reporting The module produces: - **Emissions by scope, time, source, location** — the core summary views. - **Trend reports** — year-over-year, period-over-period. - **CSRD-aligned reports** — pre-built for the European Sustainability Reporting Standards (ESRS), with mapping to the standardised disclosure tables. - **Power BI dashboards** — for management and operations visibility. ## Targets and reduction tracking The module supports setting **emission targets** (e.g. Scope 1+2 reduction of 30% by 2030 baseline 2024) and tracking progress over time. ## Limits Business Central's Sustainability module covers the structured emissions accounting cleanly. It does *not* replace specialist platforms for complex needs: - Lifecycle assessment (LCA) of products. - Supplier engagement and primary-data collection programmes. - ESG strategy and disclosure software for very large multi-entity organisations. For most SMB and mid-market customers running BC, the module covers the operational emissions tracking required for CSRD and similar disclosures. Larger organisations integrate BC with **Microsoft Sustainability Manager** (a separate product on the Microsoft Cloud for Sustainability) for the enterprise scope. ## Operational reality Sustainability reporting is a discipline as much as a technology problem — get the right activities tagged with the right factors, post emissions as normal business happens, review and disclose. The module is the enabler; the data quality is the customer's responsibility. --- # Teams collaboration with Dynamics 365 How Microsoft Teams integrates with Dynamics 365 — embedded record views, chat in context, meeting integration, Loop components. Source: https://www.solvingdynamics365.com/guides/teams-collaboration-with-dynamics-365 Section: Foundations / Productivity & UX Published: 2026-05-01 Microsoft Teams is increasingly the connective tissue across Microsoft 365 and Dynamics 365 — chat, meetings, file collaboration. The integration with Dynamics surfaces records, automations, and workflows where users already work. Done well, it eliminates context-switching between Teams and Dynamics apps; done poorly, it adds another integration to maintain without behavioural change. **The integration touchpoints.** - **Records in Teams** — pin a Dynamics record (account, opportunity, case) to a Teams channel for ongoing collaboration. - **Chat about records** — start chats with context from Dynamics. - **Meeting integration** — Dynamics records linked to meetings; meeting notes flow to Dynamics. - **Adaptive cards** — Dynamics events posted as cards in Teams. - **Approval flows** — Power Automate approvals delivered in Teams. - **Power Apps in Teams** — embed canvas or model-driven apps as Teams tabs. - **Copilot integration** — M365 Copilot accessing both Teams and Dynamics data. Each is a useful integration; together they form a meaningful productivity pattern. ## Pinning records to channels A common use case: - Sales channel pins active opportunities. - Service channel pins escalated cases. - Project channel pins the project and milestones. The pinned record displays Dynamics data in the Teams channel; team members discuss the record in channel chat; updates in Dynamics reflect in the pin. ## Chat from records From a Dynamics record: - Start a Teams chat about it. - Pre-populated with link back to the record. - Includes recipient lookup (typically the record's owner and stakeholders). The pattern reduces friction — no need to manually paste record URLs into chats. **Meeting and call integration.** - **Calendar invites** can reference Dynamics records. - **During meetings**, the linked record is accessible. - **Meeting notes** synced to the record post-meeting. - **Call recordings** (Teams Premium) processed by Sales Conversation Intelligence. The link between meetings and CRM records keeps activity history clean without manual logging. ## Power Apps in Teams Canvas apps and model-driven apps can be embedded as Teams tabs: - **Channel-level apps** — for team-shared apps. - **Personal apps** — for individual use. The app runs inside Teams; users don't leave to use it. For specific workflows (timesheet, expense, time-off), this is a meaningful productivity uplift. **Adaptive cards.** - Dynamics events post cards to Teams channels — "new high-value opportunity in your region." - Cards can include action buttons — approve, view, dismiss. - Power Automate flows post adaptive cards on events. Cards work in chat or channel posts; they're interactive and respect Teams's display. ## Approval flows Power Automate approvals deliver to Teams: - Approver sees the approval in their Teams feed. - Tap-to-approve directly in Teams. - Mobile-friendly. For organisations standardising on Teams, this is the canonical approval surface; avoids approver context-switching. ## Loop components Microsoft Loop is the collaborative-component framework: - **Loop component** — a piece of interactive content (task list, voting, status). - **Embeddable** in Teams chat, Word, Outlook. - **Shared state** — updates sync across surfaces. Some Dynamics integrations expose Loop components for shared collaboration on a record. **Copilot integration.** - **M365 Copilot** can query Dynamics data when properly authorised. - **"Summarise this opportunity"** answers from Dynamics data. - **"Draft an email to this customer about open cases"** combines Outlook and Dynamics context. The Copilot story stitches data across products invisibly to the user. **Implementation considerations.** - **Permissions** — Teams users need appropriate Dynamics permissions. - **Tenant configuration** — Teams + Dynamics in the same Microsoft tenant; cross-tenant is possible but more complex. - **Licensing** — both Teams and Dynamics licences required; Copilot adds further. - **Information architecture** — which channels, which apps, which records to pin. **Adoption patterns that work.** - **Start with a high-frequency workflow** — sales opportunity review, case escalation. - **Train both Teams users and Dynamics users** — the integration touches both. - **Build adaptive cards for high-signal events** — not every Dynamics change; only the ones worth interrupting. - **Measure usage** — adoption metrics reveal which integrations stick. **Pitfalls.** - **Over-notification.** Every Dynamics change posts to Teams; channels become noise. - **Wrong-channel pins.** Records pinned in channels not actually used; pins ignored. - **Permissions misaligned.** Teams user sees Dynamics record but can't update; frustration. - **Adaptive cards stale.** Card shows data captured at posting time; not updated. - **Power Apps in Teams ignored.** Embedded but users still go to Power Apps web. **Operational rhythm.** - **Quarterly review** of integration usage and value. - **Continuous tuning** — turn off integrations that aren't driving behaviour. - **Update cards and Power Apps in line with Dynamics changes.** ## Strategic positioning Teams + Dynamics 365 integration is the canonical Microsoft productivity vision: collaboration and CRM/ERP in one interface. The technical integration is mature; the operational reality depends on adoption discipline. For organisations already deep on Teams, integrating Dynamics into Teams is natural. For organisations less Teams-centric, forcing the integration is less effective. The investment is moderate (configuration, training, possibly custom Power Apps); the payback is measurable productivity through reduced context-switching. Most modern Microsoft-aligned organisations should pursue this integration; the question is which workflows and how deeply, not whether. --- # Tenant administration for Dynamics 365 How to administer a Dynamics 365 tenant — Microsoft 365, Power Platform, Business Central, and Finance/SCM admin centres, roles, and tenant-level governance. Source: https://www.solvingdynamics365.com/guides/tenant-administration-for-dynamics-365 Section: Implementation / Operations & support Published: 2026-05-01 A Dynamics 365 tenant is administered across several overlapping admin consoles. Knowing which one does what — and what tenant-level governance settings live where — is essential to running the platform without surprises. **The four main admin consoles.** 1. **Microsoft 365 admin centre** (admin.microsoft.com) — the master console for tenant-level identity, users, licences, domains, and Microsoft 365 services. The starting point for everything else; Entra ID is here, licence assignment is here, baseline tenant configuration is here. 2. **Power Platform admin centre** (admin.powerplatform.microsoft.com) — environments, Dataverse capacity, DLP policies, custom connectors, AI Builder credits. Where most Dynamics 365 CRM-side and Power Platform admin happens. 3. **Business Central admin centre** (businesscentral.dynamics.com/...) — BC-specific: environments (production and sandbox), notifications, update windows, application insights configuration, telemetry, support tickets. 4. **Lifecycle Services (LCS)** (lcs.dynamics.com) — Finance and SCM specific: environments, code deployments, platform updates, support tickets, asset library, BPM, telemetry. Microsoft is gradually migrating LCS functions to the Power Platform admin centre. ## Entra ID and identity All Dynamics 365 sign-in flows through **Microsoft Entra ID** (formerly Azure AD). Tenant-level identity policies — MFA, conditional access, named locations, app consent policies — are configured at the Entra layer and apply to Dynamics 365 automatically. Custom policies are typically in scope for: - MFA enforcement for all Dynamics 365 access. - Conditional access blocking risky sign-ins. - App consent restrictions preventing user-driven third-party app integrations. ## Roles for admins Microsoft Entra has tenant-scoped roles: - **Global Administrator** — full tenant control. Use sparingly; protect with extra MFA and review. - **Power Platform Administrator** — full Power Platform admin centre access. - **Dynamics 365 Administrator** — broader rights across Dynamics 365 admin functions, including F&O. - **License Administrator** — assign/remove licences. - **User Administrator** — manage users. Within Dynamics 365 apps themselves, separate **app-level roles** (e.g. *Customer Service Manager*, *Sales Administrator* in Dataverse; *System Administrator* in F&O) govern in-app rights. ## Tenant-wide DLP Data Loss Prevention policies in the Power Platform admin centre classify connectors as Business / Non-Business / Blocked, and prevent flows or apps from mixing classes. Set a tenant baseline and refine per environment. ## Licence management Microsoft 365 admin centre assigns Dynamics 365 licences to users. Power Platform admin centre shows capacity (Dataverse storage, API call usage, AI Builder credits) consumed. Both are checked monthly for the health of the tenant. ## Environment topology A healthy Dynamics 365 tenant has at minimum: production environment, UAT/Test sandbox, Dev sandbox. Larger orgs have per-team dev environments, per-product UATs, per-region production environments. Document the topology and review quarterly. ## Backup and restore Production Dataverse environments have 28 days of point-in-time backup; BC and F&O similar. Test the restore process before you need it. ## Auditing Tenant-wide audit events stream to **Microsoft Purview** for compliance retention. Per-app audit configures per table; verify both layers. ## Alerting Tenant-level health (sign-in failures, service disruptions, capacity warnings) routes through Azure Monitor and the Microsoft 365 admin centre's service health page. Configure email or Teams notifications to a real distribution list, not an individual. ## Governance documentation Maintain a single-page tenant governance document: environments, admin roles, DLP policies, licence holders, capacity thresholds, alert escalations. Living document, reviewed quarterly. --- # Tenant-to-tenant migration scenarios What's involved in migrating Dynamics 365 from one Microsoft 365 tenant to another — common scenarios, what moves, and what has to be rebuilt. Source: https://www.solvingdynamics365.com/guides/tenant-to-tenant-migration-scenarios Section: Implementation / Operations & support Published: 2026-05-01 Sometimes Dynamics 365 needs to move from one Microsoft tenant to another — an acquisition consolidates two organisations onto a single tenant, a divestiture splits one company into separate tenants, a customer migrates from a partner-managed tenant to their own, a re-organisation moves business units across tenants. These migrations are non-trivial and infrequently smooth; planning makes the difference between completed-on-schedule and stuck-for-months. ## Why tenant migration is hard A Microsoft tenant is a deep container — Entra ID, all M365 services, all licensing, all Dynamics 365 environments, all Power Platform environments, file storage, mail, SharePoint, every integration token, every service principal. Moving from one to another isn't a copy; it's a re-establishment across many surfaces simultaneously. **Common scenarios.** 1. **Carve-out from a parent tenant.** A business unit being divested into its own company needs its Dynamics 365 environment moved to a fresh tenant. Most surgical migration scenario. 2. **Merger consolidation.** Two companies merging consolidate onto one tenant. Either one party's existing tenant absorbs the other, or both move to a fresh tenant. The bigger of the two usually absorbs. 3. **Partner-managed to customer-managed.** A customer running Dynamics 365 inside a partner's tenant moves to their own tenant once they outgrow the partner-hosted model. 4. **Geographic / regulatory move.** Moving from a global tenant to a country-specific sovereign tenant for data-residency requirements. 5. **Sovereign cloud move.** Moving from commercial cloud to GCC, GCC High, or DoD — substantial operational changes. **What Microsoft supports natively.** For **Dataverse-based** environments (CRM, Customer Service, Field Service, Power Platform), Microsoft has improving but not perfect tenant-migration tooling. The `pac` CLI and partner tools (KingswaySoft, Skyvia, Scribe) export and import data, with manual reconciliation for identity-bound items. For **Business Central**, Microsoft offers a **tenant migration** through the BC admin centre — copy environments from one tenant to another, with limitations on identity-bound configuration. For **Finance and Operations**, tenant moves go through Microsoft FastTrack-supported processes. Not self-service; substantial Microsoft engagement. **What moves cleanly.** - Application data (Dataverse rows, BC data, F&O data). - Customisations as packaged solutions / apps / deployable packages. - Configurations stored as data. - File attachments (with rebinding to new SharePoint locations). - Code (extensions stored in source control). **What has to be rebuilt or rewired.** - **Identity / user accounts.** Users are bound to the originating Entra tenant. Moving users requires creating new accounts in the destination tenant and reassigning record ownership. - **Service principals and app registrations.** Each integration's authentication needs new registrations in the destination tenant. - **Connections in Power Automate / Power Apps.** Every connection re-authenticates after migration. - **SharePoint integration.** Document libraries rebind to destination SharePoint. - **Licensing.** New licences provisioned in destination; original licences released. - **Custom domain names.** DNS records, SSL certificates re-establish. - **External partner access** — Entra B2B guest accounts re-established. - **Webhook subscriptions, Service Bus endpoints, Event Grid subscriptions** — every external integration target reconfigured. - **Telemetry endpoints** — Application Insights resources may move. **The phased approach.** 1. **Discovery** — comprehensive inventory of every Dynamics 365 environment, integration, custom code, configuration, integration point, user. 2. **Architecture** — destination tenant topology, with identity and integration design. 3. **Pilot migration** — migrate a small slice (one environment, a few users) to validate the approach. 4. **Mock migration** — full dress rehearsal. 5. **Production migration** — typically over a weekend with read-only freeze on the source. 6. **Hypercare** — extended support for the first weeks as integrations re-establish. ## Timeline Realistic timelines for tenant migrations span **3–12 months** depending on scope. Quick promises of "we'll move it next month" usually miss the depth of work. ## Operational reality Engage Microsoft FastTrack early. The cost-benefit of doing this without expert guidance rarely pays. --- # Test automation for Dynamics 365 How to automate testing for Dynamics 365 — AL test framework, EasyRepro for CRM, Playwright for web UIs, and the strategy that actually pays back. Source: https://www.solvingdynamics365.com/guides/test-automation-for-dynamics-365 Section: Foundations Published: 2026-05-01 Test automation in Dynamics 365 is genuinely hard. The platform spans AL, X++, JavaScript, Power Fx, Dataverse plug-ins, Power Automate flows, and web UIs — each with different tooling. Done thoughtfully, automation catches regressions that release waves silently introduce; done badly, it's a maintenance burden that gets abandoned. The strategy matters more than any specific tool. ## What to automate Not everything. Prioritise: - **Posting paths** — the transactional code that puts data into the GL or sub-ledgers. Most consequential if it regresses. - **Custom AL or X++ code** — your own extensions. Microsoft tests their own; you test yours. - **Critical integrations** — flows that move data across systems. Silent failures here are expensive. - **High-volume / high-frequency processes** — anything users hit hundreds of times a day, where a UI change costs operations. ## What not to automate UI tests that depend on Microsoft's standard pages. Microsoft changes them release-by-release and your tests become a maintenance treadmill chasing those changes. Test your extensions; trust Microsoft to test theirs. ## Layer 1: AL test framework (Business Central) Built-in. Run by the `bccontainerhelper` PowerShell module in containers. Each AL test codeunit holds test methods with `[Test]` attributes. Tests run in rolled-back transactions so they're re-runnable. Microsoft ships **Test Libraries** with helper functions for creating customers, items, sales documents, etc. Use them. ## Layer 2: Dataverse plug-in unit tests C# plug-ins have plain .NET unit tests using **FakeXrmEasy** or **XrmUnitTest** — frameworks that mock the Dataverse SDK so plug-ins can be tested without a real Dataverse environment. Fast, run in CI, catch logic bugs. ## Layer 3: Power Automate flow tests Power Automate has built-in flow checker and a **Power Automate Test Framework** for unit-testing flow logic with mocked actions. Less mature than other layers, improving. ## Layer 4: Power Apps tests Canvas apps support **Power Apps Test Studio** for recorded test flows. Model-driven apps test through web UI automation. ## Layer 5: UI automation Two leading tools: - **EasyRepro** — Microsoft's open-source library on top of Selenium, targeting Dynamics 365 model-driven apps. C# tests script user interactions: open opportunity, set field, click save, verify result. Robust against Microsoft's web UI changes (Microsoft maintains it alongside the product). - **Playwright** — Microsoft's modern web testing framework, language-agnostic (TypeScript, Python, C#, Java). Increasingly preferred for new projects given its broader cross-application capability — test a Dynamics 365 form, a Power Pages portal, and a Power Apps canvas app in one suite. For Business Central web client, **Playwright** or **Selenium** drive the UI; pattern is similar. ## Layer 6: Integration tests End-to-end scenarios that span multiple systems. Often built in Power Automate flows that perform the test scenario, capture results, post to Dataverse for tracking. Or in dedicated test orchestrators like **Azure Test Plans** or **TestFlight**. ## CI/CD integration Tests at every layer run in CI: - Unit tests on PR build. - Integration tests on merge to main. - UI smoke tests in UAT after deploy. - Full regression suite weekly or before production deploys. ## Test data A persistent challenge — tests need data that survives release-wave updates and resets. Patterns: - **Self-creating tests** — each test creates the data it needs (customers, products, orders) and rolls back. - **Reference data sets** — a small set of stable test records preserved through resets. - **Synthetic data** — generated programmatically for volume / performance tests. ## Maintenance Automated tests rot. Schedule quarterly review — which tests still pass, which fail false-positively, which haven't run in months. Retire what's dead; refactor what's flaky. ## Operational reality Start small. 20 well-maintained tests on critical paths beat 200 flaky tests nobody trusts. Build the culture of "every bug deserves a test" so the suite grows from real lived experience, not aspirational planning. --- # Test data management for Dynamics 365 How to build and maintain test data for Dynamics 365 environments — anonymisation, synthetic data, data subsetting. Source: https://www.solvingdynamics365.com/guides/test-data-management-for-dynamics-365 Section: Implementation / Project execution Published: 2026-05-01 Realistic test data is one of the most underrated assets in any Dynamics 365 programme. Without it, testing happens against thin or stale data that doesn't reveal the issues real production data would. With it, defects are caught early and stakeholders trust UAT outcomes. **Test data management** is the discipline of designing, generating, anonymising, and maintaining data for non-production environments. **The problem.** - **Production-like data** is essential for realistic testing but contains sensitive content that can't be exposed in non-prod. - **Synthetic data** is safer but rarely captures real-world data quirks that cause production issues. - **Subsets of production** balance realism and volume but bring referential integrity challenges. - **Stale data** in test environments means tests pass that production would fail. The right answer is usually a mix: subsetted, anonymised production data refreshed periodically, supplemented with crafted synthetic data for specific scenarios. **Anonymisation strategies.** - **Substitute** — replace names with fictional alternatives. - **Mask** — replace specific characters (e.g., emails become `j***@e***.com`). - **Shuffle** — re-order column values across rows (preserves distribution, breaks identity). - **Hash** — irreversibly transform identifiers. - **Tokenise** — replace with consistent placeholder values. Each has trade-offs: - Substitution preserves natural reading but loses statistical properties. - Shuffling preserves stats but breaks within-record consistency. - Hashing is irreversible but identifiers don't look natural. **What to anonymise.** - **Names** — first, last, full names. - **Emails** — fictional or hashed. - **Phone numbers** — fictional or masked. - **Addresses** — fictional, but geographically plausible. - **Tax IDs / SSNs** — never preserved in non-prod. - **Credit card data** — should never be in Dynamics; certainly not in non-prod. - **Health data** — strict regulatory requirements. - **Salary data** — masked or shuffled. - **Free-text fields** — most problematic; may contain accidentally-pasted sensitive content. ## Free-text challenges Notes, descriptions, email bodies, case narratives — these contain unpredictable content. Solutions: - **Pattern detection** — find SSN-like patterns, credit-card-like patterns, replace. - **Wholesale replacement** — replace free text with synthetic content. - **Manual review** — for small datasets. Each has cost; complete free-text anonymisation is hard. ## Referential integrity in subsets Subset production: pick 1,000 customers from 100,000. Need their: - Related contacts. - Open opportunities. - Cases. - Orders. - All recursive related data. A naive subset breaks referential integrity. Tools that follow relationships (parent-to-child) preserve integrity. Building such tools for complex schemas (F&O especially) is significant work. **Synthetic data generation.** - **Templated** — predefined templates for common entities. - **Generative** — rule-based generation (names from lists, addresses from city tables). - **AI-generated** — LLMs generate plausible text content. - **Combinatorial** — exhaustive coverage of choice combinations. For specific test scenarios (boundary conditions, rare combinations), synthetic data is more valuable than production subsets — production rarely contains the edge case you want to test. **Tools.** - **Microsoft Test Data Generator** — limited capability. - **Configuration Migration tool** — F&O-focused. - **Third-party** — Tonic.ai, IBM Optim, Delphix. - **Custom scripts** — Power Automate, Power Shell, custom .NET. For large-scale TDM, dedicated commercial tools save time; for small projects, scripted custom approaches suffice. **Refresh cadence.** - **Per UAT cycle** — refresh UAT data before each round. - **Per major test phase** — refresh SIT before integration testing. - **Quarterly** — refresh dev / playground environments. Refresh always includes re-anonymisation; bypassing this is a compliance risk. **Test data for specific scenarios.** - **Performance testing** — large volume data; realistic distribution. - **UAT** — recent production-like data; familiar to stakeholders. - **Functional testing** — small, carefully crafted data covering specific scenarios. - **Demo** — clean, presentable data without anomalies. Each scenario has different needs; one dataset rarely serves all. ## Data versioning As schemas evolve: - New columns need data. - Deleted columns leave gaps. - Renamed columns break references. Test data needs versioning aligned with solution versioning — restore data from a backup matched to a solution version. **Common pitfalls.** - **No regular refresh.** Test data 6 months stale; UAT participants find issues that production has long since had. - **Anonymisation skipped.** Production data refreshed to non-prod without anonymisation; compliance breach. - **Free-text leaked.** Anonymisation script handles structured fields but misses free-text; sensitive data slips through. - **Subset broken.** Subsetting tool misses relationships; tests fail with FK errors. - **Synthetic data unrealistic.** Generic names, default addresses; tests don't catch edge cases that real data would. - **Environment data drift.** Each test environment has different data; reproducing issues across environments impossible. **Operational rhythm.** - **Pre-UAT** — refresh, anonymise, validate. - **Pre-release** — production-like data for pre-prod. - **Continuous** — synthetic data templates for ongoing testing. - **Periodic** — full test data audit; identify stale or compromised sets. ## Strategic positioning Test data management is investment that pays back continuously. Teams that skimp on TDM ship more defects to production. Teams that invest in it have higher-confidence releases and more meaningful UAT. The investment scales with environment count and regulatory exposure; smaller projects can manage with lighter tooling, larger ones need dedicated TDM platforms. Either way, treat test data as a programme asset — designed, maintained, governed. --- # The AL debugger in Business Central — a deep dive How the AL debugger works for developing Business Central extensions — VS Code integration, snapshot debugging, attaching to sessions. Source: https://www.solvingdynamics365.com/guides/business-central-debugger-deep-dive Section: Business Central / AL & development Published: 2026-05-01 Updated: 2026-08-25 Writing AL code without good debugging tooling would be miserable. The **AL debugger** in VS Code provides step-through debugging, breakpoints, watch variables, snapshot debugging for production, and attach-to-session for live troubleshooting. Mastering it is a productivity multiplier for any BC developer. **The two debug modes.** - **Live debugging** — attach to your dev session, step through code as it runs. - **Snapshot debugging** — record a session and replay; non-intrusive for production. Each has its place. **Live debugging setup.** 1. AL Language extension installed in VS Code. 2. `launch.json` configured with target server (sandbox URL, auth). 3. Press F5 to launch / attach. 4. VS Code connects to BC session. 5. Set breakpoints; trigger the code path; step through. The experience is full VS Code debugger — step into, step over, step out, watch expressions, call stack, locals. **Breakpoints.** - **Line breakpoint** — fires when the line is reached. - **Conditional breakpoint** — only when an expression evaluates true. - **Hit count breakpoint** — every Nth time. - **Function breakpoint** — by function name. Conditional breakpoints save massive time — instead of stepping through hundreds of records, break only when `Item No. = 'PROBLEM-ITEM'`. ## Watch expressions Add expressions to the Watch panel: - Current variable values. - Computed expressions (`SalesAmount * 1.21`). - Object properties. Watch updates as you step; visualises state at each point. ## Snapshot debugging A different model: 1. Configure snapshot debugging in VS Code launch.json. 2. Trigger snapshot recording in BC (admin action). 3. User performs the action being debugged. 4. Stop recording; VS Code downloads the snapshot. 5. Replay locally with full debugger experience. Crucially, **snapshot debugging doesn't pause production** — the user's action runs at full speed. The recording is replayed offline. Production-safe debugging. ## Useful in production scenarios Customer reports a bug in production. The partner can: 1. Configure snapshot debugging on the prod environment. 2. Have the user reproduce the issue. 3. Capture the snapshot. 4. Debug locally with full visibility into what happened. Far better than "send me a screenshot." **Attach to current session vs another.** - **Current session** — your dev session; you're triggering and stepping. - **Another session** — attach to a colleague's session or a background session (job queue). Attaching to job queue for batch debugging is invaluable; otherwise debugging batch issues requires guesswork. ## Source code mapping The debugger maps compiled IL back to source AL: - Set breakpoint in your AL file. - BC executes IL. - Breakpoint fires on the IL line that maps to your AL. Mapping works for your own extension and Microsoft's base app (you don't have base app source by default, but can step into compiled views). ## Performance counters Beyond debugging, AL profiling: - Performance Profile sessions in BC client. - Identify hot paths. - Compare options. Profiling and debugging are complementary; profiling shows where time is spent, debugging shows why a specific path behaves as it does. **Common debugging scenarios.** - **Posting fails** — break on the error; inspect data state. - **Wrong field value** — break before the line, inspect input; break after, inspect output. - **Performance issue** — profile + targeted snapshot. - **External integration fails** — break in the callback / event handler; inspect HTTP response. ## Test debugging AL tests can be debugged like regular code: - Run test in debug mode. - Step through. - Inspect assertions. Test development without debugging is slow; with debugging, tests get fixed quickly. **Common pitfalls.** - **Wrong launch.json target.** Connected to wrong environment; breakpoints don't fire. - **Source code mismatch.** Extension compiled vs source out of sync; breakpoints in unreachable lines. - **Multi-session confusion.** Stepping in one session while another is running; concurrency surprises. - **Snapshot too large.** Long-running sessions produce big snapshots; trim recording windows. - **Forgetting to publish.** Edit AL, hit F5; debugging old compiled version. **Best practices.** - **Conditional breakpoints** for high-volume code paths. - **Step over** for known-good code; **step into** for new logic. - **Watch expressions** rather than repeatedly inspecting variables. - **Snapshot for production** — safer than attach to live prod. - **Logging supplement debugging** — for issues that don't reproduce, telemetry to App Insights is the alternative. ## Strategic positioning The AL debugger has matured enormously. Modern BC development should not be done without it. For partners maintaining extensions across many customers, snapshot debugging in production is one of the most valuable features in the BC tooling — it transforms what was previously a guessing game into reproducible debugging. Investment in debugger fluency pays back daily. --- # The AL test framework Writing automated tests in AL — test codeunits, test runners, test isolation, and the libraries Microsoft ships with Business Central. Source: https://www.solvingdynamics365.com/guides/al-test-framework Section: Business Central / AL & development Published: 2026-05-01 Updated: 2026-08-25 Business Central ships with a full test framework for AL that's the right tool for both unit tests and integration tests of your extensions. Adopting it is a one-time investment that pays back the first time you regression-test a major release wave update. ## Test codeunits A test codeunit is a normal codeunit with the `Subtype = Test` property set. Each test method is decorated with `[Test]`, optionally `[HandlerFunctions(...)]` to register UI handlers, and `[TransactionModel(...)]` to control transactional isolation. The test runner discovers test codeunits in installed extensions and executes them in containers. ## Test isolation By default, each test runs in a **rolled-back transaction**, so changes don't persist between tests. This is what makes the suite re-runnable against the same database. For tests that genuinely need to commit (e.g. testing a sequence of posted documents), `TransactionModel::AutoCommit` is available; use it sparingly. ## Test libraries Microsoft publishes a set of **test libraries** as separate AL packages: `Test Library - Sales`, `Test Library - Inventory`, `Test Library - ERM`, etc. They give you helper functions like *CreateCustomer*, *CreateItem*, *PostSalesDocument* that produce valid test data without you wiring up every field. They live on AppSource and are installed into sandbox environments where tests run. ## Handler functions AL tests run headless, so any dialogs or pages the code-under-test opens need a *handler*. A `[MessageHandler]`, `[ConfirmHandler]`, `[ModalPageHandler]`, or `[ReportHandler]` registered on the test codeunit catches the call and lets the test assert and respond. ## Assertions The `Assert` codeunit provides `IsTrue`, `IsFalse`, `AreEqual`, `AreNotEqual`, `RecordCount`, and string/error variants. Idiomatic AL tests follow the *arrange, act, assert* pattern. ## Running tests Inside Business Central, the **Test Tool** page lists test codeunits, lets you run them interactively, and shows pass/fail. From CI, the `Run-TestsInBcContainer` PowerShell cmdlet (part of the BC Container Helper) runs tests headless and emits results in JUnit XML for build pipelines. ## Code coverage AL has built-in code coverage reporting; the test runner can produce a coverage map showing which lines of the system-under-test were exercised. ## Where to start Don't try for 100% coverage. Start by testing the *posting paths* that matter — your sales discount calculation, your custom price formulas, your event subscribers — and grow from there. --- # The Business Central API and OData services How external systems talk to Business Central — the v2.0 REST API, OData web services, bound actions, and call limits. Source: https://www.solvingdynamics365.com/guides/business-central-api-and-odata Section: Business Central / AL & development Published: 2026-05-01 Updated: 2026-08-31 Business Central has a first-class HTTP API that's the canonical way to integrate it with anything outside the product. The API is what powers Power Automate connectors, mobile apps, Power Pages portals, and partner integrations. **The v2.0 REST API.** Microsoft maintains an OpenAPI-described REST API at `/api/v2.0/companies({id})/...` that covers the most-used entities: customers, vendors, items, sales orders, sales invoices, purchase orders, journals, GL accounts, and many more. Each entity supports the standard verbs (GET, POST, PATCH, DELETE) and OData query semantics (`$filter`, `$select`, `$expand`, `$top`, `$skip`). Pagination follows the OData convention with `@odata.nextLink`. ## Custom API pages When the v2.0 API doesn't expose what you need, partners or in-house developers write **AL API pages**. An API page targets a single table, lives at a customer-defined publisher / group / version path (e.g. `/api/contoso/myapp/v1.0/...`), and lets you control exposed fields, behaviour, and security. ## Bound actions Beyond reading and writing entities, API pages can expose **bound actions** — e.g. *post* a sales order, *cancel* an invoice, *apply* a payment. Actions invoke AL code and return a result, which is how you trigger BC's transactional behaviour rather than just writing fields. ## OData v4 web services A second, older surface exposes any **page** or **query** as an OData endpoint when published from the Web Services list. OData is read-and-write, less RESTful than v2.0, and useful for ad-hoc Excel pulls or Power BI imports. ## Authentication SaaS APIs authenticate with **Microsoft Entra ID** OAuth 2.0 — usually via service-to-service flows with an app registration granted Dynamics 365 Business Central application permissions. Basic Auth is deprecated. ## Call limits Each tenant has API throughput limits: requests per minute per user, and an overall throughput allowance. Going over returns HTTP 429 with a `Retry-After` header. Well-behaved integrations honour the header, batch where possible, and prefer `$expand` over multiple round trips. ## Webhooks Business Central can push **change notifications** to a registered subscriber endpoint when records change, avoiding polling. Subscriptions auto-expire and must be renewed — build the renewal into your integration rather than discovering the expiry in production. The mechanics are covered in [webhooks in Business Central](https://www.solvingdynamics365.com/guides/webhooks-in-business-central). ## URL anatomy — environments and companies Two things trip up every first integration. First, the URL carries the **environment name**: `https://api.businesscentral.dynamics.com/v2.0/{tenant}/{environment}/api/v2.0/...` — an integration built against `sandbox` doesn't reach `production` by accident, which is a feature, but it means environment names belong in configuration, never in code. Second, almost everything in BC lives **per company**. The API root lets you list companies, and every entity call is scoped to one company ID. A multi-company tenant needs the integration to loop companies or be told which one it serves; assuming "the" company is the classic day-one bug in a [multi-company setup](https://www.solvingdynamics365.com/guides/business-central-multi-company-setup). ## Performance patterns that actually matter The throughput limits aren't generous, so integration design matters more than in most SaaS APIs: - **Filter server-side, always.** `$filter` and `$select` cut both payload and server work. Pulling a full table to filter client-side is the top cause of 429s. - **Use `$expand` instead of N+1 calls.** One request for sales orders with `$expand=salesOrderLines` beats a call per order by an order of magnitude. - **Read deltas, not snapshots.** Filter on `lastModifiedDateTime` (present on v2.0 entities) to sync only what changed since the last run, or use webhooks to be told. - **Batch writes.** The `$batch` endpoint packs multiple operations into one request and can run them in a single transaction — essential for journal lines that must post together. - **Respect `Retry-After`.** On 429, wait the stated time and retry. Hammering through the backoff extends the penalty window. For genuinely heavy reads (BI-scale extraction, warehouse loads), the API is the wrong tool regardless of tuning — that's what BC's Fabric/lakehouse paths and scheduled exports are for; keep the API for operational integration. ## Choosing a surface — the decision in practice The strategic order: **v2.0 standard API first** — versioned, documented, stable across [release waves](https://www.solvingdynamics365.com/guides/business-central-release-waves), and what Microsoft performance-tests. **Custom API pages second**, when you need custom fields or tables — they inherit the same versioned, RESTful behaviour and remain under your control. **Published OData page endpoints last**: they expose whatever the page shows, which means a page redesign or personalisation quirk can silently change your integration contract, and page-based endpoints drag UI logic through the server with every call. They earn their keep for ad-hoc Excel and Power BI pulls where a **query object** endpoint delivers joined, aggregated data efficiently — not as the backbone of a system integration. And SOAP, still technically present on-premise, belongs in migration plans only. ## Best practice Use v2.0 first, custom API pages second, OData last, basic auth never. Put a queue or integration layer between BC and any chatty upstream system, log correlation IDs from response headers when raising support cases, and test against a sandbox that actually resembles production data volumes — the API that flies with 50 demo items behaves differently against 200,000 SKUs. --- # The Business Central finance module An overview of Business Central's financial management — general ledger, dimensions, AP/AR, banking, fixed assets, and intercompany. Source: https://www.solvingdynamics365.com/guides/business-central-finance-module Section: Business Central / Finance & accounting Published: 2026-05-01 Updated: 2026-08-30 Financial management is the heart of Business Central. Every other module — sales, purchasing, inventory, jobs, manufacturing — eventually posts to the same general ledger, using the same dimensions and the same posting groups, which is what makes Business Central feel like *one* system rather than a collection of bolt-ons. It also means finance configuration decisions made in week one echo through every subledger for the life of the system, so this is the module to design carefully rather than quickly. ## General ledger The GL is structured around a customer-defined **chart of accounts** and an unlimited number of **dimensions** — flexible analytical tags such as Department, Cost Centre, Project, Region, or Salesperson that are attached to every posting. Dimensions replace the proliferation of GL sub-accounts you see in other ERPs and make slice-and-dice reporting in Power BI or the built-in account schedules straightforward. The design advice that survives every project: keep the chart of accounts short and push the analysis into dimensions. A 300-account chart with six well-chosen dimensions out-reports a 3,000-account chart every time, and it is far easier to maintain. Two dimensions can be marked as **global** (stored directly on every ledger entry and filterable everywhere) — choose those two deliberately, because changing them later is disruptive. The full reasoning is in the [dimensions design guide](https://www.solvingdynamics365.com/guides/business-central-dimensions-design). **Posting groups** are the other structural decision: customer, vendor, inventory, and general posting groups map subledger activity to GL accounts automatically. Users never pick a GL account on a sales invoice — the posting group setup does. This is why data entry stays clean, and why a wrong posting group mapping quietly mis-posts hundreds of documents until someone reconciles. ## Accounts payable and receivable Vendor and customer ledger entries are posted automatically from purchase and sales documents, and can also be entered through general journals. Standard features include payment terms, payment discounts, due-date reminders, customer statements, finance charge memos, and a built-in **payment journal** that produces bank files (SEPA in Europe, ACH/positive-pay variants in North America). Application — matching payments to invoices — can be automatic on import or handled manually, and unapplication is possible when someone matches wrongly. ## Banking Bank account cards, bank reconciliation (with AI-assisted matching via Copilot), and bank file import/export are first-class objects. Many regions have bank feeds available through partner extensions, which turn reconciliation from a monthly chore into a near-daily non-event. Reconcile frequently: a bank reconciliation done weekly takes minutes; one done quarterly takes days. ## Fixed assets Asset register, depreciation books, partial disposals, insurance, and maintenance — covered out of the box, with multiple depreciation methods in parallel for tax vs accounting. Depreciation runs as a batch job and posts through a dedicated FA journal, so the GL trail is as auditable as everything else. The [fixed assets deep dive](https://www.solvingdynamics365.com/guides/business-central-fixed-assets-in-depth) covers the setup order that saves rework. ## Cash flow and budgeting Cash flow forecasts pull from sales orders, purchase orders, jobs, fixed asset disposals, and manual entries. Budgets are dimension-aware and can be imported from Excel — which in practice is how nearly everyone builds them: model in Excel, import, report actual-vs-budget through account schedules or Power BI. ## Reporting: account schedules **Financial reports** (long known as account schedules) are the built-in report writer: row definitions over accounts and dimension filters, column definitions over periods, budgets, and comparisons. They cover the standard P&L, balance sheet, and cash-flow statements without any external tool, and they export to Excel. Learn them before reaching for an ISV reporting product — for most SMBs they are enough. See [account schedules and financial reports](https://www.solvingdynamics365.com/guides/business-central-account-schedules-and-financial-reports). ## Intercompany and consolidations Business Central supports posting between legal entities — intercompany general journals and purchase/sales documents that mirror into the partner company — and consolidating multiple companies into a reporting company with currency translation and eliminations. It is genuinely usable for a handful of related companies; groups with dozens of entities and complex ownership usually add a consolidation tool on top. [Multi-company setup](https://www.solvingdynamics365.com/guides/business-central-multi-company-setup) walks the options. ## Statutory reporting VAT statements, EC sales lists, e-invoicing formats, and country-specific localizations are delivered either by Microsoft (for the major countries) or by ISV localization partners on AppSource. This is the single biggest reason to verify country coverage before signing a contract: the finance module is global, but tax compliance is local, and the quality of the localization decides how much manual work month-end involves. ## The month-end rhythm A well-configured finance module makes month-end close boring: run Adjust Cost, reconcile bank and interim accounts, post recurring journals, run the VAT statement, review account schedules against budget. If close takes more than a few days, the cause is almost always upstream — posting groups, missing item charges, or unapplied payments — not the GL itself. The [month-end close guide](https://www.solvingdynamics365.com/guides/business-central-month-end-close) has the checklist. --- # The Business Central planning worksheet How MRP works in Business Central — the planning worksheet, reordering policies, supply, demand, and the regenerative engine behind it. Source: https://www.solvingdynamics365.com/guides/business-central-planning-worksheet Section: Business Central / Inventory & warehouse Published: 2026-05-01 Updated: 2026-08-31 The **planning worksheet** is Business Central's [MRP](https://www.solvingdynamics365.com/glossary/mrp) engine. It calculates net requirements for every planning-relevant item across your locations and proposes the orders needed to keep supply aligned with demand. Properly configured, it's the difference between firefighting shortages and running a calm supply chain. ## Inputs The engine considers all *supply* and *demand* signals. Supply: on-hand inventory, open purchase orders, open production orders, open transfer orders, planned orders inside the planning horizon. Demand: open sales orders, service orders, components in production orders, transfer requirements, forecast lines, blanket sales orders, and projected demand from job tasks. ## Reordering policies Each item card sets a **reordering policy** that drives planning behaviour: - **Lot-for-Lot** — plan exactly the quantity required by demand on each date. - **Fixed Reorder Qty** — order in fixed lots (e.g. carton of 24). - **Maximum Qty** — top up to a maximum when below reorder point. - **Order** — plan only on direct customer demand (true MTO). Lead times, safety stock, safety lead times, minimum order quantities, lot multiples, and order modifiers fine-tune the suggestions. Choosing the policy is the design decision that matters most, and the defaults people reach for are often wrong. Lot-for-Lot suits items with lumpy, order-driven demand; Fixed Reorder Qty and Maximum Qty are *reorder-point* policies that ignore future demand timing and only look at whether stock has dipped below a threshold — fine for cheap C-class items, dangerous for anything with long lead times or real seasonality. A common failure mode is setting reorder-point policies on everything because they feel intuitive, then wondering why the worksheet suggests purchases for items with no upcoming demand. If demand differs per warehouse, plan per location with **stockkeeping units**, which let the same item carry different policies, lead times, and replenishment sources (purchase here, transfer there) at each location. ## Planning worksheet vs requisition worksheet BC ships two worksheets. The **requisition worksheet** handles purchase and transfer replenishment only — no production orders — and suits distribution businesses that buy and move stock. The **planning worksheet** is the full MRP engine covering production, purchase, transfer, and assembly. Manufacturers live in the planning worksheet; pure wholesalers can stay in the simpler requisition worksheet and avoid maintaining manufacturing-grade item setup. Running both against overlapping item sets is a recipe for duplicate suggestions — pick one home per item. ## Running the worksheet A planner opens the planning worksheet, sets a date range and a filter, and runs *Calculate Regenerative Plan* or *Calculate Net Change Plan*. Regenerative recomputes from scratch; net change updates only items affected by changes since the last run. The output is a list of suggestions — new purchase orders, production orders, transfer orders, plus reschedule and cancellation actions on existing orders. ## Acceptance Planners review suggestions and accept them with the *Carry Out Action Message* function, which creates or modifies the suggested supply orders. Accepted suggestions disappear from the worksheet. ## Action messages *New, Change Qty, Reschedule, Reschedule & Change Qty, Cancel* — each indicates what the engine wants you to do, with reasons (early supply, late supply, demand changed, etc.). ## Subcontracting and assembly Subcontracted production operations auto-suggest purchase orders to the subcontract vendor; assembly items can use a simpler assembly planning routine. ## Rolling it out without chaos The worst way to adopt the planning worksheet is to configure every item and run a regenerative plan across the whole catalogue on day one — the result is thousands of suggestions nobody trusts, and the tool is abandoned within a month. The rollout that works: - **Start with one item class** — a supplier's range, or the A-items at one location — and run the worksheet daily for a few weeks until the suggestions match what a good planner would have done by hand. - **Fix master data before blaming the engine.** Wrong lead times, missing vendor catalogues, and stale safety stock produce wrong suggestions with perfect logic. The worksheet is a master-data quality audit whether you want one or not. - **Use the dampener settings** (dampener period and quantity on the item card) to suppress trivial reschedule messages — a suggestion to move an order by one day creates noise, not value. - **Never carry out actions unreviewed.** The worksheet proposes; the planner disposes. Automating *Carry Out Action Message* end-to-end is tempting and almost always premature. A worksheet nobody trusts gets bypassed with manual purchase orders — which then appear as unexpected supply in the next run, making the suggestions stranger and trust lower. The loop only stabilises when planners work *through* the worksheet, exceptions included. ## Where it stops The engine is single-level per run in its reasoning about capacity and is not finitely capacity-constrained — it will happily load 300 hours of production onto a work centre with 80 available. Capacity checking happens downstream, on the production orders it creates. For demand sensing, finite scheduling, complex scenario planning, or full S&OP, customers add an ISV planning module or step up to [Dynamics 365 Supply Chain Management](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-supply-chain), whose Planning Optimization service is built for exactly that scale. For the production side of what the worksheet feeds, see [Business Central manufacturing](https://www.solvingdynamics365.com/guides/business-central-manufacturing). --- # The Business Central reservation engine How reservations work in Business Central — automatic vs manual, item tracking, order-to-order binding, and the trade-offs. Source: https://www.solvingdynamics365.com/guides/business-central-reservation-engine Section: Business Central / Inventory & warehouse Published: 2026-05-01 Updated: 2026-08-25 The **reservation engine** in Business Central links a piece of supply (inventory on hand, an inbound purchase order, a production order, a transfer order) to a specific demand (a sales order line, a production component, a service order). Reservations are how the system promises one customer that *this* particular stock will be reserved for *their* order rather than the next person who logs in. ## Why reserve at all Without reservations, a sales order line just expresses demand against a pool — and that pool is up for grabs by anyone else who picks faster. Reserving converts the promise into a binding allocation that survives until the order is shipped or the reservation is cancelled. ## Automatic, optional, never Each item has a **Reserve** field with three settings: *Never* (no reservations allowed), *Optional* (users reserve manually when needed, the default), and *Always* (every demand line is reserved as it's created, blocking creation if no supply exists). Most companies use *Optional* and reserve selectively. ## Manual reservations From a sales order line, users open the *Reservation Entries* page and pick which supply to bind to: on-hand quantity, an inbound purchase, a production order, an assembly order, a transfer order. The reservation entry stores the link. Posting the source consumes the reservation. ## Order-to-order binding A stronger form of reservation, used for make-to-order and configure-to-order, where the supply is *created specifically for* the demand. The link is bidirectional — if the sales order quantity changes, the production order changes; if the production order is cancelled, the demand becomes unreserved. Order-to-order is the operating model for many engineer-to-order shops. ## Item tracking and reservations When items have lot or serial numbers, reservations can be at the tracking level (this serial number, this lot) or at the quantity level. Specific tracking reservations are common in pharma, food, and high-value goods. ## Reservations and planning Reserved supply is visible to MRP and is excluded from the available-to-promise pool. The planning worksheet honours reservations and won't suggest cancelling a reserved supply order. ## Trade-offs Heavy reservation discipline gives reliable delivery promises but increases administrative load. Many companies start with *Optional* and reserve only for committed orders above a value or with delivery commitments. --- # The Cash Management module in Dynamics 365 Finance How F&O's Cash Management handles cash positions, bank reconciliation, payment processing, and cash flow forecasting at enterprise scale. Source: https://www.solvingdynamics365.com/guides/cash-management-module-in-f-and-o Section: Finance & SCM / Finance Published: 2026-06-14 For enterprise finance teams, **cash management** is daily operational work — knowing the current bank balance across many accounts, forecasting near-term liquidity, reconciling bank statements, processing payments, managing FX exposure. Dynamics 365 Finance's **Cash and Bank Management** module covers the operational layer. ## Bank accounts Each bank account is a master record with: - **Identifier** — account number, routing details, IBAN, SWIFT/BIC. - **Currency** — the account's base currency. - **Bank** — the financial institution. - **Type** — operating, savings, escrow, payroll, intercompany. - **Posting profile** — GL accounts for bank activity. - **Bank statement format** — for import (camt.053, MT940, BAI2, country-specific). - **Payment file formats** — for outbound payment generation. - **Approval thresholds** — for payment authorisation. Multi-currency operations have multiple bank accounts per currency; multi-entity groups have many bank accounts per entity. ## Bank statement import Daily or weekly: - **Live bank feeds** — partner connectors (Yodlee, Token, country-specific bank-feed services) automate import. - **MT940 / camt.053** — uploaded files for banks supporting standard SWIFT or ISO 20022 formats. - **CSV / custom formats** — bank-specific exports with mapping configuration. The imported statement lines feed into reconciliation. ## Bank reconciliation Reconciling F&O's bank account ledger against the bank statement: 1. Import the statement. 2. Auto-match statement lines to bank ledger entries by amount, date, reference. 3. Manual match unmatched lines. 4. Post journal entries for items only the bank knows about — fees, interest, direct debits, returned items. 5. Reconcile balance differences. 6. Post the reconciliation; bank ledger entries marked closed. AI-assisted matching (Copilot) suggests matches for ambiguous lines; the user accepts, modifies, or rejects. ## Payment processing Outbound payments to vendors / employees / others through: - **Payment proposals** — system identifies vendor invoices due for payment, proposes a payment batch. - **User review** — adjust amounts, exclude entries, override priorities. - **Bank file generation** — SEPA pain.001, Bacs, ACH NACHA, Bankgirot (SE), country-specific formats. - **Posting** — payment journal posts; vendor ledger settled; bank ledger reduced. - **Bank approval workflows** — many banks require dual-approval for high-value payments; F&O integrates with bank workflow. ## Inbound payments Customer payments arrive through: - **Bank feed** — incoming credits identified and applied. - **Manual entry** — for receipts not yet on the bank statement. - **Direct debit reversal** — failed direct debits returned to open AR. - **Lockbox** — for organisations with bank-provided customer-payment lockbox services, automated import. ## Cash flow forecast F&O's cash flow forecast considers all liquidity signals: - **Opening bank balances** — across all accounts in all currencies. - **Receivables** — open AR with due dates. - **Payables** — open AP with due dates. - **Sales orders** — open with planned shipment / invoice dates. - **Purchase orders** — open with planned receipt / invoice dates. - **Service contracts** — recurring revenue commitments. - **Capital projects** — planned cash outflows. - **Loan repayments and interest** — recurring debt servicing. - **Tax accruals** — periodic tax payments. The forecast aggregates per period (daily near-term, weekly medium-term, monthly long-term), per currency, per entity. Power BI templates visualise. ## FX exposure For multi-currency operations: - **Position per currency** — net exposure across all accounts. - **Open forex contracts** — hedges in place. - **Period-end revaluation** — translate foreign-currency balances at period-end rates, post FX gain / loss. - **Realised FX** — when foreign-currency invoices settle at different rates from booking. For sophisticated treasury operations (hedging strategy, FX optionality, intra-day position management), customers integrate a dedicated treasury platform alongside F&O. ## Intercompany cash management Multi-entity groups have inter-company cash flows — entity A funds entity B's working capital, intra-group loans, central treasury sweep. F&O supports: - **Centralised payments** — entity A pays vendor invoices for entity B; IC accounting reconciles. - **IC cash transfers** — programmatic moves between entities. - **Pooling structures** — for groups with notional or physical cash pooling. **Reporting.** - **Cash position dashboard** — current balance per account, total, by currency. - **Daily / weekly cash forecast.** - **Bank reconciliation status** — which accounts reconciled, which behind. - **FX exposure summary.** - **Treasury KPIs** — DSO, DPO, working capital metrics. **Common pitfalls.** - **Bank feeds not configured** — daily reconciliation work is manual. - **Payment file format mismatched to bank** — payments rejected; vendor relationships strained. - **Stale reconciliations** — accumulating unreconciled items become harder to investigate. ## Operational reality Cash management discipline drives working capital efficiency. Modern enterprise F&O implementations integrate live bank feeds, run daily reconciliation, and feed forecasts that the CFO actually trusts. --- # The Cost Accounting module in Dynamics 365 Finance How Cost Accounting differs from financial accounting in F&O — cost objects, allocation hierarchies, statistical dimensions, and management reporting. Source: https://www.solvingdynamics365.com/guides/the-cost-accounting-module-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 **Cost Accounting** in Dynamics 365 Finance is a separate, parallel ledger purpose-built for management accounting — operating cost allocation, profitability analysis by product / customer / region, and the analytical reporting that financial accounting on its own can't deliver cleanly. It's one of the most underused modules in F&O and one of the most powerful when adopted. ## Why a separate ledger Financial accounting answers external questions — statutory P&L and balance sheet for tax authorities, auditors, regulators. Cost accounting answers internal questions — which products are profitable, which customers cost too much to serve, which cost centres run efficiently. These two views need different rules: - **Cost reallocation across periods** — match operational costs to the periods they actually drove value, not just when the invoice posted. - **Different cost hierarchies** — financial sees by GL account; management sees by product category or customer segment. - **Cost allocation across cost objects** — IT cost shared across departments; marketing cost allocated to product lines. - **Imputed costs** — opportunity cost, depreciation by management methodology, deemed cost of capital. Forcing all of this into the financial ledger pollutes statutory accounts. The cost accounting module gives a separate, audit-trailed analytical view. **The cost-accounting data model.** - **Cost element dimension** — the cost categories you analyse (Salary, Travel, Equipment, Utilities, etc.). Map to GL accounts but groupings can differ from the chart of accounts. - **Cost object dimension** — what bears the cost (Cost Centre, Profit Centre, Project, Product, Customer Segment). Can include hierarchical structures. - **Statistical dimensions** — non-monetary measures used to drive allocations (Headcount, Square Metres, Production Units, Machine Hours). ## Source of cost data Cost accounting *consumes* data from financial accounting — GL postings are copied into the cost-accounting ledger periodically. Within cost accounting, the data is transformed and reallocated without changing the source. ## Allocation hierarchies The core of cost accounting: 1. **Primary allocation** — IT cost (in a service cost centre) split across operational cost centres based on a driver like headcount or laptop count. 2. **Secondary allocation** — allocated cost in operational centres further reallocated to product lines, customer segments, or projects. 3. **Tertiary allocation** — cumulative allocation to derive product profitability or customer profitability. Allocations cascade through configurable hierarchies, with full audit of each allocation step. ## Statistical dimensions as drivers Statistical dimensions don't represent money — they represent volume metrics that drive allocation. Headcount drives HR cost; Machine Hours drive production overhead; Square Metres drive facility cost. Values are entered periodically or loaded automatically from operational systems. ## Cost rates Cost rates apply to statistical dimensions to compute imputed cost — e.g. an internal hourly rate for a resource type used for project cost capture. ## Reporting Pre-built cost reports cover: - **Cost statement** — like a management P&L by cost element and cost object. - **Cost analysis** — drill down by hierarchy to find anomalies. - **Cost-centre performance** — actual vs budget, by period. - **Product profitability** — revenue – cost across the cost-accounting view. - **Customer profitability** — same logic at customer or segment level. Power BI templates ship with the module for richer visualisation. ## When to adopt Cost Accounting pays back when: - Cost allocations across cost centres / products / customers are material to decisions. - Management reporting needs cost views that the chart of accounts can't naturally produce. - The organisation has dedicated controllers willing to maintain the configuration. ## When not For small, simple operations where the GL with dimensions answers most management questions, Cost Accounting adds complexity without proportional benefit. Adopt when the gap becomes painful. ## Operational reality Cost Accounting is a configuration-heavy module. Budget a focused implementation (a few weeks for a controller and consultant) and maintain it as ongoing controller work. Done well, it transforms management visibility. --- # The cost adjustment job in Business Central Why Business Central separates inventory cost adjustment from posting — how the Adjust Cost - Item Entries batch works, when it runs. Source: https://www.solvingdynamics365.com/guides/cost-adjustment-job-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 When you sell an item before its true cost is known — a sale shipped today against a vendor invoice that arrives next week, or a transfer received before the costing run that establishes its standard — Business Central posts the sale at an **expected** or **best available** cost, then comes back later to **adjust** the cost via the **Adjust Cost - Item Entries** batch job. Understanding this two-step pattern is essential to reading BC's inventory accounting. **Why costs aren't always final at the moment of sale.** - A purchase **receipt** can post before the purchase **invoice** is received. Item ledger entries get an `Expected Cost` until the invoice posts. - A **revaluation** runs after an item has already been sold; the cost difference needs to flow forward. - An **inventory adjustment** (e.g. write-off) changes the cost basis of remaining stock. - A **standard cost change** revalues open inventory and may require COGS adjustment on already-shipped items. In all these cases, the original transactions are correct from a quantity perspective; only the unit cost needs revision. ## The value entry chain Each item ledger entry has one or more **value entries** attached: - The first value entry captures the cost at the time of the original posting. - Subsequent value entries capture cost adjustments — `Direct Cost`, `Indirect Cost`, `Variance`, `Revaluation`, `Rounding`. - The sum of value entries equals the current cost recorded against the item ledger entry. This separation lets BC track *how* a cost became its current value, not just the final number — auditing the cost history is essential during cost disputes. ## Adjust Cost - Item Entries The batch job: 1. Scans for item ledger entries whose costs are still flagged as **not adjusted** or have downstream entries needing adjustment. 2. Recomputes the cost for each affected entry using the item's **costing method** (FIFO, LIFO, Average, Specific, Standard). 3. Posts value entries to capture the adjustment. 4. If `Automatic Cost Posting` is enabled on Inventory Setup, the value entries also post to the general ledger; otherwise the **Post Inventory Cost to G/L** batch posts them later. **Costing methods determine the math.** - **FIFO** — outbound entries match against earliest inbound; adjustments propagate when those inbounds are revalued. - **LIFO** — same, but latest inbound first. Rare; some US tax positions. - **Average** — running weighted average. Adjustments to one inbound recompute the average and ripple forward. - **Specific** — by lot or serial; adjustments stay tied to the specific unit. - **Standard** — items always post at standard; variances post separately. Adjustments materialise as additional variance entries. ## Running cadence Most BC tenants schedule Adjust Cost on the **Job Queue** to run nightly or hourly. Some run it after every purchase invoice posting. Don't leave it manual — un-adjusted entries pile up and the next run takes much longer. ## Automatic cost adjustment On **Inventory Setup**, the `Automatic Cost Adjustment` field can be set to: - `Never` — manual only (not recommended in production). - `Day`, `Week`, `Month`, `Quarter`, `Year` — entries posted within that window trigger an immediate adjustment on next save. - `Always` — adjusts on every transaction. `Always` is theoretically pure but kills performance in high-volume environments. Most use `Day` plus a scheduled nightly run. ## Post Inventory Cost to G/L Separately from Adjust Cost, the value entries created need to flow to the **General Ledger**. The `Post Inventory Cost to G/L` batch reads value entries and creates G/L entries for COGS, inventory account, variance, etc. Either run it via job queue or set `Automatic Cost Posting = Yes` on Inventory Setup to post G/L entries inline. ## Reconciliation Two views need to agree: - **Inventory Valuation Report** — values inventory based on item ledger entries. - **G/L Inventory Account** — balance from posted G/L entries. If they disagree, the cause is almost always: - Cost adjustments pending (haven't run Adjust Cost recently). - Value entries not yet posted to G/L. - Direct G/L journals against the inventory account bypassing item ledger. The `Inventory Valuation - Reconcile` report in BC compares the two and shows the gap. **Common pitfalls.** - **Skipping the job.** Costs stay at expected; financial reporting is wrong. - **G/L posting disabled.** Value entries accumulate; G/L inventory account drifts. - **Manual G/L journals against the inventory account.** Reconciliation impossible — fix by only ever using item-side documents. - **Closing period before adjustment.** Adjustments posted in a closed period either fail or post into the next period, breaking the historical valuation. ## Operational discipline A clean cost-adjusted environment is the foundation of accurate gross-margin reporting. Treat Adjust Cost and G/L posting as core financial close steps, not a "run if you remember" task. --- # The Customer Service Workspace in Dynamics 365 How the Customer Service Workspace differs from the classic Hub — multi-session, productivity pane, agent scripts, and the architectural shift it represents. Source: https://www.solvingdynamics365.com/guides/customer-service-agent-workspace Section: Customer Engagement / Customer Service Published: 2026-05-01 The **Customer Service Workspace** is Dynamics 365's modern agent desktop — a multi-session, productivity-paneled, omnichannel-ready environment that replaces the older single-session **Customer Service Hub** for serious contact-centre work. Understanding what it adds and where it differs from the Hub matters for any new Customer Service deployment. ## The Hub baseline Customer Service Hub is the model-driven app most agents historically used. Single browser tab = single case. Navigation is between cases by opening a new tab. Adequate for low-volume, knowledge-driven service work. **What Workspace adds.** - **Multi-session tabs** within a single browser window — agents handle several conversations or cases simultaneously. - **Productivity pane** — collapsible side panel with smart assist, knowledge, similar cases, suggested actions. - **Agent scripts** — guided steps tied to case type or conversation context. - **Omnichannel integration** — voice, chat, SMS, social, email surfaces unified. - **Macros** — pre-canned actions agents trigger (send template, close case, escalate). - **Customisations specific to Workspace** — layouts and components designed for the multi-session model. ## Sessions A session is a working context — a case, a conversation, a customer record. Multiple sessions are stacked as tabs at the top of the workspace. Switching between sessions preserves state per session: forms half-edited, conversations mid-thread. For agents handling chat or voice (where multiple conversations may be active simultaneously), multi-session is essential. For email/case agents working one at a time, single-session may suffice. ## Productivity pane A vertical side panel that contextually surfaces: - **Smart assist** — AI suggestions based on conversation content. - **Knowledge search** — search KB and articles inline. - **Similar cases** — related cases for context. - **Agent script** — step-by-step guidance. - **Customer summary** — quick view of who the customer is and their history. The pane is configurable per session type; what an inbound voice call shows differs from a returning case. ## Agent scripts Procedural guidance: - **Linear scripts** — checklist of steps. - **Decision-tree scripts** — branching based on customer responses. - **Automated step actions** — some steps trigger flows or macros. Scripts standardise call handling; quality and speed both improve once agents follow them. Building scripts is meaningful work — they must reflect real-world variability, not idealised playbooks. ## Macros Pre-defined sequences of actions: - **Send a template email.** - **Create a follow-up task.** - **Update case status and route.** - **Open a specific URL with customer ID.** Macros eliminate repetitive clicks. Defined in the productivity pane configuration; agents trigger by button. ## Omnichannel surfaces When **Omnichannel for Customer Service** is installed alongside Workspace: - **Inbound chat, SMS, voice** route to agent's queue. - **Conversation surface** in the workspace handles the medium. - **Customer profile**, history, sentiment displayed in the productivity pane. The unified surface means agents don't context-switch between systems for different channels. **Workspace vs Hub — when to use each.** - **Hub** — small teams, case-only workload, simple service. - **Workspace** — multi-channel teams, chat/voice agents, productivity-pane-heavy workflows. Migration from Hub to Workspace is straightforward for the data side (same Dataverse), heavier for the UX side (forms, dashboards, customisations may need rework). ## Customisations Workspace is a model-driven app like Hub. Customisations: - **Site maps** — what entities and views are accessible. - **Forms** — record forms; can be Workspace-specific. - **Dashboards** — at the workspace level. - **Productivity pane components** — custom side-panel widgets. Some legacy Hub customisations don't transfer cleanly; budget rework time. ## Performance Multi-session is heavier than single-session: - Each session loads forms and data. - High session counts can degrade performance. - Modern browsers handle 5–10 sessions comfortably; beyond that, agents stack their own tabs. **Common pitfalls.** - **Workspace deployed without scripts or macros.** Agents get the multi-tab feature but no productivity uplift; experience worse than Hub. - **Productivity pane configured incorrectly.** Wrong components for the channel; cluttered. - **Switching costs underestimated.** Migrating from Hub means retraining, rewriting customisations, retesting; budget weeks not days. - **Session limit hit.** Heavy use opens many sessions; performance drops. Set agent training: close sessions promptly. - **Custom code on forms broken.** JavaScript form scripts running differently across Workspace sessions; test carefully. ## Strategic positioning Workspace is Microsoft's strategic direction for Customer Service agent UX. New investments should land on Workspace; existing Hub deployments should plan migration on a reasonable timeline. Maintaining both adds complexity; commit to one as your primary surface and design customisations for that target. ## Operational rule Choose Workspace by default for new Customer Service deployments. Ensure agent scripts, macros, and productivity pane components are designed before go-live — the multi-tab capability alone isn't worth the migration effort, but the productivity layer on top of it transforms agent efficiency. --- # The Data Management Framework (DMF) in Dynamics 365 F&O — a deep dive How F&O's Data Management Framework moves data in and out — data projects, data entities, source/staging/target, recurring integrations. Source: https://www.solvingdynamics365.com/guides/data-management-framework-deep-dive Section: Finance & SCM / Overview & platform Published: 2026-05-01 The **[Data Management Framework (DMF)](https://www.solvingdynamics365.com/glossary/dmf)** is the structural foundation of every bulk data move in Dynamics 365 Finance and Operations — initial migration, ongoing integrations, exports for reporting, and recurring file-based exchanges. Understanding its core entities (data entities, data projects, staging) is essential for anyone touching F&O integration work. ## Data entities A **data entity** is a denormalised view over one or more F&O tables, exposing a canonical structure suitable for external interchange. F&O ships with ~1,800 standard data entities — `CustomerV3`, `VendorsV2`, `ReleasedProductCreationV2`, `SalesOrderHeaderV4` — covering most master data and most documents. Each entity has: - A **public name** (used in URLs and APIs). - A **target structure** (how it maps to underlying tables). - A **staging table** (intermediate landing area for imports/exports). - A **set of mapping rules** (per source format). ## Data projects A **data project** is a configured import or export job. It contains: - **Source format** — Excel, CSV, XML, ODBC, AX 2012, JSON. - **Entities** — which data entities are in scope. - **Mapping** — how source columns map to entity fields. - **Filters** — what subset of records. - **Sequence** — order of entity processing (matters for FK dependencies). Projects are reusable: build once, run repeatedly. Each execution becomes a **job**. ## Source → Staging → Target The import flow is three-stage: 1. **Source** — the input file or feed. 2. **Staging** — the data entity's staging table; intermediate landing with field-level validation. 3. **Target** — the actual F&O tables; the entity's `insert/update` business logic runs. Errors at each stage are isolated: source parse errors don't corrupt staging; staging validation errors don't corrupt target. Failed records can be reprocessed without re-running the full job. ## Export is the reverse Target tables → staging → source format file or feed. ## Data templates Pre-configured data project sets shipped by Microsoft for common scenarios: - **All customer data** — customers, addresses, contacts, etc. - **All financial data** — chart of accounts, dimensions, opening balances. - **All inventory data** — items, BOMs, routes, prices. Templates are a good starting point; production projects usually need customisation. ## Recurring integrations Beyond manual project execution, F&O supports recurring integrations: - **Recurring data jobs** — pre-configured DMF projects scheduled or triggered. - **OData-based** — REST endpoints for entity-based data access. - **Batch APIs** — bulk data movement via REST. For high-volume recurring integrations, batch APIs are preferred over OData per-record approach — OData throttles aggressively under load. ## Entities vs OData The same data entities serve: - **Batch DMF jobs** — bulk imports/exports via files. - **OData APIs** — record-by-record CRUD operations. - **Custom services** — programmatic invocation. - **Power Platform connectors** — Power Automate / Power Apps use OData behind the scenes. A consistent entity layer means the same logical record type is accessible through multiple channels — Power Apps reads the customer entity; an integration writes via batch DMF; both see the same data structure. ## Composite entities Some data entities aggregate multiple related entities into a single payload (e.g. a sales order with header, lines, charges in one record). Useful when downstream systems prefer one structure per business document. **Entity import performance.** - **Standard entities** — moderate performance; suitable for ~1,000–10,000 records per minute. - **Set-based processing** — high performance; entities marked as set-based skip per-record business logic. - **Bulk import** — entire data sets in dedicated jobs; performance varies by entity complexity. For large migrations (millions of records), entities are tuned individually — some standard entities don't scale and need partner extensions or direct SQL preparation. **Common pitfalls.** - **Mapping errors.** Source column names don't match staging fields; silent data drops or import errors. Test mappings with small samples. - **Dependency ordering.** Loading sales orders before customers exist; FK violations. Always sequence entities respecting dependencies. - **Staging accumulation.** Old staging records not cleaned; performance degrades. Schedule staging cleanup. - **No error handling.** Failed records silently dropped; downstream confusion. Always extract error logs and reconcile. - **Tier 1 testing not representative.** A migration that works in a Tier 1 dev environment may fail in Tier 2 SAT or production due to data volumes and parallel batch contention. Test with production-scale data on Tier 2. **Source format gotchas.** - **CSV** — character encoding (UTF-8 vs ANSI), delimiter handling, embedded commas. - **Excel** — date formats, leading zeros stripped, formula evaluation. - **XML** — schema mismatches. Standardise on UTF-8 CSV or composite entity XML for predictability. ## Operational rule Production data integration on F&O is built on DMF entities. Custom direct-SQL approaches are not supported and break with platform updates. Stay on the standard pattern — use entities, build data projects, schedule recurring jobs, handle errors explicitly. ## Where to go next The entities DMF moves are described in [data entities and DMF](https://www.solvingdynamics365.com/guides/dynamics-365-data-entities-and-dmf); the near-real-time alternative for Dataverse is [dual-write](https://www.solvingdynamics365.com/guides/dynamics-365-dual-write-integration); the orchestration layer many projects put around it is [Azure Data Factory](https://www.solvingdynamics365.com/guides/azure-data-factory-with-dynamics-365). For the project view, [data migration strategy](https://www.solvingdynamics365.com/guides/data-migration-strategy-for-dynamics-365), and for exposing logic rather than data, [custom services and OData in F&O](https://www.solvingdynamics365.com/guides/custom-services-and-odata-in-f-and-o). --- # The Dataverse plug-in execution pipeline How Dataverse executes plug-ins — stages, pre/post images, transactional scope, and how multiple plug-ins interact on a single operation. Source: https://www.solvingdynamics365.com/guides/dataverse-plugin-execution-pipeline Section: Customer Engagement / Dataverse platform Published: 2026-05-01 When an external call modifies a Dataverse record, multiple plug-ins, workflows, business rules, and platform logic may fire. Understanding the **execution pipeline** — the order and scope in which these run — is essential for any developer writing plug-ins or debugging behaviour that seems unpredictable. **The five stages.** - **Stage 10 — Pre-validation** — outside the database transaction. Used for early gates, custom auth, plugin-level redirects. - **Stage 20 — Pre-operation** — inside transaction, before platform DB write. Modify the incoming target before commit. - **Stage 30 — Platform operation** — the database write itself. - **Stage 40 — Post-operation (in transaction)** — inside transaction, after DB write but before commit. Effects can be rolled back on exception. - **Stage 50 — Post-operation (out of transaction)** — after commit. Async by default; out of the user's transaction scope. Each plug-in registers at a specific stage; only Stage 20 and 40 plug-ins can directly affect the operation's outcome. **Stage 10 specifics.** - Outside transaction. - Can cancel the operation by throwing. - Limited by what's not yet committed (record doesn't exist yet for Create). - Useful for early validations that don't need transactional rollback. **Stage 20 — pre-operation, in-transaction.** - Inside transaction. - Can modify the `Target` entity — changes flow to the DB write. - Can throw exception, rolling back. - Most validation logic goes here. Example use: enforce business rule that account category must match account type. **Stage 30 — platform operation.** - The DB write itself. - Plug-ins do not register here. - Triggers cascade behaviour (related records updates, indexes). **Stage 40 — post-operation, in-transaction.** - After DB write; before commit. - The record exists; can read it back. - Can modify related records as part of the same transaction. - Exception still rolls back. Example use: create a child record automatically when parent is created. **Stage 50 — post-operation, out-of-transaction.** - After commit. - Async by default. - Failures don't affect the original operation. - Used for external integrations (call third-party API), audit logging, notifications. For most "after creation, do this" scenarios, this is the right stage. **Sync vs async at Stage 50.** - **Sync** — runs in the same operation context but outside transaction; user waits. - **Async** — runs in background job queue; user doesn't wait. For external API calls, async preferred — user shouldn't wait on third-party responsiveness. **Pre and post images.** - **PreImage** — snapshot of the record before the operation. Available in Stages 20, 40, 50. - **PostImage** — snapshot after. Available in Stage 40 and 50. - Required for Update operations to compare before/after. - Configured at registration time. The image structure: choose which columns to capture. Capturing all is heavy; capture only what you need. **Plug-in registration parameters.** - **Message** — Create, Update, Delete, etc. - **Primary entity** — which table. - **Filtering attributes** — only fire when these columns change (Update only). - **Stage.** - **Execution mode** — Sync / Async. - **Deployment** — Server / Offline / Both. - **Unsecure / secure configuration.** **Multiple plug-ins same stage.** - All run sequentially. - Order configured via "Execution Order" on the registration. - Lower number runs first. For deterministic behaviour, set execution order explicitly when multiple plug-ins on same event. **Recursion control.** - Each operation has a **depth** value. - A plug-in modifying its own table triggers another invocation; depth increments. - Default max depth = 8. - Plug-in should guard: `if (context.Depth > 1) return;` Without guard, infinite recursion possible (or hits depth limit). **Transaction scope.** - Stages 20 and 40 in transaction; all changes atomic. - Throwing exception rolls back everything. - Stage 50 out of transaction; original committed before this runs. For multi-record consistency, use Stage 40; for fire-and-forget, Stage 50 async. **Performance considerations.** - **Sync plug-ins** block the user's operation; keep fast (< 2 seconds). - **Heavy logic** belongs in async Stage 50. - **Image data load** — capturing many columns slows registration; tune. **Plug-in pipeline + workflows + business rules.** - **Business rules** — run client-side (and server-side for some). - **Real-time workflows** — run server-side, similar to plug-ins. - **Plug-ins** — code. - **Async workflows / flows** — out-of-band. All can fire on the same event; ordering matters. **Common pitfalls.** - **Wrong stage.** Validation at Stage 50 — too late. - **No image** — Update plug-in can't see old values. - **Recursive plug-in** — depth guard missing. - **Slow sync plug-in** — user-facing slowness. - **Stage 10 cancel on Create** — record doesn't exist; cascade behaviour unclear. - **Plug-in chains** — cascading effects unpredictable; debugging hard. **Best practices.** - **Comment the stage choice** — future maintainers understand the rationale. - **Test all stages** — what happens if your plug-in throws at each stage? - **Logging in plug-ins** — for production diagnosability. - **Avoid cross-table updates** in Stage 20/40 unless needed. - **Keep plug-in scope narrow** — one logical responsibility per plug-in. ## Strategic positioning The pipeline is the foundation of all server-side Dataverse logic. Misunderstanding it leads to subtle bugs — race conditions, partial writes, missing data. Mastering it produces robust, maintainable extensibility. Invest in the model; the productivity gain is across every plug-in you'll write thereafter. --- # The Dataverse security model Roles, business units, teams, row sharing, and field-level security in Dataverse — the layers that protect data in Dynamics 365 CRM and Power Apps. Source: https://www.solvingdynamics365.com/guides/dataverse-security-model Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Dataverse security looks intimidating from the outside but reduces to a handful of layered concepts. Once they click into place, designing security for a Dynamics 365 implementation becomes a methodical exercise rather than guesswork. ## Business units (BUs) The root of the security model. Every Dataverse environment has a tree of **business units** with a single root and any number of children. Every user and every record belongs to a BU. BUs typically map to organisational structure — divisions, regions, subsidiaries — and form the scope boundary for security roles. ## Security roles A **security role** grants privileges (create, read, write, delete, append, append-to, assign, share) on each Dataverse table. Each privilege has a **scope**: *user-owned*, *business unit*, *parent: child business unit*, or *organisation* — meaning the user can act on their own records, on records owned by their BU, on records owned by their BU or its children, or on all records. The intersection of role + scope is what determines a user's effective access. Multiple roles combine additively. ## Teams A **team** is a collection of users. Teams can own records, and security roles can be assigned to teams to grant access to all team members. **Owner teams** behave like users; **access teams** are lightweight groups for ad-hoc record sharing. **Microsoft 365 groups** can be linked as teams. ## Row sharing Records can be **shared** with a user or team for specific privileges, granting access outside the regular scope rules. Sharing is the safety valve when default scopes don't fit — but heavy reliance on sharing complicates audit and admin. ## Field-level security Beyond row-level, **field-level security profiles** restrict access to specific columns (e.g. salary on the User table). Profiles list users or teams that can read, update, or both, on each protected field. Use sparingly — every protected field adds maintenance. ## Hierarchies **Manager** and **position** hierarchies offer an additional scope dimension where users with manager rights can see records owned by their direct or indirect reports. ## Auditing Audit is enabled per table and column. Every change to an audited column is recorded with user, timestamp, old value, new value. Long-term retention pushes audit data to **Microsoft Purview** for compliance. **Practical advice.** - Start from Microsoft's built-in roles (e.g. *Salesperson*, *Customer Service Rep*); copy and edit. - Use BUs sparingly — too many makes admin painful. - Default to BU-level scope; jump to organisation only with a real reason. - Audit access reviews quarterly. ## Where to go next Each layer has its own guide: [business units and teams](https://www.solvingdynamics365.com/guides/dataverse-business-units-and-teams-deep-dive), [owner teams vs access teams](https://www.solvingdynamics365.com/guides/owner-teams-vs-access-teams-in-dataverse), [field-level security](https://www.solvingdynamics365.com/guides/field-level-security-in-dataverse), and [hierarchical security](https://www.solvingdynamics365.com/guides/hierarchical-security-in-dataverse). The privilege errors a wrong role produces — 0x80040220 and friends — are decoded in [Dataverse Web API errors](https://www.solvingdynamics365.com/guides/dataverse-web-api-errors-explained). ### Frequently asked questions **What are the layers of Dataverse security?** Business units as the scope boundary, security roles granting per-table privileges at user, business unit, parent-child, or organisation scope, teams that own records or carry roles, record sharing as the safety valve, field-level security profiles for sensitive columns, and manager or position hierarchies. **How do multiple security roles combine?** Additively. A user's effective access is the union of every role assigned directly and through teams, plus shares and hierarchy rights. **How many business units should I create?** As few as possible. Business units are the root of the model and too many make administration painful. Default to business-unit scope on roles and escalate to organisation scope only with a real reason. **Where should I start when designing roles?** Copy Microsoft's built-in roles such as Salesperson or Customer Service Rep and edit the copies, use field-level security sparingly, enable audit on sensitive tables, and review access quarterly. --- # The Dataverse TDS endpoint How to query Dataverse with SQL through the TDS endpoint — Azure SQL-compatible read access for reporting tools, with limitations and security implications. Source: https://www.solvingdynamics365.com/guides/the-dataverse-tds-endpoint Section: Customer Engagement / Dataverse platform Published: 2026-07-14 For many years, the only way to query Dataverse was through the Web API (OData) or the older SOAP service. Both are excellent for app integration but awkward for tools that speak SQL — Power BI's older DirectQuery patterns, SQL Server Management Studio for ad-hoc exploration, third-party reporting tools, SQL-aware ETL platforms. **The TDS endpoint** (Tabular Data Stream) gives Dataverse a SQL Server-compatible read-only endpoint. ## What TDS is TDS (Tabular Data Stream) is the protocol Microsoft SQL Server uses for client-server communication. Tools that speak TDS — SQL Server Management Studio (SSMS), Power BI Desktop, Excel's "Get Data from SQL Server", Azure Data Studio, any ODBC / JDBC driver using a SQL Server provider — can connect to the TDS endpoint as if it were a SQL database. ## The endpoint Each Dataverse environment exposes a TDS endpoint at a specific URL: ``` .crm.dynamics.com,5558 ``` (port 5558 is the standard TDS port for Dataverse). Connections authenticate with **Microsoft Entra ID** — typically via Entra ID password authentication or Entra ID interactive authentication. Service principals work for unattended scenarios. **What you can do.** - **Run SELECT queries** with full T-SQL syntax against any Dataverse table. - **Joins across tables** using SQL JOIN syntax. - **Aggregations** (GROUP BY, HAVING, SUM, COUNT, AVG). - **Window functions** (ROW_NUMBER, RANK, etc.). - **Subqueries and CTEs**. - **All the SQL syntax** Azure SQL Database supports for read operations. **What you cannot do.** - **No writes** — TDS endpoint is read-only. INSERT / UPDATE / DELETE not supported. - **No DDL** — can't create tables, indexes, or schema changes. - **No stored procedures.** - **No transactional control** — no BEGIN TRAN / COMMIT. - **Limited some SQL Server features** — synonyms, change tracking statements, specific extensions don't apply. ## Security The TDS endpoint respects: - **User's security role** — same as Web API access. - **Business unit scopes** — same row-level filtering. - **Field-level security** — secured columns are stripped from query results. - **Hierarchical security** — same as Web API. A user querying through the TDS endpoint sees only what they'd see through the standard Power Apps UI. The endpoint is a *different protocol*, not a different security context. ## Power BI use cases TDS is particularly valuable for Power BI: - **DirectQuery** datasets can connect via the SQL Server connector to the TDS endpoint, querying Dataverse live. - **Import mode** can refresh by SQL queries against the endpoint. - Complex Power BI models can join across multiple Dataverse tables natively in SQL. Compared to the OData connector, the SQL approach is sometimes faster for complex aggregations and joins. ## Tooling for ad-hoc analysis SQL Server Management Studio (SSMS) and Azure Data Studio connect to the TDS endpoint: 1. Connect to `.crm.dynamics.com,5558`. 2. Authenticate with Entra ID. 3. Browse the schema like any database. 4. Run SELECT queries interactively. Useful for data exploration, ad-hoc analysis, troubleshooting, building queries for use in reports. ## ETL integration SQL Server Integration Services (SSIS) and similar SQL-aware ETL tools can extract from the TDS endpoint as a source. Combined with the read-only constraint, this is a one-way pattern — Dataverse out to other systems, not back. **Performance.** - Queries against the TDS endpoint go through Dataverse's security and audit pipeline; substantial complex queries take longer than equivalent queries against a raw SQL database. - For very large analytical queries, **Synapse Link for Dataverse** (streaming data to OneLake) is the better path. The TDS endpoint is for moderate-volume direct-query needs. - The TDS endpoint isn't a substitute for analytical data warehousing at scale. **Limits and caveats.** - **Some columns** are exposed differently — choice columns show as integer values; you might need to join to the metadata to get labels. - **Image and file columns** behave specifically — typically not queryable directly. - **Calculated columns** are computed in the query rather than pre-stored. - **Performance for very large tables** can be slow because of security checks. - **Schema names** may differ from intuitive expectations — verify with SSMS browsing first. **Common use cases.** - **Power BI DirectQuery datasets** for live Dynamics 365 reporting. - **SSMS for ad-hoc exploration** by developers and analysts. - **SQL-aware reporting tools** like Tableau, Qlik, Looker connecting via SQL drivers. - **ETL extraction** for one-time data exports. **Common pitfalls.** - **Heavy production reporting via TDS** — for high-volume, complex analytics, use Synapse Link instead. - **Service-principal authentication confusion** — Entra ID requirements can be fiddly; use Azure CLI or PowerShell to set up properly. - **Assuming SQL Server feature parity** — TDS endpoint is read-only and doesn't support all SQL Server features. ## Operational reality TDS is a useful integration surface for SQL-aware tools and ad-hoc analysis. Don't make it the only analytical pattern; for serious analytics, layer Synapse Link / Microsoft Fabric on top. --- # The Dynamics 365 Finance and SCM security model How role-based security works in Dynamics 365 Finance and SCM — duties, privileges, roles, segregation of duties, and extensible data security. Source: https://www.solvingdynamics365.com/guides/dynamics-365-finance-security-model Section: Finance & SCM / Finance Published: 2026-05-01 Dynamics 365 Finance and Supply Chain use a layered, role-based security model derived from AX 2012. It's powerful, expressive, and considerably more complex than Business Central or the CRM apps. Understanding the hierarchy is essential. **The four layers.** 1. **Privileges** — the lowest level. A privilege grants access (read, create, update, delete, perform action) on one or more *securable objects* — menu items, fields, tables, services, reports. Privileges are the building blocks; Microsoft ships hundreds. 2. **Duties** — a logical group of privileges that together let a user perform a job task: *Maintain customer invoices*, *Approve vendor payments*, *Inquire into ledger balances*. Duties are how you express "this job does these things". 3. **Roles** — a job role assembled from duties: *Accounts Payable Manager* contains *Maintain vendor master*, *Approve vendor invoices*, *Inquire into AP*, etc. Users are assigned to roles. 4. **Process cycles** — the highest level, grouping duties by business process for documentation purposes. Process cycles don't affect runtime security. ## Why the layers This structure lets Microsoft ship roles and customers compose them without rewriting privileges. A customer rarely creates privileges; they assemble duties, occasionally extend roles, and assign users. ## Segregation of duties (SoD) F&O has a built-in **SoD framework**. Administrators declare which pairs of duties are conflicting (e.g. *Maintain vendor master* + *Approve vendor payments*) and the system blocks any role assignment that would violate them, surfacing the conflict for resolution. ## Extensible Data Security (XDS) Beyond menu/object security, **XDS** restricts data at the row level — e.g. "salespeople see only customers in their region". XDS policies are defined as queries on the underlying tables and apply automatically wherever those tables are queried, including in custom reports. ## Organisation hierarchy Most security ties back to the **organisation hierarchy** — legal entities, operating units, departments, cost centres. Roles can be scoped to one or many entities; a user assigned to a role across multiple entities sees consolidated lists where appropriate. ## Effective access tool F&O provides an effective-access tool that, given a user, shows every securable object they can reach and the role chain that granted it. Use it to debug "why can I see/not see this?". ## Practical advice Start from Microsoft's shipped roles, copy them, edit the copies. Define SoD policies early. Don't grant the *System Administrator* role to anyone in production except true admins — it bypasses all security. --- # The Dynamics 365 Finance tax engine How tax calculation works in Dynamics 365 Finance — tax codes, tax groups, item tax groups, the Globalization tax service, and country-specific localizations. Source: https://www.solvingdynamics365.com/guides/the-f-and-o-tax-engine Section: Finance & SCM / Finance Published: 2026-05-01 Tax calculation in Dynamics 365 Finance is one of the more configuration-dense areas of the product. Multi-country operations, complex rate structures, statutory reporting variations, and the recent move toward Microsoft's **Globalization Studio** tax service all demand careful design. ## The classic engine F&O's classic tax engine — descended from AX — works by intersecting two classifications on each transaction line: - **Tax group** — assigned to customer or vendor; defines the tax codes that apply for that trading partner's relationship (domestic VAT, export, EU intra-community, reverse charge, etc.). - **Item tax group** — assigned to item or service; defines the tax codes that apply for what's being sold or bought (standard rated, reduced rated, exempt, etc.). The intersection gives the **tax code** to apply, which carries the rate, the ledger accounts for tax payable and recoverable, and the reporting classification. ## Tax codes and tax periods Tax codes have rates, posting accounts, and validity periods. Multiple rates per code over time (e.g. VAT rate changes) are managed by date-ranged versions. **Tax periods** define VAT/sales-tax return periods with start, end, and status (open / closed / submitted). ## Tax calculation steps When a transaction line is created, the engine: 1. Looks up the trading partner's tax group. 2. Looks up the item's tax group. 3. Finds the intersection in the *tax code on the tax group lines*. 4. Calculates the tax amount (line × rate, with proration for partial line discounts). 5. Posts to the configured tax payable/recoverable accounts. ## Multi-step tax Some jurisdictions require multi-step calculation — e.g. US state tax on top of local tax, or layered VAT-plus-environmental-fee. The classic engine supports this through chained tax codes. ## The Tax Calculation service (Globalization) Microsoft's modern, configurable tax calculation service is built around the **Globalization Studio**. The Tax Calculation service is hosted in Azure, configured per country with electronic-reporting (GER) templates, and called by F&O at transaction time. The service supports: - Complex multi-step calculations beyond the classic engine. - Country-specific rules without hard-coding into F&O. - A configurable rule engine in the Globalization Studio. The new service is the strategic direction; for most established F&O customers, the classic engine remains in use, with migration planned over time. ## Country localizations Country-specific tax reporting (VAT returns, intrastat, SAF-T, real-time invoice reporting in Spain/Italy/Hungary, e-invoicing in Mexico/Brazil, OSS for EU B2C) is delivered either by Microsoft (for the major countries) or by partner ISVs. The Electronic Reporting (GER) engine renders the actual report files; the underlying tax data comes from the calculations described above. ## External tax engines For US sales tax with thousands of jurisdictions, customers integrate **Avalara** or **Vertex** — third-party tax engines that hold up-to-date jurisdiction rules. F&O calls the external service at posting; the result is stored as tax transactions in F&O. **Common pitfalls.** - **Wrong intersection setup.** New customer or item without correct tax-group assignment posts incorrect tax silently. - **Rate change without versioning.** Updating the same tax code in place affects historical transactions on reprint; always version with effective dates. - **Localization without specialist help.** Each country has nuances; rely on an experienced country implementer. --- # The Dynamics 365 product family A guided tour of every app in Dynamics 365 — ERP, CRM, marketing, retail, HR — what each one actually does. Source: https://www.solvingdynamics365.com/guides/dynamics-365-product-family Section: Foundations / Platform overview Published: 2026-05-01 Updated: 2026-08-30 Dynamics 365 is not one product. It is a portfolio of business applications sold under one brand, grouped loosely into two halves: **ERP** for running the back office (money, inventory, operations) and **CRM** for running customer-facing work (sales, service, marketing). Microsoft calls the CRM half "Customer Engagement" and the ERP half "Finance and Operations apps", and neither label appears consistently even in Microsoft's own material — which is why a map helps. If you're deciding what to buy, [the product chooser](https://www.solvingdynamics365.com/guides/how-to-choose-the-right-dynamics-365-product) is the decision-focused companion to this guide. This one is the tour. ## The ERP side: money and operations **[Dynamics 365 Finance](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-finance)** is the enterprise financial system, descended from Dynamics AX. General ledger, accounts payable and receivable, fixed assets, budgeting, revenue recognition, and consolidations across many legal entities, currencies, and tax regimes. If you have subsidiaries in twelve countries, this is the tier built for you. **[Dynamics 365 Supply Chain Management](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-supply-chain)** is Finance's operational twin — same codebase, same database, usually implemented together (the pair is what people mean by "F&O"). It covers procurement, inventory, warehouse and transportation management, master planning, and discrete, process, and lean manufacturing. **[Business Central](https://www.solvingdynamics365.com/guides/what-is-business-central)** is the SMB ERP, descended from Dynamics NAV. It delivers financials, sales, purchasing, inventory, projects, and light manufacturing in one tightly integrated app with a far simpler operating model than F&O. It is not a cut-down F&O — it is a different product with a different lineage, and for most companies under a few hundred users it is the right ERP. The [BC vs F&O comparison](https://www.solvingdynamics365.com/guides/business-central-vs-finance-and-operations) draws the line in detail. **[Project Operations](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-project-operations)** runs professional services firms — project sales, resourcing, time and expense, project accounting, and billing. It deliberately straddles the ERP/CRM line: the sales and resourcing side runs on Dataverse, the invoicing side runs on the F&O financial engine. ## The CRM side: customers **[Sales](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-sales)** handles leads, opportunities, pipeline, and forecasting — the core CRM most people picture. It is Microsoft's head-to-head competitor with Salesforce, and [that comparison](https://www.solvingdynamics365.com/guides/dynamics-365-sales-vs-salesforce) is its own guide. **[Customer Service](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-customer-service)** runs case management and omnichannel support — voice, chat, email, social — with SLAs, entitlements, and knowledge management. Its contact-centre sibling, [Dynamics 365 Contact Center](https://www.solvingdynamics365.com/guides/dynamics-365-contact-center-explained), packages the channel and Copilot layer as a standalone CCaaS product that can sit on top of other CRMs. **[Field Service](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-field-service)** schedules and dispatches mobile technicians: work orders, route optimisation, a technician mobile app, and IoT-triggered service. If your business sends people in vans to fix things, this is the app. **Customer Insights** is one licence covering two distinct products. **[Customer Insights – Journeys](https://www.solvingdynamics365.com/guides/customer-insights-journeys-explained)** is the marketing automation app — customer journeys, email campaigns, events, lead scoring. **[Customer Insights – Data](https://www.solvingdynamics365.com/guides/customer-insights-data-explained)** is a customer data platform that unifies profiles from many systems. They install and work independently; the shared name causes endless confusion, and the [naming history](https://www.solvingdynamics365.com/guides/dynamics-365-marketing-history-and-transition) explains how it got this way. ## The operational extensions **[Human Resources](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-human-resources)** covers HR core: the employee record, org structure, leave and absence, benefits, and compensation. It is not a payroll engine — payroll comes from ISV partners — and in most deployments it feeds a broader HCM landscape rather than replacing one. **[Commerce](https://www.solvingdynamics365.com/guides/dynamics-365-commerce-explained)** is the unified retail platform: head-office merchandising, store point-of-sale, e-commerce, and call centre, running on the same data model as Finance and Supply Chain Management. It is the deepest vertical product in the family and effectively assumes the F&O backbone underneath it. ## The platform underneath Every app above stands on shared plumbing, and that plumbing is the real reason the family exists as a family. The **[Power Platform](https://www.solvingdynamics365.com/guides/dynamics-365-and-power-platform)** — Power Apps, Power Automate, Power BI, Copilot Studio, and Power Pages — extends every Dynamics 365 app with low-code customisation, automation, analytics, AI agents, and external portals. In practice you cannot run a serious Dynamics 365 implementation without touching it; a Dynamics licence includes rights to use it against your Dynamics data. **[Microsoft Dataverse](https://www.solvingdynamics365.com/guides/what-is-microsoft-dataverse)** is the shared data layer the CRM-side apps run on natively. The ERP apps keep their own databases and connect to it — a distinction with real architectural consequences, unpacked in [how the apps connect](https://www.solvingdynamics365.com/guides/how-dynamics-365-apps-connect). Identity comes from **Microsoft Entra ID**, so one login covers CRM, ERP, Power Platform, and Microsoft 365. Infrastructure, compliance, and data residency are inherited from **Azure**. And **Copilot** now threads through the whole family — [the orientation guide](https://www.solvingdynamics365.com/guides/copilot-across-dynamics-365) covers what is real versus roadmap. ## How to read the family Three practical rules keep the portfolio legible: **The apps are sold separately.** "We're getting Dynamics 365" means nothing until someone names the apps. Each is licensed per user per month at its own price, with attach pricing when one user needs several — the [edition comparison](https://www.solvingdynamics365.com/guides/dynamics-365-edition-comparison) covers the licensing shape. **The halves have different DNA.** The CRM apps share one database and feel like one product. The ERP apps are separate systems that integrate with the CRM side rather than merging with it. Expect integration work whenever a project spans the line. **Names change; products mostly don't.** Marketing became Customer Insights – Journeys, Retail became Commerce, AX became Finance and Supply Chain, NAV became Business Central. When you meet an unfamiliar Dynamics name in older material, it is usually a current product wearing a previous badge. Next step in the path: [how the apps actually connect](https://www.solvingdynamics365.com/guides/how-dynamics-365-apps-connect) — which links between them are tight, which are loose, and what that means for your architecture. ### Frequently asked questions **Which Dynamics 365 apps are ERP and which are CRM?** ERP: Finance, Supply Chain Management, Business Central, Commerce, and the financial half of Project Operations. CRM (Customer Engagement): Sales, Customer Service, Field Service, Customer Insights – Journeys and – Data, and the front half of Project Operations. Human Resources sits on the Finance and Operations platform. **Is Business Central a cut-down version of Finance and Operations?** No. Business Central descends from Dynamics NAV and Finance and Operations from Dynamics AX; they are different products with different data models and operating models. For most companies under a few hundred users Business Central is the right ERP, not a compromise. **Do the Dynamics 365 apps share one database?** The CRM apps do — they run natively on Dataverse and share Account, Contact, and Activity rows. The ERP apps keep their own databases and integrate with Dataverse through dual-write, virtual tables, or APIs. Any project that spans the line should budget integration work. **What did the older Dynamics product names become?** Dynamics 365 Marketing became Customer Insights – Journeys, Retail became Commerce, AX became Finance and Supply Chain Management, NAV became Business Central, and CRM became the Customer Engagement apps. Unfamiliar names in older material are usually current products under a previous badge. --- # The Field Service mobile app The Field Service mobile app — what technicians do in the field, offline capabilities, parts inventory, customer signatures, and Copilot. Source: https://www.solvingdynamics365.com/guides/field-service-mobile-app Section: Customer Engagement / Field Service Published: 2026-05-01 The **Field Service mobile app** is where technicians actually do their work — the customer-facing screen of the entire Dynamics 365 Field Service investment. It runs on iOS and Android, online and offline, and is the productivity-or-bust component of any FSM implementation. ## Day plan A technician's home screen is their schedule for the day: bookings in time order, each linked to a work order with customer location, contact details, equipment, parts requirements, and skill match. Tap a booking and the app navigates them through the work. ## Offline Field Service must work offline; technicians regularly visit sites with no signal. The app maintains a local copy of the assigned work orders, customer history, knowledge articles, and parts inventory. Edits made offline queue and sync when connectivity returns. Conflict resolution is built around last-writer-wins with surfacing of differences. ## Navigation The app integrates with the device's mapping system — Apple Maps on iOS, Google Maps on Android — for turn-by-turn navigation from one booking to the next. ETA is computed and pushed back to the customer as an arrival window. ## Customer history and assets Tapping the customer or asset surfaces full history — past work, recurring faults, warranty status, contract entitlements. For complex equipment, the **asset hierarchy** (parent equipment with child sub-assemblies) is browsable inline. ## Time and inspections Travel time, work time, and break time are captured with start/stop buttons. **Inspection forms** — configurable structured checklists with required fields, photos, and conditional branches — are completed on site and saved to the work order. Inspections are first-class objects with reportable data. ## Parts inventory Each technician carries a **truck stock** location. Parts consumed on a job decrement the truck balance; replenishment requests can be created on the spot. Non-stocked parts can be ordered to the customer site. ## Customer signature and payment At job close, the customer signs on screen (capture saved as image to the work order), receives an emailed PDF, and — in supported configurations — can pay invoice from the same flow. ## Photos and attachments Photos taken in the app upload directly to the work order, including before/after evidence and damage records. ## Copilot A field copilot answers questions about the work order ("what was the customer's last fault?"), summarises the previous visit, drafts the resolution notes, and suggests next steps based on knowledge articles. ## Practical wins Done well, the mobile app drops average job time and dramatically improves first-time-fix rates. Done badly (no offline, slow, hard to log time), technicians shadow-log on paper and the data dies. --- # The Global Address Book in Dynamics 365 Finance & Operations How the Global Address Book unifies parties across customers, vendors, contacts, and workers in F&O — party types, role assignments. Source: https://www.solvingdynamics365.com/guides/global-address-book-in-f-and-o Section: Finance & SCM / Overview & platform Published: 2026-05-01 A single individual or organisation might be a **customer** for one legal entity, a **vendor** for another, a **business contact** in CRM-style scenarios, and the **employer** of internal **workers**. Without a unifying model, the same party gets recorded multiple times with slight variations, and analytics lose coherence. F&O's **Global Address Book (GAB)** is the cross-legal-entity store that holds parties once and assigns them roles. ## Core entity: Party A **party** in GAB is a person or organisation. Each party has: - **Type** — Person or Organisation. - **Name and address details.** - **Contact information** — phone, email, URLs. - **Identification numbers** — VAT registration, DUNS, government IDs. - **One or more roles** — Customer, Vendor, Contact, Worker, Competitor, Other. A party can hold multiple roles simultaneously: organisation Acme Corp is a Customer in three legal entities and a Vendor in one. Each role is a separate record in the role-specific table (Customer, Vendor) but linked back to the same party. ## Why this matters Reconciling "who's who" across customer master, vendor master, and worker records becomes one query — joining through the party. Master data quality programs operate at party level; data quality fixes propagate to all roles. ## Cross-legal-entity sharing GAB is **enterprise-wide** — one address book across all legal entities in the F&O tenant. A customer created in Legal Entity A can be activated as a customer in Legal Entity B by adding the customer role for that entity, reusing the underlying party. This is a structural advantage F&O has over many ERPs: one global identity, locally activated as needed. ## Address book hierarchy The hierarchy: - **Default global address book** — the single shared book. - **Custom address books** — optional sub-books for specific scopes (e.g. "Legal" address book for in-house counsel use). Most installations use only the default book. Custom books are for unusual segregation requirements. ## Addresses on parties Each party can have multiple **postal addresses**, each with: - **Purposes** — Invoice, Delivery, Statement, Statutory, Multiple. - **Effective from/to dates** — addresses can age in/out. - **Primary flag** — designates the default for a purpose. When a customer record is created, addresses are derived from the party's address book entries — but can be overridden at customer level if needed for that legal entity's relationship. ## Names and translations A party may have: - **Primary name** — the canonical name. - **Translations** — alternative-script names (Chinese, Arabic) for global vendors. - **Alternative names** — DBA, "trading as", historical names. Search across all name variants is supported, useful for finding an organisation whose name has shifted over time. ## Contact persons A **contact** in GAB is a person party linked to an organisation party via a role. This person is "the buyer at Acme" but also exists as a party in their own right — they could later become a vendor contact at a different organisation. Maintaining contacts at party level rather than per-customer-per-LE prevents duplicate contact records. ## Workers and HR Internal employees are also parties. The worker party is linked to an HR worker record (in the HR module) or a project worker (in Project Operations). Same person, different roles. ## Duplicate detection Adding a new party with a name similar to an existing party triggers duplicate warnings. The match algorithm uses name similarity, address proximity, and identifier overlap. Manual review confirms or rejects the duplicate. ## Merge If two parties turn out to be the same: - **Merge function** moves all role assignments to one surviving party. - Transactions, addresses, contacts all redirect. - The merged-away party is marked inactive but retained for audit history. Use with care — merge is hard to undo. ## Integration with Dataverse and CDS When F&O integrates with the Power Platform via **Dual-Write**, the GAB party model maps to Dataverse's Account and Contact tables. The party identifier becomes a key bridging both sides. This dual-write is the underlying plumbing for the unified "Dynamics 365" experience. **Common pitfalls.** - **Creating duplicates in workflow.** Sales rep creates a customer without checking if the party already exists; duplicate party emerges; reconciliation later is painful. - **Address divergence.** Addresses overridden at customer level drift from the party master; cross-LE reporting shows different addresses. - **Forgotten role activation.** A customer exists in LE A; LE B starts trading with the same customer but creates a new party instead of activating the existing one. - **GAB performance at scale.** Very large GAB (millions of parties) can slow address book lookup; index tuning and archiving stale parties helps. - **Merge ambiguity.** Merging two parties where one has high-value historical data; merge logic preserves the surviving party's data — picking the wrong survivor loses history. **Operational disciplines.** - **Master data ownership** — a single team owns party creation across all LEs, with workflow approval and duplicate-check enforcement. - **Periodic dedupe runs** — duplicate detection runs against the full GAB, flagging probable duplicates for review. - **Identifier governance** — VAT numbers, DUNS, government IDs collected and used as primary match keys. ## The unifying value GAB is one of F&O's more architecturally interesting features — a global identity model that few competitors match. The implementation upside (data quality, cross-LE analytics, integration simplicity) only materialises with master data discipline; without it, GAB becomes another store of duplicates. --- # The job queue in Business Central How Business Central's job queue runs scheduled and background work — categories, parallelism, error handling, and operating discipline. Source: https://www.solvingdynamics365.com/guides/the-job-queue-in-business-central Section: Business Central / Admin & ops Published: 2026-05-01 Business Central's **job queue** is the scheduler that runs background tasks — nightly batch routines, scheduled report distributions, asynchronous integrations, long-running calculations that shouldn't block the user. Configured well, it's invisible infrastructure; configured badly, it's the source of mysterious "this didn't run" support tickets. ## Job queue entries A **job queue entry** is the schedule definition for one task. Each entry has: - **Object Type** — Codeunit, Report, or XMLport. - **Object ID** — which one to run. - **Description** — a human-readable name. - **Earliest Start Date/Time** — when the next run is scheduled. - **Expiration Date/Time** — when the schedule ends (blank for indefinite). - **Recurring Job** — yes or no. - **Run On [Days]** — which days of the week recurring jobs fire. - **Starting / Ending Time** — daily window for execution. - **Status** — Ready, In Process, Error, Finished, On Hold. - **Maximum No. of Attempts** — retry policy on failure. - **Job Queue Category Code** — for grouping and parallelism control. - **User ID** — the user context the job runs as. ## Job queue categories Categories let you group entries and control concurrent execution. By default all entries share the same category and can run in parallel up to the platform limit. Custom categories with concurrency limits (`Max No. of Concurrent Jobs = 1`) serialise long-running work that mustn't overlap — e.g. inventory cost adjustment, currency revaluation, complex MRP runs. ## Errors and retries A job that errors moves to Error status with the error message captured. The retry policy controls how many attempts run before final failure. Failed jobs are visible in the *Job Queue Log Entries* view with the full call stack for investigation. ## Standard scheduled work Common job queue uses: - **Adjust Cost — Item Entries** — nightly. - **Post Inventory Cost to G/L** — nightly after Adjust Cost. - **Currency Exchange Rate Service** — fetches daily rates. - **Email reports** — scheduled report runs that PDF and email to distribution lists. - **Bank account reconciliation imports** — pulls bank feeds. - **Document send retries** — for failed email deliveries. - **Power Automate-triggered actions** — many BC connectors create job queue entries internally. ## Parallelism A standard tenant runs several job queue threads in parallel. Long-running blocking jobs in one category don't block other categories. The configuration tunes the trade-off between throughput (more parallel) and resource pressure (fewer parallel). ## User context Each job runs as a specific user — important for permission and audit. Best practice: create a dedicated *Job Queue Service Account* user (a system user, not a person), assign appropriate permissions, and run all background jobs as that user. Avoids the messy "what happens when this user leaves" question. ## Telemetry Job queue runs emit Application Insights telemetry — start, finish, duration, error. Build alerts on long-running or repeatedly-failing jobs. **Common pitfalls.** - **Job that errors but doesn't recover** — left in Error status indefinitely until someone notices. Build alerts on failed jobs. - **Long-running job in a small window** — the job starts but doesn't finish before the ending time and is rescheduled. Investigate duration vs window. - **Permission-failing job** — user lacks rights to a table the job touches. Audit the service-account user's permissions. - **Conflicting jobs without category** — two jobs that mustn't overlap run in parallel and corrupt state. Assign them to a serialised category. ## Observability Schedule a daily admin glance at the job queue. Most healthy tenants need only minutes; the alternative is the surprise call from a controller asking why nothing reconciled last month. --- # The Landed Cost module in Dynamics 365 SCM How the Landed Cost module captures the true cost of imported goods — voyages, shipping containers, charges, allocation methods. Source: https://www.solvingdynamics365.com/guides/landed-cost-module-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 For companies importing goods internationally, the purchase price is only part of the cost. Freight, insurance, duties, brokerage, port charges, and inland transportation add 10–30% to the unit cost — and that "landed cost" is what should appear on the inventory valuation, not just the supplier invoice. The **Landed Cost** module in Dynamics 365 SCM models this end-to-end. ## Why a separate module The classic F&O **Misc Charges** mechanism lets you add charges to a purchase order, but it doesn't model: - Multiple shipments converging into one voyage. - Charges incurred against a container, not a single PO. - Cost allocation across many POs and many lines. - Cost-as-of dates differing from invoice posting dates. Landed Cost adds **voyages**, **containers**, and **cost types** as first-class entities that aggregate across purchase orders. **Core entities.** - **Voyage** — a vessel's trip from origin to destination, with a departure and arrival date. - **Container** — a shipping container within a voyage, holding cargo. - **Folio** — a grouping of charges (often per shipment). - **Cost type** — a category of charge (sea freight, insurance, duty, broker fee). - **Cost allocation method** — how a charge is distributed (by weight, volume, value, quantity, equal split). **Workflow.** 1. Purchase orders are created normally. 2. A **shipping container** is created and PO lines assigned to it; the system computes total weight, volume, value per container. 3. The container is added to a **voyage**. 4. Estimated charges are recorded against the voyage or container (sea freight estimate, broker estimate, duty estimate). These flow into estimated landed cost on each PO line. 5. When the goods arrive, the receipt posts at estimated landed cost. 6. Actual invoices arrive over weeks (freight, duty, broker). Each is recorded against the voyage or container as actual charges. 7. Cost adjustment routines reconcile actuals vs estimates and post the variance. ## Allocation methods For each charge, choose: - **By weight** — heavy items absorb more. - **By volume** — voluminous items absorb more. - **By value** — high-value items absorb more. - **By quantity** — flat per unit. - **By equal share** — flat per PO line. The right method per charge type matters: freight is usually weight or volume; insurance is usually value; duty is per-line per-tariff. A landed cost setup that uses one method for everything is naive. ## Estimated vs actual Estimates flow into inventory cost immediately at receipt — without estimates, inventory is valued at supplier price only. When actuals arrive: - **Variance** = actual - estimate per cost type. - **Adjustment routine** processes the variance into existing inventory and COGS for already-sold items. - **Variance accounts** capture systematic over- or under-estimation patterns. ## Duty and customs Country-specific tariff codes and duty rates drive duty calculation. Landed Cost can compute duty per line based on Harmonised System (HS) codes and country of origin, integrating with customs declaration data. For complex customs, partner extensions (Avalara, Vertex landed cost) layer on top. ## Multi-currency Cost types are typically denominated in different currencies — sea freight in USD, broker fees in local. The module handles per-currency conversion at the appropriate rate (charge date, receipt date, or invoice date — configurable). **Reporting.** - **Voyage cost analysis** — total landed cost per voyage, broken down by cost type. - **Container utilisation** — value vs capacity. - **Variance by cost type and supplier** — where estimates routinely miss. This reporting is where landed cost yields ROI — identifying which trade lanes, which freight forwarders, which products consume more cost than expected. ## Integration with inventory cost Landed Cost integrates with the F&O **cost engine**: - Inventory close runs respect landed cost adjustments. - FIFO/Weighted Average calculations use the landed cost, not just supplier price. - COGS at the moment of sale reflects the most current landed cost calculation. **Common pitfalls.** - **Estimates too optimistic.** Persistent under-estimation; variances always negative; finance distrusts the module. - **Allocation method mismatch.** All charges allocated by value; freight on a low-value bulky item is wrong. - **Cost type proliferation.** Dozens of cost types where five would do; reconciliation becomes painful. - **Late actuals.** Invoices arriving months later; inventory has already been sold; adjustments hit COGS unexpectedly. - **Integration with broker spreadsheets.** Broker provides duty in Excel; manual re-keying introduces errors. Build an import process. ## Operational rhythm A monthly landed cost close: confirm all voyages with departures in the month are estimated; reconcile any actuals received; post adjustments. A quarterly variance review identifies systematic estimation issues. ## When to use it If imports are >5% of cost and >20% of inventory by value, Landed Cost pays back. For occasional imports, the simpler Misc Charges approach is sufficient. --- # The marketing and relationships module in Business Central Business Central's built-in contact-and-relationship management — when it works, when Dynamics 365 Sales is the better answer. Source: https://www.solvingdynamics365.com/guides/the-marketing-and-relationships-module-in-business-central Section: Business Central / Sales & purchasing Published: 2026-05-01 Business Central ships a **Relationship Management** module — historically called Marketing — with contact records, interactions, opportunities, segments, and campaigns. It is a *light* CRM, included with both Essentials and Premium, and it covers many SMB needs without a separate Dynamics 365 Sales subscription. Knowing when it's enough — and when it isn't — saves both money and confusion. ## The data model The module centres on: - **Contacts** — people and companies. Independent of the financial Customer record, though linkable. The flexibility lets you track prospects who aren't yet customers, leads, partners, and other non-financial relationships. - **Contact Companies and Contact Persons** — modelled separately, with employees attached to companies. - **Interactions** — recorded touchpoints: phone calls, emails, meetings, letters, web form submissions. Each interaction has an interaction template, a date, a comment, and links to the contact. - **Opportunities** — sales pursuits in progress, with sales cycle stages, estimated value, probability, and expected close date. - **Segments** — saved groups of contacts for targeted campaigns. - **Campaigns** — marketing initiatives with start/end dates, budgeted cost, and connected segments. **What it does well.** - Track interactions across customers, vendors, prospects in a single timeline. - Manage a basic sales pipeline with stages and weighted forecasts. - Send simple targeted email to segmented contact lists. - Capture and qualify leads. - Maintain centralised contact data linked to the customer/vendor financial records. **What it doesn't do.** - Sophisticated sales process automation, AI-driven scoring, or copilot-grade selling assistance. - Omnichannel customer service with case management, SLA enforcement, knowledge base. - Marketing automation at journeys-grade — multi-step nurture sequences, A/B testing, advanced personalisation. - Account hierarchies, complex territory management, sales accelerators. - Full integration with Outlook / Teams / Power BI at the depth Dynamics 365 Sales offers. ## When BC's module is enough Small businesses with a handful of salespeople, simple pipeline tracking, basic interaction logging, occasional email outreach — BC's module covers it without a Sales subscription. Common in companies under 25 users where the cost of separate Dynamics 365 Sales licences would exceed the benefit. ## When to upgrade to Dynamics 365 Sales Signs you're outgrowing BC's module: - Sales team is large enough to want their own dedicated tool, not a corner of the ERP. - Pipeline reporting needs are sophisticated — forecasting, manager hierarchy roll-ups, AI-predicted insights. - Email integration with Outlook needs to be deep — track every email automatically, see CRM context in Outlook. - Customer service operates on cases and SLAs, not just interactions. - Marketing automation needs are real — multi-step journeys, A/B tests, attribution. - Copilot-style AI assistance is wanted. ## The hybrid pattern Many BC customers keep the Relationships module for basic interaction logging and central contact management, *plus* subscribe to Dynamics 365 Sales for the people who genuinely sell. Integration between the two is configured: customers and contacts sync between BC and Dataverse via the standard connector or Power Automate flows. ## Migration path When upgrading from BC Relationships to Dynamics 365 Sales: 1. Provision the Sales environment in Dataverse. 2. Map BC's Contacts to Dataverse Accounts and Contacts. 3. Migrate opportunities and interactions if historical data is needed. 4. Configure dual-write or scheduled sync between the two systems for ongoing. The cleanest moves keep BC as the financial system and Dynamics 365 Sales as the relationship system, with clear ownership rules per data type. --- # The multi-session experience in Customer Service How the Customer Service Workspace handles multi-session agents — tabs, productivity pane, capacity profiles, and the operational realities. Source: https://www.solvingdynamics365.com/guides/multi-session-experience-in-customer-service Section: Customer Engagement / Customer Service Published: 2026-05-01 A contact-centre agent handles many things at once — a chat in progress, an open case, a phone call about to start, knowledge being searched, customer history being checked. The **Customer Service Workspace** (formerly Omnichannel for Customer Service) is built around this reality: a multi-session, multi-tab experience where the agent can hold parallel conversations and records without losing context. ## Sessions Each *active conversation* or *focused work item* is a **session**. The agent can have multiple sessions open concurrently, switching between them like browser tabs. A session typically anchors on a customer interaction — a chat, a phone call, a case, an email being composed — and holds the relevant tabs alongside. ## The session pane Sessions appear in a vertical list on the left of the screen. Active session is highlighted; idle sessions show a count of unread messages or pending actions. Closing a session ends it. ## Tabs within a session Each session can have multiple **tabs** — typically the conversation (chat/voice/email), the customer record, the case, related knowledge articles, and any inspection or form the agent is filling. The tabs are independent — the agent can switch tabs without losing place in the conversation. ## The productivity pane A right-side pane in each session holds **productivity tools** — knowledge search results, smart assist suggestions, conversation summary, related cases, suggested replies. The pane is contextual: opening the conversation tab shows conversation-related tools; opening the customer record shows customer-related tools. ## Smart Assist and Copilot Real-time AI-driven assistance: - **Conversation summary** — when the agent opens a chat already in progress (e.g. transferred from another agent), Copilot summarises what's happened in a sentence. - **Suggested replies** — based on the conversation, AI suggests answer phrasings the agent can accept, edit, or reject. - **Knowledge surfacing** — articles relevant to the current conversation appear without explicit search. - **Case summarisation** — at handoff or escalation, Copilot drafts a structured case summary the agent reviews and saves. ## Capacity profiles Multi-session works only if assignment respects agent capacity. Each agent has a **capacity profile** declaring how much work they can hold simultaneously — typically 1 voice call, 3 chats, 5 cases, no email. Unified Routing honours the profile: a chat won't route to an agent already at the chat cap. **Channel-specific behaviour.** - **Voice calls** — exclusive: an agent on a live voice call can browse other sessions but the voice conversation is the focus. - **Chats** — concurrent: multiple chats run in parallel. - **Emails** — long-running: emails can be composed across many short sessions without losing draft state. - **Cases** — background: cases sit as sessions while the agent works on conversations, then come to focus when needed. ## Personalisation Agents can configure their multi-session experience — number of tabs to remember, default productivity-pane tools, notification preferences. Supervisors can set defaults per role. ## Performance The multi-session UI is data-heavy on the client. Slow networks degrade the experience; the configuration of how many sessions auto-load, how aggressively the productivity pane pre-fetches data, and which tools are enabled matters for agent satisfaction. ## Supervisor view Supervisors see real-time dashboards of agent sessions, conversation health, escalation flags. Live conversation monitoring (whisper, barge, listen on voice; observe on chat) lets supervisors intervene on stuck calls. ## Configuration discipline Tune the multi-session experience for each agent role. A first-line chat agent's workspace differs from an escalation specialist's. Don't ship one configuration to all agents. ## Operational reality Once agents adapt to multi-session, they don't go back. Average handling time drops, customer satisfaction improves, agent satisfaction often improves too. The configuration investment is real but one-time. --- # The outbox pattern with Service Bus A resilient integration pattern for Dynamics 365 — combining an outbox table with Service Bus to deliver guaranteed-once messaging across systems. Source: https://www.solvingdynamics365.com/guides/the-outbox-pattern-with-service-bus Section: Integrations / Architecture patterns Published: 2026-05-05 For mission-critical integrations between Dynamics 365 and external systems, naive direct calls have a problem: what happens when Dynamics 365 commits a transaction but the integration call fails? The change exists in Dynamics 365 but never reached the downstream system; data is now inconsistent. The **outbox pattern** solves this by combining a Dataverse "outbox" table with Azure Service Bus to guarantee that every committed change reaches downstream systems exactly once, eventually. **The problem with direct integration calls.** A typical pattern: a plug-in on Dataverse opportunity-close fires, calls an external API to push the sale to the back-office ERP, the API responds, the plug-in completes, the transaction commits. What can go wrong: - The API call succeeds but the Dataverse transaction rollbacks for unrelated reasons. The downstream system has the data; Dataverse doesn't. Inconsistency. - The API call times out (5-minute plug-in limit). The plug-in fails; Dataverse rollbacks. From the user's perspective, the operation failed; but the downstream may have processed it. - The API is temporarily unavailable. The plug-in fails; the user retries; but the rule is "do this only once". These problems are why naive synchronous integration is unreliable for important data. **The outbox pattern.** The pattern decouples the *recording* of intent from the *delivery* of the message: 1. **Within the Dataverse transaction**: a plug-in (or flow) records a message into an **outbox table** in Dataverse. The outbox row holds the payload, target, and metadata. The Dataverse transaction commits atomically — either both the business change and the outbox row commit, or neither. 2. **Out of band**: a separate worker (Azure Function on a timer, a flow on schedule, a continuous-running service) reads new outbox rows, publishes them as Service Bus messages to the appropriate queue, then marks the outbox row as published. 3. **Service Bus** durably holds the message. The downstream consumer reads at its own pace. 4. **Idempotent consumer**: the downstream system processes each Service Bus message and is designed to be idempotent — receiving the same message twice produces the same result (no double-processing). 5. **Confirmation**: optional — the consumer acks back, and the outbox row marks complete. **Why this works.** - **Atomic outbox commit** — the business change and the message-to-send commit together. Either both happen or neither. - **Service Bus durability** — once the message is on the queue, downstream can be offline for hours / days without losing it. - **Idempotency** — the consumer can safely receive a message twice (e.g. if the publisher published, then crashed before marking the outbox row complete). - **Retry** — failed deliveries retry from the queue; persistent failures land in the dead-letter queue for investigation. **Implementation in Dataverse.** - **Outbox table** — a custom Dataverse table with columns: payload (JSON), target, status (Pending / Published / Acked / Failed), created date, published date, retry count. - **Plug-ins / flows** — insert rows into the outbox in the same transaction as the business change. - **Publisher worker** — Azure Function on a timer, every 10–30 seconds, queries new outbox rows and publishes them. - **Service Bus** — the durable channel. - **Downstream consumer** — reads Service Bus messages, processes idempotently, optionally acks back. ## The change tracking alternative If Dataverse change tracking is enabled, the publisher worker can poll change tracking instead of an explicit outbox table. The pattern is similar but uses Dataverse's built-in delta mechanism rather than a custom outbox. **When to use the outbox pattern.** - **Mission-critical integrations** where data loss is unacceptable. - **High-volume integrations** where Service Bus's durability and decoupling matter. - **Cross-system business processes** that span Dataverse and other systems. **When not.** - **Low-stakes integrations** where occasional inconsistency is recoverable. Direct calls or basic webhooks suffice. - **Read-only integrations** where the consumer pulls from Dataverse. The outbox is about *push from Dataverse*, not pull. - **Real-time UI-blocking calls** — outbox is asynchronous; users don't wait for downstream success. **Trade-offs.** - **Complexity** — multiple components to design, build, monitor. The reliability benefit must justify the complexity. - **Latency** — outbox-based integration has small delay (seconds to a minute typically). For most business processes that's fine; for some it isn't. - **Operational discipline** — monitor outbox depth, dead-letter queue, retries. Without active monitoring, problems hide. **Common pitfalls.** - **Outbox not in the same transaction** — defeats the purpose. The outbox insert must be atomic with the business change. - **Consumer not idempotent** — duplicates cause double-processing. Use message IDs or natural keys. - **No dead-letter handling** — failed messages accumulate silently. Build alerting. - **Outbox not cleaned up** — millions of completed rows degrade Dataverse performance. Archive or delete old rows. ## Operational reality The outbox pattern is canonical enterprise-integration practice; not specific to Dynamics 365. Adopting it for the integrations that matter is one of the highest-leverage reliability investments. ## Where to go next The queue side is covered in [Service Bus integration with Dataverse](https://www.solvingdynamics365.com/guides/azure-service-bus-integration-with-dataverse) and the Business Central variant in [webhooks vs Service Bus](https://www.solvingdynamics365.com/guides/integrating-business-central-webhooks-vs-service-bus). For multi-step transactions on top of the outbox, [the saga pattern](https://www.solvingdynamics365.com/guides/saga-pattern-for-dynamics-365) and [eventually consistent integrations](https://www.solvingdynamics365.com/guides/eventually-consistent-integrations-with-dynamics-365); for the read-side alternative, [change tracking in Dataverse](https://www.solvingdynamics365.com/guides/change-tracking-in-dataverse). --- # The Plug-in Registration Tool — a deep dive How PRT registers Dataverse plug-ins — assemblies, steps, images, secure/unsecure configuration, and where the tool fits in modern ALM. Source: https://www.solvingdynamics365.com/guides/plug-in-registration-tool-deep-dive Section: Power Platform / Custom development Published: 2026-05-01 The **Plug-in Registration Tool (PRT)** has been the workbench for Dataverse plug-in development for over a decade. It registers compiled .NET assemblies into a Dataverse environment, wires them to table events, defines step parameters and pre/post images, and exposes secure configuration. Despite modern alternatives (Power Platform Build Tools, solution-based registration), PRT remains the everyday tool for plug-in developers. ## Where PRT comes from Part of the Dataverse SDK; downloadable as a `Microsoft.CrmSdk.XrmTooling.PluginRegistrationTool` NuGet package. Run-anywhere desktop tool, connects to a Dataverse environment. **Core registration units.** - **Assembly** — the compiled .DLL containing plug-in classes. - **Plug-in class** — a C# class implementing `IPlugin`. - **Step** — a registration tying a class to a table event with execution parameters. - **Pre-image / Post-image** — captured snapshots of the row before/after the operation. - **Service endpoint** — registration of an Azure Service Bus or Event Grid endpoint as a step target. **Workflow.** 1. **Build** the plug-in DLL in Visual Studio. 2. **Connect** PRT to the Dataverse environment. 3. **Register Assembly** — pick the DLL; PRT inspects classes; registers as an assembly record. 4. **Register Step** — pick a class, table, event (Create/Update/Delete), stage (Pre/Post), execution mode (Sync/Async), filtering attributes (only fire on these column changes). 5. **Register Image** if needed — capture snapshot of specified attributes. 6. **Test** — trigger the event; verify the plug-in fired. **Step parameters.** - **Message** — `Create`, `Update`, `Delete`, `Retrieve`, `RetrieveMultiple`, `Associate`, `Disassociate`, custom action. - **Primary table** — the table the event fires against. - **Stage** — Pre-validation, Pre-operation, Post-operation. - **Execution mode** — Synchronous (in transaction) or Asynchronous (background queue). - **Filtering attributes** — limits firing to changes in specified columns. - **Run in user's context / specific user** — security context for the plug-in. - **Deployment** — Server (Dataverse), Offline (mobile offline), or Both. **Stages explained.** - **Pre-validation** — fires before the platform validates the operation; can be on any rollback. Used for very early gates (license checks, custom auth). - **Pre-operation** — fires after validation but before the DB commit. Most common for mutation logic on the operation's record. - **Post-operation** — fires after commit. Most common for cascading side effects. **Sync vs async.** - **Sync** — runs inline with the user's operation; failures roll back the operation. Maximum 2 seconds before the platform considers it slow. - **Async** — runs in the system job queue; out-of-band from the user. For validation, sync. For external integrations and side effects, async. **Pre-image and post-image.** - A plug-in's `IExecutionContext.PreEntityImages` / `PostEntityImages` give snapshots of the row. - Required for Update steps that need to compare before/after. - Each image has a name (typically `PreImage`, `PostImage`); the plug-in code references by name. - Image attributes specify which columns are included — capturing only what you need. **Secure / unsecure configuration.** - **Unsecure** — string passed to the plug-in via `IPluginExecutionContext`; visible in PRT. - **Secure** — encrypted; visible to the plug-in at runtime but not in the registration UI. Use secure for API keys, credentials, sensitive parameters. Use unsecure for non-sensitive tuning (modes, flags). ## Solution-aware registration Modern practice: 1. Create a solution. 2. Add the plug-in assembly to the solution. 3. Add the steps and images to the solution. 4. Export/import the solution to promote across environments. PRT supports this by tagging registrations with solution membership. Promotion happens through solution import in each environment, not through re-registering with PRT in each. **Modern alternatives.** - **Power Platform Build Tools** (Azure DevOps task / GitHub Action) — automate registration as part of CI/CD pipeline. Reduces manual PRT clicking. - **Solutions via packagedeployer** — package the assembly with metadata; promote together. - **CLI commands** — `pac plugin push` from the Power Platform CLI. For mature teams, PRT is the dev-time tool; promotion is automated. **Common pitfalls.** - **Forgot to add the step to a solution.** Step exists in dev but doesn't promote; downstream environment lacks it. - **Wrong stage chosen.** Pre-validation for logic that should be post-operation; cascading effects don't happen. - **Sync plug-in slow.** Drags user-facing operations; flip to async if validation isn't blocking-critical. - **Image not registered or name mismatch.** Plug-in code refers to `"PreImage"` but registration created `"preimage"`; case-sensitive failure. - **Secure configuration leaked.** Connection strings in unsecure config; visible to anyone with admin access; rotate immediately. - **Plug-in chains causing recursion.** A plug-in updating its own table triggers itself; infinite loop; protect with depth checks (`IExecutionContext.Depth > 1` is a common guard). ## Operational discipline PRT is the daily tool for plug-in developers but should never be the production deployment tool. Build/test with PRT; promote via solutions. The line between "registered in dev" and "registered in prod" should be the solution import pipeline, not someone clicking PRT in prod. --- # The Power Platform admin centre The Power Platform admin centre — what it does, who uses it, and how it relates to the Microsoft 365 and Dynamics 365 admin centres. Source: https://www.solvingdynamics365.com/guides/power-platform-admin-center Section: Power Platform Published: 2026-05-01 The **Power Platform admin centre** at admin.powerplatform.microsoft.com is the central console for managing environments, capacity, governance, DLP, and increasingly Dynamics 365 itself. It sits alongside the Microsoft 365 admin centre and is gradually absorbing functions that used to live in Dynamics 365 admin or LCS. ## Environments The main screen. List of every environment in the tenant with type, region, Dataverse status, version, and storage usage. Drill into one to manage users, security groups, backups, copying, resetting, and platform updates. ## Resources Beyond environments, the admin centre shows tenant-wide resources: **capacity** (Dataverse storage broken into database/file/log), **API call usage**, **AI Builder credits**, **flow runs**, **per-app passes**, and licence assignments. Surface for cost monitoring and capacity planning. ## Analytics Built-in dashboards for environment health, flow usage, app usage, Dataverse storage trends, API call patterns, and user adoption. The kind of thing that catches "we're about to hit the limit" three weeks before disaster. ## Data policies (DLP) Define **DLP policies** that classify connectors as Business, Non-Business, or Blocked, and prohibit flows or apps from mixing classes. Policies apply per environment or globally. Effective DLP prevents accidental exfiltration through a Power Automate flow that posts Dataverse data to a personal Dropbox. ## Help + support Open tickets to Microsoft for Power Platform issues directly from here, including for Dynamics 365 components. ## Settings Tenant-level configuration: AI features, copilot opt-ins, on-premises data gateways, custom connectors, environment groups for fleet management, isolation settings. ## Solutions and apps A managed view of solutions and apps across environments — useful for tracking what's deployed where. Pipelines deploy through here. ## Environment groups A newer feature: group environments and apply a configuration policy (security group, DLP, backup schedule) across the whole group, rather than per environment. Helpful at scale. ## The future Microsoft is consolidating admin experiences: many functions that historically lived in the legacy **Dynamics 365 admin centre** are being deprecated in favour of the Power Platform admin centre. Eventually LCS for F&O will follow suit — already, several F&O lifecycle tasks now appear in this console. ## Permissions Access requires Entra roles — **Power Platform Administrator**, **Dynamics 365 Administrator**, or **Global Administrator**. Day-to-day admin should use scoped roles, not Global Admin, to limit blast radius. --- # The resource hub in Project Operations How resource management works in Dynamics 365 Project Operations — bookable resources, skills, calendars, requests, and the bookings model. Source: https://www.solvingdynamics365.com/guides/resource-hub-in-project-operations Section: Customer Engagement / Project Operations Published: 2026-05-01 For a services business, resourcing is the operational heart of the system — who's free, who has the right skills, who can travel, who's most billable, who's underutilised. Dynamics 365 Project Operations models this through the **resource hub**, a workspace combining resource records, requirements, requests, and bookings. ## Bookable resources A **bookable resource** is anyone or anything that can be scheduled. The basic types: - **User** — an employee mapped to a Dataverse user. - **Contact** — an external contractor. - **Account** — a partner organisation. - **Equipment** — physical equipment that can be assigned to projects. - **Group** — a named team treated as a unit. - **Crew** — a pre-defined multi-resource team. - **Facility** — a meeting room or location. Each bookable resource carries: - **Skills** — what the resource can do (Architect, Project Manager, Senior Developer, Spanish-speaking, AWS-certified, etc.). - **Role** — the primary job role. - **Cost rate** — internal hourly cost. - **Billing rate** — default billable rate. - **Calendar** — working hours, holidays, time off. - **Location** — for travel-time calculation and territory matching. ## Skills and proficiency Skills are configured as a hierarchical taxonomy. Each resource's skills carry **proficiency levels** (1–5 or beginner-to-expert). Matching considers both presence and proficiency — a senior architect role requires Architect skill at proficiency 4+. ## Resource requirements A project task or role identifies a need — "Senior Architect for 2 weeks starting March 1st, 80% utilisation, Spanish-speaking preferred, must be in EU for travel cost". The requirement captures the **specifications**; the matching engine finds candidates. ## The resource hub workspace Inside Project Operations, the resource hub workspace shows: - **Schedule board** — Gantt-style view of every resource's bookings across time, draggable for changes. - **Resource utilisation** — billable vs total time per resource, with red/amber/green health indicators. - **Open requirements** — unfilled resource needs across active projects, with priority and start date. - **Request queue** — formal resource requests awaiting approval and assignment. ## Resource requests and approvals Different organisations use different resourcing flows: - **Direct booking** — project manager picks a resource and books directly. - **Resource request workflow** — project manager submits a request to a resource manager who approves and assigns. - **Hybrid** — direct for low-impact bookings, request flow for high-impact (long duration, senior resources, cross-region travel). Workflows are configurable per organisation. ## Generic resources and substitution Early in a sales pursuit, a deal is staffed with **generic resources** (placeholders representing roles, not named people) so utilisation forecasting works without committing real people prematurely. When the deal closes, generics are replaced with named bookable resources. ## Match-and-suggest Project Operations uses an AI-assisted match function: given a requirement, suggest the best candidates ranked by: - Skill match (presence and proficiency). - Availability (calendar). - Cost (internal cost rate). - Past project performance. - Location. The resource manager reviews suggestions and makes the final pick. ## Bookings A **booking** binds a resource to a project / task for a date range and capacity. Bookings have statuses (soft, hard, committed) — softs are pencilled in; hards are committed and notified. ## Integration with timesheets Once booked, the resource sees the booking in their Project Operations workspace; time entered on the booked project task posts back as actuals against the booking. ## Reporting Utilisation per resource, project, role, region; bench time (resources without bookings); pipeline coverage (do we have enough capacity for the projects we hope to win?). ## Operational reality Resource hub adoption follows resource-manager discipline. Without the resource manager actively running the hub, the system surfaces inaccurate utilisation, requests pile up, and projects start without resourcing certainty. The technology supports the discipline; it doesn't replace it. --- # The saga pattern for cross-system Dynamics 365 transactions How to handle multi-system business transactions that need to be atomic across Dynamics 365 and external systems — orchestration vs choreography, compensation. Source: https://www.solvingdynamics365.com/guides/saga-pattern-for-dynamics-365 Section: Integrations / Architecture patterns Published: 2026-08-07 A business operation often spans multiple systems — placing an order updates Dynamics 365 CRM, debits inventory in F&O, charges the payment processor, ships from the WMS. Each system has its own transaction; there's no global transaction that wraps all four. If one fails partway, the others may have already committed. The **saga pattern** is how to handle this — multi-step business operations that must succeed-as-a-whole-or-rollback-the-side-effects, across systems that don't share a transaction context. **The problem.** Traditional database transactions guarantee ACID — all operations succeed atomically or all fail. Across systems, ACID doesn't work — there's no two-phase commit across Dataverse, F&O, the payment processor, and the WMS. Each commits independently. If step 3 fails after steps 1-2 succeeded, you need to undo steps 1-2 explicitly — a **compensating transaction**. The saga pattern formalises this. **The saga.** A **saga** is a sequence of local transactions: ``` T1 → T2 → T3 → T4 (success path) ``` Each Ti is a transaction in one system. If any Ti fails, **compensating transactions** run in reverse: ``` C1 ← C2 ← C3 (undoing T1, T2, T3 if T4 fails) ``` Where Ci is the operation that undoes Ti's effects. The saga either reaches completion (all forward steps succeed) or fully rolls back (all completed forward steps are compensated). **Two implementation styles.** ## Orchestration A central **saga orchestrator** drives the sequence: ``` Orchestrator → System A: do step 1 System A: done Orchestrator → System B: do step 2 System B: done ... ``` If a step fails, the orchestrator initiates compensation: ``` Step 3 failed Orchestrator → System B: compensate step 2 Orchestrator → System A: compensate step 1 ``` The orchestrator knows the full state and recovery logic. Typically built with Azure Durable Functions, Workflow Designer, or similar tooling. ## Choreography No central orchestrator. Each system publishes events; subsequent systems react. A failure publishes a "rollback" event that triggers compensation in upstream systems. Choreography decouples but distributes the saga logic. Harder to reason about; useful for very loosely-coupled systems. For most Dynamics 365 cross-system business processes, **orchestration** is the cleaner pattern. **Implementing a saga.** **Order placement example.** Steps: 1. **T1**: Create order in Dynamics 365 Sales (status = Draft). 2. **T2**: Reserve inventory in F&O. 3. **T3**: Charge payment via payment processor. 4. **T4**: Update Dynamics 365 order to Confirmed; release to WMS. Compensations: - **C1**: Cancel order in Dynamics 365 (status = Cancelled). - **C2**: Release inventory reservation in F&O. - **C3**: Refund payment via payment processor. Implementation with an orchestrator (Azure Durable Functions): ```csharp // Pseudocode for an orchestrator public async Task PlaceOrderSaga(OrderRequest order) { try { await CreateOrderInD365(order); try { await ReserveInventoryInFnO(order); try { await ChargePayment(order); await ConfirmOrderInD365(order); // Success } catch { await ReleaseInventoryInFnO(order); // C2 throw; } } catch { await CancelOrderInD365(order); // C1 throw; } } catch { // Log; alert; possibly retry throw; } } ``` In real implementations, durable orchestrators (Azure Durable Functions, Power Automate workflows with state, custom workflow engines) handle the retry logic, durability across restarts, and timeout handling. **Compensation pattern principles.** - **Compensations are semantically reversing, not bit-for-bit undo.** Cancelling an order leaves a "Cancelled" record — it's not deleted. The compensation reverses the *business effect*, not the *technical write*. - **Compensations should be idempotent.** A compensation may also fail and retry; running it twice produces the same final state. - **Some operations are not reversible.** Sending an email; debiting a card (sometimes — refunds may have time limits). Build with the trade-off in mind: irreversible operations need extra care upfront. - **Order matters.** Compensations typically run in reverse order; compensating T3 first then T2 is the standard. **Timeouts and SLAs.** Long-running sagas need timeout handling: - Step times out → consider that step failed → trigger compensation. - Whole saga times out → manual intervention; alert operations. **Visibility.** A user placing an order shouldn't wait for the full saga to complete if it takes seconds-to-minutes. The pattern: acknowledge the order is being processed (return quickly); the saga runs asynchronously; the user is notified on success or failure. This UX requires: - Async API design. - Status records the user can check. - Notifications on completion. ## Power Automate as orchestrator Simple sagas can be implemented as Power Automate flows. Limitations: - Long-running flows have time limits. - Compensation logic must be hand-written. - State and visibility through flow run history. For more complex sagas, Azure Durable Functions or custom orchestration is preferable. **When to use the saga pattern.** - **Genuine multi-system business operations** that must be atomic. - **Operations crossing 3+ systems** where partial completion would be invalid. - **Operations with meaningful side effects** that need explicit rollback. **When not.** - **Operations within a single system** — use that system's transaction. - **Truly fire-and-forget** events — if partial completion is acceptable, no saga needed. - **Read-only operations** — no rollback needed. ## Operational reality Sagas add complexity. Justify the pattern by the business requirement; document the compensation logic clearly; test failure paths deliberately (chaos-engineering style); monitor sagas in production. --- # The standard cost worksheet in Business Central How Business Central's standard cost worksheet helps maintain and revalue standard-cost items — annual cost rolls, what-if analysis, and the GL impact. Source: https://www.solvingdynamics365.com/guides/the-standard-cost-worksheet-in-business-central Section: Business Central / Finance & accounting Published: 2026-05-01 For manufacturers and distributors using **standard cost** as their inventory costing method, the **standard cost worksheet** is the tool that maintains and revalues item standards. It supports the annual cost roll, mid-year revaluations, and what-if scenarios — with the GL posting that reconciles inventory value to the new standards. ## Why standard cost Standard cost stabilises inventory valuation independent of fluctuating actual purchase prices. Variances (between standard and actual purchase price, or between standard and actual production cost) post to dedicated variance accounts, making operational deviations visible. Common in manufacturing where production costs should be predictable for pricing and margin analysis, and in distribution for high-volume items where average-cost noise distorts margin. ## The annual cost roll Once a year (typically before the new fiscal year), companies update the standard costs to reflect current input prices, current routing rates, and current overhead allocations. The standard cost worksheet is where this happens: 1. **Suggest Item Standard Cost** — populate the worksheet with current standards for selected items. 2. **Adjust** — calculate new proposed standards based on: - Current vendor purchase prices for raw materials. - Current production BOM and routing costs. - Overhead rate applied to direct costs. 3. **Review** — the worksheet shows old standard, proposed new standard, % change, and the cost components that drove the change. 4. **Approve and post** — apply the new standards. The system updates the item card and posts revaluation journal entries. ## Components of standard cost For a manufactured item, the standard breaks into: - **Material cost** — sum of BOM components at their standard. - **Capacity cost** — sum of routing operations' setup and run time at work-centre rates. - **Subcontracting cost** — for subcontracted operations. - **Capacity overhead** — applied as a rate on capacity time. - **Manufacturing overhead** — applied as a percentage or fixed amount. The worksheet rolls these components for each item, giving full transparency into where cost is changing. ## Revaluation journals When the standard changes, the inventory value at the old standard differs from the inventory value at the new standard. The system calculates the difference per location, per item, per variant, and posts a revaluation journal: - Debit / Credit Inventory (depending on direction of change). - Offset to Revaluation Variance GL account. This brings inventory to the new standard cleanly, with audit-trail journal entries for finance reconciliation. ## What-if analysis The worksheet can be run without posting — calculate proposed standards, review the impact, adjust assumptions (e.g. test what a 5% raw material increase does to finished goods), and discard. Useful for budgeting and pricing simulations. ## Mid-year revaluation For items where the annual roll isn't enough — a major commodity price move, a contract renegotiation, a new supplier — the worksheet supports mid-year revaluation of selected items. Same mechanism, smaller scope. ## The full inventory implication Standard cost only works if **all transactions post at standard**. Sales orders, production orders, transfers, and consumption all use the standard. Variances between standard and actual flow to variance accounts on receipt and on production-order completion. Run **Adjust Cost — Item Entries** before period-end to capture all variances. ## Operational discipline Document the standard cost roll process as an annual procedure — owner, timing, sign-offs, exception handling. Standard-cost discipline is finance and operations together; the worksheet is the bridge. --- # The Success by Design methodology Microsoft's current Dynamics 365 implementation methodology — iterative delivery, fit-to-standard, and the role of Solution Blueprint Reviews. Source: https://www.solvingdynamics365.com/guides/the-success-by-design-methodology Section: Implementation / Methodology Published: 2026-05-01 **Success by Design (SBD)** is Microsoft's published implementation methodology for Dynamics 365, replacing the older waterfall-flavoured Sure Step. It is the framework FastTrack engineers use to engage with qualifying customer projects, and the de-facto standard most experienced partners now follow. Whether or not the project is officially FastTracked, the SBD content is freely available and worth applying. ## Core stance SBD starts from a hard principle: **fit to standard** before fit to custom. Map every customer requirement against what Dynamics 365 does out of the box, configure to close the gaps, customise only when no acceptable standard exists. Customisation cost compounds across upgrades; configuration largely doesn't. ## The phases SBD organises a project into five phases, each with characteristic outcomes: 1. **Initiate** — establish governance, scope, business case, FastTrack relationship. 2. **Implement** — iterative configuration and customisation, with regular alignment checkpoints. Often run in time-boxed sprints. 3. **Prepare** — UAT, training, cutover planning, integration testing at scale. 4. **Operate** — go-live and stabilisation. 5. **Optimize** — post-go-live continuous improvement, including release wave readiness. Each phase is iterative, not gated; the phases overlap and feedback flows between them continuously. ## Solution Blueprint Review (SBR) The headline ritual. Roughly mid-implementation, the partner and customer present a **solution blueprint** to Microsoft FastTrack: the conceptual architecture, customisations planned, integrations, data migration, performance, security, and risks. FastTrack reviews against a published rubric and provides written guidance — go, go-with-changes, or hard concerns to address. Many projects do informal SBRs even outside FastTrack. ## Go-Live Readiness review Closer to deployment, FastTrack (or the partner) runs a readiness review against a checklist: data migration tested, integrations validated at scale, UAT signed off, training delivered, support plan ready, cutover dry-run completed. ## FastTrack A Microsoft program providing free advisory engagement for qualifying customers — typically large or strategic, but eligibility has broadened. FastTrack engineers attend SBRs, review designs, and connect customers to engineering when the platform itself is the blocker. ## Templates and tools Microsoft publishes SBD templates, checklists, and reference architectures on the SBD website and the FastTrack site. They're free. ## What partners do Mature partners blend SBD with their own engagement IP — accelerators, vertical templates, run-book scripts — but the SBD vocabulary, deliverables, and checkpoints are increasingly the industry-common ones. ## Why it works Iterative cadence catches misalignment early. Mid-project SBR forces honest scoping conversations before commitments turn into commitments. Fit-to-standard discipline keeps total cost of ownership bounded. ## Where to go next The methodology it replaced is [Sure Step](https://www.solvingdynamics365.com/guides/the-sure-step-methodology) and the Microsoft programme that applies it is [FastTrack](https://www.solvingdynamics365.com/guides/fasttrack-for-dynamics-365). Its key artefacts have their own guides: [fit-gap analysis](https://www.solvingdynamics365.com/guides/fit-gap-analysis-for-dynamics-365) and [cutover planning](https://www.solvingdynamics365.com/guides/cutover-planning-for-dynamics-365). Whether a partner actually practises it is a question in [choosing a Dynamics 365 partner](https://www.solvingdynamics365.com/guides/choosing-a-dynamics-365-partner). --- # The Sure Step methodology Microsoft's older implementation methodology for Dynamics — the phases, deliverables, and what survived in modern partner practice. Source: https://www.solvingdynamics365.com/guides/the-sure-step-methodology Section: Implementation / Methodology Published: 2026-05-01 **Microsoft Dynamics Sure Step** was the formal implementation methodology Microsoft published for its Dynamics product family from the late 2000s into the mid-2010s. It is no longer actively published — superseded by **Success by Design** and **FastTrack** — but a lot of partner practice still references it, and many long-running customers' methodology documents are descended from Sure Step. ## Why Sure Step existed Before Sure Step, every Microsoft partner had a homegrown method. Quality varied wildly. Sure Step was Microsoft's attempt to give partners a common vocabulary, common deliverables, and a common gating model — so a customer migrating partners or moving from CRM to AX got a recognisable shape. ## The phases Sure Step organised an implementation into six phases: 1. **Diagnostic** — sales-led discovery, business needs, high-level fit-gap, proposal. 2. **Analysis** — detailed requirements, fit-gap workshop, future-state design. 3. **Design** — solution design, integration design, data migration design, technical architecture. 4. **Development** — configuration, custom development (AL/X++/JS), reports, integrations, data migration tools. 5. **Deployment** — UAT, training, cutover preparation, go-live. 6. **Operation** — hypercare, support transition. ## Project types Sure Step recognised that not every engagement needed all six phases at full weight. It offered project type *templates* — Standard, Enterprise, Rapid, Agile, Upgrade — that tuned the depth of each phase to the scope and complexity. ## Deliverables Each phase had a catalogue of mandatory and optional deliverables — fit-gap document, solution design document, training plan, cutover plan, etc. Many partners still use templates descended from these. ## Roles Sure Step named roles — Engagement Manager, Solution Architect, Application Consultant, Technical Consultant, Trainer — that became the partner-staffing vocabulary. ## What worked The phased model, role definitions, and deliverable templates raised the quality floor of Microsoft partner work. It professionalised an industry that had been ad-hoc. ## What didn't Sure Step was waterfall by design. It assumed requirements could be specified up front and translated through a chain of deliverables. As cloud delivery and continuous updates arrived, the rigidity hurt. By 2018 it was visibly out of step with how cloud ERP/CRM implementations actually run. ## The successor **Success by Design** replaced Sure Step in 2019 as Microsoft's published methodology — iterative, fit-to-standard, with continuous checkpoints rather than gated phases. **FastTrack** programs add Microsoft-led oversight for qualifying engagements. ## Practical advice for customers If your partner's proposal language sounds like Sure Step — six phases, "blueprint document", "configuration document" — ask how they incorporate Success by Design's fit-to-standard and Power Platform-first thinking. The names matter less than the actual delivery shape. --- # Time and expense in Dynamics 365 Project Operations How Project Operations captures time and expense — entry modes, approval workflows, billable vs non-billable, expense policy enforcement. Source: https://www.solvingdynamics365.com/guides/project-operations-time-and-expense Section: Customer Engagement / Project Operations Published: 2026-05-01 A services business runs on time. Every billable hour captured, every chargeable expense logged, every approval routed promptly converts into invoiced revenue. **Time and expense** in Project Operations is the operational layer that turns work into cash. The workflow has more friction than the buttons suggest; designing it well is the difference between clean monthly billing and an end-of-month scramble. **Time entry surfaces.** - **Web entry** — the daily or weekly timesheet in the model-driven app. - **Mobile app** — Project Operations mobile for on-the-go entry. - **Microsoft Teams** — embedded time entry in Teams chat or tab. - **Outlook** — convert calendar events to time entries (with Premium). - **API / external** — automated capture from project management tools. The variety matters because different roles enter time differently — consultants in front of a laptop vs technicians on the road. **Time entry record.** - **Project** — what we're billing or charging to. - **Project task** — finer breakdown. - **Role / billing type** — Senior Consultant, Junior Developer (drives rate). - **Hours** — duration. - **Date** — when work happened. - **External description** — visible to customer on invoice. - **Internal description** — for project manager visibility. - **Billable flag** — billable / non-billable / over-cap. ## Billable vs non-billable Not all time is billable. Reasons time is non-billable: - **Internal work** — admin, training, all-hands meetings. - **Pre-sales activity** — work before contract. - **Re-work** — fixing our own mistakes; can't bill the customer. - **Over-cap** — already exceeded the fixed-price budget; remaining work non-billable. - **Non-billable customer** — internal projects. The split matters for utilisation reporting: billable utilisation drives the firm's profitability, non-billable utilisation is overhead. **Approval workflow.** 1. Resource submits the weekly timesheet (or daily depending on cadence). 2. Project manager approves project time. 3. Resource manager approves total time (sanity check on full week). 4. Approved time flows to billing and revenue recognition. Approvals can be sequential or parallel; configuration determines flow. Most organisations use sequential: PM first, RM after. ## Rejections Approver can reject specific entries with feedback: - Time entered on wrong project. - Description insufficient (won't survive customer scrutiny). - Hours implausible (16h day requires justification). Resource adjusts and resubmits. Audit trail captures the back-and-forth. ## Delegations When approvers are out: - **Delegate approval** to a backup. - **Configurable per-user out-of-office** rules. - **Escalation** if not approved within N days. Without delegation, monthly close stalls during PTO. ## Expense entry Similar workflow to time but with additional structure: - **Expense category** — meals, transport, hotel, equipment. - **Date and amount.** - **Currency** — multiple currencies; conversion at entry or at approval. - **Receipt attachment** — photo or PDF. - **Billable to customer** — pass-through or absorb. - **Project / task allocation.** - **Payment method** — corporate card, personal reimbursement, cash. **Expense policy enforcement.** - **Per-category limits** — meals capped at $50/day. - **Per-trip caps** — total expenses for a trip ≤ $X. - **Receipt threshold** — receipts required above $25. - **Pre-approval** for high-value expenses (airfare > $1,000). - **Currency-specific rules** — different limits per region. Violations either block submission or flag for additional approval. ## Corporate card integration For expenses on corporate cards: - Card transactions feed from the bank. - Resource matches transactions to expense entries. - Reconciliation per statement period. - Outstanding (uncategorised) card charges escalated. Without card integration, expense entry duplicates: enter expense, separately reconcile the corporate card statement. Painful. ## Pass-through expenses Expenses billed to the customer: - **Time-and-material contracts** — pass-through at cost or with markup. - **Fixed-price** — expenses usually absorbed. - **Cost-plus** — pass through with markup percentage. Configuration determines invoicing; expense lines on invoices need clear customer-facing descriptions. ## Resource utilisation Time data drives utilisation reporting: - **Billable utilisation** — billable hours / total hours. - **Target utilisation** — what the firm targets per role. - **Variance** — over- or under-utilised resources. A common pattern: senior consultants targeted at 70% billable, managers at 50%. Variance drives staffing decisions. **Integration with billing.** - Approved time and expenses flow to project actuals. - Billing cycle (weekly, monthly) generates invoices from project actuals. - T&M invoices list time and expenses; fixed-price invoices reference milestone amounts. **Common pitfalls.** - **Late time entry.** Resources don't enter weekly; monthly catch-up is unreliable. - **Approval bottlenecks.** PMs delay approval; billing slips. - **Wrong project coding.** Time on project X charged to project Y; revenue and cost misallocated. - **Receipts missing.** Expenses without receipts; can't bill customer. - **Policy violations not enforced.** Expense limits ignored; policy becomes decorative. - **Time entry friction.** Cumbersome UI; resources avoid; data quality degrades. ## Operational rhythm Daily time entry by resources; weekly approval by PMs and RMs; monthly billing cycle pulls approved entries. The discipline matters — late or messy time entry pushes invoicing late, which pushes cash collection late. ## Strategic positioning Time and expense looks operational but is strategic — it's the most direct link between hours worked and revenue collected. Mature services organisations invest heavily in low-friction time entry, fast approval, and clean data; the payback in faster cash and accurate margins is significant. Treating time and expense as a chore — something agents resist and managers neglect — eventually costs the firm material money. --- # Time sheets in Business Central How time sheets work in Business Central — resource time capture, project posting, approval workflow, and integration with payroll. Source: https://www.solvingdynamics365.com/guides/time-sheets-in-business-central Section: Business Central / Service & projects Published: 2026-05-01 **Time sheets** in Business Central let resources (typically employees and contractors) record the hours they spend on jobs (projects), service orders, or general activities. The data feeds project billing, project profitability, resource utilisation analysis, and — through integration — payroll. For services-led businesses, time sheets are the linchpin between work done and revenue / cost recognised. ## The setup Each **resource** in Business Central represents a person, equipment item, or generic capacity unit. Resources have unit costs (the internal hourly cost) and unit prices (the billable hourly rate, defaulted to the job line). For time sheet functionality, the resource needs: - A **Time Sheet Owner User** — the user who fills in the time sheet (typically the resource themselves; can be a supervisor for shared admins). - An **Approver User** — the user who approves submitted time sheets. ## The time sheet A weekly grid (or other period configured) where the resource enters hours per day against jobs, job tasks, service orders, or generic activity types (admin, training, sick leave). Each line captures: - **Type** — Resource (general), Job, Service Order, Assembly Order, Absence. - **Object reference** — which job + job task, which service order, etc. - **Description** — what was done. - **Hours per day** — across the week. - **Status** — Open, Submitted, Approved, Rejected. **The flow.** 1. **Resource fills in** the time sheet during the week or at end of week. 2. **Submit** — the resource finalises and submits. Status moves to Submitted; further editing is blocked unless rejected. 3. **Approve / Reject** — the approver reviews. Approved lines move to Approved status. Rejected lines come back to the resource with comments. 4. **Posted** — approved time becomes: - **Job ledger entries** if associated with a job, contributing cost (cost rate × hours) and billable revenue (price × hours) per the job's billable plan. - **Service ledger entries** if associated with a service order. - **Resource ledger entries** for general resource work. ## Integration with billing For billable jobs, approved hours feed into the **Job Sales Invoice** generation process. Hours billed are subtracted from the available billable plan, and the invoice draft shows time entries grouped per the configured billing rule. ## Integration with payroll Time sheet hours can feed payroll systems via Power Automate flows, the API, or a partner connector. Common patterns: - Hours per pay period exported to the payroll provider (Visma, Hogia, Lønn360, ADP, Paylocity, etc.). - Differentiated rates — regular, overtime, weekend, holiday — captured via line type or absence type. - Approval status as the trigger for payroll inclusion. ## Mobile Time sheets are usable from the Business Central mobile experience for field workers and consultants who don't sit at a desktop. ## Workflow Built-in workflow can route time-sheet approvals to a hierarchical chain — supervisor, then project manager, then department head — with escalation on delay. ## Reporting Standard reports cover: - Resource utilisation — billable hours vs total hours. - Job profitability — actual cost vs billed revenue. - Time sheet status — open, submitted, awaiting approval. - Absence summaries. **Common pitfalls.** - **No time sheet discipline** — resources fill in at the end of the month, guessing what they did. Configure weekly approval cycles and enforce them. - **Missing approver setup** — submitted time sheets sit indefinitely. Audit the approver setup quarterly. - **Incomplete cost rates** — postings reflect partial cost when a resource's rate is zero. Maintain rates rigorously. ## When BC's time sheets aren't enough Heavy services-led organisations with complex resourcing, multi-stage approvals across project managers and account managers, and sophisticated billing scenarios often outgrow BC's time sheets and move to **Project Operations** for a richer model. --- # Tracing and logging in Dataverse How to instrument Dataverse plug-ins and flows with tracing and logging — the trace service, Application Insights integration. Source: https://www.solvingdynamics365.com/guides/dataverse-tracing-and-logging Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Server-side code in Dataverse — plug-ins, custom workflows, low-code plug-ins — runs in a sandboxed environment with limited debugger access in production. The compensation is **tracing** and **logging**: instrument your code so issues are diagnosable post-hoc without reproducing them in dev. Mature teams treat instrumentation as a first-class engineering concern. ## The trace service Plug-ins receive an `ITracingService` from the execution context: ```csharp var tracingService = serviceProvider.GetService(); tracingService.Trace("Plug-in started for entity {0}", entity.LogicalName); ``` Each Trace call writes a line; traces accumulate per plug-in execution. **Where traces go.** - **Plug-in trace log table** in Dataverse — visible in admin UI. - **Available for a configurable retention period** — typically days to weeks. - **Per-execution** — one trace log record per plug-in invocation. For most diagnostic needs, this is sufficient. ## Application Insights integration For deeper observability: - Configure App Insights for the Dataverse environment. - Traces flow to App Insights additionally. - Rich query, alerting, dashboarding. App Insights is the modern, recommended approach for production Dataverse. **What to trace.** - **Method entry/exit** — for execution flow. - **Key decision points** — branches, conditions taken. - **External API calls** — request and response (minus sensitive). - **Performance markers** — operation timing. - **Errors and exceptions** — full context. A balanced level — neither too sparse (can't diagnose) nor too verbose (can't see signal in noise). **What NOT to trace.** - **Passwords, API keys, tokens.** - **PII** — full names, emails, identifiers (without business need). - **Credit card data** — PCI violation. - **Health data** — HIPAA violation. Use redaction patterns: trace `customer ID redacted`, not `customer ID 12345`. ## Structured tracing Better than free-text: ```csharp tracingService.Trace("OperationName: {0}, RecordId: {1}, Duration: {2}ms", operation, recordId, duration); ``` Structured patterns enable easier parsing and querying downstream. ## Tracing in low-code plug-ins Power Fx in low-code plug-ins: - `Trace()` function adds traces. - Log to standard plug-in trace. - Same access patterns. **Tracing in flows.** - Each action's input/output captured automatically. - Loop iterations tracked. - Failures detailed. Flow run history is the trace; no explicit Trace calls typically needed for basic flows. For complex flows, use Compose actions to log specific values. **Performance impact.** - Tracing has overhead — string formatting, write to memory. - For high-volume code paths, minimise traces. - Don't trace in tight loops; aggregate and trace once. A plug-in tracing 100 lines per record × 10K records = 1M trace lines = slow. ## Trace levels Not built into Dataverse directly, but pattern: - **Error** — failure. - **Warning** — concerning but recoverable. - **Info** — major checkpoints. - **Debug** — verbose flow. Configurable levels — Production at Warning+, Sandbox at Debug. ## Application Insights query With App Insights, you query traces in Kusto Query Language (KQL): ```kql traces | where customDimensions.PluginName == "MyPlugin" | where timestamp > ago(1h) | order by timestamp desc ``` Rich querying replaces digging through individual plug-in trace records. ## Correlation IDs Trace correlation across systems: - A request entering Dataverse gets a correlation ID. - Trace lines include it. - External calls pass the ID. - Receiver logs include it. End-to-end traceability across system boundaries. ## Audit vs trace Different: - **Audit** — business-relevant change records (who changed what when); for compliance. - **Trace** — technical execution information; for diagnostics. Both valuable; don't conflate. **Sensitive data handling.** - **Redact before tracing** — `SSN: ***-**-1234`. - **Hash identifiers** — for correlation without exposure. - **Avoid full row dumps** — trace specific fields. **Common pitfalls.** - **No tracing.** First production issue; nothing to look at. - **Verbose tracing.** Performance hit; noise in logs. - **Sensitive data leaked.** Compliance issue. - **Trace formatting expensive.** Even if log not written, string formatting cost. - **Trace ignored.** Logs exist but nobody looks; instrumentation wasted. **Operational rhythm.** - **Daily** — review error traces. - **Per incident** — deep dive on relevant traces. - **Weekly** — trace pattern analysis (top errors, slow operations). - **Monthly** — review what's traced; adjust verbosity. ## Strategic positioning Tracing is the cheap insurance policy of server-side code. Investment in good instrumentation pays back the first time something goes wrong in production. App Insights elevates Dataverse to enterprise-grade observability. For any production deployment of meaningful scale, instrumenting plug-ins and flows is non-negotiable engineering practice. Tracing isn't optional; it's foundational. The teams that take it seriously have boring incident reviews; the teams that don't have long, painful ones. --- # Tracking dimensions in Dynamics 365 Supply Chain How batch, serial, owner, and licence plate tracking work in F&O — operational impact, traceability, and the trade-offs of each. Source: https://www.solvingdynamics365.com/guides/tracking-dimensions-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 Of the inventory dimensions in Dynamics 365 Supply Chain Management, **tracking dimensions** are the ones that give individual units their distinct identity. Configuring them well — batch on food and pharma, serial on high-value items, licence plate in advanced warehousing — supports the traceability and operational requirements without imposing unnecessary overhead. ## Batch tracking A **batch** (or *lot*) groups units produced or received together — same production run, same supplier delivery, same harvest. Each batch has: - **Batch number** — unique identifier. - **Manufacturing date** — when produced. - **Expiry date** — for perishable items. - **Best-before date** — for food / pharma. - **Batch attributes** — fat %, alcohol %, brix, pH, etc. for process industries. - **Inventory status** — Available, Quarantined, etc. Picking can be **FEFO** (first-expired-first-out) to prioritise oldest stock; reservations can target specific batches. Traceability reports show full history per batch — where it came from, what was made from it, where each unit went. Used in: food, beverage, pharma, chemicals, cosmetics, building materials, paint, lubricants. ## Serial tracking A **serial number** uniquely identifies each individual unit. Each serial has: - **Serial number** — unique identifier. - **Manufacturing date** — when produced. - **Warranty start / end dates** — for service tracking. - **Inventory status**. Every transaction touching the unit references the serial: receipt, transfer, pick, ship, return. The result is full chain-of-custody — given any serial, you can trace exactly where it's been and what's happened to it. Serial tracking has substantial overhead — every scan, every receipt, every pick requires the serial. Reserved for items where it justifies the cost: - High-value items (industrial equipment, vehicles, jewellery). - Compliance-regulated items (medical devices, aerospace components, certain electronics). - Items with warranty obligations. - Items where authenticity matters (luxury goods). ## Owner tracking (consignment) **Owner** is a dimension that tracks who actually owns the inventory — useful for **consignment** scenarios where inventory is physically held but not yet sold: - **Vendor-managed inventory (VMI)** — supplier owns the stock until you consume it. - **Consignment to customer** — you ship stock to a customer's site but it remains yours until the customer uses it. - **Multi-owner shared warehousing** — 3PL operations where one warehouse holds inventory for multiple owners. Owner tracking lets the warehouse manage physical inventory while accounting recognises legal ownership correctly. ## Licence plate (LP) A **licence plate** is a label identifying a physical unit of multiple items — a pallet, a tote, a carton, a shipping container. Operations on the LP cascade to its contents: scan one LP, move 50 items in one action. Licence plates are essential in advanced WMS scenarios: - Receiving where supplier consolidates many items on one pallet. - Cross-docking where shipments transit a warehouse without put-away. - Bulk picking where one LP holds an entire customer order. LPs can nest — a pallet LP contains carton LPs that contain item-level LPs. Operations at any level cascade to children. ## Combining tracking dimensions Items can have multiple tracking dimensions active simultaneously: batch + serial (medical devices in batches with each unit serialised), batch + owner (consignment of specific batches), serial + licence plate (serialised items consolidated on a pallet for shipping). ## Item tracking setup Per item, configure: - **Which tracking dimensions are active.** - **Capture-required setup** — must serial be entered at receipt? At pick? At shipment? At return? - **Auto-generation rules** — serial / batch numbers generated automatically per pattern, or required to enter manually. **Operational implications.** - **Receipt** — more dimensions = slower receipt. Mobile scanners help. - **Shipping** — tracked items require scan validation at pick / pack / load. - **Quality / quarantine** — entire batches can be quarantined and released atomically. - **Recall** — given a problem batch, the system identifies every customer who received it. - **Cost** — tracked-dimension granularity affects cost accounting precision. ## Operational reality Activate tracking only where the value justifies. A consumer-goods distributor with simple SKUs doesn't need serial tracking; an industrial-equipment distributor probably does. Audit per item category. --- # Trade allowance and rebate management in Dynamics 365 Supply Chain How trade allowance and rebate programs work in Dynamics 365 SCM — funds, deals, accruals, claims, and the integration with sales and finance. Source: https://www.solvingdynamics365.com/guides/trade-allowance-and-rebates-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 For wholesale distributors, consumer-goods manufacturers, and retailers, **trade allowances and rebates** are a large slice of the commercial relationship — supplier-funded promotions, volume rebates, retroactive discounts, marketing allowances, slotting fees. Done well, they're a strategic lever; done badly, they're an unreconciled mess that eats margin. Dynamics 365 Supply Chain Management ships a **Trade Allowance Management** module to keep them visible. ## The conceptual model A trade-allowance program is: - A **fund** — money the supplier is providing for a defined purpose (e.g. Q3 promotional support, volume rebate on certain SKUs). - A **trade allowance agreement** — the rules: who's eligible (customers, customer hierarchy), what's covered (items, item categories), what's earned (% of sales, fixed amount, volume bands), and what's required to earn it (proof-of-performance, sales volume threshold). - **Accruals** — the periodic recording of *earned but unpaid* allowance against transactions as they happen. - **Claims** — the formal request from the customer for payment of the accrued amount, with supporting evidence. - **Settlements** — the actual payment (or credit memo) that closes the claim. ## Funds A **fund** holds the budgeted amount the supplier has allocated. Funds can be customer-specific, customer-group-specific, or product-specific. They have validity periods and status (open, closed). Spending is tracked against the fund, so the supplier sees committed vs available. ## Agreements A **trade allowance agreement** binds a fund to specific customers and products with the calculation rule. Examples: - Volume rebate: "Customer X earns 2% on sales of Item Category Y exceeding 100,000 units in Q3". - Promotional allowance: "Customer X receives 5,000 EUR for end-cap display of Item Z in March". - Slotting fee: "Customer X receives a one-time 25,000 EUR for new product listing". Multiple agreements can run in parallel for the same customer. ## Accruals As sales transactions happen, the system **accrues** the relevant trade allowance. A sale of 1,000 units of Item Y to Customer X automatically accrues 2% × revenue against the volume rebate agreement (if Customer X has earned enough). Accruals post to a **trade allowance accrual GL account** — typically a contra-revenue or expense-side balance — recognising the liability before the customer claims. ## Claims processing When the customer claims (typically monthly or quarterly), the supplier reviews the claim against the accrued amount, validates proof-of-performance, and approves a settlement. Settlement posts a credit memo to the customer, debits the accrual account, and clears the liability. ## Integration with sales Pricing on sales orders can reflect trade-allowance-derived discounts at posting (immediate visibility) or accrue separately for later settlement. Both patterns are supported. ## Reporting Standard reports show: - Funds: budgeted vs accrued vs settled vs available. - Customer scorecards: trade-allowance earnings, ROI of promotional spend. - Accrued liability by customer for finance reconciliation. - Aged claims awaiting settlement. ## Limits The standard module covers most distributor and CPG patterns. For deeply retailer-specific allowances (chargebacks, deductions, complex deal structures across many channels), customers often layer a specialist trade-promotion management (TPM) tool. ## Operational reality The biggest trap is not adopting accruals systematically — running trade allowances as ad-hoc credit memos at quarter-end. Accrue at the transaction, and the management view is real-time. --- # Training strategies for Dynamics 365 rollouts Designing effective training for a Dynamics 365 implementation — formats, audiences, timing, materials, and the role of Task Recorder and Copilot. Source: https://www.solvingdynamics365.com/guides/training-strategies-for-dynamics-365-rollouts Section: Implementation / Project execution Published: 2026-05-01 Training delivers the value of an implementation to the people who actually use the system. Underinvest and adoption stalls. Overinvest in the wrong format and the budget evaporates. A few principles separate the training programs that work from the ones that don't. ## Roles, not modules Build training around what each role *does* in their day, end to end. The AR clerk's training is not "Customer module" — it's "raise an invoice, post a credit memo, send a reminder, run an ageing report, handle a dispute, reconcile". Cross-functional and integrated. ## Layered formats A complete training program usually combines: - **Live, role-based sessions** — the core, delivered in person or remote, with practical exercises. Two to four hours per role. - **Train-the-trainer for champions** — go deeper, expose configuration rationale. - **Quick reference cards** — one page per task, laminated for the desk. Fundamental for keystrokes-and-clicks workflows like point-of-sale or warehouse scanning. - **Recorded videos** — for repeat reference and for new hires after go-live. - **A searchable knowledge base** — internal SharePoint or Confluence, owned by the customer. - **Floor walking** — physical or virtual presence in the first week, sitting with users. Avoid an over-reliance on long recorded courses. They get watched once, not referenced. ## Timing Schedule formal training **two to three weeks before go-live**. Earlier means users forget; later means there's no time to absorb. Champions get earlier exposure (during UAT). ## Realistic data Train on **the customer's actual data**, not Cronus or Adventure Works. Customers cannot generalise from demo data; familiar item codes, customer names, and chart of accounts is what makes training stick. ## Task Recorder (F&O) Microsoft's **Task Recorder** captures user actions in F&O as a structured step list with screenshots, replayable in the Help pane inside the application. Use it to build organisation-specific guidance that appears *in context* on the page. ## Help in BC Business Central supports per-tenant **tooltips** and **page help** that override or supplement Microsoft's defaults. Use them for the customer's specific tweaks and policies. ## Copilot Increasingly, Dynamics 365's embedded copilots answer "how do I" questions in natural language. Don't replace formal training, but they reduce reliance on memorised screen flow. ## Measure Track training attendance, post-training assessment scores, and a follow-up survey two weeks after go-live. Use the data to plan refresher sessions. ## Continuing training New hires, role changes, new features in each release wave — training is not a one-off. Schedule a quarterly cadence for the first year, dropping to ad-hoc afterwards. ## Don't outsource it entirely Partner-led training is fine for the core curriculum; the customer's own people deliver the company-specific overlay better than any external consultant. --- # Transportation management in Dynamics 365 SCM How the Transportation Management module in F&O handles rates, routing, loads, freight reconciliation, and where it stops being enough for serious shippers. Source: https://www.solvingdynamics365.com/guides/transportation-management-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 The **Transportation Management (TMS)** module in Dynamics 365 SCM extends order management into the freight world — rating shipments, building loads, planning routes, generating shipping documents, and reconciling freight invoices. It's a meaningful capability for mid-market shippers, with clear ceilings beyond which dedicated TMS platforms (BluJay, MercuryGate, Manhattan, Oracle TMS) start to win. **Core entities.** - **Carriers** — the transportation providers. Each carrier has services (LTL, FTL, parcel) and rate engines. - **Routes** — origin-destination definitions; can include intermediate stops. - **Loads** — the container holding shipped goods, with a carrier, a route, and load lines from one or more orders. - **Shipments** — the warehouse-side outbound (already in WMS); loads aggregate one or more shipments. - **Rate engines** — code that computes freight cost for a load. - **Rate routes / Rate masters** — rate cards per carrier per route. - **Freight bills** — what the carrier billed; reconciled against the system's rated cost. ## Rating Two types: - **Spot rates** — manual entry for ad-hoc shipments. - **Contract rates** — uploaded rate cards (per weight, per mile, per pallet, per container). Rate engine extensibility means partner ISVs add specific carrier rate APIs (FedEx, UPS, DHL) for real-time quotes. Without an API, you upload tariff sheets and the engine looks up rates. ## Load building The **Load Planning Workbench** lets a planner consolidate open shipments into loads: - Filter by ship-from, ship-to, carrier, equipment type. - Assign shipments to loads based on weight, volume, route compatibility. - Calculate utilisation (% of vehicle capacity). - Multi-stop routing (truck visits two customers on one trip). For high-volume operations, load building is the planner's daily task; for low-volume, it's automated by rules. ## Routing Routes can be: - **Direct** — origin to destination, one carrier. - **Multi-leg** — pickup, hub consolidation, line-haul, last-mile delivery. - **Pool point** — collected at a pool point and forwarded. Multi-leg routing supports international shipments crossing border with brokerage steps. ## Shipping documents TMS generates: - **Bill of lading (BOL)** — the carrier's contract. - **Packing list** — what's in the shipment. - **Commercial invoice** — for international. - **Carrier-specific labels** — UPS, FedEx, DHL labels via integration. - **Custom documents** — country-specific export paperwork. For parcel carriers, the workflow ends with a label printed at the pack station; for LTL/FTL, paperwork rides with the driver. ## Freight reconciliation Carrier invoices arrive after the shipment. The reconciliation workflow: 1. Freight invoice imported (EDI, file, manual entry). 2. System matches invoice line to load and rated cost. 3. Variances flagged (rate difference, weight reweigh, accessorials). 4. Approved invoices post to AP as cost; variances post to a freight variance account or get disputed. Done right, freight reconciliation recovers material savings; done poorly, freight overcharges sneak through. ## Hazardous goods Items flagged as hazmat carry **hazmat group** codes. TMS enforces: - Carrier eligibility (not all carriers handle hazmat). - Documentation generation (hazmat declarations). - Mode restrictions (some hazmat can't fly). ## Container management For ocean and rail freight, **container** tracking integrates: - Container booking against carriers. - Stowage planning. - Customs documentation per container. ## Integration with WMS Once a load is planned, the warehouse pick logic respects load assignment — pickers pick to load destination, pack to load. The handover is bidirectional: WMS reports actual ship weight back, which can trigger reweigh adjustments in TMS. **Where TMS in F&O stops being enough.** - **Complex multi-modal optimisation** — sophisticated TMS platforms run mathematical optimisation across thousands of shipments daily; F&O's load building is rule-based. - **Spot market integration** — real-time spot quotes across freight marketplaces; F&O doesn't natively integrate. - **Visibility services** — Project44, FourKites integration for in-transit tracking; F&O integrates via partner connectors. - **Yard management** — F&O has basic yard features; deep yard ops typically use a dedicated YMS. **Common pitfalls.** - **Rate cards out of date.** Carriers renegotiate; rate cards need to follow. A monthly rate refresh cadence avoids surprise variances. - **Accessorials not modelled.** Detention, fuel surcharges, residential surcharges accumulate; if not in the rate engine, they appear as variances. - **Load planning skipped.** Planners ignore load building, just dispatch each shipment individually; missed consolidation savings. - **No freight invoice reconciliation.** Pay-on-receipt; carriers overbill systematically when they sense no scrutiny. - **Carrier API integration cost underestimated.** Integration with FedEx, UPS, DHL is ongoing work as APIs change. ## Decision F&O TMS is well-suited to mid-market shippers with consistent lanes and moderate carrier counts. Beyond that, a dedicated TMS connected to F&O via integration delivers more capability than trying to push F&O TMS past its design envelope. --- # Travel time configuration in Field Service How Dynamics 365 Field Service calculates and respects travel time — Bing Maps integration, routing constraints, and the impact on scheduling. Source: https://www.solvingdynamics365.com/guides/travel-time-configuration-in-field-service Section: Customer Engagement / Field Service Published: 2026-05-01 For service organisations dispatching technicians, **travel time** is often a quarter to a third of the working day. Underestimating it causes missed appointments and angry customers; overestimating it wastes capacity. Dynamics 365 Field Service builds travel time into the scheduling and dispatch model — but the configuration controls how realistic the numbers actually are. ## Source of travel times Field Service uses **Bing Maps** (or alternative map providers, configurable) to compute travel time between locations: - Resource start location → first booking location. - Booking → next booking. - Last booking → resource end location. Travel time is a function of: - **Distance** (straight-line vs road network). - **Mode** (driving, walking, public transit). - **Time of day** — Bing Maps factors in traffic patterns. - **Day of week** — weekday rush hour differs from weekend. For non-real-time scheduling (planning tomorrow), historical traffic patterns are used. For real-time re-optimisation (during the day), live traffic data refines the estimate. ## Configuration Each **resource** has: - **Start location** — where they begin the day (typically home address; can be the depot). - **End location** — where they end the day (often the same as start). - **Travel mode** — Driving (default), Walking, Public Transit, Cycling. - **Travel charges** — billable hourly cost during travel (typically reduced from on-site billing rate). ## Booking-level travel Each booking has a separate **travel time** field showing the calculated travel from the previous booking (or start location). The schedule board displays travel as a grey block before each booking, visually showing how much of the day is on the road vs on customer site. ## Constraints Travel-aware scheduling respects: - **Maximum travel time per booking** — refuse to schedule a job that would require more than 90 minutes of travel. - **Maximum daily travel** — cap the total travel across all bookings in a day. - **Resource territory boundaries** — keep bookings within the resource's geographic area. - **Optimisation weights** — minimise travel as a scheduling objective (see the Resource Scheduling Optimization guide). ## Cross-day travel For multi-day projects (e.g. installation jobs spanning several days at the same customer), the system models overnight stays and morning return travel rather than calculating one massive travel time. Configure overnight policies per resource. ## Real-time updates As the day unfolds, actual travel times diverge from planned. The mobile app captures real-time positions; the schedule board updates predicted arrival times for downstream bookings. Customers can receive **arrival window notifications** based on updated estimates. ## Travel charges Many service organisations charge customers for travel time at a different rate from on-site work. The configuration lets travel post to a separate revenue line (or be embedded in the on-site charge). Per-customer overrides handle contracts that include or exclude travel charging. ## Alternative routing providers For customers needing more sophisticated routing (commercial vehicle routing with weight/dimension constraints, hazmat routing, multi-stop optimisation beyond what Bing offers), integration with **commercial-vehicle-routing services** is available through partner ISVs. **Common pitfalls.** - **No resource start location configured** — defaults to a generic point and produces wild travel estimates. - **Outdated location data on customers** — drives wrong travel calculations. Validate customer addresses periodically. - **Travel as billable / non-billable confusion** — be explicit per contract whether the customer pays for travel. - **Cross-region routing** — Bing maps quality varies by region; verify for less-mapped countries. ## Operational reality Travel time accuracy directly drives schedule reliability. Spending the configuration time on it returns hours of dispatcher work per week and reduces customer "where's my technician" calls. --- # Unified commerce architecture on Dynamics 365 What unified commerce actually means on Dynamics 365 — one product master, one pricing engine, one order, one customer across store, web, and call centre. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-retail-unified-commerce-architecture Section: Industries / Retail Published: 2026-09-02 "Omnichannel" meant a retailer had a store system, a web shop, and a call centre, and had built enough integration between them that a customer could mostly move across. "Unified commerce" means there is one system underneath — one product master, one pricing engine, one order object, one customer record — and the channels are front ends. The difference is not marketing; it decides whether cross-channel returns, real-time inventory, and consistent promotions are configuration or a multi-year integration programme. This guide sets out how **Dynamics 365 Commerce** delivers the unified shape, and where the edges are. ## The four things that must be single **One product master.** Commerce products live in headquarters (the Finance and Supply Chain Management product master) with retail-specific enrichment — categories, attributes, images, variants — and are released to channels through assortments. The web shop, the POS, and the call centre read the same product. There is no catalogue sync because there is no second catalogue. **One pricing engine.** Trade agreements, price groups, discounts, and promotions are evaluated by the same pricing engine in every channel, running on the Commerce Scale Unit. A promotion set up once applies at the till, in the basket online, and on a call-centre order, subject to channel eligibility. Microsoft has been extending this same engine toward Supply Chain Management sales orders under the *unified pricing management* feature, which is the direction of travel for B2B retailers who also sell through account managers. **One order.** Whether it was created at a register, on the storefront, or in the call centre, the order is a headquarters sales order with an originating channel. Fulfilment, returns, and customer history operate on that object. This is the property that makes "return anywhere" and "buy online, collect in store" straightforward. **One customer.** Customers are headquarters customer records, created asynchronously from any channel and consolidated in the global address book. Loyalty, purchase history, and preferences attach to that record. If a proposed architecture breaks any of these four — a separate PIM that channels read from independently, a storefront with its own promotions engine, an order management layer that owns orders and syncs them down — it is integrated commerce with extra steps. Sometimes that is the right call, but it should be a conscious one. ## The runtime shape Headquarters holds master data and finance. The **Commerce Scale Unit** (CSU) runs the channel-facing services: pricing, cart, order creation, inventory lookup, customer lookup. Every channel is a client of the CSU — the Store Commerce app, the first-party e-commerce site, the call-centre order-entry forms, and any custom client built on the Commerce SDK. That client-of-CSU model is what makes headless commerce a first-class option rather than a workaround. A retailer can run a React storefront on Vercel, a native mobile app, and a marketplace connector, all calling the same Retail Server APIs, with cart and pricing behaving identically. The first-party storefront is the quickest path when its templating is good enough; headless is the path when brand experience or existing front-end investment matters more. ## Where Customer Insights fits Unified commerce gives you one *transactional* customer. It does not give you the marketing view: web behaviour, email engagement, survey responses, the loyalty app. **Customer Insights – Data** stitches those sources into a unified profile with segments and measures, and **Customer Insights – Journeys** acts on them. The clean architecture is Commerce as the system of record for identity and transactions, Customer Insights as the analytical and activation layer, and a deliberate decision about which attributes flow back into Commerce for use at the till (clienteling) and which stay in the marketing stack. The failure mode is running loyalty tiers in Commerce, segments in Customer Insights, and a promotion engine in a third-party email tool, then discovering that three systems disagree about who is a gold customer. ## Inventory across channels Unified inventory is the piece that requires the most operational discipline. Commerce reads on-hand from headquarters and from channel databases; the **Inventory Visibility** add-in for Supply Chain Management provides the near-real-time, cross-channel picture that ship-from-store and endless aisle depend on. Without accurate store counts, unified commerce promises availability the store cannot honour. See [endless aisle](https://www.solvingdynamics365.com/guides/dynamics-365-for-retail-endless-aisle) and [click-and-collect](https://www.solvingdynamics365.com/guides/dynamics-365-for-retail-click-and-collect) for the fulfilment side. ## What still needs partners Even on a genuinely unified platform, expect partners for payments beyond the reference Adyen connector, tax engines for complex US sales-tax estates, fiscalisation outside the countries Microsoft's framework covers, marketplace connectors, advanced search and merchandising on the storefront, and returns-management or fraud-screening specialisms. None of those break the unified shape as long as they act as services to the CSU rather than as competing systems of record. ## Business Central plus Shopify For SMB retailers, **Business Central** with the Shopify connector and a partner POS is a good stack, but it is integrated commerce. Shopify owns the online product presentation, its own discounts, and the online order until it syncs; the POS ISV owns store transactions; BC owns inventory and finance. Cross-channel returns, consistent promotions, and unified customer history require deliberate integration work, and some of it will not be possible. That is acceptable for one to a few dozen stores with modest omnichannel ambitions. When the requirements list starts reading like the four "singles" above, the honest answer is Commerce, and the [retail overview](https://www.solvingdynamics365.com/guides/dynamics-365-for-retail) covers that trade-off. ## Decision test Ask one question of every component in the proposed architecture: which system is the source of truth for products, prices, orders, and customers, and does this component read from it or compete with it? If the answer is "compete", either the component goes or unified commerce is not what is being built. --- # Upgrading AL code across Business Central versions How to keep AL extensions working through Business Central's twice-yearly release waves — breaking changes, deprecations, and code migration patterns. Source: https://www.solvingdynamics365.com/guides/upgrading-al-code-across-bc-versions Section: Business Central / AL & development Published: 2026-05-01 Business Central updates twice a year, and the platform underneath an AL extension changes with each wave. Most extensions survive without intervention, but the ones that don't fail spectacularly — sometimes silently. The strategy is to test early, fix deprecations as they're announced, and never skip a wave on production code. ## What can break Microsoft does not change its own database table fields, IDs, or method signatures lightly, but it does: - Mark fields and methods as **obsolete** with the `[Obsolete(...)]` attribute, ahead of removing them. Obsolete code still compiles but emits warnings. - Remove fields and methods that have been obsolete for at least two waves. - Change the **default implementation** of a method (signature stays the same, behaviour changes). - Add fields to standard tables — usually safe, unless your extension assumed a fixed schema. - Change the **runtime version** required by the platform, forcing extensions to bump their `runtime` in `app.json`. ## The compatibility commitment Microsoft documents breaking changes per wave in the *Application BreakingChanges.md* file in the BC GitHub repo. Any field, method, or behaviour deprecation goes through a published warning period before removal — extensions that act on the warnings stay safe. **The upgrade workflow.** 1. **Six weeks before GA**, install the preview build into a sandbox. 2. **Pull the new symbols** in VS Code (`AL: Download symbols`). The compiler now sees the new platform. 3. **Build**. Warnings flag deprecated symbols; errors flag genuinely broken code. 4. **Fix and refactor** — replace obsolete APIs with current ones, adjust to behavioural changes. 5. **Run tests** (you do have an automated AL test suite; see the test framework guide). 6. **Republish** to the sandbox, then to UAT, then to production along with the platform update. ## Data upgrade codeunits Schema-changing extensions need **upgrade codeunits** that migrate stored data when the new version installs — e.g. moving values from a removed field to a replacement. Microsoft's documentation has the boilerplate. ## Per-tenant extensions (PTEs) PTEs are the most upgrade-fragile because Microsoft does not pre-test them. Treat every wave as a maintenance task on every PTE. ## AppSource apps Microsoft runs your AppSource app against preview builds and notifies you if it fails. You still have to fix it, but the surface signal is automatic. ## Don't skip waves Skipping makes the next upgrade worse, not better. ## Where to go next The cadence you are upgrading against is [release waves](https://www.solvingdynamics365.com/guides/business-central-release-waves); the diagnostics you will read are in [AL compiler errors](https://www.solvingdynamics365.com/guides/al-compiler-errors-in-business-central). Tests that catch behavioural change are [the AL test framework](https://www.solvingdynamics365.com/guides/al-test-framework), automation is [AL-Go CI/CD](https://www.solvingdynamics365.com/guides/business-central-cicd-with-al-go), and the safety net AppSource adds is in [per-tenant extensions vs AppSource](https://www.solvingdynamics365.com/guides/per-tenant-extensions-vs-appsource). ### Frequently asked questions **What can break an AL extension on a release wave?** Fields and methods removed after at least two waves of obsolete warnings, changed default implementations behind unchanged signatures, new fields on standard tables that break fixed-schema assumptions, and runtime version bumps that force an app.json change. **How do I test an extension against the next version?** About six weeks before general availability, install the preview build in a sandbox, download the new symbols in VS Code, build and act on obsolete warnings, run the AL test suite, then republish to sandbox, UAT, and production alongside the platform update. **Where does Microsoft publish breaking changes?** In the Application BreakingChanges.md file in the Business Central GitHub repository. Every deprecation goes through a published warning period before removal. **Why are per-tenant extensions the most fragile?** Microsoft does not pre-test them, unlike AppSource apps which are run against preview builds automatically. Treat every wave as a maintenance task on every per-tenant extension, and never skip a wave. --- # User acceptance testing for Dynamics 365 Running an effective UAT cycle on Dynamics 365 — scenarios, environment, exit criteria, and what to test that's actually worth testing. Source: https://www.solvingdynamics365.com/guides/user-acceptance-testing-for-dynamics-365 Section: Implementation / Project execution Published: 2026-05-01 [User Acceptance Testing (UAT)](https://www.solvingdynamics365.com/glossary/uat) is the customer's chance to validate that Dynamics 365 — configured, customised, and integrated — actually does what their business needs. Done well, UAT catches the painful gaps before go-live; done badly, it confirms what the demo already confirmed and gives false confidence. ## The point of UAT Not to test that the software works (Microsoft and the partner already did that). To test that the **business processes**, end-to-end, in this customer's specific operational context, with this customer's data and integrations, produce the expected results. ## Scenarios over screens Build UAT around real business scenarios, not feature lists. A scenario reads like: *"Process a customer order from quote to invoice for a customer in Sweden, with a discount, drop-shipped, paid 30 days net, intrastat-relevant."* Each scenario crosses multiple screens, modules, integrations, and roles — and is what fails when something's wrong. ## Coverage Aim for: - 100% of core operational scenarios (order to cash, procure to pay, period close, payroll, etc.). - All workflow paths, including rejection and rework. - All integration points, with both happy and unhappy paths. - Critical reports run with real-looking data. - Edge cases the customer's industry / region demands (e.g. country-specific tax filings). ## Environment UAT runs in a **dedicated sandbox** copied from production-ready configuration with **realistic data volumes** and **all production integrations** connected to test endpoints. Testing against an empty demo company is theatre, not UAT. ## Real users UAT is run by **the people who'll use the system**, not by IT and not by the partner. The salesperson tests the sales process. The AR clerk tests AR. The shop-floor lead tests production reporting. If users are too busy for UAT, they'll be too busy to use the system after go-live. ## Scripts vs exploration A blend works best: scripted scenarios cover the must-have flows; **exploratory testing** for half a day per user catches the edges no script anticipated. Both feed the defect log. ## Defect management A clear bug-tracker — Azure DevOps, Jira, or simple in the partner's PSA — with severity, priority, status, and owner. Triage daily. Severity 1 (showstopper) and 2 (workaround painful) must close before go-live; lower severities can ship to backlog. ## Exit criteria Before declaring UAT complete, the business signs off: - All scenarios executed. - All sev 1 / sev 2 defects resolved or formally accepted. - Performance acceptable at expected user load. - Training material aligned with what users tested. - Integrations operating end-to-end at scale. ## What UAT isn't It isn't a substitute for the partner's earlier system, integration, and performance testing. By the time UAT starts, those tests should be green. UAT is the business confidence check. ## Where to go next UAT sits between [test automation](https://www.solvingdynamics365.com/guides/test-automation-for-dynamics-365) and [cutover](https://www.solvingdynamics365.com/guides/cutover-planning-for-dynamics-365), on data prepared through [test data management](https://www.solvingdynamics365.com/guides/test-data-management-for-dynamics-365). The people side — who tests, how they are prepared — is [change management](https://www.solvingdynamics365.com/guides/change-management-for-dynamics-365) and [training strategies](https://www.solvingdynamics365.com/guides/training-strategies-for-dynamics-365-rollouts). --- # Utilisation reporting for professional services on Dynamics 365 How to report consultant utilisation from Dynamics 365 Project Operations — the definitions finance and delivery argue about. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-professional-services-utilization-reporting Section: Industries / Professional services Published: 2026-09-02 Utilisation is the one number every professional services firm watches, and the one number no two firms define the same way. Dynamics 365 **Project Operations** captures everything needed to calculate it — approved time, bookings, resource capacity — but it does not ship a report that matches any particular firm's definition, and the built-in utilisation view uses one definition that finance may not accept. This guide is about getting to a utilisation number the partners trust. For the wider fit see [Dynamics 365 for professional services](https://www.solvingdynamics365.com/guides/dynamics-365-for-professional-services). ## Settle the definition before touching Power BI Utilisation is hours in the numerator divided by hours in the denominator. The fights are all about which hours. **Numerator choices.** Billable hours only (chargeable utilisation), or billable plus internal project hours such as pre-sales and R&D (productive utilisation). Most firms report both and manage to chargeable. **Denominator choices.** Calendar working hours (every weekday, eight hours), available hours (calendar minus approved leave and public holidays), or contracted hours for part-timers. Calendar-hours utilisation is lower and punishes people for taking holiday; available-hours utilisation is what delivery managers want. Finance often wants calendar hours because it ties to cost. Pick one as the headline and publish the other as a secondary measure, but do not let two teams present two numbers as "utilisation" to the board. **Approved versus submitted.** Time that is submitted but not approved is real work but not yet billable. Report on approved time for the headline and show the unapproved backlog as its own number; a large backlog is a management problem, not a utilisation problem. Write these decisions down. The Power BI model implements them, and every argument about a consultant's number goes back to the document. ## Where the data lives In Project Operations on Dataverse: - **Time entries** hold actual hours by resource, project, task, date, and billing type, with an approval status. This is the numerator. - **Bookable resources** carry the work-hours calendar that defines capacity, and a target utilisation percentage per resource. This is the denominator. - **Bookings** (hard and soft) against projects and tasks are the forward-looking view — forecast utilisation, as opposed to actual. - **Resource assignments** on project tasks are the plan; they matter for forecasting but should not feed actual utilisation. - **Leave** is not a first-class Project Operations concept. Most firms model it as bookings against an internal "absence" project, or pull it from Dynamics 365 Human Resources or the HR system. This is the step most often skipped, and it is the reason available-hours utilisation is wrong in so many first reports. The **resource utilisation view** on the schedule board calculates utilisation from bookings against calendar capacity, colour-coded against each resource's target. It is a good resourcing tool. It is not an actuals report, and it uses bookings, so a consultant booked at full time who logged half the hours still shows as fully utilised. Use it for forward planning; do not put it in front of finance as the utilisation number. ## Building the report Power BI over Dataverse is the standard path — either the Dataverse connector directly, or Azure Synapse Link or Fabric for larger firms. The model needs a date table, a resource dimension with cost centre and practice from the bookable resource, a capacity fact built from the work-hours calendar (expanding the calendar into hours per day is the fiddly part), and the time-entry fact filtered to approved status. Measures that earn their place: - Chargeable and productive utilisation, actual, by resource, practice, and period. - Forecast utilisation from hard bookings for the next twelve weeks, so resourcing can act before the actual number drops. - Unapproved time backlog in hours and days-old. - Bench: resources with forecast utilisation below a threshold in the next four weeks. A firm that also runs Project Operations with Finance and Operations for accounting can build the same measures over the project hour transactions in F&O; the definitions are the same, the tables differ, and mixing the two sources in one model creates reconciliation work with no benefit. ## The traps **Contractors.** Subcontracted resources appear as bookable resources of type Contact or Account and log time the same way. Including them in firm-wide utilisation flatters or distorts the number depending on how they are used. Report them separately. **Partial approval and rejected time.** Rejected entries that are resubmitted can be double-counted if the model does not filter on the current status. Filter on status, not on the approval record. **Overtime.** A consultant who logs ten hours against an eight-hour calendar day is at 125 percent utilisation. Decide whether to cap at capacity. Most firms do not cap the individual number but cap the aggregate reported to the board, and say so. **Calendar drift.** Resources whose work-hours calendar was never updated after a change to part-time hours produce wrong capacity forever. Put a quarterly check of calendars against HR data into the run book. **Projects with no billing type.** Time on a task whose project or contract line has no billing setup is neither billable nor non-billable and drops out of a naive numerator. Make it show as an exception. ## Business Central firms Firms running projects in **Business Central** have time sheets, resource capacity, and resource ledger entries, which support a simpler utilisation calculation. The capacity setup is more basic and there is no bookings concept for forecast utilisation. A Power BI model over resource ledger entries and resource capacity entries gives actual utilisation; forecast requires a planning tool or a spreadsheet. For a firm of a few dozen consultants that is fine; for a firm that needs to see the bench four weeks out, it is the argument for Project Operations. ## Using the number Utilisation is a lagging indicator of resourcing decisions made weeks earlier. The report is useful only if forecast utilisation from bookings is reviewed weekly by the people who assign work. A beautiful actuals dashboard reviewed monthly changes nothing. --- # VAT and sales tax setup in Business Central How Business Central calculates and reports VAT — VAT posting groups, EU rules, OSS, reverse charge, and country reporting. Source: https://www.solvingdynamics365.com/guides/business-central-vat-setup Section: Business Central / Compliance & localisation Published: 2026-05-01 Updated: 2026-08-31 VAT and sales tax are the area of Business Central where country localizations matter most. The core engine is the same everywhere, but every country layers its own rules and reports on top. ## The posting-group model Business Central calculates VAT by intersecting two posting groups on every transaction line: the **VAT business posting group** (who you are trading with — domestic customer, EU customer, export, reverse-charge subcontractor) and the **VAT product posting group** (what's being sold — standard goods, food, services, exempt). The intersection in the **VAT posting setup** table defines the rate, the GL accounts to post to, the calculation type (normal, reverse charge, sales tax, full VAT), and the EC reporting category. ## Setup discipline Every customer, vendor, and G/L account default a posting group, so most postings get the right VAT without manual intervention. Mistakes typically come from new countries, new product categories, or split-purpose accounts; spend the time getting defaults right. ## EU rules Built-in support for EU intra-community supplies, reverse-charge purchases, triangulation, and the **EC Sales List**. The **VAT Statement** report builds country-specific VAT returns line by line by combining VAT entries. ## One-Stop Shop (OSS) For EU B2C cross-border sales, Business Central supports the **OSS** scheme, with VAT calculated at the customer's country rate and a separate OSS return posted to the supplier's home tax authority. ## Reverse charge Both EU reverse charge and country-specific domestic reverse-charge schemes (construction services, scrap metal, mobile phones, gold) are supported through the posting setup type. ## Sales tax (US/Canada) A separate sales-tax engine, configurable by tax area, tax jurisdiction, and tax group, handles state, county, and city tax composition. For high-volume US businesses, ISV partners deliver Avalara or Vertex integrations from AppSource. ## Country reporting **VAT returns** (Making Tax Digital in the UK, SAF-T, real-time invoice reporting in Spain/Italy/Hungary, e-invoicing) ship per country, either from Microsoft or from a localization ISV. Always verify country coverage before committing to BC for a particular jurisdiction. ## Unrealized VAT and the VAT date Two settings deserve a deliberate decision at implementation rather than a default. **Unrealized VAT** shifts the tax point from invoice to payment — cash-accounting schemes, and mandatory in some jurisdictions for certain flows. It changes which GL accounts VAT sits on and when it hits the return, so switching it on later is painful; decide up front with your accountant. The **VAT date** (separate from posting date and document date) determines which VAT reporting period an entry lands in. Since its introduction it has quietly become the most important date on late-arriving supplier invoices: a January invoice posted in February can carry a January VAT date and land on the right return. Decide who is allowed to backdate it and lock closed VAT periods with the VAT return period controls, or your filed return and BC will drift apart. ## Implementation discipline The posting-group model is elegant and unforgiving: a wrong intersection posts confidently at the wrong rate, at volume, until someone notices — often the tax authority. What works in practice: - **Keep the matrix small.** Every business and product posting group multiplies the setup table. Resist a group per edge case; most SMBs need well under ten product groups. - **Test the matrix, not the concept.** Before go-live, post one test document through *every* combination that can occur — domestic sale, EU B2B sale, export, reverse-charge purchase, import — and have the accountant sign off the VAT entries each produces. - **Watch data migration.** Migrated customers and vendors arrive with whatever posting groups the migration mapped, and a NAV-era mapping copied forward uncritically is a classic source of wrong-rate postings in month one. Sample-check aggressively after [data migration](https://www.solvingdynamics365.com/guides/business-central-data-migration). - **Guard the manual override.** Users can change VAT groups on a document line. Sometimes that's legitimate (zero-rated export evidence); mostly it's a mistake. Restrict who can, and review VAT entries by group monthly — a five-minute pivot that catches most setup drift. ## When something posts wrong anyway Don't edit your way out. Posted VAT entries are immutable by design; the fix for a wrong-rate posting is a credit memo or a correcting entry that reverses the original VAT and posts it correctly, keeping the audit trail contiguous. For systematic errors discovered late (a whole quarter at the wrong rate), involve the accountant before mass-correcting — some jurisdictions want a disclosure alongside the correction, and the mechanics differ if the return has been filed. ## Audit and corrections Posted VAT entries are immutable; corrections post a counter-entry. The VAT register is the canonical audit trail, and the posted VAT return periods tie each entry to the return it was reported on. If you operate in multiple countries, remember that VAT correctness is a property of the **country localization**, not of the base product — verify both the rules and the digital-filing formats per jurisdiction as part of [country setup and localisation](https://www.solvingdynamics365.com/guides/country-setup-and-localisation-in-business-central) before committing. --- # Vendor collaboration in Dynamics 365 SCM How the Vendor Collaboration portal in F&O lets suppliers interact directly with the buyer's system — orders, ASNs, invoices, and the operational benefits. Source: https://www.solvingdynamics365.com/guides/vendor-collaboration-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 For mid-to-large operations dealing with many suppliers, the cost of email-and-PDF-driven procurement is real: typos in order acknowledgments, missing shipping notices, AP departments chasing invoices, manual three-way matching. **Vendor Collaboration** in Dynamics 365 SCM gives suppliers structured, secure access to relevant parts of the buyer's system — they see their POs, acknowledge them, confirm shipments, submit invoices, and update their own contact data, all without email. ## The architecture Vendor Collaboration runs as a **scoped Power Pages portal** sitting in front of F&O's vendor data. Suppliers sign in with their own identities (Microsoft accounts, Entra B2B, or guest accounts depending on configuration), and the portal exposes specific entities scoped to the supplier's own data only. No supplier can see any data belonging to another supplier. **What suppliers do in the portal.** - **View open purchase orders.** Every PO sent to the supplier appears with full line detail, pricing, quantity, delivery date. - **Acknowledge purchase orders.** The supplier confirms (accepts, partially accepts with proposed changes, or rejects) each PO. Acknowledgments post back as workflow notifications to the buyer's purchasing team. - **Submit advance shipping notices (ASNs).** Before goods ship, the supplier creates an ASN with shipment date, tracking number, line-level quantities. The ASN arrives in F&O as expected receipt data. - **Submit invoices.** The supplier creates an invoice referencing the PO and shipment, with line-level detail. The invoice queues in F&O's incoming-document pipeline for approval and posting. - **Update vendor master data.** Address, contact, bank account changes are submitted by the supplier; the buyer's vendor master administrator approves or rejects. - **View payment status.** The supplier sees which of their invoices are approved, paid, on hold, with promised payment dates. - **View consumption data** — for vendor-managed inventory (VMI) scenarios, the supplier sees the buyer's inventory levels and consumption to plan replenishment. ## Onboarding suppliers Each supplier needs to be invited to the portal, granted appropriate roles, and assigned the relevant data scope. The onboarding flow can be self-service (the supplier requests access via a registration form, the buyer approves) or admin-driven (the buyer invites individually). Vendor users authenticate against their own organisation's identity provider through Entra B2B, so the supplier's IT controls their access lifecycle. ## Permission scoping A supplier user's roles control what they can see and do: - **Read-only view** of orders and invoices. - **Active responder** for acknowledgments and ASNs. - **Self-service editor** for their own profile. Different users at the same supplier can have different roles — a customer-service rep handles acknowledgments; an AP-side counterpart handles invoicing. ## The buyer-side workflow Inside F&O: - Supplier acknowledgments appear in the purchasing buyer's workspace for review. - Submitted ASNs queue for receipt processing in the warehouse. - Submitted invoices flow into the vendor-invoice approval workflow. - Master-data change requests route to the vendor-master administrator. **Benefits.** - **Reduced AP friction** — invoices arrive as structured data, not PDFs requiring data entry. - **Improved on-time receiving** — ASNs tell the warehouse exactly what's arriving. - **Faster cycle time** — supplier responses are minutes, not days of email back-and-forth. - **Better master data** — suppliers maintain their own contact and banking data. - **Audit trail** — every interaction logged. **Limits.** - **Supplier adoption** — small suppliers may resist portal use; need a fallback for paper / email. - **Setup overhead per supplier** — onboarding each supplier is real work; only worth it for suppliers with meaningful volume. - **EDI overlap** — large suppliers may already use EDI; the portal duplicates effort. ## Operational reality Vendor Collaboration pays off when most procurement volume flows through portal-enabled suppliers. Pilot with the top 20% of suppliers (by spend or volume) first; expand from there. --- # Vendor performance tracking for public sector on Dynamics 365 How public bodies track supplier performance on Dynamics 365 Finance and Supply Chain Management — delivery and quality data from receipts and quality orders. Source: https://www.solvingdynamics365.com/guides/dynamics-365-for-public-sector-vendor-performance Section: Industries / Public sector Published: 2026-09-02 Public bodies are required to buy fairly, and increasingly required to show that the suppliers they keep buying from actually perform. Contract management regimes, audit offices, and value-for-money reviews all ask the same questions: did the vendor deliver on time, was the quality right, were the invoices accurate, and was the framework used as intended? Dynamics 365 Finance and Supply Chain Management captures the transactional evidence for all four as a by-product of normal purchasing. It does not ship a vendor scorecard. This guide covers where the evidence lives, how to turn it into a score, and the process rules that apply when the score has consequences. For the competition side, see [procurement transparency](https://www.solvingdynamics365.com/guides/dynamics-365-for-public-sector-procurement-transparency). ## The evidence is already there Most vendor-performance programmes fail by starting with a survey. Start with the transactions. **Delivery performance.** Every purchase order line has a requested date, a confirmed date from the vendor's acknowledgement (through vendor collaboration or keyed by the buyer), and an actual receipt date from the product receipt. On-time is actual against confirmed; in-full is received quantity against ordered. Both are queries over the purchase line and receipt tables, and the only setup decision is which date counts as the promise — insist on confirmed dates, or the measure is against the buyer's wish rather than the vendor's commitment. **Quality.** Where goods are inspected, quality orders at receipt record pass or fail per test, and nonconformances record what was wrong and what was done. Vendor-related nonconformances by vendor and period are the quality measure; the [quality management](https://www.solvingdynamics365.com/guides/quality-management-in-f-and-o) guide covers the setup. For services, quality is a rating on the purchase order line or on a case, which brings the evaluation criteria below into play. **Invoice accuracy.** Invoice matching produces price variances and quantity variances per invoice; the share of a vendor's invoices that match first time and the value of variances are the accuracy measure. Vendors that consistently invoice above the agreed price are found here, not in a survey. **Agreement compliance.** Purchase agreements record committed prices and quantities; releases against them show whether the vendor honoured the framework price and whether the organisation used the framework rather than buying off-contract. Off-contract spend by category is as much a measure of the buyers as of the vendor. **Responsiveness.** Time from RFQ issue to reply, and from order to acknowledgement, both timestamped when vendor collaboration is used. ## Adding judgement: vendor evaluation criteria Supply Chain Management includes **vendor evaluation criteria**: named criteria grouped and assigned to procurement categories, against which users rate vendors after purchases. The ratings aggregate to a vendor's score per category and are visible on the vendor and in the RFQ comparison. It is a lightweight mechanism — a small set of criteria, a star scale, comments — and that is its virtue. Use it for the things transactions cannot measure: communication, problem resolution, professionalism on site. Two rules make it defensible in a public body: ratings are entered against a specific purchase or contract, not free-floating, and the raters are the people who received the goods or service, not procurement. A rating without a transaction behind it is an opinion, and opinions are what a supplier challenge will attack. ## Certifications and compliance Public bodies must confirm vendors hold required certifications — insurance, safety, data protection, professional accreditation — and that they remain current. **Vendor certifications** on the vendor record hold the certification type, number, and expiry, with alerts as expiry approaches; the [alerts and notifications](https://www.solvingdynamics365.com/guides/alerts-and-notifications-in-f-and-o) guide describes the alert mechanism. Policy can prevent orders to vendors whose mandatory certification has lapsed, either by putting the vendor on hold or through a workflow check. Debarment and exclusion lists maintained by governments are external; checking them is a step in vendor onboarding and periodic review, typically a Power Automate flow calling the list's service where one exists, and a manual check where it does not. ## The scorecard With the evidence in place, the scorecard is a Power BI model over purchase lines, receipts, quality orders, invoice matching, agreements, evaluation ratings, and certifications, keyed on vendor and procurement category. Weight the measures per category — delivery matters more for goods, ratings more for services — and publish a score per vendor per quarter. The [Power BI for Dynamics 365](https://www.solvingdynamics365.com/guides/power-bi-for-dynamics-365) guide covers the data path; Synapse Link or the data lake export is the right source for this volume. Keep the weighting simple and documented, because the vendor will ask for it. Consider also giving vendors sight of their own score through vendor collaboration or a Power Pages page. Supplier-relationship programmes that share the score get fewer challenges and better performance than ones that spring it at contract review. ## Consequences, and the process around them This is where public sector differs from private. A private company can quietly stop buying from a vendor. A public body that excludes a vendor from a framework, declines to renew, or scores it down in a competition on the basis of past performance must follow a fair process: the vendor must have known the criteria, been told of poor performance, and had the chance to improve. The system supports this with the vendor hold status and its reason codes, the documented ratings and their dates, and correspondence stored against the vendor — but the process is the contract manager's, and the score should feed a conversation before it feeds a decision. Using past performance in a new competition is regulated in most jurisdictions and permitted only where announced in the procurement documents. The RFQ scoring criteria can include it; whether they may is a legal question to settle before the criteria are published. ## Business Central bodies Business Central records receipts, invoice variances, and vendor blocked status, and has no evaluation criteria or certification tracking. Smaller public bodies build the delivery and invoice-accuracy measures in Power BI from BC's purchase and receipt data, hold certifications as attributes or a small custom table with expiry, and record service ratings in a Dataverse or SharePoint list. That is enough for a body with a few hundred vendors; it is the argument for Supply Chain Management for one with thousands. ## Start small Delivery on-time and invoice first-time-match for the top fifty vendors by spend, reviewed quarterly with the contract managers. Add quality and ratings once those two numbers are trusted. Vendor-performance programmes that launch with a twelve-measure scorecard and a survey to every supplier produce a report nobody reads and a set of scores nobody will defend. --- # Vendor selection for Dynamics 365 implementations How to select an implementation partner for Dynamics 365 — RFP process, evaluation criteria, demo and reference checks. Source: https://www.solvingdynamics365.com/guides/vendor-selection-for-dynamics-365 Section: Implementation / Vendor & contracting Published: 2026-05-01 Choosing the right implementation partner is one of the highest-leverage decisions in any Dynamics 365 program. The partner affects timeline, quality, cost, and long-term success more than most other early decisions. A structured selection process produces better outcomes than gut-feel choices. ## Partner ecosystem realities Microsoft has thousands of certified partners; they differ wildly: - **Specialised boutiques** — deep in a specific module or industry. - **National / regional consultancies** — broader capability, local presence. - **Global SIs** — Accenture, Deloitte, KPMG, etc. — for complex, multi-country. - **Industry specialists** — vertical expertise. Match partner profile to project profile. **RFP / RFQ process.** 1. **Define scope** — what you need. 2. **Identify candidate partners** — 4-8 typically. 3. **Issue RFP** with structured questions. 4. **Receive proposals.** 5. **Evaluate.** 6. **Shortlist** to 2-3. 7. **Deep dive** — meetings, demos, references. 8. **Decision.** The structured process produces comparable inputs. **Evaluation criteria.** - **Technical capability** — Dynamics 365 expertise depth. - **Industry knowledge** — your vertical. - **Methodology** — implementation approach. - **Team** — who actually delivers. - **References** — recent, relevant. - **Commercial terms** — pricing model, contracts. - **Cultural fit** — work style alignment. - **Local presence** — for face-to-face needs. Weighted scoring across these makes evaluation transparent. **Common RFP questions.** - Recent similar implementations (last 12 months). - Specific modules expertise. - Industry vertical experience. - Proposed team — named individuals. - Methodology documents. - Risk management approach. - Quality assurance practices. - Change management approach. - Support post-go-live. - Pricing model — fixed, time and materials, hybrid. **Red flags.** - **Generic responses** — same words for every project. - **Inflated team size** — many B-team members. - **Unrealistic timelines** — promising what can't be delivered. - **Lowball pricing** — change orders coming. - **Recent partnerships only** — Microsoft listing but no real depth. - **No references** in your industry / scale. - **Pressure to commit fast.** Each warrants further investigation. ## Reference checks Critical step often rushed: - **Recent customers** — last 12-24 months. - **Similar profile** to yours — size, industry, complexity. - **Mix of perspectives** — IT, business, executive. Questions for references: - What went well? - What didn't? - Would you choose them again? - How was post-go-live support? - Cost vs budget? - Timeline vs commitment? - How did they handle conflict? **Demo evaluations.** - **Don't just see slides** — see actual Dynamics work. - **Test scenarios specific to your needs.** - **Watch how they handle gaps** — "we don't have an exact example" honesty matters. - **Note who presents** — same people who'll deliver? **Pricing models.** - **Fixed price** — partner takes risk; clear budget; less flexible. - **Time and materials** — flexible; budget risk on you. - **Hybrid** — fixed for defined scope, T&M for unknowns. - **Outcome-based** — pay for results; rare in implementation. Each fits different project profiles. Fixed for well-understood scope; T&M for exploration. ## Statement of Work (SOW) The contract: - Scope definitions. - Deliverables. - Timeline. - Cost. - Acceptance criteria. - Change management process. - Risk and assumptions. Vague SOWs lead to scope creep and dispute; specific SOWs hold both sides accountable. ## Multi-partner deployments Sometimes: - **Prime + sub-partners** — prime contractor coordinates. - **Independent multi-partners** — direct relationships. - **In-house + partner** — split execution. Adds coordination complexity but may be right for specialised needs. **Microsoft involvement.** - **Microsoft FastTrack** — for large customers, Microsoft engineers support. - **Account team** — Microsoft account managers know partners' specialisations. - **Microsoft can recommend** partners but won't pick. Engage Microsoft early for guidance. **Common pitfalls.** - **Cheapest wins.** Pricing wars hide quality differences. - **Brand-name only.** Big consultancy doesn't mean right team. - **No reference rigor.** Quick calls miss real signal. - **Scope vague at signing.** Both sides interpret differently; conflict. - **Single decision-maker.** Should involve IT, business, executive. **Decision-making.** - Scorecard from RFP. - Reference feedback. - Demo observations. - Cultural fit assessment. - Final discussion among stakeholders. Document the rationale; choosing partner is a major commitment. **Post-selection.** - **Kick-off** — set expectations. - **Joint planning** — milestones, deliverables. - **Governance structure** — steering committee. - **Performance metrics** — track against agreement. ## Strategic positioning The partner choice shapes the project. Spending more time in selection pays back in delivery. Common mistake: rushing the selection to start implementation faster — usually adds time and cost. For decision-makers: - Run a structured process. - Weight expertise over price. - Verify references rigorously. - Test cultural fit. - Commit only after thorough evaluation. The investment is days; the impact is the project's success or struggle. Done well, the partner becomes an extension of your team; done poorly, the partner becomes a source of friction and missed expectations. --- # Virtual network data gateway for Dynamics 365 How the virtual network (VNet) data gateway enables Dynamics 365 and Power Platform to access data in private Azure VNets — architecture, configuration. Source: https://www.solvingdynamics365.com/guides/virtual-network-data-gateway-for-dynamics-365 Section: Integrations / Azure services Published: 2026-05-01 Dynamics 365 and Power Platform often need to reach data sitting in private networks — Azure SQL Databases with private endpoints only, on-prem databases via ExpressRoute, services behind firewalls. Traditionally, this required the **on-premises data gateway** — a Windows service installed in the customer environment. The **virtual network data gateway** is a managed alternative: fully Microsoft-hosted, deployed into the customer's Azure virtual network, no Windows server to maintain. **The on-premises gateway recap.** - A Windows service installed in customer infrastructure. - Polls Microsoft cloud for work. - Bridges Power Platform / Dynamics requests to private data. - Customer-managed — patching, scaling, monitoring. - Available for over a decade; mature; widely used. **The virtual network data gateway.** - **Managed by Microsoft** — no Windows server to install or patch. - **Deployed into customer's Azure virtual network** — a subnet hosts the gateway. - **Accesses resources inside the VNet** — Azure SQL with private endpoint, Azure Function, etc. - **Connects to Microsoft cloud** through standard mechanisms. The headline benefit: customer's data stays inside their VNet; Microsoft's compute reaches in temporarily to fetch what's needed. **Architecture.** ``` Power Platform / Dynamics 365 | v Microsoft cloud (gateway service) | v Customer Azure VNet subnet for gateway | v Customer private resources ``` The gateway is provisioned in the customer's VNet but operated by Microsoft. The customer controls the VNet, the NSG rules, the resources it accesses; Microsoft operates the gateway runtime. **Configuration.** 1. Customer Azure subscription has a VNet with appropriate routing. 2. A subnet is dedicated for the gateway. 3. Subnet is delegated to `Microsoft.PowerPlatform/vnetaccesslinks`. 4. In Power Platform admin, the gateway is created referencing the VNet/subnet. 5. Data sources in the VNet are added to the gateway's connections. 6. Power Apps, flows, and Power BI reports use the gateway to reach the private resources. The setup is mostly Azure VNet plumbing plus a Power Platform reference. **Use cases.** - **Azure SQL with private endpoint** — public access disabled; gateway reaches via private endpoint. - **Azure Function with VNet integration** — internal logic accessible to Power Automate. - **Private Azure Storage** — files in storage accounts without public access. - **Azure Cosmos DB private** — private endpoints. - **Custom Azure-hosted APIs** — internal services accessible only inside VNet. - **On-prem via ExpressRoute** — if VNet is connected to on-prem via ExpressRoute, gateway reaches on-prem resources too. **Comparison with on-premises gateway.** | Aspect | On-prem gateway | VNet gateway | |---|---|---| | Hosting | Customer Windows server | Microsoft managed | | Patching | Customer | Microsoft | | Scaling | Manual / replica | Auto | | HA | Cluster of installs | Built-in | | Data path | Through customer infrastructure | Through Azure | | Use case | On-prem databases | Azure VNet resources | VNet gateway is the modern path for Azure-resident private resources; on-prem gateway remains for true on-prem data. **Authentication and authorisation.** - **Power Platform / Dynamics user** authenticates to Power Platform. - **Gateway** authenticates to data source (SQL credentials, managed identity, OAuth). - **Identity flow** depends on connector — some support pass-through, some require fixed credentials. For SQL access, the cleanest pattern is managed identity for the gateway connecting to SQL. **Performance.** - **Throughput** — comparable to direct connections. - **Latency** — slight added latency from cross-region or VNet routing. - **Connection pooling** — gateway maintains connection pools. For high-volume queries, gateway performance is reasonable; bulk data movement still benefits from ADF or other dedicated tools. **Networking specifics.** - **NSG rules** — control what the gateway subnet can reach. - **Private endpoints** — point to specific resources without public routing. - **DNS** — Azure Private DNS Zones for name resolution. - **Service endpoints** — for some Azure services if needed. VNet design matters; misconfigured networking gives confusing errors. **Monitoring.** - **Connection health** — visible in Power Platform admin. - **Query metrics** — request counts, latency. - **Errors** — connection failures logged. The managed gateway has better observability than the on-prem alternative; Azure-native logs. **Common pitfalls.** - **NSG too restrictive.** Gateway can't reach target; cryptic errors. - **Wrong subnet delegation.** Subnet not delegated to Power Platform service; gateway provisioning fails. - **Private endpoint DNS broken.** Gateway resolves to public IP, doesn't find resource; private DNS zones needed. - **No high availability planning.** Single gateway; outage affects all dependent flows. - **Connection limits.** Many flows hitting the same gateway; throttling. - **Cost surprise.** VNet gateway has hourly cost; budget. ## Cost VNet gateway is paid per gateway hour: - Reasonable for moderate usage. - Multiple gateways multiply cost. - Compare to on-prem gateway (free, but Windows server cost). For Azure-resident workloads, VNet gateway often wins on TCO once Windows server admin is included in on-prem gateway cost. **Migration from on-prem gateway.** - Add VNet gateway alongside. - Reconfigure connections to use VNet gateway. - Validate flows still work. - Decommission on-prem gateway. Migration is gradual; both can coexist during transition. ## Strategic positioning The VNet data gateway is Microsoft's path forward for Power Platform / Dynamics 365 private network access. For new deployments where data sits in Azure VNets, it's the default. For existing on-prem gateway deployments, evaluate moving to VNet gateway as Azure infrastructure modernises. The benefit isn't transformative — connections work either way — but operational simplicity (no Windows servers, no patching, no clustering) compounds over time. For modern, Azure-centric data architectures, the VNet gateway removes a longstanding piece of customer-managed infrastructure. Worth adopting for new work; worth migrating to gradually for existing. --- # Virtual tables in Dataverse How Dataverse virtual tables expose external data as if it were native — providers, OData connectors, refresh patterns. Source: https://www.solvingdynamics365.com/guides/dataverse-virtual-tables Section: Customer Engagement / Dataverse platform Published: 2026-05-01 Sometimes data should not be copied into Dataverse — it lives authoritatively in another system, replicating it would create sync headaches, and consumers just need read access. **Virtual tables** solve this by making external data appear as Dataverse tables without storing the rows. To a model-driven app or a Power Automate flow, a virtual table looks like any other; underneath, every query is routed to the external source. **What virtual tables provide.** - A Dataverse table shape (columns, datatypes, primary key). - No row storage in Dataverse. - Read and (optionally) write operations forwarded to an external system in real time. - Native participation in model-driven app forms, views, and Power Automate triggers (in some cases). **What they don't provide.** - High-performance large dataset queries (every query is a remote call). - Full Dataverse features (auditing, change tracking, calculated columns, traditional plugins). - Reliability if the external source is slow or unavailable. ## The virtual provider model A virtual table needs a **virtual data provider** — a connector that translates Dataverse queries into requests the external source can answer. Three common providers: - **OData virtual provider** — out-of-the-box for OData-compliant sources (SharePoint lists, OData-published systems, F&O entities). - **Cosmos DB / SQL providers** — bridge to specific data stores. - **Custom virtual providers** — built in C# implementing `IVirtualEntityDataSource`, registered as plugins. Custom providers give the most flexibility — any backend with an API can become a virtual table by writing the provider. ## Creating a virtual table In the maker portal: 1. Tables → New table → Virtual. 2. Choose the data source (configured virtual provider). 3. Select the external entity to surface. 4. Map external fields to Dataverse columns; set the primary key. 5. Save and publish. The table now appears in views, forms, and flows alongside native tables. ## Query forwarding When a user queries the virtual table: - Dataverse parses the FetchXML / OData query. - The virtual provider translates it to the external system's query language. - The external system returns results. - Dataverse marshals them back as if they came from internal storage. Latency is the external system's response time plus the marshaling overhead. For sub-second external systems, the experience feels native. For slow systems, it doesn't. ## Read vs read-write Virtual tables are most often **read-only**: - Display data without copy. - Simplify model-driven app integration. - Avoid sync logic. **Read-write** virtual tables exist when the external system supports updates and the provider is built to handle them. CRUD operations route to the external system, but with caveats around transactionality and error handling — if a Power Automate flow updates the virtual table and the external system rejects, the flow sees an error but has no native rollback semantics. **Use cases.** - **F&O data in a Power Apps front end** — surface customer balances from F&O without copying. - **Reference data from a master data hub** — countries, currencies, product catalogue maintained elsewhere. - **External system inventory or pricing** — read in Power Apps; user sees current data, system of record stays external. - **Compliance / audit data** — query without bringing data under Dataverse's residency boundary. **Limitations to know.** - **Performance under load** — every query is a network call; high-traffic scenarios hit the external system directly. - **No traditional plugins/workflows** — fewer extension points. - **Limited offline support** — model-driven mobile offline doesn't replicate virtual tables. - **Auditing limited** — Dataverse audit tracks calls but not external-side changes. - **Search limitations** — Dataverse search (the global search bar) often doesn't index virtual tables fully. ## Comparison to Power Automate "fetch on demand" Some scenarios that look like virtual table candidates are better served by a Power Automate flow that fetches data on demand and displays in a canvas app — simpler to build, no provider development. ## Comparison to dataflow replication When data is high-volume, read-heavy, and tolerates some latency, replicating to a real Dataverse table via dataflow can outperform a virtual table at scale. **Common pitfalls.** - **Virtual table for high-traffic master data.** Every view load fans out to the external system; the external system becomes a bottleneck for the whole app. - **No caching layer.** A custom provider that hits the external API every query without caching is expensive. - **Schema drift.** External system changes a field; virtual table fails to load until the mapping is updated. - **Auth complexity.** The provider needs auth to the external system; managing service principals or OAuth flows reliably is real work. - **Treating virtual tables as if they were standard.** Expectations of plugins, audit, advanced queries don't apply. ## Decision framework Use virtual tables when: - Data must remain authoritative externally. - Volume per query is small and per-row latency tolerable. - Replication would create sync complexity or compliance issues. Use replicated standard tables when: - Data volume is moderate and reads are frequent. - Power Apps responsiveness matters. - Full Dataverse features (workflows, plugins, audit) are needed. The two approaches are complementary; many environments use both — virtual tables for some scenarios, replicated tables for others. --- # Warehouse mobile workflows in Dynamics 365 Supply Chain How handheld warehouse workflows work in Dynamics 365 SCM — configurable mobile workflows, scanning, license plates, and where they fit operationally. Source: https://www.solvingdynamics365.com/guides/warehouse-mobile-workflows-in-f-and-o Section: Finance & SCM / Supply chain & inventory Published: 2026-05-01 The advanced **Warehouse Management** module in Dynamics 365 Supply Chain Management is one of the standout features that justifies stepping up from Business Central. At its heart is a **configurable mobile workflow engine** that drives handheld scanner devices on the warehouse floor — purpose-built for performance, glove-friendly use, and customisable without code. ## The model A **mobile workflow** is a sequence of steps a warehouse worker performs through their handheld device — scan a license plate, scan an item, confirm a quantity, scan a destination location, complete the move. Each step is defined in the workflow designer with prompts, validation, and conditional branching. Workflows live in F&O's setup; they're solution-package-portable like other configuration. ## Pre-built workflow types Microsoft ships configurations for the standard warehouse operations: - **Receipt** — inbound from purchase orders, transfer orders, return shipments. - **Put-away** — directed put-away to bins. - **Pick** — pick for outbound shipments, transfers, production consumption. - **Pack** — packing into outbound containers. - **Load** — loading onto outbound shipments. - **Counting** — cycle counting and full physical inventory. - **Movement** — moving stock between bins. - **Production** — material picking for production orders, finished-goods reporting. - **Quality** — quality inspection sampling and disposition. Each pre-built workflow can be cloned and customised — change the prompts, skip optional steps, add validation rules, branch on conditions. ## License plates A **license plate (LP)** is a label representing a logical unit of inventory — a pallet, a tote, a carton. License plates are the unit of movement: scan one license plate to move many items at once. License plates can be nested (a pallet LP contains many carton LPs each containing many items). Operations on the LP propagate to its contents. ## The handheld experience The mobile interface is deliberately minimal — large buttons, short prompts, scannable barcodes. Workers operate at speed without paging through menus. Each step's UI is generated from the workflow definition, with text and barcode-input emphasis. ## Hardware F&O's mobile experience runs on Windows-based industrial PDAs, Android devices via the **Warehouse Management mobile app** (the modern, recommended option), iOS devices, and forklift-mounted vehicle terminals. Bluetooth and Bluetooth+WiFi scanners pair with the device. Voice-pick devices integrate through partner add-ons. ## Wave processing Outbound order flow runs through **waves**: groups of orders released together for picking. Wave templates define the bundling logic (orders by route, by carrier, by priority). When a wave releases, the system computes pick plans, generates LP shipments, and queues pick work for handhelds. ## Slotting and replenishment Bin replenishment (moving stock from bulk to pick bins) is automated based on min/max thresholds, demand profiles, or scheduled jobs. Slotting (the assignment of items to optimal pick bin locations) can run on an ABC-velocity basis or through advanced WMS optimisation modules. ## Why this matters A well-configured advanced WMS in F&O can run a complex distribution warehouse with hundreds of operators, multiple shifts, and thousands of orders per day at the kind of throughput that lower-tier WMS systems struggle with. The trade-off is real: implementation is substantial, and the workflow design demands warehouse-domain expertise. ## Beyond the standard Customers with very specific WMS needs (mezzanines with pick-to-light, dynamic slotting based on real-time analytics, robotic AS/RS integration) extend through partner ISVs or via the open APIs. --- # Warehouse pick and put-away in Business Central How Business Central's warehouse module organises inbound put-away and outbound picking — the three warehouse modes, directed put-away and pick. Source: https://www.solvingdynamics365.com/guides/warehouse-pick-and-put-away-in-bc Section: Business Central / Inventory & warehouse Published: 2026-05-01 Business Central can run anything from a one-bin back room to a multi-zone advanced warehouse with directed put-away and pick. The configuration lives at the **Location** level: each location has a **Warehouse** profile that dictates which documents and which warehouse activities apply. Understanding the three modes and what each one enables is the foundation of warehouse design in BC. **The three location modes.** - **No warehouse activities.** Inventory moves with the source document (purchase receipt, sales shipment, transfer). No separate warehouse paper. Suitable for tiny operations with one bin and one person. - **Basic warehousing.** Inventory put-away and inventory pick documents are introduced — a separate warehouse activity per source document. Bin codes are tracked. Still one warehouse activity per source. - **Advanced warehousing.** Warehouse receipts and warehouse shipments aggregate multiple source documents. Put-away worksheets and pick worksheets break the work into optimised tasks. Directed put-away and pick (with zones, bin types, and put-away templates) becomes available. The location card flags `Require Receive`, `Require Put-away`, `Require Shipment`, `Require Pick`, and `Bin Mandatory` to encode which features apply. **Inbound: receive → put-away.** In advanced warehousing: 1. Vendor truck arrives. Warehouse operator opens or creates a **Warehouse Receipt** for the location. 2. Operator pulls in lines from open purchase orders or transfer orders that have arrived. 3. The receipt posts when goods are physically received at the dock. This creates `Posted Whse. Receipt` and inbound `Warehouse Entry` records, but inventory isn't yet at its bin. 4. A **Put-away Worksheet** breaks the receipt into put-away tasks; the system suggests bins using the **Put-away Template** on the item or default rules. 5. Warehouse operator works the **Warehouse Put-away** document, scanning items into bins. Posting the put-away moves the inventory from the receive zone to its destination bins. **Outbound: shipment → pick.** 1. Sales order or transfer is released. The location requires a shipment, so the order doesn't ship directly. 2. Operator creates a **Warehouse Shipment** and pulls in lines from open released orders. 3. A **Pick Worksheet** consolidates pick work; the system suggests bins to pick from using **Pick Template** logic, prioritising FEFO if configured. 4. Warehouse operator executes the **Warehouse Pick**, moving items from bins to the ship zone. 5. The shipment posts; inventory leaves the warehouse, the source order's `Qty. Shipped` updates, and inventory ledger entries are written. Basic warehousing skips the worksheet step — pick and put-away are created directly from the source document, one warehouse activity per order. ## Bins and bin types A **Bin** is a physical location in the warehouse. **Bin Types** (`Receive`, `Ship`, `Pick`, `Put-away`, `QC`) define what flows can use the bin. A bin can be multiple types simultaneously (e.g. both `Pick` and `Put-away`). The default bin for an item determines where the system suggests putting new stock without explicit instruction. ## Zones Zones group bins for logical traversal (Receiving, Bulk Storage, Pick Face, Shipping). Zone-aware put-away templates implement strategies like "put bulk to bulk storage, but if the pick face is below minimum, replenish there first." ## Replenishment Once bulk and pick-face bins are separated, **Movement Worksheets** generate internal moves to replenish pick faces from bulk. This is a small but important workflow — without it, pickers run out at the pick face while bulk stock sits. ## Mobile and barcoded operations Out-of-the-box BC has a basic web app suitable for tablet use, but most serious warehouses run a third-party **Warehouse Mobile** extension or AppSource app (Insight Works, Tasklet, Warehouse Insight) for scanner-driven picking. The data model underneath is the same — warehouse entries, warehouse activities — but the UI is optimised for barcode scanning. **Common pitfalls.** - **Choosing advanced when basic suffices.** Advanced warehousing has more configuration and more steps. Don't pick it if you have one bin per location. - **Bin mandatory turned off.** Without bin mandatory, the bin codes become advisory; the system happily ships from a non-existent bin. For accurate stock, bin mandatory should be on. - **No replenishment process.** Picks fail at the pick face because bulk wasn't moved. Movement worksheets must run, often automated by job queue. - **Manual put-away.** Skipping the put-away template means operators choose bins themselves — slower, less consistent, harder to optimise. ## When to outgrow BC's warehouse For most mid-market 3PL or wholesale operations, BC advanced warehousing plus a mobile add-on is sufficient. The migration to D365 Supply Chain Management's warehouse module typically happens when you outgrow BC's single-tenant scale (>1M warehouse entries per month) or need features BC lacks: wave planning at scale, complex labour standards, advanced shipping cartonisation, deep TMS integration. --- # Webhooks in Business Central How webhook subscriptions work in Business Central — subscribing, renewing, payloads, and the realities of consuming change notifications. Source: https://www.solvingdynamics365.com/guides/webhooks-in-business-central Section: Integrations / Eventing & messaging Published: 2026-05-01 Business Central can push change notifications to external systems via **webhook subscriptions**, so consumers don't need to poll. It's the recommended way to integrate when external systems need to react to BC changes promptly. The mechanics are simple; the operational discipline is what catches people out. ## The model An external system registers a **subscription** with BC, declaring: - The **resource** to watch — a v2.0 API entity set, e.g. `companies({id})/customers` or a specific table via a custom API. - The **change types** — `created, updated, deleted`. - The **notification URL** — where BC will POST notifications. - The **client state** — a token the subscriber chooses, returned in notifications for verification. BC validates the URL during subscription creation by POSTing a validation token; the URL must return it within seconds, exactly as received. This is how BC verifies the subscriber owns the URL. ## Notifications When a watched resource changes, BC POSTs a notification (or batch of notifications) to the URL. The payload contains **resource URLs** and change type but **not** the changed data itself — the subscriber must GET the resource to see what changed. This indirection is deliberate: it keeps notifications small, lets the subscriber filter by re-checking permissions, and avoids stale data over slow subscribers. ## Retry and durability BC retries failed deliveries for a limited window with exponential backoff. After repeated failures, the subscription is deactivated and the subscriber must re-create it. **There is no message replay** — if your endpoint is down past the retry window, those notifications are lost. Build for reliability. ## Subscription expiry Subscriptions auto-expire (typically after 3 days). Consumers must **renew** before expiry by extending the subscription. Renew at half the lifetime to handle clock skew and downtime. ## Authentication Notifications are POSTed *as Business Central* to the subscriber's URL — no auth header is added by BC. The subscriber authenticates the call by checking that the **client state** matches the value it gave at subscription time. Treat client state like a shared secret. ## Throttling A tenant has a finite number of active webhook subscriptions and a cap on notification rate. High-change tables (item ledger, GL entry) generate many notifications; subscribe to higher-level entities (sales orders, posted invoices) where possible. ## Scale pattern Don't subscribe directly from a single endpoint to a high-volume entity. Use a webhook → Service Bus or Storage Queue → worker pattern: the webhook handler quickly enqueues the notification and returns 200; a worker processes it asynchronously with retries. This decouples the subscriber's processing time from BC's expectation of a fast 200 response. ## When to use Real-time integration of moderate volume — sync a sales order to a shipping service the moment it's released. For bulk or batch needs, use the API directly with `If-Modified-Since` or change-tracking semantics. --- # Webhooks vs events in Dataverse How Dataverse exposes change notifications — webhooks, service endpoints to Azure Service Bus / Event Hub / Event Grid. Source: https://www.solvingdynamics365.com/guides/webhooks-vs-events-in-dataverse Section: Integrations / Eventing & messaging Published: 2026-05-01 When something happens in Dataverse — a record created, updated, or deleted — external systems often need to react. Dataverse provides multiple mechanisms to publish these events: plug-in step → webhook, plug-in step → service endpoint (Service Bus, Event Hub, Event Grid). Each has different reliability, scale, and operational characteristics. ## The plug-in step pattern All event publication originates from the same place: a plug-in step registered against a table event. The step's destination determines the mechanism: - **In-process plug-in** — runs in Dataverse, mutates the row or related rows. - **Webhook** — Dataverse POSTs to an external HTTPS endpoint. - **Service endpoint** — Dataverse publishes to Azure Service Bus, Event Hub, or Event Grid. Each is configured via the Plug-in Registration Tool or solution-aware code, with similar registration metadata. **Webhooks.** - Dataverse calls an HTTPS URL with the event payload. - Endpoint receives, returns 200 (or fails). - Synchronous delivery — Dataverse waits for the response before continuing (with timeout). - Retries on failure (limited retries; eventually gives up). - Authentication via shared key or no auth (with caution). Best for: - Custom logic running in Azure Functions, Logic Apps, or your own services. - Quick integration without infrastructure. - Scenarios where occasional event loss is tolerable. Limitations: - **Reliability** — receiver failures lead to dropped events after retry exhaustion. - **Scale** — Dataverse blocks while waiting for response; slow receivers impact source. - **Ordering** — no strict ordering guaranteed. **Azure Service Bus.** - Dataverse publishes to a Service Bus queue or topic. - Decoupled — events buffered for subscribers. - Strong reliability — guaranteed delivery to receivers. - Subscribers process at their own pace. - Higher infrastructure cost; needs Service Bus namespace. Best for: - High-reliability integrations. - Heavy downstream processing. - Multiple consumers of the same event. **Azure Event Hub.** - High-throughput event ingestion. - Optimised for many events per second. - Used with telemetry-style scenarios. Best for: - Very high-volume event streams. - Analytics ingestion. - Event sourcing patterns. **Azure Event Grid.** - Event routing with topic/subscription model. - Multiple subscribers per event. - Native integration with many Azure services. - Generally lower cost for moderate volumes than Service Bus. Best for: - Pub/sub patterns with multiple receivers. - Routing events to various Azure services. - Cross-product Azure-centric integrations. **Comparison table.** | Aspect | Webhook | Service Bus | Event Hub | Event Grid | |---|---|---|---|---| | Coupling | Tight | Loose | Loose | Loose | | Reliability | OK | High | High | High | | Volume | Low-mid | Mid-high | Very high | Mid-high | | Setup complexity | Low | Mid | Mid | Mid | | Cost | None | Per msg | Per ingestion | Per operation | | Use case | Simple webhook | Critical integration | Telemetry | Pub/sub routing | **Synchronous vs asynchronous.** - **Synchronous (Pre/Post-op stage)** — plug-in fires inline with the Dataverse operation; user waits. - **Asynchronous (Post-op + async)** — fires after commit, queued, executed by Dataverse's async job processor. For external publication, asynchronous is almost always right — sync webhooks block the user's experience. ## Payload format The payload varies: - **Native Dataverse format** — `ExecutionContext` serialised. - **CloudEvents** — when configured for Event Grid in CloudEvents schema mode. CloudEvents is the modern, interoperable format; preferred for new integrations. **Authentication.** - **Webhook** — shared key (header value), or HTTP Basic. - **Service Bus** — connection string (SAS key) with policy. - **Event Hub / Event Grid** — similar SAS-based auth. Service principal-based auth is preferred over shared keys; setup is more complex but more secure. ## Filtering at source Reduce noise by only publishing events that matter: - **Filtering attributes** — only fire when specific columns change. - **Conditional execution** — plug-in checks before publishing. Source-side filtering reduces downstream volume. **Replay and dead-letter handling.** - **Service Bus** — dead-letter queue for failed messages; messages can be inspected and re-processed. - **Event Hub** — events persist for configurable retention; consumers can replay. - **Event Grid** — dead-letter to storage; advanced retry policy. - **Webhook** — no dead-letter; permanent loss after retries. For critical integrations, never use webhooks alone — the lack of dead-letter handling is operationally risky. ## Idempotency Receivers should be idempotent — handle the same event twice without bad side effects. All event mechanisms have at-least-once delivery; duplicates happen. **Monitoring.** - **Plug-in execution failures** — visible in Dataverse async job logs. - **Service Bus metrics** — message counts, dead-letter counts. - **Webhook failures** — show in Dataverse but not retrievable beyond a window. Service Bus and Event Grid provide much richer observability than webhooks alone. **Common pitfalls.** - **Webhook for critical events.** Receiver failure = event lost; downstream system out of sync. Use Service Bus or Event Grid for reliability. - **No idempotency at receiver.** Duplicate events cause duplicate side effects. - **Source-side filtering missing.** All updates published; downstream system overwhelmed. - **Authentication via shared keys.** Keys leak in code or logs; security incident. - **No dead-letter handling.** Failed events disappear; integration silently incomplete. - **Synchronous webhook with slow receiver.** Dataverse operations slow for users; blame the system. ## Strategic positioning Choose the mechanism per integration's needs: - **Internal Power Platform integrations** — Power Automate flows triggered by Dataverse events, no Service Bus needed. - **Lightweight external** — webhook to Azure Function. - **Critical external** — Service Bus or Event Grid. - **Very high-volume telemetry** — Event Hub. The cost of choosing wrong: brittle integrations. The cost of choosing right: infrastructure investment that pays back in reliability. Most production integrations should use Service Bus or Event Grid; webhooks are for prototypes and low-stakes scenarios. ## Where to go next Deeper on each destination: [Service Bus integration](https://www.solvingdynamics365.com/guides/azure-service-bus-integration-with-dataverse), [Event Grid with Dataverse](https://www.solvingdynamics365.com/guides/event-grid-with-dataverse), and the reliability pattern that makes any of them safe, [the outbox pattern](https://www.solvingdynamics365.com/guides/the-outbox-pattern-with-service-bus). Receivers need [idempotency](https://www.solvingdynamics365.com/guides/idempotency-in-dynamics-365-integrations); the step that publishes is a plug-in, whose failure modes are in [plug-in exceptions explained](https://www.solvingdynamics365.com/guides/dataverse-plugin-exceptions-explained). ### Frequently asked questions **What are the options for publishing Dataverse events externally?** A plug-in step registered on a table event whose destination is a webhook (HTTPS POST) or a service endpoint to Azure Service Bus, Event Hub, or Event Grid. All are configured through the Plug-in Registration Tool with similar metadata. **Why not use webhooks for critical integrations?** Webhooks have limited retries and no dead-letter queue, so a failing receiver eventually means a permanently lost event. Service Bus and Event Grid buffer, guarantee delivery, and dead-letter failures for inspection and replay. **Should the publishing step be synchronous or asynchronous?** Asynchronous, almost always. A synchronous webhook makes the user wait for the external receiver, and a slow receiver makes Dataverse feel slow. **Do receivers need to be idempotent?** Yes. Every mechanism delivers at least once, so duplicates happen. Receivers must handle the same event twice without duplicate side effects. **Which Azure service fits which scenario?** Service Bus for critical integrations with heavy downstream processing; Event Grid for pub/sub routing to multiple Azure subscribers at moderate volume; Event Hub for very high-volume telemetry-style streams. --- # What is Business Central? A practical introduction to Microsoft Dynamics 365 Business Central — the SaaS ERP for small and mid-sized businesses. Source: https://www.solvingdynamics365.com/guides/what-is-business-central Section: Business Central / Overview Published: 2026-05-01 Updated: 2026-08-27 Microsoft Dynamics 365 Business Central is a cloud-first ERP designed for small and mid-sized businesses — typically organisations between roughly five and several hundred users that need accounting, inventory, sales, purchasing, and basic operations in one connected system. It is the modern, SaaS-delivered successor to **Dynamics NAV** (and to Navision before that), and it inherits the same posting engine, dimensional accounting, and journal-and-document data model that made NAV popular for over two decades. ## Where Business Central came from Business Central's lineage runs back to **Navision Financials**, a Danish product first released in the mid-1990s and acquired by Microsoft in 2002. Under Microsoft it became **Dynamics NAV**, and in 2018 the SaaS version was rebranded and re-platformed as Business Central. The upgrade is not just cosmetic: the AL programming language replaced C/AL, extensions replaced code customisations, and the client moved fully to a browser-based web experience. But the underlying data model — the same general ledger, the same item and customer cards, the same posting routines — is recognisable to anyone who worked with NAV in the 2010s. That continuity matters. It means the deep functional knowledge accumulated across a global partner ecosystem transferred forward. It also means Business Central has 25+ years of localisation work behind it: statutory VAT and payroll handling, chart-of-accounts templates, e-invoicing formats, and country-specific reports for dozens of jurisdictions ship in the box. ## What it actually does Functionally, Business Central covers the full financial core — general ledger, accounts payable and receivable, bank reconciliation, fixed assets, intercompany postings, and country-specific VAT and sales tax — plus inventory and warehouse management, sales and purchase order processing, light manufacturing, jobs and project accounting, and service management. It ships with role-tailored workspaces, deep Excel and Outlook integration, and built-in Power BI reports. The **Essentials** SKU covers finance, sales, purchasing, inventory, projects, and service. The **Premium** SKU adds manufacturing (production BOMs, routings, capacity planning) and service management (service orders and contracts). Most implementations run on Essentials; Premium is warranted when the business actually assembles or manufactures goods rather than only trading them. Copilot inside Business Central assists with bank reconciliation, sales line suggestions, marketing text generation, and chart explanations. These are targeted features, not a general chat surface — they sit inside the pages where the work happens. ## Who it's for Business Central is aimed squarely at the mid-market. A single-country retailer with 20 users, a wholesaler with 80 users across three warehouses, a professional-services firm with 150 consultants — all fit the profile. So do subsidiaries of larger groups that want a lightweight ERP for a small country while the parent runs SAP or Dynamics 365 Finance and Supply Chain Management centrally. Below the entry point, businesses often stay on QuickBooks, Xero, Fortnox, or Visma until they hit either a complexity ceiling (inventory across multiple locations, jobs, foreign-currency reporting) or a compliance one (statutory audit, group consolidation). Above it, once a business runs at scale across many legal entities with heavy manufacturing and warehouse workloads, migration to Dynamics 365 Finance and Supply Chain Management is the typical next step. The line is not sharp. Business Central handles up to a few hundred concurrent users comfortably and supports multi-entity groups through **intercompany postings** and **consolidation**. A 500-user business is not automatically too big for it — the deciding factor is usually the shape of the operations, not the headcount. ## Extensibility and updates What makes Business Central distinctive among mid-market ERPs is its extensibility model. Partners and customers extend the product through **AL extensions** distributed via **AppSource**, which means upgrades are non-breaking and the base application stays clean. Extensions can add pages, fields, tables, and business logic without touching the underlying object model, and they can subscribe to events raised by the base app or by each other. Microsoft ships two minor updates per year — commonly called **Wave 1** (April) and **Wave 2** (October) — plus monthly hotfixes and cumulative updates. Tenants are automatically updated, with a configurable update window and the ability to schedule the major version bumps up to a few weeks. The **release plans** are published months in advance, so functional consultants and partners can prepare. For customers moving from NAV, this cadence is the biggest cultural change. On-premise NAV upgrades were multi-year projects. On Business Central Online, the platform upgrades itself every month, and the customer's job is to keep extensions healthy through the upgrade cycle. That shifts the partner relationship from "big-bang project once every five years" to a steady flow of small changes. ## Licensing Business Central is sold as **Essentials** or **Premium** per named user, with a lower-cost **Team Member** license for read-and-light-write roles (approvers, viewers, time entry), and an **External Accountant** license for the company's accountant. A tenant chooses either Essentials or Premium for its Full Users — you cannot mix. Team Members can sit on top of either. There are also **Device** licenses for shared shop-floor terminals and **Attach** licenses for scenarios where users need multiple Dynamics 365 apps but only pay the base price once. Full pricing is published in the [Dynamics 365 licensing guide](https://go.microsoft.com/fwlink/?LinkId=866544) and is refreshed roughly annually. ## Implementation and partners Business Central is almost always implemented by a Microsoft partner over a project of two to six months, though very small deployments can be self-served or delivered in weeks. The partner ecosystem is deep: several thousand firms globally, with strong regional coverage in the Nordics, DACH, Benelux, the UK, and Australia — a direct legacy of the NAV heritage. Business Central also runs on-premise, but the vast majority of new implementations are SaaS (Business Central Online), which is hosted on Azure in Microsoft data centres. On-premise remains supported and continues to receive updates, and there is a genuine use case for it — sovereignty requirements, industry-specific integration constraints — but the platform is clearly designed cloud-first. For a typical mid-market implementation, expect: a fit-gap workshop, a base configuration, a data migration from the legacy system, one or two Wave-aligned rounds of extensions for the gaps that remain, integration to bank and payroll, key-user training, and go-live. Steady-state after go-live is a small ongoing partner relationship for the semi-annual waves plus ad-hoc change requests. ## Where to go next Next reads: [Business Central licensing and pricing](https://www.solvingdynamics365.com/guides/business-central-licensing-and-pricing) with current list prices on the [pricing page](https://www.solvingdynamics365.com/pricing/business-central), then the [finance module](https://www.solvingdynamics365.com/guides/business-central-finance-module) and [dimensions design](https://www.solvingdynamics365.com/guides/business-central-dimensions-design), which shape every report you will run. [Business Central environments](https://www.solvingdynamics365.com/guides/business-central-environments) covers the operational model. If you are weighing it against the enterprise tier, read [Business Central vs Finance and Operations](https://www.solvingdynamics365.com/guides/business-central-vs-finance-and-operations); if you are coming from NAV, [Business Central vs Dynamics NAV](https://www.solvingdynamics365.com/guides/business-central-vs-dynamics-nav). ### Frequently asked questions **Who is Business Central for?** Small and mid-sized businesses — typically companies that have outgrown entry-level accounting but do not need an enterprise ERP. It covers finance, sales, purchasing, inventory, warehousing, projects, and light manufacturing. **What is the difference between Essentials and Premium?** Essentials is the standard full-user license. Premium adds manufacturing and service management. A tenant cannot mix the two — all full users are either Essentials or Premium — so one department needing service management forces everyone up to Premium. **How often is Business Central updated?** Microsoft ships two major updates per year, in April and October, plus monthly hotfixes. Online tenants update automatically within a configurable window, and AL extensions are designed to survive upgrades without breaking. **What happened to Dynamics NAV?** Business Central is the evolution of Dynamics NAV. The biggest cultural change for NAV customers moving to Business Central Online is the update model: instead of a multi-year upgrade project every few versions, the platform updates itself continuously and the job becomes keeping extensions healthy. --- # What is Dynamics 365 Customer Service? Microsoft's case management and omnichannel customer support platform — what it does, how it scales, and where Copilot fits. Source: https://www.solvingdynamics365.com/guides/what-is-dynamics-365-customer-service Section: Customer Engagement / Customer Service Published: 2026-05-01 Updated: 2026-08-27 Dynamics 365 Customer Service is Microsoft's case management and omnichannel support platform. It runs the customer-facing operations of contact centres, service desks, B2B support teams, and inbound enquiry handling across industries — everywhere a customer's problem needs to be tracked, routed to the right person, resolved against a service commitment, and reported on afterwards. ## Where it fits Customer Service is one of the CRM-lineage Dynamics 365 apps, sharing Dataverse with Sales, Field Service, Marketing, and Customer Insights. That shared platform is the primary reason a Microsoft-shop CIO picks it: a case opened by a support agent references the same Account and Contact records the sales team owns, the same product catalog, and the same customer history. When the case escalates into a field visit, Field Service picks up the same record without integration. In the market, Customer Service competes primarily with Salesforce Service Cloud, ServiceNow Customer Service Management, and Zendesk. It wins when the customer already runs Microsoft 365 and Teams heavily, when there is a Dynamics 365 ERP or Sales deployment upstream, or when the Copilot integration matters more than best-of-breed contact-centre depth. ## The case lifecycle The core object is a **case** — a single unit of customer trouble — created from email, chat, voice, web form, social, or a customer portal. Cases have a **status reason** (In Progress, On Hold, Waiting for Customer, Resolved), a **priority**, an **SLA**, an owning **queue** or agent, parent/child relationships for related cases, and a configurable resolution process backed by a business process flow. **Routing rules** assign incoming cases to queues based on attributes — product line, customer tier, keyword match, language. **Unified routing** layers AI on top: cases are classified with a machine-learning model trained on the tenant's own history, then matched to an agent whose skills and availability best fit. The classical "queue assign" and the modern "unified routing" coexist — a large support estate typically uses both, with routing rules as the gate and unified routing as the assignment. ## Omnichannel Customer Service ships with a unified agent desktop and channel integrations for **voice** (built on Azure Communication Services), **live chat**, **SMS**, **email**, **WhatsApp**, **Facebook Messenger**, **Apple Messages for Business**, **Microsoft Teams**, and a self-service **web widget** embedded on any site. Agents handle multiple sessions at once with a smart productivity pane — one active conversation in the main pane, up to a configurable number of parked sessions in the sidebar, plus knowledge search, macros, and Copilot suggestions overlaid on top. Supervisors get a live view of queue load, agent occupancy, and channel health from an operations dashboard. Voice is the newest and most sophisticated channel: it uses ACS under the hood for the call transport, provides IVR flows built with the same low-code designer, and produces a real-time transcript that Copilot can summarise mid-call. ## Knowledge management A built-in **knowledge base** supports authored articles with version control, translations (multi-language publishing), scheduled publishing, and separate internal / external visibility. Articles surface contextually inside the case form — the system recommends articles based on case attributes — and on the customer portal for self-service. Federated knowledge search across external systems (SharePoint, ServiceNow, custom sources) uses **Copilot Studio** connectors so agents can search one place and hit multiple back ends. ## SLAs and entitlements **SLAs** track first-response and resolution targets per channel and priority, with warning thresholds, escalations, and business-calendar awareness (support hours, holidays, timezone). Multiple KPI clocks can run on one case — response time separately from resolution time separately from time-in-status. **Entitlements** track contract balances — cases remaining, hours remaining, terms per product — per customer and channel. When a case is created, the applicable entitlement is stamped on it automatically, decremented on close, and the entitlement's SLA is applied. ## Copilot AI features include real-time **case summary** (the case's history condensed for an agent picking it up mid-flight), **email draft replies** in the agent's tone, **conversation summary** at end of chat that writes back to the case timeline, **knowledge search** in natural language, and **agent assist** suggesting next-best replies as the conversation happens. Supervisors get **sentiment monitoring** across all live conversations, **conversation intelligence** across calls and chats with keyword tracking, and Copilot-generated summaries of team performance for the daily standup. Copilot for Service is separately licensed as an add-on to Customer Service Enterprise. It is also sold as a standalone that connects to Salesforce Service Cloud, so a customer running Salesforce today can pilot the Copilot experience without moving off it. ## Self-service and bots **Copilot Studio** agents (previously "Power Virtual Agents") deflect cases from human agents by answering routine questions, taking simple actions like resetting a password or checking an order status, and handing off cleanly to a human when the conversation exceeds their capability — carrying the transcript, the identified topic, and any collected variables into the case that gets created. Customer portals built with **Power Pages** give customers a place to log and track cases, browse the knowledge base, and manage their entitlements. A portal is not required — many organisations run Customer Service purely through inbound channels — but it is common for B2B support where customers want visibility. ## Reporting Out-of-the-box dashboards cover case volume, resolution times, agent productivity, and SLA performance. **Customer Service Analytics** ships as a Power BI app with deeper reports — trend analysis, customer effort scores, backlog aging. **Omnichannel Insights** does the same for the omnichannel channels — conversation-level analytics rather than case-level. Custom dashboards are built with Power BI against Dataverse directly. The data is well-structured and documented, and the shared Dataverse means dashboards can join Customer Service data with Sales pipeline or Field Service work orders without ETL. ## Licensing Sold per user in **Professional** and **Enterprise** tiers. **Professional** is a light SKU limited to case management and one channel — usable for a small internal support desk, rarely right for a customer-facing contact centre. **Enterprise** is the working baseline: full case management, multiple channels, SLAs, entitlements, and full customisation. Add-ons on top of Enterprise cover the paid channels: **Voice** (per user, adds the ACS-powered voice channel), **Digital Messaging** (chat, SMS, social), **Chat** (chat only, subset of Digital Messaging), and **Customer Service Insights**. Copilot for Service is a separate add-on. Attach licensing lets users who already hold another Dynamics 365 app add Customer Service at a reduced base price — useful for sales-plus-service deployments where the same seats work both apps. ## Where to go next The service-commitment machinery is in [SLA management](https://www.solvingdynamics365.com/guides/sla-management-in-customer-service) and [entitlements](https://www.solvingdynamics365.com/guides/entitlements-in-customer-service); assignment in [routing rules](https://www.solvingdynamics365.com/guides/customer-service-routing-rules); telephony in [omnichannel voice](https://www.solvingdynamics365.com/guides/omnichannel-voice-in-customer-service). For the competitive picture, [Customer Service vs Zendesk](https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-vs-zendesk) and [vs ServiceNow](https://www.solvingdynamics365.com/guides/dynamics-365-customer-service-vs-servicenow). List prices and the channel add-in bill are on the [Customer Service pricing page](https://www.solvingdynamics365.com/pricing/customer-service). ### Frequently asked questions **What is the difference between routing rules and unified routing?** Routing rules assign cases to queues on attributes such as product line, customer tier, or language. Unified routing adds machine-learning classification and skills- and availability-based assignment to a specific agent. Large support estates use both: rules as the gate, unified routing as the assignment. **Which channels does Dynamics 365 Customer Service support?** Voice built on Azure Communication Services, live chat, SMS, email, WhatsApp, Facebook Messenger, Apple Messages for Business, Microsoft Teams, and an embeddable web widget. Voice, digital messaging, and chat are paid add-ons on top of the Enterprise licence. **Is Customer Service Professional enough for a contact centre?** Rarely. Professional is limited to case management and a single channel and suits a small internal support desk. A customer-facing contact centre needs Enterprise for multiple channels, SLAs, entitlements, and full customisation. **How do SLAs and entitlements work together?** An entitlement records a customer's contract balance — cases or hours remaining, per product and channel. When a case is created the matching entitlement is stamped on it and its SLA applied; the SLA then runs response and resolution clocks with warning thresholds, escalations, and business-calendar awareness. **Who does Dynamics 365 Customer Service compete with?** Salesforce Service Cloud, ServiceNow Customer Service Management, and Zendesk. It wins when the organisation runs Microsoft 365 and Teams heavily, has Dynamics 365 Sales or an ERP upstream, or values Copilot integration over best-of-breed contact-centre depth. --- # What is Dynamics 365 Field Service? Microsoft's field service management app — work orders, scheduling, mobile, connected assets, and the operations model behind a modern service business. Source: https://www.solvingdynamics365.com/guides/what-is-dynamics-365-field-service Section: Customer Engagement / Field Service Published: 2026-05-01 Updated: 2026-08-27 Dynamics 365 Field Service is Microsoft's application for organisations that send technicians or engineers to a customer site to perform work. Typical customers are equipment manufacturers running maintenance contracts, facilities-management firms, utilities, telecoms, medical-device service teams, and home-service businesses — anywhere a work order, a person, a vehicle, and an asset at a customer location have to line up in time and space. ## Where it fits Field Service is one of the CRM-lineage Dynamics 365 apps, running on the same Dataverse as Sales, Customer Service, Marketing, and Customer Insights. The shared platform matters because the field service business rarely stands alone: a case opened in Customer Service becomes a work order in Field Service, an asset installed by Sales gets serviced by Field Service, and the technician's arrival photo lands on the same customer timeline as the sales conversation. In the market, Field Service competes primarily with **ServiceNow Field Service Management**, **Salesforce Field Service**, **IFS Field Service Management**, and specialised products like **ServiceMax** (for equipment manufacturers). It wins on integration into Microsoft 365 and Dynamics 365, on the maturity of its scheduling engine, and on the fact that IoT-connected scenarios (Azure IoT feeding work orders) are a first-class capability rather than a partner add-on. ## Work orders The central object is the **work order**, generated from a case, a phone-logged incident, a preventive maintenance schedule, an IoT alert, or a customer portal request. It carries the customer, the asset being worked on, the location (with geocoded coordinates), the products and services required, the estimated time, the skills needed, priority, SLA, and a status lifecycle that runs Scheduled → Travelling → On Site → Complete → Posted. Work orders can be simple (one visit, one technician) or complex (multi-day, multi-technician, with dependencies between tasks). **Requirement groups** model the "one person to unload the equipment plus two more to install it plus a certified electrician to sign it off" scenario without contorting the data model. An **incident type** template configures the standard work: the tasks, the parts, the skills, and the estimated duration for a "boiler service" or a "meter replacement". Work orders created from an incident type inherit all of it and can be tuned per booking. ## Scheduling A configurable **schedule board** lets dispatchers drag work orders onto technicians. Filters, colour codes, capacity views, and heat maps make the day's plan legible; conflict detection prevents double-booking. The **schedule assistant** finds available slots for a single work order against skills, working hours, travel time, and stock — the answer to "when could Emma fit this in this week". It's used both by dispatchers picking up ad-hoc bookings and by self-service portals letting customers pick their own slot. **Resource Scheduling Optimization (RSO)** is the optional engine that plans the whole day for the whole fleet — an NP-hard combinatorial problem of routes, skills, time windows, SLA priorities, and travel time. RSO can be run on demand, on a schedule, or continuously; it typically lifts productive time on a fleet by 5–15% over hand-scheduling. It carries its own licence. ## Mobile app Technicians work from a first-class **mobile app** that runs on iOS and Android, online and offline. Offline is the key word: field crews spend a serious portion of the day in low- or no-coverage zones, and an app that only works online is not usable. The app carries the day's bookings, navigation to each site, customer history, asset records including previous work orders on that asset, knowledge articles, parts inventory on the truck, and the forms to record time on and off, parts used, photos of the work, customer signatures, and inspection results. Custom forms are built with the same Power Apps designer used for the model-driven Dataverse apps. **Location tracking** on the mobile app feeds real-time arrival estimates back to dispatch and to the customer. **Vehicle information** (odometer, fuel) can be recorded per visit for fleet compliance. ## Connected assets and IoT A hierarchical **customer asset** model tracks equipment installed at customer sites — parent asset, sub-components, serial numbers, warranty status, maintenance history, technical specs. Warranty and contract entitlements attach to the asset, so the right terms apply to any work on it. **IoT integration** through Azure IoT or Connected Field Service lets devices raise alerts that automatically generate work orders — the "the boiler is going to fail" scenario. Anomaly detection on the device data can decide whether to dispatch a technician, order a spare part in advance, or attempt a remote reset first. When a remote fix works, the incident closes without a truck roll — the highest-margin outcome in field service. **Copilot in Field Service** summarises the work order for a technician on arrival, drafts the completion notes from the technician's spoken summary, and finds relevant knowledge articles inside the mobile app. ## Inventory and parts Truck-stock inventory is tracked per resource. Parts consumed on a job decrement the truck's stock and trigger replenishment against warehouse master data. Non-stock parts are ordered to the customer site or the local depot with lead-time visibility. For manufacturers, **serialised parts** and **batch tracking** carry through, so warranty claims and recall notices tie back to the specific unit installed at a specific site. Integration to Business Central or Dynamics 365 Supply Chain Management makes the warehouse master data the source of truth; Field Service becomes the consumption layer. ## Customer experience Customers receive arrival windows, real-time technician tracking (an ETA that updates as the technician moves), and post-job surveys (via Customer Voice or an external tool). A self-service portal built with **Power Pages** lets customers log requests, see the status of open work, and pick appointment slots. **SLA management** tracks response and resolution commitments per customer or asset. Missed SLAs escalate through configurable rules; kept SLAs feed the customer's account manager for renewal conversations. ## Contract and billing **Agreements** model recurring service — a monthly boiler check, a quarterly compliance inspection — and generate work orders on the agreed cadence with the agreed pricing. The agreement carries the SLA, the included parts, and the labour rates. Billable work rolls up to invoice: labour hours, parts consumed, and travel per the agreement terms. Billing flows out to Business Central, Dynamics 365 Finance, or a third-party ERP through standard integrations. For services businesses running Project Operations alongside Field Service, project accounting picks up the profitability roll-up. ## Licensing Sold per user. Two main SKUs plus a specialised one: **Field Service** — the standard licence for technicians, dispatchers, and admins. Covers all functionality on the desktop and mobile app. **Field Service Contractor** — a lower-cost licence for third-party contractors who need mobile access to receive and complete work orders but no dispatch or admin capability. **Frontline Worker** — a device-based option for high-volume technician fleets where per-user pricing doesn't fit the economics. **Resource Scheduling Optimization** carries a separate add-on licence. Copilot for Field Service is licensed as part of Field Service Enterprise or as an add-on. Attach licensing lets users who already hold another Dynamics 365 app add Field Service at a reduced base price — common in equipment-manufacturer deployments where the same seats run Sales and Field Service. ## Where to go next Follow a job through [the work order lifecycle](https://www.solvingdynamics365.com/guides/work-order-lifecycle-in-field-service), plan a fleet with [Resource Scheduling Optimization](https://www.solvingdynamics365.com/guides/resource-scheduling-optimization), and equip technicians with [the Field Service mobile app](https://www.solvingdynamics365.com/guides/field-service-mobile-app). [Connected Field Service and IoT](https://www.solvingdynamics365.com/guides/connected-field-service-and-iot) covers the device-triggered scenarios. If you are unsure whether this or Project Operations is the right app, [Field Service vs Project Operations](https://www.solvingdynamics365.com/guides/field-service-vs-project-operations) draws the line. ### Frequently asked questions **What is a work order in Dynamics 365 Field Service?** The central record: customer, asset, geocoded location, required products, services and skills, estimated duration, priority, SLA, and a status lifecycle that runs Scheduled, Travelling, On Site, Complete, Posted. Work orders are created from cases, phone calls, preventive maintenance schedules, IoT alerts, or a customer portal. **What is Resource Scheduling Optimization and do I need it?** RSO is the optional engine that plans an entire fleet's day against routes, skills, time windows, SLA priorities, and travel time. It typically lifts productive time 5–15% over hand-scheduling and carries its own licence. Small teams get by with the schedule board and the schedule assistant. **Does the Field Service mobile app work offline?** Yes — offline is the central design requirement. Technicians carry bookings, navigation, asset history, knowledge articles, truck stock, and forms for time, parts, photos, signatures, and inspections, and the app syncs when coverage returns. **How does IoT fit into Field Service?** Through Connected Field Service and Azure IoT, device alerts create work orders automatically. Anomaly detection can decide whether to dispatch, pre-order a part, or attempt a remote reset first — and a successful remote fix closes the incident without a truck roll. **Which Field Service licences exist?** Field Service for technicians, dispatchers, and admins; Field Service Contractor for third parties who only need mobile work-order access; and a device-based Frontline Worker option for high-volume fleets. RSO is a separate add-on, and attach pricing applies to users who already hold another Dynamics 365 app. --- # What is Dynamics 365 Finance? Microsoft's enterprise finance app — multi-entity general ledger, AP/AR, fixed assets, budgeting, and consolidations at scale. Source: https://www.solvingdynamics365.com/guides/what-is-dynamics-365-finance Section: Finance & SCM / Overview & platform Published: 2026-05-01 Updated: 2026-08-27 Dynamics 365 Finance is Microsoft's enterprise-grade financial management application — the upper-tier counterpart to Business Central's finance module. It descends from the **Dynamics AX** general ledger and is aimed at organisations that operate across many legal entities, currencies, and jurisdictions, typically with revenues from a hundred million up into the multi-billions. ## Multi-entity, multi-currency, multi-everything Finance models a **legal entity** as the unit of statutory reporting, with its own chart of accounts, fiscal calendar, currencies, and posting layers. A tenant can hold hundreds of legal entities sharing master data through **data sharing policies** and a **global address book**, with intercompany accounting wired in so that transactions between entities balance automatically. This is where the product earns its price. A group with 40 legal entities across Europe, LATAM, and APAC can share vendors, customers, items, and employees through data-sharing while keeping local statutory postings, local charts of accounts, and local reporting compliant. Businesses that started on one ERP per country and hit the wall trying to consolidate them are the archetypal Finance customer. ## General ledger A single **shared chart of accounts** can be reused across entities, layered with up to ten **financial dimensions** (Department, Cost Centre, Project, Region, Product Line, and so on) and analysed through **Financial Reporting** (the descendant of Management Reporter). Dimensions are set-based rather than segment-based, so a report can slice on any subset independently — a change from segment-based ledgers where the chart of accounts itself carried the analytical structure. Multiple **posting layers** (Current, Operational, Tax) let you post the same transaction differently for statutory and management views without a parallel ledger. The Tax layer is heavily used in jurisdictions where the tax view of an asset or a deferred revenue differs materially from the accounting view. ## Accounts payable and receivable Vendor and customer invoicing, **payment proposals**, settlements with cash discounts and write-offs, ageing, and centralised payments across legal entities. Strong support for **electronic invoicing** through the Globalisation Studio's e-invoice profiles per country, **bank automation** through direct bank feeds or file-based statement import, and **AI-assisted matching** for payments and invoices. Vendor collaboration lets suppliers submit invoices directly through a portal; on the customer side, **customer portals** and **B2B commerce** integration cover self-service. ## Fixed assets and revenue recognition Multiple **depreciation books** run in parallel per asset — tax, IFRS, US GAAP, and internal management can all coexist on the same physical asset. Proposals for depreciation, transfers, splits, and disposals are journal-driven; asset lifecycle costs (acquisition, capitalisation, disposal, impairment) roll up into the general ledger through configurable posting profiles. The dedicated **Revenue Recognition** module covers ASC 606 and IFRS 15 with bundles, allocations, contract management, and residual-method treatment. It replaced the older Revenue Recognition in Sales and Marketing and is the current recommended path for subscription and services businesses. ## Budgeting, planning, and consolidations **Budget control** with optional commitment accounting stops purchase orders and expense reports that would overrun a budget bucket. **Budget planning** workflows let distributed contributors build a consolidated plan through Excel templates and route-based approvals. Neither replaces a full corporate-performance-management tool (Anaplan, OneStream, Board), but for mid-complexity groups they're often sufficient. Native **consolidations** of multiple legal entities into a reporting entity — with currency translation, intercompany eliminations, and adjustments — again cover moderate complexity without a separate CPM system. For very large or highly acquisitive groups, a specialised CPM product is still the norm. ## Tax and regulatory Country-specific localisations cover VAT / sales tax calculation, statutory reporting, electronic invoicing, and audit files (SAF-T, GDPdU, DATEV, SII) for dozens of countries. Microsoft maintains the localisation packs, and the ISV ecosystem fills gaps where local formats change ahead of Microsoft's release cycle. The **Globalisation Studio** and the underlying **Electronic Reporting** framework are configurable — a partner or in-house team can define a new e-invoice format or a statutory report without code, which matters as more countries roll out real-time e-invoicing mandates. ## Licensing and implementation Sold per user, with **Full User**, **Activity User**, and **Team Member** tiers. Attach licenses reduce the cost of adding a second Dynamics 365 app to users who already hold one. The Team Member license is genuinely restricted — read-only for finance, with narrow write access — so most core finance staff need a Full User. Implementation almost always involves a global system integrator: Avanade, EY, Deloitte, PwC, Sikich, or a large regional partner. Projects run from six months for a subsidiary rollout to two years or more for a global template. Post go-live, the shared platform means Finance and Supply Chain roll forward together on Microsoft's release cadence — two major waves a year plus monthly service updates. ## Where to go next Go deeper with [financial dimensions in Dynamics 365 Finance](https://www.solvingdynamics365.com/guides/financial-dimensions-in-dynamics-365-finance), [environments and LCS](https://www.solvingdynamics365.com/guides/dynamics-365-finance-environments-and-lcs), and the update discipline in [One Version and updates](https://www.solvingdynamics365.com/guides/dynamics-365-one-version-and-updates). [Year-end close in F&O](https://www.solvingdynamics365.com/guides/year-end-close-in-f-and-o) shows the periodic routines in practice. If you are deciding between tiers, [Business Central vs Finance and Operations](https://www.solvingdynamics365.com/guides/business-central-vs-finance-and-operations) draws the line, and the [Finance and Operations pricing page](https://www.solvingdynamics365.com/pricing/finance-and-operations) has current list prices. ### Frequently asked questions **What is the difference between Dynamics 365 Finance and Business Central?** Finance is the enterprise-tier ledger descended from Dynamics AX, built for groups with many legal entities, currencies, and statutory regimes; Business Central is the SMB ERP. Finance costs roughly three times more per user, is implemented by global system integrators over six months to two years, and pays off when you need a shared chart of accounts, posting layers, native consolidations, and dozens of localisations in one tenant. **Is Dynamics 365 Finance the same product as Finance and Operations?** Finance is one half of what Microsoft calls the Finance and Operations apps. Finance and Supply Chain Management share one application core, one database, and one object model — effectively one product licensed as two — so a Finance-only deployment can add Supply Chain later without integration work. **How many financial dimensions does Dynamics 365 Finance support?** Up to ten financial dimensions on a shared chart of accounts. They are set-based rather than segment-based, so a report can slice on any subset independently without the chart of accounts having to carry the analytical structure. **Does Dynamics 365 Finance handle IFRS 15 and ASC 606 revenue recognition?** Yes. The dedicated Revenue Recognition module covers bundles, allocations, contract management, and residual-method treatment. It replaced the older revenue recognition feature in Sales and Marketing and is the recommended path for subscription and services businesses. **Who implements Dynamics 365 Finance and how long does it take?** Almost always a global system integrator or a large regional partner. Six months for a subsidiary rollout is the fast end; a global template takes two years or more, and consulting effort dominates total cost in the first two years. --- # What is Dynamics 365 Human Resources? Microsoft's HR core app — employee records, organisational structure, benefits, leave, and compensation, integrated with payroll partners. Source: https://www.solvingdynamics365.com/guides/what-is-dynamics-365-human-resources Section: Customer Engagement / Human Resources Published: 2026-05-01 Updated: 2026-08-27 Dynamics 365 Human Resources is Microsoft's HR application. It is most accurately described as **HR core** — the system of record for employees, organisations, positions, benefits, leave, and compensation — designed to integrate with specialist payroll, talent acquisition, and learning systems rather than replace them. ## Where it fits The HR software market splits into three parts. **Talent acquisition** (Workday Recruiting, Greenhouse, SmartRecruiters). **HR core** (Workday HCM, Oracle HCM, SAP SuccessFactors, UKG Pro, Dayforce HCM, Dynamics 365 HR). **Payroll** (Dayforce, ADP, UKG, SD Worx, country-specific specialists like Fortnox in Sweden). The three are increasingly bought together as suites but they solve different problems. Dynamics 365 HR is a competitive HR-core product for Microsoft-centric organisations that don't need a full end-to-end Workday-shaped suite. It wins on the Microsoft integration angle — Teams-native workflows, Copilot in HR, F&O integration, Entra ID identity — and on the price for organisations already committed to the Microsoft stack. It loses when the buyer wants talent acquisition, HR core, and full multi-country payroll from one vendor with one contract, which is the Workday-scale play. ## Workers, jobs, and positions The core data model distinguishes three concepts that HR practitioners take for granted but that engineers building integrations often confuse. A **job** is a generic role definition. "Accountant", "Welder", "Software Engineer". It carries the job description, the compensation grade, the required skills. Jobs live at the organisational level, not tied to any specific person or reporting line. A **position** is a specific instance of a job somewhere in the org chart. It has a reporting line (the manager's position), FTE (full or fractional), location, cost centre, budget, and start / end dates. Positions can be **vacant** (approved but unfilled), **filled** (someone occupies them), or **planned** (approved for a future date). A **worker** is a person, whether currently employed, on leave, terminated, or a contingent contractor. One worker can hold multiple positions (a fractional CFO who is CFO at two group companies), and positions can be filled by different workers over time. This model matters because most people-driven decisions in HR happen at the position level (headcount planning, budgeting, org-chart moves) while payroll and compliance happen at the worker level. Getting the two aligned is the primary integration job when Dynamics 365 HR feeds a payroll system. ## Personnel administration Employee records, contracts, identification numbers, dependents, addresses, work eligibility documents, and a full audit history of changes are first-class. The audit history matters for compliance — an HR system that can't answer "when did we change this employee's grade and who approved it" fails regulatory review. Self-service through the **Employee Self-Service** workspace lets staff update personal data, view payslips (where the payroll integration surfaces them), request leave, enrol in benefits, and complete required training. **Manager Self-Service** covers team calendars, approval queues, position management for the manager's org, and compensation planning. Both self-service surfaces embed in Teams — Copilot for HR pushes into the Teams-native experience for onboarding-question answering, policy lookup, and self-service triage of common employee requests. ## Leave and absence Leave plans are highly configurable — **accrual rules** (fixed per period, based on service length, based on grade, blended), **carry-over policies**, **blackout periods** (no leave during month-end close, during peak retail), **multi-level approval** (line manager, then departmental), **calendar-aware deductions** (weekend and holiday awareness), and **country-specific holiday calendars**. Manager self-service includes team calendars showing who is off when, approval queues with SLAs, and delegation for when a manager is themselves on leave. **Copilot** in leave handling drafts responses to leave requests based on team coverage — useful for high-volume operational teams where a manager approves dozens of requests a week. ## Benefits **Benefit plans** with eligibility rules (grade, tenure, geography), life-event handling (marriage, child birth, relocation), vendor integration via standard files, and worker enrolment flows. **Open enrolment** events are supported with date-bounded windows and automated communication. The benefits module is more North America-centric than the rest of the product — the deep US health-insurance flows have more depth than the equivalent for European countries where statutory frameworks cover more of the ground. For non-US customers with complex benefits (private health plans, share schemes, salary sacrifice), the benefits module is a starting point rather than a complete answer. ## Compensation Fixed and variable compensation plans, **grades and levels**, merit-based and performance-based increases, eligibility rules, and **compensation review** processes routed through workflow. Comp reviews can be annual, bi-annual, or role-specific; multi-manager sign-off is standard. Variable compensation covers bonus plans, commissions (for revenue-carrying roles), retention plans, and stock plans. Integration to payroll ensures the awarded amounts flow through to pay runs; integration to Sales (for commission plans) can tie payouts back to booked revenue. ## Performance and skills Performance reviews, goals, competency models, and skills tracking are included at a baseline level. The depth is adequate for standard annual reviews and OKR-style goal management. Deeper **talent-development experiences** — 360 feedback, structured mentorship, career-pathing platforms, learning experience platforms — typically integrate from third parties (Cornerstone, Docebo, Culture Amp). **Skills** as a first-class concept is getting more attention across the HR software category, and Dynamics 365 HR has been building out its skills framework alongside the wider Microsoft skills story (which connects to Viva Skills and to Copilot's understanding of what employees do). ## Payroll Microsoft does **not** ship full payroll for most countries. This is a deliberate product decision — payroll is deeply country-specific, changes with every fiscal year, and requires country-specific certification. Microsoft chose not to enter that battle. Instead, Dynamics 365 HR exposes APIs and pre-built integrations to **Dayforce, ADP, UKG, SD Worx**, and others. Customers select a payroll partner per country and integrate through the standard hooks. The trade-off is honest: another vendor to manage, but proven country-specific payroll rather than a Microsoft attempt at a compromise. For organisations that want everything in Microsoft, this is the biggest gap. For organisations that are pragmatic about buying specialist payroll where the specialists are strongest, it is the right call. ## Architecture Dynamics 365 HR was originally a separate app with its own environment model. In 2023 Microsoft **merged it back into the Finance and Operations stack**, so it now shares the F&O data model, runs in the same environments as Finance and SCM, and uses the same platform tooling. For customers running F&O this consolidation is helpful — one platform, one deployment story, integrated data. For customers on the standalone HR product, the merger required a migration project. For new implementations in 2026, the merged model is the only option. **Dataverse-side integration** (to Sales, Customer Service, Field Service) is via **Dual-write** — real-time bidirectional sync between the F&O side (where HR lives) and Dataverse (where the CRM apps live). This is important for scenarios like Field Service technicians needing HR data (skills, certifications) or Sales representatives seeing quota assignments from HR compensation data. ## Copilot in HR **Copilot for HR** covers three main workflows: - **Employee self-service Copilot** — answers routine employee questions in Teams (leave policy, benefits detail, payroll timing) from HR policy documents. - **HR triage Copilot** — for HR business partners, summarises employee history and suggests handling for a specific case. - **Compensation planning Copilot** — assists managers building comp proposals with peer benchmarking and budget-fit checking. Copilot for HR is a newer addition to the Copilot roster and its depth trails the more established Copilot for Sales / Service, but the employee self-service surface is the highest-leverage one for large organisations where HR business partners are stretched. ## Licensing Per worker per month for the core product, with different price points for full HR functionality vs employee self-service. Attach licensing lets HR sit alongside other Dynamics 365 apps at a reduced base price. The economics work best for organisations with 500+ employees and a serious HR core requirement. Below that scale, standalone payroll-plus-basic-HR from a specialist (Fortnox, Personio, HiBob) is often cheaper and quicker to deploy. ## The short version Dynamics 365 HR is Microsoft's HR core. It handles employee records, positions, leave, benefits, and compensation, and integrates with specialist payroll systems rather than replacing them. Sits on the F&O platform since 2023. Best fit for Microsoft-shop organisations that want HR core inside the same platform as their finance and operations, and that are pragmatic about buying payroll from a specialist. ## Where to go next Module guides: [leave and absence](https://www.solvingdynamics365.com/guides/dynamics-365-hr-leave-and-absence), [benefits management](https://www.solvingdynamics365.com/guides/dynamics-365-hr-benefits-management), and [performance management](https://www.solvingdynamics365.com/guides/dynamics-365-hr-performance-management). Because HR now lives on the Finance and Operations platform, [what is Dynamics 365 Finance](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-finance) describes the environment it runs in, and [dual-write](https://www.solvingdynamics365.com/guides/dynamics-365-dual-write-integration) is how its data reaches the CRM apps. ### Frequently asked questions **Does Dynamics 365 Human Resources include payroll?** Not for most countries. Microsoft deliberately integrates with specialist payroll providers — Dayforce, ADP, UKG, SD Worx, and country specialists — through APIs and pre-built connectors rather than shipping its own multi-country payroll. **What is the difference between a job, a position, and a worker?** A job is a generic role definition; a position is a specific instance of that job in the org chart with a reporting line, FTE, cost centre, and dates; a worker is a person who fills positions over time. Headcount planning happens at position level, payroll and compliance at worker level. **Is Dynamics 365 HR a separate product from Finance and Operations?** Not any more. In 2023 Microsoft merged it back into the Finance and Operations stack, so it shares the F&O data model, environments, and tooling. For new implementations the merged model is the only option. **What size organisation is Dynamics 365 HR right for?** The economics work best above roughly 500 employees with a genuine HR-core requirement. Below that, a specialist payroll-plus-basic-HR product such as Fortnox, Personio, or HiBob is often cheaper and faster to deploy. **How does HR data reach the CRM apps?** Through dual-write, which syncs the Finance and Operations side (where HR lives) with Dataverse. That is how Field Service can see technician skills and certifications, or Sales can see quota assignments derived from compensation data. --- # What is Dynamics 365 Project Operations? Microsoft's project-based services app — opportunity to cash for professional-services firms, with resourcing, scheduling, time, expenses, billing. Source: https://www.solvingdynamics365.com/guides/what-is-dynamics-365-project-operations Section: Customer Engagement / Project Operations Published: 2026-05-01 Updated: 2026-08-27 **Dynamics 365 Project Operations** is Microsoft's professional-services automation (PSA) application — the system that runs an opportunity-to-cash flow for businesses that sell project work. Typical customers are consulting firms, marketing and creative agencies, IT services firms, engineering practices, and architecture firms. Project Operations sits deliberately across the CRM/ERP boundary because a services business needs both sides of the house tightly integrated: an opportunity in the sales funnel has to turn into a resourced project, and the hours consultants log against that project have to turn into revenue and cost postings in the ledger. ## Where it fits In the wider PSA market, Project Operations competes with **Salesforce Services Cloud (Copado / Financial Force lineage)**, **Microsoft Dynamics 365 successors like Certinia**, **Deltek**, and specialist products like **Kantata**, **Kimble** (now Kantata), **Replicon PSA**, and **Wrike / Smartsheet** at the lighter end. It wins when the buyer already runs Microsoft business apps (Sales in front, F&O or Business Central at the back), when the deep Copilot integration matters, and when the shared Dataverse means an opportunity, a project, and an invoice can share the same account record without a middleware layer. The line between Project Operations and simpler project management tools matters. Wrike, Smartsheet, and Microsoft Planner cover task management well but they are not PSAs — they don't touch billing, cost accounting, or revenue recognition. Project Operations is a PSA. If the business needs a WBS but not project accounting, it is over-scoped; if the business needs project accounting, task-tracker tools are under-scoped. ## The three deployment modes Project Operations is one product but operates in three modes depending on the customer's back office. The mode decides most of the architecture and much of the implementation cost. **Lite deployment** — runs entirely on Dataverse, with financial postings integrated to **Business Central**, QuickBooks, Xero, or SAP via APIs. The right fit for SMB services firms whose financials sit in BC or a small-business accounting system. Fastest to deploy, cheapest to run, ceiling at moderate complexity. **Resource / non-stocked deployment** — runs on the **Finance and Operations** stack with full F&O accounting integration. Time and expense post directly to F&O's general ledger through project accounting; there is no middleware. Right for services firms already on F&O or heading there; also right for large services firms whose complexity Lite cannot handle (multi-currency, multi-entity project accounting, IFRS 15 revenue recognition). **Stocked / production deployment** — extends the F&O deployment with manufacturing and inventory. Right for firms that build and install physical goods as part of the project — engineering firms delivering equipment, construction firms with material take-offs, systems integrators building custom hardware plus services. Combines project services with deliverable goods on the same work order and the same project profit line. The mode choice is not reversible without a re-implementation, so it deserves serious analysis at the start of a Project Operations engagement — not as an afterthought. ## Opportunity to quote Sales pursues an opportunity in the Sales app; when it's qualified as project work, a **project quote** is configured with phases, tasks, roles, hours, and billing terms. Billing types cover fixed-price, time-and-materials, capped T&M, milestone billing, and mixed contracts where different work streams inside one contract carry different terms. The quote is priced from a **rate card** by role, seniority, and geography, adjusted with client-specific discounts and prepaid retainers, and reviewed through a configurable approval flow. On win, it converts to a **project contract** that carries the pricing, the milestones, the billing schedule, and the deliverables into project execution. ## Project plan and WBS A **work breakdown structure (WBS)** with tasks, dependencies, durations, effort estimates, and assignments. Baseline and current schedules are tracked separately so slippage against the baseline is visible. Resourcing is done from a **resource hub** that shows availability, skills, location, cost rate, and current utilisation. Assignment can be by named resource (Emma is on this) or by generic role (a senior Java developer, to be named later). Generic assignments carry through the plan until they're replaced with real names, so the plan can be built before the resource conversations are finished. For firms coming from Microsoft Project or Smartsheet, the WBS experience is different — simpler in some places (no Gantt-chart theatre), richer in others (integrated resource cost, integrated billing). The learning curve is short but the mental model shift matters. ## Time and expenses Consultants enter time on a weekly **timesheet** and expenses through receipts and policy-aware approvals. Both flow through workflow approval — the project manager first, then whatever additional approval the policy demands (an expense over a threshold routes to the finance director, mileage over a limit needs a business-purpose note). Approved time and expenses post to the project for billing and cost. In Lite deployment, the postings flow to the connected finance system; in F&O deployments, they post directly to the general ledger, WIP, and project accounting through the F&O project posting framework. **Copilot in Project Operations** speeds up time entry — draft a week's timesheet from the consultant's Teams meetings and calendar, review, adjust, submit. Not perfect on the first try, but a serious lift over a blank grid. ## Billing Invoicing runs at the cadence defined in the contract — monthly retainers, milestone billing, on-completion, on-approval, or scheduled instalments. Invoices can hold multiple billable types (T&M plus fixed-fee plus expense recovery) on a single invoice, with multiple currencies where the contract requires it. Drafts are routed through review by the engagement partner, the client-partner, or finance — configurable — before posting to the back-office system for collection. Credit notes and re-billing follow the same flow in reverse. ## Reporting Built-in dashboards for project margin, resource utilisation, billable mix (billable vs non-billable hours), backlog, forecast vs actual, and cash forecast from open invoices. Practice-level reports roll up the individual projects into service line and firm KPIs. The reporting depth is adequate for most services firms; deeper analytics ship as a Power BI app on top of Project Operations data in Dataverse or Fabric. Firms that need very rich portfolio management (predictive cash forecasting, capacity planning across a global practice) typically layer a specialist tool on top for the CFO reporting even while keeping Project Operations as the source of truth. ## Integration Project Operations shares Dataverse with Sales, Customer Service, and Field Service, so an opportunity in Sales flows through to a project and a client account carries the full history. Financial postings go to F&O directly (in F&O deployments) or to BC / third-party accounting via connectors (in Lite deployments). **Copilot** across the Dynamics 365 family means a project manager can query pipeline, resource load, and billing status in natural language across apps. **Power BI** ties the operational data to whatever wider CFO reporting matters. ## Licensing Sold per user. Two SKUs plus a lightweight one: **Project Operations** — the standard licence for project managers, resource managers, and consultants who need the full application. **Project Operations — Team Member** — a lightweight licence for consultants who only need to submit timesheets and expenses. Priced substantially lower than the full licence; the right choice for the majority of a services firm's headcount. Attach licensing lets Sales seats add Project Operations at a reduced price — common where account managers pursue and stay engaged on project work. ## The short version Project Operations is Microsoft's PSA. It runs the opportunity-to-cash flow for services firms. Three deployment modes (Lite on Dataverse, F&O for larger firms, Stocked for build-plus-services) — the choice decides the whole architecture. It fits Microsoft-shop services businesses well; it competes with specialist PSAs on capability and typically wins on integration into the wider Microsoft business apps stack. ## Where to go next The deployment-mode decision is expanded in [Project Operations deployment types](https://www.solvingdynamics365.com/guides/project-operations-deployment-types). Daily operation is covered in [time and expense](https://www.solvingdynamics365.com/guides/project-operations-time-and-expense) and [resource management](https://www.solvingdynamics365.com/guides/project-operations-resource-management). For the two adjacent products people confuse it with, see [Field Service vs Project Operations](https://www.solvingdynamics365.com/guides/field-service-vs-project-operations) and [Business Central Jobs vs Projects](https://www.solvingdynamics365.com/guides/business-central-jobs-vs-projects). ### Frequently asked questions **What are the three Project Operations deployment modes?** Lite runs on Dataverse with financials in Business Central or a third-party accounting system; Resource (non-stocked) runs on Finance and Operations with direct project accounting; Stocked (production) adds manufacturing and inventory for firms that build and install goods. The choice is not reversible without a re-implementation. **Is Project Operations a project management tool like Microsoft Project or Smartsheet?** No — it is a professional services automation (PSA) system that runs opportunity-to-cash: quoting, resourcing, time and expense, billing, and project accounting. If you need a work breakdown structure but no project accounting it is over-scoped; if you need project accounting, task trackers are under-scoped. **Which billing models does Project Operations support?** Fixed-price, time-and-materials, capped time-and-materials, milestone billing, and mixed contracts where work streams inside one contract carry different terms. Pricing comes from a rate card by role, seniority, and geography, adjusted with client-specific discounts and retainers. **Do all consultants need a full Project Operations licence?** No. The Team Member licence covers consultants who only submit timesheets and expenses and is the right choice for most of a services firm's headcount. Project managers, resource managers, and consultants who need the full application take the full licence. **Who does Project Operations compete with?** Certinia, Deltek, Kantata (formerly Kimble), Replicon PSA, and at the lighter end Wrike and Smartsheet. It wins when Sales, Copilot, and Business Central or Finance and Operations are already in place and a shared account record across opportunity, project, and invoice matters. --- # What is Dynamics 365 Sales? Microsoft's CRM app for B2B sales teams — leads, opportunities, forecasting, and the Copilot for Sales experience. Source: https://www.solvingdynamics365.com/guides/what-is-dynamics-365-sales Section: Customer Engagement / Sales Published: 2026-05-01 Updated: 2026-08-27 Dynamics 365 Sales is Microsoft's CRM app for B2B sales teams. It is the modern, Dataverse-native descendant of the original Microsoft Dynamics CRM Sales module, and the centre of gravity for everything Microsoft does in the front office. ## Where Sales fits in the Dynamics 365 family Sales is the flagship of the CRM-lineage apps. Around it sit **Customer Service** (case management), **Field Service** (dispatch and on-site work), **Marketing** and **Customer Insights** (journeys and data unification), and **Project Operations** (services-firm sales-to-delivery). All of them run on the same **Dataverse** with the same core Account, Contact, and Activity tables. That shared model is the primary reason a Microsoft-shop CRO picks Sales over Salesforce or HubSpot: an account created in Sales is the same account that a Customer Service agent sees, that a Field Service technician's work order references, and that a Business Central or Finance ERP receives an order for. That said, Sales is not automatically the best B2B CRM in every context. Salesforce still has the deeper ecosystem for pure sales orgs; HubSpot still wins at the SMB end. Sales earns its place when the buyer values the tight integration into Microsoft 365, Copilot, and Dynamics 365 ERP over category-leading CRM features in isolation. ## The data model Sales runs on Dataverse with a small set of well-defined tables: **Lead**, **Opportunity**, **Account**, **Contact**, **Quote**, **Order**, **Invoice**, and the **Product** catalog with **price lists** and **discount lists**. Activities (phone calls, emails, appointments, tasks) hang off every record, giving a single timeline view per customer. The lead-versus-opportunity distinction is deliberate. A lead is an un-qualified potential — a name from a form, a business card, a Sales Navigator export — that has not yet been vetted. Qualifying it creates the Account, Contact, and Opportunity records that carry the pipeline forward. Some organisations skip leads entirely and enter opportunities directly; that is a valid choice and Sales supports it. Products, price lists, and discount lists let quotes and orders be built from a governed catalog rather than free text — important once the sales org is large enough that discount discipline matters, and mandatory if the CRM feeds an ERP downstream. ## Process A lead is qualified into an opportunity; the opportunity moves through a configurable **business process flow** (typically Qualify → Develop → Propose → Close) with stage-gated fields and automated next-best-action prompts; from there it converts to a quote, order, or invoice. The whole lifecycle is configurable, including stages, branches, KPIs, and the tables the flow spans. Business process flows are Microsoft's answer to the tension between "give sellers a guided experience" and "let the sales manager tune the process without a developer". They are declarative, versioned, and can differ per business unit — a global org can run one BPF for enterprise deals and another for velocity deals. ## Forecasting Sales includes a **forecasting** module that rolls opportunities up the sales hierarchy with submitted, projected, committed, and best-case columns. Forecasts are versioned, manager-adjustable, and snapshotted for trend analysis. Multiple forecast types can coexist — territory-based, product-based, seller-based — and each has its own configuration. For CROs coming from Salesforce Forecasting or Clari, the feature is capable but not category-leading. It covers the standard weekly pipeline call well; deeper AI-driven predictive forecasting benefits from feeding the Sales pipeline into a purpose-built analytics tool. ## Sales accelerator and sequences A separate workspace called the **sales accelerator** sequences daily prospecting work: the seller's queue of leads and opportunities is prioritised by a scoring model, with **sequences** — configurable step-by-step cadences of emails, calls, tasks, and waits — driving the day. Sequences are the closest analogue to Outreach and Salesloft; Microsoft has been closing the gap steadily. Combined with **conversation intelligence** (call and meeting transcription with tracked keyword and sentiment analysis), the accelerator turns Sales into a genuine SDR/BDR tool, not only an opportunity tracker. ## Copilot for Sales Copilot for Sales is the AI layer that sits inside Outlook, Teams, and the Sales app itself. It summarises emails, drafts replies, prepares meeting briefings, extracts notes and next steps back to CRM records, and answers natural-language questions across the pipeline ("show me all deals over 100k that slipped from Q2"). It also integrates the reverse direction — a seller sitting in Outlook sees the CRM context for the person they are emailing, without switching apps. Copilot for Sales is separately licensed as an add-on to Sales Enterprise, or bundled into Sales Premium. It is also sold as a standalone that connects to Salesforce CRM for organisations that want the Copilot experience without moving off Salesforce. ## Integration with the Microsoft cloud Sales is tightly integrated with Outlook (email tracking, appointment sync), Teams (embedded records, meeting recordings auto-attached with Copilot summaries), LinkedIn Sales Navigator (insights, InMail from within CRM, contact import), and Power BI (out-of-the-box pipeline dashboards). Customer Service, Field Service, Marketing, and Customer Insights run on the same Dataverse, so the same Account record carries through. Integration to the ERP side — Business Central or Finance and Supply Chain — is standard: quotes and orders can flow from Sales into ERP for fulfilment, invoicing, and settlement. **Dual-write** provides real-time bidirectional sync for F&O; connectors and Power Automate flows cover Business Central. ## Licensing Sold per user, in **Professional**, **Enterprise**, **Premium**, and **Relationship Sales** tiers. **Professional** is a light SKU without the deeper enterprise features (no forecasting, limited customisation) — rarely the right pick for a serious sales org. **Enterprise** is the most common tier and the working baseline. **Premium** bundles Copilot for Sales and the sales accelerator's advanced capabilities. **Relationship Sales** is Enterprise plus LinkedIn Sales Navigator, priced for account-based sellers. Attach licensing lets users who already hold another Dynamics 365 app add Sales at a reduced base price, which matters for organisations rolling out multiple Dynamics 365 apps to the same seat. ## Where to go next For the head-to-head most buyers run, see [Dynamics 365 Sales vs Salesforce](https://www.solvingdynamics365.com/guides/dynamics-365-sales-vs-salesforce). Going deeper on the modules: [forecasting](https://www.solvingdynamics365.com/guides/dynamics-365-sales-forecasting-deep-dive), [sequences in the sales accelerator](https://www.solvingdynamics365.com/guides/sequences-in-the-sales-accelerator), [Copilot for Sales features](https://www.solvingdynamics365.com/guides/copilot-for-sales-features), and what [Sales Premium](https://www.solvingdynamics365.com/guides/dynamics-365-sales-premium-features) adds. Current list prices are on the [Sales pricing page](https://www.solvingdynamics365.com/pricing/sales). ### Frequently asked questions **What is the difference between a lead and an opportunity in Dynamics 365 Sales?** A lead is an unqualified potential — a form fill, a business card, a Sales Navigator export. Qualifying it creates the Account, Contact, and Opportunity records that carry the pipeline forward. Organisations that skip leads and create opportunities directly are making a valid, supported choice. **Which Dynamics 365 Sales licence should most organisations buy?** Sales Enterprise. Professional is a light SKU without forecasting and with limited customisation; Premium adds Copilot for Sales and the advanced sales accelerator features; Relationship Sales bundles Enterprise with LinkedIn Sales Navigator for account-based sellers. **Does Dynamics 365 Sales include forecasting?** Yes, on Enterprise and above. Forecasts roll opportunities up the sales hierarchy with submitted, projected, committed, and best-case columns, are manager-adjustable, versioned, and snapshotted. It covers the weekly pipeline call well; deeper predictive forecasting benefits from a purpose-built analytics tool on top. **Can Dynamics 365 Sales replace an SDR tool like Outreach or Salesloft?** For many teams, yes. The sales accelerator prioritises the daily work queue, sequences run configurable cadences of emails, calls, tasks, and waits, and conversation intelligence adds call transcription with keyword and sentiment tracking. Microsoft has been closing the gap with the specialist tools steadily. **How does Dynamics 365 Sales integrate with the ERP side?** Quotes and orders flow from Sales into Business Central or Finance and Supply Chain Management for fulfilment, invoicing, and settlement. Dual-write provides real-time bidirectional sync with Finance and Operations; connectors and Power Automate flows cover Business Central. --- # What is Dynamics 365 Supply Chain Management? Microsoft's enterprise supply chain app — manufacturing, warehouse, transportation, planning, and asset management at scale. Source: https://www.solvingdynamics365.com/guides/what-is-dynamics-365-supply-chain Section: Finance & SCM / Overview & platform Published: 2026-05-01 Updated: 2026-08-27 Dynamics 365 Supply Chain Management (SCM) is Microsoft's enterprise-grade application for procurement, manufacturing, inventory, warehousing, transportation, and master planning. Like Dynamics 365 Finance, it descends from Dynamics AX, and is built for organisations whose operational complexity has outgrown Business Central — multi-site manufacturers, large distributors, retailers, and process industries. ## Where it fits SCM is the operations half of what Microsoft calls the **Finance and Operations apps** (F&O). Finance and SCM share a single application core, a single database, and a single object model — they are effectively one product sold as two. A deployment that runs both gets a unified back office with no integration between finance and operations; a deployment that runs only Finance is skipping the operational modules but sitting on the same platform, ready to add them later. The target customer is a manufacturer, distributor, or asset-heavy operator with revenues from a few hundred million upwards. Below that scale, Business Central is usually the right fit, and its light-manufacturing capabilities cover simpler assembly workflows. Above it — global groups running across dozens of legal entities with heavy shop-floor operations — SCM competes directly with SAP S/4HANA and Oracle NetSuite / Fusion. ## Inventory and warehouse Item master with sophisticated **product dimensions** (size, colour, style, configuration) and **tracking dimensions** (batch, serial, owner), multi-site warehousing, and full **Warehouse Management (WMS)** with handheld scanning, wave and load management, configurable **mobile device menus**, license plate tracking, cluster picking, and slotting. Directed put-away and picking are the norm, not the exception. The WMS is deep enough that it replaces many standalone WMS products, and it can be **advanced-warehouse-enabled** on some warehouses while others operate in the simpler basic warehousing mode — useful for phased rollouts. Consignment inventory, vendor-owned stock, and split-ownership scenarios are all supported. ## Procurement Vendor catalogues, sourcing, purchase requisitions with configurable approval workflows, RFQs with sealed-bid evaluation, purchase agreements (blanket orders), a **vendor collaboration portal** for suppliers who don't have EDI, and three-way matching between purchase order, receipt, and invoice. For process-heavy industries, category management structures the spend hierarchy, and integration to **Microsoft Cloud for Sustainability** and to third-party spend-analytics tools brings emissions and category insight into the buying process. ## Manufacturing SCM's manufacturing coverage is broad. **Discrete** manufacturing uses production BOMs and routings; **process** manufacturing uses formulas and co/by-products with catch-weight; **lean** manufacturing supports kanban and takt-based flow. All three modes can coexist on the same site. Beyond the modes, the shop-floor toolkit is comprehensive: work centres and resources with capabilities and calendars, **finite scheduling**, subcontracting, engineering change management, batch attributes (viscosity, potency, purity) for regulated industries, and shop floor control with clock-in and job registration. **Product Configuration Model** (PCM) supports engineer-to-order and configure-to-order flows. Manufacturing execution below that layer typically integrates through the **Manufacturing Execution System (MES) integration** hooks or through partner products; SCM is deliberately not an MES. ## Master planning **Planning Optimization** is a high-performance, in-memory service that replaced the older MRP engine in the last few years. It runs net-change or full regenerative plans in minutes instead of hours, scales across hundreds of sites, and separates planning from the transactional database so long plans don't lock the system. On top of Planning Optimization sit **demand forecasting** (statistical baseline forecasts) and the more recent **demand planning** module (collaborative planning workflows). Together they close the loop from statistical forecast to consensus plan to net requirement to purchase or production order. ## Transportation and asset management Inbound and outbound transportation with rate shopping across carriers, route planning, load building, freight reconciliation, and shipping-carrier integration (parcel and LTL). Not a full TMS replacement for the largest 3PL operators, but adequate for most in-house transportation needs. **Asset Management** covers work orders, preventive maintenance, condition-based monitoring, fault management, and IoT signal integration for industrial equipment — increasingly important for asset-heavy operators (utilities, mining, manufacturing plants) that want the maintenance system on the same platform as inventory and procurement. ## Adjacent products Two products sit around SCM and are commonly deployed with it. **Intelligent Order Management** (sold separately) orchestrates orders across sales channels and fulfilment locations — useful for omnichannel retailers where the "where does this order ship from" decision is non-trivial. **Dynamics 365 Commerce** is the retail store solution (POS, e-commerce, clienteling); it uses SCM as its inventory and pricing back end. For the CRM side of the business, SCM shares Dataverse via **Dual-write**, so a Sales opportunity in the Sales app or a case in Customer Service can flow through to a sales order or a return in SCM without custom integration. ## Licensing and implementation SCM is licensed per user, typically alongside Finance under the F&O bundle. **Full users**, **Activity users**, and **Team Members** provide different price points depending on access needs. Device licenses cover shop-floor terminals and warehouse handhelds. Implementations are large — six months at the very fast end, more commonly a year and up — and are almost always led by a global system integrator. The functional footprint is wide (finance, procurement, warehouse, manufacturing, transportation) and every area has depth, so consulting effort dominates the total cost of ownership in the first two years. ## Where to go next The planning engine is covered in [master planning runs](https://www.solvingdynamics365.com/guides/master-planning-runs-in-f-and-o) and [Planning Optimization](https://www.solvingdynamics365.com/guides/dynamics-365-planning-optimization); the warehouse in [warehouse mobile workflows](https://www.solvingdynamics365.com/guides/warehouse-mobile-workflows-in-f-and-o); the three manufacturing modes in [discrete vs process vs lean](https://www.solvingdynamics365.com/guides/discrete-vs-process-vs-lean-manufacturing-in-f-and-o). The bridge to the CRM apps is [dual-write](https://www.solvingdynamics365.com/guides/dynamics-365-dual-write-integration). Current list prices are on the [Finance and Operations pricing page](https://www.solvingdynamics365.com/pricing/finance-and-operations). ### Frequently asked questions **What does Dynamics 365 Supply Chain Management cover?** Procurement, inventory, full warehouse management with handheld scanning, discrete, process, and lean manufacturing, master planning through Planning Optimization, transportation, and asset management — all on the same application core as Dynamics 365 Finance. **When should I choose Supply Chain Management over Business Central?** When operational complexity has outgrown Business Central: multi-site manufacturing, directed put-away and picking, process manufacturing with catch-weight, finite scheduling, or planning across hundreds of sites. Below a few hundred million in revenue, Business Central and its light manufacturing usually fit better. **Is Dynamics 365 Supply Chain Management an MES?** No. It covers shop-floor control, job registration, and finite scheduling but deliberately stops short of a manufacturing execution system. Machine-level execution integrates through Microsoft's MES integration hooks or partner products. **What is Planning Optimization?** The in-memory master planning service that replaced the older MRP engine. It runs net-change or regenerative plans in minutes rather than hours, scales across hundreds of sites, and runs outside the transactional database so long plans do not lock the system. **How does Supply Chain Management connect to the CRM apps?** Through dual-write, which syncs selected Supply Chain and Finance entities to Dataverse in near real time. A Sales opportunity or a Customer Service case can flow to a sales order or a return without custom integration. --- # What is Dynamics 365? A clear overview of Microsoft Dynamics 365 — what it is, who it's for, how the apps fit together, and what a real implementation looks like. Source: https://www.solvingdynamics365.com/guides/what-is-dynamics-365 Section: Foundations / Platform overview Published: 2026-05-01 Updated: 2026-08-25 Microsoft Dynamics 365 is a family of cloud-based business applications that combines enterprise resource planning (ERP) and customer relationship management (CRM) into a single, modular platform. Rather than buying one large monolithic system, organisations license the specific apps they need — Sales, Customer Service, Finance, Supply Chain Management, Business Central, Field Service, Project Operations, Human Resources, Commerce, and others — and run them on a shared data foundation called **Dataverse** (for the CRM-lineage apps) or on the F&O data model (for the AX-lineage apps). ## Where Dynamics 365 came from Dynamics 365 launched in 2016 as the successor to Microsoft's earlier business-apps portfolio — Dynamics AX, NAV, GP, SL, and CRM. Several of those legacy lines still live on inside Dynamics 365 in evolved form. **Finance and Supply Chain Management** grew out of Dynamics AX. **Business Central** grew out of Dynamics NAV. The **CRM apps** (Sales, Customer Service, Field Service) grew out of Dynamics CRM. **GP and SL** are still supported but did not get modern cloud successors under the Dynamics 365 name. The benefit of consolidating everything under one brand is not just cosmetic. All the apps now share identity (**Microsoft Entra ID**), reporting (**Power BI**), automation (**Power Automate**), extensibility (**Power Apps**, **Copilot Studio**, and Azure), and increasingly a single Copilot layer. That means a Sales record can trigger a Business Central invoice with a low-code flow, a Power BI dashboard can pull from both an F&O warehouse and Dataverse without ETL, and the same Entra ID user can be granted access to the whole stack from one place. ## The app families Dynamics 365 splits into two lineages that share a brand but not a codebase. The **customer engagement apps** — Sales, Customer Service, Field Service, Project Operations, Marketing (now Customer Insights – Journeys), and Contact Center — run on **Dataverse** and are the modern CRM stack. They share a data model, a security model, and the Power Platform build tools. Extensions are written in low-code Power Apps or in plugins and JavaScript. The **finance and operations apps** — Finance, Supply Chain Management, Commerce, Human Resources, and Project Operations (F&O SKU) — evolved from Dynamics AX and run on a separate, X++-based platform. They are the enterprise ERP layer, aimed at organisations with complex financial consolidation, multi-legal-entity structures, or large warehouse and manufacturing operations. Development is in **X++**, deployed through **Lifecycle Services** (LCS). **Business Central** is the third lineage — the SMB ERP evolved from NAV. It runs on its own platform, is extended in **AL**, and covers finance, sales, purchasing, inventory, and light manufacturing for mid-market companies. The three lineages talk to each other via connectors, Dataverse virtual tables, and increasingly common Copilot surfaces — but under the hood they are still three products. ## Who it is for Dynamics 365 is sold per user, per app, and is most commonly deployed by mid-market and enterprise organisations that have outgrown entry-level accounting or spreadsheets but want to avoid the cost and multi-year risk of a custom-built or SAP-scale ERP. Typical buyers include: - **SMB / mid-market ERP buyers** — usually landing on **Business Central**, sometimes coming from QuickBooks, Xero, Visma, Fortnox, or a home-grown NAV. - **Enterprise ERP buyers** — landing on **Finance and Supply Chain Management**, often replacing on-premise AX, JD Edwards, IFS, or an ageing custom system. - **Sales and service teams** — landing on **Sales**, **Customer Service**, **Field Service**, or **Project Operations**, often replacing Salesforce, HubSpot, ServiceNow, or Zendesk in a Microsoft-heavy organisation. - **Marketing teams** — landing on **Customer Insights** to unify customer data across the CRM and ERP apps. The single strongest reason to choose Dynamics 365 over a specialised competitor is almost always the **existing investment in Microsoft**: Entra ID, Microsoft 365, Teams, Power BI, and Azure are already there, and Dynamics 365 slots into them without any of the integration tax you would pay for a foreign stack. ## What it actually costs Pricing is published on Microsoft's site — a per-user, per-month figure for each app, with base + attached-app discounts and volume discounts through enterprise agreements — but the sticker price is only ever a fraction of the real cost of Dynamics 365. Real-world cost is dominated by: - **Data migration** from the incumbent system, which is almost always more work than the customer expects. - **Configuration** — chart of accounts, dimensions, security roles, workflows, price lists. - **Customisations and integrations** — Power Automate flows, plugins, ISV apps, and connections to bank feeds, e-commerce platforms, warehouse hardware, or industry systems. - **Training and change management** — Dynamics 365 replaces the tool people spend their day in, so adoption is a real project. - **Partner fees** for all of the above. A rough industry rule is that the first-year all-in cost is somewhere between **3× and 8× the annual licence cost**, depending on the apps in scope and how much customisation the customer takes on. In steady state, ongoing partner spend usually runs 15–30 % of licence spend per year. ## The partner ecosystem Dynamics 365 is almost always implemented with help from a **Microsoft partner**. Microsoft itself does not deliver implementations except for the largest customers. Instead, a global network of certified partners — from boutique specialists to global systems integrators (**SIs**) — does the work. The partner ecosystem breaks down roughly like this: - **Business Central partners** — often specialise by country or by vertical (retail, manufacturing, distribution). Many have their own ISV extensions on top of BC. - **F&O partners** — larger firms, often global SIs (Avanade, KPMG, EY, PwC, HSO, Cognizant, Wipro), because F&O programmes tend to be multi-year and multi-region. - **Customer engagement partners** — a wider mix, from Power Platform-first specialists to CRM boutiques to the big SIs. - **Independent software vendors (ISVs)** — publishing add-ons on AppSource for country-specific tax, industry verticals, or extra features Microsoft doesn't cover. Choosing the right partner and apps is usually a bigger decision than choosing Dynamics 365 itself. A great platform with the wrong partner still fails; a mediocre platform with the right partner often quietly succeeds. ## Where to go next If you're figuring out **which app to license**, the plain-English decision guide is [how to choose the right Dynamics 365 product](https://www.solvingdynamics365.com/guides/how-to-choose-the-right-dynamics-365-product). If you want the **whole product family on one page**, see the [Dynamics 365 product family](https://www.solvingdynamics365.com/guides/dynamics-365-product-family). For the **Power Platform connection**, read [Dynamics 365 and the Power Platform](https://www.solvingdynamics365.com/guides/dynamics-365-and-power-platform). And if you're weighing **Business Central vs Finance & Supply Chain**, start with [what is Business Central](https://www.solvingdynamics365.com/guides/what-is-business-central) and [what is Dynamics 365 Finance](https://www.solvingdynamics365.com/guides/what-is-dynamics-365-finance). ### Frequently asked questions **Is Dynamics 365 one product or many?** Many. Dynamics 365 is a family of modular apps — Sales, Customer Service, Finance, Supply Chain Management, Business Central, Field Service, Project Operations and more — licensed per app, per user. Under the brand there are three lineages with different codebases: the Dataverse-based CRM apps, the AX-descended Finance and Operations apps, and the NAV-descended Business Central. **What does Dynamics 365 actually cost?** License prices are published per user per month, but the sticker price is a fraction of the real cost. First-year all-in cost typically runs 3x to 8x the annual licence cost once data migration, configuration, integrations, training and partner fees are counted, and steady-state partner spend usually runs 15-30% of licence spend per year. **Do I need a partner to implement Dynamics 365?** Almost always. Microsoft itself does not deliver implementations except for the largest customers; a global network of certified partners does the work. Choosing the right partner is usually a bigger decision than choosing Dynamics 365 itself. **Why choose Dynamics 365 over Salesforce or SAP?** The single strongest reason is an existing Microsoft investment. If Entra ID, Microsoft 365, Teams, Power BI and Azure are already in place, Dynamics 365 slots into them without the integration tax of a foreign stack. --- # What is Microsoft Dataverse? Microsoft Dataverse is the relational data platform underneath Dynamics 365 CRM apps and Power Platform — what it is, why it's more than a database. Source: https://www.solvingdynamics365.com/guides/what-is-microsoft-dataverse Section: Customer Engagement / Dataverse platform Published: 2026-08-27 Updated: 2026-08-27 **Microsoft Dataverse** is the relational data service underneath the Dynamics 365 CRM apps and the Power Platform. It provides tables, columns, relationships, security, and business logic through a managed cloud service that developers and makers interact with through a consistent metadata layer — never through raw database access. Dataverse is not a database in the classical sense. It is a **relational data platform** with a rich security model, a workflow engine, integrated audit, first-class metadata, an event grid, and a native REST API. Underneath it uses Azure SQL, Azure Data Lake, and other Azure primitives, but you don't work with any of those directly. You work with Dataverse. ## Why it exists Historically the CRM-lineage Dynamics 365 apps (Sales, Customer Service, Field Service) ran on a product called the **Common Data Service (CDS)**, itself the successor to the Dynamics CRM Xrm platform. In 2020 Microsoft rebranded CDS to Dataverse and repositioned it as the shared data foundation for the Power Platform, not just for the Dynamics 365 apps. The strategic bet is that **one data model, one security model, one API surface** makes it dramatically cheaper to build the second, third, and tenth business application on the same tenant. Every Dynamics 365 CRM app runs on Dataverse. Every custom Power App can extend the same tables. Every Power Automate flow can trigger on events raised by that shared data. ## What Dataverse gives you **Tables and columns.** Structured, typed data with all the standard column types (text, number, currency, date, choice, lookup) plus rich types (file, image, formula, calculated, rollup). Custom tables can be added with a maker experience or through metadata code. **Relationships.** One-to-many, many-to-many, and hierarchical, with cascade rules on parent behaviour (share, assign, delete, merge). Related-table joins in queries are first-class. **Security model.** Layered role-based, row-level, hierarchical, and field-level security. Business units carve the tenant into scopes; owner and access teams share records with subsets of users; roles define what each user can do inside their scope. Deep, well-thought-out, occasionally intricate — but sufficient for most enterprise security requirements without custom code. **Business logic layers.** Business rules (declarative validation), workflows (classic, deprecated in favour of flows), plug-ins (server-side .NET code that fires on events), Power Automate flows, and Power Fx formulas for calculated columns and business logic. The right layer for a given piece of logic depends on performance, upgradeability, and complexity. **Events.** Every row change raises an event that other tables, plug-ins, flows, and Azure services can subscribe to. This is what makes Dataverse a *reactive* platform rather than a static store. **Audit.** Row-level and column-level change history, retained per environment configuration, accessible through the audit APIs. Regulatory requirements that demand "when did this field change and who changed it" have a native answer. **Web API.** REST endpoints for every table, generated from the metadata layer, versioned per platform release. Native OData query semantics; batch operations; change-tracking; alternate keys. The primary integration surface. ## The extended Dataverse family Beyond the core relational store, Dataverse ships a family of specialised storage patterns: **Elastic tables.** NoSQL-style storage for high-volume, high-throughput scenarios — IoT telemetry, event logs, session data. Different consistency guarantees, different pricing, same API surface. **Virtual tables.** Federated data that stays in its source system (a SQL Server, a REST API, a SharePoint list) and appears as a Dataverse table for read (and often write) purposes. Removes the need to synchronise data into Dataverse for scenarios where the source system is the truth. **File and image columns.** Blob storage attached to records, with the same security model applied to the blobs as to the record. Suitable for document attachments, product images, work-order photos. **Dataverse search.** Full-text and metadata search across all tables in the environment, with security trimming so users see only rows they can access. **Dataverse for Teams.** A lightweight Dataverse that ships free inside Teams — a subset of the platform for lightweight scenarios where a team needs a shared data-driven app without a full Dataverse environment. ## Where Dataverse fits under Dynamics 365 Every CRM-lineage Dynamics 365 app is a pre-built collection of Dataverse tables plus the model-driven UI on top. **Account, Contact, Opportunity, Lead, Case, Work Order, Project** — these are Dataverse tables that the Dynamics 365 apps pre-configure. A custom table added to the same environment is *architecturally identical* — it participates in the same security, relationships, workflows, and API surface. This is the reason extending Dynamics 365 uses exactly the same tools a maker would use for a fresh Power App. The developer / consultant / admin community can be the same community; the skills transfer bidirectionally. The **Finance and Operations apps** (Finance, SCM, Commerce, Human Resources, Project Operations resource-mode) do not run on Dataverse natively — they have their own AX-lineage data model. Integration between F&O and Dataverse is through **Dual-write**, a real-time bidirectional sync that makes selected F&O entities available as Dataverse tables (and vice versa). The strategic direction is toward tighter Dataverse integration, but F&O is not "on Dataverse" in the way the CRM apps are. ## Environments A Dataverse instance lives in an **environment** — a logical container with its own database, users, security roles, and app inventory. A tenant has a default environment (for personal productivity apps that shouldn't touch enterprise data) and however many additional environments the customer chooses to create for dev, test, production, and specific projects. Environment strategy is one of the primary architecture decisions in a Dataverse deployment. Too few environments and dev / test / prod bleed into each other; too many and administration overhead multiplies. See the environment-strategy guide for the working patterns. **Managed environments** is a paid tier that adds sharing controls, weekly usage reports, solution checker enforcement, and pipelines. Meant for organisations with a wider maker community that need centralised governance. ## Solutions and ALM Every customisation of Dataverse — a new table, a modified column, a business rule, an app, a flow — is packaged into a **solution**. Solutions move between environments as unmanaged (editable in the destination, for dev use) or managed (locked, for test and production). **Solution layers** show how multiple solutions interact when they touch the same object. **Solution checker** validates a solution before deployment. **Solution pipelines** deploy them from source to target through the Power Platform admin center or through Azure DevOps / GitHub Actions with the `pac` CLI. Deep solution-management skill is the primary technical craft in professional Dataverse work. ## The competitive picture The most obvious comparison is to **Salesforce Platform** (the platform under Salesforce Sales Cloud and Service Cloud). Both are opinionated business-app platforms. Both have first-class metadata, security, business logic, and API surfaces. Salesforce Platform is more mature in some places (declarative development experience, deep ISV ecosystem); Dataverse wins on Microsoft 365 integration, on Copilot Studio integration, and increasingly on pricing for Microsoft-shop customers. **Oracle APEX**, **ServiceNow platform**, and various low-code platforms (OutSystems, Mendix, Retool) share some concepts. None of them ship as the data foundation under a full Dynamics 365 CRM stack. ## Licensing Dataverse is licensed by environment (database size, file storage, log storage) plus by user (Power Apps user licences, Dynamics 365 user licences that entitle users to specific tables). It is one of the more intricate pricing areas in Microsoft — worth reading the current licensing guide before committing. Every Dynamics 365 licence includes rights to use the CRM-lineage app's Dataverse tables in custom apps and flows. Adding new custom tables that aren't part of the Dynamics 365 licence typically requires additional Power Apps licences. ## The short version Dataverse is the relational data platform under the Dynamics 365 CRM apps and the Power Platform. Tables, columns, relationships, security, business logic, events, audit, REST API — all in one managed service. It is more than a database and less than a general-purpose PaaS; it is opinionated for building business apps quickly, governing them centrally, and integrating them with Microsoft 365 and Dynamics 365. If you build on Microsoft business apps, you spend time in Dataverse. ## Where to go next Start with [data model fundamentals](https://www.solvingdynamics365.com/guides/dataverse-data-model-fundamentals) and [the security model](https://www.solvingdynamics365.com/guides/dataverse-security-model), then the logic layer in [plug-ins explained](https://www.solvingdynamics365.com/guides/dataverse-plug-ins-explained). The operational container is [Power Platform environments](https://www.solvingdynamics365.com/guides/power-platform-environments) and the deployment unit is [ALM with managed solutions](https://www.solvingdynamics365.com/guides/power-platform-alm-with-managed-solutions). When the API talks back, [Dataverse Web API errors](https://www.solvingdynamics365.com/guides/dataverse-web-api-errors-explained) decodes it. ### Frequently asked questions **Is Dataverse just a database?** No. It is a relational data platform with a layered security model, rich metadata, business rules, plug-ins, events, audit, full-text search, and a generated REST Web API. It runs on Azure SQL and other Azure primitives underneath, but you never touch those directly. **What is the difference between Dataverse and the Common Data Service?** Nothing beyond the name. Microsoft rebranded the Common Data Service to Dataverse in 2020 and repositioned it as the shared data foundation for the whole Power Platform, not just the Dynamics 365 CRM apps. **Do the Finance and Operations apps run on Dataverse?** No. Finance, Supply Chain Management, Commerce, and Human Resources have their own AX-lineage data model. Selected entities are exposed to Dataverse through dual-write, and Microsoft's direction is tighter integration, but F&O is not on Dataverse the way Sales or Customer Service is. **Does a Dynamics 365 licence cover custom Power Apps on Dataverse?** It covers custom apps and flows that use the licensed app's own tables. Adding new custom tables that are not part of the Dynamics 365 licence typically requires additional Power Apps licences — check the current licensing guide before assuming. **What are elastic tables and virtual tables?** Elastic tables are NoSQL-style storage for high-volume workloads such as telemetry and logs, with different consistency guarantees but the same API. Virtual tables surface data that stays in its source system — SQL, a REST API, SharePoint — as if it were a Dataverse table, so you do not have to replicate it. --- # What is the Power Platform? Microsoft's low-code platform — Power Apps, Power Automate, Power BI, Power Pages, Copilot Studio, and Dataverse. Source: https://www.solvingdynamics365.com/guides/what-is-power-platform Section: Power Platform Published: 2026-08-27 Updated: 2026-08-27 The Microsoft Power Platform is a low-code application platform that pairs a suite of maker products with a shared data foundation. The maker products are **Power Apps** (business applications), **Power Automate** (workflow automation), **Power BI** (analytics), **Power Pages** (external-facing web experiences), and **Copilot Studio** (conversational AI agents). The shared foundation is **Microsoft Dataverse** — a relational, secure, enterprise-managed data service. Dynamics 365's CRM-lineage apps (Sales, Customer Service, Field Service, Marketing, Customer Insights, Project Operations) are themselves built on the Power Platform. They ship as pre-configured Power Apps on top of Dataverse. This is not marketing framing — it is architecturally true — and it is why extending Dynamics 365 uses exactly the same tools a maker would use for a fresh Power Apps build. ## The five maker products **Power Apps** builds business applications in two flavours. **Model-driven apps** generate a functional data-centric UI from Dataverse metadata — the pattern Dynamics 365 CRM apps use, right for record-heavy processes with security roles and complex forms. **Canvas apps** are drag-and-drop pixel-perfect designs backed by a spreadsheet-like formula language (Power Fx), right for task-specific workflows that need a bespoke UI. **Power Automate** runs workflows. **Cloud flows** trigger from events (a record change in Dataverse, an email arriving, a form submitted, a schedule) and run steps against 500+ connectors. **Desktop flows** are RPA — a bot that drives a Windows UI when there is no API — increasingly overtaken by the API-first world but still important for legacy systems. **Business process flows** are the guided-process flavour used inside model-driven apps to shepherd a user through Qualify → Develop → Propose stages. **Power BI** is the enterprise BI product — semantic models over Fabric, Dataverse, SQL, files, everything. It sits inside the Power Platform brand but is really its own product with its own licence economy and its own admin surface; the overlap is that Dataverse is a first-class data source and that Power BI reports embed into Power Apps and dashboards. **Power Pages** builds external-facing websites — customer portals, partner portals, self-service forms — with Dataverse as the back end and its own authentication (Entra External ID, Azure B2C, local accounts). It is the descendant of the older **Power Apps Portals** product, rewritten in a modern design experience. **Copilot Studio** builds conversational AI agents — chatbots and Teams-native agents that reason over instructions, tools, and knowledge. It is the successor to Power Virtual Agents; the redesign around Copilot happened in 2024 and continues. ## Dataverse Dataverse sits under the maker products. It is a relational data service with an enterprise-grade security model (role-based, row-level, hierarchical, field-level), a rich metadata layer (tables, columns, relationships, choice sets, business rules), and a scalable transactional storage engine. Every Power Platform environment ships with a Dataverse instance. A Dynamics 365 tenant's Dataverse is the same Dataverse that hosts custom Power Apps — with the pre-built Dynamics 365 tables layered on top. That means a custom Power App can add a table that relates to the Account table and it will show up on Account forms in Sales — no integration involved. The extended Dataverse family includes **elastic tables** (NoSQL-style storage for high-volume append workloads), **virtual tables** (federated data staying in its source system), **file/image columns** (blob storage attached to records), and **Dataverse for Teams** (a lightweight Dataverse that ships free inside Teams). All share the same programming model. ## Environments and governance A Power Platform tenant is organised into **environments** — logically separated containers, each with its own Dataverse, security roles, users, and app inventory. The typical setup is a development environment, one or more test environments, and production, mirroring the classic ALM structure. A **default environment** exists for personal productivity apps that shouldn't touch enterprise data. **Managed environments** is a paid tier that adds sharing controls, weekly usage reports, solution checker enforcement, and pipelines. It's designed for organisations that want central IT visibility over a wide maker community, not for a small dev-only footprint. **Data Loss Prevention (DLP) policies** categorise every connector as Business, Non-Business, or Blocked, and prevent a flow or app from combining connectors across categories. This is the primary governance lever — set it right and low-code makers can't accidentally exfiltrate Dataverse data to a personal Dropbox. ## ALM Power Platform applications ship as **solutions** — packaged units of tables, apps, flows, security roles, and dependencies that move between environments. Solutions come in two flavours: **unmanaged** (editable in the destination environment, used in dev) and **managed** (locked in the destination, used in test and production). **Power Platform Pipelines** is the newest and simplest deployment path — a checklist-driven promotion from dev to prod inside the Power Platform admin center. For heavier ALM there is **Power Platform Build Tools** for Azure DevOps and **GitHub Actions for Power Platform**, both wrapping the same `pac` CLI. Larger tenants that want a full ALM discipline use the CLI + Actions or DevOps combination. ## The AI layer Every product in the platform has a Copilot inside it. **Copilot in Power Apps** turns natural-language descriptions into apps, tables, and formulas. **Copilot in Power Automate** does the same for flows. **Copilot in Power BI** authors DAX and describes visuals. **Copilot Studio** is itself the AI-agent building product. Underneath, **AI Builder** provides pre-built AI models (form processing, sentiment, text translation, custom prediction) that flows and apps can call as steps — a lower-code alternative to calling Azure Cognitive Services directly. ## Licensing shape Licensing is intricate and changes frequently. In broad strokes: Power Apps is licensed per app or per user, Power Automate per user or per flow, Power BI per user (Pro, Premium Per User) or per capacity, Power Pages per site with anonymous/authenticated user metering, Copilot Studio per message pack. Dataverse consumption (storage and API calls) is metered against the tenant. Every Dynamics 365 licence includes rights to use the CRM-lineage app's own Dataverse tables inside custom apps and flows. Extending Dynamics 365 with a custom app that uses only Dynamics tables typically does not need an additional Power Platform licence; a custom app that adds new Dataverse tables usually does. Always check the licensing guide before assuming. ## Where the platform starts and ends Power Platform is a low-code platform. It optimises for time-to-first-app, integration breadth, and delegation to Dataverse's transactional engine. It is not a pro-code IDE, not a raw ML platform, and not a general-purpose Kubernetes runtime — for those, Azure sits alongside it (Azure Functions, Azure ML, AKS). The right mental model: Power Platform is the delivery layer for business applications and automations that need to be built quickly, governed centrally, and integrated with Microsoft 365 and Dynamics 365. Azure is the platform for everything more ambitious than that. ## Where to go next Next reads: [Power Platform environments](https://www.solvingdynamics365.com/guides/power-platform-environments) for the operating model, [canvas apps vs model-driven apps](https://www.solvingdynamics365.com/guides/canvas-apps-vs-model-driven-apps) for the first build decision, [flow design patterns](https://www.solvingdynamics365.com/guides/power-automate-flow-design-patterns) for automation, [DLP policies](https://www.solvingdynamics365.com/guides/dlp-policies-in-power-platform) for governance, and [Copilot Studio for Dynamics 365](https://www.solvingdynamics365.com/guides/copilot-studio-for-dynamics-365) for agents. Licence costs are on the [Power Apps](https://www.solvingdynamics365.com/pricing/power-apps) and [Power Automate](https://www.solvingdynamics365.com/pricing/power-automate) pricing pages. ### Frequently asked questions **What are the five Power Platform products?** Power Apps (business applications), Power Automate (workflow and RPA), Power BI (analytics), Power Pages (external-facing websites), and Copilot Studio (conversational AI agents), all sharing Microsoft Dataverse as their data foundation. **Is Dynamics 365 built on the Power Platform?** The CRM-lineage apps — Sales, Customer Service, Field Service, Customer Insights, Project Operations — genuinely are: they ship as pre-configured model-driven apps on Dataverse. That is why extending them uses the same tools a maker would use for a brand-new Power App. **What is a DLP policy in Power Platform?** A Data Loss Prevention policy classifies every connector as Business, Non-Business, or Blocked and prevents a flow or app from combining connectors across groups. It is the primary governance lever against makers accidentally moving Dataverse data into personal services. **What are managed environments?** A paid tier that adds sharing controls, weekly usage reports, solution checker enforcement, and pipelines. It is meant for organisations governing a wide maker community, not for a small dev-only footprint. **When should I use Azure instead of the Power Platform?** For anything that is not a business application or automation: pro-code services, raw machine learning, or container runtimes. Power Platform optimises for time-to-first-app, connector breadth, and central governance; Azure Functions, Azure ML, and AKS sit alongside it for everything more ambitious. --- # WhatsApp and SMS channels in Customer Service How to set up and operate WhatsApp Business and SMS in Dynamics 365 Customer Service — provisioning, agent experience, and compliance. Source: https://www.solvingdynamics365.com/guides/whatsapp-and-sms-channels-in-customer-service Section: Customer Engagement / Customer Service Published: 2026-05-01 For growing slices of the customer base, WhatsApp and SMS aren't *secondary* channels — they're the primary ones. Many customers prefer messaging over calls or emails, and customer service organisations that don't meet them on these channels lose the relationship. Dynamics 365 Customer Service supports both natively as part of the omnichannel stack. ## WhatsApp Business Microsoft offers WhatsApp Business integration through: - **WhatsApp Cloud API** (Microsoft's direct integration, recommended for new tenants). - **WhatsApp via Infobip, Twilio, or other BSPs (Business Solution Providers)** — partner connectors. **Provisioning WhatsApp.** 1. Acquire a WhatsApp Business phone number (separate from any personal WhatsApp number) through Meta Business Manager. 2. Verify the business through Meta's verification process (required for WhatsApp Business API access). 3. Configure the WhatsApp number in Dynamics 365's omnichannel admin. 4. Define operating hours, routing rules, agent capacity for the channel. 5. Set up message templates — Meta requires pre-approved templates for outbound messages (proactive outreach to customers). ## WhatsApp message templates WhatsApp Business has strict rules about *who initiates* contact. Customers can message the business freely; the business can only respond within a 24-hour window after the customer's last message. Outside that window, the business can only send pre-approved **message templates** (greeting, appointment reminder, order update, etc.). Templates go through Meta approval and can take days. Plan for this. ## SMS SMS is more straightforward — most countries have local SMS regulations, but the operational mechanics are similar: - **SMS provider** — Azure Communication Services, Twilio, Infobip, or country-specific carriers. - **Sender number** — short code (high-volume marketing) or long code (transactional, conversational). - **Two-way capable number** — required if customers can reply. ## The agent experience Once configured, WhatsApp and SMS conversations route through Unified Routing like other channels. The agent sees them in their Customer Service workspace alongside chats, voice calls, and emails, with the same productivity pane, conversation history, and Copilot assistance. Conversation summarisation, suggested replies, and knowledge articles work the same way. ## Identity binding Inbound WhatsApp / SMS messages identify the customer by phone number. The platform matches the phone number to a Dataverse contact; unmatched numbers prompt the agent to create or link the contact. Persistent conversation history binds future messages from the same number to the same contact automatically. ## Rich media WhatsApp supports images, videos, audio messages, documents, locations, and structured cards. SMS supports text only (and MMS where carriers allow). Build conversation patterns around what each channel can carry. **Compliance.** - **Customer opt-in** — both WhatsApp Business and most SMS regulations (GDPR, TCPA in the US, equivalent rules elsewhere) require explicit customer consent before outbound messaging. Capture and audit consent. - **Opt-out** — every outbound message includes an opt-out instruction; the platform must honour opt-out immediately. - **Record retention** — messages are stored as Dataverse records; retention policy applies per regulatory requirements. **Common pitfalls.** - **WhatsApp template approval lag** — partner templates often need editing before Meta approval. Plan launch with buffer. - **Conflating personal numbers** — agents using personal WhatsApp for business breaks audit, doesn't route, doesn't track. Always use the official business channel. - **SMS cost surprise** — high-volume SMS bills can be substantial. Monitor consumption. ## Operational reality WhatsApp and SMS adoption improves customer satisfaction measurably in many demographics — but requires the same discipline as any service channel. Train agents, monitor response time, capture consent, comply with regulations. --- # Withholding tax in Dynamics 365 Finance How F&O handles withholding tax — vendor and customer-side configurations, country variations, and the integration with payments and reporting. Source: https://www.solvingdynamics365.com/guides/withholding-tax-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 **Withholding tax** is the practice of deducting tax from a payment at source and remitting it directly to the tax authority on behalf of the recipient — common for cross-border payments, professional services, dividends, royalties, and certain domestic transactions. Dynamics 365 Finance supports withholding tax in detail because the requirements vary substantially by country and transaction type. ## The concept When Company A pays a foreign service provider (or a domestic supplier in jurisdictions that require it), instead of paying the full invoice amount and the provider declaring tax in their own jurisdiction, Company A *withholds* a tax amount and remits it directly to its own tax authority. The provider receives the net amount; the tax authority gets the withheld portion; documentation flows so the provider can claim the withheld amount as tax paid in their own jurisdiction. **Use cases.** - **Cross-border services** — payments to foreign consultants, technology licences, royalties. - **Domestic professional services** — many countries (India, Brazil, Argentina, Mexico, Philippines, Indonesia, others) require withholding on domestic invoices to professionals or specific industries. - **Dividends and interest** — typically withholding applies to outbound payments to foreign shareholders / lenders. - **Subcontractor payments** — UK's CIS (Construction Industry Scheme) withholds tax from subcontractors. **Setup in F&O.** - **Withholding tax codes** — define the rate, calculation, and tax-authority destination for each type of withholding. - **Withholding tax groups** — combinations of codes for cascaded or layered withholding (some countries layer multiple withholdings on the same transaction). - **Item / service classification** — which goods or services are withholding-eligible. - **Vendor configuration** — flag vendors as subject to withholding, with the applicable group. - **Customer configuration** — for customer-side withholding (where the *customer* is required to withhold from the seller's invoice). - **Country-specific localisations** — the country localisation typically pre-configures the standard withholding regimes. **The transaction flow.** 1. **Invoice received** — the full invoice amount is recorded as vendor liability. 2. **Payment proposed** — the payment routine identifies the withholding requirement, calculates the withheld amount, splits the payment: - Vendor receives invoice amount minus withholding. - Withholding amount books to a tax-payable account. 3. **Payment posted** — both legs post: payment to vendor, withholding liability to tax authority. 4. **Periodic remittance** — accumulated withholding is paid to the tax authority on the schedule the regulator requires (monthly, quarterly). 5. **Withholding certificate** — the vendor receives a certificate documenting the withheld amount for their tax claim. **Country-specific complications.** - **India TDS** (Tax Deducted at Source) — multiple withholding categories with thresholds, exemptions, certificates (Form 16A), and quarterly returns (Form 26Q, 27Q). - **Brazil IRRF, PIS, COFINS, INSS, ISS** — multiple cascaded withholdings on the same invoice with different rates, bases, and recipients. - **UK CIS** — subcontractor classification (Gross, Net 20%, Net 30% with no verification) and monthly returns. - **Argentina** — multiple federal and provincial withholdings; complex. - **US 1099 reporting** — not withholding per se, but annual reporting of payments to certain vendors; similar configuration model. The country-specific complications are why country localisations matter — getting the engine right requires deep regulatory knowledge. **Documentation.** - **Withholding certificates** — issued to vendors documenting the amount withheld. Templates per country. - **Periodic returns** — generated through Electronic Reporting (Globalization Studio) per country format. - **Annual summaries** — for tax authorities and for vendors' year-end tax claims. **Common pitfalls.** - **Vendor not flagged for withholding** — invoice paid in full, withholding missed, penalty risk. - **Wrong withholding rate applied** — under-withholding causes liability; over-withholding causes vendor disputes. - **Threshold rules not respected** — some withholdings only apply above thresholds; below, no withholding required. - **Exemption certificates not honoured** — vendors with exemption certificates shouldn't have withholding applied. - **Certificate generation skipped** — vendors require certificates for their own tax claims. ## Operational reality Withholding tax is one of the most country-specific areas of F&O. Engage local tax expertise during setup; partner with a localisation specialist for the country; review setup annually as regulations change. --- # Work in progress (WIP) and recognition for projects in Business Central How Business Central recognises revenue and cost on projects — the four WIP methods, completion percentages, and how WIP entries hit the general ledger. Source: https://www.solvingdynamics365.com/guides/wip-and-recognition-for-jobs-in-bc Section: Business Central / Service & projects Published: 2026-05-01 Projects in Business Central (formerly Jobs) capture revenue and cost across a span of time. Until completion, accounting standards usually require some form of **work in progress (WIP)** recognition — moving incurred costs out of P&L into a balance sheet account and recognising revenue based on percentage of completion. BC handles this through the **WIP** calculation engine on the Project Card. ## The four WIP methods On each project, the `WIP Method` field selects how WIP is computed: - **Cost Value** — recognises cost based on percentage of completion; revenue follows separately. - **Sales Value** — recognises revenue and cost in proportion to billable progress. - **Cost of Sales** — recognises cost matched to invoiced amounts. - **Percentage of Completion** — recognises both revenue and cost at the calculated completion %. - **Completed Contract** — defers everything to completion. The choice depends on the contract type (fixed price, time and material, milestone) and the accounting policy. Service firms usually use Percentage of Completion or Sales Value; construction firms often use Completed Contract for shorter projects and Percentage of Completion for longer ones. ## WIP postings WIP doesn't change Project Ledger Entries directly; it creates G/L entries against: - **WIP Cost Account** — balance sheet inventory-like account holding incurred-but-unrecognised cost. - **Recognised Costs Account** — P&L cost as recognised by the WIP method. - **WIP Sales Account** — balance sheet account holding billed-but-unearned revenue (when invoicing exceeds recognised revenue), or earned-but-unbilled (the reverse). - **Recognised Sales Account** — P&L revenue as recognised. The journal pattern is symmetric: at every WIP run, BC reverses prior WIP entries and posts current values; the net movement reflects the period's earned revenue and cost. ## Running WIP The `Project Calculate WIP` action computes WIP per project, optionally per task. The `Project Post WIP to G/L` action posts the calculated values to the general ledger. Most teams run these as monthly close steps. Important: WIP entries reverse and re-post each period — the WIP G/L balance is always "the current cumulative WIP value", not an accumulation of period entries. ## Completion % For methods that depend on completion %: - **Cost-based completion** — actual cost to date / estimated total cost. The `Cost Completion %` field on the project card. - **Schedule-based** — manually entered or driven by milestone task statuses. - **Quantity-based** — actual quantities posted / planned quantities, summed across tasks. The estimated total cost must be maintained continuously; a project where the estimate hasn't been updated for six months will show wrong WIP regardless of method. ## Project tasks and WIP totals WIP can be calculated at the **task** level — each task carries its own `WIP Method` and accounts. This matters for projects with mixed-type tasks (a fixed-price phase followed by a time-and-material phase). The project header's WIP is the sum across tasks. ## Recognising milestones For milestone billing, the typical setup is: - Task `WIP Method` = `Completed Contract`. - A task `WIP Total` field equal to the milestone amount. - The milestone task is marked complete only when the milestone is achieved. - WIP recognises 100% of that task's revenue at completion. ## WIP and invoicing decoupled A project might be invoiced ahead of work (deposit, milestone billed early) or behind work (T&M billed in arrears). WIP accounts capture the timing difference: - Invoiced more than recognised → liability balance (deferred revenue) on `WIP Sales`. - Recognised more than invoiced → asset balance (accrued revenue) on `WIP Sales`. The WIP sales account thus carries both directions depending on the project. Some teams split into two accounts (`Deferred Project Revenue`, `Accrued Project Revenue`) for cleaner balance sheet presentation, but BC's standard logic uses one. **Common pitfalls.** - **Stale estimates.** Estimated total costs not updated → completion % wrong → WIP wrong. - **WIP not posted.** Calculation runs but post step forgotten; P&L shows incurred cost, no recognised revenue. - **Mixed WIP methods on one project.** Result is hard to audit; standardise by project type. - **Closing a project before final WIP.** Final WIP needs to reverse all balance sheet WIP and recognise everything to P&L. If the project is set to status `Completed` before WIP is run one last time, balance sheet WIP stranded. ## Audit and disclosure WIP balances are scrutinised in audits — overstating WIP overstates assets and revenue. Auditors look for: - Aged WIP balances (project hasn't moved for 12 months — write off?). - Negative WIP that doesn't match a billing-ahead pattern. - Inconsistency between estimated costs and actuals trending. A clean monthly WIP close, with reviewed estimates and a documented method per project, makes the audit fast. --- # Work order lifecycle in Dynamics 365 Field Service How a work order flows from creation through scheduling, dispatch, technician execution, and invoicing in Dynamics 365 Field Service — the statuses. Source: https://www.solvingdynamics365.com/guides/work-order-lifecycle-in-field-service Section: Customer Engagement / Field Service Published: 2026-05-01 The **work order** is the core operational record in Dynamics 365 Field Service. Everything — schedules, technician dispatch, parts consumption, customer billing — revolves around the work order's lifecycle. A clean lifecycle is the difference between a smooth field operation and constant firefighting. **Where work orders originate.** - **Manually created** by a dispatcher or customer service agent. - **From a case** — service escalation creates a related work order. - **From an asset** — preventive maintenance schedules generate work orders automatically. - **From IoT alerts** — connected device anomalies create work orders. - **From a service agreement** — recurring scheduled visits. - **Self-service portal** — customer requests via Power Pages. The work order's source informs its priority, routing, and SLA expectations. **Work order anatomy.** - **Work Order Number** — unique identifier. - **Service Account / Billing Account** — who's served, who's billed. - **Customer Asset** — the equipment being serviced. - **Work Order Type** — installation, maintenance, repair, inspection. - **Status** — system status (Open – Unscheduled, Open – Scheduled, In Progress, Completed, Closed). - **Sub-status** — granular reasons. - **Priority** — High/Medium/Low. - **Service Territory** — geographic assignment. - **Date Window From/To** — when work must happen. - **Incident Types** — what specifically needs doing. - **Service Tasks** — checklist items. - **Products** — parts consumed or to be used. - **Services** — labour line items. **The lifecycle.** 1. **Created** — work order exists; not yet scheduled. 2. **Scheduled** — a resource and time slot assigned (manual or auto via Resource Scheduling Optimization). 3. **In Progress** — technician en route or on site, time tracked. 4. **Completed** — technician finished; service report generated. 5. **Closed - Posted** — final review by office; products and services posted to inventory and billing. 6. **Invoiced** — billing generated. Some lifecycles compress (no formal "posted" stage); others extend (intermediate "Customer Approval" before posting). ## Bookings and scheduling The link between a work order and a resource is a **booking**. Bookings have their own status: - **Scheduled** — assigned, not started. - **Travelling** — technician en route. - **On Site** — arrived. - **In Progress** — working. - **Completed** — finished. Bookings can be split (technician on site for 4 hours but lunch break in middle) and rescheduled. ## Scheduling assistant Dispatcher uses the Schedule Board to: - See open work orders requiring scheduling. - Drag onto resources / time slots. - Apply constraints (skills, territory, certifications). - Optimise routes manually or with Resource Scheduling Optimization (RSO). RSO automates this with ML-based optimisation considering travel, skills, urgency. ## Technician execution Field technicians use the **Field Service mobile app**: - See assigned bookings. - Tap to start travelling; arrive; start work. - Complete service tasks. - Capture photos. - Record parts used and labour. - Customer signature. - Submit service report. The mobile app works offline — bookings sync down, completed data syncs up when connectivity returns. ## Service reports A summary of the work performed, parts used, time spent, customer signature. Emailed to the customer; saved on the work order. Some industries require structured reports (regulated compliance, warranty); the report template generates accordingly. ## Inventory and parts Parts consumed: - Pulled from technician's truck stock (a sub-warehouse). - Posted as inventory consumption. - May trigger replenishment (truck restock). - Costed to the work order. Truck inventory is mini warehouse management — without discipline, parts walk away. ## Billing Most work orders bill the customer: - **Time and materials** — invoice for actual hours + parts. - **Fixed price** — pre-quoted amount regardless. - **Warranty** — covered by warranty, no customer charge. - **Service contract** — covered by contract, no charge. Billing rules on the work order determine which model applies; invoice generation follows posted work orders. ## Service agreements and preventive maintenance Recurring work orders generated automatically: - **Service agreement** — annual or quarterly contract. - **Maintenance plan** — defines schedules per asset. - **Auto-generation** — system creates work orders ahead of due date. - **Routing** — auto-scheduled to appropriate territories. This generates the maintenance volume that fills the dispatcher's schedule. **Common pitfalls.** - **Unscheduled work order backlog.** Created but not scheduled; aging fast. - **No closure discipline.** Completed work orders never posted; reporting wrong; revenue not recognised. - **Parts not captured.** Technician forgot to log; inventory wrong; billing low. - **Service report not sent.** Customer doesn't see what was done; disputes follow. - **Wrong work order type.** "Repair" used when it should be "Warranty Repair"; billing wrong. - **Schedule board overcrowded.** Too many open work orders without filtering; dispatcher overwhelmed. ## Quality and feedback Post-completion: - Customer survey (Customer Voice integration). - Net Promoter Score (NPS) per technician, per work order type. - Coaching feedback flows back to technicians. ## Strategic positioning Field Service work orders bridge several domains — service operations, inventory, billing, scheduling, customer experience. Discipline at every transition makes the chain efficient; gaps anywhere cascade. The most mature field service operations have clear status definitions, clean handoff procedures, and dashboards that surface stuck or aging work orders before they become customer issues. --- # Workflow in Dynamics 365 Finance The workflow engine in Dynamics 365 Finance and SCM — designers, conditions, assignment, escalations, and Power Automate alternatives. Source: https://www.solvingdynamics365.com/guides/dynamics-365-finance-workflow Section: Finance & SCM / Finance Published: 2026-05-01 The Finance and Operations workflow engine is the routing and approval framework for almost every transactional document — purchase requisitions, purchase orders, vendor invoices, journals, project quotations, expense reports, time sheets. Every Finance/SCM implementation configures dozens of workflows; knowing the engine's shape saves a lot of rebuilds. ## Workflow types Each business document has a *workflow type* — a definition Microsoft ships per area (Vendor Invoice Workflow, Purchase Requisition Workflow, etc.). A workflow type defines which tasks, approvals, and conditional decisions are valid for that document. Customers create one or many workflow *instances* of each type, with different conditions to route to different approver chains. ## Designer The graphical workflow designer runs inside Finance/SCM, drag-and-drop, with elements: - **Manual decisions** — branch based on a condition (e.g. amount > 50,000). - **Approvals** — one or more approval steps, each with a defined approver (a named user, a hierarchy lookup, a workflow user, a position-based lookup). - **Tasks** — actions assigned to a user that aren't approvals (e.g. "verify supporting documents"). - **Automated tasks** — server-side actions (e.g. "apply default dimensions") that run without human interaction. - **Parallel branches** — multiple paths running concurrently with a join. ## Approver resolution Approvers can be resolved by: - **Hierarchical**: walk up the position hierarchy until an approver with sufficient authority is found. - **Named approver**: a specific user. - **Workflow user**: a user selected from a configured list. - **Limits**: signing limits per position drive how far up the hierarchy a document escalates. ## Conditions Workflow steps can be gated by **conditions** expressed in a simple query against document fields and dimensions. Conditions are why a 5,000-EUR invoice routes one way and a 500,000-EUR invoice routes another. ## Escalation Each step has an escalation policy — if the approver doesn't act in N days, the step reassigns or notifies. This is the saving grace of workflows that get stuck on leave. ## Delegation Users delegate their workflow inbox to a substitute during absences. ## Power Automate alternatives For workflows that need to reach outside Finance/SCM, customers increasingly use **Power Automate** approvals flows triggered by Dataverse changes (via virtual entities or Dual-write). The pattern: lightweight transactional approvals stay in F&O; cross-system or external-stakeholder approvals move to Power Automate. ## Operational reality Heavy workflow proliferation slows performance and clouds audit. Aim for ten well-designed workflows, not fifty quick ones. --- # Writing your first AL extension A first-walkthrough of building, publishing, and running a basic AL extension for Business Central — toolchain, project structure, and deployment. Source: https://www.solvingdynamics365.com/guides/writing-your-first-al-extension Section: Business Central / AL & development Published: 2026-05-01 Updated: 2026-08-31 This is the developer first-walkthrough. Setting up the environment is the most fiddly part; the AL itself is straightforward. ## Toolchain Install **Visual Studio Code** and add Microsoft's **AL Language** extension from the marketplace. That installs the AL compiler, language services, and debugger. You'll also want **Git** (for version control) and either a **Docker** environment for on-premise development or — far more common — a **Business Central sandbox** in your Microsoft 365 tenant for cloud development. ## Sandbox From the Business Central admin centre, create a new sandbox environment. Note its name, tenant ID, and the sandbox URL. The sandbox is free, fresh out of the box, and has demo data you can throw away. ## Project In VS Code, run `AL: Go!` from the command palette. Pick *Microsoft cloud sandbox*. Sign in with your tenant admin. The command scaffolds a new AL project folder with `app.json` (manifest), `launch.json` (debug configuration), and a sample `HelloWorld.al` page extension that adds a button to the Customer List. ## Compile and run Press F5. VS Code downloads symbols (Microsoft's compiled metadata for the platform and base app), compiles your extension, publishes it to the sandbox, and opens the sandbox URL on the Customer List. Your new action appears in the ribbon; clicking it runs your AL. ## Make it your own Replace the boilerplate with something useful. A common first step: a **page extension** that adds a custom field to the customer card, plus a **table extension** that adds the underlying column. Save, F5 again, see it live. ## Codeunit and event subscriber Next, add a codeunit with an event subscriber. Subscribe to `OnAfterInsertEvent` of the Customer table and write a debug log entry. Press F5; create a customer; see the log fire. You've now written extension behaviour that hooks into Microsoft's code without modifying it — the upgrade-safe pattern. ## The app.json fields that actually matter The manifest looks like boilerplate but three fields deserve attention on day one. **`idRanges`** declares which object IDs your extension may use — 50000–99999 is the customer range for per-tenant work; pick a slice and document it, because two extensions claiming the same IDs cannot coexist in one environment. **`id`, `publisher`, `name`, `version`** together identify the app; change the `id` GUID and BC treats it as a different app entirely, orphaning the old one's data. And **`dependencies`** lists other apps whose objects you reference — the compiler enforces it, and getting the dependency graph right early saves grief when you later split functionality across apps. While you're in there, set `"features": ["NoImplicitWith"]` behaviour aside — modern scaffolds handle it — but do turn on the **CodeCop / UICop / PerTenantExtensionCop** analyzers in settings; they teach you the platform's rules as warnings instead of AppSource rejections. ## When F5 doesn't work The first-session failures are predictable. *Symbols won't download*: usually a sign-in against the wrong tenant or environment name in `launch.json` — check `environmentName` matches the sandbox exactly. *"Object ID already in use"*: another extension (often an abandoned earlier attempt) claims the range — uninstall it from Extension Management or change your range. *Publish succeeds but nothing visible*: you're in a different company, or the page extension targets a page the role centre doesn't surface — navigate to the page directly by search. None of these mean anything is broken; they're the toll for the first afternoon. ## Source control Initialise a Git repo. Commit early. The `app.json` and source files are everything you need — there is no binary state worth keeping outside Git, and the `.alpackages` symbol cache belongs in `.gitignore`. ## From Hello World to something deployable The sandbox F5 loop publishes a **development-scope** extension, which is for exactly this: iterating. Getting code into a real environment is a different act — a **per-tenant extension** uploaded through Extension Management (or better, deployed by a pipeline), with a version number that increments and a schema BC will hold you to. Two habits to build before your first real deployment: never delete a field or object that has shipped (mark it obsolete instead — schema removal breaks upgrade), and add a **permission set object** to the app so admins can grant access without hand-crafting permissions. The wider structure — dependencies, affixes, when to split apps — is covered in [AL extensions architecture](https://www.solvingdynamics365.com/guides/al-extensions-architecture). ## Next steps Read Microsoft Learn's AL language reference; experiment with permission sets, translations, and dependencies; write a first test codeunit against the [AL test framework](https://www.solvingdynamics365.com/guides/al-test-framework); and look at the **AL-Go for GitHub** template, which turns the project into a build-and-deploy pipeline — the path described in [BC CI/CD with AL-Go](https://www.solvingdynamics365.com/guides/business-central-cicd-with-al-go). Event subscribers, the pattern from this walkthrough, scale into the platform's whole integration model; [AL events and integration patterns](https://www.solvingdynamics365.com/guides/al-events-and-integration-patterns) is the natural second read. ### Frequently asked questions **What do I need to start AL development?** Visual Studio Code with Microsoft's AL Language extension, Git, and a Business Central sandbox created from the admin centre. Run AL: Go! from the command palette to scaffold the project, then F5 downloads symbols, compiles, publishes, and opens the sandbox. **Which app.json fields matter on day one?** idRanges (50000–99999 is the per-tenant customer range; document your slice), the id GUID with publisher, name, and version (changing the id makes BC treat it as a different app), and dependencies. Turn on the CodeCop, UICop, and PerTenantExtensionCop analyzers in settings. **Why does F5 fail on the first afternoon?** Symbols will not download when the environmentName in launch.json does not match the sandbox; an Object ID already in use error means another extension claims the range; a successful publish with nothing visible usually means the wrong company or a page the role centre does not surface. **What habits should be in place before the first real deployment?** Never delete a shipped field or object — mark it obsolete, because schema removal breaks upgrade — and add a permission set object so admins can grant access. Keep .alpackages out of Git and move to a per-tenant extension deployed by a pipeline rather than the F5 development-scope loop. --- # X++ — the language behind Dynamics 365 Finance and Operations What X++ is, where it came from, and how it's used in F&O — language features, the application object tree. Source: https://www.solvingdynamics365.com/guides/f-and-o-x-plus-plus-language Section: Finance & SCM / AL & X++ development Published: 2026-05-01 Dynamics 365 Finance and Operations runs on **X++** — a proprietary object-oriented language that's been the foundation of the AX / F&O product family since the 1990s. Modern X++ feels like a hybrid of Java, C#, and SQL; for developers extending F&O, learning X++ is the prerequisite for serious work. ## Origin Born in the 1990s with Axapta (later acquired by Microsoft, becoming Dynamics AX, then Dynamics 365 F&O). Inspired by Object Pascal and Java; designed for business applications with native data access. ## Modern X++ As of F&O wave 2 2026: - **Compiled to IL** — runs on .NET CIL after compilation. - **Visual Studio development** — primary IDE; AOT (Application Object Tree) navigated visually. - **Modern syntax** — closures, attributes, generics (limited). - **Native SQL** — `select * from custTable where ...` works inline. The language has evolved significantly; modern X++ is more Java/C#-like than its Pascal heritage. **Core constructs.** - **Classes** with inheritance. - **Tables** as first-class objects (extending DataObject). - **Views, queries, maps.** - **Forms** with event-driven controllers. - **Reports** (mostly legacy; SSRS for newer). - **Workflows.** - **Services.** The Application Object Tree (AOT) is the namespace; all artefacts live in it organised by type. **Native SQL.** ```x++ CustTable custTable; select firstonly custTable where custTable.AccountNum == '4000'; ``` The `select` statement is integrated with the language; the compiler generates SQL. ## Table buffers A table variable represents a row buffer: ```x++ CustTable custTable; custTable.AccountNum = 'NEW001'; custTable.Name = 'New Customer'; custTable.insert(); ``` `custTable` is a buffer; methods like `.insert()`, `.update()`, `.delete()` operate on the buffer's data. **Extension model.** - **Chain of Command (CoC)** — extension method wrappers around base methods. - **Event handlers** — subscribe to pre/post events on base methods. - **Table extensions** — add fields, methods, events to existing tables. - **Form extensions** — add controls to existing forms. No direct base code modification; extensions only. This enables Microsoft to update base code without breaking customisations. **Visual Studio integration.** - Visual Studio with F&O developer tools installed. - Browse AOT, edit X++, compile, deploy. - Debugger built in. - Source control via Azure DevOps git. The development experience has improved dramatically vs the old MorphX environment. ## Classes vs tables Two distinct concepts: - **Class** — code logic, business rules. - **Table** — data storage. A class operates on table buffers; a table can have methods too but typically lightweight. ## The macro system X++ has a C-like preprocessor: ```x++ #define.MaxLength 100 ``` Used heavily in older code; less in modern. Macros pollute namespaces and are deprecated for most uses. ## Currency and value handling Built-in types for financial data: - **Real** — decimal numbers. - **Currency** — currency-aware decimals. - **Amount** — financial amounts with currency. Plus rounding helpers, conversion functions; financial math is first-class. **Common patterns.** **Iterate records:** ```x++ while select custTable where custTable.CustGroup == 'PREMIUM' { info(strFmt("Customer: %1", custTable.Name)); } ``` **Insert with transaction:** ```x++ ttsbegin; CustTable.insert(); ttscommit; ``` **Method call with exception:** ```x++ try { someMethod(); } catch { error("Something failed"); } ``` **Performance considerations.** - **Set-based vs record-based operations** — set-based much faster. - **Index utilisation** — define indexes for common queries. - **Cache hints** — `forupdate`, `notexistsjoin` for performance. - **Batch processing** — for long operations. **Modern X++ features.** - **Closures** (anonymous methods). - **Attributes** for metadata. - **Reflection** via SysDictType, SysDictClass. ## Comparison with C# X++ is similar to C# in many ways but: - Less generic (limited generics). - Native SQL integration. - Domain-specific for ERP. - Smaller community. C# developers picking up X++ usually feel productive within weeks. **Extension considerations.** - **Sandboxed dev environments** — Tier 1 VMs. - **Build server** — compiles and packages. - **Deployment via LCS or Azure DevOps** — to upper environments. The deployment story is more complex than BC's AL; F&O development is heavier infrastructure. **Common pitfalls.** - **Modifying base code.** Cardinal sin; updates break. - **Heavy in-loop DB calls** — performance dies. - **No transaction control.** Inconsistent state on errors. - **Skipping CoC pattern** — using events when CoC is cleaner. - **Macro overuse** — modern code prefers methods and constants. ## Strategic positioning X++ is here to stay — F&O is built on it; replacing it would mean a rewrite of millions of lines of base application code. Microsoft continues to invest: modernisation each wave, better tooling, Copilot-assisted X++ development emerging. Developers committing to F&O development should treat X++ as a long-term investment; the language isn't going anywhere. Mastery requires the language plus the AOT plus the patterns; investment time is meaningful but the resulting capability is in demand. --- # XRMToolBox and the Dataverse tooling ecosystem The community-built tools that supplement Microsoft's Dataverse admin and developer experience — XRMToolBox, FetchXML Builder, and the indispensable plug-ins. Source: https://www.solvingdynamics365.com/guides/xrmtoolbox-and-the-dataverse-tooling-ecosystem Section: Customer Engagement / Dataverse platform Published: 2026-07-18 Microsoft's official Dataverse tools — the maker portal, the Power Platform admin centre, the `pac` CLI, the Solution Checker — cover the basics well. But for serious Dataverse work, professionals universally reach for community-built tools, with **XRMToolBox** at the centre. This open-source ecosystem makes Dataverse genuinely productive for admins, developers, and consultants. ## XRMToolBox A free Windows desktop application — open-source, maintained by the Dynamics community — that hosts hundreds of plug-in tools. Install once; connect to any Dataverse environment; load whichever tool you need for the task at hand. The plug-in model is the strength: anyone can build a tool and contribute it; the community has produced an enormous catalogue covering every aspect of Dataverse work. **Essential XRMToolBox tools.** - **FetchXML Builder** — visually construct FetchXML queries with field pickers, condition builders, joins, aggregations. Generates the XML for use in views, reports, and plug-ins. Indispensable for anyone working with FetchXML. - **Plugin Trace Viewer** — read the plug-in trace log with rich filtering and search. Far better than the built-in trace log viewer for debugging. - **Plugin Registration Tool** — register, update, and configure plug-in assemblies. Microsoft's own tool; ships separately but is essential for plug-in developers. - **Audit History Viewer** — read audit logs with filters and export. The platform's built-in audit views are basic; this tool is much more usable. - **Bulk Data Updater** — perform bulk updates on Dataverse records via XML-defined operations. Avoids exporting to Excel, modifying, and re-importing. - **Solution Compare** — diff two solutions to see what changed. Essential during merge / upgrade scenarios. - **Easy Translator** — translate Dataverse field labels, view names, web resources for multi-language environments. Replaces the manual XML editing. - **Ribbon Workbench** — visual designer for command bar / ribbon customisation. Pre-modern-designer but still useful for some scenarios. - **Metadata Document Generator** — produce documentation of all tables, columns, relationships, security roles in an environment. Useful for handover and compliance. - **Security Permissions Reporter** — analyse who can do what across security roles, teams, hierarchies. - **CRM REST Builder** — construct Web API calls visually; copy the URL and headers for use in client code. Eliminates trial-and-error. - **View Designer** — richer view-building UX than the standard Power Apps portal. - **Real-time Workflow Tester** — trigger workflows on test records with controlled inputs; observe execution. - **Solution History** — track who installed what solution when in an environment. - **Field Usage Inspector** — analyse which custom fields are actually being used vs orphaned cruft. - **Record Counter** — count records by table; useful for capacity planning and pre-go-live validation. Dozens of others — for almost every Dataverse workflow, there's an XRMToolBox tool that makes it faster. **Installing and connecting.** 1. Download XRMToolBox from the official site. 2. Install. The host app launches. 3. Add an environment connection — credentials, OAuth flow. 4. From the plug-in marketplace, install the tools you need. 5. Click a tool to open; tools share the host's connection. The marketplace integrates with the GitHub-hosted source for each tool. **Other community tooling.** - **Power CAT tools** — Microsoft's customer-advisory-team has open-sourced several tools for governance, ALM, and inventory (the CoE Starter Kit is part of this lineage). - **Power Platform Build Tools for Azure DevOps** — covered in the ALM guides; essential for CI/CD. - **`pac` CLI** — Microsoft's command-line tool for Power Platform automation; not community but related. - **Spkl Task Runner** — automated tasks for plug-in deployment, solution operations. **Microsoft FastTrack tools.** For FastTrack-eligible customers, Microsoft provides additional tools — performance analysers, telemetry workbooks, design review templates. Often deployed alongside community tools. ## The community The Dataverse / Dynamics 365 community has been remarkably productive for over a decade. Conferences (Microsoft Business Applications Summit, Dynamics 365 user groups), forums (community.dynamics.com, Stack Overflow tags, Microsoft Learn), and the open-source tool ecosystem make Dataverse work feasible at scale. ## Why community tooling thrives Microsoft's product tooling necessarily lags real-world needs — making everything in the official products would be expensive and slow. The community fills the gap: a developer writing a tool for one customer publishes it as XRMToolBox plug-in; it becomes the answer for thousands of similar customers. **Common pitfalls.** - **Tool sprawl** — installing dozens of plug-ins; navigation becomes overwhelming. Curate. - **Plug-in version mismatches** — different plug-ins built against different Dataverse SDK versions can conflict. Update when needed. - **Outdated plug-ins** — abandoned plug-ins for retired Dataverse features still install but don't work; check active maintenance. ## Operational reality Anyone working seriously with Dataverse uses XRMToolBox daily. The investment in learning the ecosystem returns substantially across years of work. Treat it as part of the professional toolkit. --- # Year-end close in Dynamics 365 Finance How year-end close works in F&O — fiscal year closure, opening transactions, depreciation reset, ledger settlements, and the year-end ritual. Source: https://www.solvingdynamics365.com/guides/year-end-close-in-f-and-o Section: Finance & SCM / Finance Published: 2026-05-01 Year-end close in Dynamics 365 Finance is the culmination of the financial cycle — the formal closing of one fiscal year, the rolling of profit-and-loss balances into retained earnings, and the opening of the new year. Done well, it's a structured ritual with predictable steps; done badly, it's a frantic month of corrections that delays everyone. ## Pre-close preparation Before any year-end-specific steps, the year's final period must be fully closed: - All accruals posted. - All depreciation calculated and posted (final period plus catch-up). - All FX revaluations run with year-end rates. - All inventory closing completed (with year-end as the closing date). - All project recognitions and WIP postings finalised. - All AP / AR sub-ledgers reconciled to GL. - All bank accounts reconciled. - All intercompany reconciliations completed. These are part of normal monthly close; year-end just demands they all happen for the final period without gaps. ## Opening transactions A **closing transaction** posts on the last day of the fiscal year to capture the closing balances. Year-end specifically generates **opening transactions** on the first day of the new year — same balances but in the new year's books, ready to receive new postings. F&O's **Year-end close** routine performs: - **Closing of P&L accounts** — revenue and expense accounts close to zero by posting their balance to a **retained earnings** account (or multiple, per the chart-of-accounts configuration). - **Opening of balance-sheet accounts** — asset, liability, and equity accounts roll forward at their closing values as opening values. - **Closing transactions on dimensions** — if dimensions are tracked at year-end, closing transactions can carry them forward. - **Fiscal year status update** — the closing year moves to *Closed* status; the new year is opened for posting. **Closing methods.** - **Detailed close** — closes all P&L accounts to retained earnings line by line, preserving the audit trail. - **Summary close** — aggregates P&L into a single retained-earnings posting. - **Reverse close** — for reopening a year if needed (rare; should require strong governance). Most organisations use **Detailed close** for audit traceability. ## Fixed asset year-end Fixed assets have their own year-end handling: - **Depreciation books** roll forward — the current year's depreciation accumulates into the asset's accumulated depreciation; the new year's depreciation starts fresh. - **Asset transactions** before year-end-closure date are locked; transactions after open in the new year. - **Depreciation forecasts** for the new year can be generated for budgeting purposes. ## Project year-end Projects don't have separate year-end ceremony, but year-end is when: - Multi-year project budgets roll forward. - WIP balances at year-end reflect the project's true financial state for statutory purposes. - Outstanding project commitments carry into the new year. ## Inventory year-end Inventory closing for the final fiscal period locks inventory transactions as of year-end. **Physical inventory counts** that happen near year-end produce the audit-ready inventory valuation. Some organisations do mid-year cycle counts to spread the workload. ## Intercompany at year-end Multi-entity tenants reconcile intercompany balances rigorously at year-end. Each pair of entities must agree on: - Open intercompany invoices and payments. - IC sales and IC purchases. - IC asset transfers. - IC ledger settlements. The reconciliation typically takes weeks before year-end and surfaces discrepancies that require correction journals before close. ## Statutory and audit Year-end produces: - **Financial statements** — balance sheet, P&L, cash flow, equity statement. - **Notes and disclosures** — for statutory reporting. - **Audit packages** — for external auditors. - **Tax provision** — year-end tax accruals and corporate tax calculations. - **Country-specific year-end filings** — VAT annual returns, corporate income tax, etc. For multi-entity groups, **consolidation** at year-end produces group financial statements with eliminations and currency translation. ## Period and year permissions After closure, posting in the closed year is restricted to specific user roles. Re-opening a closed year is possible but should require governance approval and trigger audit-trail events. **Common pitfalls.** - **Trying to close before reconciliations complete** — produces wrong opening balances; expensive to fix. - **Forgetting subsidiary year-end alignment** — different fiscal years across entities create consolidation complexity. - **Insufficient retained-earnings configuration** — wrong account picks, single retained-earnings for multi-dimension structures that need separate ones. ## Operational reality Year-end is mostly a monthly close at scale. Disciplined monthly close means year-end isn't a special panic — it's just December's month-end plus the closing routine. Build the discipline year-round. ## Where to go next The routines that recur every period are in [periodic processes in F&O](https://www.solvingdynamics365.com/guides/periodic-processes-in-f-and-o); the calendar they run against is [fiscal calendar setup](https://www.solvingdynamics365.com/guides/fiscal-calendar-setup-in-f-and-o). Sub-ledger year-ends are covered in [fixed assets in F&O](https://www.solvingdynamics365.com/guides/fixed-assets-in-f-and-o) and [consolidations in F&O](https://www.solvingdynamics365.com/guides/consolidations-in-f-and-o), and the reporting pack in [finance reporting tools](https://www.solvingdynamics365.com/guides/dynamics-365-finance-reporting-tools). --- # Glossary Source: https://www.solvingdynamics365.com/glossary ## Access team Source: https://www.solvingdynamics365.com/glossary/access-team An **access team** in Dataverse is a lightweight, dynamic team used for **ad-hoc record-level access**. Unlike **owner teams**, access teams can't own records and don't have security roles assigned. Instead, access teams grant specific privileges (Read, Write, Append, Share) on a *specific record* through **access team templates**. The classic pattern: auto-created access teams per record, populated via a subgrid on the form — adding a user to the opportunity's "Sales Team" subgrid auto-creates the access team and grants the user record-level access to that specific opportunity. Lightweight; ideal for deal teams, case escalations, project consultants getting per-engagement access. Membership changes per record as collaboration evolves. ## Accounts payable Source: https://www.solvingdynamics365.com/glossary/accounts-payable **Accounts payable** (AP) is the function and the ledger that tracks what a business owes to its suppliers. In Business Central and Dynamics 365 Finance, AP transactions are created by posted vendor invoices and credit memos — generated either from purchase orders (matched to receipts) or entered standalone — and settled by payment journals that produce bank files. Standard AP features include payment terms, payment discounts, partial payments, ageing reports, payment proposals, three-way matching, and vendor statements. AP entries post simultaneously to the **vendor ledger** and the **general ledger**, with currency revaluation handled by period-end routines. ## Accounts receivable Source: https://www.solvingdynamics365.com/glossary/accounts-receivable **Accounts receivable** (AR) is the function and the ledger that tracks what a business is owed by its customers. In Business Central and Dynamics 365 Finance, AR transactions are created by posted sales invoices and credit memos and settled by customer payments applied through cash receipt journals or bank reconciliations. Standard AR features include payment terms, customer credit limits, finance charges, reminder letters, customer statements, payment discounts, and ageing reports. AR entries post simultaneously to the **customer ledger** and the **general ledger**. The AR function is often paired with credit and collections workflows for chasing overdue balances. ## Activity Source: https://www.solvingdynamics365.com/glossary/activity An **activity** in Dataverse and Dynamics 365 is a record representing an interaction — phone call, email, appointment, task, letter, fax, social activity, custom activity types. Activities share a common base table (the **Activity Party** model) and are designed to attach to other records' **timeline** — every interaction with a customer appears chronologically on the customer's record. Activities have status (Open, Completed, Cancelled), due date, regarding object, participants (sender / receiver / required attendee / optional attendee), and content (subject, description, attachments). Activities are the source of most CRM-side analytics — call volumes, response times, meeting frequency — and the basis for tracking sales effort, service interactions, and customer engagement over time. ## Agent (Copilot) Source: https://www.solvingdynamics365.com/glossary/agent An **agent** in the modern Microsoft AI vocabulary is a configured AI assistant — typically built in **Copilot Studio** — that combines an LLM (Azure OpenAI under the hood) with **knowledge sources** (Dataverse, SharePoint, websites, documents), **actions** (operations it can perform via connectors), and **channels** where it publishes (Teams, web, Power Pages, Omnichannel, WhatsApp). Agents converse with users, retrieve grounded answers from knowledge, take actions on systems including Dynamics 365, and hand off to humans gracefully when stuck. Microsoft uses **agent** as the umbrella term for this class of AI; older terminology included "bot" (Power Virtual Agents) and "Copilot extension". For Dynamics 365, custom agents extend the embedded copilots with customer-specific knowledge and actions. ## AI Builder Source: https://www.solvingdynamics365.com/glossary/ai-builder **AI Builder** is the no-code machine-learning capability inside the Power Platform. It ships **pre-built models** for common tasks — invoice processing, receipt reading, ID extraction, sentiment analysis, OCR, business card capture — and supports **custom-trained models** for prediction, classification, entity extraction, and document processing trained on the customer's own data. Models are called from Power Apps, Power Automate, Dataverse plug-ins, and Copilot Studio agents. AI Builder runs on a **credit** consumption model bundled with some Power Platform plans; tracking credit usage is the most common operational discipline. ## AL Language Source: https://www.solvingdynamics365.com/glossary/al-language **AL** is the programming language used to build extensions for Business Central. It replaced the older **C/AL** that was used in Dynamics NAV when Business Central moved to an extension-based customisation model. AL is a strongly-typed, Pascal-flavoured language with first-class objects for tables, pages, codeunits, reports, queries, and XMLports. Developers write AL inside Visual Studio Code with Microsoft's AL Language extension, debug against sandbox environments, and ship extensions as `.app` files distributed through AppSource, partner installation, or per-tenant deployment. AL is the only supported way to customise Business Central code. ## Alternate key Source: https://www.solvingdynamics365.com/glossary/alternate-key An **alternate key** in Dataverse is a defined uniqueness constraint on one or more columns of a table, enabling records to be identified by business-meaningful values (Tax ID, Email, Product Number, External System ID) instead of GUIDs. Once configured, inserts violating the uniqueness fail, and the Web API supports retrieval by the alternate key value rather than by GUID. Critical for integration scenarios — external systems can `Upsert` records by natural key without first looking up the Dataverse GUID. Common examples: Account by Tax ID, Contact by Email, Product by Product Number, Lead by external system ID. Activation requires existing data to be free of duplicates on the key columns. ## API Management (APIM) Source: https://www.solvingdynamics365.com/glossary/api-management **Azure API Management (APIM)** is Microsoft's managed API gateway. Sitting in front of Dataverse, Business Central, F&O, and other APIs, APIM adds **rate limiting** (per-consumer quotas), **authentication** (subscription keys, OAuth, JWT validation), **transformation** (request / response shape), **caching** (reduce backend load), **versioning** (manage API evolution), **observability** (every request logged), and a **developer portal** (auto-generated documentation for consumers). Behaviour is configured through declarative **policies** in XML. Products group APIs; subscriptions issued to consumers. For enterprise Dynamics 365 integrations with many consumers — partners, internal apps, mobile clients — APIM is the standard governance layer. Tiered pricing (Developer, Basic, Standard, Premium) based on capacity needs. ## App registration Source: https://www.solvingdynamics365.com/glossary/app-registration An **app registration** in Microsoft Entra ID is the registration that represents an application (or service, or integration) in the directory. From an app registration: - A **client ID** uniquely identifies the application. - A **client secret** or **certificate** authenticates the application. - **OAuth permissions** declare what the application can access — Dataverse user-or-application permissions, Microsoft Graph permissions, etc. - A **service principal** is created in the tenant; the app registration's permissions and credentials become the service principal's. - **Redirect URIs** for OAuth flows are configured. For Dynamics 365 integrations, an app registration is the prerequisite for any service-to-service automation — Power Automate flows authenticating to Dataverse, Azure Functions writing to Dataverse, CI/CD pipelines deploying solutions, custom apps consuming Dataverse APIs. Maintain credentials in Azure Key Vault; rotate secrets periodically; audit permissions. ## Approval workflow Source: https://www.solvingdynamics365.com/glossary/approval-workflow An **approval workflow** is a structured routing of a transactional document — purchase order, sales quote, vendor invoice, journal, expense report — through one or more approvers before it can post or progress. Dynamics 365 implements approval workflows three ways: **Business Central's built-in workflow engine** (template-driven, with approval limits and hierarchical routing); **Finance & SCM's workflow engine** (graphical designer with parallel branches, escalations, automated tasks); and **Power Automate approvals** (cross-system orchestration, the modern choice for workflows that reach outside one system). Common patterns: purchase orders over a threshold require manager approval; customer credit overrides need sales-leader sign-off; vendor invoices over a limit need controller approval. Built-in workflows enforce posting controls; Power Automate excels at cross-system orchestration. ## AppSource Source: https://www.solvingdynamics365.com/glossary/appsource **Microsoft AppSource** is the marketplace for business applications, extensions, and add-ons that run on Microsoft cloud products including Dynamics 365, the Power Platform, Microsoft 365, and Azure. For Dynamics 365 customers it is the canonical place to discover and install **ISV-built** functionality — country-specific localizations for Business Central, industry verticals on top of CRM, connectors, and AI agents. Apps are published by Microsoft partners under transactable or contact-me models, and Business Central extensions in particular must be available on AppSource to be installed into a SaaS tenant. ## Azure Source: https://www.solvingdynamics365.com/glossary/azure **Azure** is Microsoft's public cloud platform and the underlying infrastructure that hosts every Dynamics 365 app and the Power Platform. From a customer's perspective Azure shows up in several ways: as the region where the Dynamics 365 environment is provisioned, as the identity provider (Microsoft Entra ID, formerly Azure AD) that signs users in, and as the place where companies build complementary services — APIs, integrations, data warehouses, and AI models — that talk to Dynamics 365. Azure is also where partners host Logic Apps, Service Bus queues, and Functions used to integrate Business Central or Finance with third-party systems. ## Azure Function Source: https://www.solvingdynamics365.com/glossary/azure-function An **Azure Function** is a unit of serverless compute — code (C#, JavaScript, Python, PowerShell, Java) that runs on demand triggered by events. Triggers include **HTTP** (callable via REST URL), **Timer** (scheduled execution), **Service Bus / Queue** (consume queue messages), **Event Grid** (consume events), **Blob Storage**, **Cosmos DB**, and more. For Dynamics 365 integrations, Azure Functions are the standard answer when Power Automate doesn't fit — complex transformations, high-throughput processing, webhook receivers, scheduled batch jobs, API façades. Hosting tiers: **Consumption** (pay-per-execution, scales to zero), **Premium** (pre-warmed, no cold starts), **Dedicated** (App Service plan). Authentication to Dataverse via service principal or **Managed Identity**. Telemetry through Application Insights integrates automatically. ## BOM (Bill of Materials) Source: https://www.solvingdynamics365.com/glossary/bom A **bill of materials (BOM)** is the list of components, sub-assemblies, and raw materials needed to make a manufactured item. In Dynamics 365 it appears in three flavours: **production BOMs** (in Business Central Premium and Supply Chain Management — used for discrete manufacturing, with versioning and certification), **assembly BOMs** (in Business Central Essentials — simpler, single-level, for kitting and light assembly), and **formulas** (in Dynamics 365 Supply Chain Management — for process manufacturing with proportional ingredients, scaling, yields, and co-products / by-products). BOMs are paired with **routings** that describe the operations needed; together they drive **MRP** (planning) and production order execution. ## Business Central Source: https://www.solvingdynamics365.com/glossary/business-central **Business Central** (full name: Microsoft Dynamics 365 Business Central) is Microsoft's SaaS ERP aimed at small and mid-sized businesses. It is the direct successor to Dynamics NAV and ships with financials, inventory, sales, purchasing, basic manufacturing, and project accounting in a single integrated application. It is extended through AL extensions distributed via AppSource and licensed per user in Essentials or Premium tiers. Business Central runs on Microsoft's Azure cloud and integrates natively with Microsoft 365, Power BI, and the wider Power Platform. It is typically implemented by a certified partner. ## Business process flow (BPF) Source: https://www.solvingdynamics365.com/glossary/business-process-flow A **business process flow (BPF)** is the staged top-of-form progress bar in Dynamics 365 model-driven apps that guides users through a multi-step process — qualifying a lead through stages from Qualify → Develop → Propose → Close, for example. A BPF defines an ordered list of **stages**, each with **steps** (fields the user must complete). Required steps block stage transitions; optional steps prompt without blocking. BPFs can span **multiple tables** (lead → opportunity → quote), **branch** based on field values, and **trigger automations** on stage transitions through Power Automate. Best practice: three to seven stages, three to six steps each, with branching only where the process genuinely diverges. ## Business Process Modeller (BPM) Source: https://www.solvingdynamics365.com/glossary/business-process-modeller The **Business Process Modeller (BPM)** is a feature of **Lifecycle Services (LCS)** that provides a library of standard business processes for Dynamics 365 Finance and Supply Chain Management implementations — procure-to-pay, order-to-cash, record-to-report, hire-to-retire, and many others — documented as flow diagrams with embedded task descriptions. Implementation teams use BPM for **fit-gap analysis** (walking through standard processes and identifying customer-specific deviations), **process documentation** (the final BPM tree becomes a documented operational reference), and **task linking** (BPM tasks link to **Task Recorder** scripts that demonstrate the actual application steps). Customers customise BPM trees per their specific organisation; the result is a living process-documentation artefact maintained throughout the system's life. ## Business rule Source: https://www.solvingdynamics365.com/glossary/business-rule A **business rule** in Dataverse is a no-code mechanism for adding field-level logic to forms. The graphical designer lets makers configure conditions on field values and actions to take when the conditions are met — set a default value, lock a field, change its required status, show an error message, hide a section, suggest a value (recommendation). Business rules can scope to a single form or to the entire table; entity-scoped rules run both client-side and server-side, enforcing logic even on API writes. Limits: single-table only (no cross-table references), no external calls, no complex iteration. For richer logic, use **Power Automate flows**, **JavaScript via the Client API**, or **plug-ins**. Business rules are the right tool for the common "if X then require Y" pattern. ## Business units Source: https://www.solvingdynamics365.com/glossary/business-units A **business unit (BU)** in Dataverse is a hierarchical organisational scope that every user and every record belongs to. Each environment has a single root BU and a tree of child BUs beneath. **Security roles** combine table-level privileges with **scopes** that reference business units — *user-owned*, *business unit*, *parent: child business unit*, or *organisation* — determining whose records a user can act on. Business units typically map to organisational structure (divisions, regions, subsidiaries) but should be kept simple; overly deep trees complicate administration. **Teams**, **field-level security profiles**, and **row sharing** layer on top of the BU foundation for finer control. ## Calculated column Source: https://www.solvingdynamics365.com/glossary/calculated-column A **calculated column** in Dataverse is a column whose value is computed at *read time* from a formula referencing fields on the same record (or one level of related records). Every time the row is queried, the calculation runs. Formulas support arithmetic, simple conditional logic, some date/text functions. Trade-offs: always shows current values (no stale data); no storage cost (not persisted); but can't be queried or sorted efficiently because the value isn't indexed. For *aggregations* across related records, use **rollup columns** (which persist) instead. For more expressive formulas using Power Fx, use **formula columns**. For complex logic, use **plug-ins** or **Power Automate flows** that compute and store the value in a regular column. ## Canvas app Source: https://www.solvingdynamics365.com/glossary/canvas-app A **canvas app** is one of two Power Apps application types (the other being model-driven). Canvas apps start from a blank screen; the maker drags controls (galleries, text inputs, dropdowns, charts) and wires them up with **Power Fx** expressions. Layout is pixel-perfect; data sources can be Dataverse, SharePoint, SQL, Excel, hundreds of third-party connectors, and any combination. Canvas apps suit mobile-first scenarios, field-worker apps, kiosk-style apps, and bespoke UX patterns where standard Dynamics 365 chrome would be overkill. Trade-off vs **model-driven apps**: canvas apps don't auto-generate security-aware UI, advanced find, dashboards, or reports — those have to be built. Canvas apps support **offline mode** for mobile work without connectivity. ## Cascading delete Source: https://www.solvingdynamics365.com/glossary/cascading-delete **Cascading delete** in Dataverse is the relationship-level setting that controls what happens to child records when their parent is deleted. The options: **Cascade** (child records deleted too — useful when children have no meaning without parent, e.g. Sales Order Line on Sales Order), **Restrict** (block the parent's deletion if children exist — safer when children have independent value), **Remove Link** (delete parent but break the relationship to children, leaving them orphaned — rarely the right choice), **Cascade Active** (cascade only to active children), or **Cascade User-Owned** (cascade only to children owned by the same user). Configure cascade behaviour at relationship design time; reversing surprising data loss is rarely possible. ## Case Source: https://www.solvingdynamics365.com/glossary/case A **case** in Dynamics 365 Customer Service is the core record representing one unit of customer trouble — a question, complaint, service request, or incident. Each case carries a customer, subject, description, priority, status, owner, queue, attached entitlement and SLA, and a resolution. Cases are created from email, chat, voice, web form, social, SMS, WhatsApp, or by an agent manually. They route through **Unified Routing** to agents based on skills, capacity, queues, and SLAs. The lifecycle moves Active → Resolved → Cancelled, with optional parent/child relationships for complex investigations. Case timeline accumulates every interaction; knowledge articles attach inline; **Copilot** summarises and drafts responses. Cases are the unit of customer-service work and the source of most customer-service analytics. ## Chart of accounts Source: https://www.solvingdynamics365.com/glossary/chart-of-accounts A **chart of accounts** (CoA) is the structured list of accounts a business uses in its general ledger to categorise every financial transaction. Each account has a number, a name, a category (asset, liability, equity, income, or expense), and posting attributes. In Business Central and Dynamics 365 Finance, the CoA is paired with **dimensions** so transactions can be analysed by department, project, region, or any other lens without needing thousands of sub-accounts. Designing the CoA is one of the first tasks of any ERP implementation; once live, restructuring it is invasive, so the upfront design matters. ## Child flow Source: https://www.solvingdynamics365.com/glossary/child-flow A **child flow** in Power Automate is a flow invoked by another flow, enabling decomposition of complex workflows into reusable, maintainable units. Child flows are triggered by Power Apps or HTTP request triggers; parents call them via HTTP action with JSON payload matching the child's input schema. Common patterns: shared authentication helpers, document-generation services, audit-logging services, notification orchestrators that handle multi-channel delivery. Benefits include reusability (one child flow used by many parents), maintainability (smaller flows are easier to understand and modify), and independent versioning. Each invocation has HTTP overhead, so child flows suit substantial logic rather than trivial helper code. ## Classic workflow Source: https://www.solvingdynamics365.com/glossary/classic-workflow A **classic workflow** in Dataverse is the legacy workflow engine that predates Power Automate. Configured through the **process designer** in the maker portal, classic workflows run on Dataverse events (create, update, delete, status change) and execute sequences of steps — create records, update records, send emails, change status, conditional branches. Two modes: **real-time / synchronous** (runs in the same transaction; can roll back the originating operation on failure) and **background / asynchronous** (queued for later execution; supports wait conditions for delays / polling). Power Automate has substantially superseded classic workflows for new builds — better designer, broader connector library, better ALM. Classic workflow remains relevant for in-transaction synchronous logic and existing customisations. ## CoE Starter Kit Source: https://www.solvingdynamics365.com/glossary/coe-starter-kit The **Center of Excellence (CoE) Starter Kit** is Microsoft's free, open-source toolkit for governing the Power Platform at scale. It installs into a dedicated CoE environment and provides: tenant-wide **inventory** of every Power App, flow, custom connector, Power BI workspace, Power Pages site; **usage telemetry** showing which assets are heavily used vs abandoned; **owner attribution** including orphan-asset detection; **compliance workflows** for reviewing new apps before broad sharing; **admin tooling** for bulk operations; **nurture components** for engaging the maker community. Open-source means community-maintained and self-supported — not the same support model as licensed products. Customers customise the kit for their specific governance needs; commercial alternatives exist for larger or more complex tenants. ## Common Data Model Source: https://www.solvingdynamics365.com/glossary/common-data-model The **Common Data Model (CDM)** is Microsoft's open, standardised schema for business entities such as Account, Contact, Product, Order, Invoice, and Employee. It defines tables, relationships, and semantic types that apps can share so data flows between them without bespoke mapping. Dataverse uses the CDM as its starter schema, which is why Dynamics 365 Sales, Customer Service, Field Service, and Power Apps can interoperate out of the box. CDM definitions are open and published on GitHub, and are also used in Microsoft Fabric, Azure Data Lake, and a number of third-party data tools. ## Connection reference Source: https://www.solvingdynamics365.com/glossary/connection-reference A **connection reference** in the Power Platform is a solution component that abstracts the *kind* of connection a flow or app needs (e.g. "a SharePoint connection") from any specific connection instance (e.g. "the dev SharePoint site"). At solution import time, each connection reference is bound to an environment-specific connection — the same managed solution package deploys to dev, UAT, and production with different bindings per environment. Without connection references, deploying a flow across environments requires manually re-pointing every connection each time. Combined with **environment variables** for configuration values, connection references are essential to portable solution ALM. Modern Power Automate flows should use connection references for every external connector. ## Copilot Source: https://www.solvingdynamics365.com/glossary/copilot **Copilot** is Microsoft's umbrella brand for AI-assisted experiences across its product portfolio. In the Dynamics 365 context, "Copilot" appears in several distinct products: **Microsoft 365 Copilot** (embedded in Word, Excel, Outlook, Teams, etc.), **Copilot for Sales** (a per-user add-on for sellers), and various **embedded Copilots** inside specific Dynamics 365 apps — Copilot in Business Central, Copilot in Customer Service, Copilot in Finance. Each is a distinct product with separate licensing. **Copilot Studio** is the platform for building custom AI agents on top of all of these. The licensing landscape is non-trivial; verify per use case which Copilot a user is being offered. ## Copilot Studio Source: https://www.solvingdynamics365.com/glossary/copilot-studio **Microsoft Copilot Studio** is the low-code platform for building AI agents — conversational and increasingly autonomous — that integrate deeply with Dynamics 365 and the rest of the Microsoft cloud. Successor to Power Virtual Agents, with a much heavier generative AI core. An agent is configured with a role, knowledge sources (Dataverse tables, SharePoint, websites, documents), actions (the operations it can take via connectors), and channels where it publishes (Teams, web, Power Pages, Omnichannel, WhatsApp, others). It combines deterministic **topics** with **generative answers** for the long tail. The standard way to extend Dynamics 365 with custom AI. ## CRM Source: https://www.solvingdynamics365.com/glossary/crm **CRM** stands for *Customer Relationship Management*. It refers to software that manages a company's interactions with current and prospective customers across sales, customer service, marketing, and field operations. A CRM is typically organised around Accounts and Contacts, with activities, opportunities, cases, and campaigns hanging off them. Microsoft's CRM offerings inside Dynamics 365 include Sales, Customer Service, Field Service, Project Operations, and Customer Insights, all built on Microsoft Dataverse. Modern CRM systems are deeply integrated with email, calendar, telephony, and AI assistants, and are licensed per user per month. ## Custom action Source: https://www.solvingdynamics365.com/glossary/custom-action A **custom action** in Dataverse is a named operation that wraps business logic with typed input and output parameters, callable from many surfaces — Web API, plug-ins, JavaScript on forms, Power Automate flows, and other integrations. Custom actions are the canonical pattern for **encapsulating business operations**: a single "ApproveExpense" action can perform multiple steps atomically (verify limits, deduct budget, update status, notify) without exposing the internal logic to callers. Implemented either as configured workflows or as plug-ins. Can be **bound** to a specific table or **unbound** (global). Treat custom actions as API contracts — input / output signatures should evolve carefully because external callers depend on them. ## Cutover Source: https://www.solvingdynamics365.com/glossary/cutover **Cutover** is the structured sequence of activities that transitions a customer from legacy systems to Dynamics 365 at go-live. A typical cutover plan covers: final data extract from the legacy system, transformation, load into Dynamics 365, reconciliation to the penny against expected balances, integration endpoint switchover from test to live, user account activation, and the formal cut moment where the legacy system goes read-only and the new system accepts production transactions. Mature implementations run a **mock cutover** (a complete dry-run, often a month before go-live) and a real cutover (the actual event, usually over a weekend or holiday). A detailed minute-by-minute cutover runbook is one of the most important pre-go-live deliverables. ## Data entity Source: https://www.solvingdynamics365.com/glossary/data-entity A **data entity** in Dynamics 365 Finance and Supply Chain Management is a denormalised, stable view of one or more underlying tables, presented as a single shape with consistent field names. Microsoft ships hundreds — Customer, Vendor, Item, Sales Order Header, Sales Order Line, GL Journal Voucher, Project Transaction. Data entities are the unit consumed by the **Data Management Framework (DMF)** for bulk import / export and by the **Recurring Integrations API** for scheduled HTTP-based integration. **Composite entities** group related entities for transactional import (e.g. sales order header + lines as one atomic unit). Data entities are versioned so consuming integrations don't break when underlying tables evolve. ## Data gateway Source: https://www.solvingdynamics365.com/glossary/data-gateway The **on-premises data gateway** is a Windows service running inside a customer's network that bridges cloud services (Power BI, Power Automate, Logic Apps, Power Apps) to on-prem data sources (SQL Server, file shares, custom APIs, legacy applications). Outbound-only connection through Azure Service Bus relay — no inbound firewall openings needed. Two modes: **standard** (multi-user production, with clustering for high availability) and **personal** (individual maker, less robust). Configured data sources include credentials; cloud services use the gateway as a routed access point. Essential infrastructure for hybrid cloud / on-prem analytics during transitions and for permanently on-premise data sources. Update monthly; cluster for production resilience. ## Data Management Framework (DMF) Source: https://www.solvingdynamics365.com/glossary/dmf The **Data Management Framework (DMF)** is the Dynamics 365 Finance and Supply Chain Management tool for bulk data movement. It centres on **data entities** — denormalised, versioned views of one or more underlying tables — that are imported or exported through **data projects**. DMF handles initial customer migrations, ongoing batch ETL, and **recurring integrations** through scheduled file drops or HTTP endpoints. Composite entities import related tables in a single transactional unit. DMF is the heavy-batch counterpart to **Dual-write** (synchronous near-real-time sync) and is used heavily during data migration cycles and for high-volume scheduled integrations. ## Dataflow Source: https://www.solvingdynamics365.com/glossary/dataflow A **dataflow** in the Power Platform is a Power Query-based ETL pipeline that ingests data from a source (SQL, SharePoint, Excel, CSV, API, another database), transforms it through Power Query M expressions, and lands it in Dataverse on a scheduled refresh. Dataflows are how citizen developers build data integration without coding — drag-and-drop transformations, declarative joins, type coercion, merging multiple sources into a unified shape. Output can be **standard dataflows** (writing into Dataverse tables) or **analytical dataflows** (writing into Power BI semantic models or Azure Data Lake). For Dynamics 365 integrations involving moderate data volumes and configurable transformations, dataflows are often a simpler answer than custom code or full ADF pipelines. ## Dataverse search Source: https://www.solvingdynamics365.com/glossary/dataverse-search **Dataverse search** (formerly Relevance Search) is the modern global search experience in Dynamics 365 and Power Apps. Built on **Azure Cognitive Search** under the hood, it indexes content asynchronously and serves queries through a dedicated search service. Characteristics: fast (milliseconds even on millions of records), global (across all configured tables), relevance-ranked, fuzzy matching (handles typos, partial matches, word stems), faceted filtering. Configured per environment — admins enable specific tables and columns for indexing. Distinct from **Quick Find**, which searches the live database per-table without relevance ranking. Dataverse search is the right tool for global discovery; Quick Find for per-view live-current filtering. Both must be configured deliberately for users to find them useful. ## Dimensions Source: https://www.solvingdynamics365.com/glossary/dimensions **Dimensions** are configurable analytical tags attached to every ledger transaction, replacing the proliferation of GL sub-accounts you find in older accounting systems. Common dimensions include Department, Cost Centre, Project, Region, Customer Group, Salesperson, and Brand. In **Business Central**, eight global dimensions are available with up to two shortcut dimensions reportable directly from the chart of accounts. In **Dynamics 365 Finance** the limit is higher (up to ten financial dimensions). Dimensions can be required, restricted to combinations, or defaulted from master records, and they make slice-and-dice reporting in Power BI or built-in account schedules straightforward. ## DLP policy Source: https://www.solvingdynamics365.com/glossary/dlp-policy A **Data Loss Prevention (DLP) policy** in the Power Platform classifies connectors into groups — typically **Business**, **Non-Business**, **Blocked** — and prevents Power Automate flows and Power Apps from combining connectors across groups in ways that could leak sensitive data. The canonical example: a flow that reads Dataverse (Business) and writes to a personal Dropbox (Non-Business) would be blocked by a DLP policy that puts Dataverse in Business and Dropbox in Non-Business. DLP policies apply per environment or tenant-wide; multiple policies can layer with priority. Configured in the **Power Platform admin centre**. Essential governance — without DLP, the Power Platform's hundreds of connectors create unconstrained data-flow paths. Start with a tenant-baseline policy; refine per environment. ## Dual-write Source: https://www.solvingdynamics365.com/glossary/dual-write **Dual-write** is the synchronous integration framework that connects **Dynamics 365 Finance and Supply Chain Management** (which run on their own database) with **Microsoft Dataverse** (which underlies the CRM-side D365 apps and the Power Platform). It defines **maps** — pairs of tables, one in F&O and one in Dataverse, with field-level mappings — and synchronises records near-real-time on save. Microsoft ships dozens of standard maps for customer, vendor, product, sales order, and other key entities; custom maps extend them. Direction can be one-way or bi-directional. Dual-write is the standard pattern for customers running F&O alongside CRM-side D365 apps, and a configuration discipline rather than custom code. ## Duplicate detection Source: https://www.solvingdynamics365.com/glossary/duplicate-detection **Duplicate detection** in Dataverse is the mechanism that identifies potential duplicate records to keep CRM data clean. **Duplicate detection rules** define what counts as a duplicate per table — combinations of fields with matching operators (exact, fuzzy, phonetic, prefix). When records are created or updated, active rules evaluate against existing records; matches trigger warnings on the UI form or block API writes (configurable). Bulk **duplicate detection jobs** scan tables retrospectively to find existing duplicates. Once identified, the **merge** function combines two records, preserving one as the master and transferring related records (activities, opportunities, cases) from the duplicate before deletion. For enterprise-scale deduplication across multiple systems, **Customer Insights – Data** does ML-assisted identity resolution. ## Dynamics 365 Source: https://www.solvingdynamics365.com/glossary/dynamics-365 **Dynamics 365** is Microsoft's portfolio of cloud-based business applications launched in 2016, combining ERP and CRM into a modular suite. It includes apps for Sales, Customer Service, Field Service, Finance, Supply Chain Management, Business Central, Project Operations, Human Resources, Commerce, and Customer Insights, all sold per user per app. The apps share a foundation of Microsoft Dataverse, Microsoft Entra ID, and the Power Platform, and integrate natively with Microsoft 365. Dynamics 365 is the successor to Dynamics AX, NAV, GP, SL, and CRM, and is implemented primarily by Microsoft's partner network. ## Dynamics NAV Source: https://www.solvingdynamics365.com/glossary/dynamics-nav **Dynamics NAV** (originally Navision) was Microsoft's on-premise ERP product for small and mid-sized businesses. It was acquired by Microsoft in 2002 and went through annual releases up to NAV 2018 before being rebranded and re-engineered as Dynamics 365 Business Central. NAV introduced the C/AL programming language and the role-tailored client, and it built a large global partner ecosystem around vertical add-ons. Mainstream support for NAV ended for older versions but many organisations still run NAV 2016, 2017, or 2018 and migrate to Business Central as upgrade projects. ## Electronic Reporting (GER) Source: https://www.solvingdynamics365.com/glossary/electronic-reporting **Electronic Reporting (ER)**, also known as **Globalization Studio** in newer terminology, is Dynamics 365 Finance and Supply Chain Management's configurable, no-code framework for generating structured outputs (XML, JSON, fixed-width, CSV) and parsing inbound structured inputs. ER configurations are versioned, exported through a global repository (so customers and partners share country-specific implementations), and applied at runtime to produce outputs like **statutory e-invoicing** (Italy SDI, Spain SII, Mexico CFDI, Brazil NFe), **VAT returns** (UK MTD, OSS, country-specific), **payment files** (SEPA, BACS, ACH, country-specific bank formats), **SAF-T exports**, **intrastat declarations**. ER replaces what historically required hard-coded country-specific outputs with a maintainable configuration layer. ## Environment variable Source: https://www.solvingdynamics365.com/glossary/environment-variable An **environment variable** in the Power Platform is a solution component that abstracts a *configuration value* — a URL, a feature flag, a threshold number, a JSON document — so it can differ per environment without changing the solution itself. Variable types include String, Number, Boolean, JSON, Data Source (for table references), and Secret (Azure Key Vault-backed for sensitive values). The solution defines the variable with a default value (typically the dev value); on import to other environments, the import flow accepts environment-specific values. Combined with **connection references** for connector bindings, environment variables enable truly portable solution packages that deploy across dev / UAT / production cleanly without modification. ## Environments Source: https://www.solvingdynamics365.com/glossary/environments An **environment** is an isolated instance of a Dynamics 365 tenant, with its own database, users, configurations, and code. A typical setup has one **production** environment plus one or more **sandbox** environments for development, testing, training, and data refreshes. Business Central includes one production environment per tenant by default, with additional production and sandbox environments licensed as add-ons. Dynamics 365 CRM-side apps and Finance/SCM follow a similar model with their own environment SKUs. Best practice is to develop in a sandbox, test in a separate UAT sandbox, and promote releases to production through a controlled lifecycle. ## ERP Source: https://www.solvingdynamics365.com/glossary/erp **ERP** stands for *Enterprise Resource Planning*. It refers to a category of business software that unifies the back-office processes a company needs to operate — general ledger, accounts payable and receivable, inventory, procurement, order management, manufacturing, and reporting — on a shared data model. ERP systems replace siloed departmental tools with a single source of truth, so a sale recorded in one module automatically updates inventory, revenue, and tax in the others. Microsoft's ERP offerings in the Dynamics 365 family include Finance, Supply Chain Management, and Business Central. ERPs are typically deployed as SaaS today. ## Event Grid Source: https://www.solvingdynamics365.com/glossary/event-grid **Azure Event Grid** is Microsoft's lightweight pub/sub eventing service designed for cloud-scale fan-out. Dataverse can publish change events to Event Grid topics; multiple **subscribers** can independently subscribe with their own filters. Each subscriber receives the events it filtered for, processed independently — if one subscriber is down, the others are unaffected. Subscribers include Azure Functions, Logic Apps, webhook endpoints, Service Bus queues (for chained durable processing), Event Hubs, and Storage queues. Event Grid scales to millions of events per second and is generally cheaper than Service Bus at high volume, but offers shorter retention (24h default) and less durable processing guarantees. The right pattern when many subscribers need to be notified of Dataverse changes; for transactional integration, prefer Service Bus. ## Eventual consistency Source: https://www.solvingdynamics365.com/glossary/eventual-consistency **Eventual consistency** is the property of distributed systems where related data across multiple stores reaches a consistent state *over time* rather than *immediately*. Common in Dynamics 365 integrations: a sales order placed in Sales eventually appears in Business Central; a customer update in Dataverse eventually propagates to downstream subscribers; a Dual-write sync between F&O and Dataverse has small delays. The trade-off: strong consistency requires synchronous coordination (slower, fragile under failure); eventual consistency tolerates delays in exchange for availability and scale. Design integrations recognising eventual consistency — users see "your order is being processed" while async flows complete; downstream systems may be seconds-to-minutes behind the source; reports clarify "as of" timestamps for stale data. ## Extensions Source: https://www.solvingdynamics365.com/glossary/extensions **Extensions** are the modern, supported way to customise Microsoft business apps. In Business Central, an extension is an AL package that adds new tables, pages, code, and integrations alongside the base application without modifying Microsoft's own objects — which is why upgrades stay non-breaking. Extensions are installed per tenant, published through AppSource, or pushed by a partner. Dynamics 365 CRM-side apps use a similar concept through **solutions** in Dataverse, which package tables, forms, security roles, flows, and Power Apps. Both models replace the older practice of editing the base product directly. ## FastTrack Source: https://www.solvingdynamics365.com/glossary/fasttrack **FastTrack for Dynamics 365** is Microsoft's free advisory and engineering program for qualifying customer implementations. FastTrack engineers — Microsoft staff, not consultants — sit alongside the customer and their implementation partner, providing architecture design reviews, Solution Blueprint Reviews (SBRs), Go-Live Readiness Reviews, and escalation to product engineering for blockers. FastTrack does not deliver implementations or write code; it advises, reviews, and documents findings against the **Success by Design** rubric. Eligibility is licence-volume-based and typically applies to enterprise customers; engagement is by Microsoft account team referral. ## FetchXML Source: https://www.solvingdynamics365.com/glossary/fetchxml **FetchXML** is Dataverse's XML-based query language. It powers **Advanced Find** in the Dynamics 365 UI, **stored views** in Dataverse (which are FetchXML under the hood), **plug-ins** doing complex queries via the SDK, and **Power Automate flows** that use FetchXML in the "List rows" action. FetchXML is more expressive than OData for complex queries with group-by, aggregations, and nested link-entity joins; it's verbose but powerful. For modern integration work — external systems calling Dataverse over HTTP — **OData** is the standard choice. Both compile to the same underlying SQL, so performance is comparable. Tools like XrmToolBox's FetchXML Builder make hand-writing the XML less tedious. ## Field-level security (FLS) Source: https://www.solvingdynamics365.com/glossary/field-level-security **Field-level security (FLS)** in Dataverse restricts access to specific columns within a row, beyond row-level security from security roles. A column is marked **Secured**; users see it only if they belong to a **field security profile** that grants Read / Update / Create access. Common uses: HR data (Salary, Performance Rating), sensitive financial data (Credit Score, Internal Risk Assessment), PII (SSN, Date of Birth), internal-only notes. The platform enforces FLS at form rendering, API responses, reports, and views — secured fields are stripped from responses to unauthorised users. Mobile offline caches also respect FLS — sensitive data isn't cached on devices users without access. Use FLS selectively for genuinely sensitive columns; don't apply universally. ## Fiscal period Source: https://www.solvingdynamics365.com/glossary/fiscal-period A **fiscal period** is an accounting period defined in Business Central's *Accounting Periods* or Dynamics 365 Finance's *Fiscal calendars* — typically a calendar month, with quarters and years aggregating. Each period has a start date, end date, and a status that governs posting behaviour: **Open** (transactions can post), **On Hold** (only privileged users can post), **Closed** (no further posting). Period close is the controlled sequence that moves a period from Open to Closed after all accruals, revaluations, reconciliations, and adjustments are complete. Multiple **fiscal calendars** can coexist (statutory, group, tax) with parallel periods. The fiscal year is typically the regulatory accounting year (matching tax / statutory reporting); some companies use non-calendar years (e.g. April – March, July – June). ## Fit-gap analysis Source: https://www.solvingdynamics365.com/glossary/fit-gap **Fit-gap analysis** is the structured comparison of a customer's requirements against an ERP or CRM's out-of-the-box capabilities, classifying each requirement as **fit** (standard does it), **fit with configuration** (standard handles it with setup), **gap** (no standard support — needs customisation, third-party add-on, or process change). Most implementations begin with fit-gap workshops by area (finance, sales, operations, etc.), and the resulting gap list drives the customisation budget and scope. **Success by Design** methodology emphasises **fit to standard** — every gap is evaluated against business value before being committed to as customisation. Honest fit-gap analysis is one of the most consequential early-project activities. ## Formula column Source: https://www.solvingdynamics365.com/glossary/formula-column A **formula column** in Dataverse is a more recent column type that uses **Power Fx** (the same language as canvas Power Apps) for richer formula syntax than the older **calculated columns**. Formula columns evaluate at read time, so they're real-time like calculated columns but with substantially more available functions and constructs. Trade-offs: cannot reference related-table aggregations (use **rollup columns** for that), limited indexing for query performance, still subject to read-time computation cost. For most cases where calculated columns fall short of formula expressiveness, formula columns are the right upgrade. Verify target environment platform version supports them before deploying solutions that depend on them. ## General ledger Source: https://www.solvingdynamics365.com/glossary/general-ledger The **general ledger** (GL) is the central accounting record of an organisation, holding every posted financial transaction grouped by account in the **chart of accounts**. Every other module in an ERP — sales, purchasing, inventory, fixed assets, payroll, projects — ultimately writes to the GL through posting groups, so the GL is the single source of truth for the financial statements. In Business Central and Dynamics 365 Finance, GL entries are immutable once posted and are paired with **dimensions** for analysis. Period close, reconciliations, and statutory reporting all run against the GL. ## Go-live Source: https://www.solvingdynamics365.com/glossary/go-live **Go-live** is the moment a Dynamics 365 implementation stops being a project and becomes a production system. It is when migrated master data and opening balances are loaded, integrations are switched to live endpoints, the previous system is frozen or decommissioned, and users start posting real transactions. Go-live is preceded by user acceptance testing, a final data migration rehearsal, and a cutover plan that maps every step over a defined window. Most go-lives run with extra partner support for two to four weeks afterwards — known as **hypercare** — to handle questions and fixes before transitioning to steady-state support. ## Graph connector Source: https://www.solvingdynamics365.com/glossary/graph-connector A **Graph connector** is a mechanism that indexes content from external systems — including Dataverse and Dynamics 365 — into the **Microsoft Graph** index, making it discoverable through **Microsoft Search** across the Microsoft 365 experience and groundable by **Microsoft 365 Copilot**. Microsoft ships connectors for Dynamics 365 tables (Accounts, Opportunities, Cases, etc.), Business Central, ServiceNow, Salesforce, Jira, Confluence, file shares, and many other systems. Once configured per environment, the connector pulls content on a schedule, transforms it for Graph indexing, and pushes it into the tenant's search index. Indexed content respects source-system security at search time. Critical for surfacing Dynamics 365 data in M365 Copilot grounding and Microsoft Search across Outlook / Teams / Word / etc. ## Idempotency Source: https://www.solvingdynamics365.com/glossary/idempotency **Idempotency** is the property of an operation where running it multiple times produces the same result as running it once. Essential for Dynamics 365 integrations because distributed systems retry — network timeouts, webhook redeliveries, Service Bus retries all produce duplicate message arrivals. A non-idempotent integration receiving the same event twice creates duplicate records, double-charges customers, sends repeated notifications. Patterns for idempotency: **Upsert with alternate key** (Dataverse's natural idempotency for record creation), **check-before-create** (query for existence first; acceptable at low volume), **correlation IDs** (track processed event IDs and skip duplicates), **natural keys** (business identifiers that detect duplicates inherently). Design every integration for idempotency; the cost is small, the protection is substantial. ## Implementation Source: https://www.solvingdynamics365.com/glossary/implementation An **implementation** is the project that takes Dynamics 365 from a licensed but empty tenant to a working production system. A typical implementation covers requirements analysis, fit-gap analysis against the standard product, configuration, custom development (AL extensions for Business Central, plugins or Power Platform for CRM), data migration from legacy systems, integration to other applications, user training, testing, and cutover to go-live. Implementations are almost always delivered by a Microsoft partner using a structured methodology — Microsoft's official guidance is **Success by Design** — and run anywhere from a few weeks for a small Business Central project to multi-year programmes for large Finance/SCM rollouts. ## Intercompany Source: https://www.solvingdynamics365.com/glossary/intercompany **Intercompany** transactions are sales, purchases, payments, or transfers that happen between two legal entities within the same corporate group. Each entity records its side independently — a sale in one company is a purchase in the other — and the matched balances are eliminated on group consolidation so they don't double-count revenue or inventory. Business Central supports intercompany posting between linked companies in the same database. Dynamics 365 Finance scales it across hundreds of legal entities with shared chart-of-accounts policies, intercompany payments, and intercompany inventory transfers. Both products produce the intercompany ledger entries needed for group consolidations. ## Inventory Source: https://www.solvingdynamics365.com/glossary/inventory **Inventory** is the stock of physical goods a business holds for sale, production, or consumption. In Business Central and Dynamics 365 Supply Chain Management, every inventory transaction is recorded in the **item ledger** (quantity) and the **value entry** table (cost), tied to a costing method — FIFO, LIFO, Average, Standard, or Specific. Inventory is held at one or more **locations**, optionally subdivided into **bins**, and tagged with serial numbers, lot numbers, expiry dates, or item variants. Inventory valuation flows to the GL through inventory posting groups and is reconciled against the balance sheet at period close. ## Inventory dimension Source: https://www.solvingdynamics365.com/glossary/inventory-dimension An **inventory dimension** in Dynamics 365 Supply Chain Management is the structural concept that gives each physical unit of inventory its distinct identity. Three dimension groups: **product dimensions** (Size, Colour, Configuration, Style — make one item different from another within a product master), **storage dimensions** (Site, Warehouse, Location, Inventory Status — *where* the inventory is held), and **tracking dimensions** (Batch, Serial, Owner, Licence Plate — make individual units distinguishable within a storage location). Each dimension is configured per item as active or inactive; activation determines the operational granularity. More dimensions = more precision but more overhead; design per item category, not uniformly. Inventory dimensions drive picking, costing, planning, reservation, and traceability behaviour throughout SCM. ## ISVs Source: https://www.solvingdynamics365.com/glossary/isvs **ISV** stands for *Independent Software Vendor*. In the Microsoft business apps ecosystem, ISVs are partners who build and sell **packaged products** — extensions, add-ons, vertical solutions, country localizations, connectors — that run on top of Dynamics 365 or the Power Platform. ISVs are distinct from implementation partners (sometimes called SIs or VARs), although many partners do both. ISV products are typically distributed through Microsoft AppSource, are licensed separately from the core Dynamics 365 subscription, and may add country compliance, industry-specific functionality (e.g. construction, wholesale, food, manufacturing), or generic utilities like document automation. ## Job costing Source: https://www.solvingdynamics365.com/glossary/job-costing **Job costing** is the practice of tracking costs and revenue against individual jobs, projects, or work orders so that profitability can be measured and customers billed accurately. In Business Central's project module (still called **Jobs** in older versions), every resource hour, item issue, and GL expense can be posted against a job and a job task, with separate budget and billable plans. Work-in-progress (WIP) journals defer cost to the balance sheet until revenue is recognised on completion or percentage-of-completion. Job costing is essential for professional services, construction, engineering, installation, and any business where work is delivered as discrete engagements. ## Job queue Source: https://www.solvingdynamics365.com/glossary/job-queue The **job queue** in Business Central is the platform's scheduler for background and recurring tasks — nightly batch routines (Adjust Cost — Item Entries, Post Inventory Cost to G/L), scheduled report generation, asynchronous integrations, exchange-rate updates. Each job queue entry has an object to run, a schedule, retry policy, and a user context. Entries can be grouped into **job queue categories** for concurrency control — serialised categories prevent long-running jobs from overlapping. Failures move to Error status with the captured exception. Telemetry through Application Insights records job runs; healthy operations monitor failed jobs daily. ## Lead Source: https://www.solvingdynamics365.com/glossary/lead A **lead** in Dynamics 365 Sales (and the wider CRM-side Dynamics 365 stack) represents a prospect who has shown interest but hasn't yet been qualified as a real sales opportunity. Leads come from inbound channels — website forms, marketing campaigns, events, purchased lists, business cards, partner referrals — and live in a separate table from Contacts and Accounts deliberately, so unqualified noise doesn't pollute the CRM's relationship records. A lead has minimal mandatory fields (name, contact info, company, source); through **qualification**, the lead converts to a Contact (and optionally an Account) plus an Opportunity. Disqualified leads are retained for audit and pattern analysis. Some organisations skip leads entirely and qualify directly on Contacts; the choice is per business process. ## Lifecycle Services Source: https://www.solvingdynamics365.com/glossary/lifecycle-services **Microsoft Dynamics Lifecycle Services (LCS)** is the central portal for managing Dynamics 365 Finance and Supply Chain Management implementations. Every Finance/SCM project has an LCS workspace where customers and partners manage environments (request, provision, copy, refresh), deploy code as **deployable packages**, apply platform and application updates, run the **Business Process Modeller (BPM)**, file support tickets, and store assets in the **asset library**. The **Task Recorder** integrates with LCS for capturing user actions as reusable scripts. Microsoft is gradually migrating LCS functions to the **Power Platform admin centre**; today both consoles are in use side by side. ## Liquid Source: https://www.solvingdynamics365.com/glossary/liquid **Liquid** is the templating language originally created by Shopify, now used by **Power Pages** for rendering portal content. Liquid mixes HTML with **outputs** (`{{ variable }}` for printing values), **tags** (`{% if %}`, `{% for %}`, `{% capture %}` for control flow), and **filters** (`| upcase`, `| date`, `| escape` for transformations). Power Pages exposes specific objects — `user`, `page`, `entities`, `weblinks`, `request` — for accessing live data. Templates query Dataverse through `{% fetchxml %}` and `{% entityview %}` tags. Logic is intentionally limited — sandboxed, no arbitrary code execution — for safe content rendering of customer-facing pages. Auto-escapes user-supplied content to prevent XSS; bypassing escaping is rarely the right choice. ## Managed solution Source: https://www.solvingdynamics365.com/glossary/managed-solution A **managed solution** is a Power Platform solution exported and installed in a read-only deployment state. Components inside a managed solution cannot be edited in the target environment — users see them but cannot modify them, ensuring the customisations as delivered remain as delivered. Managed is the state of every UAT and production environment in a healthy ALM model; **unmanaged** solutions exist only in development environments where edits happen. Managed solutions support layering — multiple managed solutions install on top of each other (e.g. ISV base plus customer customisations) — and can be cleanly uninstalled in reverse order. The standard way to deploy Power Platform applications across environments. ## Manufacturing orders Source: https://www.solvingdynamics365.com/glossary/manufacturing-orders **Manufacturing orders** — called **production orders** in Business Central and Dynamics 365 Supply Chain Management — authorise and track the production of finished goods from raw materials. A typical production order references a **production BOM** (the components needed), a **routing** (the operations performed and on which work centres), and a quantity. As work progresses, **consumption journals** record material usage and **output journals** record finished quantities, scrap, and operation time. Cost flows into work-in-process and lands on the finished item when the order is fully finished. Production orders transition through statuses: planned → firm planned → released → finished. ## Many-to-many (N:N) relationship Source: https://www.solvingdynamics365.com/glossary/many-to-many A **many-to-many (N:N) relationship** in Dataverse models situations where records on both sides can relate to many records on the other — Students enrolled in Courses, Products tagged with Categories, Contacts on Marketing Lists. Two implementation patterns: **native N:N** (a system intersect table created automatically; simple binary "associated or not" relationships with no extra fields) and **manual intersection entity** (a custom table representing the relationship with its own fields, lifecycle, security, business logic). Native N:N is quick and easy but limited; manual intersection is more work but supports rich relationship data — role, dates, status, custom attributes. Choose based on whether the relationship needs its own attributes and lifecycle. ## Microsoft 365 Copilot Source: https://www.solvingdynamics365.com/glossary/m365-copilot **Microsoft 365 Copilot** is the AI experience embedded across the Microsoft 365 productivity suite: Word, Excel, PowerPoint, Outlook, Teams, OneNote, and the standalone Copilot app. It is **distinct** from the embedded Copilots inside Dynamics 365 (Copilot in Business Central, Copilot in Customer Service, etc.) and from Copilot for Sales. M365 Copilot is grounded in the user's M365 data through **Microsoft Graph**; **Graph connectors** can index external systems including Dynamics 365 for retrieval. **Copilot Studio agents** can extend M365 Copilot's behaviour with custom plugins. Licensed as a paid per-user add-on requiring an M365 base SKU. ## Microsoft Dataverse Source: https://www.solvingdynamics365.com/glossary/microsoft-dataverse **Microsoft Dataverse** is the data platform that sits under Dynamics 365's CRM-side apps (Sales, Customer Service, Field Service, Project Operations, Customer Insights) and the Power Platform. It provides a managed relational database with tables, relationships, role-based security, business rules, calculated and rollup columns, server-side workflows, and a standardised Open Data (OData) Web API. Dataverse comes with a starter schema known as the **Common Data Model** that defines tables like Account, Contact, and User. Storage and API capacity are licensed through Dataverse capacity, included in most Dynamics 365 and Power Apps subscriptions. ## Microsoft Entra External ID Source: https://www.solvingdynamics365.com/glossary/entra-external-id **Microsoft Entra External ID** is Microsoft's customer identity platform — successor to **Azure AD B2C** — providing customer-grade authentication for external users accessing Power Pages portals, customer-facing Dynamics 365 apps, and any scenario where non-employee users need to sign in. External ID is hosted in a separate tenant from the workforce Entra ID directory, keeping customer accounts isolated from internal accounts. Supports **email / password**, **social identity providers** (Google, Facebook, Apple, LinkedIn), and **federated identity** from partner organisations. Features include branded sign-up / sign-in flows, MFA, custom attributes, password reset self-service, custom policies for complex scenarios. Billed per **monthly active user (MAU)**. The right answer for any customer-facing portal in 2026+. ## Microsoft Entra ID Source: https://www.solvingdynamics365.com/glossary/entra-id **Microsoft Entra ID** is Microsoft's cloud identity service — the rebrand of **Azure Active Directory (Azure AD)** announced in 2023. Every Dynamics 365 user signs in through Entra ID, regardless of which Dynamics 365 product they use. Entra also authenticates service-to-service API calls between integrations and Dynamics 365 via **app registrations** with delegated or application permissions. Tenant-level identity policies — **MFA**, **Conditional Access** (block risky sign-ins, restrict by location, require compliant devices), and **named locations** — apply automatically to Dynamics 365 access. Modern Dynamics 365 security relies on Entra; protecting Entra is protecting the platform. ## Microsoft Fabric Source: https://www.solvingdynamics365.com/glossary/microsoft-fabric **Microsoft Fabric** is Microsoft's unified analytics platform, combining lakehouse, data warehouse, real-time analytics, data engineering, data science, and **Power BI** on a shared SaaS storage layer called **OneLake**. For Dynamics 365 customers, Fabric is the increasingly default destination for cross-system analytics. **Synapse Link** streams Dataverse and F&O data into OneLake; Power BI in **DirectLake mode** queries the parquet directly with near-import performance and no refresh schedules. Fabric is sold in F-SKU capacity tiers; capacity sizing — peak Power BI users, lakehouse compute, model size — is the main cost lever. **Microsoft Purview** integrates for governance. ## Model-driven app Source: https://www.solvingdynamics365.com/glossary/model-driven-app A **model-driven app** is one of two Power Apps application types (the other being canvas). Model-driven apps are *generated* from a Dataverse schema — the maker configures which tables, forms, views, charts, dashboards, and business process flows are included, and the platform renders a responsive, security-aware UI automatically. Every Dynamics 365 CRM-side app (Sales, Customer Service, Field Service, Project Operations) *is* a model-driven Power App. Model-driven apps suit data-centric line-of-business scenarios with rich Dataverse schemas and complex security. Trade-off vs **canvas apps**: less layout flexibility but no UX code to write; advanced find, audit, dashboards, and security come for free. **Custom pages** (canvas-style screens embedded in model-driven apps) bridge the two. ## MRP (Material Requirements Planning) Source: https://www.solvingdynamics365.com/glossary/mrp **Material Requirements Planning (MRP)** is the algorithm that compares **demand** (sales orders, forecasts, production component needs, transfer requirements) against **supply** (on-hand inventory, open purchase orders, planned production orders, transfer orders) and suggests the new purchase, production, and transfer orders needed to keep stock balanced through the planning horizon. In Business Central it runs through the **planning worksheet**; in Dynamics 365 Supply Chain Management it runs through **Planning Optimization**, the modern in-memory engine that replaced the legacy MRP. Output is a set of **action messages** — *New*, *Increase*, *Decrease*, *Reschedule earlier*, *Reschedule later*, *Cancel* — that planners review and accept. ## OData Source: https://www.solvingdynamics365.com/glossary/odata **OData** (Open Data Protocol) is a standardised REST-style query syntax for querying and modifying data over HTTP. Dataverse's **Web API** (the `/api/data/v9.x/` endpoint) exposes OData v4. Standard OData operators — `$filter`, `$select`, `$expand`, `$orderby`, `$top`, `$skip`, `$count` — work across implementations. Used by external integrations, Power Automate's Dataverse connector, JavaScript on model-driven forms (`Xrm.WebApi`), Power BI direct query, and most modern HTTP clients. OData is the canonical choice for modern Dataverse integration; **FetchXML** remains relevant for views and complex analytical queries. Both compile to the same underlying SQL. ## One Version Source: https://www.solvingdynamics365.com/glossary/one-version **One Version** is Microsoft's policy for Dynamics 365 Finance and Supply Chain Management: every production environment, in every region, on every tenant, runs the same current platform version, updated continuously via **Service Updates** roughly every six weeks. Customers cannot remain indefinitely on older versions. Limited **pause windows** allow deferring updates for a small number of cycles per year (typically around year-end), but mandatory upgrades apply after the pause expires. Microsoft maintains this policy because supporting hundreds of AX-era versions in SaaS would be economically infeasible. The discipline is real; the benefits — continuous improvements, security patches, no big-bang upgrade projects — accrue over time. ## Opportunity Source: https://www.solvingdynamics365.com/glossary/opportunity An **opportunity** in Dynamics 365 Sales is a qualified, in-progress sales pursuit — a real deal with a customer, an estimated value, a likely close date, and a probability of winning. Opportunities are the pipeline. Each opportunity moves through configurable **business process flow** stages — typically Qualify → Develop → Propose → Close — with stage-gated fields capturing the deal's evolution. Opportunities can include products with quantities and prices, generating revenue forecasts. They link to Accounts and Contacts, accumulate activities (calls, meetings, emails), and ultimately close as **Won** (often converting to a Quote, Order, or Invoice) or **Lost** (with a reason coded for analysis). Sales forecasting rolls opportunities up by hierarchy; AI-predicted insights flag at-risk and high-momentum deals. ## Owner team Source: https://www.solvingdynamics365.com/glossary/owner-team An **owner team** in Dataverse is a group of users that can own records and have **security roles** assigned. Owner teams behave like users — records can be **owned by an owner team** (the Owner field references the team), and all team members inherit the team's security-role access when they work with team-owned records. Use cases include regional sales teams collectively owning regional accounts, service queues, project teams. Owner team membership is stable; admins manage members. Distinct from **access teams**, which can't own records but grant ad-hoc record-level access through templates. Owner teams can be linked to **Microsoft 365 groups** for synced membership from M365 to Dataverse. ## Permission set Source: https://www.solvingdynamics365.com/glossary/permission-set A **permission set** in Business Central is the unit of security — a named bundle of RIMDX rights (Read, Insert, Modify, Delete, eXecute) on tables, pages, codeunits, reports, and other database objects. Users get effective permissions by being assigned one or more permission sets, optionally bundled into **user groups** for easier administration. Microsoft ships built-in permission sets — SUPER, BASIC, SETUP, area-specific (SALES, PURCH, FA, etc.); customers copy and edit, or write new permission sets in AL. **Security filters** within a permission set add row-level restrictions. Modern practice grants table writes through *indirect* permission (via codeunit execution rights) rather than direct write rights, matching how Microsoft's standard code is designed. ## Plug-in Source: https://www.solvingdynamics365.com/glossary/plug-in A **plug-in** in Dataverse is a .NET assembly registered to run on specific Dataverse events (Create, Update, Delete, custom messages). Plug-ins execute server-side in a sandboxed environment, with full transactional context — they can read related records, throw exceptions to cancel the operation, and modify the target before write. The plug-in pipeline has four stages: **pre-validation** (outside the transaction), **pre-operation** and **post-operation** (inside), and an asynchronous queued path. Synchronous plug-ins block the user request; asynchronous ones queue for later. Plug-ins are the most powerful and most demanding customisation mechanism in Dataverse; modern practice favours **Power Automate flows** for orchestration and reserves plug-ins for transactional, performance-sensitive, server-only logic. ## Plug-in trace log Source: https://www.solvingdynamics365.com/glossary/plug-in-trace-log The **plug-in trace log** is Dataverse's diagnostic mechanism for **plug-ins** — server-side .NET code that runs on Dataverse events. When trace logging is enabled, every plug-in execution writes a record containing the runtime context, configuration, exception details (if any), execution time, and any messages the plug-in logged via `ITracingService.Trace()`. The traces are queryable through the **Plug-in Trace Log** table in the maker portal, supporting filtering by plug-in, by user, by time, by error status. Plug-in trace logging is invaluable for debugging — far better than guessing at server-side behaviour. But it generates substantial data; enable for debugging windows and disable or aggressively prune the table afterward to manage Dataverse storage. ## Posting group Source: https://www.solvingdynamics365.com/glossary/posting-group A **posting group** in Business Central is a tag attached to a customer, vendor, item, bank, fixed asset, or G/L account that drives the GL accounts hit when a transaction posts. The system uses intersections of posting groups to find the right account: **General Business Posting Group** (who you trade with) × **General Product Posting Group** (what's traded) drives revenue / expense accounts; **Customer Posting Group** drives AR control accounts; **Vendor Posting Group** drives AP control accounts; **Inventory Posting Group** + Location drives inventory balance-sheet accounts; **VAT posting groups** drive tax accounts; **FA Posting Group** drives fixed-asset GL flow. Designing posting groups carefully — five to ten per area is healthy — is one of the most consequential implementation tasks. ## Power Apps Source: https://www.solvingdynamics365.com/glossary/power-apps **Power Apps** is Microsoft's low-code application platform, part of the Power Platform. It supports two types of apps: **canvas apps**, which are free-form drag-and-drop apps built for tablet and mobile front ends; and **model-driven apps**, which generate forms, views, and dashboards from a Dataverse data model. Dynamics 365 CRM-side apps (Sales, Customer Service, Field Service) are themselves built on the model-driven framework. Power Apps connects to hundreds of data sources through standard and premium connectors, and is licensed per user, per app, or bundled with Dynamics 365 licenses. ## Power Automate Source: https://www.solvingdynamics365.com/glossary/power-automate **Power Automate** is Microsoft's workflow automation and robotic process automation (RPA) service, part of the Power Platform. It supports **cloud flows** triggered by events or schedules using hundreds of connectors (Business Central, Dataverse, SharePoint, Outlook, Teams, third-party APIs), **desktop flows** that automate legacy applications by driving the UI, and **business process flows** that guide users through stages of a Dataverse process. Power Automate is how most Dynamics 365 customers extend, automate, and integrate without writing traditional code, and is licensed per user, per flow, or bundled with Dynamics 365. ## Power BI Source: https://www.solvingdynamics365.com/glossary/power-bi **Power BI** is Microsoft's business intelligence platform, part of the Power Platform. It combines a desktop authoring tool (Power BI Desktop), a SaaS service for sharing and refreshing reports, and embedded analytics inside other apps. Power BI connects to hundreds of data sources, models data with the DAX language, and renders interactive dashboards and paginated reports. Dynamics 365 ships pre-built Power BI apps for finance, sales, service, and supply chain, and deeper analytics is enabled through Microsoft Fabric and direct Dataverse/F&O data lake links. It is licensed per user (Pro, Premium per user) or per capacity. ## Power Platform Source: https://www.solvingdynamics365.com/glossary/power-platform The **Power Platform** is Microsoft's low-code suite for extending and automating business applications, including Dynamics 365. It has four headline products: **Power Apps** for building custom canvas and model-driven applications, **Power Automate** for workflow and RPA, **Power BI** for self-service analytics, and **Copilot Studio** for building AI agents and chatbots. They share Dataverse as a common data platform and Microsoft Entra for identity. The Power Platform is how customers most commonly customise Dynamics 365 without writing traditional code, and it is licensed separately from but tightly integrated with the Dynamics 365 apps. ## Preview build Source: https://www.solvingdynamics365.com/glossary/preview-build A **preview build** is an early version of a Dynamics 365 release wave (or platform update) made available roughly six weeks before general availability. Customers spin up a **preview sandbox** from their admin centre, install their extensions and integrations against it, run their regression suite, and certify their AppSource apps against the upcoming version. The preview window is the canonical opportunity to catch breaking changes before they affect production. AppSource ISVs are expected to validate compatibility during preview; per-tenant extension owners must recompile and republish before the production update window. Skipping preview testing routinely causes preventable issues at wave updates; investing the few hours of preview validation prevents days of production firefighting. ## Queue Source: https://www.solvingdynamics365.com/glossary/queue A **queue** in Dynamics 365 is a holding container for records awaiting attention — most commonly cases in Customer Service, conversations in omnichannel, leads in Sales, work orders in Field Service, or generic work items. Queues are scoped by team or function: First-line Support queue, EMEA Sales queue, VIP Customer queue, Spanish-language queue. Routing rules direct incoming items to queues based on attributes; agents work from their assigned queues either by taking the next item (first-in-first-out) or by selecting specifically. **Unified Routing** in Customer Service uses queues alongside agent capacity profiles and skill matching to assign work optimally. Queue performance — depth, wait time, oldest item — is the primary real-time operational signal for supervisors. ## Quota Source: https://www.solvingdynamics365.com/glossary/quota A **quota** in Dynamics 365 Sales is the revenue or unit target assigned to a seller, team, or territory for a defined period — typically quarterly or annually. Quotas are modelled through the **Goals** mechanism: a Goal record with a Goal Metric (what's measured — revenue from won opportunities, count of new logos, units sold) and a hierarchical parent-child structure so individual seller quotas roll up to manager-level aggregates. Quotas integrate with **forecasting** for pipeline-coverage analysis (do we have enough pipeline to hit the number?) and feed commission calculations either natively or through specialist commission engines (Spiff, Performio, CaptivateIQ). Setting realistic quotas — calibrated against historical conversion — is one of the most consequential sales-management decisions. ## Release wave Source: https://www.solvingdynamics365.com/glossary/release-wave A **release wave** is Microsoft's twice-yearly major update for Dynamics 365 and the Power Platform — **Wave 1** in April, **Wave 2** in October. Each wave delivers new application features, new platform capabilities, performance improvements, and deprecations. The wave lifecycle includes a **preview** build available roughly six weeks before general availability, allowing customers to test in sandbox; **general availability** rolls out across the tenant base; **mandatory upgrade** completes the rollout by a published cut-off date. Customers configure an **update window** (a permitted offline span) for the upgrade to apply. Extensions on AppSource are pre-tested for compatibility; per-tenant extensions need customer / partner recompilation. Monthly hotfixes ship between waves. ## Retry policy Source: https://www.solvingdynamics365.com/glossary/retry-policy A **retry policy** is the configurable behaviour of an integration step when it encounters a transient failure — network timeout, brief service outage, HTTP 429 throttling, brief connector unavailability. Standard policies include **exponential backoff** (retry with increasing delays — 1s, 2s, 4s, 8s — to give the dependent service time to recover), **fixed-interval retry** (retry at constant intervals), and **immediate retry** (retry without delay; suitable only for very transient issues). Power Automate actions, Logic Apps actions, and Dataverse plug-in registrations all support configurable retry policies. Apply retry only to **idempotent operations** — non-idempotent ones produce duplicates on retry. After retries exhausted, route to dead-letter handling or alert operations. ## Ribbon (command bar) Source: https://www.solvingdynamics365.com/glossary/ribbon The **ribbon** — now more commonly called the **command bar** — is the row of action buttons at the top of every model-driven Power Apps page (Save, New, Delete, Email, plus custom actions). Each table has separate command bars per context: main form, list view, subgrid, associated view. Customisation today happens in the modern **command designer** in the maker portal, replacing the older XML-based ribbon configuration. Commands can run JavaScript functions, Power Fx formulas, Power Automate flows, or open Power Apps. Visibility and enabled rules expressed in Power Fx control when commands appear and when they're active. Commands can be **app-scoped** — visible in one model-driven app but not another, even on the same table. ## Role center Source: https://www.solvingdynamics365.com/glossary/role-center A **role center** in Business Central is the home-screen workspace a user opens to, curated for what their role does. Cues (numeric tiles), charts, action shortcuts, and notifications are tuned to the user's daily work — Accountant, Sales Order Processor, Production Planner, Warehouse Worker, IT Manager, Business Manager. Microsoft ships role centers for common roles; customers extend or build their own. Users **personalize** within their role center (hide cues, reorder shortcuts) without affecting other users; administrators **save as tenant default** to apply changes across all users of the role. Profiles assign role centers to user groups, and the **Designer** tool customises layouts without code. ## Rollup column Source: https://www.solvingdynamics365.com/glossary/rollup-column A **rollup column** in Dataverse is a column that aggregates values across related records — count of opportunities on an account, sum of revenue from won deals, latest activity date across contacts. Rollups persist the result, making them queryable and indexable (unlike **calculated columns** which compute at read time). The value refreshes on a schedule (default hourly) or on-demand via the *Refresh* action; between refreshes the value is stale. Aggregations supported: count, sum, average, min, max. One rollup column = one aggregation across one related-table relationship. For real-time aggregation, use plug-ins or Power Automate flows that maintain the value on every change. For sum-of-revenue-by-customer style analytics, **rollup columns** are the no-code answer. ## SaaS Source: https://www.solvingdynamics365.com/glossary/saas **SaaS** stands for *Software-as-a-Service*. It refers to software delivered as a managed cloud subscription, where the vendor owns the infrastructure, patching, backups, and upgrades, and the customer accesses the service over the internet. All Dynamics 365 apps — Business Central, Finance, Supply Chain Management, Sales, Customer Service, Field Service, and the rest — are sold primarily as SaaS, hosted on Microsoft Azure. SaaS shifts ERP and CRM from a capital project with multi-year on-premise infrastructure to an operational subscription with continuous updates, but in return constrains customisation to supported extensibility patterns rather than direct database access. ## Saga Source: https://www.solvingdynamics365.com/glossary/saga A **saga** is a pattern for multi-step business operations spanning multiple systems where each step is a local transaction in one system; if a later step fails, **compensating transactions** undo the earlier steps' effects. Used when a global ACID transaction across systems isn't possible — for example, placing an order updates Dynamics 365 CRM, debits F&O inventory, charges the payment processor, and dispatches the WMS. The saga pattern guarantees the operation either fully succeeds or fully rolls back across systems. Two implementation styles: **orchestration** (central orchestrator drives the sequence, typically Azure Durable Functions) and **choreography** (no orchestrator; systems react to events, with rollback events triggering compensation). Orchestration is cleaner for most Dynamics 365 cross-system scenarios. ## Sandbox Source: https://www.solvingdynamics365.com/glossary/sandbox A **sandbox** environment in the Power Platform and Dynamics 365 is a non-production environment intended for development, testing, training, demos, and risk-free experimentation. Sandboxes are isolated from production — separate database, separate users where appropriate, separate integrations. They can be **copied from production** (most common pattern, for testing with realistic data) or reset to clean state. Sandboxes typically have lower infrastructure priority than production — they may pause, throttle, or update sooner. Most Dynamics 365 SKUs include some number of sandboxes; additional sandboxes are paid add-ons. The healthy environment topology has at least one dev, one UAT, and one training sandbox per major Dynamics 365 deployment, alongside one or more production environments. ## Security roles Source: https://www.solvingdynamics365.com/glossary/security-roles A **security role** in Dataverse and the Dynamics 365 CRM-side apps is a named bundle of **privileges** on tables (create, read, write, delete, append, append-to, assign, share), each with a **scope** (user, business unit, parent:child BU, organisation). Users are assigned one or more security roles; their effective access is the union of all assigned roles. Microsoft ships built-in roles — *Salesperson*, *Customer Service Representative*, *System Administrator*, etc. — that customers copy and adjust. **Field-level security profiles**, **teams**, and **row sharing** complement security roles for finer-grained control. Designing a clean role hierarchy is one of the most important Power Platform implementation tasks; running an audit annually keeps it tidy. ## Service Bus Source: https://www.solvingdynamics365.com/glossary/service-bus **Azure Service Bus** is Microsoft's durable, queued messaging service. For Dynamics 365 integrations, Dataverse can publish change events to Service Bus queues or topics; downstream consumers — Azure Functions, Logic Apps, custom services — read at their own pace with built-in retry and a **dead-letter queue (DLQ)** for failures. Queues handle point-to-point delivery (one consumer per message); **topics** support pub/sub with multiple subscribers each receiving their own copy. Service Bus is the canonical pattern for **decoupled, durable, asynchronous** Dataverse integration at moderate-to-high scale — more reliable than webhooks (which lack retention), more durable than Event Grid (which is lighter-weight pub/sub). Standard tier handles hundreds of messages per second; Premium handles thousands. ## Service principal Source: https://www.solvingdynamics365.com/glossary/service-principal A **service principal** in Microsoft Entra ID (formerly Azure AD) is an identity for non-human callers — applications, services, scripts, pipelines, integrations — that need to authenticate without a user. The service principal is created from an **app registration** with a client ID, client secret (or certificate), and configured permissions. Integrations between systems (Power Automate calling Dataverse, Azure Functions writing to Dataverse, CI/CD pipelines deploying solutions) authenticate as service principals. Service principals are granted appropriate Dataverse security roles or specific table permissions. **Managed Identity** is the recommended Azure-hosted variant — eliminates credential management because Azure handles the rotation. Always prefer service principals over user accounts for automation; they're auditable, manageable, and don't break when employees leave. ## Site map Source: https://www.solvingdynamics365.com/glossary/site-map The **site map** of a model-driven Power App is its navigation structure — the left-side menu users see. The hierarchy: **areas** (top-level groupings, switchable from a button), **groups** (labelled subdivisions within an area), **subareas** (the actual navigation items that link to a table's page, a view, a dashboard, a URL, a custom page, or a web resource). Site maps can be **role-scoped** — different subareas visible to different security roles. The modern **site map designer** in the maker portal replaced the older XML-based configuration. The site map shapes the daily user experience of the app; deliberate design — group by what users *do*, not by underlying tables — is one of the most consequential UX investments in a model-driven app. ## SLA (Service Level Agreement) Source: https://www.solvingdynamics365.com/glossary/sla A **Service Level Agreement (SLA)** in Dynamics 365 Customer Service is a time-based commitment to customers — "we'll respond within 1 hour, resolve within 4 hours" — modelled as records that track and enforce response and resolution targets per case. SLAs have **KPIs** (First Response By, Resolve By, custom) with **warning** and **failure** thresholds, **business calendars** (so the clock respects working hours), and **pause** rules (the clock stops when the customer's the bottleneck). SLAs apply to cases either by default or through **entitlements** linking specific contractual terms to customers. Real-time timer widgets on the case form show countdown to breach; Power Automate flows fire escalation actions on warning or breach. The visible discipline drives operational behaviour. ## Solution Checker Source: https://www.solvingdynamics365.com/glossary/solution-checker **Solution Checker** is Microsoft's static-analysis tool for Power Platform solutions. Run on a solution (packaged or in-environment), it scans every component — Power Automate flows, canvas apps, model-driven apps, Power Pages, Dataverse plug-ins, custom JavaScript — against a published rule set covering performance issues, security concerns, accessibility problems, deprecation warnings, and platform-misuse patterns. Results are categorised as Critical / High / Medium / Low; teams gate PR builds on no Critical or High issues remaining. The checker runs from the Power Platform admin centre, from the maker portal, from the `pac` CLI, and as a step in Azure DevOps or GitHub Actions pipelines. The rule set updates with each platform release; running periodically catches issues introduced by new lint rules. ## Solution patch Source: https://www.solvingdynamics365.com/glossary/solution-patch A **solution patch** in the Power Platform is a delta solution containing only the changes made since a base solution version. When a patch is imported, it layers on top of the existing base solution in the target environment — the base remains unchanged; the patch adds its modifications. Patches are faster to build and deploy than full upgrades and are the right tool for incremental fixes, hotfixes, and additive features. They cannot *remove* components from the base, only add or modify. Over time, multiple patches stack; periodic **solution upgrades** consolidate them into a new base, keeping the patch stack manageable. The healthy lifecycle pattern combines patches for speed with upgrades for cleanliness. ## Solutions Source: https://www.solvingdynamics365.com/glossary/solutions A **solution** in the Power Platform and Dynamics 365 CRM-side apps is a versioned, deployable container of customisations: tables, columns, forms, views, business rules, Power Automate flows, canvas apps, model-driven apps, security roles, Copilot Studio agents, and many other component types. Solutions are the unit of **application lifecycle management** — develop in one environment in an **unmanaged** solution, export as a **managed** package, import to UAT and production. Solutions can be unpacked into XML/YAML files for source control with the **`pac` CLI**, enabling Git-based development, code review, and CI/CD pipelines. The right ALM discipline in Power Platform begins with solutions. ## Success by Design Source: https://www.solvingdynamics365.com/glossary/success-by-design **Success by Design (SBD)** is Microsoft's published implementation methodology for Dynamics 365. Replacing the older waterfall-flavoured Sure Step, SBD is iterative, fit-to-standard-first, and built around regular checkpoints rather than gated phases. It has five overlapping phases — Initiate, Implement, Prepare, Operate, Optimize — each with documented practices, deliverables, and review rituals. The headline ritual is the **Solution Blueprint Review (SBR)**, a mid-implementation architecture review against a published rubric. FastTrack engineers use SBD; mature partners adopt it. Templates, checklists, and reference architectures are freely available on Microsoft's SBD website. ## Synapse Link Source: https://www.solvingdynamics365.com/glossary/synapse-link **Synapse Link** is Microsoft's managed near-real-time pipeline that streams **Dataverse** (and, in a separate variant, **Finance and Supply Chain Management**) change data into a customer-accessible lakehouse — historically Azure Data Lake Storage Gen2, now increasingly **Microsoft Fabric's OneLake**. Once configured per environment, Dataverse continuously writes Delta-Parquet snapshots of selected tables to the lake without replicating into a customer-managed integration tier. Downstream consumers — Power BI, Fabric notebooks, SQL endpoints, custom analytics — read from the lake without touching the operational system. Synapse Link replaces the older **Export to Data Lake** and **Bring Your Own Database (BYOD)** patterns and is the recommended analytics path for Dynamics 365. ## Task Recorder Source: https://www.solvingdynamics365.com/glossary/task-recorder **Task Recorder** is a built-in Dynamics 365 Finance and Supply Chain Management tool that captures the user's actions in the application as a structured, replayable script — clicks, field entries, page navigation, validation. The output is a recording that can be: - **Played back** to train new users on a process. - **Embedded in the in-app Help pane** so users see step-by-step guidance in context. - **Integrated with the Business Process Modeller** in Lifecycle Services to link processes to actual application steps. - **Used in test automation** to drive scripted regression tests. - **Exported as documentation** with screenshots for offline training. The result is genuine, accurate documentation that doesn't drift from reality — because it *is* reality, recorded. Task Recorder is one of the underused gems of F&O implementations. ## TDS endpoint Source: https://www.solvingdynamics365.com/glossary/tds-endpoint The **TDS endpoint** is Dataverse's SQL Server-compatible **read-only** query endpoint. TDS (Tabular Data Stream) is the protocol SQL Server uses; tools that speak TDS — SQL Server Management Studio (SSMS), Power BI's SQL Server connector, ODBC / JDBC drivers, Tableau, Qlik — can connect to the TDS endpoint as if it were a SQL database. Connections authenticate via **Microsoft Entra ID** at port 5558. Supports full T-SQL syntax for SELECT queries — joins, aggregations, window functions, subqueries, CTEs. **No writes** — INSERT / UPDATE / DELETE not supported. Security (security roles, business units, field-level security) is honoured. For analytics at scale, **Synapse Link for Dataverse** is preferred; TDS suits SQL-aware ad-hoc analysis and moderate-volume Power BI direct queries. ## Tenant Source: https://www.solvingdynamics365.com/glossary/tenant A **tenant** in the Microsoft cloud is the top-level container for a customer organisation: one Entra ID directory, one set of users and licences, and a collection of environments (Microsoft 365, Power Platform, Dynamics 365, Azure subscriptions linked to the tenant). All Dynamics 365 access flows through the tenant's Entra ID; all Power Platform environments belong to the tenant; all licence assignments happen at the tenant level. Tenants are pinned to a region at creation. **Tenant administration** is split across several admin centres — Microsoft 365 admin centre, Power Platform admin centre, Business Central admin centre, Lifecycle Services — each owning a slice. One tenant per customer is the standard pattern; multi-tenant configurations exist for specific scenarios but add complexity. ## Throttling Source: https://www.solvingdynamics365.com/glossary/throttling **Throttling** is the rate-limiting mechanism Microsoft services apply to API calls — protecting platform capacity from runaway consumers. Dataverse, Business Central, Finance and SCM, Power Automate connectors, and Microsoft Graph all enforce throttling. When a consumer exceeds the configured rate, the service responds with **HTTP 429 (Too Many Requests)** plus a `Retry-After` header indicating how long to wait. Well-behaved integrations honour the `Retry-After` value with exponential backoff; chatty integrations that ignore throttling degrade everyone's experience and risk being further rate-limited. Throttling limits include per-user-per-minute, per-tenant aggregate, and per-connector-specific limits. Batch operations, filtering at the source, and caching reduce API call volume; capacity add-ons can raise the ceiling at scale. ## Timeline Source: https://www.solvingdynamics365.com/glossary/timeline The **timeline** is a control on Dynamics 365 model-driven app forms that shows all activities, notes, and posts related to the current record in chronological order. It's the central history view on a Customer, Contact, Opportunity, Case, or Lead — every email, phone call, meeting, task, and note in one scroll. Users can filter by activity type, date range, owner, or status. New activities created from the timeline auto-link to the parent record. Timeline configuration (which activity types appear, default filters, sort order) is per-form. The timeline replaced the older "Activities" subgrid pattern as the recommended way to display interaction history; it's user-loved when configured cleanly and scrolling endlessly through unfiltered noise when it isn't. ## Trade agreement Source: https://www.solvingdynamics365.com/glossary/trade-agreement A **trade agreement** in Dynamics 365 Finance and Supply Chain Management is the pricing and discount rule model — defining what price applies to which customer for which items under which conditions. Trade agreement lines specify rules at varying levels of specificity: customer-and-item, customer-and-item-group, customer-group-and-item, all-customers-and-item, etc. Each line has effective dates, a price or discount type (fixed, percentage), and optional qualifiers (quantity tiers, currency, site, warehouse). The engine resolves the most specific applicable rule at transaction time. Trade agreements supplement the standard sales / purchase price on items; they're the canonical pattern for customer-specific contracted pricing, volume discounts, promotional pricing, and per-currency pricing in international operations. ## UAT (User Acceptance Testing) Source: https://www.solvingdynamics365.com/glossary/uat **User Acceptance Testing (UAT)** is the customer-led testing cycle that validates a Dynamics 365 implementation against real business scenarios before go-live. Unlike unit, integration, and performance testing — which are partner-and-developer responsibilities — UAT is run by the *people who'll use the system* against *end-to-end business processes*, not isolated screens. A well-run UAT covers all core operational flows, all workflow paths, all integrations, and edge cases specific to the customer's industry and region. The exit criteria typically require all severity-1 and severity-2 defects resolved, business sign-off, training material aligned, and performance acceptable at expected user load. UAT is the customer's confidence check; skipping it ships uncertainty. ## Virtual table Source: https://www.solvingdynamics365.com/glossary/virtual-table A **virtual table** in Microsoft Dataverse is a table whose data is not stored in Dataverse but is fetched from an external system on demand. To Power Apps, Power Automate, Copilot Studio, and Dynamics 365 CRM apps, the virtual table looks like any other table — same query semantics, same forms and views, same relationships — but reads (and sometimes writes) go to the configured external source. Common use cases: surfacing **Dynamics 365 Finance / Supply Chain** data inside CRM-side apps without replicating; pulling **SQL Server** or **SharePoint** data into Power Apps; exposing custom APIs through OData adapters. Virtual tables avoid replication and stay current, but performance is bounded by the source system's responsiveness and API throughput. ## Warehouse management Source: https://www.solvingdynamics365.com/glossary/warehouse-management **Warehouse management** (WMS) is the set of processes and software that controls the physical movement of inventory inside a warehouse. In Business Central, warehouse complexity is configured per location, from basic posting through receive/ship documents up to fully **directed put-away and pick** with bin policies. **Dynamics 365 Supply Chain Management** includes a full enterprise WMS with handheld scanning, configurable mobile workflows, wave management, license plates, and slotting. WMS objects include **warehouse receipts**, **put-aways**, **movements**, **picks**, **shipments**, **counting journals**, and bin replenishment between bulk and pick zones. ## Web API Source: https://www.solvingdynamics365.com/glossary/web-api The **Dataverse Web API** is the HTTP REST endpoint at `/api/data/v9.x/` that exposes Dataverse for programmatic access. It supports **OData v4** query syntax (`$filter`, `$select`, `$expand`, etc.), full CRUD operations (GET, POST, PATCH, DELETE) on every entity, bound actions, custom actions, and batch operations through the `$batch` endpoint for multi-operation HTTP round-trips. Authentication uses **Microsoft Entra ID** OAuth 2.0 — service-principal or user-context tokens. The Web API is the primary integration surface for Dataverse from external systems, JavaScript on forms (via `Xrm.WebApi`), Power Automate flows, custom code, and SDK clients. It superseded the older SOAP-based **Organization Service** for most modern use cases. ## Webhook Source: https://www.solvingdynamics365.com/glossary/webhook A **webhook** is an HTTP POST sent by a source system (Dataverse, Business Central, Power Automate, third-party SaaS) to a subscriber-defined URL when an event occurs. For Dynamics 365, webhooks deliver near-real-time change notifications without polling. Dataverse webhooks fire on record events with a configurable payload; Business Central webhooks fire on table changes with the resource URL (subscribers fetch the full record on receipt). Webhooks are simpler than Service Bus or Event Grid — no Azure resource — but offer limited retry (a few immediate attempts) and no durability. They suit low-volume, tolerant integrations where the subscriber is highly available. For higher reliability or larger volume, layer webhooks → Service Bus → durable consumer. ## WIP (Work in Process) Source: https://www.solvingdynamics365.com/glossary/wip **Work in Process (WIP)** is the cost of partially-completed work that has been incurred but not yet matched to revenue. In **production**, it's the materials consumed and labour applied to a production order that's been started but not yet finished — held in a WIP balance-sheet account until the production order completes and the finished item is received into inventory. In **projects** (Business Central Jobs, Project Operations, F&O Projects), WIP defers project cost to the balance sheet until revenue is recognised — on completion, on milestone, or through percentage-of-completion calculations. WIP is what keeps the P&L honest while work is in progress: cost doesn't hit expense until the matching revenue is recognised. ## Work order Source: https://www.solvingdynamics365.com/glossary/work-order A **work order** in Dynamics 365 Field Service is the central record representing on-site work to be performed at a customer location — a service visit, an installation, a repair, an inspection, a maintenance task. Work orders carry: the customer, the location and asset being serviced, the products and services required, estimated duration, skills needed, priority, status. They're created from cases (a customer-reported problem), incidents, **preventive maintenance** schedules, **IoT alerts** (from Connected Field Service), or manually. The lifecycle: Created → Scheduled (to a resource via the schedule board or RSO) → Travelling → On Site → Completed → Posted. The technician executes on mobile; time, parts, photos, signatures, and inspection results capture on the work order; cost and revenue post on completion. ## XRMToolBox Source: https://www.solvingdynamics365.com/glossary/xrmtoolbox **XRMToolBox** is a free, open-source Windows desktop application that hosts hundreds of community-built plug-in tools for Dataverse (and Dynamics 365) administration and development. Essential tools include **FetchXML Builder** (visual query construction), **Plugin Trace Viewer** (debugging server-side code), **Bulk Data Updater** (mass record changes), **Solution Compare** (diff between solutions), **Ribbon Workbench** (command-bar customisation), and dozens more. Each tool is community-maintained and installable from the in-app marketplace. Together they fill the gaps in Microsoft's official tooling — almost every serious Dataverse practitioner uses XRMToolBox daily. Free, MIT-licensed, with active community support.