Category Archives: Dynamics 365
How to Use Metadata Search in Visual Studio for Dynamics 365 Finance & Operations
When working on big projects, it can be hard to quickly find classes, methods, or properties spread across different libraries. Searching through files one by one takes too much time. This is where metadata search in Visual Studio helps. It lets you explore and navigate types from external libraries (like .NET assemblies or NuGet packages) even if you don’t have the source code. Visual Studio creates a readable view of the compiled metadata, so you can instantly see definitions and details, almost like built-in documentation. References Metadata search – Visual Studio Usage -In Visual Studio, go to Dynamics 365 > Metadata Search OR Ctrl + R, Ctrl + S.-Start typing the name of the element you are looking for.-Results appear as you type.-Double-click a result to go directly to that metadata or code.-You can also right-click to add items to your project. You can filter via the follow criteria: To conclude, Metadata search in Visual Studio is a fast and easy way to find code and metadata in Dynamics 365 F&O projects. Using it saves time, reduces frustration, and helps you understand and work with large projects more efficiently.If you require additional support or have specific questions about your ERP setup, please don’t hesitate to contact us for personalized guidance. We hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfronts.com.
Share Story :
Auto Refresh Subgrid in Dynamics 365 CRM Based on Changes in Another Subgrid
In Dynamics 365 CRM implementations, subgrids are used extensively to show related records within the main form. But what if you want Subgrid B to automatically refresh whenever a new record is added to Subgrid A, especially when that record triggers some automation like a Power Automate flow or a plugin that creates or updates related data? In this blog, I’ll walk you through how to make one subgrid refresh when another subgrid is updated — a common real-world scenario that enhances user experience without needing a full form refresh. Let’s say you have two subgrids on your form: Whenever a new record is added in the Chargeable Categories subgrid, a Power Automate flow or backend logic creates corresponding records in Order Line Categories. However, these new records are not immediately visible in the second subgrid unless the user manually refreshes the entire form or clicks on the refresh icon. This can be confusing or frustrating for end-users. Solution Overview To solve this, we’ll use JavaScript to listen for changes in Subgrid A and automatically refresh Subgrid B once something is added. Here’s the high-level approach: Implementation Steps 1. Create the JavaScript Web Resource Create a new JS web resource and add the following code: How It Works To conclude, this simple yet effective approach ensures a smoother user experience by reflecting backend changes instantly without needing to manually refresh the entire form. It’s particularly helpful when automations or plugins create or update related records that must appear in real-time. By combining JavaScript with Dynamics’ form controls, you can add polish and usability to your applications without heavy customization. I hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfronts.com.
Share Story :
Add or Remove Sample Data in a Dynamics 365 CRM Environment
Let’s say you configured a Dynamics 365 Sales or Project Operation or a field service trial for a client demo to save your efforts on creating sample data dynamics gives you an option to add data in any dynamics 365 environment, you can either choose to install the sample data while creating the environment however if you forgot to do so, here is how you can add sample data within your dynamics 365 environment. Step 1 – Go to https://admin.powerplatform.microsoft.com/environments select your dynamics 365 environment and click on view details. Step 2 – On the details page click on setting. Step 3 – On the setting page under data management you will see an option named sample data, click on it. Step 4 – Click installed and after a few minutes sample data will be added within your dynamics 365 environment. Similarly, if sample data is already installed and you wish to remove it, you will see a button Remove sample data instead of Install sample data. Hope this helps! 😊 I hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfronts.com.
Share Story :
Disqualify Single or Multiple Quotes in Dynamics 365 with One Click!
If you’ve ever needed to mark multiple quotes as lost in Dynamics 365, you know the default “Close Quote” dialog can be slow and repetitive.In my recent project, the sales team wanted a faster way, one click from the main Quotes view, to disqualify single or multiple quotes, without opening each one or clicking through extra prompts. Using the out-of-the-box CloseQuote action, a small JavaScript function, and a custom Ribbon Workbench button, I built exactly that. Here’s how. Why I Needed This Our sales team often manages multiple quotes at once. The standard process meant: It was time-consuming, especially for bulk operations. We needed a quick, grid-based action that would: Step 1 – Using the OOB CloseQuote Action Dynamics 365 provides a built-in CloseQuote bound action that changes the state and status of a quote to closed. Instead of creating a custom action, I decided to call this OOB action directly from JavaScript. Step 2 – JavaScript to Call the OOB Action Here’s the function I wrote to handle both single and multiple quotes: Step 3 – Adding the Ribbon Button in Ribbon Workbench Now, the button will be available directly on the Quotes view. Step 4 – Testing the Feature This reduced what was previously a multi-click, per-record task into a single action for any number of quotes. Why This Works Well To conclude, by combining the OOB Close Quote action with Ribbon Workbench, I could instantly disqualify quotes from the main grid, saving hours over the course of a month. If you’re looking to simplify repetitive processes in Dynamics 365, start by exploring what’s already available out of the box, then add just enough customization to make it your own. 🔗 Need help implementing a custom button or enhancing your Dynamics 365 sales process? At CloudFronts, we help businesses design and implement scalable, user-friendly solutions that streamline daily operations and improve adoption. Whether it’s customizing Ribbon Workbench, integrating OOB actions, or building tailored automation, our team can make it happen. 📩 Reach out to us at transform@cloudfronts.com and let’s discuss how we can optimize your Dynamics 365 environment.
Share Story :
Managing Post-Delivery Service and Repairs Using Cases in Dynamics 365 CRM
Why This Matters Imagine you’ve just delivered an order, and now there’s a service issue or repair request from the customer. What’s the best way to track and resolve that? That’s where Cases come in. This blog walks you through how your company can use Cases in Dynamics 365 CRM to efficiently handle post-delivery service and repair requests—directly linked to the order fulfillment process for better visibility and control. Let’s break it down step by step. Step 1: Navigate to Cases from an Order Fulfillment Record Start by opening the Order Fulfillment record.Click on the “Related” dropdown and select “Cases” from the list. This takes you directly to all service cases related to that order. Step 2: Create a New Case Click on the “New Case” button in the Cases tab. A Quick Create: Case form appears. Here’s what you’ll see and fill in: Optional fields like Contact, Origin, Entitlement, and others can be filled in if needed.You can also include details such as First Response By, Resolve By, and Description, depending on your business requirements. Once done, hit Save and Close. Step 3: View All Related Cases After saving, you’ll see a list of all Cases associated with the order under the Case Associated View. Each entry includes key info like: This makes it easy to monitor all service activity related to an order at a glance. Step 4: Manage Case Details Click on any Case Title to open the full Case record. From here, you can: Step 5: Monitor Service Performance Navigate to Dashboards > Service and Repair to track ongoing Case performance. Here’s what you’ll see: This allows your company’s service team to monitor progress, manage workload, and identify recurring product or fulfillment issues. To conclude, by following this process, your company ensures that every post-delivery service or repair request is captured, tracked, and resolved—while keeping everything connected to the original order. It’s simple, efficient, and fully integrated into Dynamics 365 CRM. Hope this helps!!! I hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfronts.com.
Share Story :
Automating Lease Lifecycle & Financing with Dynamics 365 Finance & Operations – For Lessor
Global equipment lessors often manage thousands of active contracts across multiple regions. Add in layered financing structures—equity, debt, and third-party investors—and the complexity grows rapidly. Manual processes in this environment create risks in billing accuracy, funding visibility, and profitability tracking. Choosing Microsoft Dynamics 365 Finance & Operations (F&O) by integrating Project Management, Subscription Billing, Dynamics 365 Sales Pro/CRM, Logic Apps, and Power BI, the platform automates the entire lease lifecycle while ensuring transparency and control. Lease Lifecycle Automation Subscription Billing Module: Lessors can: This automation ensures every lease follows consistent accounting treatment and reduces manual workload for finance teams. Multi-Layer Financing Most lessors fund contracts through multiple sources. Dynamics 365 F&O allows you to: This provides clarity not just for finance teams, but also for investors seeking insight into their returns. Business Impact To conclude, by automating lease setup and financing structures, lessors gain: If you are a Lessor and wish to digitize lease lifecycle management and layered financing, adopt the strategy explained above to scale systematically, reduce risks, and provide stakeholders with the visibility they expect. Let’s build the strategy together. You can reach out to us at transform@cloudfonts.com.
Share Story :
Essential Integration Patterns for Dynamics 365 Using Azure Logic Apps
If you’ve worked on Dynamics 365 CRM projects, you know integration isn’t optional—it’s essential. Whether you’re connecting CRM with a legacy ERP, a cloud-based marketing tool, or a SharePoint document library, the way you architect your integrations can make or break performance and maintainability. Azure Logic Apps makes this easier with its low code interface but using the right pattern matters. In this post, I’ll Walk through seven integration patterns I’ve seen in real projects, explain where they work best, and share some lessons from the field. Whether you’re building real-time syncs, scheduled data pulls, or hybrid workflows using Azure functions, these patterns will help you design cleaner, smarter solutions. A Common Real-World Scenario Let’s say you’re asked to sync Project Tasks from Dynamics 365 to an external project management system. The sync needs to be quick, reliable, and avoid sending duplicate data. You might wonder: Without a clear integration pattern, you might end up with brittle flows that break silently or overload your system. Key Integration Patterns (With Real Use Cases) 1. Request-Response Pattern What it is: A Logic App that waits for a request (usually via HTTP), processes it, and sends back a response. Use Case: You’re building a web or mobile app that pulls data from CRM in real time—like showing a customer’s recent orders. How it works: Why use it: Key Considerations: 2. Fire-and-Forget Pattern What it is: CRM pushes data to a Logic App when something happens. The Logic App does the work—but no one waits for confirmation. Use Case: When a case is closed in CRM, you archive the data to SQL or notify another system via email. How it works: Why use it: Keep users moving—no delays. Great for logging, alerts, or downstream updates Key Considerations: Silent failures—make sure you’re logging errors or using retries 3. Scheduled Sync (Polling) What it is: A Logic App that runs on a fixed schedule and pulls new/updated records using filters. Use Case: Every 30 minutes, sync new Opportunities from CRM to SAP. How it works: Why use it: Key Considerations: 4. Event-Driven Pattern (Webhooks) What it is: CRM triggers a webhook (HTTP call) when something happens. A Logic App or Azure Function listens and acts. Use Case: When a Project Task is updated, push that data to another system like MS Project or Jira. How it works: Why use it: Key Considerations: 5. Queue-Based Pattern What it is: Messages are pushed to a queue (like Azure Service Bus), and Logic Apps process them asynchronously. Use Case: CRM pushes lead data to a queue, and Logic Apps handle them one by one to update different downstream systems (email marketing, analytics, etc.) How it works: Why use it: Key Considerations: 6. Blob-Driven Pattern (File-Based Integration) What it is: Logic App watches a Blob container or SFTP location for new files (CSV, Excel), parses them, and updates CRM. Use Case: An external system sends daily contact updates via CSV to a storage account. Logic App reads and applies updates to CRM. How it works: Why use it: Key Considerations: 7. Hybrid Pattern (Logic Apps + Azure Functions) What it is: Logic App does the orchestration, while Azure Function handles complex logic that’s hard to do with built-in connectors. Use Case: You need to calculate dynamic pricing or apply business rules before pushing data to ERP. How it works: Why use it: Key Considerations: Implementation Tips & Best Practices Area Recommendation Security Use managed identity, OAuth, and Key Vault for secrets Error Handling Use “Scope” + “Run After” for retries and graceful failure responses Idempotency Track processed IDs or timestamps to avoid duplicate processing Logging Push important logs to Application Insights or a centralized SQL log Scaling Prefer event/queue-based patterns for large volumes Monitoring Use Logic App’s run history + Azure Monitor + alerts for proactive detection Tools & Technologies Used Common Architectures You’ll often see combinations of these patterns in real-world systems. For example: To conclude, integration isn’t just about wiring up connectors, it’s about designing flows that are reliable, scalable, and easy to maintain. These seven patterns are ones I’ve personally used (and reused!) across projects. Pick the right one for your scenario, and you’ll save yourself and your team countless hours in debugging and rework. I hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfronts.com.
Share Story :
The Future of Financial Reporting: How SSRS in Dynamics 365 is Transforming Finance Teams
In Microsoft Dynamics 365 Finance and Operations (D365 F&O), reporting is a critical aspect of delivering insights, decision-making data, and compliance information. While standard reports are available out-of-the-box, many organizations require customized reporting tailored to specific business needs. This is where X++ and SSRS (SQL Server Reporting Services) come into play. In this blog, we’ll explore how reporting works in D365 F&O, the role of X++, and how developers can create powerful, customized reports using standard tools. Overview: Reporting in D365 F&O Dynamics 365 F&O offers multiple reporting options: Among these, SSRS reports with X++ (RDP) are the most common for developers who need to generate transaction-based, formatted reports—like invoices, purchase orders, and audit summaries. Key Components of an SSRS Report Using X++ To create a custom SSRS report using X++ in D365 F&O, you typically go through these components: Step-by-Step: Building a Report with X++ 1. Create a Temporary Table Create a temporary table that stores the data used for the report. Use InMemory or TempDB depending on your performance and persistence requirements. TmpCustReport tmpCustReport; // Example TempDB table 2. Build a Contract Class This class defines the parameters users will input when running the report. [DataContractAttribute]class CustReportContract{ private CustAccount custAccount; [DataMemberAttribute(“CustomerAccount”)] public CustAccount parmCustAccount(CustAccount _custAccount = custAccount) { custAccount = _custAccount; return custAccount; }} 3. Write a Report Data Provider (RDP) Class This is where you write the business logic and data extraction in X++. This class extends SRSReportDataProviderBase. [SRSReportParameterAttribute(classStr(CustReportContract))]class CustReportDP extends SRSReportDataProviderBase{ TmpCustReport tmpCustReport; public void processReport() { CustReportContract contract = this.parmDataContract(); CustAccount custAccount = contract.parmCustAccount(); while select * from CustTable where CustTable.AccountNum == custAccount { tmpCustReport.AccountNum = CustTable.AccountNum; tmpCustReport.Name = CustTable.Name; tmpCustReport.insert(); } } public TmpCustReport getTmpCustReport() { return tmpCustReport; }} 4. Design the Report in Visual Studio 5. Create Menu Items and Add to Navigation To allow users to access the report: Security Considerations Always create a new Privilege and assign it to Duty and Role if this report needs to be secured. This ensures proper compliance with security best practices. Best Practices To conclude, creating reports using X++ in Dynamics 365 Finance and Operations is a powerful way to deliver customized business documents and analytical reports. With the structured approach of Contract → RDP → SSRS, developers can build maintainable and scalable reporting solutions. Whether you’re generating a sales summary, customer ledger, or compliance documentation, understanding how to use X++ for reporting gives you full control over data and design. I hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfronts.com.
Share Story :
Automatically Update Lookup Fields in Dynamics 365 Using Power Automate: From Custom Tables to Standard Entities
Imagine this: you update a product’s purchase date in a registration record and—boom—a related case automatically gets refreshed with the accurate “Purchased From” lookup. Saves time, reduces errors, and keeps everything in sync without you lifting a finger. Let’s walk through how to make that happen using Power Automate. The goal: When a Product Registration’s cri_purchasedat field is changed, the system will retrieve the related “Purchased From” record and update any linked Case(s) with the appropriate lookup reference. Let’s break down the step-by-step process of how this is done in Power Automate. Step 1: Trigger the Flow When Purchase Date Changes Flow trigger: When a row is added, modified, or deleted (Dataverse) This setup ensures that our flow only fires when that specific date field is modified. Step 2: Pull in the “Purchased From” Record Next, use List rows on the “Purchased From” table with a FetchXML query. We’re searching for a record whose name matches the updated cri_purchasedat. Set Row Count to 1, since we expect only one match. 3. Identify Any Linked Case Records Add another List rows action, this time on the Cases table. We look for records where cri_productregistrationid equals the current product registration’s ID:We now use the List Rows action to fetch all related Case records tied to the updated Product Registration. This time we’re targeting the Cases table (which is internally incident in Dataverse) and using a FetchXML query to match records where cri_productregistrationid equals the current record being modified. This step is critical because it gives us the list of Case records we need to update, based on the link with the modified product registration. <fetch> <entity name=”incident”> <attribute name=”incidentid” /> <attribute name=”title” /> <attribute name=”cf_actualpurchasedfrom” /> <filter> <condition attribute=”cri_productregistrationid” operator=”eq” value=”@{triggerOutputs()?[‘body/cri_productregistrationid’]}” /> </filter> </entity></fetch> 5. Before updating anything, we add a Condition control to ensure that our previously fetched Purchased From record exists and is unique. Why? Because if there’s no match (or multiple matches), we don’t want to update the Cases blindly. We check if this length equals 1. If true → move forward with updates.If false → stop or handle the exception accordingly. To conclude, this kind of validation builds guardrails into your automation, making it more robust and preventing incorrect data from being applied across multiple records. After confirming a valid match, the flow loops through each related Case and updates the “Actual Purchased From” field with the correct value from the matched record, ensuring accurate linkage based on the latest update. Once this step runs, your staging automation is complete—with Cases now intelligently updated in real-time based on Product Registration changes. We hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfonts.com.
Share Story :
Mastering Multithreaded Batch Jobs in Dynamics 365 Finance & Operations
In the world of finance and operations, efficiency and accuracy are critical. Batch jobs play a vital role in automating repetitive tasks, processing large volumes of data, and ensuring seamless business operations. For organizations using Microsoft Dynamics 365 Finance and Operations (D365 F&O), the X++ programming language provides a powerful way to design, schedule, and execute batch jobs effectively. This blog explores how batch jobs function in D365 F&O, their importance in financial and operational workflows, and best practices for implementing them using X++. What Are Batch Jobs in D365 F&O? Batch jobs in Dynamics 365 Finance and Operations are automated processes that run in the background without user intervention. They are ideal for: Batch jobs help reduce manual effort, minimize errors, and improve efficiency. Example: A Simple X++ Batch Job class MyBatchJobTask extends RunBaseBatch { // Define variables str description; // Main execution logic public void run() { info(“Batch job started: ” + description); // Business logic here (e.g., update records, process transactions) ttsbegin; // Example: Update ledger entries LedgerJournalTable journalTable; journalTable.Description = description; journalTable.insert(); ttscommit; info(“Batch job completed successfully.”); } // Constructor public static MyBatchJobTask construct() { return new MyBatchJobTask(); } // Main method to run the job public static void main(Args _args) { MyBatchJobTask batchJob = MyBatchJobTask::construct(); batchJob.description = “End-of-Day Reconciliation”; // Run the batch job if (batchJob.prompt()) { batchJob.run(); } } } Key Benefits of Batch Jobs in Finance & Operations Best Practices for Batch Jobs in X++ – Example: x++ BatchHeader batchHeader = BatchHeader::construct(); batchHeader.addTask(this); batchHeader.addRuntimeTask(MyOtherBatchTask::construct(), 1); batchHeader.save(); 2. Implement Error Handling & Logging 3. Optimize Performance 4. Schedule Jobs Efficiently 5. Test in a Non-Production Environment Real-World Use Cases 1. Automated Invoice Posting 2. Inventory Revaluation 3. Bank Reconciliation Matching To conclude, batch jobs in Dynamics 365 Finance and Operations (using X++) remain a cornerstone of financial and operational automation. By following best practices—such as optimizing performance, implementing error handling, and leveraging batch groups—organizations can maximize efficiency while reducing manual effort. As Dynamics 365 Finance & Operations continues to evolve, integrating AI and cloud-based batch processing will further enhance speed and reliability. We hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfonts.com.