Latest Microsoft Dynamics 365 Blogs | CloudFronts - Page 109

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 :

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 :

To create a Customer Record from Microsoft PowerApps to Microsoft Dynamics 365 Business Central and vice-versa.

Introduction: This blog explains how to create an application in  Canvas PowerApps that can integrate the data from the App to Business Central and vice-versa.  I have created an app that on creation of a Customer record will create the record in Business Central and the same in opposite direction. Pre-requisites: Microsoft PowerApps Microsoft Dynamics 365 Business Central Steps: 1. Go to PowerApps, select create an app from blank and select the Business Central connection of your tenant. 2. Select the Company and the Customer table. 3. The basic design of the screen is created where you can view the list of customers, you can also edit the view as per your requirements. 4. The ‘+’ sign on the screen is used to add a new customer record. Logic behind the button is: NewForm(EditForm1);Navigate(EditScreen1, ScreenTransition.None) 5. Add the Customer Details and click on the submit button to submit the record or cancel button to go back to the main screen. Logic for submit: SubmitForm(EditForm1) Logic for cancel: ResetForm(EditForm1);Back() 6. The Customer record is created both in the PowerApps as well as Business Central. 7. Now create a new Customer Record in Business Central. 8. Now go to Powerapps, on the main screen click on the Refresh button the customer record will be created in the list. Logic for Refresh: Refresh(customers)

Share Story :

SEARCH BLOGS:

FOLLOW CLOUDFRONTS BLOG :


Secured By miniOrange