Category Archives: Dynamics 365
Entering Multiple Opportunity Products at once in Dynamics 365 Sales
Very easy tweak but this will save loads of your time. One of the most important asks by Salespeople is perhaps this – “Add multiple Products on Opportunity at once!“ Here’s how you can do this – Classic Experience In current/classic experience, if you open Opportunity Lines and go on to add a Product as below – It’ll either open in a New form.This isn’t intuitive. You definitely need better experience. Enhanced Experience In System Settings, under Sales, you’ll need to enable the Adding Products to Yes. This will enable the enhanced experience. Now, when you click on Add Products in the Opportunity’s Product Line Items tab, you’ll see a Quick Create Form like form on which you can Add Multiple Products in one go. And then go to + Add products Now, a Quick Create form will appear on which you can select multiple products Now, when you click on any + sign in blue, you can directly enter what quantity you want to add. Also, if you go to the Selected section which indicated how many unique products you’ve added, you’ll be able to remove the added Products in case you don’t want them and then Delete the same if needed. Now, let’s say I have this finally and when I click on Add to Opportunity, they get added as Opportunity Lines And they appear as belowHope this helps!!
Share Story :
Mailbox Alerts Hide/Show behavior in Dynamics 365 CRM
At times, ever wondered what happened to the Mailbox? You ran some tests, you also got results, but the Alerts section is empty or not generating Alerts. Here’s what’s missing and how the behavior is – Turn on Mailbox Alerts In System Settings, you can turn on what type of Mailbox alerts should be shown. Navigate to Email and scroll down. You can then choose what type of info should be generated in Alerts area in a Mailbox. Error, Warning or Information. Behavior Now, the behavior is a little confusing. Here’s what it is – Any previously generated errors will show if the setting was On initially and was later on turned off down the line.In my example, the last error was generated on 1st July 2020 Now, I turned the setting Off And post that, if there are any new errors/messages, they won’t show up But, after I turn the settings back on New errors after that will start showing up again. Meaning, the duration in which the Alerts are off, those will not be generated. And the duration in which the Alerts are On, they will keep populating the Alerts section. Hope this was useful.
Share Story :
Sales return order line registration in D365FO and AX 2012
Introduction: Sales return order line registration in X++ Details: Consider SalesReturnOrderRegisterLine is the table where records are with SalesLine referenced. If we are required to register serialized items than salesReturnOrderRegisterLine.inventSerialId will be considered and if item referred with batch then salesReturnOrderRegisterLine.inventBatchId will be considered. public static void inventoryRegistration(SalesId _salesId) { SalesReturnOrderRegisterLine salesReturnOrderRegisterLine; SalesLine salesLine; TmpInventTransWMS tmpInventTransWMS; InventTransWMS_Register inventTransWMS_Register; InventDim inventDim; InventTrans inventTrans; VendPackingSlipTrans vendPackingSlipTransLoc; InventTransOrigin inventTransOrigin; while select salesReturnOrderRegisterLine where salesReturnOrderRegisterLine.SalesId == _salesId { salesLine = SalesReturnOrderRegister::updateDispositionCode(salesReturnOrderRegisterLine.InventTransId); inventTransWMS_Register = InventTransWMS_Register::newStandard(tmpInventTransWMS); select firstonly inventTrans where inventTrans.StatusReceipt == StatusReceipt::Ordered exists join inventTransOrigin where inventTransOrigin.RecId == inventTrans.InventTransOrigin && inventTransOrigin.InventTransId == salesLine.InventTransId && inventTransOrigin.ReferenceId == _salesId; tmpInventTransWMS.clear(); tmpInventTransWMS.initFromInventTrans(inventTrans); tmpInventTransWMS.InventQty = salesReturnOrderRegisterLine.SalesQty; tmpInventTransWMS.LineNum = int642int(salesLine.LineNum); inventDim = salesLine.inventDim(); inventDim.inventSerialId = salesReturnOrderRegisterLine.inventSerialId; inventDim.inventBatchId = salesReturnOrderRegisterLine.inventBatchId; tmpInventTransWMS.InventDimId = InventDim::findOrCreate(inventDim).inventDimId; tmpInventTransWMS.ItemId = salesLine.ItemId; inventTransWMS_Register.writeTmpInventTransWMS(tmpInventTransWMS, inventTrans, InventDim::find(tmpInventTransWMS.InventDimId)); if (!inventTransWMS_Register.updateInvent(salesLine)) { throw error(“Error during sales return order registration”); } } } Consider SalesReturnOrderRegister is the class which has below static methods public static SalesLine updateDispositionCode(InventTransId _inventTransId) { SalesLine salesLine = SalesLine::findInventTransId(_inventTransId, true); ReturnDispositionCode returnDispositionCode; SalesReturnOrderRegister::runPreReturnOrderRegisterLine(salesLine); salesLine.ReturnDispositionCodeId = returnDispositionCode.DispositionCodeId; salesLine.update(); return salesLine; } public static void runPreReturnOrderRegisterLine(SalesLine _salesLine) { InventTransOriginId salesLineInventTransOriginId; InventTransOriginId reservationLineInventTransOriginId; SalesLine reservationLine; ReturnDispositionCode returnDispositionCode; if (_salesLine.ReturnStatus == ReturnStatusLine::Awaiting) { if (!_salesLine.ReturnAllowReservation && _salesLine.isStocked()) { SalesLine::changeReturnOrderType(_salesLine.InventTransId); _salesLine = SalesLine::findInventTransId(_salesLine.InventTransId, true); } select firstOnly returnDispositionCode where returnDispositionCode.DispositionAction == DispositionAction::Credit; _salesLine.ReturnDispositionCodeId = returnDispositionCode.DispositionCodeId; _salesLine.update(); } else if (_salesLine.ReturnStatus == ReturnStatusLine::Registered) { select forupdate firstonly reservationLine where reservationLine.InventRefTransId == _salesLine.InventTransId; if (reservationLine || _salesLine.qtyMarked()) { if ((_salesLine.returnDispositionCode().DispositionAction == DispositionAction::ReplaceScrap || _salesLine.returnDispositionCode().DispositionAction == DispositionAction::ReturnToCust || _salesLine.returnDispositionCode().DispositionAction == DispositionAction::Scrap)) { if (reservationLine.SalesQty == reservationLine.RemainSalesPhysical) { reservationLineInventTransOriginId = InventTransOriginSalesLine::findInventTransOriginId(reservationLine.DataAreaId, reservationLine.InventTransId); salesLineInventTransOriginId = InventTransOriginSalesLine::findInventTransOriginId(_salesLine.DataAreaId, _salesLine.InventTransId); InventTransOrigin::deleteMarking(salesLineInventTransOriginId, reservationLineInventTransOriginId, -_salesLine.QtyOrdered); reservationLine.delete(); } } else { throw error(“@SYS332911”); } } } } Thanks for reading and stay connected with us for more updates!!! Jagdish Solanki | Senior Technical Consultant | CloudFronts Business Empowering Solutions Team “Solving Complex Business Challenges with Microsoft Dynamics 365 & Power Platform”
Share Story :
Factbox of workflow history on purchase order in D365FO
Introduction: In this blog, we will see how to create factbox of workflow history of purchase order in Microsoft Dynamics 365 Finance and Operations Details: Well, Factbox is a very pretty cool feature available from the earlier version AX 2012. It is very easy to achieve in Dynamics 365 as well. Here we will see how easy it is and steps for that. As shown in the above image, we will be going to create factbox for the “Tracking details list” Steps: Create the solution in Visual Studio and project for that. We’ll be required four objects mainly that is one display MenuItem, Table, Form (on which to display factbox), another Form (factbox). Reference attached below: 1. Table For displaying workflow history, we need to create the extension of table WorkflowTrackingStatusTable and create the normal relation and its relevant properties as 2. Factbox Now we are required to create the factbox of workflow history. For that we will use the effortless technique, where we will duplicate the standard form “WorkflowStatus” and will name as CFSPurchTableWorkflowHistoryFactBox (give name as per your naming convention standards) After duplicating and renaming the form, we need to change the pattern as “custom” After applying the custom pattern, delete the NavigationList which is not required in factbox, and do visible false ActionPane and PanelTab After that create the new Grid and assign the data source to it in the property and put all the required fields to show in factbox 3. Display MenuItem We will attach the created factbox form to the display menu item and relevant label “Workflow history” 4. Base form Base form we call it as where we will attach the factbox. Here it is purchase form. Go to Parm section and create a new part and give it a relevant name and its properties Properties: Data source: Attached data source with which workflow history is connected Data Source Relation: WorkflowTable.RelationName Name: Part name That’s it. Build the project and go the frontend and check the output how it looks like. Conclusion: It results as (we can scroll left and right to see all the tracking details list) Hurray, How pretty it looks like! In the above example, we have seen how we can develop factbox in Microsoft Dynamics 365 Finance and Operations. Thanks for reading and stay connected with us for more updates!!! Jagdish Solanki | Senior Technical Consultant | CloudFronts Business Empowering Solutions Team “Solving Complex Business Challenges with Microsoft Dynamics 365 & Power Platform”
Share Story :
Get/Read Selected Record Information From Main View Or A Sub-Grid using Ribbon Workbench In D365 CRM
There is a common application of getting selected records information while working with custom buttons using Ribbon Workbench. Use Case: We had a requirement, where we needed the information of the all selected records from the Main View and Sub-Grid of an entity. We can achieve in Ribbon Workbench. Steps: 1. The button on which we are customizing is named as “Submit”. 2. In the Command section, click on “Actions” -> “Javascript Action” to add Custom Javascript. Then click on “Add Parameter” -> Click on “Crm Parameter” -> then on SelectedControlSelecteItemReferences. SelectedControlSelecteItemReferences = grabs the information of all selected record from the view. 3. SelectedControlSelecteItemReferences will pass the information of all the selected records in my “selectedItems” variable passed to the method. 4. On clicking the Submit Button, the selected records information will be passed on to the Javascript Code. 5. On clicking the “Submit” button, it will pass the two selected records information to the method that the button is calling. 6. You can further read all the information from the Array and perform the actions that you want. Note: This can be done in Sub-grids of the forms also. Conclusion: Hope this blog helps to get/read the selected Information from the Main View or Sub-Grid
Share Story :
Message API – Message::AddAction() in D365FO Version 10.0.10 PU34 | New Feature
Introduction: From the version 10.0.10 Platform update 34, Microsoft has added a new feature Message::AddAction() which is shown in the message bar. Details: Message API associated with display or action menu items, which is visualized as a hyperlink/link button. It is linked with a single record at a time, called single action. In below taken example, we will show sales order is navigated to the form SalesTable from the message bar. For testing it, we’ll create the runnable class also know as job in AX 2012. class CFSMessageAPI { public static void main(Args _args) { SalesTable salesTable = SalesTable::find(‘SH-000121′); MenuItemMessageAction actionData = new MenuItemMessageAction(); actionData.MenuItemName(menuItemDisplayStr(SalesTable)); actionData.TableName(tableStr(SalesTable)); actionData.RecId(salesTable.RecId); str jsonData = FormJsonSerializer::serializeClass(actionData); int64 messageId = Message::AddAction(MessageSeverity::Informational, “Sales order details”, salesTable.customerName(), MessageActionType::DisplayMenuItem, jsonData); } } Let’s see how it works, In my case it’s showing Mitchell. Click on the link. After clicking on the action link, it is navigated to the sales order record form as shown in the above link. Hurray, How pretty feature is released !!! Conclusion: In above example, we have seen how Message API is routed to the record. Thanks for reading !!!
Share Story :
Email Parameters | SMTP Configurations for sending Test Mail from D365FO
Introduction: In this blog, we will see how to set up email parameters and SMTP configuration for sending test mail from Microsoft Dynamics 365 Finance and Operations. Details: Go to the Email Parameters by follow this path: System administration -> Setup -> Email -> Email Parameter. Another easiest way to find the email parameter in a quick manner, go to the search box and simply write email parameter as below shown screenshot Steps: 1. In the configuration tab, set up the SMTP as in shown below image Move SMTP in the right box named with ENABLED to enable 2. In SMTP settings tab, configure the below stuff: Outgoing mail server: smtp.office365.com SMTP port number: 587 Username: put the email id from which email should be sent Password: appropriate password of the email Specify if SSL is required: true 3. In Test mail tab: Email provider: SMTP Send to: Put the email to whom test mail should be sent In the final, click on the “Send test mail” and then sample mail will be sent to the respective email address. Conclusion: In the above blog, we have seen how to set up SMTP configuration to test “send email” functionality from the email parameter form. Thanks for reading !!!
Share Story :
Bill on Time, Get Paid on Time – Importance of the AR Report for a Professional Services Organization
In my last LinkedIn Post (Cash Position Report), I talked about the strategic importance of Cash on hand for a Professional Services Organization. In this post, I want to talk about the importance of the Overdue Accounts Receivable (AR) Report. As a Professional Services firm, most of our revenue comes from Project based delivery of Services. We have some top-line revenue from the subscription services we sell like Dynamics 365, but it’s not significant. So, our primary source of revenue is Services. We needed to ensure we bill on time, get paid on time. So we developed our Power BI AR Report as shown below – So let’s dive in! A few things to note in the above Report – It is a PowerBI Report embedded in our Leadership Team in our Microsoft Teams platform. We call it the PSA AR Report, as the reporting comes from our invoicing in Dynamics 365 PSA. Dynamics 365 PSA is our ‘single source of truth‘ for all our Project based billing. The bottom of the Report has two tabs – Services and Licensing/Commission Invoices. More on that shortly. Dynamics 365 PSA is our the single source of truth for all Customer Invoicing. We run all our Project based Services Invoicing from the Invoicing and Contract Milestone Schedule in Dynamics 365 PSA. This means our Allocations, Contract Milestones and our Time entries are always up-to-date, otherwise our invoicing schedule would be incorrect. This ensures good Project Management practices. Now PSA does not handle taxation, so you have to either setup your taxation customization or use an off the shelf tax add on that is available on the Microsoft AppSource. If none of these options are possible, then you can decide to create your invoices in your Accounting system and integrate those into Dynamics 365 PSA. We do that for our Licensing invoices to our Customers and integrate those from our QuickBooks Online Accounting system into Dynamics 365 PSA. We also ensure that invoices are only emailed to customers from Dynamics 365 so we can track these emails. Further, we update Invoice Statuses from Draft to Sent to Paid. Now let’s get into the Report. Basically, we have color coded our Report based on the following simple rules – Red for anything that is overdue by 30 days or more, yellow for anything that is between 1-30 days overdue and no color coding for current invoices. The visual impact of color coding can’t be emphasized enough. On the top left corner of the Report, we have an option to search by Customer, so we can quickly get all invoices for a specific customer in the AR Report. This becomes very useful when you want to just share a snapshot with your customer for overdue invoices. Handling Multiple Legal Entities: We have three legal entities – India, USA and Singapore. We have three separate QuickBooks Online Accounts for each legal entity, but we use a single Dynamics 365 CRM platform. We have made customizations on our Invoice entity to ensure we capture the correct legal entity. In the example below, you can see we classify our Invoices by legal entity in our Report – You can see there is column called ‘link’ in the above reports. Clicking on any invoice in this link directly takes us to the Invoice record in Dynamics 365. Overdue Reminders Alerts- We automated the Overdue Reminders so that our system automatically sends out a reminder for all overdue invoices every Monday. After all this effort, you still need to ensure regular and rigorous review of this report to ensure you can take action on overdue invoices. This is done through our scheduled Monday morning Management Status Meetings. The agenda for this meeting is recurring and hence set in advance, but this Management meeting always starts with AR Report Review. Our Accounts Manager is invited for the first 15 minutes and we go through all Overdue Invoices (especially the Red color coded ones!) and decide if we need to take further steps like setting up a meeting with the customer. If you are a small or mid sized Services organization, it is of utmost importance to get paid on time. By ensuring you have such a report and reviewing and planning action items for overdue invoices, you will run an efficient Services organization. In addition, there is another strategic benefit here – this report is like a Quality Check on your services. If your customer is paying on time and suddenly does not, your proactive action to talk with the customer can help you understand if there are any issues in your Services and you can take corrective action. Our PSA AR Report is available to our Management team (this includes our Delivery Heads and Practice Leads as well) through Microsoft Teams and they can view it any time they want, planning action items as needed. If it is hidden away only with the Accounts Team and available through some weekly PDF report, it is not efficient for your organization. This Report will help your organization achieve it’s Objective – ‘bill on time, get paid on time.’ If you are keen on understanding more about our Internal Systems that keep us running and growing, our Internal Systems page is a wonderful resource – https://www.cloudfronts.com/our-internal-systems/ or reach out to me at ashah@cloudfronts.com.
Share Story :
Server side/DB related issues,errors in D365 Commerce Retail POS
One of the issues with Dynamics 365 Retail is the way the errors are displayed to end users. I have come across many instances where it becomes very difficult to investigate and get to the root cause of an error message. The lack of clarity becomes an issue when you are not very familiar with the functional/technical aspects of HQ and POS. One of the many common errors I have seen is server side and database related issue as you can see in the below screen grab. Here the issue is with the loyalty card setup in payment methods. However the error message is not very clear in terms of where exactly the issue is. I have seen similar error once when there was an issue with printing the receipt. The issue was with the design itself. When we redesigned the receipts while adhering to proper layout the error went away. Hope this helps!
Share Story :
Create new aggregate measurement / Entity store in D365 Finance and Operation to be consumed in Power BI report in D365 Finance and Operations
In D365 there are several option to export/Import data like Data Entities, BYOD, Aggregate measurements/Entity store. In this blog we will learn How to create entity store in D365 Finance and operations. Aggregate Measurements/Entity Stores are use to create Power Bi reports with nearly Live data where user have option to set its recurrence that is how often you want to refresh entity store there is no need to manually refresh the data as per suggested Batch job will run for respective entity stores. You can also forcefully refresh data by pressing refresh button on entity store page. So lets start with development of aggregate measurements, aggregate dimensions. Add New aggregate measurements object to the project where we required Add required attributes Add required measures Add required dimensions Add dimensions where view of dimension and aggregate measurements are different Build The Model Refresh Entity store from D365 Finance and Operation Environment Verify that respected view is created for aggregate measurement Add New aggregate measurements object to the project where we required. In this step we need to right click on new item Now select aggregate measurement and name it as per requirement in our case its “CFSAggregateMeasrure” Now assign required views in table property of the aggregate measurement as follow In my case I have selected “InventOnHandByWarehouse” view. Add required attributes Now add required attribute by right click on Attributes and assign required field in attributes as follows Add required measures After adding attributes add dimensions same how we added other attributes as follows After adding measure assign required field to it and operation which you want to perform on that field (for example. :- count, Average, etc. ) Add required dimensions By default some of the dimensions are provided like company and date which are showed in screen shot. And assign required fields in relation of dimensions Add dimensions where view of dimension and aggregate measurements are different If dimensions needs different view we need to create new aggregate dimension as follows In my case name of aggregate dimension is “CFSAggregateDimension ” Now assign required view to dimension as follows. After this create new attributes and assign fields to that attributes as follows After adding new dimension attribute if required you can assign more than one field reference as follows After this step assign fields to the respective field reference as follows. Now select the respected attribute and select its usage property and change it as key which will make it as dimensional key which will be helpful while making relations. There are 3 options under usage property description of each as follows Key If you specify usage property as “key” system will define the key of the dimension using this attribute Parent If you specify usage property as “parent” system will parent child hierarchy with this field as parent level. Regular If you specify usage property as “Regular” ,this is an attribute without any special behavior and it is default value. After setting usage property attach this dimension to our aggregate measurement by dropping required aggregate measurement on dimension section of it. Now define its dimension attribute property as follows After this you need to make relationship among the views as follows Fact Dimension If you want to make desired aggregate dimension as fact dimension go to desired dimension in aggregate measurement and make set “is fact dimension” property to yes/No as follows Build The Model After this case build the model which is used for this development of project as follows Refresh Entity store from D365 Finance and Operation Environment After successful build go to environment page’s Entity store section using following navigation System administration >> setup >> entity store and refresh the desired entity On required entity please press the refresh button You can also set schedule to refresh this entity by selecting edit button and enable its automatic refresh toggle and the set its recurrence as follows Verify that respected view is created for aggregate measurement In final step go to your VM’s SSMS and look for Axdw database in which in view section look for views with your aggregate measurement and dimension and name as follows After select query you can see the data of that view Now your entity store is ready to consume by power bi reporting service. Thank You!
