Archive
Using Regular Expression and JScript to validate phone no format
Hi,
I got a requirement to validate a CRM field with “Indian Telephone Number” format (i.e., 040-1234567).
I opted to use regular expression and Jscript for format validation.
Below is the JScript function
function businessPhoneOnChange() {
var telephone = Xrm.Page.data.entity.attributes.get(“telephone1”);
// Regular expression with Indian Telephone format
var regExp= /^[0-9]\d{2,4}-\d{6,8}$/;
if (telephone) {
var phoneNumber = telephone.getValue();
if (phoneNumber.search(regExp) == -1) {
alert(“Invalid Phone number format”);
// Clear the field value
phoneNumber.setValue(“”);
}
}
}
- Add a webresource with this function to CRM
- Register “onchange” event of field with the above method
- Save & Publish
Hope it helps 🙂
Creating OrganizationServiceProxy in CRM2011 custom applications
Hi,
Below are the steps to instantiate “Organization Service Proxy” which can be used to consume CRM service and perform operations in a custom application
– Refer “Microsoft.Xrm.Sdk & Microsoft.Xrm.Sdk.Client” .dll’s to your custom application
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using System.Net.Security;
using System.ServiceModel.Description;
using System.Security.Cryptography.X509Certificates;
private Uri homeRealmUri = null;
private ClientCredentials credentials;
private Uri organizationUri;
private IOrganizationService service;
private OrganizationServiceProxy serviceProxy;
credentials = new ClientCredentials();
// If CRM On-Premise
// To use custom credentials pass user credentials
credentials.Windows.ClientCredential = new NetworkCredential( {userId},{ password},{ domain} );
// To use Default Credentials; Uncomment below line and comment above
// credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
// If CRM Online
credentials.UserName.UserName = “Office 365 ID”; // i.e., name@domain.onmicrosoft.com
credentials.UserName.Password = “Office 365 Password”;
// Use “https” if CRM is SSL configured
string orgUrl= “http://ServerName/OrganizationName/XRMServices/2011/Organization.svc”;
// Add this line if URL has “https” (i.e.,CRM is SSL configured)
if (!string.IsNullOrEmpty(orgUrl) && orgUrl.Contains(“https”)) {
ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain,
SslPolicyErrors sslPolicyErrors) { return true; };}
organizationUri = new Uri(orgUrl);
using (
serviceProxy =
new OrganizationServiceProxy(organizationUri, homeRealmUri, credentials, null))
{
// To impersonate set the GUID of CRM user here
serviceProxy.CallerId = {GUID of CRM User};
serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
service = serviceProxy;
}
Hope it helps 🙂
Reading Language Code (LCID) in CRM 2011
Hi,
Here is the JScript to get the LCID (Locale Id) of User & Organization Base Language
var currUserLcid = Xrm.Page.context.getUserLcid();
var orgLcid= Xrm.Page.context. getOrgLcid();
Below is the MSDN link contains list of LCID (Locale Id’s) of CRM 2011
Hope it helps 🙂
Deleting a record using OData & JQuery in CRM 2011
Hi,
Below is the script to delete record using OData & JScript
function deleteRecord(id, odataSetName) {
// Get Server URL
var serverUrl = Xrm.Page.context.getServerUrl();
//The OData end-point
var ODATA_ENDPOINT = “/XRMServices/2011/OrganizationData.svc”;
//Asynchronous AJAX function to Delete a CRM record using OData
$.ajax({
type: “POST”,
contentType: “application/json; charset=utf-8”,
datatype: “json”,
url: serverUrl + ODATA_ENDPOINT + “/” + odataSetName + “(guid'” + id + “‘)”,
beforeSend: function (XMLHttpRequest) {
//Specifying this header ensures that the results will be returned as JSON.
XMLHttpRequest.setRequestHeader(“Accept”, “application/json”);
//Specify the HTTP method DELETE to perform a delete operation.
XMLHttpRequest.setRequestHeader(“X-HTTP-Method”, “DELETE”);
},
success: function (data, textStatus, XmlHttpRequest) {
alert(“Record deleted successfully!!!!”);
},
error: function (XmlHttpRequest, textStatus, errorThrown) {
alert(“Error while deletion – “+errorThrown);
}
});
}
How Do I call this method :-
- To delete a “Account” record set account id & Odata set name and call the above method
var accountId = {}; //Set Account GUID
var odataSeName = “AccountSet”;
deleteRecord(accountId, odataSeName);
Hope it helps 🙂
Sending Email using Email Template in CRM 2011
Hi,
Here is the sample code to send an Email using Email template name.
Before start below are few keywords
- Template Name (i.e., Name of the Template)
- Regarding Id (i.e., GUID of the entity record which template associated with)
- Regarding Type (i.e., Logical name of the entity which template associated with)
- ActivityParty[] (i.e., Sender & Receivers Can be Users/Contacts/Accounts/Leads)
- IOrganizationService crmService
public void SendEmailUsingTemplate(IOrganizationService crmService,
ActivityParty[] fromParty, ActivityParty[] toParty,
string templateName,
Guid regardingId, string regardingType)
{
try
{
// Create e-mail message.
var email = new Email
{
To = toParty,
From = fromParty,
DirectionCode = true
};
if (!string.IsNullOrEmpty(templateName))
{
Guid templateId = Guid.Empty;
// Get Template Id by Name
Entity template = GetTemplateByName(crmService, templateName);
if (template != null && template.Id != null)
{
var emailUsingTemplateReq = new SendEmailFromTemplateRequest
{
Target = email.ToEntity<Entity>(),
TemplateId = template.Id,
RegardingId = regardingId,
RegardingType = regardingType
};
var emailUsingTemplateResp = (SendEmailFromTemplateResponse)crmService.Execute(emailUsingTemplateReq);
}
else
{
// “****No email template exists with the given name ****”);
}
}
}
catch (Exception ex)
{
throw;
}
}
private Entity GetTemplateByName(string title, IOrganizationService crmService)
{
var query = new QueryExpression();
query.EntityName = “template”;
var filter = new FilterExpression();
var condition1 = new ConditionExpression(“title”, ConditionOperator.Equal, new object[] { title });
filter.AddCondition(condition1);
query.Criteria = filter;
EntityCollection allTemplates = crmService.RetrieveMultiple(query);
Entity emailTemplate = null;
if (allTemplates.Entities.Count > 0) {
emailTemplate = allTemplates.Entities[0];
}
return emailTemplate;
}
How Do I call this method –
- Prepare From and To Users/Contacts/Accounts
- Pass Service,Template Name,Regarding details
// Prepare “From” activity parties
var from = new ActivityParty
{
PartyId = new EntityReference(SystemUser.EntityLogicalName, {GUID of User})
};
var fromParty = new[] { from };
// Prepare “To” activity parties
var to = new ActivityParty
{
PartyId = new EntityReference(SystemUser.EntityLogicalName, {GUID of User})
};
var toParty = new[] { to };
var orgProxy = new OrganizationServiceProxy(organizationUri, homeRealmUri, credentials, null);
IOrganizationService orgnaizationService = orgProxy;
Guid regardingntityId={GUID of record} // Ex – Guid of contact
string regardingEntityName = “contact” // Logical name ‘contact’
SendEmailUsingTemplate(orgnaizationService , fromParty, toParty, “templateName”, regardingntityId, regardingEntityName);
Hope it helps 🙂
Retrieve record using OData and JQuery in CRM 2011
Hi,
Below is the script to read a record using OData & JQuery
function retrieveRecord(id, odataSetName) {
// Get Server URL
var serverUrl = Xrm.Page.context.getServerUrl();
//The OData end-point
var ODATA_ENDPOINT = “/XRMServices/2011/OrganizationData.svc”;
//Asynchronous AJAX function to Retrieve a CRM record using OData
$.ajax({
type: “GET”,
contentType: “application/json; charset=utf-8”,
datatype: “json”,
url: serverUrl + ODATA_ENDPOINT + “/” + odataSetName + “(guid'” + id + “‘)”,
beforeSend: function (XMLHttpRequest) {
//Specifying this header ensures that the results will be returned as JSON.
XMLHttpRequest.setRequestHeader(“Accept”, “application/json”);
},
success: function (data, textStatus, XmlHttpRequest) {
readRecord(data, textStatus, XmlHttpRequest)
},
error: function (XmlHttpRequest, textStatus, errorThrown) {
alert(“Error – ” + errorThrown)
}
});
}
function readRecord(data, textStatus, XmlHttpRequest) {
alert(“Record read successfully!!”);
var account = data;
alert(“Name – ” + account.d.Name);
alert(“Id – ” + account.d.AccountId);
}
How do I call this method :-
- Below is the sample function to read Account
var accountId = “”; // Assign account GUID
var odataSetName = “AccountSet”;
retrieveRecord(accountId,odataSetName );
Hope it helps 🙂
Reading the GUID of record from CRM form URL
Hi,
Below are the steps to get the GUID of record from CRM form URL.
- In the form ribbon, click on Copy a Link button in the Collaborate group.
- Paste the URL on notepad.
- The ‘id’ parameter in the copied URL contains the encoded id value for the record.
- The brackets in the actual GUID “{” and “}” will be substituted with “%7B” and “%7D”, respectively.
- (i.e., Guid “{899D4FCF-F4D3-E011-9D26-00155DBA3819}”, comes as id=%7b 899D4FCF-F4D3-E011-9D26-00155DBA3819 %7d)
For example, in the below copied URL
The GUID is- 899D4FCF-F4D3-E011-9D26-00155DBA3819.
Hope it helps 🙂
Using JQuery and Json in Ribbon button’s function handler
Hi,
- In one of my CRM 2011 requirement, I had to update a record using ribbon button placed on CRM grid.
- I had written an update script which calls OData service using Json & JQuery. (link)
- But when I execute the function, I got “$ undefined” exception.
- I wondered since I already had “Json.js” & “JQuery.js” web resources added to my entity.
- After digging deeper, I came to know that, “JQuery.js” web resource is not getting loaded when my ribbon button’s function handler fired.
Fix :-
- I fixed the problem by loading “JQuery.js” web resource dynamically, before I call my update method.
- Below is the script to load the web resource’s
var JScriptWebResourceUrl = “../WebResources/new_JQuery”;
var xmlHttp = new ActiveXObject(“Microsoft.XMLHTTP”);
xmlHttp.open(“GET”, JScriptWebResourceUrl, false);
xmlHttp.send();
eval(xmlHttp.responseText);
Hope it helps 🙂
Update record using OData and JQuery in CRM 2011
Hi,
Below is the script to update a record using OData & JQuery.
I am updating an Account record in this example.
function updateRecord(id, entityObject, odataSetName) {
var jsonEntity = window.JSON.stringify(entityObject);
// Get Server URL
var serverUrl = Xrm.Page.context.getServerUrl();
//The OData end-point
var ODATA_ENDPOINT = “/XRMServices/2011/OrganizationData.svc”;
//Asynchronous AJAX function to Update a CRM record using OData
$.ajax({
type: “POST”,
contentType: “application/json; charset=utf-8”,
datatype: “json”,
data: jsonEntity,
url: serverUrl + ODATA_ENDPOINT + “/” + odataSetName + “(guid'” + id + “‘)”,
beforeSend: function (XMLHttpRequest) {
//Specifying this header ensures that the results will be returned as JSON.
XMLHttpRequest.setRequestHeader(“Accept”, “application/json”);
//Specify the HTTP method MERGE to update just the changes you are submitting.
XMLHttpRequest.setRequestHeader(“X-HTTP-Method”, “MERGE”);
},
success: function (data, textStatus, XmlHttpRequest) {
alert(“Updated successfully”);
},
error: function (XmlHttpRequest, textStatus, errorThrown) {
if (XmlHttpRequest && XmlHttpRequest.responseText) {
alert(“Error while updating ” + odataSetName+ ” ; Error – ” + XmlHttpRequest.responseText);
}
}
});
}
How do I update my Account record :-
- Prepare an account object and call above method
var accountId=””; /*Set Account record GUID*/
//Create an object to represent an Account record and set properties
var account = new Object();
account.Name = “Updated”;
account.Telephone1 = “1234567890”;
account.AccountNumber = “Updated-123”;
account.EmailAddress1 = rajeevpentyala@live.com;
// Set Date field (Here ‘new_DateField’ is my custom Account field)
var myDate = new Date();
myDate.setFullYear(1980, 12, 29);
account.new_DateField= myDate;
***Imp Note :-
- Provide property names in Pascal convention (Ex – AccountNumber,EmailAddress1 etc…);
- Tip is, if you have OData Query Designer installed, copy the column names of your entity and paste it here.
//Call above function by passing below Parameters
// (i) Update record GUID (i.e.,account Id this case)
// (ii) Entity Object (i.e.,account in this case)
//(iii) Entity Set (i.e., Accountset)
updateRecord(accountId, account, “AccountSet”);
Note :- Please make sure to add “Json2.js” & “jquery1.4.1.min.js” helper script files as webresources
Hope it helps 🙂
Assign record using JScript in CRM 2011
Hi,
Below is the Jscript to assign a record to particular User using SOAP.
function AssignRecord(Assignee, Target, entityName) {
var request = “<s:Envelope xmlns:s=\”http://schemas.xmlsoap.org/soap/envelope/\”>”;
request += “<s:Body>”;
request += “<Execute xmlns=\”http://schemas.microsoft.com/xrm/2011/Contracts/Services\””;
request += ” xmlns:i=\”http://www.w3.org/2001/XMLSchema-instance\”>”;
request += “<request i:type=\”b:AssignRequest\””;
request += ” xmlns:a=\”http://schemas.microsoft.com/xrm/2011/Contracts\””;
request += ” xmlns:b=\”http://schemas.microsoft.com/crm/2011/Contracts\”>”;
request += “<a:Parameters xmlns:c=\”http://schemas.datacontract.org/2004/07/System.Collections.Generic\”>”;
request += “<a:KeyValuePairOfstringanyType>”;
request += “<c:key>Target</c:key>”;
request += “<c:value i:type=\”a:EntityReference\”>”;
request += “<a:Id>” + Target + “</a:Id>”;
request += “<a:LogicalName>” + entityName + “</a:LogicalName>”;
request += “<a:Name i:nil=\”true\” />”;
request += “</c:value>”;
request += “</a:KeyValuePairOfstringanyType>”;
request += “<a:KeyValuePairOfstringanyType>”;
request += “<c:key>Assignee</c:key>”;
request += “<c:value i:type=\”a:EntityReference\”>”;
request += “<a:Id>” + Assignee + “</a:Id>”;
request += “<a:LogicalName>systemuser</a:LogicalName>”;
request += “<a:Name i:nil=\”true\” />”;
request += “</c:value>”;
request += “</a:KeyValuePairOfstringanyType>”;
request += “</a:Parameters>”;
request += “<a:RequestId i:nil=\”true\” />”;
request += “<a:RequestName>Assign</a:RequestName>”;
request += “</request>”;
request += “</Execute>”;
request += “</s:Body>”;
request += “</s:Envelope>”;
// Get server URL
var serverUrl = Xrm.Page.context.getServerUrl();
var req = new XMLHttpRequest();
req.open(“POST”, serverUrl, true)
// Responses will return XML. It isn’t possible to return JSON.
req.setRequestHeader(“Accept”, “application/xml, text/xml, */*”);
req.setRequestHeader(“Content-Type”, “text/xml; charset=utf-8”);
req.setRequestHeader(“SOAPAction”, “http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute”);
req.onreadystatechange = function () { assignResponse(req); };
req.send(request);
}
// This function gets called after the execution
function assignResponse(req) {
if (req.readyState == 4) {
if (req.status == 200) {
alert(“Success !!!”);
}
else {
alert(“Error – ” + req.responseXML);
}
}
}
How Do I Call this function :-
- Pass User Id, Record Id and Entity name to the function
var userId = “” // GUID of user whome to assign the record
var recordId = “” // GUID of record you want to assign
var entityName = “” // Entity name the record
AssignRecord(userId,recordId,entityName);
Hope it helps 🙂