reference
JScript Reference for CRM 2011
Often CRM developers are looking for a quick reference guide for common Javascript requirements. Below I have added a comprehensive list of all the important Javascript functions.
1. Get the GUID value of a lookup field: Note: this example reads and pops the GUID of the primary contact on the Account form
1
2
3
4
|
function AlertGUID() { var primaryContactGUID = Xrm.Page.data.entity.attributes.get( "primarycontactid" ).getValue()[0].id; alert(primaryContactGUID); } |
2. Get the Text value of a lookup field: Note: this example reads and pops the name of the primary contact on the Account form
1
2
3
4
|
function AlertText() { var primaryContactName = Xrm.Page.data.entity.attributes.get( "primarycontactid" ).getValue()[0].name; alert(primaryContactName); } |
3. Get the value of a text field: Note: this example reads and pops the value of the Main Phone (telephone1) field on the Account form
1
2
3
4
|
function AlertTextField() { var MainPhone = Xrm.Page.data.entity.attributes.get( "telephone1" ).getValue(); alert(MainPhone); } |
4. Get the database value of an Option Set field: Note: this example reads and pops the value of the Address Type (address1_addresstypecode) field on the Account form
1
2
3
4
5
6
7
|
function AlertOptionSetDatabaseValue() { var AddressType = Xrm.Page.data.entity.attributes.get( "address1_addresstypecode" ); AddressTypeDisplayValue = AddressType.getValue(); if (AddressTypeDisplayValue != null ) { alert(AddressTypeDisplayValue); } } |
5. Get the text value of an Option Set field: Note: this example reads and pops the value of the Address Type (address1_addresstypecode) field on the Account form
1
2
3
4
5
6
7
|
function AlertOptionSetDisplayValue() { var AddressType = Xrm.Page.data.entity.attributes.get( "address1_addresstypecode" ); AddressTypeDisplayValue = AddressType.getSelectedOption().text; if (AddressTypeDisplayValue != null ) { alert(AddressTypeDisplayValue); } } |
6. Get the database value of a Bit field:
1
2
3
4
|
// example GetBitValue("telephone1"); function GetBitValue(fieldname) { return Xrm.Page.data.entity.attributes.get(fieldname).getValue(); } |
7. Get the value of a Date field: returns a value like: Wed Nov 30 17:04:06 UTC+0800 2011 and reflects the users time zone set under personal options
1
2
3
4
|
// example GetDate("createdon"); function GetDate(fieldname) { return Xrm.Page.data.entity.attributes.get(fieldname).getValue(); } |
8. Get the day, month and year parts from a Date field:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// This function takes the fieldname of a date field as input and returns a DD-MM-YYYY value // Note: the day, month and year variables are numbers function FormatDate(fieldname) { var d = Xrm.Page.data.entity.attributes.get(fieldname).getValue(); if (d != null ) { var curr_date = d.getDate(); var curr_month = d.getMonth(); curr_month++; // getMonth() considers Jan month 0, need to add 1 var curr_year = d.getFullYear(); return curr_date + "-" + curr_month + "-" + curr_year; } else return null ; } // An example where the above function is called alert(FormatDate( "new_date2" )); |
9. Set the value of a string field: Note: this example sets the Account Name field on the Account Form to “ABC”
1
2
3
4
|
function SetStringField() { var Name = Xrm.Page.data.entity.attributes.get( "name" ); Name.setValue( "ABC" ); } |
10. Set the value of an Option Set (pick list) field: Note: this example sets the Address Type field on the Account Form to “Bill To”, which corresponds to a database value of “1”
1
2
3
4
|
function SetOptionSetField() { var AddressType = Xrm.Page.data.entity.attributes.get( "address1_addresstypecode" ); AddressType.setValue(1); } |
11. Set a Date field / Default a Date field to Today:
1
2
|
//set date field to now (works on date and date time fields) Xrm.Page.data.entity.attributes.get( "new_date1" ).setValue( new Date()); |
12. Set a Date field to 7 days from now:
1
2
3
4
5
6
|
function SetDateField() { var today = new Date (); var futureDate = new Date (today.setDate(today.getDate() + 7 )); Xrm.Page.data.entity.attributes. get ( "new_date2" ).setValue(futureDate); Xrm.Page.data.entity.attributes. get ( "new_date2" ).setSubmitMode( "always" ); // Save the Disabled Field } |
13. Set the Time portion of a Date Field:
1
2
3
4
5
6
7
8
9
10
11
|
// This is a function you can call to set the time portion of a date field function SetTime(attributeName, hour, minute) { var attribute = Xrm.Page.getAttribute(attributeName); if (attribute.getValue() == null ) { attribute.setValue( new Date()); } attribute.setValue(attribute.getValue().setHours(hour, minute, 0)); } // Here's an example where I use the function to default the time to 8:30am SetTime('new_date2', 8, 30); |
14. Set the value of a Lookup field: Note: here I am providing a reusable function…
1
2
3
4
5
6
7
8
9
10
11
|
// Set the value of a lookup field function SetLookupValue(fieldName, id, name, entityType) { if (fieldName != null ) { var lookupValue = new Array(); lookupValue[0] = new Object(); lookupValue[0].id = id; lookupValue[0].name = name; lookupValue[0].entityType = entityType; Xrm.Page.getAttribute(fieldName).setValue(lookupValue); } } |
Here’s an example of how to call the function (I retrieve the details of one lookup field and then call the above function to populate another lookup field):
1
2
3
4
5
6
|
var ExistingCase = Xrm.Page.data.entity.attributes.get( "new_existingcase" ); if (ExistingCase.getValue() != null ) { var ExistingCaseGUID = ExistingCase.getValue()[0].id; var ExistingCaseName = ExistingCase.getValue()[0].name; SetLookupValue( "regardingobjectid" , ExistingCaseGUID, ExistingCaseName, "incident" ); } |
15. Split a Full Name into First Name and Last Name fields:
1
2
3
4
5
6
7
8
|
function PopulateNameFields() { var ContactName = Xrm.Page.data.entity.attributes.get( "customerid" ).getValue()[0].name; var mySplitResult = ContactName.split( " " ); var fName = mySplitResult[0]; var lName = mySplitResult[1]; Xrm.Page.data.entity.attributes.get( "firstname" ).setValue(fName); Xrm.Page.data.entity.attributes.get( "lastname" ).setValue(lName); } |
16. Set the Requirement Level of a Field: Note: this example sets the requirement level of the Address Type field on the Account form to Required. Note: setRequiredLevel(“none”) would make the field optional again.
1
2
3
4
|
function SetRequirementLevel() { var AddressType = Xrm.Page.data.entity.attributes.get( "address1_addresstypecode" ); AddressType.setRequiredLevel( "required" ); } |
17. Disable a field:
1
2
3
4
|
function SetEnabledState() { var AddressType = Xrm.Page.ui.controls.get( "address1_addresstypecode" ); AddressType.setDisabled( true ); } |
18. Force Submit the Save of a Disabled Field:
1
2
|
// Save the Disabled Field Xrm.Page.data.entity.attributes.get( "new_date1" ).setSubmitMode( "always" ); |
19. Show/Hide a field:
1
2
3
4
|
function hideName() { var name = Xrm.Page.ui.controls.get( "name" ); name.setVisible( false ); } |
20. Show/Hide a field based on a Bit field
1
2
3
4
5
6
7
8
9
|
function DisableExistingCustomerLookup() { var ExistingCustomerBit = Xrm.Page.data.entity.attributes.get( "new_existingcustomer" ).getValue(); if (ExistingCustomerBit == false ) { Xrm.Page.ui.controls.get( "customerid" ).setVisible( false ); } else { Xrm.Page.ui.controls.get( "customerid" ).setVisible( true ); } } |
21. Show/Hide a nav item: Note: you need to refer to the nav id of the link, use F12 developer tools in IE to determine this
1
2
3
4
|
function hideContacts() { var objNavItem = Xrm.Page.ui.navigation.items.get( "navContacts" ); objNavItem.setVisible( false ); } |
22. Show/Hide a Section: Note: Here I provide a function you can use. Below the function is a sample.
1
2
3
4
5
6
7
8
|
function HideShowSection(tabName, sectionName, visible) { try { Xrm.Page.ui.tabs.get(tabName).sections.get(sectionName).setVisible(visible); } catch (err) { } } HideShowSection( "general" , "address" , false ); // "false" = invisible |
23. Show/Hide a Tab: Note: Here I provide a function you can use. Below the function is a sample.
1
2
3
4
5
6
7
8
|
function HideShowTab(tabName, visible) { try { Xrm.Page.ui.tabs.get(tabName).setVisible(visible); } catch (err) { } } HideShowTab( "general" , false ); // "false" = invisible |
24. Save the form:
1
2
3
|
function SaveAndClose() { Xrm.Page.data.entity.save(); } |
25. Save and close the form:
1
2
3
|
function SaveAndClose() { Xrm.Page.data.entity.save( "saveandclose" ); } |
26. Close the form: Note: the user will be prompted for confirmation if unsaved changes exist
1
2
3
|
function Close() { Xrm.Page.ui.close(); } |
27. Determine which fields on the form are dirty:
1
2
3
4
5
6
7
8
9
|
var attributes = Xrm.Page.data.entity.attributes.get() for ( var i in attributes) { var attribute = attributes[i]; if (attribute.getIsDirty()) { alert( "attribute dirty: " + attribute.getName()); } } |
28. Determine the Form Type: Note: Form type codes: Create (1), Update (2), Read Only (3), Disabled (4), Bulk Edit (6)
1
2
3
4
5
6
|
function AlertFormType() { var FormType = Xrm.Page.ui.getFormType(); if (FormType != null ) { alert(FormType); } } |
29. Get the GUID of the current record:
1
2
3
4
5
6
|
function AlertGUID() { var GUIDvalue = Xrm.Page.data.entity.getId(); if (GUIDvalue != null ) { alert(GUIDvalue); } } |
30. Get the GUID of the current user:
1
2
3
4
5
6
|
function AlertGUIDofCurrentUser() { var UserGUID = Xrm.Page.context.getUserId(); if (UserGUID != null ) { alert(UserGUID); } } |
31. Get the Security Roles of the current user: (returns an array of GUIDs, note: my example reveals the first value in the array only)
1
2
3
|
function AlertRoles() { alert(Xrm.Page.context.getUserRoles()); } |
32. Determine the CRM server URL:
1
2
3
4
5
6
7
|
// Get the CRM URL var serverUrl = Xrm.Page.context.getServerUrl(); // Cater for URL differences between on premise and online if (serverUrl.match(/\/$/)) { serverUrl = serverUrl.substring(0, serverUrl.length - 1); } |
33. Refresh a Sub-Grid:
1
2
|
var targetgird = Xrm.Page.ui.controls.get( "target_grid" ); targetgird.refresh(); |
34. Change the default entity in the lookup window of a Customer or Regarding field: Note: I am setting the customerid field’s lookup window to offer Contacts (entityid 2) by default (rather than Accounts). I have also hardcoded the GUID of the default view I wish displayed in the lookup window.
1
2
3
4
5
|
function ChangeLookup() { document.getElementById( "customerid" ).setAttribute( "defaulttype" , "2" ); var ViewGUID= "A2D479C5-53E3-4C69-ADDD-802327E67A0D" ; Xrm.Page.getControl( "customerid" ).setDefaultView(ViewGUID); } |