Monday, July 10, 2017

To query the entities in Dynamics CRM from ADX Portal using jQuery

Introduction

This article demonstrates how to query the entities in Dynamics CRM using jQuery call and OData feeds from ADX Portal.

Steps to get records from Dynamics CRM entities:

It is difficult to get the Dynamics CRM Entities from ADX Portal using any Web API call, because that may require authorization token, client id and client secret etc. Also, you will not be able to get any client context or to use XRMServiceToolKit.

ADX Portal user can be just a contact in Dynamics CRM and would not be a user in CRM domain.  In this scenario, he will not be having access to Dynamics CRM entities directly.  He will be able to see the entities that are published in the ADX portal.

Here in the below example the user registers himself with the invitation code created in Dynamics CRM for Portal User having non-CRM domain email address (ex: Yahoo / Gmail / Hotmail).


Step: 1 Create a contact in Dynamics CRM with the external email address and then generate the invitation code for that contact.



Step: 2 With that Invitation code new user can be registered in the ADX portal.




















Step: 3 Select the Dynamics CRM entities that you want to query from ADX Portal. Go to the Portals in Dynamics CRM and then select the Entity list to add entities that are to be published to ADX Portal as OData Feeds.



Step: 4 Also enable Entity Permissions to restrict the OData Feeds can be viewed by logged in Portal User.



Step: 5 Now go to the Custom JavaScript section in Entity list form or Web Page (Portals) use the ajax call for querying the OData feeds as shown below. 



$(document).ready(function (){
    var portaluser = '{{user.fullname}}';
    var filteroption = "fullname eq '" + portaluser + "'";
    var odataUri = "https://<Portal URL>/_odata/Contacts";
    odataUri += "?$filter=" + encodeURIComponent(filteroption);

    // ajax call to OData feeds of Contacts entity with the filter for finding current logged in user’s record
$.ajax({
        type: 'GET',
        contentType: 'application/json; charset=utf-8',
        datatype: 'json',
        url:  odataUri,                          
        beforeSend: function (XMLHttpRequest) {
            XMLHttpRequest.setRequestHeader('Accept', 'application/json');
        },
        async: true,
        success: function (data, textStatus, xhr) {             

           // Getting the company (Account) name that he belongs to
            var companyname = data.value[0].parentcustomerid.Name;
           
            $(".entitylist.entity-grid").on("loaded", function () {
                $(this).children(".view-grid").find("td[data-attribute='new_name']").each(function (i, e){
                    var attrvalue = $(this);

               // To remove other company’s records from the custom entity list view
                 if (!(attrvalue.context.innerText.contains(companyname))){
                        $(this).closest('tr').remove();
                    }
                });
            });
        },
        error: function (xhr, textStatus, errorThrown) {
            alert(textStatus + ' ' + errorThrown);
        }
    });
});

Output:

Measure Details View in CRM Portal:  The output displays only the records belongs to the account he is linked with.



Summary
In this article, I discussed how we can publish the entity as OData feeds and make use of ajax call to find records from the OData feeds. Hope it will be useful for you all, very soon will be back with a new article.  

Augmented Reality and Virtual Reality

Here is the quick overview of Augmented Reality and Virtual Reality, also have explained how it is being used today and how it can chan...