AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.10.2008, 12:28   #1  
Казарин Александр is offline
Казарин Александр
Участник
 
58 / 10 (1) +
Регистрация: 17.10.2008
Адрес: Сыктывкар
Получение атрибута из другого объекта
Добрый день!

Испробовал множество вариантов, результат один, помогите разобраться, есть код, который на 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;
}
Но в итоге xmlHttpRequest.responseXML получает XML-ошибку в виде:
Код:
...
<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  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
В описании ошибки: 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  
Гуревич Денис is offline
Гуревич Денис
Участник
Лучший по профессии 2009
 
228 / 67 (3) ++++
Регистрация: 04.08.2008
Адрес: Москва
Проверьте перед посылкой xml, он у вас вообще валидный получился?
Старый 17.10.2008, 18:55   #4  
Казарин Александр is offline
Казарин Александр
Участник
 
58 / 10 (1) +
Регистрация: 17.10.2008
Адрес: Сыктывкар
Цитата:
Сообщение от Гуревич Денис Посмотреть сообщение
Проверьте перед посылкой xml, он у вас вообще валидный получился?
Да, действительно
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  
Казарин Александр is offline
Казарин Александр
Участник
 
58 / 10 (1) +
Регистрация: 17.10.2008
Адрес: Сыктывкар
Разобрался, данная ошибка, видимо, была связана с
xmlHttpRequest.Open('POST', 'http://crm/Test/mscrmservices/2006/CrmService.asmx', false);

прописал относительный путь /mscrmservices/2006/CrmService.asmx, видно по крайней мере что он пытается что то сделать, но всплыла очередная проблема - требует авторизации на сервере при каждом запросе. Адрес в IE прописан в доверенную зону в настройках боаузера, но это ничего не меняет.

Видимо какие то доступы должен дать администратор на самом сервере?
Старый 20.10.2008, 17:01   #6  
Гуревич Денис is offline
Гуревич Денис
Участник
Лучший по профессии 2009
 
228 / 67 (3) ++++
Регистрация: 04.08.2008
Адрес: Москва
Насколько я понял, у вас CRM 4.0
Почему бы в данном случае не обращаться к 2007-м веб-сервисам?
Там при обращении указывается authenticationHeader и проблем с авторизацией не должно быть.
Вот, почитайте здесь:
http://msdn.microsoft.com/en-us/library/cc677076.aspx

И ещё:
IMHO, в скрипте удобнее использовать Fetch, а не Retrieve.
За это сообщение автора поблагодарили: Казарин Александр (1).
Старый 20.10.2008, 18:08   #7  
Казарин Александр is offline
Казарин Александр
Участник
 
58 / 10 (1) +
Регистрация: 17.10.2008
Адрес: Сыктывкар
Большое спасибо за помощь, в особенности за ссылку. Все работает. Не сомневаюсь что Fetch удобнее, но учитывая время моего знакомства с CRM(<недели) пока ничего не могу сказать на эту тему. Как обычно бывает кто то съездил на курсы, приехал - нам это надо, разбирайся, срок 3 дня

Пойду познакомлюсь с Fetch-ем
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Присвоение одного атрибута сущности значения другого атрибута связанной сущности vital.mih Dynamics CRM: Функционал 38 08.09.2010 10:53
Как заполнять поле из нового атрибута в объекте. Sederick Dynamics CRM: Функционал 7 06.03.2009 12:42
Создание нового объекта sanych_81 Dynamics CRM: Функционал 9 26.11.2008 17:12
Создание объекта сущности из другого объекта! SnSS Dynamics CRM: Разработка 5 29.05.2008 13:38
Rollup 2 и обкрытие атрибута сущности для кастомизации AHAPX1CT Dynamics CRM: Администрирование 1 23.08.2007 13:45

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:09.