Dynamics 365 Archives - Page 72 of 88 - - Page 72

Category Archives: Dynamics 365

AX 2012 R3 Commerce Data Exchange Service: Real Time Service Installation

Posted On July 27, 2017 by Admin Posted in

Introduction: Real-time Service is an integrated service that provides real-time communication between Microsoft Dynamics AX and retail channels. Real-time Service enables individual point of sale (POS) computers and online stores to retrieve certain data from Microsoft Dynamics AX in real time. Redeem loyalty points Issue and redeem credit memos Create and update customer records Create, update, and complete sales orders Receive inventory against a purchase order or transfer order Perform inventory counts In AX 2012 R3, Real-time Service is a Windows Communication Foundation (WCF) service that must be installed on a website in Internet Information Services (IIS). 1. Run AX 2012 R3 Setup. 2. Select Microsoft Dynamics AX Components. 3. Select “I accept licence Terms” and click on Next button. 4. Click on Add or modify components. And click on next button. 5. In Add or Modify Component list. Select “Real time Service” under Commerce Data Exchange. And Click on Next button. 6. Setup will check prerequisite components for Real Time Service. (Note: – Make sure that there should not be any error). Once its Done , click on next button. 7. In Below Screen you have to configure below parameter. ( this is most IMP Steps) Application name – The name of the web application that hosts Real-time Service. Website name – The name of the website that hosts Real-time Service. App pool name – The name of the application pool that Real-time Service runs in. User name and Password – The credentials for the application pool identity. HTTPS port – The port on which Real-time Service receives secure HTTP requests. You can specify any available port. Verify that the port is open in Windows Firewall. TCP port – The port on which Real-time Service receives TCP requests. You can specify any available port. Verify that the port is open in Windows Firewall. SSL certificate thumbprint – The thumbprint for your Secure Sockets Layer (SSL) encryption certificate. You must obtain a valid, registered certificate from a provider. 8. Setup will re-validate the Prerequisite components as per configuration. Once it’s Done click on Next button. 9. Real time service is now ready to install. Click on Install button to start the installation. 10. Once Installation is done below screen will appear. 11. After this close all the window. And go services. In Services you can able to see Microsoft Dynamics AX Commerce Data Exchange : Real-time Service.  

Share Story :

CRM Tip: Issue with checking Security role GUID of custom security roles

Problem Statement: We often encounter a scenario where we need to perform some operations based on the fact if the user has a particular security role. We also know that the GUID of a custom security role created by us remains the same, even if is installed in some other environment. Consider the following scenario: I want to check if the logged in User has “Custom View Only Role”, I want to hide some fields on the form. Also, the role – “Custom View Only Role” is created by me. Common Solution: For the above problem, this is how a developer would proceed: Get the GUID of the security role, and hardcode it for checking. Get all the User roles of the logged in user. Iterate on all the roles and check if any of the roles from the user roles match the GUID of the “Custom View Only Role”. If any match, then returns true and based on this perform the required operation – in this case, hide some fields. This is how the code would look: function CheckUserRole() {     // GUID of the custom role that you created.     var CustomViewOnlyRoleId = “XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX”;     // Get all the roles of the Logged in User.     var currentUserRoles = Xrm.Page.context.getUserRoles();     for (var i = 0; i < currentUserRoles.length; i++) {         var userRoleId = currentUserRoles[i];         if (userRoleId.toLowerCase() == CustomViewOnlyRoleId.toLowerCase()) {             // Return true if the Role matches             return true;         }     }     return false; } Issues with the above Solution This will only work if the D365/ CRM Organization has only root Business Unit and no child business units It will fail if there are any child BUs and the logged in user is in any of the Child BU and also has the “Custom View Only Role”. In this case, the function will return false, even though the User had the role Why this happens: This happens because, in CRM, a copy of all the roles is created for each BU. So the GUID of all the same role within Different BU will be different. Alternative Solution: We can check with Role name instead of GUID, and tweak the above code. But checking with Role names is not a good practice since the role names can be changed in the future. Better Solution Since the issue is with copy of the same role for different BU, we can solve this by leveraging the “Parent root role id” There is a field on the Role entity called Parent Root Role. This stores the reference of the Root role on all the copies of each BU role. So even though the role ids will not be same, the Parent Root Role Id will be same for all the copies. Below is the code to leverage the parent role id and check if the logged in user has the role using the Role GUID. You can also find this code in My Github function CheckUserRole() {     // GUID of the custom role that you created.     var CustomViewOnlyRoleId = “XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX”;     var returnValue = false;     // Get all the roles of the Logged in User.     var currentUserRoles = Xrm.Page.context.getUserRoles();     // Get the Parent roles for each, and then compare.     GetParentRoles(currentUserRoles, function (result) {         for (var i = 0; i < result.value.length; i++) {             if (result.value[i][“_parentrootroleid_value”].toLowerCase() == CustomViewOnlyRoleId.toLowerCase())                 returnValue = true;                    }     }, function (error) {         alert(error);     }     );     return returnValue; } function GetParentRoles(roles, successCallback, errorCallback) {     var fetchXml = ”;     fetchXml += ‘<fetch version=”1.0″ output-format=”xml-platform” mapping=”logical” distinct=”false”>’;     fetchXml += ‘<entity name=”role”>’;     fetchXml += ‘   <attribute name=”name” />’;     fetchXml += ‘   <attribute name=”businessunitid” />’;     fetchXml += ‘   <attribute name=”roleid” />’;     fetchXml += ‘   <attribute name=”parentrootroleid” />’;     fetchXml += ‘   <order attribute=”name” descending=”false” />’;     fetchXml += ‘   <filter type=”or”>’;     for (var cnt = 0; cnt < roles.length; cnt++) {         fetchXml += ‘       <condition attribute=”roleid” operator=”eq” value=”{‘ + roles[cnt] + ‘}” />’;     }     fetchXml += ‘   </filter>’;     fetchXml += ‘</entity>’;     fetchXml += ‘</fetch > ‘;     MK.WebAPI.Retrieve(“roles”, null, fetchXml, null, successCallback, errorCallback, true, null, null, false); } In case of queries or feedback, please comment on the post below.

Share Story :

Generic Type Bookable Resource on Schedule Board in D365 Field Service

Introduction: This blog explains how to filter Generic Type Bookable Resource on Schedule Board. Pre-requisite: Latest Field Service Solution of D365. Procedure: 1. Open Schedule Board, Field Service → Schedule Board.   As highlighted below there is no option to select Generic Type Bookable Resource in Filter Section. 2. Click Options → Selected Resources 3. Select Generic in Resource Types drop down as shown below. 4. Select Bookable Resources as per need. 5. Bookable Resource are shown in Schedule Board of type Generic. Conclusion: This blog explains how to filter Generic Type Bookable Resource on Schedule Board.  

Share Story :

CRM Tip: How to Check Security Role in Plugins – Correct way

Problem Statement: We often have requirements to perform some action based on certain security role. For ex., we only want System Administrator to delete particular record, and no one else should delete irrespective of their security access. There are many ways to achieve this, but many of the times the solution is not foolproof Incorrect/ Misguided Solution: Generally developers achieve the above requirement by using plugin with below steps: Get User ID from the plugin context. Get all the roles of the user Loop and check if any of the role name is “System Administrator”. If Step 3 is true, then allow delete, else restrict delete This solution works most of the time, but this won’t work if the client is using any other language than English in CRM. Since role names are customized based on language, the above plugin won’t find any user with the System Administrator name of the role. Solution: For language proof solution, we must use the role template lookup on the Role entity. For OOB security roles, there is a role template GUID which does not change based on environment. For System Administrator, the Role Template ID is “627090FF-40A3-4053-8790-584EDC5BE201” The following code will get the System Administrator properly. You can find the sample plugin on my GitHub as well. public bool HasAdminRole(Guid systemUserId) {             Guid AdminRoleTemplateId = new Guid(“627090FF-40A3-4053-8790-584EDC5BE201”);             QueryExpression query = new QueryExpression(“role”);             query.Criteria.AddCondition(“roletemplateid”, ConditionOperator.Equal, AdminRoleTemplateId);             LinkEntity link = query.AddLink(“systemuserroles”, “roleid”, “roleid”);             link.LinkCriteria.AddCondition(“systemuserid”, ConditionOperator.Equal, systemUserId);             return service.RetrieveMultiple(query).Entities.Count > 0; } Note: This can be done for other OOB roles as well like Sales Manager, Sales Person, etc. For custom roles, the role template Id is empty. If the custom roles are created by you, then you can used the Role Id (Unique GUID of Role entity) for querying instead of names.

Share Story :

Invoking Web Service/Rest API from D365 FOE

In this blog article, we will see how we can invoke web service call for a third-party application in Dynamics 365 for Finance and Operations, Enterprise Edition using X++. In this blog we will Consider Service Order Entity as source passing Service Order values to a third party application on Service Order creation using web service endpoint url. Create a SMAServiceOrderTable Table post Insert event. /// <summary> /// Post insert passing Service Order values and URL to invoke Web service /// </summary> /// <param name=”sender”></param> /// <param name=”e”></param> [DataEventHandler(tableStr(SMAServiceOrderTable), DataEventType::Inserted)] public static void SMAServiceOrderTable_onInserted(Common sender, DataEventArgs e) {         SMAServiceOrderTable serviceOrderTable;         serviceOrdertable = sender as SMAServiceOrderTable;         String15 SOstatus = enum2Str(serviceOrderTable.Progress);                 //parmvalue stores Service Order values in container   container parmvalue = [“‘CustAccount’:'”+serviceOrderTable.CustAccount+”‘”,”‘ServiceOrderId’:'”+serviceOrderTable.ServiceOrderId+”‘”,”‘CurrencyCode’:’US Dollar'”,”‘SOStatus’:'”+SOstatus+”‘”,”‘ProjId’:'”+serviceOrderTable.ProjId+”‘”,”‘CFSCRMWorkOrderNo’:'”+serviceOrderTable.CFSCRMWorkOrderNo+”‘”]; new WebService().sendrecord(“<<webservice url>>”,parmvalue); } Create a class which calls the web service. Class WebService { public void sendrecord(String255 endpointurl,container arryI)     {         str                             url;         str                             postData;         str                             returnValue;         System.Net.HttpWebRequest       request;         System.Net.HttpWebResponse      response;         System.Byte[]                   byteArray;         System.IO.Stream                dataStream;         System.IO.StreamReader          streamReader;         System.Net.ServicePoint         servicePoint;         System.Net.ServicePointManager  servicePointManager;         CLRObject                       clrObj;         System.Text.Encoding            utf8;         Counter  countCounter;         ;         //generate postdata in json format         postData = “{“;         for(countCounter= 1;countCounter<= conlen(arryI);countCounter++)         {             postData = postData+conpeek(arryI,countCounter)+”,”;                    info(strFmt(“%1″,postData));         }         postData = postData+”}”;                new InteropPermission(InteropKind::ClrInterop).assert();         url = endpointurl;         clrObj = System.Net.WebRequest::Create(url);    System.Net.ServicePointManager::set_Expect100Continue(false);         request = clrObj;         request.set_Method(“POST”);         utf8 = System.Text.Encoding::get_UTF8();         byteArray = utf8.GetBytes(postData);         request.set_ContentType(“application/json”);        request.set_ContentLength(byteArray.get_Length());         dataStream = request.GetRequestStream();         dataStream.Write(byteArray, 0, byteArray.get_Length());         dataStream.Close(); } } Let me know your reviews. I will soon come up with more articles, as I further explore D365 Operations.

Share Story :

Field Security Profile Error

Introduction: One of regular CRM user suddenly start getting error “The use does not have read permission to a secure field. The requested operation could not be completed”. As it clearly visible that the error is coming due to the security issue. But after checking the permission we did not find any issue in the security role. Since it was working earlier it was not known why it is not working now. But someone has imported a modified solution in production instance. Then, we checked and found that a new field security profiles were created, since this particular user was not the member of list, so he was not able to read the record. You need to make sure that you have added user/users into this list whom you want to read/create/update a particular field. Once you have added the user you will able to read/update/create the value of a particular field. Hope this helps you to resolve the security profile issue.

Share Story :

Connection Entities in Dynamics 365

Overview: Connection entities provision an easy way to connect and describe relationships between two records in D365 CRM. This is supported across most Entity types in Dynamics 365. Some of the features of Connection entities are as follows: All Business and Custom entities can be enabled for Connections. Provision to add descriptive information between the relationship between the 2 records. Enabling Connections for an Entity: In my example below, I’ll enable Connections for 2 custom entities – I have a custom entity called Family Members and have these records details of Family Members like their blood groups and medical history. This entity is a child entity of another customer entity called Patient. Connections must be enabled for this custom entity at the entity level as shown below: Connections need to be enabled on both entities between which connection is to be made. Once Connections have been enabled, navigate to the record and navigate to the related records, you’ll see Connections is now available. Connection Roles: Connection Roles are the description that defines in what way is record A related to record B. Connection Roles can be added to a Solution or even created as below: In a solution, look for Connection Roles on the left hand menu Then, create a Connection (Existing ones in an Unmanaged Solution can be added as well) I am creating a new Connection Role by the name Father and I’ve enabled the same only for Patient entity. and Family Member After saving the record, I’ll create a Matching Connection Role to the role Father I just created. Now, I’ll create a matching Role called as Son Now, the two roles have been created which match each other Associating Records: Once my Connections have been enabled on source (connection from entity) and target (connection to entity), I’ll associate the two records as follows: I will navigate to the Family Member entity I created above and will associate a record with a record to Patient entity. This way, I can derive what is the relation between the family member and the patient. In the Connection Associated View above, I’ll associate the Family Member Gary to the Patient. So I’ll select To Another in the connection menu as shown in #1 above. Then, find the Patient Alexander James which I created in the Connect To tab as shown below. And then I relate the current record to the target record as the Father. Note: As soon as Father was selected in the Connected To tab, the Details tab auto-filled Son as it was the only role associated with the Father when we created Connection Roles in above section in this blog. In case there are multiple Connection Roles associated with one Role, the Details section’s As This Role field will be empty for you to select the related role from. And the record is saved as below. Likewise, a record can be connected to multiple other records as well. Retrieving Connections: Connections are useful if you want to draw reports, graphs or charts.

Share Story :

Set up gift cards

Posted On July 5, 2017 by Admin Posted in

Introduction: This blog explains you setup of gift card in Dynamics 365 retail, which can be issue and redeem in store. In POS gift card can be use as payment tender. Just like loyalty Card Casher can check the balance, he can add balance (Money) to the gift card and issue the gift card from POS. Before you setup gift card in Dynamics 365 retail, you should Set up a retail service product to represent gift cards. If cards have bar codes, make sure that the correct bar codes are associated with the gift card product. Let’s begin. Step 1: Open the Dynamics 365. Go to the Retail and Commerce > Headquarter setup > Parameter > retail parameter Click on Posting. Step 2: In the Gift card product field, select the gift card product. This this case “9999” is gift card product No. you can select your gift card no. Gift Card Company: the legal entity that holds the liability for gift cards. In the Journal field, enter the name of the journal to use when intercompany journal entries are created. Journal entries are creating during the statement posting process. In the Serial number templates fields, enter the start date, end date, and gift card numbering template to use when generating electronic gift cards. If the gift card template doesn’t expire, leave the End date field blank. Conclusion: By following above steps you can setup gift card in Dynamics 365 retail.  

Share Story :

Dynamics CRM behaviour on deletion of User

Introduction: Have you ever wondered what happens to the user owned records in CRM when the user itself is deleted from CRM? Will the records get deleted? Or Will it be assigned to some other user? What will happen to the existing system jobs? Let us see in the below example. Description: Suppose there is a user named “Somesh Siripuram” and this user has its own account records. The owner of this records is “Somesh Siripuram”. Now the user is being deleted from the admin portal and no longer has access to Office 365 and CRM. Login with system administrator and check for the deleted user. The user will be listed in “Disabled User” view. When you open the user the email address and the user name of the user will be changed and some number appears Now, it’s time to check the deleted user owned records Thus, we can see that records neither gets deleted nor the owner of the records get changed. Manual assigning of records to another user is required. Other effects: Waiting jobs will remain as waiting until it is cancelled. New system jobs (where workflow owner equals to disabled user) will fail. You need to change the owner manually, they are not auto assigned to system  

Share Story :

Physical Negative Inventory Dynamics 365 for Operations

Physical negative inventory functionality is mainly used for issuing the stock for insufficient inventory. If Physical inventory checkbox is selected then system will allow to issue an item though stock is not available into inventory. Path: Inventory Management > Setup > Inventory > Item Model Group Below is example how to issues stock if there is insufficient inventory. You can see the below item for which On Hand inventory is not available though I want sale these stock. Create the sales order and enter item, quantity, Unit cost and confirm the sales order. Post the Packing slip to sell or issue the stock. Check the On hand inventory after posting Packing slip. You can check On Hand Quantity is showing negative. Conclusion: These functionality helps to issue stock through sales order, Production order, adjustment journal though stock is not available or insufficient.  

Share Story :

SEARCH BLOGS:

FOLLOW CLOUDFRONTS BLOG :


Secured By miniOrange