|
|
#1 |
|
Участник
|
На Форму, на событие OnLoad поместил скрипт:
Код: 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://srv/mscrmservices/2006/WebServices`]' + entityName + '[/entityName]' + '\r\n' +
' [id xmlns=`http://srv/mscrmservices/2006/WebServices`]' + entytiId + '[/id]' + '\r\n' +
' [columnSet xmlns=`http://srv/mscrmservices/2006/WebServices` xmlns:q=`http://srv/mscrmservicesa/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://srv/mscrmservices/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;
}Код: alert(GetAttributeValueByEntityId('account', 'CAC2A1FB-0CD6-DC11-828D-00151722E585', 'name'));Код: --------------------------- Сообщение с веб-страницы --------------------------- <?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"> <soap:Body> <soap:Fault> <faultcode>soap:Client</faultcode> <faultstring>System.Web.Services.Protocols.SoapException: Сервер не распознал заголовок HTTP SOAPAction: http://srv/mscrmservices/2006/WebServices/Retrieve. at System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest() at System.Web.Services.Protocols.SoapServerProtocol.Initialize() at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)</faultstring> <detail /> </soap:Fault> </soap:Body> </soap:Envelope> --------------------------- ОК --------------------------- |
|
|
|
|
#2 |
|
Moderator
|
Так точно,сер! Ваш уродливый скрипт написан под CRM 3.0 и не будет работать по 4.0!
p.s. Вы не в support пишите. Будьте вежливы и может быть получите хороший ответ. p.p.s. В SDK есть несколько примеров обращений к веб сервисам системы через JavaScript. Там же рассказывается как правильно формировать заголовок запроса.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#3 |
|
Участник
|
Цитата:
Сообщение от Артем Enot Грунин
Так точно,сер! Ваш уродливый скрипт написан под CRM 3.0 и не будет работать по 4.0!
p.s. Вы не в support пишите. Будьте вежливы и может быть получите хороший ответ. p.p.s. В SDK есть несколько примеров обращений к веб сервисам системы через JavaScript. Там же рассказывается как правильно формировать заголовок запроса. Но вашему совету последую, поищу в SDK. |
|
|
|
|
#4 |
|
Участник
|
Спасибо Артем Enot Грунин, решил проблему, проблема была в незнании
![]() Вот так всё работает: Код: 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));
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;
};
crmForm.all.new_orderyrnaz.DataValue = GetAttributeValueByEntityId('account', crmForm.all.customerid.DataValue[0].id, 'new_yrnaz') |
|
|
|
|
#5 |
|
Moderator
|
Не за что, вы все равно не воспользовались моим советом, верно?
![]() По сути вы поправили заголовок запроса но в нем все равно используются точки совместимости с 3.0: crm/2006/WebServices/ Код: xmlHttpRequest.setRequestHeader('SOAPAction','http://schemas.microsoft.com/crm/2006/WebServices/Retrieve');Код: // Prepare variables for a contact to retrieve.
var contactid = "4696f8cb-9a1c-dd11-ad3a-0003ff9ee217";
var authenticationHeader = GenerateAuthenticationHeader();
// Prepare the SOAP message.
var xml = "<?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'>"+
authenticationHeader+
"<soap:Body>"+
"<Retrieve xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+
"<entityName>contact</entityName>"+
"<id>"+contactid+"</id>"+
"<columnSet xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:ColumnSet'>"+
"<q1:Attributes>"+
"<q1:Attribute>fullname</q1:Attribute>"+
"</q1:Attributes>"+
"</columnSet>"+
"</Retrieve>"+
"</soap:Body>"+
"</soap:Envelope>";
// Prepare the xmlHttpObject and send the request.
var xHReq = new ActiveXObject("Msxml2.XMLHTTP");
xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
xHReq.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Retrieve");
xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xHReq.setRequestHeader("Content-Length", xml.length);
xHReq.send(xml);
// Capture the result.
var resultXml = xHReq.responseXML;
// Check for errors.
var errorCount = resultXml.selectNodes('//error').length;
if (errorCount != 0)
{
var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
alert(msg);
}
// Display the retrieved value.
else
{
alert(resultXml.selectSingleNode("//q1:fullname").nodeTypedValue);
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#6 |
|
Участник
|
Цитата:
![]() http://msdn.microsoft.com/en-us/library/cc677076.aspx А вот тут у меня возникает ошибка, не стал в ней разбираться, пропустил этот шаг, вроде все работает. |
|
|
|
|
#7 |
|
Moderator
|
Что ж, тогда уточняйте, пожалуйста, в вопросе номер версии версии. Дело в том, что по тройке не часто спрашивают. На дворе уже пятая версия.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|