17.10.2008, 12:28 | #1 |
Участник
|
Получение атрибута из другого объекта
Добрый день!
Испробовал множество вариантов, результат один, помогите разобраться, есть код, который на onChange по значению поля берет атрибуты выбраного объекта. Т.е. Есть код, который на onChange по значению поля берет атрибуты выбраного объекта., т.е. есть некая форма Incident, на ней есть значение типа lookup (contractdetailid), с выбором того или иного объекта - строки контракта (contractdetail). Этот объект имеет атрибут new_incidenttime. Код на onChange: Код: var oTime = crmForm.all.contractdetailid; if (oTime.DataValue != null && oTime.DataValue[0] != null) { var Srok = GetAttributeValueByEntityId('contractdetail', oTime.DataValue[0].id, 'new_incidenttime'); } 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', 'http://crm/Test/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; var retValue = ''; if (doc.selectSingleNode('//RetrieveResult/' + attributeName) != null) retValue = doc.selectSingleNode('//RetrieveResult/' + attributeName).text; return retValue; } Код: ... <faultstring>Server was unable to process request.</faultstring> <detail> <error> <code>0x80040203</code> <description>Url does not contain MSCRMServices</description> <type>Platform</type> </error> </detail> ... |
|
17.10.2008, 14:54 | #2 |
Moderator
|
В описании ошибки: http://msdn.microsoft.com/en-us/library/ms936570.aspx
сказано Invalid argument. Проверьте правильность написания имен ваших атрибутов
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
17.10.2008, 16:37 | #3 |
Участник
|
Проверьте перед посылкой xml, он у вас вообще валидный получился?
|
|
17.10.2008, 18:55 | #4 |
Участник
|
Цитата:
xmlHttpRequest.send(xml) не проходит.. Весьма странно, сам xml запроса особо не отличается даже от официального примера, атрибуты 10 раз перепроверены.. может быть проблема с new ActiveXObject('Msxml2.XMLHTTP')? У нас стоят IE7ые, хотя в принципе на 6й тоже пробовали, да и другие варианты ругаются на незнакомые объекты. Сам 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"> <soap:Body> <entityName xmlns="http://schemas.microsoft.com/crm/2006/WebServices">contractdetail</entityName> <id xmlns="http://schemas.microsoft.com/crm/2006/WebServices">{35A171E5-EE99-DD11-8F66-00155D00C913}</id> <columnSet xmlns="http://schemas.microsoft.com/crm/2006/WebServices" xmlns:q="http://schemas.microsoft.com/crm/2006/Query" xsi:type="q:ColumnSet"> <q:Attributes> <q:Attribute>new_incidenttime</q:Attribute> </q:Attributes> </columnSet> </soap:Body> </soap:Envelope> |
|
20.10.2008, 09:46 | #5 |
Участник
|
Разобрался, данная ошибка, видимо, была связана с
xmlHttpRequest.Open('POST', 'http://crm/Test/mscrmservices/2006/CrmService.asmx', false); прописал относительный путь /mscrmservices/2006/CrmService.asmx, видно по крайней мере что он пытается что то сделать, но всплыла очередная проблема - требует авторизации на сервере при каждом запросе. Адрес в IE прописан в доверенную зону в настройках боаузера, но это ничего не меняет. Видимо какие то доступы должен дать администратор на самом сервере? |
|
20.10.2008, 17:01 | #6 |
Участник
|
Насколько я понял, у вас CRM 4.0
Почему бы в данном случае не обращаться к 2007-м веб-сервисам? Там при обращении указывается authenticationHeader и проблем с авторизацией не должно быть. Вот, почитайте здесь: http://msdn.microsoft.com/en-us/library/cc677076.aspx И ещё: IMHO, в скрипте удобнее использовать Fetch, а не Retrieve. |
|
|
За это сообщение автора поблагодарили: Казарин Александр (1). |
20.10.2008, 18:08 | #7 |
Участник
|
Большое спасибо за помощь, в особенности за ссылку. Все работает. Не сомневаюсь что Fetch удобнее, но учитывая время моего знакомства с CRM(<недели) пока ничего не могу сказать на эту тему. Как обычно бывает кто то съездил на курсы, приехал - нам это надо, разбирайся, срок 3 дня
Пойду познакомлюсь с Fetch-ем |
|