Dynamics 365 Archives - Page 53 of 90 - - Page 53

Category Archives: Dynamics 365

Actual vs Estimated hours myth

Introduction: All these years, I was calculating ‘Actuals’ as the billable hours on the project with the chargeable role. It was a myth that I continued to believe until I stumbled upon the solution that potentially demystifies this myth in PSA itself. Description: Below is how PSA helped to resolve this complex situation and this is how I cleared my understanding towards Actuals vs Estimated in PSA. In the project, I observed that the project was estimated to be a short project of 22 hours and the ‘Actuals’ were of 24 hours. Thereafter, I decided to dig deeper into it to understand the issue of these 2 additional hours, as this was not a big project and getting the additional 2 hours mistake would be very easy. To fix this, below are the actions that I followed: I accessed the Actuals from Project–> Project Name–> Actuals, as shown in the screen shot below. In the grid there, I sorted the “cost” aspect and calculated the number of hours which turned out to be 24. This was strange for me. Then I looked at the “Resource Role” column in the grid and found a 2-hour entry under the Non-Billable role. I pondered why these 2 hours Non-Billable hours are getting summed up in the actuals. But, if thought correctly, even the Non-Billable hours spent by the Resource is an Actual cost to the company. Conclusion: In this way, I could clear the air of confusion surrounding this and for my project budget calculations, I got another field created in the form named billable hours and calculated the sum of all the chargeable roles hours in that field. This now gave me all the three i. e Actuals, Estimated and billed hours in one go. Microsoft Dynamics 365 PSA is the next generation of cloud-based systems which provides an overview of business processes from Sales, Project Management, Customer Service and Fields Service.

Share Story :

How to Display Custom Entity in D365 Field Service Mobile App

D365 For Field Service provides everything you need from optimized work order scheduling to predictive maintenance. While you may have used Microsoft Dynamics 365 for Field service, very few may know about the actual steps required to display Custom Entity in D365 Field Service Mobile App. Let’s see how to display Entity in D365 Field Service Mobile App. 1. Find Entity by using Quick Find feature in Woodford. 2. Select Entity and Click Enable Button. 3. Enable Fields on Entity. Open Fields Section Select Fields to be exposed Click Save button 4. Create Form for Entity. Open Form Section on Entity. Click New Button for Form. Enter Name for Form and click OK. Select fields for display by clicking “Add Field” menu. Design form as per need by dragging fields from Fields Section and click Save & Close button. 5. Create View for Entity. Click View Section. Click New Button. Enter Name for View and Click Ok button. Design View as per need by dragging fields from Fields Explorer Section and click Save & Close button. 6. Display Entity in Home. Open Home tab. Drag Entity from Available Items Section to Home Section. Click Save button. 7. Publish the Solution. Conclusion: Hope the above description explains clearly about the Entity in D365 Field Service Mobile App. There are endless possibilities to what D365 Field service Mobile App can do and displaying entity is just one of them. D365 Field Service is one of the greatest applications that is capable of improving business capabilities and increase efficiency to the highest level.

Share Story :

Chargeability view substitute in PSA V3

Introduction: In recent deployments of Dynamics 365 Project Service Automation (PSA) V2 for customers, I’ve come to rely on the chargeability view as a way to modify a quotation and reach the appropriate pricing for a project. In V3, PSA has abandoned the chargeability view. But no need to worry, I will show you how to accomplish the same thing with customer pricing in PSA V3! Steps: Let’s take the example of a quotation I have prepared for the Rotary Club. They need CRM to be implemented. By default, the price list that gets tagged comes from the opportunity that we create or the one that we tag with the quotation. Let’s check the price of a developer in the default price list in the screenshot below. Here, the default price that it shows is $1,250. I built a quotation to the customer based on my default sales price list. Below is what it looks like. The quote now is $12,500 ($1250 x 10 quantity) for 10 hours of requirement gathering. After submitting the quotation to the customer, they came back with a request to reduce the pricing. Now how do we achieve this in V3 which lacks the chargeability view of V2? In V3 we will need to follow these steps: 1. Open the quote 2. Click on “Project Price Lists” as shown in the below image: 3. Click on Create Custom Pricing and PSA creates a custom price list for the quote where you can store the negotiated price like you used to do in chargeability view. 4. Open the price list by clicking on it. There you can navigate to role prices. Select the line on which you want to update the price and click on the edit button that comes up in the header of the grid. Then you can proceed to update the prices based on what you have negotiated. To post the updated prices, click on the activate button. The sequence is shown in the image below. Overall, the process tends to be pretty intuitive. 5. Navigate back the Quote line and follow one more final step: If you open the Quote line details to see if the prices have been updated, you will see that the prices are still the same as the old entries. In order to reflect the new updated roll prices, open the line, go to remove the roll, and re-enter the roll to fetch the updated price. The updated quote with the updated price looks like this: And with that, you have achieved the functionality. Conclusion: Microsoft Dynamics 365 for Project Service Automation enables companies to deliver projects more productively and profitably with higher client satisfaction. Even though PSA V3 has eliminated the chargeability view, it is still possible to access the view in a much simpler way.

Share Story :

Assign your D365 records but keep access as well

Introduction: At times, you are asked to assign certain CRM records to other users and you just have to do it as a part of the process. But let’s face it, you still wonder what might have happened to the record after you assigned it to them but your security roles won’t let you access those. There’s a general D365 setting for this too! You can share your D365 records with other but still retain rights to yourself so keep track of what happened with those later on System Settings: Navigate to Settings > Administration > System Settings In General tab, look for the Setting where it reads as ‘Set whether reassigned records are shared with the original owner’ (quite self-explanatory) Assign Record and check Share Rights: Now, assigning a records from Priyesh to John as shown below – Priyesh would still have rights to the record. Check the Share status of the same. The record will be owner by John but will be shared with Priyesh too. Hope this is helpful!

Share Story :

Delegated Resource error for making time entries in D365 PSA 2.x version

Have you been added as a Delegate for a fellow colleague but not able to Read, Create or Submit Time Entries on their behalf? Let us see what you are missing. Scenario: William Contoso wants to make Veronica Quek as his Delegate and let her enter time on his behalf. Let’s say William added Resource Veronica Quek as the Delegate above. Error for the Delegate Resource: Now, Veronica is attempting to do time entries for William by going to Time Entry Calendar view and switching the user to William. And when Veronica wants to enter time as William, she’d switch to the User on the Time Entries Calendar View like this – But, see this error and she don’t know what the issue might be. Even though she’s the Delegate! Missing Security Role: Yes, this is the first thing you should check. Veronica Quek is missing a Delegate Security Role in PSA to be able to make time entries on behalf of other users. Assign Delegate security role to the user to make them enter time on behalf of others. And thus, your Delegated User should be good to make time entries.

Share Story :

Create Item Requirement from Item Forecast using X++ in D365 Operations

Introduction: In this blog article, we will see how we can create Item Requirement on insertion of Item Forecast using code. Steps: Create Extension Class for ForecastSales Table that is Item Forecast and using CoC for post insert() method we will initialize Item Requirement. We will call a new class which is created in Step 2. public void insert() {     next insert();     SalesType salesType = SalesType::ItemReq;     CFSCreateItemReqFrmItemForecast createItemReq = new CFSCreateItemReqFrmItemForecast();     createItemReq.initParameters(this);     createItemReq.copyToSalesLine(SalesType); } Create a new class that will initialize values and insert record in Item Requirement form. class CFSCreateItemReqFrmItemForecast { ForecastSales forecastSales; }  In the new class create a method initParameter. This method will initialize ForecastSales object. void initParameters(ForecastSales _forecastSales) { forecastSales = _forecastSales; }  Create another method ‘copytoSalesLine’. It will validate the record and call other methods to copy values to SalesLine Table. public void copyToSalesLine(SalesType _salesType) { ProjTable projTable = ProjTable::find(forecastSales.ProjId); if (_salesType == SalesType::ItemReq) { if (!ProjStatusType::construct(projTable).validateWriteItemRequirement()) { throw error(“@SYS18447”); } } else { if (!ProjStatusType::construct(projTable).validateWriteSalesLine()) { throw error(“@SYS18447”); } } SalesLine salesLine = this.initializeSalesLine(_salesType, forecastSales, projTable); salesLine.createLine(false, // Validation false, // Init from SalesTable true, // Init from InventTable true, // Calc invent Qty false, // Search markup – copied from salesQuotationline false, // Search price – copied from salesQuotationline false, // Check reservation true); // Skip creditlimit check this.updateSalesLine(salesLine, forecastSales); salesLine.update(); } Create a new method ‘initializeSalesLine’. It is called from copyToSalesLine(). protected SalesLine initializeSalesLine(SalesType _salesType, ForecastSales _forecastSales, ProjTable _projTable) { SalesLine salesLine; salesLine.SalesType = _salesType; salesLine.initValue(); salesLine.setInventDimId(_forecastSales.InventDimId); salesLine.ItemId = _forecastSales.ItemId; salesLine.SalesQty = _forecastSales.SalesQty; salesLine.SalesUnit = _forecastSales.SalesUnitId; salesLine.ProjId = _forecastSales.ProjId; salesLine.ActivityNumber = _forecastSales.ActivityNumber; salesLine.CurrencyCode = _forecastSales.Currency; salesLine.initFromProjTable(_projTable, false); return salesLine; } Create a new method updateSalesLine(). It is called from copyToSalesLine() method. protected void updateSalesLine(SalesLine _salesLine, ForecastSales _forecastSales) {     _salesLine.DefaultDimension =       _salesLine.copyDimension(_forecastSales.DefaultDimension);     _salesLine.ProjLinePropertyId = _forecastSales.ProjLinePropertyId;     _salesLine.TaxGroup = _forecastSales.TaxGroupId;     _salesLine.TaxItemGroup = _forecastSales.TaxItemGroupId;     _salesLine.ProjCategoryId = _forecastSales.ProjCategoryId;     _salesLine.CostPrice = _forecastSales.CostPrice;     _salesLine.SalesPrice = _forecastSales.SalesPrice;     _salesLine.LinePercent = _forecastSales.DiscPercent;     _salesLine.LineDisc = _forecastSales.DiscAmount;     _salesLine.LineAmount = 0;     _salesLine.LineAmount = _salesLine.calcLineAmount();     SalesLineType_ItemReq::setSalesLineReceiptDate(_salesLine); }

Share Story :

Post Ledger Journal using X++ in D365 Operations

Introduction: In this blog article, we will see how we can post the journal by using code. How to do? Create a new method and write below code. In this code you declare object of Class ‘LedgerJournalCheckPost’. This class will use journal buffer and post it. public void postJournal(LedgerJournalTable ledgerJournalTable) { LedgerJournalCheckPost jourPost; jourPost = LedgerJournalCheckPost::newLedgerJournalTable(ledgerJournalTable, NoYes::Yes); jourPost.runOperation(); }

Share Story :

Send Custom Emails using SendGrids API

Introduction: In this blog we will demonstrate how to send custom emails using SendGrids API. Scenario: If we want to send custom emails to customers stored in Dynamics 365 with different email body for every customer based on their data stored in CRM, it is not possible to do so by using the normal Email Editor as it has some limitations while displaying dynamic content. One way of doing this is by creating a console app which will use SendGrids API to send out custom emails for every customer. Pre-Requisites: Visual Studio SendGrid Account Implementation: Step 1: For this demonstration we will see how to send out a mail to a single email. First we create a Console App in Visual Studio Step 2: Once the Project is created Right Click on the Project and select Manage Nuget Packages Browse to the latest Nuget packages and install SendGrid package Step 3: Next we have to create an API Key in SendGrid. Just give a name for a key and Click on Create Key which will generate a unique key. Store this key which will be used in the Code Step 4: Below is the Code to send email: using SendGrid; using SendGrid.Helpers.Mail; using System.Threading.Tasks; namespace SendGridConsoleApp { class Program { static void Main(string[] args) { string sendGridAPIKey = “EnterKeyHere”; Execute(sendGridAPIKey).Wait(); } static async Task Execute(string _apiKey) { var client = new SendGridClient(_apiKey); var from = new EmailAddress(“test@gmail.com”, “From UserName”); var subject = “MAIL Send Through SendGrid”; var to = new EmailAddress(“test@gmail.com”, “To UserName”); var plainTextContent = “Example PlainText”; var htmlContent = @”<!DOCTYPE html><html><head><style> table { border-collapse: collapse; width: 100%; } th, td { text-align: left; padding: 8px; } tr:nth-child(even){background-color: #f2f2f2 } th { background-color: #4CAF50; color: white; } </style></head><body><h2>Important Details</h2> <table><tr> <th>Firstname</th> <th>Lastname</th> <th>Email Address</th></tr> <tr><td>Peter</td><td>Griffin</td><td>pgriffin@gmail.com</td></tr> <tr><td>Lois</td><td>Griffin</td><td>Lois@gmail.com</td></tr><tr> <td>Joe</td><td>Swanson</td><td>joe@gmail.com</td> </tr><tr><td>Cleveland</td><td>Brown</td> <td>clev@gmail.com</td></tr></table></body></html>”; var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent); var response = await client.SendEmailAsync(msg); }}} Step 5: Once the Console App is run the email is send below shown is the sample of the Email sent While running this for multiple customers we can create different HTML body content for each customer and pass it to the CreateSingleEmail function.This approach can also be used to send bulk emails to customers.

Share Story :

Keep access to Assigned records in D365

Introduction: At times, you are asked to assign certain CRM records to other users and you just have to do it as a part of the process. But let’s face it, you still wonder what might have happened to the record after you assigned it to them but your security roles won’t let you access those. There’s a general D365 setting for this too! You can share your D365 records with other but still retain rights to yourself so keep track of what happened with those later on Setting: Navigate to Settings > Administration > System Settings In General tab, look for the Setting where it reads as ‘Set whether reassigned records are shared with the original owner’ (quite self-explanatory) Assign Record and check Share Rights: Now, assigning a records from Priyesh to John as shown below – Priyesh would still have rights to the record. Check the Share status of the same. The record will be owner by John but will be shared with Priyesh too.

Share Story :

Using MS Flow and D365 App For Outlook To Track Proposals and Win Opportunities Without Leaving Outlook

For every sales person, getting a signed contract from the client is a euphoric moment. You finally closed the deal, and everything seems right. But the process after winning the deal is cumbersome for many of us. This article documents how we made this process a lot less painful through MS Flow and the D365 App for Outlook. Hopefully you find it very useful as well. I will first walk you through my old process – Once I got the signed contract as a Word or PDF attachment in my email, I would download it and save it to my OneDrive under the respective client folder. I would then open D365, go to the opportunity, then browse to the Documents folder and create a new SharePoint document folder. Then I would click the upload button and browse to the document location the OneDrive folder on my computer and attach the proposal. I would then finally mark the opportunity as Won, which would send out internal emails to our Delivery Team (for Project creation), Accounts Team (for billing details) and our HR team (so they can keep an eye on recruitment needs). Here is what we achieved through the implementation of the new process using MS Flow and D365 App for Outlook – Once I got the signed contract in my email, I would track this email using the D365 App in Outlook. I would also set the regarding field as the Opportunity that this proposal is for. The above action would trigger an MS Flow that would do the following in near real time – It would check if the Opportunity already had a folder created and if not, it would first create the SharePoint document folder on the Opportunity. It would then upload the proposal to the above folder. It would remove the attachment from the tracked email (saving valuable space!) I would then open the Opportunity right from my D365 App for Outlook and mark it as Won. The step by step directions for setting up the MS Flow are documented in this blog article from Krishna Bhanushali from our D365 team – https://www.cloudfronts.com/move-attachments-from-tracked-email-to-sharepoint-using-microsoft-flow/. In conclusion, the above implementation has benefited us through – Significantly reduced number of steps post winning a deal. Time saved by not having to leave Outlook which is where most of us are spending our time. A better process that makes pipeline management easier for sales people, thus driving adoption. If you want to discuss your sales processes further or provide any feedback for improvement, I can be reached at ashah@cloudfronts.com.

Share Story :

SEARCH BLOGS:

FOLLOW CLOUDFRONTS BLOG :


Secured By miniOrange