Blog Archives - Page 104 of 169 - - Page 104

Category Archives: Blog

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 :

How to initiate screen sharing in MS Teams without calling?

Introduction: Microsoft Teams is a cloud-based platform which includes business messaging, calling, video meetings and file sharing. A lot of people have been demanding for a feature on MS Teams user voice forum, which is to initiate screen sharing through Microsoft Teams without calling. So guys, it is finally here. Process: Now share your entire desktop or a specific window from a private chat session and you can even let the other to take control to team up and collaborate. For sharing your screen during a private chat, you just need to click the open share tray icon on the top right of the screen and pick one of the available window options. (see below image) After clicking the share tray icon, you can choose the windows to share. The user on the other side is required to accept the session. A user can also request for the controls by clicking on the Request Control button. (see below image) Conclusion: That’s it, folks. You can access the screen sharing right away. Microsoft Teams is continuously undergoing updates and this newly rolled out features will create wonders while communicating with partners, colleagues, and clients and help to resolve key issues more effectively.

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 :

Expand & Collapse Matrix Row Headers in Power BI

Posted On November 14, 2018 by Admin Posted in

There are two ways you can expand/collapse row headers in matrix visualization. First one is through the Right-click menu. You will see options to expand/Collapse the specific record or row you clicked on, entire level or all down to the very last level of the hierarchy. In exactly same way you can collapse row headers as well. Right- Click -> Expand/Collapse Also, you can add +/- buttons to the row headers through the formatting pane under the row headers card. By default, the icons will match the formatting of the row header. Additionally, you can format it with the color and size. Once you have turned on the icons, it will work similarly to the icons of drill-down.

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 :

How to search for a Content in Office 365?

Introduction: You can use the Content Search eDiscovery tool in the Office 365 Security & Compliance Center to search for items such as email, documents, and instant messaging conversations in your Office 365 organization. You can search for – Exchange Online Mailboxes SharePoint Online and OneDrive for Business sites Microsoft Teams Office 365 Groups Create a Search: Go to Office 365 Security & Compliance. In the left pane, click Search & Investigation > Content Search. Click New +, to create a new search. Provide a name for the Search (name must be unique). Choose the content locations that you need to search. You can search mailboxes, sites and public folders in the same search. Search everywhere – Select this option to search content from all location in your Office 365 organization. You can choose all mailboxes (including mailboxes for all Office 365 Groups and MS Teams), all SharePoint and OneDrive for Business sites (this includes sites for all Office 365 Groups and MS Teams) and Public Folders. Custom location search – Select this option to select mailboxes and sites that you want to search. After choosing mailboxes and Sites, click Next. On the New Search page, you can add keywords and conditions to add a search query. You can specify keywords, message properties such as sent and received dates, or document properties such as file names or the date that a document was last changed. You can use a more complex query that use a Boolean operator, such as AND, OR, NOT, NEAR, or ONEAR. You can also search for sensitive information (such as social security numbers) in documents, or search for documents that have been shared externally. Under Conditions, add conditions to a search query to narrow a search and return a more refined set of results. Click Search to save the search settings and start the search. The search is started. When the search is completed, the following information is displayed in the details pane. Preview Search Results –After a search is successfully run, you can preview search results by click Preview Search results (see below image). Result preview will look like this (see below image) Export Search results – After a search is successfully run, you can export the search results to a local computer. When you export email results, they’re downloaded to your computer as PST files. After generating the report, the report can be downloaded, click on Download exported results. A new window will open, click Download Results (see below image) If you are prompted to install the Microsoft O365 eDiscovery Export tool, click install. In the eDiscovery Export Tool, paste the export key from the download export results window. Click Browse to specify the location where you want to download the search result files. Click Start to download the search results to your computer. Conclusion: In this way, you can search for your contents in Office 365. You can quickly view the statistics. Preview the search results or download the results to a local computer.

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 :

SEARCH BLOGS:

FOLLOW CLOUDFRONTS BLOG :


Secured By miniOrange