Функция использует стандартный метод Retrieve веб-сервиса CrmService.

Этот код помещается в OnLoad() формы. Позволяет выбрать любой атрибут практически из любой сущности (не работает с системными сущностями: Product, Systemuser…).

Для этого необходимо передавать имя сущности, ее гуид и имя атрибута, который необходимо получить. Под гуидом сущности понимается guid записи.

Исходный код:

function GetAttributeValueByEntityId(entityName, entytiId, attributeName)
{
var xml = » +
‘[?xml version=`1.0` encoding=`utf-8`?]‘ + ‘\r\n’ +
‘[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`]‘ + ‘\r\n’ +
‘ [soap:Body]‘ + ‘\r\n’ +
‘ [entityName xmlns=`http://schemas.microsoft.com/crm/2006/WebServices`]‘ + entityName + ‘[/entityName]‘ + ‘\r\n’ +
‘ [id xmlns=`http://schemas.microsoft.com/crm/2006/WebServices`]‘ + entytiId + ‘[/id]‘ + ‘\r\n’ +
‘ [columnSet xmlns=`http://schemas.microsoft.com/crm/2006/WebServices` xmlns:q=`http://schemas.microsoft.com/crm/2006/Query` xsi:type=`q:ColumnSet`]‘ + ‘\r\n’ +
‘ [q:Attributes]‘ + ‘\r\n’ +
‘ [q:Attribute]‘ + attributeName + ‘[/q:Attribute]‘ + ‘\r\n’ +
‘ [/q:Attributes]‘ + ‘\r\n’ +
‘ [/columnSet]‘ + ‘\r\n’ +
‘ [/soap:Body]‘ + ‘\r\n’ +
‘[/soap:Envelope]‘ +
»;
xml = xml.replace(/\[/gi, String.fromCharCode(60));
xml = xml.replace(/\]/gi, String.fromCharCode(62));
xml = xml.replace(/\`/gi, String.fromCharCode(34));
var xmlHttpRequest = new ActiveXObject(‘Msxml2.XMLHTTP’);
xmlHttpRequest.Open(‘POST’, ‘/mscrmservices/2006/CrmService.asmx’, false);
xmlHttpRequest.setRequestHeader(‘SOAPAction’,'http://schemas.microsoft.com/crm/2006/WebServices/Retrieve’);
xmlHttpRequest.setRequestHeader(‘Content-Type’, ‘text/xml; charset=utf-8′);
xmlHttpRequest.setRequestHeader(‘Content-Length’, xml.length);
xmlHttpRequest.send(xml);
var doc = xmlHttpRequest.responseXML;
// alert(xmlHttpRequest.responseText);
var retValue = »;
if (doc.selectSingleNode(‘//RetrieveResult/’ + attributeName) != null) retValue = doc.selectSingleNode(‘//RetrieveResult/’ + attributeName).text;
return retValue;
}

Пример вызова :

brandGuid = GetAttributeValueByEntityId(‘new_productconsumption’, crmForm.all.new_productconsumption.DataValue[0].id, ‘new_brand’);

  • new_productconsumption – моя сущность
  • crmForm.all.new_productconsumption.DataValue[0].id – на форме есть лукап, следовательно получаю гуид записи
  • new_brand – получаю необходимый мне аттрибут

UPD: Метод Retrieve на javascript для получения атрибута сущности в MS CRM 4.0