|
|
|
|
#1 |
|
Участник
|
товарищи!
подскажите, пожалуйста, почему при пустом значении поля, из которого берем значение(и подставляем в нужное поле связанной сущности), 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;
} |
|
|
|
|
#2 |
|
Участник
|
Не очень понятно, где на какой строке у вас возникает ошибка, но в любом случае стоит делать вот так:
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). | |
|
|
#3 |
|
Участник
|
Цитата:
Сообщение от 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;
} |
|
|
|
|
#4 |
|
Moderator
|
Скорее всего вы неправильно указываете имя узла XML, потому выбор selectSingleNode(xpath) возращает вам null, а вы спрашиваете у него nodeValue.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
| За это сообщение автора поблагодарили: mistah (1). | |
|
|
#5 |
|
Участник
|
Цитата:
скрипт ошибок больше не выдает) для текстовых и цифровых полей работает, но когда я попробовал применить его к полю типа "валюта", получается странная штука - для некоторых карточек скрипт работает, как надо (и для тех, которые создаются через "создать запись"), а вот для большей части карточек - нет буквы "р." в поле валюты, как должно быть, и пишет "Если в поле денежной суммы присутствует значение, требуется валюта. Выберите валюту и повторите попытку." Скрипт стоит на онлоаде, если его убрать - ситуация такая же, для некоторых карточек работает, для большей части - нет. Коллеги, поделитесь, пожалуйста, опытом работы с валютой - как поступить в данной ситуации? Последний раз редактировалось mistah; 26.12.2011 в 13:51. |
|
|
|
|
#6 |
|
Участник
|
Надо проставить валюту на форме и в поле.
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 = "$"; Которые можно либо "захардкодить", что есть плохо, зато быстро, либо получить REST запросом. |
|
|
|
| За это сообщение автора поблагодарили: mistah (1). | |
|
|
#7 |
|
Участник
|
Цитата:
Сообщение от 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 = "$"; Которые можно либо "захардкодить", что есть плохо, зато быстро, либо получить REST запросом. запрос мне возвращает ошибку в строке oCurrency[0].id = sCurrencyId; ввожу oCurrency[0].id = {EFCB4E97-CDBD-E011-8B9B-08002715BAEC}; пишет, что не хватает двоеточия. на кой ему тут двоеточие?) |
|
|
|
|
#8 |
|
Участник
|
Попробуйте добавить кавычки.
|
|
|
|
|
#9 |
|
Участник
|
пробовал, хочет двоеточие..
function vall() { var oCurrency = new Array(); oCurrency[0] = new Object(); oCurrency[0].id = "{EFCB4E97-CDBD-E011-8B9B-08002715BAEC}"; oCurrency[0].entityType = "transactioncurrency"; oCurrency[0].name = "рубль"; Xrm.Page.getAttribute("transactioncurrencyid").setValue(oCurrency); document.getElementById("price").value = "р."; } |
|
|
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|