Security role of user after Business Unit Change
Introduction: Have you ever faced simple issue of security role after changing the business unit? Yes, you will. You will not be able to identify which security role was assign to a user whose Business unit has been changed. Description: This is a simple thing but if we have not noted down the security role of a user, we will not be able to identify the previous security role a user, as all the security roles gets removed. Solution: If audit history for user is enabled. You can easily identify the user who has what security role. So, as you can see in the above screen shot what security role this user has been assigned. Conclusion: Hope this help, while changing BU so, this help to remember the user security role.
Share Story :
Calendar Rule Entity not supported in Power BI
In Power BI, Dynamics 365 is connected using its Web API i.e [organization URI]/api/data/v9.0 Dynamics 365 Web API does not support GET Request for calendarrule entity; because of which Power BI cannot retrieve calendar rule entity details. You can verify by browsing to the URL: [organization URI]/api/data/v9.0/calendarrules Please refer to the screen capture below for the error details in browser. Also, you will not be able to load the calendar rule entity in Power BI. Below screen capture displays an error received in Power BI.
Share Story :
How to send Notes to the Customer from a Custom Page using an Action button in Dynamics NAV
Business central from Dynamics 365 is an ERP solution from Microsoft which is designed to understand your business needs and change it for better. Dynamics 365 business central development is a business management solution that is extremely easy to use and implement across several domains in your organization. Business central is the cloud version of the Dynamics NAV Platform. Which is being implemented by many companies across various industries in almost every part of the world. This cloud based ERP is designed for small and medium businesses which allows you to focus on your core business needs and strategies without having to invest on any infrastructure and installation. Implementation of Dynamic 365 business central to your organization helps you to connect your business and make smarter decisions. Introduction: The requirement is explained in the Scenario below: Scenario: A Custom page called Collection Module-Per User has details of Customers Transaction. This Collection Per User page is a List page. The User will select the line and Click on Notes. Notes will written and saved. The user will Click on the Action button Send Notes to Customer.TheNotes from this Custom page should be sent to standard page Customer (Page 18) Notes in Microsoft Dynamics NAV: Notes are like reminders or notification which is ideally used for Customers,Vendors or Items. Notes are saved in binary format in a field Note of Blob data type in the table Record Link (2000000068) Read notes : The “Record ID” of the record using Record Reference is used to filter the Record Link table and convert the data stored in the Note field in Record Link table to text. Write Notes: The “Record ID” of the record using Record Reference is used to filter the Record Link table and convert the text to bytes and store in the Note field Pre-requisites: Microsoft Dynamics NAV 2017 Steps: Functionality: 1. Select the line in the Custom page and click on Notes. Type in your Notes and Save it. 2. Click on Send Notes to Customer. 3. Open the Customer page and filter the Customer No to which Notes are sent and Open Notes. Customization: 1. Create an Action button Send Notes to Customer and create global variables as below image: 2. The Custom Table has primary key as No. so first GET the primary key and assign Customer No. to a variable Rec_CustNo ReadText: Rec_CF_CollectionModuleTempTable.GET(No); Rec_CustNo:=Rec_CF_CollectionModuleTempTable.CustNo; Set the Recfilter and use the Recorf reference to GETTABLE. Rec_CF_CollectionModuleTempTable.SETRECFILTER; CLEAR(RecRef); RecRef.GETTABLE(Rec_CF_CollectionModuleTempTable); RecRef.FINDFIRST; 3. SETRANGE with the Record Link’s Table Record ID and Record referrence RECORDID 4. Convert the blob field into text by using InStream and Use a BigText variable to read the Stream. RecordLink.RESET; RecordLink.SETCURRENTKEY(“Record ID”); RecordLink.SETRANGE(“Record ID”,RecRef.RECORDID); IF RecordLink.FINDFIRST THEN BEGIN RecordLink.CALCFIELDS(Note); IF RecordLink.Note.HASVALUE THEN BEGIN CLEAR(NoteText); RecordLink.Note.CREATEINSTREAM(Stream); NoteText.READ(Stream); NoteText.GETSUBTEXT(NoteText,2); END; END; Write Text: 1. GET the Customer No. of the Cuatomer Table and Use Record refernce to GETTABLE Customer. Use SetText function to write the text to bytes and store it in Note field in Record Link Customer.GET(Rec_CustNo); RecRef.GETTABLE(Customer); RecordLink.INIT; RecordLink.”Link ID”:=0; RecordLink.”Record ID”:=RecRef.RECORDID; RecordLink.URL1:=GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Page,PAGE::”Customer”); RecordLink.Type:=RecordLink.Type::Note; RecordLink.Created:=CURRENTDATETIME; RecordLink.”User ID”:=USERID; RecordLink.Company:=COMPANYNAME; RecordLink.Notify:=TRUE; SetText(NoteText,RecordLink); RecordLink.INSERT; The Complete Code : Send Notes to Customer – OnAction() Rec_CF_CollectionModuleTempTable.GET(No); Rec_CustNo:=Rec_CF_CollectionModuleTempTable.CustNo; //MESSAGE(‘%1 no’,Rec_CF_CollectionModuleTempTable.CustNo); Rec_CF_CollectionModuleTempTable.SETRECFILTER; CLEAR(RecRef); RecRef.GETTABLE(Rec_CF_CollectionModuleTempTable); RecRef.FINDFIRST; RecordLink.RESET; RecordLink.SETCURRENTKEY(“Record ID”); RecordLink.SETRANGE(“Record ID”,RecRef.RECORDID); IF RecordLink.FINDFIRST THEN BEGIN REPEAT RecordLink.CALCFIELDS(Note); IF RecordLink.Note.HASVALUE THEN BEGIN CLEAR(NoteText); RecordLink.Note.CREATEINSTREAM(Stream); NoteText.READ(Stream); NoteText.GETSUBTEXT(NoteText,2); MESSAGE(FORMAT(NoteText)); END; UNTIL RecordLink.NEXT=0; END; Customer.GET(Rec_CustNo); RecRef.GETTABLE(Customer); RecordLink.INIT; RecordLink.”Link ID”:=0; RecordLink.”Record ID”:=RecRef.RECORDID; RecordLink.URL1:=GETURL(CLIENTTYPE::Windows,COMPANYNAME,OBJECTTYPE::Page,PAGE::”Customer”); RecordLink.Type:=RecordLink.Type::Note; RecordLink.Created:=CURRENTDATETIME; RecordLink.”User ID”:=USERID; RecordLink.Company:=COMPANYNAME; RecordLink.Notify:=TRUE; SetText(NoteText,RecordLink); RecordLink.INSERT; PROCEDURE SetText@1000000002(NoteText@1000000000 : BigText;VAR RecordLink@1000000001 : Record 2000000068); VAR s@1000000002 : BigText; Ostr@1000000003 : OutStream; lf@1000000004 : Text; c1@1000000005 : Char; c2@1000000006 : Char; x@1000000007 : Integer; y@1000000008 : Integer; i@1000000009 : Integer; SystemUTF8Encoder@1000000011 : DotNet “‘mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’.System.Text.UTF8Encoding”; SystemByteArray@1000000010 : DotNet “‘mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’.System.Array”; BEGIN s := NoteText; SystemUTF8Encoder := SystemUTF8Encoder.UTF8Encoding; SystemByteArray := SystemUTF8Encoder.GetBytes(s); RecordLink.Note.CREATEOUTSTREAM(Ostr); x := SystemByteArray.Length DIV 128; IF x > 1 THEN y := SystemByteArray.Length – 128 * (x – 1) ELSE y := SystemByteArray.Length; c1 := y; Ostr.WRITE(c1); IF x > 0 THEN BEGIN c2 := x; Ostr.WRITE(c2); END; FOR i := 0 TO SystemByteArray.Length – 1 DO BEGIN c1 := SystemByteArray.GetValue(i); Ostr.WRITE(c1); END; END; LOCAL PROCEDURE HtmlEncode@20(InText@1000 : Text[1024]) : Text[1024]; VAR SystemWebHttpUtility@1001 : DotNet “‘System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’.System.Web.HttpUtility”; BEGIN SystemWebHttpUtility := SystemWebHttpUtility.HttpUtility; EXIT(SystemWebHttpUtility.HtmlEncode(InText)); END;
Share Story :
Xrm.Device.pickFile in D365 v9.0
Introduction: In this blog we will be showing an example to attach the uploaded files to notes using the Xrm.Device.pickFile function in unified Interface in D365 v9.0 Implementation: Step 1: In this example we will create a button on the Contacts entity and we write a JavaScript function to trigger on button click. In Ribbon Workbench after creating a button we create a command as shown below and add the command on the button. Step 2: On clicking on the Upload button a dialog box opens and we can select the file we want, this file will then be attached in the notes section of the particular record. The code is shown below. The name of the Note created, name of the attachment can be changed as required by modifying the code. Code: var crmCustomization = { PickFile: function () { Xrm.Device.pickFile().then( function (result) { var dataRecieved = result; var Content = dataRecieved[0].fileContent; var FileSize = dataRecieved[0].fileSize; var FileName = dataRecieved[0].fileName; var MimeType = dataRecieved[0].mimeType; var recordId = Xrm.Page.data.entity._entityId.guid; crmCustomization.UploadToNotes(FileName, MimeType, Content, recordId); }, function (error) { alert(error.message); }); }, UploadToNotes: function (FileName, MimeType, Content, recordId) { var note = Object(); note[“notetext”] = “New Attachment” note[“subject”] = “Uploaded File”; note[“filename”] = FileName; note[“mimetype”] = MimeType; note[“objectid_contact@odata.bind”] = “/contacts(” + recordId + “)”; note[“documentbody”] = Content; $.ajax({ type: “POST”, contentType: “application/json; charset=utf-8”, datatype: “json”, url: Xrm.Page.context.getClientUrl() + “/api/data/v9.0/annotations”, async: true, data: JSON.stringify(note), beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader(“Accept”, “application/json”); XMLHttpRequest.setRequestHeader(“OData-MaxVersion”, “4.0”); XMLHttpRequest.setRequestHeader(“OData-Version”, “4.0”); }, success: function (data, textStatus, XmlHttpRequest) { var result = data; alert(“File attached to Notes successfully”); }, error: function (XmlHttpRequest, textStatus, errorThrown) { Xrm.Utility.alertDialog(“Error: ” + textStatus + ” ” + errorThrown); } }); }, }; We can see after uploading the file the note is created with the attachment as shown below
Share Story :
How to Configure Alert Configuration in Microsoft Social Engagement
Introduction: This blog explains how to Configure Alert Configuration in Microsoft Social Engagement. Steps to be followed: Go to Message Center Click on + to create alert configuration. Enter the following details: Name: Give name to your alert. Alert Type: select the type of alert you want. Post alert/Trend alert Email recipients: Enter the email address of recipients to whom alert mail should go. Filters: Select filters to narrow the posts to the data set you want to work with. i.e. which posts will be received by recipients. Add Search Topic: You can also filter based on the following criteria. Example filtering based on source and Language: After configuring click on SAVE.Post alert in mail:
Share Story :
Customizing the Booking card information on Scheduled Board – D365 PSA/Field Service
In order to help your organization manage complex service management track assets and inventory, identify and dispatch resources, and manage service order Microsoft has given D365 field service which is an end to end solution that turns out to be an integral part of your day to day business. It provides customers with proactive updates and self service portals that helps is tracking of technicians hence giving customers a smooth and positive experience at every step. Detecting troubleshooting and resolving issues has been made possible through Dynamic 365 field service due to which a technician is dispatched only when it is necessary. A real time guidance is provided in order to build customer trust and improve resolution time which empowers technicians with a 360 degree view of the customers. Introduction: Sometimes, stock Schedule Board doesn’t quite do justice by default to your bookings and how Dispatchers see this information today. Out-of-the-box information on a Bookable Resource Booking looks like this – What if you want to modify this information and show what’s relevant to Dispatchers? Modifying the Schedule Board: You can modify the details of what you need to see on the booking by modifying/configuring some details as shown below: First, this is how the default Booking Template looks like – Double-click on the board you want to make changes to (Or, navigate to Tab Settings). As in picture 1 above, double-click on Initial Public View to open the Tab Settings area, then look for Schedule Types section and look for Work Order / Project entity (depending on which entity’s Bookings you want to effect.) In the Booking Template section, write this sample code which will show different information other than what comes out-of-the-box. Sample Code: Customer:{msdyn_msdyn_workorder_bookableresourcebooking_WorkOrder.msdyn_account_msdyn_workorder_ServiceAccount.name} WO Name: {msdyn_msdyn_workorder_bookableresourcebooking_WorkOrder.msdyn_name} Type: {msdyn_msdyn_workorder_bookableresourcebooking_WorkOrder.msdyn_workordertype} 5. Once finished, click Apply. The Schedule Board will refresh and you’ll see the updated information as shown below: And very simple, you’ve modified the Booking Template without much hassle or complex coding.
Share Story :
“$ undefined error” conflict issue in Dynamics 365 v9.0
Introduction: After upgrade of dynamics CRM 8.2 to 9.0 jQuery start breaking or you will receive $ undefined error. This blog will explain how to resolve this issue jQuery ($) is not defined in dynamics 365 sales. Description: Currently we have upgraded our dynamics CRM from 8.0 to 9.0. We had lots of customization. Looking at documentation of Microsoft. It seems that no script will break. Also, scripts are 8.0. dynamics CRM loads there internal JavaScript and start conflicting. Solution: After system upgrade developer needs to make sure that they are avoiding conflict between our JavaScript and System JavaScript. As you can see in below screen shot it shows that $ is not defined as it has more than 1 jQuery library loaded and it try to get the definition from another library which does not contains the definition of our library. As you can see in the below screen shot we have included no conflict script. This will resolve the issue of conflict and you will not receive the error related to conflict. Source: You can refer the below link for more information on conflict. https://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/
Share Story :
Creating Custom Fields
Introduction: This blog articles explains the ability to add custom fields is available in platform update 13 and later. Creating Custom Fields: Process for creating a custom field and placing that field on a form: Navigate to the form where the new field is needed. Click on Options and then Personalize this form Click Insert and then Field Select the region of the form where you want to expose the new field. After selection, the Insert fields dialog box will display a list of existing fields that can be inserted into the selected region of the form. Click the Create new field button above the list to initiate the process of creating a custom field. This will open the Create new field dialog box. Enter all the relevant details for the new field Click save and insert the new field Note that there is currently a limit of 20 custom fields per table.
Share Story :
Explore Business Central API through Postman using Basic Authentication
Introduction: In this article, we will walk through steps on how to authenticate Business Central API using Basic Authentication in Postman Pre-Requisite: Business Central account Business Central API Basic authentication in Postman: In Postman, make a GET request to Business Central base API URL. Base URL: https://api.businesscentral.dynamics.com/v1.0/api/beta For using Basic Authentication, we need to add domain as well. Domain URL: https://api.businesscentral.dynamics.com/v1.0/myusersdomain.com/api/beta In Business Central, generate Web Service Access Key for your user. Now in Postman authorization tab, select Basic Auth in Type. Provide Username and Web Service Access Key Click Send
Share Story :
Setup Positive Pay Export
Introduction: What is Positive Pay Export and Why it’s used? Positive Pay Export is a file that is given to the bank to verify the Cheques that have been printed. Whenever the company wants to issue any payment to Customer or a Vendor, it is done with the help of Payment Journals. After creation of Payment Journal lines, the check is printed through a Report. After the creation of the Check in the Bank Account there is an action called as PositivePayExport. This file is a text file and contains the information related to the Cheques printed and it is given to the bank. Every bank has their format which is used to automatically verify the Cheques that are being issued. Pre-requisites: Microsoft Dynamics NAV 2017 Demonstration: 1. Creating a Bank Account: To issue the cheque setting up Bank Account is mandatory. 2. Setting up the Data Exchange Definitions: Data Exchange Definition is used to set up the format for Positive Pay Export. The format for Export: Create a new Data Exchange Definition: Creating Column Definitions: Column Definition is the sequence in which the data is to be generated as per the format. Creating a Line Definitions: Line Definitions are used to map the System Fields to the fields in the column definitions. In the Line Definition, there are transformation rules that are used to modify the data that is exported into the format. Create a Line Definition and Select Field Mapping. There are some predefined Transformation Rules as well as new transformation Rules can be created. I’ve created the following transformation rules. I’ve shown the details of REPLACE transformation rule 3. Connecting the Data Exchange Definition with the Bank Account: To link the Positive Pay Export and the Bank Account, go to Bank Accounts and select the Positive Pay Export Code. 4. Creating Payment Journal Entries, Printing Cheques and Exporting the Positive Pay file. Creating Payment Journal Entry Printing the Check Report Positive Pay Export in Bank Account KEY4679 After Exporting Positive Pay Export the values generated in Positive Pay Export file are as follows. 000003296812746790000000012201805150000010200 000003296812746790000000013201805150000010512
