Showing posts with label crm. Show all posts
Showing posts with label crm. Show all posts

Wednesday, December 23, 2009

MS CRM 4.0 - Call RetrieveMultiple webservice in JavaScript helper function

I've developed a function to call the CRM RetrieveMultiple webservice in JavaScript without having to write the XML yourselve: "CallRetrieveMultipleWebService".

The function generates the XML for you. You just have to pass the entity to query, an array of columns to get, the filter operator and the array of conditions.

Here's the function with an example how to call the webservice to find contacts with a first- and lastname as conditions.




function CallRetrieveMultipleWebService(queryEntityName, queryColumnSetAttributes, queryFilterOperator, conditionArray) {
if (queryEntityName != null && queryColumnSetAttributes != null) {
var columnSetAttributesString = "";
for (var i = 0; i < queryColumnSetAttributes.length; i++) {
columnSetAttributesString += "" + queryColumnSetAttributes[i] + "";
}
var conditionsString = "";
if (conditionArray != null) {
conditionsString = "";
for (var i = 0; i < conditionArray.length; i++) {
conditionsString += "";
conditionsString += "" + conditionArray[i][0] + "";
conditionsString += "" + conditionArray[i][1] + "";
conditionsString += "";
var valuesArray = conditionArray[i][2];
for (var j = 0; j < valuesArray.length; j++) {
conditionsString += "" + valuesArray[j] + "";
}
conditionsString += "
";
conditionsString += "
";
}
conditionsString += "
";
}

var xml = "" +
"" +
"" +
GenerateAuthenticationHeader() +
" " +
" " +
" " +
" " + queryEntityName + "" +
" " +
" " +
columnSetAttributesString +
"
" +
"
" +
"" +
"" + queryFilterOperator + "" +
conditionsString +
"
" +
"
" +
"
" +
"
" +
"
" +
"";

var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
xmlHttpRequest.send(xml);
var resultXml = xmlHttpRequest.responseXML;
// Check for errors.
var errorCount = resultXml.selectNodes('//error').length;
if (errorCount != 0) {
var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
alert(msg);
}
// return results
else {
return resultXml;
}
}
}

//function to find a contact, using the CallRetrieveMultipleWebService function:
function FindContact(firstnameToSearch, lastnameToSearch)
{
//define the entity name to query
var queryEntityName = "contact";
//set up the array of columns to get
var queryColumnSetAttributes = new Array();
queryColumnSetAttributes[0] = "contactid";
queryColumnSetAttributes[1] = "telephone1";
//define the filter operator
var queryFilterOperator = "And";
//set up the array of confitions in the query
var queryConditions = new Array();
//define 2 conditions: add 2 items to the array:
queryConditions[0] = new Array("firstname", "Equal", new Array(firstnameToSearch));
queryConditions[1] = new Array("lastname", "Equal", new Array(lastnameToSearch));
//Call function CallRetrieveMultipleWebService
var resultXml = CallRetrieveMultipleWebService(queryEntityName, queryColumnSetAttributes, queryFilterOperator, queryConditions);
var teleponeValueToSet = null;
var results = resultXml.getElementsByTagName('BusinessEntity');
if (results.length > 0) {
//do something with the found contacts
//example: show an alert with the telephone number of the first found contact
var telephone = results[0].selectSingleNode('./q1:telephone1') == null ? null : results[0].selectSingleNode('./q1:telephone1').nodeTypedValue;
if (telephone != null) {
alert(telephone);
}
}
else {
alert('No contact ' + firstnameToSearch + ' ' + lastnameToSearch + ' found.');
}
}

Tuesday, December 8, 2009

MS CRM 4.0: Publish workflow not working after updating to Rollup 7

After updating my CRM 4.0 software to Rollup 7, the publishing of workflows failed.

Apparently, this is a known issue. Found the solution in this forum: https://community.dynamics.com/forums/t/18135.aspx

Saturday, November 21, 2009

MS CRM: Insufficient permissions Assign Case

When you get a "Insufficient permissions" message when you assign a case, check that your current user's permission roles has Read permissions on Queue.

When you get a message about user permissions, you can find out what permissions are needed for the action you want to do by doing the steps described on http://support.microsoft.com/kb/953962