Category: Microsoft Dynamics CRM

Top 10 Microsoft Dynamics CRM Integration

Proposing Dynamics CRM to The Small and large Scale Business Organization has been much easy because the system is capable of integrating with different Microsoft Products and 3rd Party Applications.

1

The integration Is easy and doesn’t require many configurations in the case of Microsoft Products. This article will discuss side by side the Integration capabilities of Dynamic CRM online And Dynamics CRM 2016.

1.1       Microsoft SharePoint

After using the Dynamics CRM the first thought comes into your mind that although you are storing in the information and the activities related to customer interaction or you are giving services to your client after the successful opportunity. But now you are willing to store the Documents Related to leads, opportunity or services may be.

Although this can be achieved through storing the Attachments in the ‘Notes’ Entity of the Dynamics CRM. So this full fills the solution of attachments. But now when I need to search for my document in the CRM, I have to go through all my notes section to get the information out.  Similarly, the storage issue is the bigger when you use the Dynamics CRM Online, the storage is filled in instantly when you use to CRM to store the attachments.

This is where SharePoint comes into play, Dynamics CRM Allows integration with SharePoint in two ways i.e. Server Based Integration and Client Based integration. Client based integration uses a sandbox solution will be obsolete in the future. Whereas server based solution is supported on both On-Premises and Online Integration. The Diagram shows the Two Way Path of integration between SharePoint and Dynamics CRM. Dynamics CRM Support the Following Server Based Integration:

  • SharePoint on – Premises to Dynamics CRM On-Premises
  • SharePoint online to Dynamics CRM On-Premises
  • SharePoint online to Dynamics CRM Online
  • SharePoint on – Premises to Dynamics CRM Online

2

1.2       Microsoft Outlook

I remember my client complaining about how hard is for him to track the email activities with his client in Dynamics CRM. He wasn’t at all comfortable with sending or receiving the emails through Dynamics CRM Web interface.  Moreover, most of the business user aren’t comfortable of logging into the CRM Web Interface and manage their email activities.

Dynamics CRM offers an outlook add-on which can heal the pain area of tracking the email activities or creating the leads directly from outlook. Following are the benefits integrating outlook with Dynamics CRM

  • Automatically link Outlook emails to associated CRM records including contacts and opportunities
  • Create personalized CRM views in Outlook
  • Access all CRM end-user functions in the Outlook interface
  • Open CRM records from any linked Outlook email
  • Rely on the familiarity of Outlook to reduce training costs & gain rapid user acceptance

The Above add-on can be used with both Dynamics CRM On-Premises and Dynamics CRM online.

4

1.3       Microsoft Exchange

In order to Outlook work with dynamics CRM, we need to integrate Dynamics CRM with Exchange. Dynamics CRM can be integrated with Exchange and Exchange Online using server-based integration as shown in the diagram.

With the Exchange Integration, the user will be able to sync all the contacts, appointments and tasks at a single place in CRM. And Similarly, the Automated Emails can only be generated from CRM if the integration is done with Exchange.

3

1.4       Yammer

I am a kind of a person who usually works with different sales team on an opportunity, I like communicating with my colleagues on lead, opportunities or even on services. All these communications are on mail on Phone calls, all though we can track the phone calls and emails in the dynamics CRM. But what about my users who are not a part of Dynamics CRM.

Using Activity feeds of Dynamics CRM just allow to be social with the dynamics CRM users, but not other users. So Dynamics CRM allows integration with Yammer so you can collaborate with the users inside the CRM and or users who aren’t the part of CRM. As getting social is equivalent to bring in success as a team.

Dynamics CRM Online and Dynamics CRM On-Premise allows integration with Yammer. But for that, you need to purchase Yammer Enterprise Subscription per user.

5

1.5       One Note

Getting notes while working on the Tasks, is a day to day routine for us. Getting Notes really helps us when we get back to the task. One of my clients had complained that it’s hard managing multiple leads because he needs something that reminds him that what was the last working he has done on the lead, opportunity, quotes, orders, Cases etc.

Dynamics CRM Online allows integrating One Note, and this requires the Subscription of Office 365. Integration with One Note:

  • You can easily take notes against each Opportunity, Leads, or any other entity
  • No more hustles when coming back to the pending Leads
  • Easy Interactive, capturing of notes.

6

1.6       Power BI

It’s a world of big Data, and the next big thing in the future is to analyze the data to extract the patterns and the main goal is to increase the revenue. Dynamics CRM offers rich Dashboards and charts but they have limitations. With the Help of Power BI, this limitation can be broken and the rich analysis can be done to get higher revenues. Reports on Power BI can be generated using Dynamics CRM OData Layer.

Dynamics CRM exposes its data using the DATA Web service Layer, Power BI can extract the data and based on it create the reports and rich Dashboards for executives and employees.

7

1.7       Office 365

Managing Hardware has been problematic for the corporates, as they have to hire IT, team, to manage the resources, which in turn bring cost Software, Hardware, and Resources to manage them. Office 365 being a cloud Solution offers Dynamics CRM online to easily integrate with the following:

  • SharePoint Online: Integrate for Document Management
  • Exchange Online: integrate to Generate emails from CRM to customers.
  • Skype For business: Communicate within a team and Contact the clients directly using Skype for business, by getting rid of traditional calling methodologies
  • One Note: track the notes against the leads, opportunities.
  • Yammer: Collaborate and work
  • Power BI: Rich Dashboards and Reports
  • Outlook App: Use outlook with Dynamics CRM Online, for creating the leads directly from email and much more.

1.8       ERP Integration (Dynamics AX, Dynamics GP, Dynamics NAV)

Microsoft has released a data integration tool for linking Microsoft Dynamics NAV/AX and Microsoft Dynamics CRM – creatively called the Microsoft Dynamics Connector.

The connector allows for out of the box bi-directional integration between the ERP entities and the CRM entities such as Customer, Invoices, Sales Orders, and Items. The connector works with both on-premise and online and uses web services for the data integration. The integration will look at the following entities in the Microsoft Dynamics ERP and Dynamics CRM:

8

1.9       Integration with ESB

Dynamics CRM exposes the SOAP based Interface through which the external Entities can connect and communicate with Dynamics CRM. Moreover following are the Areas in which integrations can be done:

  • Custom Workflow activities
  • Plug-ins
  • Discovery Service of Dynamics CRM

However, in order to integrate with the ESB, Following are the products that can be used to perform the operations in the Corporate Environment:

  • Azure Bus
  • BizTalk
  • Mule

9

Advertisements

On Form Load Check the User Team and Lock the form the if the owner of the record team doesn’t matches with Logged in user.

Following code will help you in the following:

  • getting the team names in the system
  • getting the team associated with the user.
  • validating the action if the team name doesn’t match

On Load Function that calls the getCurrentUserTeamNames

function Form_OnLoad_ValidateUserTeam() {
    var userTeams = getCurrentUserTeamNames();
    if (userTeams != null && userTeams.length > 0) {
        if (!isValidateFormAccess(userTeams)) {
            DisableFormFields();
        }
    }
}

function isValidateFormAccess(userTeams) {
    debugger;
    var recordOwner = Xrm.Page.getControl("header_ownerid").getAttribute().getValue();
 
    //var myStringArray = ["Hello", "World"];
    var userTeamsLength = userTeams.length;
    for (var i = 0; i < userTeamsLength; i++) {
        if (userTeams[i] == recordOwner[0].name) {
            return true;
        }   //Do something
    }
    return false;
}

GetCurrentUserTeamNames: this function will return the team names of the user

function getCurrentUserTeamNames() {
    debugger;
    //ajax call to get data from CRM
    var serverUrl = location.protocol + "//" + location.host + "/" + Xrm.Page.context.getOrgUniqueName();
    var odataSelect = serverUrl + "/XRMServices/2011/OrganizationData.svc" + "/" + "TeamSet?$select=Name,TeamId";
    var userTeams = [];
    $.ajax
    (
     {
         type: "GET",
         contentType: "application/json; charset=utf-8",
         datatype: "json",
         async: false,
         url: odataSelect,
         beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Accept", "application/json"); },
         success: function (data, textStatus, XmlHttpRequest) {
             for (var i = 0; i < data.d.results.length; i++) {                  if (Check(data.d.results[i].TeamId)) {                      //alert("You are associated with team: " + data.d.results[i].Name);                        userTeams.push(data.d.results[i].Name);                  }              }              },            error: function (XmlHttpRequest, textStatus, errorThrown) {              if (XmlHttpRequest && XmlHttpRequest.responseText) {                  alert('OData Select Failed: ' + textStatus + errorThrown + odataSelect);              }          }      }     );       return userTeams; }       function Check(teamid) {       var userId = Xrm.Page.context.getUserId(); //Fetching user Id of current logged in user     var serverUrl = location.protocol + "//" + location.host + "/" + Xrm.Page.context.getOrgUniqueName();     var odataSelect = serverUrl + "/XRMServices/2011/OrganizationData.svc" + "/" + "TeamMembershipSet?$filter=SystemUserId eq guid'" + userId + "' and TeamId eq guid'" + teamid + "'";     var boolFlag = false;     $.ajax     (      {          type: "GET",          contentType: "application/json; charset=utf-8",          datatype: "json",            async: false,          url: odataSelect,            beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Accept", "application/json"); },          success: function (data, textStatus, XmlHttpRequest) {              if (data.d.results.length > 0) {
                 //alert(data.d.results[0].TeamId);
                 boolFlag = true;
             }
         },
 
         error: function (XmlHttpRequest, textStatus, errorThrown) {
             if (XmlHttpRequest && XmlHttpRequest.responseText) {
                 alert('OData Select Failed: ' + textStatus + errorThrown + odataSelect);
             }
         }
     }
    );
 
    return boolFlag;
    //return false; //Returing false if the user is not associated with the team
}
 
 
 
function DisableFormFields() {
    disableAttrs();
    RefreshGrids();
}
 
 
 
function RefreshGrids() {
 
    var opportunitySubgrids = Xrm.Page.getControl(function (ctrl, i) {
        if (ctrl.getControlType() == "subgrid") {
            return (ctrl);
        }
        else {
            return false;
        }
    });
 
    opportunitySubgrids.forEach(function (attribute, index) {
        var control = Xrm.Page.getControl(attribute.getName());
        if (control) {
            control.refresh();
        }
    });
 
 
 
}
 
function disableAttrs() {
    debugger;
    Xrm.Page.data.entity.attributes.forEach(function (attribute, index) {
        var control = Xrm.Page.getControl(attribute.getName());
        if (control && (control.getName() != "processid" && control.getName() != "stageid")) {
            control.setDisabled(true);
 
            //notification();
 
        }
    });
    Xrm.Page.ui.setFormNotification("The Form is Locked", "INFORMATION")
}
 
function tabdisable(tabname, disablestatus) {
    var tab = Xrm.Page.ui.tabs.get(tabname);
    if (tab == null) alert("Error: The tab: " + tabname + " is not on the form");
    else {
        var tabsections = tab.sections.get();
        for (var i in tabsections) {
            var secname = tabsections[i].getName();
            sectiondisable(secname, disablestatus);
        }
    }
}   // tabdisable
function sectiondisable(sectionname, disablestatus) {
    var ctrlName = Xrm.Page.ui.controls.get();
    for (var i in ctrlName) {
        var ctrl = ctrlName[i];
        var ctrlSection = ctrl.getParent().getName();
        if (ctrlSection == sectionname) {
            ctrl.setDisabled(disablestatus);
        }
    }
}  // sectiondisable

Please Feel Free to contact me if anyone face issues. The current Code requires that

Jquery and Json must be included in the form

Dynamics CRM Common Framework

I was asked to develop a framework that consist of common used java-script in dynamics CRM. I ll be sharing my findings in the code mentioned below

/**
Test Functions -- Start
**/

/***
// Method Name: testFunction
// Method Description:
// Created: Sept 04, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: testParam Desc: description of individual param goes here
// return bool Desc: Success or Failure
// Revisions: Example:Sue (2/19/2009) - Method Name - Changes done --REF:SUE_1
***/
function testFunction(testparam) {
    var testVar = testparam;

    //start:SUE_1
    testVar = false;
    //end:SUE_1

    return testVar;
}

/***
// Method Name: testFunctionAlert
// Method Description:
// Created: Sept 04, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: testParam Desc: sending param from the Entity
// return bool Desc: Success or Failure
// Revisions: 
***/
function testFunctionAlert(testparam) {
    alert(testparam);
    return true;
}

/**
Test Functions -- End
**/



/**
Conversion Functions -- Start
**/

/***
// Method Name: toUpperCaseAlpha
// Method Description: Convert the Alpha Text in to UpperCase in the Attribute
// Created: Sept 04, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: srcTxtAttribObj Desc: Attribute Object Pass
// return undefined Desc: N/A
// Revisions: 
***/
function toUpperCaseAlpha(srcTxtAttribObj) {
    //need to discuss with kashif in order to do upper case do we need to confirm the field type
    var attributeVal = srcTxtAttribObj.getValue();
    if (IsAlpha(attributeVal)) {
        if (attributeVal) {
            srcTxtAttribObj.setValue(attributeVal.toUpperCase());
        }
    }
    else {
        //need to discuss with kashif if any other than alphabetic case happens
        srcTxtAttribObj.setValue("");
    }
}


/***
// Method Name: toTitleCaseAlpha
// Method Description: Convert the Alpha Text in to Title Case in the Attribute
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: srcTxtAttribObj Desc: Attribute Object Pass
// return undefined Desc: N/A
// Revisions: 
***/
function toTitleCaseAlpha(srcTxtAttribObj) {
    var attributeVal = srcTxtAttribObj.getValue();
    if (IsAlpha(attributeVal)) {
        if (attributeVal) {
            srcTxtAttribObj.setValue(attributeVal.replace(/\w+/g, function (txt) {
                return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
            }
                                                                )
                                                                );
        }
    }
    else {
        //need to discuss with kashif if any other than alphabetic case happens
        srcTxtAttribObj.setValue("");
    }
}


/***
// Method Name: toDateFormat_DDMMYYY
// Method Description: Convert the date in to DD MM YYYY
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: srcDateAttribObj Desc: Attribute Object Pass
// return undefined Desc: N/A
// Revisions: 
***/
function toDateFormat_DDMMYYY(srcDateAttribObj) {
    var dateAttributeVal = srcDateAttribObj.getValue();
    if (dateAttributeVal) {
        var tempDateObj = new Date(dateAttributeVal || Date.now()),
            month = '' + (tempDateObj.getMonth() + 1),
            day = '' + tempDateObj.getDate(),
            year = tempDateObj.getFullYear();

        //not required
        /*if (month.length < 2) month = '0' + month;
        if (day.length < 2) day = '0' + day;*/
        dateString = [day, month, year].join('/');
        tempDateObj = new Date(dateString);
        srcDateAttribObj.setValue(tempDateObj);
    }
}


/**
Conversion Functions -- End
**/


/**
Validation Functions -- Start
**/


/***
// Method Name: IsAlpha
// Method Description: Tests if the value entered is Alphabetic either with space or not
// Created: Sept 04, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: srcTxtObj Desc: pass text obj
// return bool  Desc: true if matches the criteria
// Revisions: 
***/
function IsAlpha(srcTxtObjVal) {

    var AplhaRegEx = /^[a-zA-Z ]+$/; //regular expression for Alphabet Or Space Character

    if (AplhaRegEx.test(srcTxtObjVal)) {
        return true;
    }
    return false;
}

/***
// Method Name: IsAlphaNumeric
// Method Description: Tests if the value entered is Alphabetic or Numeric either with space or not
// Created: Sept 04, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: srcTxtObj Desc: pass text obj
// return bool  Desc: true if matches the criteria
// Revisions: 
***/
function IsAlphaNumeric(srcTxtObjVal) {

    var AplhaNumRegEx = /^[a-zA-Z][a-zA-Z0-9_\s]*$/; //regular expression for Alphabet Or Space Or Numeric Character

    if (AplhaNumRegEx.test(srcTxtObjVal)) {
        return true;
    }
    return false;
}


/***
// Method Name: IsNumeric
// Method Description: Tests if the value entered is Alphabetic or Numeric either with space or not
// Created: Sept 04, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: srcTxtObj Desc: pass text obj
// return bool  Desc: true if matches the criteria
// Revisions: 
***/
function IsNumeric(srcTxtObjVal) {

    var AplhaNumRegEx = /^[0-9]+$/; //regular expression for Numeric Character

    if (AplhaNumRegEx.test(srcTxtObjVal)) {
        return true;
    }
    return false;
}






/***
// Method Name: IsFieldExistsOnForm
// Method Description: Confirms if the field exists on form
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: fieldName Desc: pass field name
// return bool  Desc: true if Field Exists
// Revisions: 
***/
function IsFieldExistsOnForm(fieldName) {
    var fieldAttribute = Xrm.Page.getAttribute(fieldName);
    return fieldAttribute != null;
}

/***
// Method Name: IsSectionExistsOnForm
// Method Description: Confirms if the section exists on form
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: tabName, sectionName Desc: pass tab and section name
// return bool  Desc: true if Field Exists
// Revisions: 
***/
function IsSectionExistsOnForm(tabName, sectionName) {
    var section = Xrm.Page.ui.tabs.get(tabName).sections.get(sectionName);
    return section != null;
}

/***
// Method Name: IsTabExistsOnForm
// Method Description: Confirms if the section exists on form
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: tabName Desc: pass tab name
// return bool  Desc: true if Field Exists
// Revisions: 
***/
function IsTabExistsOnForm(tabName) {
    var tab = Xrm.Page.ui.tabs.get(tabName);
    return tab != null;
}


/**
Validation Functions -- end
**/




/**Utility Functions -- start
**/


/***
// Method Name: GetOptionSetText
// Method Description: Gets the option set Text
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: fieldName Desc: pass the field name
// return string  Desc: returns the option set Text Name
// Revisions: 
***/
function GetOptionSetText(fieldName) {
    if (IsFieldExistsOnForm(fieldName)) {
        var text = '';
        if (Xrm.Page.getAttribute(fieldName).getValue() != null) {
            text = Xrm.Page.getAttribute(fieldName).getSelectedOption().text;
        }
        return text;
    }
}

/***
// Method Name: GetLookupValueID
// Method Description: Gets the Look up Value ID
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: lookUpName Desc: pass the Look up Field Name
// return string  Desc: returns the lookupid
// Revisions: 
***/
function GetLookupValueID(lookUpName) {
    var name = '';
    var lookupid;
    var lookupObject = Xrm.Page.getAttribute(lookUpName);

    if (lookupObject != null) {
        var lookUpObjectValue = lookupObject.getValue();
        if ((lookUpObjectValue != null)) {
            name = lookUpObjectValue[0].name;
            lookupid = lookUpObjectValue[0].id;
        }
    }

    return lookupid;
}

/***
// Method Name: SetLookupValue
// Method Description: Sets the Look up Value for a particular Entity
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: lookUpName Desc: pass the Look up Field Name
// return string  Desc: returns the lookupid
// Revisions: 
***/
function SetLookupValue(lookup, name, id, entityType) {
    if (IsFieldExistsOnForm(lookup)) {
        var lookupid = null;
        var lookupObject = Xrm.Page.getAttribute(lookup);
        var value = new Array();
        value[0] = new Object();
        value[0].id = id;
        value[0].name = name;
        value[0].entityType = entityType;

        Xrm.Page.getAttribute(lookup).setValue(value);
    }
}

/***
// Method Name: GetFormType
// Method Description: get form type
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: N\A Desc: N\A
// return string  Desc: returns the form type
// Revisions: 
***/
function GetFormType() {
    var FormType = Xrm.Page.ui.getFormType();
    if (FormType != null) {
        switch (FormType) {
            case 1:
                return "create";
                break;
            case 2:
                return "update";
                break;
            case 3:
                return "readonly";
                break;
            case 4:
                return "disabled";
                break;
            case 6:
                return "bulkedit";
                break;
            default:
                return null;
        }
    }
}

/***
// Method Name: HideField
// Method Description: hides the field
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: fieldName Desc: field name that needs to be hidden
// return N/A  Desc: N/A
// Revisions: 
***/
function HideField(fieldName) {
    if (IsFieldExistsOnForm(fieldName)) {
        var fieldControl = Xrm.Page.ui.controls.get(fieldName);
        fieldControl.setVisible(false);
    }
}

/***
// Method Name: showField
// Method Description: shows the field
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: fieldName Desc: field name that needs to be hidden
// return N/A  Desc: N/A
// Revisions: 
***/
function showField(fieldName) {
    if (IsFieldExistsOnForm(fieldName)) {
        var fieldControl = Xrm.Page.ui.controls.get(fieldName);
        fieldControl.setVisible(true);
    }
}

/***
// Method Name: EnableField
// Method Description: Enable the field on the form
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: fieldName Desc: field name that needs to be enabled
// return N/A  Desc: N/A
// Revisions: 
***/
function EnableField(fieldName) {
    if (IsFieldExistsOnForm(fieldName)) {
        var fieldControl = Xrm.Page.ui.controls.get(fieldName);
        fieldControl.setDisabled(true);
    }
}


/***
// Method Name: DisableField
// Method Description: Disable the field on the form
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: fieldName Desc: field name that needs to be enabled
// return N/A  Desc: N/A
// Revisions: 
***/
function DisableField(fieldName) {
    if (IsFieldExistsOnForm(fieldName)) {
        var fieldControl = Xrm.Page.ui.controls.get(fieldName);
        fieldControl.setDisabled(false);
    }
}

/***
// Method Name: SetFocusField
// Method Description: Focus on the Field
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: fieldName Desc: field name that needs to be focused
// return N/A  Desc: N/A
// Revisions: 
***/
function SetFocusField(fieldName) {
    if (IsFieldExistsOnForm(fieldName)) {
        var fieldControl = Xrm.Page.ui.controls.get(fieldName);
        fieldControl.setFocus();
    }
}

/***
// Method Name: ShowTab
// Method Description: show the tab
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: tabName Desc: tab name that needs to be shown
// return N/A  Desc: N/A
// Revisions: 
***/
function ShowTab(tabName) {
    if (IsTabExistsOnForm(tabName)) {
        Xrm.Page.ui.tabs.get(tabName).setVisible(true);
    }
}

/***
// Method Name: HideTab
// Method Description: Hide the Tab
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: tabName Desc: tab name that needs to be hidden
// return N/A  Desc: N/A
// Revisions: 
***/
function HideTab(tabName) {
    if (IsTabExistsOnForm(tabName)) {
        Xrm.Page.ui.tabs.get(tabName).setVisible(false);
    }
}


/***
// Method Name: ShowSection
// Method Description: Show the section
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: tabName,sectionName Desc: tabName which contains the Section
// return N/A  Desc: N/A
// Revisions: 
***/
function ShowSection(tabName, sectionName) {
    if (IsSectionExistsOnForm(tabName, sectionName)) {
        Xrm.Page.ui.tabs.get(tabName).sections.get(sectionName).setVisible(true);
    }
}

/***
// Method Name: HideSection
// Method Description: Show the section
// Created: Sept 07, 2015 04:09PM
// Author: Sabih Ahmed Khan
// param: tabName,sectionName Desc: tabName which contains the Section
// return N/A  Desc: N/A
// Revisions: 
***/
function HideSection(tabName, sectionName) {
    if (IsSectionExistsOnForm(tabName, sectionName)) {
        Xrm.Page.ui.tabs.get(tabName).sections.get(sectionName).setVisible(false);
    }
}


/***
// Method Name: sectiondisable
// Method Description: Disable the Section
// Created: Sept 07, 2015 04:09PM
// Author: N/A
// param: tabName,sectionName Desc: tabName which contains the Section
// return N/A  Desc: N/A
// Revisions: 
***/
function sectiondisable(sectionname, disablestatus) {
    var ctrlName = Xrm.Page.ui.controls.get();
    for (var i in ctrlName) {
        var ctrl = ctrlName[i];
        var ctrlSection = ctrl.getParent().getName();
        if (ctrlSection == sectionname) {
            ctrl.setDisabled(disablestatus);
        }
    }
}

/***
// Method Name: setTodayDate
// Method Description: Function Moved Sets the Today Date
// Created: Sept 07, 2015 04:09PM
// Author: N/A
// param: dateFieldAttrib Desc: date field attribute to be passed in
// return N/A  Desc: N/A
// Revisions: 
***/
function setTodayDate(dateFieldAttrib) {
    var currentDate = new Date();
    dateFieldAttrib.setValue(currentDate);
}
/**Utility Functions -- end
**/

        

Get Lookup id / Text / EntityName in CRM using JavaScript

Arun Potti's MS CRM blog

It is required sometimes to get Lookup Id / Text / Entity schema name of the selected record from Lookup. To get that follow the below task.

Task: Get record GUID, record Name and Entity Type from the Phone Call entity OnChange of To field.

Solution: Please follow the below steps,

Step 1: Create a web resource of type Jscript and name it as “new_phonecall”.

Step 2: Click on Text Editor, copy paste the below code.

function toOnChange(){
getLookupDetails("to");
}

function getLookupDetails(lookupSchemaName) {
var lookupObj = Xrm.Page.getAttribute(lookupSchemaName); //Check for Lookup Object
if (lookupObj != null) {
var lookupObjValue = lookupObj.getValue();//Check for Lookup Value
if (lookupObjValue != null) {
var lookupEntityType = lookupObjValue[0].entityType, //To get EntityName
lookupRecordGuid = lookupObjValue[0].id, // To get record GUID
lookupRecordName = lookupObjValue[0].name; //To get record Name  if (lookupEntityType != null && lookupRecordGuid != null && lookupRecordName != null) { Xrm.Utility.alertDialog("Entity Type : " + lookupEntityType…

View original post 96 more words

FetchXML Formatter Tool

Arun Potti's MS CRM blog

It is a Light weight windows application and this tool will be helpful when you are extensively working with FetchXML in Javascript / C# code to get desired result.

Functionality:

It will take FetchXML from Advance Find as an input and convert that into desired format, which can be used into Javascript / C# for further coding.

Pros:

  1. No Need to spend time for FetchXML formatting
  2. It is easy to use.
  3. Works for both Javascript and C# code

Example:

Let us take a simple example of the below FetchXML,

 <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
  <entity name="contact">
    <attribute name="fullname" />
    <attribute name="telephone1" />
    <attribute name="emailaddress1" />
    <attribute name="contactid" />
    <order attribute="fullname" descending="false" />
    <filter type="and">
      <condition attribute="ownerid" operator="eq-userid" />
      <condition attribute="statecode" operator="eq" value="0" />
    </filter>
  </entity>
</fetch>

Provide this as an input to FetchXML formatter Tool, 1. Check Javascript radio…

View original post 140 more words

Retrieve records using Fetch XML & Java Script in CRM 2011/13

beautifully explained fetch XML

Arun Potti's MS CRM blog

Task: Retrieve Arun Potti Business Phone on onload of Contact record in Contact Entity using FetchXML & Javascript

Solution:

Step 1: Goto http://xrmsvctoolkit.codeplex.com/, and download the Zip folder. Unzip XrmServiceToolkit the folder.

Step 2: Open the XrmServiceToolkit folder, you can find the below Javascript files.

FetchXML - Pic 1

Goto Microsoft Dynamics CRM –> Settings –> Customization –> Webresources.

Create jquery, json2 and XrmServiceToolkit javascript webresources. While creating web resources browse for the respective files and provide the path of XRMServiceToolkit.

Step 3: Add all 3 files to the contact entity,

FetchXML - Pic 2

Step 4: Goto Microsoft Dynamics CRM –> Sales –> Contacts, click on Advance find button. Create new criteria as shown below by clicking on New button,

FetchXML - Pic 3

Step 5: Click on Download Fetch XML button, to get FetchXML code. You can see the below XML,

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">  <entity name="contact">    <attribute name="fullname" />    <attribute name="telephone1" />    <attribute name="contactid" />…

View original post 218 more words