//utility
function MischiefMayhemSOAP(xmlSoapBody, soapActionHeader) {
var xmlReq = "<?xml version='1.0' encoding='utf-8'?>"
+ "<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'"
+ " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'"
+ " xmlns:xsd='http://www.w3.org/2001/XMLSchema'>"
+ GenerateAuthenticationHeader()
+ " <soap:Body>"
+ xmlSoapBody
+ " </soap:Body>"
+ "</soap:Envelope>";
var httpObj = new ActiveXObject("Msxml2.XMLHTTP");
httpObj.open('POST', '/mscrmservices/2007/crmservice.asmx', false);
httpObj.setRequestHeader('SOAPAction', soapActionHeader);
httpObj.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
httpObj.setRequestHeader('Content-Length', xmlReq.length);
httpObj.send(xmlReq);
var resultXml = httpObj.responseXML;
var errorCount = resultXml.selectNodes('//error').length;
if (errorCount != 0) {
var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
alert("The following error was encountered: " + msg);
return null;
} else {
return resultXml;
}
}
// retrieve by entityId
function RetrieveRecord(entityName, entityId, attrArray) {
var xmlSoapBody = ""
+ " <Retrieve xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"
+ " <entityName>" + entityName + "</entityName>"
+ " <id>" + entityId + "</id>"
+ " <columnSet xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:ColumnSet'>"
+ " <q1:Attributes>";
for (index in attrArray) {
xmlSoapBody += " <q1:Attribute>" + attrArray[index] + "</q1:Attribute>";
}
xmlSoapBody += ""
+ " </q1:Attributes>"
+ " </columnSet>"
+ " </Retrieve>";
var resultXml = MischiefMayhemSOAP(xmlSoapBody, 'http://schemas.microsoft.com/crm/2007/WebServices/Retrieve');
if (resultXml != null) {
var resultArray = new Array();
for (index in attrArray) {
if (resultXml.selectSingleNode("//q1:" + attrArray[index]) != null) {
resultArray[index] = resultXml.selectSingleNode("//q1:" + attrArray[index]).nodeTypedValue;
} else {
resultArray[index] = null;
}
}
return resultArray;
} else {
return null;
}
}
//retrieve by xml criteria
function RetrieveMultiple(entityName, attrArray, distinct, criteriaXml) {
var xmlSoapBody = ""
+ " <RetrieveMultiple xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"
+ " <query xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:QueryExpression'>"
+ " <q1:EntityName>" + entityName + "</q1:EntityName>"
+ " <q1:ColumnSet xsi:type='q1:ColumnSet'>"
+ " <q1:Attributes>";
for (index in attrArray) {
xmlSoapBody += " <q1:Attribute>" + attrArray[index] + "</q1:Attribute>";
}
xmlSoapBody += ""
+ " </q1:Attributes>"
+ " </q1:ColumnSet>"
+ " <q1:Distinct>" + distinct + "</q1:Distinct>"
+ criteriaXml
+ " </query>"
+ " </RetrieveMultiple>";
var resultXml = MischiefMayhemSOAP(xmlSoapBody, 'http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple');
if (resultXml != null) {
var resultArray = new Array();
var entityNodes = resultXml.selectNodes("//RetrieveMultipleResult/BusinessEntities/BusinessEntity");
if (entityNodes.length > 0) {
for (var index = 0; index < entityNodes.length; index++) {
var entityNode = entityNodes[index];
resultArray[index] = new Array();
// on the 2 selectsinglenode lines with ./ (you could drop the ./ altogether if you wanted)
for (attrIndex in attrArray) {
if (entityNode.selectSingleNode("q1:" + attrArray[attrIndex]) != null) {
resultArray[index][attrIndex] = entityNode.selectSingleNode("q1:" + attrArray[attrIndex]).nodeTypedValue;
} else {
resultArray[index][attrIndex] = null;
}
}
}
return resultArray;
} else {
return null;
}
} else {
return null;
}
}
Tuesday, October 11, 2011
CRM 4.0 - Call Microsoft dynamics CRM Service through Javascript to retrieve records (crm 4.0/2011)
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment