Dynamics 365 Archives - Page 3 of 100 - - Page 3

Category Archives: Dynamics 365

How a Maldives-Based Loan Firm Streamlined Multi-Level Payment Approvals with Microsoft Dynamics 365 Business Central

Summary As part of our implementation for HDFC Maldives, we encountered a complex payment approval requirement in Microsoft Dynamics 365 Business Central involving multiple approval stages, any-one-user approval behavior, Checked By validation, actual approver tracking, and Internet Banking approval. Instead of replacing the standard Business Central workflow framework, we extended it only where the required business behavior differed from the standard process. This approach allowed us to retain Workflow User Groups, Approval Entries, workflow progression, and standard approval capabilities while introducing custom controls for Checked By processing, Sequence 2 approval handling, actual approver logging, and final payment voucher traceability. Table of Contents Introduction Understanding the Business Requirement What Worked with Standard Business Central? The Challenge at the Second Approval Sequence Finding the Right Approach The Second Challenge: Who Actually Approved? Introducing the Actual Approver Log Why Checked By Was Kept Separate Automatic Transition to Standard Approval Improving Payment Voucher Traceability Final Solution Architecture Preview Video Business Impact Frequently Asked Questions Conclusion Introduction Approval workflows often look straightforward when they are first discussed: one person submits a transaction, the required approvers review it, and the process continues once approval is completed. In practice, the requirements can become much more complex when different stages need different approval behaviors. During a loan management implementation for a Maldives-based financial services organization, we encountered exactly this situation while designing the approval process for Payment Journals in Microsoft Dynamics 365 Business Central. The business did not want a simple sequential approval process. Some stages required any one authorized user to complete the approval, another stage required a separate pre-check before the standard workflow could begin, and the final payment process required two Internet Banking approvals. The challenge was therefore not simply to configure a workflow. It was to determine how much of the standard Business Central approval framework could be retained, where customization was genuinely required, and how to maintain an accurate audit trail of the users who actually performed each approval action. The Design Principle Rather than replacing Business Central’s standard workflow framework, we decided to keep the standard approval engine wherever possible and customize only the areas where the required business behavior differed from the standard process. Understanding the Business Requirement The Payment Journal required several approval stages, with different rules at each level. Stage Approvers Required Behavior Checked By Multiple Checkers Any one authorized checker Sequence 1 2 Approvers Any one approver Sequence 2 4 Approvers Any one approver Internet Banking 2 Approvers Two-level validation The intended business process was: Payment Journal → Checked By – Any One → Sequence 1 – Any One of 2 → Sequence 2 – Any One of 4 → Posting → Internet Banking Approval At first glance, the standard Workflow User Group functionality appeared capable of handling most of this requirement. However, testing revealed an important difference between the expected business behavior and the approval behavior encountered at the later approval sequence. Fig: Payment approval workflow configured for the multi-stage payment process. What Worked with Standard Business Central? Workflow User Groups were the natural starting point because they already provide a structured way to maintain approvers without hardcoding individual users in custom development. For the first approval sequence, two approvers were configured and the required behavior worked as expected. Sequence 1 Approver A + Approver B → Any one approver completes the stage → Workflow continues This initially suggested that the standard approval configuration would be sufficient for the entire process. The benefit of continuing with standard Business Central was significant because the platform was already managing Workflow User Groups, Approval Entries, statuses, approval requests, cancellations, notifications, and workflow progression. The Challenge at the Second Approval Sequence The main challenge appeared when the transaction progressed to the second approval sequence. Four approvers were configured at this level, but the business requirement remained the same: any one of the four authorized approvers should be able to complete the stage. Expected Behavior Approver C / Approver D / Approver E / Approver F → Any one approves → Approval stage completes However, the workflow behavior encountered at this subsequent sequence did not allow the stage to complete in the required manner after only one user approved. The transaction remained pending because the approval requests associated with the sequence were still active. This created the central mismatch between the standard workflow behavior encountered during testing and the customer’s required approval model. Finding the Right Approach One option would have been to replace the approval process entirely with a custom approval engine. We deliberately avoided that approach. Business Central was already successfully handling several important parts of the process: Workflow User Groups Approval Entries Approval statuses Sending approval requests Cancelling approval requests Workflow progression Rebuilding all of this would have introduced unnecessary complexity and additional maintenance. The Approach Keep the standard Business Central workflow and customize only the approval behavior that did not meet the business requirement. For the second approval sequence, we introduced a custom Approve Approval Request action that allows one authorized approver to complete the required stage while preserving the surrounding standard workflow framework. :contentReference[oaicite:4]{index=4} The Second Challenge: Who Actually Approved? Solving the approval progression created another important requirement. When one user completed the customized approval stage, the related standard Approval Entries could ultimately reflect an Approved status for the eligible approvers. Consider four users: Approver C Approver D ← Actually clicked Approve Approver E Approver F If the final Approval Entries are reviewed only by status, they may not clearly identify that Approver D was the person who physically performed the approval action. This became especially important because the Payment Voucher needed to answer a very simple audit question: Who actually clicked Approve? The standard Approval Entry status alone was therefore not sufficient for the reporting requirement. :contentReference[oaicite:5]{index=5} Introducing the Actual Approver Log To preserve the identity of the person who actually performed the approval, we introduced a separate Actual Approver Log. At the moment the user performs the approval action, the solution captures: User ID … Continue reading How a Maldives-Based Loan Firm Streamlined Multi-Level Payment Approvals with Microsoft Dynamics 365 Business Central →

Share Story :

How a Leading North American Commercial Vehicle Manufacturer Bridged the Legacy PO Cancellation Gap in Dynamics 365 Finance & Operations Using DMF and X++

01Summary A leading North American manufacturer of heavy-duty commercial vehicles moved three years of procurement history from a legacy ERP into Dynamics 365 Finance and Operations, and roughly 4,000 of those Purchase Orders were already cancelled in the source system. The Data Management Framework imported them as records without complaint, but DMF cannot run a PO cancellation, so those orders landed in D365 F&O as confirmed supply and the first test Master Planning run returned net requirements of zero for hundreds of items the assembly line actually needed. CloudFronts extended the DMF staging entity with a cancel flag and added a post-import X++ batch job that reads the flag and calls the same cancellation API behind the Cancel button on the Purchase Order form. All 4,000 cancelled POs now hold the correct state in D365 F&O, MRP plans against real supply, and a reconciliation log gives procurement a line by line count to check against legacy. Table of Contents 01Summary→ 02About the Customer→ 03Business Challenges→ 04Solution Overview→ 05Technical Approach→ 06Business Impact / Key Takeaways→ 07Conclusion / Final Thoughts→ 08Call to Action / Connect With Us→ 02About the Customer Our customer is one of North America’s leading manufacturers of heavy-duty commercial vehicles, operating an extensive network of manufacturing and logistics facilities. As part of its supply chain operations, the organization manages high-volume production, component manufacturing, and distribution processes that require seamless integration across enterprise systems. 03Business Challenges The customer builds heavy-duty commercial vehicles across a network of manufacturing and logistics facilities, running high-volume component production that feeds a fixed assembly schedule. Master Planning was a go-live dependency, not a phase two item. If MRP could not be trusted on the first run, the build schedule could not be trusted either. Uncancelled POs are phantom supply D365 F&O nets demand, meaning sales orders, production orders and forecasts, against supply, meaning on-hand inventory, Purchase Orders and planned orders. Every confirmed PO counts as expected incoming material. Import 4,000 cancelled legacy POs as confirmed orders and the planning engine sees 4,000 supply lines that no vendor will ever ship. The arithmetic is unforgiving. Net requirement is demand minus supply, so inflating supply with dead orders drives net requirement to zero or below. MRP then raises nothing. The warehouse stays empty and the line stops. ⚠One PO can suppress an entire item A single uncancelled PO for a high-value component, an engine assembly, a transmission housing or a steel frame, suppresses MRP planning for that item across every production order that needs it. At 4,000 phantom POs, the whole planning output stops being usable. Where the existing pipeline stopped Legacy system exports PO line recordsEvery Purchase Order, active or cancelled, leaves the legacy ERP as a flat file record. DMF imports the records into D365 F&OPO lines land in PurchTable and PurchLine through the standard Purchase Order Lines data entity. Backend automation approves and confirms POs starting with NThe automation picks up everything matching that number series prefix and pushes it through approval and confirmation. That pipeline handled active orders well. The cancelled ones broke it in four separate ways. No flag in the file. The legacy export mixed active and cancelled POs, and the DMF entity carried no field to mark which ones needed cancelling in D365 F&O. The automation confirmed the wrong orders. It ran on every PO matching the number series, so orders cancelled in legacy were approved and confirmed into live supply commitments. Manual cancellation cost weeks. The UI cancels one PO at a time. The team sized 4,000 POs at three to four weeks of clicking, and MRP could not run reliably until that cleanup finished. No reconciliation record. Even a manual pass would leave no structured log proving each cancellation completed, and no way to match the cancelled count between legacy and D365 F&O. Why the cancelled POs could not simply be dropped from scope MRP accuracy was the reason this work became non-negotiable, but three other requirements pointed the same way. Audit and compliance. Procurement auditors trace why a purchase was raised, who approved it and why it was reversed. Three years of history with the cancellations missing is a history with holes in it. Vendor performance analysis. Cancellation patterns are where lead time failures and specification mismatches show up. Migrate only active and completed POs and procurement loses the evidence it negotiates with. Financial reconciliation. Cancelled POs that carried prepayments, accruals or commitments have to exist in D365 F&O so finance can close out historical transactions without opening the legacy system again. 04Solution Overview Before the fix makes sense, one thing about D365 F&O has to be clear. Cancelling a Purchase Order is not a data update. It is a business operation, and the status field is the last thing it touches, not the first. What the Cancel button actually does Validation checks. The system tests eligibility. Has a product receipt posted against any line? Has an invoice been matched? Are registrations pending? Any of these blocks the cancellation or narrows it to specific lines. Workflow recall. If Change Management is enabled, the approval workflow is recalled so the PO leaves its approved state through the proper channel instead of a status override. Accounting distribution reversal. Encumbrances, pre-encumbrances and budget reservations created at confirmation are reversed or voided. Inventory marking cleanup. Marking references between PO lines and sales or production order lines are removed. MRP exclusion. The PO drops out of Master Planning calculations and stops counting as incoming supply. For this migration, that was the step that mattered. Status update. Only once all of the above completes does the PO status become Cancelled. The Purchase Order Lines DMF entity writes field values into PurchTable and PurchLine. It does not invoke any of those six steps. Push a status value of Cancelled through DMF and you get one of three outcomes, a validation failure, a silently ignored value, or a written status with none of the underlying logic behind it. That third outcome is the dangerous … Continue reading How a Leading North American Commercial Vehicle Manufacturer Bridged the Legacy PO Cancellation Gap in Dynamics 365 Finance & Operations Using DMF and X++ →

Share Story :

How a Texas-Based AI and Cybersecurity Services Company Streamlined Dataverse Choice Management in Dynamics 365

Summary In rapidly evolving sales organizations, business requirements rarely remain static. New products, services, sales categories, commercial models, and operational scenarios can continuously introduce the need for additional values in Dynamics 365. For one of our clients, this resulted in a recurring dependency on the technical team. Whenever the business needed to add or modify values in a Dynamics 365 Choice column, they had to approach the implementation team for a seemingly small configuration change. At first glance, replacing the Choice column with a Lookup table appeared to be a natural solution. However, that approach would introduce a much larger change: migrating existing records, replacing references throughout the application, modifying system processes, reviewing integrations, and potentially impacting logic that already depended on the existing Choice values. Instead of redesigning the data model to solve a configuration problem, I approached the requirement from a solution-architecture perspective. I built a self-service Dataverse Choice Manager that allows authorized users to select a Dataverse table and Choice column, add or update options, publish the metadata, and automatically create an audit record and notify system administrators. The solution uses supported Dataverse Web API and Metadata APIs to perform controlled schema-level operations while introducing governance, auditability, and guardrails around those changes. The result is a model where the business can adapt its Choice values without continuously depending on developers, while the technical team retains control over security, governance, auditing, and platform integrity. Case Study Read more about our Journey with this Customer over here: View Case Study Table of Contents Introduction Business Requirement The Architectural Decision How I Solved It Implementation Procedure End-to-End Working Custom Auditing and Governance Working Within Dataverse Platform Boundaries Benefits of the Solution Limitations and Guardrails Conclusion Introduction Dynamics 365 implementations often evolve alongside the businesses they support. A sales organization may initially define a finite set of values for a Choice column. Over time, however, new products are introduced, sales processes change, new commercial categories emerge, and terminology evolves. The technical change may appear trivial: “I just need to add one more option to this Choice field.” But when the same request occurs repeatedly, a different problem emerges. The business becomes dependent on the technical team for configuration changes that are fundamentally part of day-to-day business evolution. For one of our clients, this pattern was becoming increasingly common. The organization is highly sales-focused and operates in an environment where business requirements continue to evolve. The question therefore became: Can I give the business controlled self-service access to Choice values without redesigning the existing Dataverse data model? Rather than immediately changing the schema, I looked at the problem from a solution-design perspective. The answer was to build a controlled metadata management layer over Dataverse. Business Requirement The client’s requirement was straightforward: Select a Dynamics 365 table. Select a Choice column. Add a new option when the business needs one. Update an existing option label when terminology changes. The challenge was not simply performing these operations. The challenge was performing them safely. A typical Dynamics 365 user does not need unrestricted access to the Dataverse schema. Giving users broad customization privileges would create an entirely different governance problem. I therefore needed to balance two competing objectives: Business agility The sales team should not need to raise a development request every time a new Choice value is required. Technical governance The organization still needs to know: Who made the change? What was changed? When was it changed? Which table was affected? Which Choice column was affected? What was the previous value? What is the new value? Was the change successfully published? This led us to a more important architectural principle: Self-service does not have to mean unrestricted access. The solution should expose only the operations that the business needs while keeping the underlying metadata APIs behind a controlled interface. The Architectural Decision Option 1: Replace the Choice with a Lookup One possible solution was to replace the existing Choice column with a Lookup pointing to a new Dataverse table. Conceptually, this would provide an excellent long-term model for highly dynamic business values. For example: Sales Record | +– Category Lookup | +– Category A +– Category B +– Category C +– Category D The business could then create new category records without changing metadata. However, the problem was the existing implementation. The Choice column was already being used across the solution. Replacing it would potentially require: Identifying all existing records containing the Choice value. Creating corresponding records in the new Lookup table. Migrating existing data. Replacing the existing field references. Updating JavaScript. Reviewing plugins. Reviewing Power Automate flows. Reviewing business rules. Reviewing integrations. Updating reports and Power BI dependencies. Testing existing processes. Deploying the changes across environments. In other words, a small configuration problem could turn into a substantial data-model transformation. The Architectural Conclusion The problem was not necessarily that the Choice column was the wrong data type. The problem was that the organization needed a controlled way to manage its values. Therefore, rather than redesigning the data model, I preserved the existing architecture and built a self-service management capability around it. How I Solved It I designed a web-resource-based application inside Dynamics 365: Dataverse Choice Manager Dataverse Picklist Manager. The application provides a simple interface through which an authorized user can: Select a Dataverse table. Retrieve the available Choice columns. Select a Choice column. Retrieve its existing options. Add a new option. Update an existing option. Publish the affected table. Generate an audit record. Notify the system administrator. From the user’s perspective, this becomes a simple business operation. From the platform perspective, however, the application is interacting directly with Dataverse metadata. The high-level architecture is: Dynamics 365 User | v Dataverse Choice Manager | +——————–+ | | v v Dataverse Web API Metadata Actions | | | InsertOptionValue | UpdateOptionValue | DeleteOptionValue | PublishXml | v Dataverse Metadata | v Choice Column Updated | +———————-+ | | v v Custom Audit Log System Administrator Email This is where the solution becomes more … Continue reading How a Texas-Based AI and Cybersecurity Services Company Streamlined Dataverse Choice Management in Dynamics 365 →

Share Story :

How a Sustainability Certification Nonprofit Automated Agreement Management with Adobe Acrobat Sign and Power Automate

Light Sepia Dark 01Summary Part 1 covered the data model behind a certification Agreement Manager in Microsoft Dataverse: eleven tables, a strict ownership boundary that leaves signing to Adobe Acrobat Sign and document storage to Azure Blob, and a coverage model whose whole purpose is to let certification logic answer a question with a query instead of a judgement call. This part covers the automation built on top of it, and it is written against the environment rather than the specification. I went back into the development org and checked, because a build note written at two in the morning is not evidence. What is there: six cloud flows, all activated, a validation action with a plugin step behind it, Adobe configured with real workflow identifiers, and eight agreement requests that have genuinely run through the process, four of them to Fully Executed. What is not there: the custom API that creates coverage, which was never built. Nothing else is permitted to write coverage, so the coverage table is empty. The interesting part is that the system already says this about itself. 02In This Blog What is actually deployed, verified against the environment, and what the gap between the specification and the org tells you about handing work over. The Scenario: A finished data model that still needed to send agreements, track them, store evidence, and produce coverage. The Approach: A decision table fixing flow against plugin against custom API for every operation, written before any automation existed. The Action: Six solution aware flows, a validation action with a plugin behind it, and Adobe wired to real template workflow identifiers. The Outcome: A process that runs end to end up to signature, and one clearly identified missing component that the validation data names out loud. A half finished system is safe to inherit when it tells you what is missing. It is dangerous when you have to find out. Table of Contents 01Summary→ 02In This Blog→ 03Where Part 1 Left Off→ 04Flow, Plugin, or Custom API→ 05What Is Built, and What Comes Next→ 06The Coverage Gate→ 07Impact→ 08Conclusion→ 09FAQ→ 10Get in Touch→ 03Where Part 1 Left Off The foundation was eleven Dataverse tables in three layers. A configuration layer holding Agreement Type, Agreement Template Version, Agreement Role Definition and Agreement Requirement Policy. A process layer centred on Agreement Request with four parental children: Agreement Party, Agreement Recipient, Agreement Document and Agreement Validation Issue. An evidence layer of Agreement Coverage and Agreement Coverage Scope. Adobe Acrobat Sign for Microsoft Dynamics 365 owns signature execution. Azure Blob Storage owns the binaries. Dataverse owns the business decision. Eight alternate keys hold the integrity guarantees, the strongest being the one that makes a second active coverage for the same scope impossible. Everything below assumes that foundation, because the specification forbade starting automation until the tables, keys, forms and views were finished and validated. That sequencing held, and it is the reason the automation layer is as small as it is. 04Flow, Plugin, or Custom API Most Power Platform builds decide implementation style per developer preference, which produces a system where nobody can predict where a given behaviour lives. This build used one canonical decision table, written before any automation existed. Operation Preferred implementation Escalate to code when Validate Agreement Request Solution aware flow or command action that clears unresolved issues, writes new ones, and updates the validation summary The gate needs synchronous reuse, in which case it is promoted to a custom API Send for Signature Power Automate using the Adobe connector, only after validation leaves no blocker Multiple callers need one stable callable action Adobe status sync Adobe managed app plus a lightweight sync flow where needed Concurrency or idempotency require server side code Retrieve and store documents Power Automate for small files, Azure Function for large ones Blob SDK, managed identity, hashing or retry handling are awkward in a flow Create Coverage Custom API, mandatory. A pure flow is explicitly not acceptable Always, because supersession must be transaction safe Open final document Flow or Azure Function generating a short lived link Managed identity and key vault access are easier in a function Coverage gate Synchronous plugin or custom API Certificate issuance must be blocked immediately rather than eventually The canonical matrix. Deviating from it required a written justification, not a preference. Why coverage creation cannot be a flow Creating active coverage means superseding the previous active row, clearing its key, linking the supersession, and inserting the replacement. A flow performs those as separate operations, so a failure between them leaves the legal entity with either no coverage or two. A custom API performs them in one transaction, which is why the specification made it mandatory rather than preferred. The three custom APIs Validate Agreement RequestRe runs validation, populates the policy reference date if blank, enforces legal review approval where the agreement type demands it, upserts validation issues by alternate key, and returns a summary with blocker and warning counts. Create Agreement CoverageResolves policy and scope, builds the coverage match key, supersedes the prior active row and inserts the new one in a single transaction, creates the scope rows, and moves the request to Coverage Created. Evaluate Coverage GateGiven an account, legal entity, agreement type code, scope context and reference date, returns pass, block or exception with the reason and the coverage identifier that satisfied it. 05What Is Built, and What Comes Next It is worth being precise here, because a diagram of the full design would overstate what runs. The following is what the environment reports, not what the specification asked for. Figure 1: What is running today, and what is designed and waiting The automation, as deployed Component What it does State in the environment Validate Agreement Request Writes a structured issue row for every problem found on a request Custom action and plugin step, both activated FLW-01 Send for Signature Hands the prepared agreement to Adobe Activated FLW-02 Adobe Status Sync Brings signing progress back onto the request and … Continue reading How a Sustainability Certification Nonprofit Automated Agreement Management with Adobe Acrobat Sign and Power Automate →

Share Story :

Vendor Collaboration in Dynamics 365 Finance & Operations: Running Request-for-Quotation from Portal Invite to Purchase Order

Summary This article covers the implementation of the Vendor Collaboration Portal with Request for Quotation (RFQ) in Dynamics 365 Finance & Operations for a North American manufacturing operation. Vendors were enabled for collaboration and given portal access, RFQs were created and dispatched to one or more suppliers, and vendors responded with price, delivery date and comments directly in the portal. Buyers then compared the responses side by side, accepted the winning quote, and generated a purchase order carried at the quoted price — which flowed straight into the PO approval workflow. The result replaced scattered email-based quoting with a single, structured, auditable sourcing process. Table of Contents Introduction The Business Problem The Solution Vendor Setup for Collaboration Portal User Setup The RFQ Process, Step by Step Considerations & Limitations Business Impact FAQs Conclusion 1. Introduction Sourcing decisions are only as good as the quotes behind them. In many procurement teams, requests for pricing go out over email, come back in inconsistent formats, and get compared in a spreadsheet that no one can audit later. Dynamics 365 Finance & Operations addresses this with Vendor Collaboration — a supplier-facing portal — and the Request for Quotation (RFQ) process that runs on top of it. With this in place, a buyer raises an RFQ inside D365, sends it to selected vendors, and those vendors log in to a secure portal to submit their price and delivery commitments. The buyer compares the responses in one place, accepts the best offer, and turns it into a purchase order without re-keying a single line. This article walks through how the capability was configured and operated end to end. Enable vendorfor collaborationCreate &send RFQVendor submitsquote in portalBuyer compares& acceptsCreate POat quoted priceSubmit toapprovalFigure 1. The RFQ journey — from enabling a vendor on the portal to a purchase order in the approval workflow. 2. The Business Problem Before the rollout, collecting quotes was a manual, email-driven exercise. That created several recurring problems: Quotes arrived in different formats, making a fair side-by-side comparison difficult and slow. There was no single record of who was asked, what they offered, and why a supplier was chosen — weak auditability. Re-keying accepted prices into a purchase order introduced errors and delay. Sending the same request to multiple vendors, and tracking their replies, was hard to manage. Supplier onboarding and access were handled ad hoc, with no controlled activation. The Objective: Give suppliers a controlled self-service portal to respond to quotation requests, and give buyers a structured, auditable way to compare offers and convert the winner into a purchase order in a few clicks. 3. The Solution The solution has three parts: enabling the vendor for collaboration, provisioning the portal user, and then running the RFQ cycle itself. Each is described below with the exact navigation used. 3.1 Vendor Setup for Collaboration The vendor record is prepared first so the supplier can be invited to the portal and confirm orders automatically. Navigation : Accounts payable > Vendors > All vendors 1. Enter the vendor Contact name and Email 2. Enable the vendor for Vendor Collaboration 3. Set PO Confirmation = Auto 3.2 Portal User Setup Next, the individual portal user is created and activated through the standard user request workflow, which runs automatically. 1. In All contacts, add the user: Name, Email address, and Vendor details (assign the legal entities) 2. Click Activate 3. Workflow runs automatically: System administration > Workflows > User workflows > User request workflow (platform) 4. Verify activation: Vendor collaboration > Contacts > Vendor collaboration users 3.3 The RFQ Process, Step by Step With the vendor and user in place, the buyer runs the quotation cycle. Prices are intentionally left blank on creation — the vendor supplies them. Navigation : Procurement and sourcing > Request for quotations > All RFQs Step 1 Create RFQ — add Vendor(s) on the header, and Item, Quantity and Delivery date on the lines. Keep Price blank. Step 2 Send — click Send (selected lines) or Send all. The vendor receives the RFQ in the portal. Step 3 Vendor responds — logs into the portal, enters Price, Delivery date and Comments, then clicks Submit. Step 4 Buyer reviews — open the RFQ, view replies, compare Price, Delivery date and Terms. Step 5 Accept — select the winning vendor response and click Accept. Step 6 Create purchase order — the PO is created at the vendor quote price. Step 7 Submit workflow — open the PO and click Workflow > Submit. RFQ cycle — buyer and vendor actions1Create the RFQ (vendor, item, quantity, delivery date; price blank)2Send the RFQ to one or more vendors via the portal3Vendor submits price, delivery date and comments in the portal4Buyer reviews and compares all vendor replies5Accept the winning quote6Create the purchase order at the quoted price7Submit the PO to the approval workflowFigure 2. The seven-step RFQ cycle, from creation to a submitted purchase order. Multiple vendors can be added on a single RFQ header, so the same request goes out to a competitive field and every reply lands back against one record. 4. Considerations & Limitations A few configuration choices shape how the process behaves in practice. Configuration point Setting used What it controls PO Confirmation Auto Purchase orders confirm automatically once created from the accepted quote. Vendor Collaboration flag Enabled Grants the vendor access to the portal to receive and respond to RFQs. Price on RFQ line Left blank Deliberately empty so the vendor supplies the price — the basis for comparison. Multiple vendors on header Supported One RFQ can be sent to several suppliers for competitive quoting. User activation Workflow-driven Portal users are activated through the platform user request workflow, keeping access controlled. Note: The portal experience depends on correct vendor contact and legal-entity assignment. If a user is not activated through the user request workflow, they will not see RFQs in the portal. 5. Business Impact Moving quoting onto the collaboration portal delivered clear operational gains: Faster quote turnaround, because vendors respond directly in … Continue reading Vendor Collaboration in Dynamics 365 Finance & Operations: Running Request-for-Quotation from Portal Invite to Purchase Order →

Share Story :

Dynamics 365 Sales AI: Turn CRM Data into Dynamic Word Reports for Executive Insights

Posted On August 26, 2026 by Posted in Tagged in , ,

☼ Light ☶ Sepia ☽ Dark 01Summary Account data in CRM is rarely in one place, with revenue, pipeline, quotes, and years of meeting notes spread across separate records. We built a one-click Account Intelligence Report that runs inside Dynamics 365 and assembles the complete account picture on screen in seconds. With a second click, an AI analyst reviews every appointment note to produce a plain-language engagement history, current status, open commitments on both sides, and talking points for the next meeting. The complete report, combining facts and AI insights, can then be exported as a branded, editable Microsoft Word document with a single click. Everything runs within the signed-in user’s existing Dynamics session, with no new servers or third-party libraries, while inheriting the user’s existing data permissions by design. Table of Contents 01Summary→ 02The 40-Minute Problem→ 03Solution Overview→ 04Technical Approach→ 05Impact→ 06Conclusion→ 07Let’s Talk→ 02The 40-Minute Problem Picture an account manager thirty minutes before a quarterly business review with a customer they have worked with for three years. The relationship is rich. The context, though, is buried. The revenue figure sits on the Account. The live pipeline is spread across a handful of opportunity records. There are a dozen quotes from the last two quarters, most of them not tracked and easy to forget. Then there are the meeting notes. Dozens of appointments, each with its own thread of what was said, promised, and agreed. None of that is missing. It is all in the CRM. The trouble is that it is everywhere at once. To reconstruct the story of an account, someone has to open twenty records, read between them, and hold the whole picture in their head. So they do not bother. They skim the last two meetings, walk in half prepared, and the deeper context stays invisible until it becomes a problem. This is not a data problem in the sense of not capturing enough. It is a synthesis problem. The organisation already holds the intelligence. It simply has no fast, trustworthy way to assemble it into something a human can act on before a meeting begins. ⓘThe real bottleneck The hardest work in account management is rarely finding the information. It is pulling it together. Connecting revenue, pipeline, and history into one coherent, current view, at the exact moment you need it, is where most of the effort actually goes. 03Solution Overview We set out to solve that synthesis problem with the smallest possible footprint, for a U.S.-based manufacturing facility running Dynamics 365 Sales. The result is a single command on the Account form called the Account Intelligence Report. From the account you are already looking at, one click opens a clean, paper-style report inside the application. It is not another tab to manage or another system to log into. It is part of the CRM you already use. The report does three things, in order: It gathers. In seconds it pulls the account’s revenue, its sales-revenue targets, the most relevant quotes, every open opportunity, and all related appointments together with their notes. It reads. A second click sends those meeting notes to an AI model that writes up the account’s engagement history and distils it into clear, decision-ready insights. It delivers. One more click produces a professional, branded Word document, a finished brief you can email, print, or bring into the meeting. The whole experience is built to feel instant. You stay in the flow of your work, and the report comes to you. What the Report Actually Contains The report is organised the way an account manager actually thinks about an account, not the way a database is organised. At the top is a compact dashboard. Revenue, quote totals, open opportunities, and appointment counts sit at a glance. Below that is the structured document itself. Revenue and pipeline at a glance The opening section brings together the numbers that frame the relationship: the customer’s revenue, the potential opportunity, budget and revenue year-to-date, and the estimated revenue outlook. This single block replaces what would otherwise mean cross-referencing the Account record with a separate sales-revenue table. Quotes and open opportunities Next is a focused view of quotes from the last six months, including those not tracked quotes that quietly accumulate and are easy to lose, alongside every open opportunity in the same window, with its stage, originating lead, product segment, and bid date. Totals calculate automatically, so pipeline value is always visible without a manual add-up. Every related appointment, with its notes This is where the report earns its keep. It lists all related appointments and, crucially, lets you expand any meeting to read exactly what was discussed. Attendees are pulled out, and the full substance of each meeting is available inline. For a customer with a long history, this becomes a navigable timeline of the entire relationship, every visit, call, and commitment, in one place. 💡Why appointments are the hard part Meeting history is usually collected through two different paths in CRM. Sometimes a customer is recorded as a participant, sometimes as the subject of the meeting. The report queries both, then merges and de-duplicates the results, so nothing is missed and nothing is doubled. 04Technical Approach The AI Analyst: Years of Notes in One Read Gathering the notes is only half the battle. Someone still has to read them. The "Get AI Insights" action does exactly that. It takes the full set of appointment notes for the account and asks an AI model, Azure OpenAI, to do what a thorough colleague would do before a meeting: read everything, then tell you what matters. The output is deliberately structured, so it slots straight into the report rather than producing a vague paragraph. It returns six things: Engagement history — a single flowing narrative of the relationship from the earliest meeting to the most recent, with dates, attendees, and the key decisions along the way. Current status — a direct read on where things stand and the overall momentum, in two to four points. … Continue reading Dynamics 365 Sales AI: Turn CRM Data into Dynamic Word Reports for Executive Insights →

Share Story :

How a Sustainability Certification Nonprofit Automated Certification Agreements in Microsoft Dataverse with Full Audit History

Light Sepia Dark 01Summary A global product certification institute needed to know one thing reliably before it could issue a certificate: does this legal entity have a valid, executed certification agreement that covers this certification type and standard version, on this date. Answering that meant opening a signing platform, a document store, and a legacy CRM, then trusting somebody’s judgement. We built an Agreement Manager in Microsoft Dataverse that answers it with a query. The design decision that shaped everything else was refusing to rebuild what already worked. Adobe Acrobat Sign for Microsoft Dynamics 365 remains the signing engine. Azure Blob Storage remains the evidence store. The custom Dataverse layer exists only where the institute needs business control that neither provides: requirement rules, signer preparation, legal party snapshots, structured validation, and above all a machine readable record of what an executed agreement actually covers. This first part covers the foundation: eleven tables, the ownership boundary between Dataverse and Adobe, the coverage model that makes certification gating possible, and the alternate key strategy that prevents two active coverages from ever existing for the same scope. Part 2 covers the automation built on top, and is honest about the one piece that is missing. 02In This Blog A practitioner view of designing the data layer for certification agreement execution on Dataverse, where the output is not a signed PDF but a queryable statement of coverage. The Scenario: Certification decisions were being made without a reliable way to confirm that a valid agreement covered the applicant, the certification type, and the standard version in question. The Approach: Keep Adobe as the signing engine and Azure Blob as the document store. Build custom tables only where business control is genuinely missing. The Action: Eleven tables across a configuration layer, a process layer, and an evidence layer, with parental relationships on every snapshot child and eight alternate keys. The Outcome: Certification logic checks one thing, Agreement Coverage, and never inspects Adobe status or the existence of a PDF. The deliverable of a contract system is not the signed document. It is the ability to prove, in a query, that the document applies. Table of Contents 01Summary→ 02In This Blog→ 03Business Challenges→ 04The Build Boundary→ 05The Data Model→ 06Lifecycle and Duplicate Prevention→ 07Impact→ 08Conclusion→ 09FAQ→ 10Get in Touch→ 03Business Challenges The institute certifies products against a published standard. Before a certificate can be issued, the applicant’s legal entity must have signed the applicable certification agreement, and the agreement that applies depends on region, country, certification type, standard version, and the date the requirement became mandatory. Coverage was a human judgement. Confirming that a signed agreement actually applied to a given application meant reading a PDF and deciding. Two reviewers could reasonably reach different conclusions. Evidence was spread across systems. Executed agreements existed in a legacy CRM, in Adobe outputs, in a document generation tool, and in a manual register. No system held all of them. Requirement rules lived in people’s heads. Which template version became mandatory for which region and certification type, and from what date, was tribal knowledge rather than configuration. Duplicate active agreements were possible. Nothing prevented two concurrent active agreements for the same legal entity and scope, which makes the question of which one governs unanswerable. Manual and wet signature cases had no controlled path. Exceptions were handled by email and stored wherever the handler chose. The recurring failure is not that signing was hard. Adobe already did signing well. The failure was that nothing downstream could consume the result of signing as data. The trap we avoided The obvious move is to build a full contract lifecycle management suite: clause libraries, redlining, negotiation workspaces, a generic multi provider signing framework. All of that was explicitly ruled out of scope. None of it would have answered the coverage question, and each piece would have duplicated something Adobe or Dataverse already provides. 04The Build Boundary Before a single table was created, the specification fixed which system owns what. This is the decision that kept the build lean, and it is worth stating explicitly because it is the one most projects get wrong. Figure 1: The ownership boundary. Seven tables that a generic contract design would have created were deliberately not built. The rule applied throughout was simple. If a requirement can be met by supported Adobe managed functionality without losing business traceability, use the Adobe functionality. Custom tables exist only where the institute needs control that no product provides. Reuse before you extend The environment already contained reference tables for legal entity, region, subregion, country, certification type, standard version, and certification standard scope. Every one of those is referenced by lookup rather than recreated as a local choice. A choice column for country in a certification system is a data quality incident waiting for a rename. 05The Data Model Eleven tables were built in a strict order, and they fall into three layers with different ownership models. Configuration tables are organization owned because they are administered centrally. Process tables are user or team owned because they carry work. Evidence tables are organization owned because coverage is a fact about the institute, not about a user. Figure 2: The eleven table model in three layers, with the reference tables that were reused rather than recreated # Table Purpose Ownership 1 Agreement Type Reusable agreement categories Organization 2 Agreement Template Version Approved legal template and its Adobe workflow reference Organization 3 Agreement Role Definition Signer, reviewer and counter signer roles per template version Organization 4 Agreement Requirement Policy Configurable rule for when an agreement is required Organization 5 Agreement Request Central process record for preparation and lifecycle User or Team 6 Agreement Party Legal parties bound by the agreement, held as snapshots Parented to Request 7 Agreement Recipient Actual signers and their status snapshots Parented to Request 8 Agreement Document Metadata and control record for Blob stored files Parented to Request 9 Agreement Coverage Machine readable evidence that an executed agreement applies Organization 10 Agreement … Continue reading How a Sustainability Certification Nonprofit Automated Certification Agreements in Microsoft Dataverse with Full Audit History →

Share Story :

How a U.S.-Based Steel Windows and Doors Manufacturer Built a Multi-Entity Business Process Flow in Dynamics 365 Sales

01Summary A manufacturer of custom steel windows and doors was running its entire sales pipeline through a default BPF that ended at the Opportunity stage. Once a deal was won, production tracking moved to spreadsheets and email threads. Sales could not tell a client where their order stood. Operations had no consolidated view of which orders were in engineering review, which were in fabrication, and which were waiting on finishing. CloudFronts designed and implemented a multi-entity Business Process Flow in D365 Sales that spans Lead, Opportunity, and a custom Order Fulfillment entity. The BPF now tracks every order through its production stages, from engineering sign-off through fabrication, finishing, quality inspection, and dispatch. Sales sees order status without calling the shop floor. Operations reports on production bottlenecks across the full pipeline. Table of Contents 01Summary→ 02Business Challenges→ 03Solution Overview→ 04Technical Approach→ 05Business Impact→ 06Conclusion→ 07Connect With Us→ 02About the Customer A manufacturer of custom steel windows and doors uses Dynamics 365 Sales to manage its customer relationships and order pipeline. The business builds bespoke, high-specification products where every order is unique, every unit requires individual engineering, and every delivery carries a direct reputational commitment to the client. 02Business Challenges Every product this manufacturer builds is bespoke. Every steel window and door is individually engineered, fabricated, and finished to specification. Every delivery carries a direct reputational commitment to the end client, whether that client is a homeowner, an architect, or a commercial developer. The sales cycle does not end when the deal is won. It ends when the product is delivered, installed, and accepted. The D365 Sales environment had been live for over a year when CloudFronts began the engagement. The standard Lead-to-Opportunity BPF was in place. The problems started the moment a deal moved to Won. Production tracking lived outside the CRM. Once an opportunity was marked as Won, the order moved to a shared spreadsheet. The operations team tracked engineering review, fabrication, finishing, and dispatch dates in separate columns. Version control was manual. Updates were delayed. Sales had no visibility into order status. When a client called to ask where their order was, the sales rep had to phone or email the shop floor. The answer took hours, sometimes a day. For a business built on bespoke, high-specification products, that delay eroded the client experience. No single view from inquiry to delivery. Management could report on pipeline (leads and opportunities) or on production (the spreadsheet), but not on the full journey from first inquiry to delivered product. There was no way to measure the total cycle time from lead capture to dispatch, or to identify where orders stalled. The lead form had accumulated 40+ custom fields. Contact data, project specifications, engineering notes, and production preferences were all on the Lead entity. Sellers filling in a new inquiry from a trade show had to scroll past glazing specification fields that only mattered later. The form was slow to load and difficult to use on mobile. No distinction between project types in the process flow. A residential architect requesting a quote for three casement windows and a commercial developer scoping a 200-unit curtain wall project followed the same BPF stages. The qualification criteria, production complexity, and delivery timelines are fundamentally different, but the system treated them identically. 03Solution Overview CloudFronts designed a multi-entity Business Process Flow that extends the sales process beyond the Opportunity into production. The BPF spans three entities: Lead, Opportunity, and a custom Order Fulfillment entity. Instead of ending at Won, the process flow continues through the production stages that define this manufacturer’s delivery commitment: engineering review, fabrication, finishing, quality inspection, and dispatch. The Lead entity was trimmed to fewer than 15 fields. Contact details, referral source, project type (residential or commercial), and initial product interest (windows, doors, curtain walls, or mixed) are the only data captured at the lead stage. Engineering specifications, production requirements, and order details move to the entities where they belong: the Opportunity and Order Fulfillment records. The Order Fulfillment entity tracks the production lifecycle of each won deal. Each fulfillment record is linked to an Opportunity and carries its own set of production stages, dates, owners, and status fields. Sales reps see a live production status on the opportunity record without accessing the shop floor system. Operations managers see a consolidated production pipeline across all active orders, with the ability to filter by stage, project type, and expected dispatch date. ⓘWhy extend the BPF instead of building a separate production tracker? A separate production module would have created two disconnected systems: one for sales, one for operations. By extending the BPF into Order Fulfillment, the entire lifecycle from first inquiry to delivery lives in a single process flow. The sales team does not need to switch systems. Reporting joins lead source, deal value, and production cycle time in one data model. And the BPF enforces stage gates that prevent an order from advancing to fabrication before engineering sign-off is complete. 04Technical Approach Entity Model The framework uses three primary entities in the BPF and two supporting reference tables. Entity Type Purpose Key Fields Lead Standard First contact: who the lead is and where they came from Contact name, company/architect firm, referral source, project type (Residential/Commercial), initial product interest (Windows/Doors/Curtain Walls/Mixed) Opportunity Standard Deal record: commercial qualification and proposal Estimated project value, product mix, unit count, expected order date, project timeline, sales stage Order Fulfillment Custom Production lifecycle: tracks each won order through manufacturing to delivery Engineering review status, fabrication start/end dates, finishing status, quality inspection outcome, dispatch date, delivery confirmation, Opportunity lookup Entity model for the multi-entity BPF framework The Order Fulfillment entity carries a lookup to the Opportunity. When an opportunity moves to Won, the BPF transitions to a new Order Fulfillment record. This record becomes the single source of truth for production status. The Opportunity record retains the commercial data (deal value, product mix, client details), while the Order Fulfillment record tracks manufacturing progress. 💡Keep each entity focused on one job … Continue reading How a U.S.-Based Steel Windows and Doors Manufacturer Built a Multi-Entity Business Process Flow in Dynamics 365 Sales →

Share Story :

SEARCH BLOGS:

FOLLOW CLOUDFRONTS BLOG :


Categories

Secured By miniOrange