Latest Microsoft Dynamics 365 Blogs | CloudFronts

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 :

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 :

Automated Email Reminders Based on Date Fields in Power Automate for Dynamics 365 CRM.

Managing reminders and deadlines can be tricky, especially when you’re juggling multiple tasks in Dynamics 365. But what if you could set up automatic email reminders based on specific dates? In this guide, I’ll show you how to use Power Automate with D365 CRM to send automatic email reminders when certain dates are entered, and follow up at 7, 14, 21, and 28-day intervals if another related date field isn’t filled. By the end of this post, you’ll learn how to create a simple workflow that keeps your team on track by sending timely reminders when needed. The Use-Case: Automatic Email Reminders for Unfilled Dates Imagine this: Your Project Manager fills in a date for a project milestone. But if the next milestone isn’t updated after a set period, your system will automatically send reminder emails to the right people. This saves your team from having to manually follow up and ensures that important dates are never overlooked. Here’s how you can set it up using Power Automate: Key Components of the Solution Follow the Power Automate step outlined below: Select the “When a row is added, modified or deleted” trigger from the Dataverse connector, set the Change Type to Modified, choose the Order Fulfillments table, set the Scope to Organization, specify the columns cf_submittalprotocolprocess and cf_initialshopdrawingssubmitted to trigger only on changes to those fields, and optionally use the Filter Rows field to apply additional conditions if needed. Click the ellipsis (three dots) on the top-right corner of the trigger card, select Settings, scroll to the Trigger Conditions section, and enter the following expression to ensure the flow only triggers when cf_initialshopdrawingssubmitted is not empty: Below is the condition that you need to add: @and(     not(empty(triggerOutputs()?[‘body/cf_initialshopdrawingssubmitted’])),     equals(triggerOutputs()?[‘body/cf_submittalprotocolprocess’],979570001) ) Add the “Get a row by ID” action from the Dataverse connector, set the Table Name to Opportunities, and use the dynamic value Opportunity (Value) for the Row ID to retrieve the corresponding Opportunity record related to the modified Order Fulfillment. Add the “Get a row by ID” action from the Dataverse connector, set the Table Name to Order Fulfillments, and use the dynamic value Order Fulfillment for the Row ID to retrieve full details of the modified Order Fulfillment record. Add a “Compose” action named Comments for Email, and provide a formatted list including Project Manager (Order Fulfillment), Opportunity Contact, Secondary Contact, a static email (e.g., testblog@gmail.com), and again Project Manager (Order Fulfillment) as an example. Add a “Filter array” action, set the From field to a coalesce(…) expression generating a list of participants, and in Basic Mode set the condition to Item is not equal to null to remove null entries. Use a coalesce(createArray(…)) expression to conditionally construct an array of activity parties based on field availability (Opportunity Contact, Secondary Contact, Owner ID, Project Manager), falling back to a default address (CRMAdmin@gmail.com) if the Project Manager is null. coalesce(     createArray(         if(             not(equals(outputs(‘Get_Opportunity_by_ID’)?[‘body/_cf_opportunitycontact_value’], null)),             json(concat(                 ‘{“participationtypemask”: 2,”partyid@odata.bind”: “contacts(‘, outputs(‘Get_Opportunity_by_ID’)?[‘body/_cf_opportunitycontact_value’], ‘)”}’             )),             null         ),         if(             not(equals(triggerOutputs()?[‘body/_ow_secondarycontact_value’], null)),             json(concat(                 ‘{“participationtypemask”: 2,”partyid@odata.bind”: “contacts(‘, triggerOutputs()?[‘body/_ow_secondarycontact_value’], ‘)”}’             )),             Null ),         if(             not(equals(triggerOutputs()?[‘body/_ownerid_value’], null)),             json(concat(                 ‘{“participationtypemask”: 3,”addressused”: “testblog@gmail.com”}’             )),             null         ),         json(concat(             ‘{“participationtypemask”: 4,”partyid@odata.bind”: “systemusers(‘, outputs(‘Getting_Order_Fulfillment_by_ID’)?[‘body/_cf_projectmanager_value’], ‘)”}’         )),         if(             not(equals(outputs(‘Getting_Order_Fulfillment_by_ID’)?[‘body/_cf_projectmanager_value’], null)),             json(concat(                 ‘{“participationtypemask”: 1,”partyid@odata.bind”: “systemusers(‘, outputs(‘Getting_Order_Fulfillment_by_ID’)?[‘body/_cf_projectmanager_value’], ‘)”}’             )),             json(concat(                 ‘{“participationtypemask”: 1,”addressused”: “CRMAdmin@gmail.com”}’             ))         )    )) Switch to Advanced Mode in the Filter array and use the expression @not(equals(item(), null)) for better control over null filtering of the dynamic participant list. In the step below, I used a “Compose” action to extract the Project Manager’s ID, which is then used in the filter array step. Below is the body of the Filter Array, which I’ve saved in a new Compose action named “Email Participants.” Add a “Compose” action to generate the email body using HTML formatting, apply an if() expression to dynamically insert the recipient’s name, and use concat() to list the required items for fabrication. Below is the expression I used to identify all the recipients who will be receiving the emails. if(   not(equals(outputs(‘Get_Opportunity_by_ID’)?[‘body/_cf_opportunitycontact_value@OData.Community.Display.V1.FormattedValue’], null)),    concat(‘<strong>’, outputs(‘Get_Opportunity_by_ID’)?[‘body/_cf_opportunitycontact_value@OData.Community.Display.V1.FormattedValue’], ‘</strong>’),    null After completing the previous steps, add a parallel branch with four parallel actions, each configured to send the email after a delay of 7, 14, 21, and 28 days, respectively. After introducing a 7-day delay, add a parallel branch that retrieves the corresponding Order Fulfillment record by ID and checks if both the Drawing Approval Date and Redline Issued Date fields updates have been made since the initial trigger Add the “Add a new row” action from the Dataverse connector, set the Table Name to Email Messages, populate the Activity Parties field using the dynamic output outputs(‘Email_Participants’), and map the Description field similarly with the appropriate output value containing the email body content. Set the Regarding (Order Fulfillments) field in the “Add a new row” action to the dynamic value Order Fulfilment (cf_orderfulfillment) to associate the email with the corresponding Order Fulfillment record. This is how the final power automate will look like Similarly, you can do for 14,21 and 28 days. Below is how the email would look like in CRM: The trigger will start when Initial shop drawings field contains the date field and Submittal/protocol process equals certain option. If both Redline Int Received and Drawing Approved Date fields remain empty after 7, 14, 21, and 28 days, CRM will automatically send a follow-up email on each of those days. This is how the email will look like. To conclude, setting up this automatic reminder system in Power Automate for D365 CRM will help your team stay on top of project milestones, reduce manual follow-ups, and make sure nothing gets overlooked. It’s a simple yet effective way to automate reminders and keep everyone informed without any extra effort. Hope this helps!!! 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 :

Streamlining Document Uploads for Entities by Sales Team Members Using the Mobile Application

Uploading documents to Dynamics 365 through mobile devices can enhance the flexibility and efficiency of your team members. In this blog, I’ll Walk you through a step-by-step procedure for uploading documents using the **Sales Team Member** app on mobile devices. This guide focuses on document upload via the mobile version of Dynamics 365, showcasing how easy it is to manage files on the go. Whether you’re a Sales Team Member or an administrator, this simple process will help you streamline document management using the mobile application. The Use-Case: Uploading Documents in Sales Team Member Imagine a scenario where your team needs to upload documents related to orders, opportunities, or leads while out in the field. Using the Sales Team Member app, the document upload process is streamlined and works seamlessly. Here’s how you can do it: Key Components of the Solution PowerApps Mobile Application: This app provides an easy-to-use interface for users to interact with Dynamics 365 on their mobile devices, including document uploads. Document Upload in Dynamics 365: The process allows users to upload files to records in various entities such as Order Fulfillment, Leads, Opportunities, etc. SharePoint Integration: After uploading the document via mobile, it is stored in SharePoint, where it is accessible both on the mobile device and the web interface. Step-by-Step Process Step 1: Install the Power Apps Application Navigate to your App Store or Play Store, install the Power Apps app, and open it. Step 2: Sign In Sign in with your work account by adding it to the app. Enter your credentials when prompted. Step 3: Access the Sales Team Member App Once logged in, find and select the Sales Team Member app to access your required entities and records. Step 4: Navigate to the Order Fulfillment Entity To upload a document, go to the Order Fulfillment entity. The upload process is the same across all entities. Step 5: Upload the Document In the Order Fulfillment record, tap the Related tab, then select Documents. Tap the ellipsis (three dots) beside the Document Associated Grid and choose Upload. Select Choose File to upload the document from your mobile storage. Step 6: After selecting Upload, you’ll see a prompt. Tap Choose File to access your Gallery/File Storage. Select your desired file, then tap OK. Step 7: View Uploaded Document Once uploaded, the document will display on your mobile app, and you can also view it on the web version. The document will be stored in SharePoint and accessible from either platform. Mobile version: Web version: On opening the file, the file opens SharePoint and displays the document. To encapsulate, with the above procedure, Sales Team Members can easily upload documents via their mobile devices in Dynamics 365, making it easier to manage and share important files from anywhere. This streamlined process not only boosts efficiency but also ensures your team stays connected, even when working remotely or on the move. Hope this helps!!! 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 :

How to Display the ‘+New’ Quote Button Only for System Administrators Using JavaScript and Ribbon Workbench in Dynamics 365 CRM

Uploading and managing quotes efficiently is crucial for Dynamics 365 CRM users. However, sometimes you may want to restrict certain buttons, such as the ‘+New’ Quote button, to only users with specific roles, like the “System Administrator.” In this guide, I’ll walk you through how to achieve this by leveraging JavaScript and the Ribbon Workbench tool in Dynamics 365. This method allows administrators to control button visibility based on user roles, ensuring that only users with the correct permissions can access sensitive functionality. The Use-Case: Restricting Access to the ‘+New’ Quote Button for Non-Administrators. Imagine a scenario where your organization needs to ensure that only users with a “System Administrator” role can create new quotes in Dynamics 365. This is crucial for maintaining control over who can initiate important processes within your CRM system. Using JavaScript and Ribbon Workbench, you can easily customize the UI to hide the ‘+New’ Quote button for non-administrators. Here’s how this use case can be implemented: In this scenario, your team wants to ensure that only system administrators have access to the “+New” button for creating quotes in the system. For non-administrators, the button will be hidden from both the homepage subgrid and the main quote tab to prevent unauthorized users from creating quotes. By using the Ribbon Workbench tool, a custom JavaScript function is created to check if a user has the “System Administrator” role. If they do, the “+New” button remains visible, and they can create a new quote. For all other users, the button is hidden. Key Components of the Solution 1. Ribbon Workbench: The Ribbon Workbench tool allows you to customize the Dynamics 365 ribbon, enabling you to create custom buttons and define their visibility and actions. It is used to create the new custom “+New” Quote button, which replaces the default button while maintaining system integrity. 2. JavaScript Customization:  Custom JavaScript is used to manage role-based access for the “+New” Quote button. The script checks the user’s role within Dynamics 365 to ensure that only users with the “System Administrator” role can view and use the button. This helps enforce security and restricts unauthorized users from creating new quotes. 3. Enable Rule for Button Visibility:   An Enable Rule is set to control the visibility of the custom “+New” Quote button based on the user’s role. It ensures that only users with the “System Administrator” role can see and use the button, while hiding it for other users. 4. Custom Button Action (Command): The command linked to the custom “+New” button triggers a custom action (JavaScript function) to open the quote form. This ensures that the action associated with the button aligns with the business needs and provides a seamless user experience for administrators. Step-by-Step Process Sign in to Dynamics 365 using your URL, such as abc.dynamics.com, and enter your credentials or login to make.powerapps.com Create a solution and add the web resource. Once it’s done login to ribbon workbench from XRM toolbox and connect to your organization. After logging in, it is recommended to create a new solution for Ribbon Workbench in Dynamics 365. Ensure that no forms, views, charts, or other entities are included, as Ribbon Workbench may fail to upload the solution with excessive data. Only include the Quote entity with no additional dependencies. Ensure the existing +New Quote button is hidden, as modifying Microsoft-standard buttons is not recommended. Instead, create a new custom button and implement the functionality for creating a new quote Form using custom JavaScript. I have provided the code for this functionality as well. Ensure that the existing +New button for quote would be hidden from the homepage Subgrid and the quotes main tab. Next step would be to create a enable rule. Enable rule is used to control the visibility and availability of a button or command of the button. Name the id of your choice but make sure to add the suffix Enable Rule. Here, un-customised is set to False. By setting isCore (or Un customized) to false, you’re indicating that the button or element is a custom component, not part of the out-of-the-box (core) solution provided by Microsoft. This helps differentiate custom actions from the default ones in the system. Below is the code for the new quote form create and user role-based code. Make sure to select the Function name properly. After setting the enable rule, go to the Commands section in Ribbon Workbench and rename the command. A command defines the action triggered by a button click. Since this is a new button, you’ll need to add the custom form opening code. Below is the function for creating the form. Final Steps: Once the command is added, don’t forget to add the Enable rule that you have created above. Once the command is added, make sure to add all the rules we wrote into the custom button. The image also needs to be added so that the icon can be visible. My custom +New icon looks like this. Testing: Once everything is done, make sure Publish the changes. You can now try to log in from the user that has no System administrator role. Once logged in, you can see that button is not visible. Button will be only visible to user that have system Administrator role. User having no System Administrator role. You can see below that there’s no +New button displayed. To conclude, by following this guide, you can efficiently control the visibility of the ‘+New’ Quote button in Dynamics 365 CRM, making it accessible only to users with the “System Administrator” role. This ensures better control over who can create quotes in the system while maintaining the flexibility of user roles. 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 :

Enhancing Dynamics 365 Forms with JavaScript: Real-Time Field Visibility and Multi-Select Handling

For businesses using Dynamics 365 CRM, creating a customized and automated user experience is essential for improving efficiency. JavaScript empowers developers to tailor form behavior based on user input or specific business logic, making your CRM highly adaptable.  Are you looking to automate form fields and improve usability in Dynamics 365 CRM? This guide will help you understand how to use JavaScript to dynamically control field visibility and behavior.  Research shows that 88% of users are more productive with tailored CRM systems. Automating workflows within Dynamics 365 CRM can reduce user errors by up to 70%, streamlining operations and enhancing user satisfaction.  Dynamics 365 CRM is highly customizable, and using JavaScript to enhance form behavior can significantly improve operational efficiency and user experience. Automating processes like field visibility and data handling minimizes manual intervention and ensures consistency.  At CloudFronts, we have extensive experience implementing Dynamics 365 CRM solutions, tailoring them with custom scripts to meet unique business needs. Through hands-on knowledge, we provide practical insights into achieving optimal CRM configurations.  Setting Up Your Dynamics 365 CRM Environment  – Go to the CRM main page, click Settings > Advanced Settings.  – Select Solutions and create a new solution.  – Provide a meaningful name and include the publisher’s name.  Develop a Web Resource  – After creating the solution, develop a web resource and ensure your code is included in it.  – After writing the code, upload the JavaScript and save it as a web resource in make.powerapps.com.  Write your JavaScript code  We’ll look at two key functions in the provided code: toggleExchangeReturnField and onChangeExhReturnItem. Let’s break them down.  Key JavaScript Functions in Action  Function 1: Toggling Fields Based on User Input  Toggling Fields Based on the Toggle Control  toggleExchangeReturnField: function(executionContext) {      var formContext = executionContext.getFormContext(); // Get the form context      var toggleField = formContext.getAttribute(“cri_rma”).getValue(); // Get the value of the toggle field      if (toggleField == true) {          formContext.getControl(“cf_exchangereturnitem”).setVisible(true); // Show the exchange return item field          formContext.getControl(“cri_rmatype”).setVisible(true); // Show the return type field      }      else {          formContext.getControl(“cf_exchangereturnitem”).setVisible(false); // Hide the exchange return item field          formContext.getControl(“cri_rmatype”).setVisible(false); // Hide the return type field      }  },  The `//` symbol in JavaScript is used to add comments within the code. Comments are helpful for explaining the logic or purpose of the code, making it easier for others (or even yourself) to understand later. However, including comments is optional and not mandatory.  Explanation  executionContext.getFormContext(): This function retrieves the form context, which provides access to the form’s controls and attributes.  formContext.getAttribute(“cri_rma”).getValue(): This gets the current value of the cri_rma field, which is assumed to be a toggle field (a boolean that indicates whether the user has opted for an exchange or return process).  formContext.getControl(“cf_exchangereturnitem”).setVisible(true): Based on the value of the cri_rma field, the cf_exchangereturnitem and cri_rmatype fields are either shown or hidden using the setVisible() method.  Purpose:  This function is designed to hide or show form fields dynamically based on the selection in the toggle field (cri_rma). If the toggle is set to true (i.e., an exchange/return is required), it displays the cf_exchangereturnitem and cri_rmatype fields. Otherwise, these fields are hidden.  Purpose: Dynamically show or hide fields based on a toggle field’s value.  How it works: Retrieves the toggle field’s value and sets the visibility of dependent fields accordingly.  Function 2: Handling Multi-Select Field Changes  Handling Changes in the Exchange Return Item Field  onChangeExhReturnItem: function(executionContext) {      var formContext = executionContext.getFormContext(); // Get the form context      var selectedoptions = formContext.getAttribute(‘cf_exchangereturnitem’)?.getSelectedOption(); // Get selected options from the multi-select field      var exchangeReturnProductDescription = “”;      if (selectedoptions != null) {          selectedoptions.forEach(ele => {              exchangeReturnProductDescription += ele.text + “,”; // Append the text of selected options          })          exchangeReturnProductDescription = exchangeReturnProductDescription.slice(0, -1); // Remove the last comma          formContext.getAttribute(‘cf_exchangereturnproduct’).setValue(exchangeReturnProductDescription); // Set the field value with selected options          formContext.data.save(); // Save the data      }      else {          formContext.getAttribute(‘cf_exchangereturnproduct’).setValue(null); // Reset the field if no options are selected      }  }   The `//` symbol in JavaScript is used to add comments within the code. Comments are helpful for explaining the logic or purpose of the code, making it easier for others (or even yourself) to understand later. However, including comments is optional and not mandatory.  Explanation  formContext.getAttribute(‘cf_exchangereturnitem’).getSelectedOption(): This retrieves the selected options from the multi-select field cf_exchangereturnitem. This field likely holds a list of items that the user can select for return or exchange.  exchangeReturnProductDescription += ele.text + “,”;: For each selected option, the code concatenates the text (name) of the item with a comma to build a string of product descriptions.  formContext.getAttribute(‘cf_exchangereturnproduct’).setValue(exchangeReturnProductDescription): The concatenated string of selected items is then assigned to the cf_exchangereturnproduct field. This could be a text field that lists the products selected for exchange or return.  formContext.data.save();: After updating the field, the form data is saved to ensure the changes are persisted.  formContext.getAttribute(‘cf_exchangereturnproduct’).setValue(null);: If no items are selected, the field value is reset to null.   The most crucial step is to add the lines of code within the field. Above all, we need to ensure that the function is added to the form properties. This process will be demonstrated below.  Purpose: Builds a comma-separated list of selected items and updates a designated field.  How it works: Gathers user selections and updates the field in real time, saving changes instantly.  Final Code for Execution  Binding the JavaScript Functions to Form Events  – Open the desired form in your solution at make.powerapps.com and select Entities > Forms.  – Add the JavaScript web resource to Form Properties.  – Under Form Libraries, click Add, select the JavaScript Web Resource you created earlier, and click OK.  Bind the toggleExchangeReturnField and onChangeExhReturnItem functions to relevant field events  – In the Form Editor, select the field (e.g., a text field or lookup) for which you want to trigger the OnChange event. – In the Field Properties window, go to the Events tab.  – Under OnChange, click Add to create a new event handler.  – Select the Library … Continue reading Enhancing Dynamics 365 Forms with JavaScript: Real-Time Field Visibility and Multi-Select Handling

Share Story :

Customizing the Opportunity Close Dialog Box in Dynamics 365 CRM

Introduction When managing Opportunities in Dynamics 365, the default dialog box for closing an Opportunity as either won or lost often lacks specific fields that may be essential for your business process. Attempting to close an Opportunity as either won or lost, you will encounter the following dialog box with the following options. Curious about customizing this dialog box with additional fields? In this blog, I’ll guide you through customizing your Opportunity Dialog Box when marking it has won or lost. Steps : – Sign in to Classic Dynamics 365 using your URL, such as abc.dynamics.com, and enter your credentials. – Create a Solution and include the out of the box called ‘Opportunity Close’ table/entity. – After adding the table/entity, navigate to the forms section and include the Quick Create form for ‘Opportunity Close’. – Include the fields you need in this Quick Create Form. You can also add your own custom fields. Here, I’ve included the out-of-the-box fields. After making changes, save and then publish. – After saving and publishing your changes, navigate to the model-driven app and choose the app where you wish to incorporate the entity. – When customizing your form in Dynamics 365 the classic way, ensure to remove and re-add the Quick Create form for Opportunity Close in the Model-Driven Apps section. – Ensure that your entity is added, and all forms are included as shown below. Once saved, remember to publish your changes. – Navigate to the Dynamics 365 page and refresh it 2-3 times. You will notice that when you attempt to close the Opportunity as won or lost, the default dialog box will no longer appear. Instead, the custom Quick Create form you created will be displayed. Conclusion Customizing the Opportunity Close dialog box in Dynamics 365 allows you to gather more relevant data at critical stages in the sales process. By following these steps, you can easily modify the default form and include additional fields that align with your organization’s needs. This not only improves data capture but also ensures a more streamlined experience for your sales team. Hopefully, this guide has helped you understand the customization process and enabled you to take advantage of Dynamics 365’s flexibility. We hope you found this article useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfronts.com

Share Story :

Automating Opportunity Timeline Updates for Owners and Sales Teams in Dynamics 365 using power automate

Posted On September 5, 2024 by Mithun Varghese Posted in Tagged in

What is Opportunity in D365 CRM? The opportunity table represents a potential sale to new or established customers. It helps you to forecast future business demands and sales revenues. You can create a new opportunity in Dynamics 365 for Customer Engagement to monitor an inquiry from your existing customer or convert a qualified lead into an opportunity. Opportunities are frequently used by salespeople to monitor the sales engagements they are presently working on. For More details, please follow the linkhttps://learn.microsoft.com/en-us/dynamics365/sales/developer/opportunity-entities What are Notes in Timeline Section of D365 CRM? The timeline makes the entire history of activities visible to app users. The timeline control is used to capture activities like notes, appointments, emails, phone calls, and tasks to ensure that all interactions with the related table are tracked and visible over time. Use the timeline to quickly catch up on all the latest activity details. For More details, please follow the link https://learn.microsoft.com/en-us/power-apps/maker/model-driven-apps/set-up-timeline-control Use Case: Using Power Automate, whenever the notes in the Opportunity’s Timeline are updated, an automated email will be sent to the Opportunity Owner and associated Sales Team in the timeline of that Opportunity. Steps: – Login to make.powerautomate.com with your CRM credentials and you will land onto this page. – Once you have landed into Power Automate Page, click on Create and selected Automated Cloud Flow – Set your Trigger as the below since the flow should start working only when the Notes are added in the timeline of the Opportunity. – I have also set a certain condition to this flow.  In other words, it checks whether there is a non-empty value in _objectid_value and that this value’s type is ‘opportunities’. The expression returns true if both requirements are satisfied and returns false otherwise. – The Expression is @and(not(empty(triggerOutputs()?[‘body/_objectid_value’])),    equals(triggerOutputs()?[‘body/_objectid_type’], ‘opportunities’)) – Then Initializing variable for Email Addresses – Initializing variable for Notes Table – Retrieving the Owner’s Email Address. This step is necessary to obtain the Opportunity Owner’s email address so that we can send the initial notification email to them. – List All Notes in the Opportunity. We use the List rows action to retrieve multiple Note records associated with the Opportunity. This allows us to access all the notes within the Opportunity’s timeline. – Get opportunity by ID. Here we are fetching the complete details of to access all the fields and data associated with the specific record. We are filtering out based on name and opportunity id. The row ID is typically obtained from another step in your flow, such as a “List rows” action or a trigger that provides record details. My record details where I need fetch details is from Opportunity.  – After retrieving the record, we need to fetch details of the associated Sales Team. This ensures that whenever a record is linked to the Sales Team, all members of the Sales Team receive an email notification. Thus, we are connecting the Sales Team to the Opportunity to include them in the notification process. The Fetch XML needs to be taken from Advanced Find in CRM. – In this step, we need to store the email address of the sender (i.e., the “From” user). We initialized this variable in step 3, so here we will save the GUID of the sender into that variable. – In this step, we need to save the email address of the recipient (i.e., the “To” user). We initialized this variable in step 3, so here we will store the GUID of the recipient into that variable. a participationtype mask of 2 indicates a specific participant role or type, i.e., sales team members associated with this Opportunity. – Next, we need to ensure that the content is structured within a table. As specified in step 6, I created a variable called `NotesTable` to hold this data. We will use this table to format the content into an HTML table for the email. – In this step, we are configuring the URL link for the Opportunity. Include the base URL of the environment and append the unique identifiers for both the Opportunity and the Topic field (which is a field within the Opportunity). – Sending an Outlook Email to the Opportunity Owner and Sales Team associated with the Opportunity. This Outlook mail works only if ‘Email Addresses Sales Team is Skipped’. – In Power Automate, adding a new row typically involves using actions provided by connectors such as Dataverse, SQL Server, SharePoint, or others, depending on where your data is stored. Here we have created an email body in this action. – In this step, we are using a bound action to send emails within the CRM system. Output: – Once, I click on Add Note, waiting 5-10 seconds and then you find the email within the timeline. Please note that the Email is tracked within CRM itself. – Below is the Opportunity which contains the Opportunity Owner, and the Sales team associated with that Opportunity. The Owner is CF Admin, and the Sales Team Members are Amit Prajapati, Ethan Rebello and Mithun Varghese. – The Opportunity Owner and Sales Team will receive notifications about the Notes in the timeline. All email interactions will be tracked in the Opportunity’s timeline, where you can also view all previous notes associated with this timeline. Conclusion: Automating bulk case resolution using Power Automate in Dynamics 365 CRM offers an efficient way to streamline your workflows and reduce manual errors. By setting up automated email notifications for updates in the Opportunity’s timeline, your sales team and opportunity owners stay informed, ensuring smoother communication and faster response times. We hope you found this article useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfronts.com

Share Story :

How to Fix the error ‘’isGlobal information provided True doesn’t match the value stored in DB False.” in D365 CRM.

Each time I attempt to export a solution from the source environment to another environment, I receive the following notification “isGlobal information provided True doesn’t match the value stored in DB False.” As a result, importing the solution into the destination environment becomes challenging for the individual. Whenever this kind of error appears, it has to do something with the fields on the form. This happens when you mistakenly make changes in the Production environment instead of making changes in the Developer environment or Vica Versa. Normally, the procedure is to make changes (e.g., Adding fields or any other customizations) in the Developer Environment and then export those changes to the Production Environment. Once those changes are imported into the Production environment, after cross-checking you realize many more fields are to be added. So we started to create and add fields in the Production environment instead of the Dev environment and that is how a mismatch of errors occurs with Fields and thus it gets difficult to export/import a solution in other environments.   To avoid this error, below is the blog you can refer to. Step 1: Log in to Power Apps using your credentials. Try to check both your source environment as well as Destination Environment. Step 2: In order to check the same, Go to Solutions and click on Default Solutions. Step 3: Go onto the table/Entity in which you are currently working. In my case, My table/Entity is Students. Step 4: Try to check the latest field which you have added. In my case, the name of the field is Courses Offered. Step 5: Click on Edit table column. Step 6: As you can see, my Destination environment (Production Environment) consists of the below field (Courses Offered), which is a Global option set Field. Step 7: Whereas my Source Environment (Developer Environment) has the same field name called “Courses Offered” which is an ‘Option Set field’. So, Delete the old option set field from this environment and try again to import this solution to the other environment. Step 8: The Difference between a Global option Set and a normal Option Set is that a global option set can be used globally for all entities/tables. But an option set field can only be used for that specific table. For eg If my entity/table name is “Students”. I can only use my option set for that specific entity. Step 9: In order to avoid the error, download that error log and try to open it via Excel and try to rectify all the fields from that Excel sheet via both environments. We hope you found this article useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfronts.com

Share Story :

How to create and add/attach a custom activity-type entity to an existing entity in Dynamics 365 CRM

Introduction Activities are tasks or sorts of homework that we as a team perform when contacting a customer for example making a phone call, making an appointment or calls, and so on. You can set the status of this activity to complete pending or in progress. For more details, please follow the link: Activity entities (Developer Guide for Dynamics 365 Customer Engagement … Steps to create and add/attach a custom activity entity in D365 CRM Step 1: Log in to the required D365 CRM environment using the URL https://home.dynamics.com. by providing a username and password and selecting your environment accordingly. Step 2: Once logging into your Dynamics 365 CRM, select the model-driven app you are currently working on. In my case, it’s Sales Team Member. Step 3: Once you are in your app, Click on the Settings icon and select [Advanced Settings]. Step 4: Click on Solutions. Create a solution or go to an existing solution. Click on Entities once inside the solution and Click on New. Once you name your entity don’t forget to tick on the [Define as an activity entity] checkbox. You can also check boxes on other options according to your need. Step 5: You can also notice the other checkboxes in Communication & Collaboration column, most of the options are non-editable.It’s because we are enabling it as an activity entity. Hence, all the checkboxes related to the Custom Activity Entity get non-editable. Step 6: Now we have to add the custom activity which we created. Click on the entity with which you are working. Then go onto the Forms inside that Entity in which you are working. Step 7: In Forms, once you have done your customizations, Add the activity timeline by enabling it during the entity creation on which you are currently working (checkbox those 2 columns and that’s how you can view the activities timeline in Form). Step 8: Once done with the above step, click on Activities & Notes and you can view the Activities & Notes Timeline. Step 9: Double tap on the Notes timeline and go to Activities. Step 10: Select the custom activity which you created. In my case, it was Order Review. Step 11: Click Ok. Save and Close and don’t forget to Publish the Customizations. Once this is done navigate to the Dynamics 365 CRM Main Form. As you Can the custom entity which we created has been added. Step 12: Click on ‘Order Review’ and add the details. Also, remember you can add many fields to this custom entity as per your requirements. How to do that is by going back to the Solution and navigating to this entity(Order Review). Create or add a new field and then add the Field to the Form. Save and Publish the Customizations. Hope this Helps.!!!

Share Story :

SEARCH BLOGS:

FOLLOW CLOUDFRONTS BLOG :


Secured By miniOrange