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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.05.2011, 12:59   #1  
KKNDSTER is offline
KKNDSTER
Участник
 
41 / 10 (1) +
Регистрация: 24.11.2008
Да, поле заполненно. Спасибо большое за помощь.
Воспользовался другим скриптом - Заработало.:-) Ух и на маялся.
На всякий случай выкладываю.
Да поле заполненно. Воспользовался другим скриптом заработало :-) (Ух) На всякий случай выкладываю.


function GetAttributeValueFromID(sEntityName, sGUID, sAttributeName, isTextField) {
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\">" +
GenerateAuthenticationHeader() +
" <soap:Body>" +
" <Execute xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
" <Request xsi:type=\"RetrieveRequest\" ReturnDynamicEntities=\"false\">" +
" <Target xsi:type=\"TargetRetrieveDynamic\">" +
" <EntityName>" + sEntityName + "</EntityName>" +
" <EntityId>" + sGUID + "</EntityId>" +
" </Target>" +
" <ColumnSet xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:ColumnSet\">" +
" <q1:Attributes>" +
" <q1:Attribute>" + sAttributeName + "</q1:Attribute>" +
" </q1:Attributes>" +
" </ColumnSet>" +
" </Request>" +
" </Execute>" +
" </soap:Body>" +
"</soap:Envelope>" +
"";
var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/200...rvices/Execute");
xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
xmlHttpRequest.send(xml);
var result = null;
if(isTextField) {
result = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName).text;
} else {
result = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName).getAttribute('name');
}
if (result == null) {
return '';
} else
return result;
}

crmForm.all.new_serialnumber.DataValue = GetAttributeValueFromID("new_nomenclaturalposition", crmForm.all.new_nomenclaturashippinglin.DataValue[0].id, "new_serialnumber", "isTextField");
Старый 23.12.2011, 11:06   #2  
mistah is offline
mistah
Участник
 
169 / 13 (1) ++
Регистрация: 11.11.2011
Адрес: Коньково
товарищи!
подскажите, пожалуйста, почему при пустом значении поля, из которого берем значение(и подставляем в нужное поле связанной сущности), JS выдает ошибку

Ошибка: требуется объект.

условие проверки результата null ли он или нет имеется, но, видимо, скрипту необходимо непустое значение того поля, из которого берутся данные.

ещё какое-то условие нужно добавить?

спасибо!

код:

Код:
function Form_onload()
{
alert(GetAttributeValueFromID("new_competitormaterial", crmForm.all.new_materialid.DataValue[0].id, "new_links", "isTextField"));
}

function GetAttributeValueFromID(sEntityName, sGUID, sAttributeName, isTextField)
{ 
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\">" +
GenerateAuthenticationHeader() +
" <soap:Body>" +
" <Execute xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
" <Request xsi:type=\"RetrieveRequest\" ReturnDynamicEntities=\"false\">" +
" <Target xsi:type=\"TargetRetrieveDynamic\">" +
" <EntityName>" + sEntityName + "</EntityName>" +
" <EntityId>" + sGUID + "</EntityId>" +
" </Target>" +
" <ColumnSet xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:ColumnSet\">" +
" <q1:Attributes>" +
" <q1:Attribute>" + sAttributeName + "</q1:Attribute>" +
" </q1:Attributes>" +
" </ColumnSet>" +
" </Request>" +
" </Execute>" +
" </soap:Body>" +
"</soap:Envelope>" +
"";
var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Execute");
xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
xmlHttpRequest.send(xml); 
var result = null;
if(isTextField) {
result = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName).text;
} else {
result = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName).getAttribute('name');
} 
if (result == null) {
return '';
} else
return result;
}
Старый 23.12.2011, 14:03   #3  
griefon is offline
griefon
Участник
 
131 / 52 (2) ++++
Регистрация: 07.12.2010
Адрес: down under
Не очень понятно, где на какой строке у вас возникает ошибка, но в любом случае стоит делать вот так:

X++:
function Form_onload()
{
    if (crmForm.all.new_materialid.DataValue != null)
    {
        alert(GetAttributeValueFromID("new_competitormaterial", crmForm.all.new_materialid.DataValue[0].id, "new_links", "isTextField"));
    }
}
За это сообщение автора поблагодарили: mistah (1).
Старый 23.12.2011, 14:29   #4  
mistah is offline
mistah
Участник
 
169 / 13 (1) ++
Регистрация: 11.11.2011
Адрес: Коньково
Цитата:
Сообщение от griefon Посмотреть сообщение
Не очень понятно, где на какой строке у вас возникает ошибка, но в любом случае стоит делать вот так:

X++:
function Form_onload()
{
    if (crmForm.all.new_materialid.DataValue != null)
    {
        alert(GetAttributeValueFromID("new_competitormaterial", crmForm.all.new_materialid.DataValue[0].id, "new_links", "isTextField"));
    }
}
Код:
griefon
спасибо!
это проверка заполнено ли поле лукапа на форме сущности1, что тоже, кстати, надо было добавить!
а у меня проблема была в получении данных из поля с формы связанной сущности2 - если оно не заполнено - возвращалась вышеупомянутая ошибка об объекте.
иначе говоря, если значение у sAttributeName не содержит данных/равно null.
сделал так:

X++:
function Form_onload()
{
  if (crmForm.all.new_materialid.DataValue != null)
    {
        alert(GetAttributeValueFromID("new_competitormaterial", crmForm.all.new_materialid.DataValue[0].id, "new_links", "isTextField"));
    }    
}

function GetAttributeValueFromID(sEntityName, sGUID, sAttributeName, isTextField)
{
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\">" +
GenerateAuthenticationHeader() +
" <soap:Body>" +
" <Execute xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
" <Request xsi:type=\"RetrieveRequest\" ReturnDynamicEntities=\"false\">" +
" <Target xsi:type=\"TargetRetrieveDynamic\">" +
" <EntityName>" + sEntityName + "</EntityName>" +
" <EntityId>" + sGUID + "</EntityId>" +
" </Target>" +
" <ColumnSet xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:ColumnSet\">" +
" <q1:Attributes>" +
" <q1:Attribute>" + sAttributeName + "</q1:Attribute>" +
" </q1:Attributes>" +
" </ColumnSet>" +
" </Request>" +
" </Execute>" +
" </soap:Body>" +
"</soap:Envelope>" +
"";
var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Execute");
xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
xmlHttpRequest.send(xml); 
var result = null;
var new_v = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName);
if(new_v != null)
  {
  if(isTextField) 
    {
      result = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName).text;
    } 
  else 
    {
      result = xmlHttpRequest.responseXML.selectSingleNode("//q1:" + sAttributeName).getAttribute('name');
    } 
  }
if (result == null) 
  {
    return '';
  } 
else
return result;
}
Старый 23.12.2011, 15:06   #5  
Артем 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
Цитата:
Сообщение от mistah Посмотреть сообщение
товарищи!
подскажите, пожалуйста, почему при пустом значении поля, из которого берем значение(и подставляем в нужное поле связанной сущности), JS выдает ошибку

Ошибка: требуется объект.
Скорее всего вы неправильно указываете имя узла XML, потому выбор selectSingleNode(xpath) возращает вам null, а вы спрашиваете у него nodeValue.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
За это сообщение автора поблагодарили: mistah (1).
Старый 26.12.2011, 13:43   #6  
mistah is offline
mistah
Участник
 
169 / 13 (1) ++
Регистрация: 11.11.2011
Адрес: Коньково
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Скорее всего вы неправильно указываете имя узла XML, потому выбор selectSingleNode(xpath) возращает вам null, а вы спрашиваете у него nodeValue.
Артем
скрипт ошибок больше не выдает)

для текстовых и цифровых полей работает,
но когда я попробовал применить его к полю типа "валюта", получается странная штука -
для некоторых карточек скрипт работает, как надо (и для тех, которые создаются через "создать запись"), а вот для большей части карточек - нет буквы "р." в поле валюты, как должно быть, и пишет
"Если в поле денежной суммы присутствует значение, требуется валюта. Выберите валюту и повторите попытку."
Скрипт стоит на онлоаде, если его убрать - ситуация такая же, для некоторых карточек работает, для большей части - нет.
Коллеги, поделитесь, пожалуйста, опытом работы с валютой - как поступить в данной ситуации?
Миниатюры
Нажмите на изображение для увеличения
Название: valute.JPG
Просмотров: 290
Размер:	15.0 Кб
ID:	7418  

Последний раз редактировалось mistah; 26.12.2011 в 13:51.
Старый 26.12.2011, 13:54   #7  
griefon is offline
griefon
Участник
 
131 / 52 (2) ++++
Регистрация: 07.12.2010
Адрес: down under
Надо проставить валюту на форме и в поле.

X++:
var oCurrency = new Array();
oCurrency[0] = new Object();
oCurrency[0].id = sCurrencyId;
oCurrency[0].entityType = "transactioncurrency";
oCurrency[0].name = sCurrencyName;
Xrm.Page.getAttribute("transactioncurrencyid").setValue(oCurrency);

document.getElementById("field_name_sym").value = "$";
где sCurrencyId - guid нужной валюты (TransactionCurrencyId), а sCurrencyName - имя (CurrencyName), а $ - символ валюты (CurrencySymbol)
Которые можно либо "захардкодить", что есть плохо, зато быстро, либо получить REST запросом.
За это сообщение автора поблагодарили: mistah (1).
Старый 26.12.2011, 15:13   #8  
mistah is offline
mistah
Участник
 
169 / 13 (1) ++
Регистрация: 11.11.2011
Адрес: Коньково
Цитата:
Сообщение от griefon Посмотреть сообщение
Надо проставить валюту на форме и в поле.

X++:
var oCurrency = new Array();
oCurrency[0] = new Object();
oCurrency[0].id = sCurrencyId;
oCurrency[0].entityType = "transactioncurrency";
oCurrency[0].name = sCurrencyName;
Xrm.Page.getAttribute("transactioncurrencyid").setValue(oCurrency);

document.getElementById("field_name_sym").value = "$";
где sCurrencyId - guid нужной валюты (TransactionCurrencyId), а sCurrencyName - имя (CurrencyName), а $ - символ валюты (CurrencySymbol)
Которые можно либо "захардкодить", что есть плохо, зато быстро, либо получить REST запросом.
спасибо!
запрос мне возвращает ошибку в строке
oCurrency[0].id = sCurrencyId;
ввожу
oCurrency[0].id = {EFCB4E97-CDBD-E011-8B9B-08002715BAEC};

пишет, что не хватает двоеточия. на кой ему тут двоеточие?)
Старый 26.12.2011, 15:45   #9  
griefon is offline
griefon
Участник
 
131 / 52 (2) ++++
Регистрация: 07.12.2010
Адрес: down under
Попробуйте добавить кавычки.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить значение поля одной сущности при обработке формы другой сущности zhenek Dynamics CRM: Разработка 25 05.07.2011 16:19
Присвоение одного атрибута сущности значения другого атрибута связанной сущности vital.mih Dynamics CRM: Функционал 38 08.09.2010 10:53
Тип грида (GridType) при выводе списка связанной сущности alsherin Dynamics CRM: Разработка 4 07.07.2009 19:18
Как вытащить данные из лукапа на 2 сущности? vital.mih Dynamics CRM: Функционал 1 06.07.2009 16:07
Как создать экземпляр кастомной сущности через SOAP? Tony Green Dynamics CRM: Разработка 7 27.02.2009 08:37

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:02.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.