Sunday, May 17, 2020

Microsoft Dynamics 365 JavaScript Functions (v9.x)

Microsoft Dynamics 365 v9.x JavaScript Useful Functions:


In this blog, I'm going to discuss Dynamics 365 useful and common Client-side scripting which will help you to achieve your requirement in a simple way.

Below I have created a bunch of sample javaScript functionality that will help you to achieve your goal using the client-side script in Dynamics 365.

Here We Go...

//1. Function to Execute all On Load events

function OnLoad(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Sample code for On Load Event
        Xrm.Utility.alertDialog("This is an alert for On Load Event.");
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }

} 

//2. Function to Execute all OnSave events

function OnSave(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Sample code for On Save Event
        Xrm.Utility.alertDialog("This is an alert for On Save Event.");
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }

}

 

//3. Function to Execute Field on Change events, This could be specific to each field

function OnChange(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Sample code for On Change Event
        Xrm.Utility.alertDialog("This is an alert for On Change Event.");
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }

}

 

//4. Function to Get Lookup ID

function GetLookupId(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get lookup ID here, Give lookup field logical name here
        var lookupId = formContext.getAttribute("new_organizationid").getValue()[0].id;
        Xrm.Utility.alertDialog(lookupId);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }

}

 

//5. Get Lookup Name

function GetLookupName(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get lookup name here, Give lookup field logical name here
        var lookupName = formContext.getAttribute("new_organizationid").getValue()[0].name;
        Xrm.Utility.alertDialog(lookupName);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }

}

 

//6. Get the Entity Logical Name

function GetEntityLogicalName(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get entity logical name here, Give lookup field logical name here
        var entityName = formContext.getAttribute("new_organizationid").getValue()[0].entityType;
        Xrm.Utility.alertDialog(entityName);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//7. Get the text value from Filed
function GetTextValue(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get text value of the field here, Give field logical name here
        var textValue = formContext.getAttribute("new_employeebusinessid").getValue();
        Xrm.Utility.alertDialog(textValue);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }

}

 

//8.Get the Data base value from Option Set Field

function GetOptionSetDataBaseValue(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get data base value of the option set field here, Give field logical name here
        var databaseValue = formContext.getAttribute("new_gender").getValue();
        Xrm.Utility.alertDialog(databaseValue);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//9. Get the Option Set text value
function GetOptionSetTextValue(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get text value of the option set field here, Give field logical name here
        var optionSetTextValue = formContext.getAttribute("new_gender").getText();
        Xrm.Utility.alertDialog(optionSetTextValue);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//10. Get the Data base value from Two Option Set Field
function GetTwoOptionSetDataBaseValue(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get the value of the two option set field here, Give field logical name here
        var databaseValue = formContext.getAttribute("new_type").getValue();
        Xrm.Utility.alertDialog(databaseValue);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
//11. Get the Date Field Value
function GetDateFieldValue(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Getvalue of the field here, Give field logical name here
        var dateOfBirth = formContext.getAttribute("new_dateofbirth").getValue();
        Xrm.Utility.alertDialog(dateOfBirth);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }

}

 

//12. Get the Date, Month, Year from Date Field Value

function GetDateFieldValues(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get value of the field here, Give field logical name here
        var dateOfBirth = formContext.getAttribute("new_dateofbirth").getValue();
        //Get Year
        Xrm.Utility.alertDialog(dateOfBirth.getFullYear());
        //Get Month
        Xrm.Utility.alertDialog(dateOfBirth.getMonth());
        //Get Date(Day)
        Xrm.Utility.alertDialog(dateOfBirth.getDate());
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//13. Set the text value to Text Field
function SetTextFieldValue(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Set the field value here
        formContext.getAttribute("new_employeebusinessid").setValue("abcd");
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//14. Set the Data base value to Option Set Field
function SetOptionSetDataBaseValue(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Set the field value here
        formContext.getAttribute("new_gender").setValue(123456);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//15. Set the Data base value to Two Option Set Field
function SetTwoOptionSetDataBaseValue(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Set the field value here - true
        formContext.getAttribute("new_type").setValue(true);
        //Set the field value here - false
        formContext.getAttribute("new_type").setValue(false);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//16. Set the Date Field Value
function SetDateFieldValue(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get the current Date
        var dateOfBirth = new Date();
        //Set the Current Date to date field
        formContext.getAttribute("new_dateofbirth").setValue(dateOfBirth);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//17. Set the Lookup Field Value
function SetLookUpFieldValue(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        var lookupValue = new Array();
        var lookupValue[0]= new Object();
        lookupValue[0].id = "919F28C4-F9BB-E911-A977-000D3AF04F8C";//Guid of the Record to be set
        lookupValue[0].name = "Tata Consultancy Services"; //Name of the record to be set
        lookupValue[0].entityType = "new_organization" //Entity Logical Name
        formContext.getAttribute("new_organizationid").setValue(lookupValue);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }

}

 

//18. Set the Field Requirement Level

function SetTheFieldRequirementLevel(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Set as Business Required
        formContext.getAttribute("new_dateofbirth").setRequiredLevel("required");
        //Set as Buiness Recommended
        formContext.getAttribute("new_dateofbirth").setRequiredLevel("recommended");
        //Set as Optional
        formContext.getAttribute("new_dateofbirth").setRequiredLevel("none");
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//19. Enable or Disable Field(Lock / Unlock)
function SetTheFieldState(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Set field as Read only
        formContext.getAttribute("new_dateofbirth").setDisabled(true);
        //Set field as Editable
        formContext.getAttribute("new_dateofbirth").setDisabled(false);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//20. Apply Lookup Filter
function ApplyLookUpFilter(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get the custom filter
        var filter = "";
        //Get the lookup field
        var lookupField = formContext.getAttribute("new_organizationid");
 
        //Apply custom Filter for lookup
        lookupField.addPreSearch(function () {
            lookupField.addCustomFilter(filter);
        });
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
//21. Show Hide Fields
function ShowHideFields(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Show Field
        formContext.getAttribute("new_dateofbirth").setVisible(true);
        //Hide Field
        formContext.getAttribute("new_dateofbirth").setVisible(false);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//22. Show or Hide Navigation Items
function ShowHideNavigationItems(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Show Organizations
        formContext.ui.navigation.items.get("organizations").setVisible(true);
        //Hide Organizations
        formContext.ui.navigation.items.get("organizations").setVisible(false);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//23. Set Form Notification
function SetFormNotification(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Set Form Notification
        formContext.ui.setFormNotification("This is a MS DYNAMICS CRM Form Notification", "INFO", "1");
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//24. Clear Form Notification
function ClearFormNotification(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Clear Form Notification
        formContext.ui.clearFormNotification("This is a MS DYNAMICS CRM Form Notification", "INFO", "1");
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }

}

 

//25. Show Progress Indicator

function ShowProgressIndicator() {
    try {
        Xrm.Utility.showProgressIndicator("The Page is Loading... Please wait...");
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//26.Clear Progress Indicator
function ClearProgressIndicator() {
    try {
        Xrm.Utility.closeProgressIndicator();
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//27. Show Hide Tabs based on field values
function ShowHideTabs(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        var isProcessed = formContext.getAttribute("progres_isprocessed").getValue(); //Two Option set field
        var generalTab = formContext.ui.tabs.get("GENERAL"); //Get Tab
        if (isProcessed === false) {
            generalTab.setVisible(false); //Hide Tab
        } else {
            generalTab.setVisible(true); //Show Tab
        }
        formContext.ui.tabs.get("CASH_PLAN_FLOW_DETAILS").setDisplayState("collapsed"); //Collapse Tab
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//28. Show Hide Sections based on field values
function ShowHideSections(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        var isProcessed = formContext.getAttribute("progres_isprocessed").getValue(); //Two Option set field
        var generalTab = formContext.ui.tabs.get("GENERAL"); //Get Tab
        var asstPackages = generalTab.sections.get("ASSISTANCE_PACKAGES"); //Get sections
        var payments = generalTab.sections.get("PAYMENT_RECORDS"); //Get sections
        if (isProcessed === false) {
            asstPackages.setVisible(true); //Show Section
            payments.setVisible(false); //Hide Section
        } else {
            asstPackages.setVisible(false); //Show Section
            payments.setVisible(true); //Show Section
        }
        formContext.ui.tabs.get("CASH_PLAN_FLOW_DETAILS").setDisplayState("collapsed"); //Collapse Tab
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//29. Save Form
function SaveForm(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Save Form
        formContext.data.entity.save();
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//30. Save Form and Close Record
function SaveFormAndClose(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Save Form and Close
        formContext.data.entity.save("saveandclose");
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }

}

//31. Save Form and Open Create Form

function SaveFormAndOpenCreateForm(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Save Form and Close
        formContext.data.entity.save("saveandnew");
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//32. Close Form
function CloseForm(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Close Form
        formContext.ui.close();
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//33. Save the data on Read Only Field
function ForceSaveDataOnReadOnlyField(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Save forcefully
        formContext.getAttribute("new_employeetype").setSubmitMode("always");
        //Save forcefully
        formContext.getAttribute("new_employeetype").setSubmitMode("never");
        //Save forcefully
        formContext.getAttribute("new_employeetype").setSubmitMode("dirty");
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//34. Get Dirty Fields from Form
function GetFormDirtyFields(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        var attributes = formContext.data.entity.attributes.get()
        for (var i in attributes) {
            var attribute = attributes[i];
            if (attribute.getIsDirty()) {
                Xrm.Utility.alertDialog("Attribute dirty: " + attribute.getName());
            }
        }
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//35. Get Form Type
function GetFormType(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get Form Type
        var formType = formContext.ui.getFormType();
        Xrm.Utility.alertDialog(formType);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//36. Get GUID of the Current Record
function GetGuidOfTheRecord(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get the current Record Guid
        var recordGuid = formContext.data.entity.getId();
        Xrm.Utility.alertDialog(recordGuid);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//37. Get GUID of the Current User
function GetGuidOfTheRecord(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get the Current User Guid
        var userGuid = formContext.context.getUserId();
        Xrm.Utility.alertDialog(userGuid);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//38. Get the Security Roles of Current User
function GetSecurityRolesOfCurrentUser(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get the Current User Guid
        var userRoles = formContext.context.getUserRoles();
        Xrm.Utility.alertDialog(userRoles);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }

}

 

//39. Get the CRM Clinet Url

function GetTheCRMClientUrl(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get the Client Url
        var clientUrl = formContext.context.getClientUrl();
        Xrm.Utility.alertDialog(clientUrl);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//40. Get the User Language ID
function GetTheUserLanguageID(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get the Current User Language ID
        var userLanguage = formContext.context.getUserLcid();
        Xrm.Utility.alertDialog(userLanguage);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
//41. Get the Current User Name
function GetTheCurrentUserName(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        //Get the Current User Name
        var userName = formContext.context.userSettings.userName;
        Xrm.Utility.alertDialog(userName);
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//42. Create Record using Xrm.WebApi
function CreateRecord() {
    try {
        var entityName = "new_organization"; //Entity Logical Name
        //Data used to Create record
        var data = {
            "new_organizationname": "Tata Consultancy Services",
            "new_description": "This is the description of Tata Consultancy Services",
            "new_noofemployees": 400000,
            "new_revenue": 20000000
        }
        Xrm.WebApi.createRecord(entityName, data).then(
            function success(result) {
                Xrm.Utility.alertDialog("Success");
            },
            function (error) {
                Xrm.Utility.alertDialog("Error");
            }
        );
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//43. Update Record using Xrm.WebApi
function UpdateRecord() {
    try {
        var entityName = "new_organization"; //Entity Logical Name
        var recordId = "919F28C4-F9BB-E911-A977-000D3AF04F8C"; //Guid of the Record
        //Data used to Create record
        var data = {
            "new_organizationname": "Tata Consultancy Services",
            "new_description": "This is the description of Tata Consultancy Services",
            "new_noofemployees": 450000,
            "new_revenue": 30000000
        }
        Xrm.WebApi.updateRecord(entityName, recordId, data).then(
            function success(result) {
                Xrm.Utility.alertDialog("Success");
            },
            function (error) {
                Xrm.Utility.alertDialog("Error");
            }
        );
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//44. Delete Record using Xrm.WebApi
function DeleteRecord() {
    try {
        var entityName = "new_organization"; //Entity Logical Name
        var recordId = "919F28C4-F9BB-E911-A977-000D3AF04F8C"; //Guid of the Record
        Xrm.WebApi.deleteRecord(entityName, recordId).then(
            function success(result) {
                Xrm.Utility.alertDialog("Success");
            },
            function (error) {
                Xrm.Utility.alertDialog("Error");
            }
        );
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }

}

 

//45. Retrieve Record using Xrm.WebApi
function RetrieveRecord() {
    try {
        var entityName = "new_organization"; //Entity Logical Name
        var recordId = "919F28C4-F9BB-E911-A977-000D3AF04F8C"; //Guid of the Record
        var columnsToRetrieve = "$select=new_organizationname, new_noofemployees, new_revenue"; //Columns to Retrieve
        Xrm.WebApi.retrieveRecord(entityName, recordId, columnsToRetrieve).then(
            function success(result) {
                Xrm.Utility.alertDialog("Success");
            },
            function (error) {
                Xrm.Utility.alertDialog("Error");
            }
        );
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//46. Retrieve Multiple Record using Xrm.WebApi
function RetrieveMultipleRecords() {
    try {
        var entityName = "new_organization"; //Entity Logical Name
        var query = "?$select=new_organizationname, new_noofemployees, new_revenue&$top=3"; //Columns to Retrieve
        Xrm.WebApi.retrieveMultipleRecords(entityName, query).then(
            function success(result) {
                Xrm.Utility.alertDialog("Success");
            },
            function (error) {
                Xrm.Utility.alertDialog("Error");
            }
        );
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//47. Call Asynchronous Action
function CallAsynchronousAction(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        var webApiVersionNumber = "v9.1";
        var serverURL = formContext.context.getClientUrl() + "/api/data/" + webApiVersionNumber + "/";;
        var actionName = "new_customaction"; //Action name
        var data = {}; //Action Parameters
        if (typeof (data) === "undefined") {
            data = {};
        }
        var oDataEndPoint = serverURL + actionName;
        var req = new XMLHttpRequest();
        req.open("POST", oDataEndPoint, true); //Action will be invoked Asynchronously
        req.setRequestHeader("Accept", "application/json");
        req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        req.setRequestHeader("OData-MaxVersion", "4.0");
        req.setRequestHeader("OData-Version", "4.0");
        req.onreadystatechange = function () {
            if (this.readyState === 4) {
                req.onreadystatechange = null;
                if (this.status === 204 || this.status === 200) {
                    if (this.statusText === "No Content" || this.statusText === "") // In case of 204
                        var response = req.response;
                    else {
                        var response = JSON.parse(req.response);
                    }
                } else {
                    var error = JSON.parse(req.response).error;
                    Xrm.Utility.alertDialog(error.message);
                }
            }
        };
        req.send(JSON.stringify(data));
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
 
//48. Call Synchronous Action
function CallSynchronousAction(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        var webApiVersionNumber = "v9.1";
        var serverURL = formContext.context.getClientUrl() + "/api/data/" + webApiVersionNumber + "/";;
        var actionName = "new_customaction"; //Action name
        var data = {}; //Action Parameters
        if (typeof (data) === "undefined") {
            data = {};
        }
        var oDataEndPoint = serverURL + actionName;
        var req = new XMLHttpRequest();
        req.open("POST", oDataEndPoint, false); //Action will be invoked synchronously
        req.setRequestHeader("Accept", "application/json");
        req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        req.setRequestHeader("OData-MaxVersion", "4.0");
        req.setRequestHeader("OData-Version", "4.0");
        req.onreadystatechange = function () {
            if (this.readyState === 4) {
                req.onreadystatechange = null;
                if (this.status === 204 || this.status === 200) {
                    if (this.statusText === "No Content" || this.statusText === "") // In case of 204
                        var response = req.response;
                    else {
                        var response = JSON.parse(req.response);
                    }
                } else {
                    var error = JSON.parse(req.response).error;
                    Xrm.Utility.alertDialog(error.message);
                }
            }
        };
        req.send(JSON.stringify(data));
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }

} 

//49. Associate request using Web Api

function AssociateRequest(executionContext) {
    try {
        //Get the form context
        var formContext = executionContext.getFormContext();
        var serverURL = formContext.context.getClientUrl();
        var currentEntityPlurarName = "fieldsecurityprofiles";
        var currentEntityId = "4E7C654C-7150-E711-811F-C4346BACBA84";//Get Field Security Profile id
        var relationShipName = "systemuserprofiles_association";
        var otherEntityPlurarName = "systemusers";
        var otherEntityId = "2F5FC0F6-F247-E811-810F-C4346BDCF131"; //Get System User id
        var associate = {}
        associate["@odata.id"] = serverURL + "/api/data/v9.1/" + otherEntityPlurarName + "(" + otherEntityId + ")";
        var req = new XMLHttpRequest();
        req.open("POST", serverURL + "/api/data/v9.1/" + currentEntityPlurarName + "(" + currentEntityId + ")/" + relationShipName + "/$ref", false);
        req.setRequestHeader("Accept", "application/json");
        req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        req.setRequestHeader("OData-MaxVersion", "4.0");
        req.setRequestHeader("OData-Version", "4.0");
        req.onreadystatechange = function () {
            if (this.readyState == 4 /* complete */) {
                req.onreadystatechange = null;
                if (this.status == 204) {
                    //Success
                } else {
                    var error = JSON.parse(this.response).error;
                    Xrm.Utility.alertDialog(error.message);
                }
            }
        };
        req.send(JSON.stringify(associate));
    }
    catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }

}