| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Данные из связанной сущности.
			 
			
			Приветствую, Коллеги. 
		
		
		
		
		
		
		
		
			Не подкажите как из скрипта получить данные связанной сущности. То есть, есть бизнес-партнер и связанны ним контакт. Нахожуcь в контакте :-) и хочу получить например Отрасть бизнес партнера и скопироваь ее в поле контакта. Заранее спасибо за помощь. Последний раз редактировалось a33ik; 18.05.2011 в 12:02. Причина: Орфография x_x  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Чайный пьяница 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Добрый день. 
		
		
		
		
		
		
			Первое - рекомендую в вопросах указывать про какую версию CRM говорится (3.0, 4.0, 2011). Второе - не надо создавать тем - дублей. Третье - на форуме это уже не раз обсуждалось, потому рекомендую польоваться поиском. Данные можно получить при помощи JavaScript. Для 4.0 хороший пример - http://technet.microsoft.com/en-us/l.../cc677076.aspx и готовый скрипт - http://jianwang.blogspot.com/2008/12...m-entitys.html Для 2011 - http://technet.microsoft.com/en-us/l.../gg334427.aspx или http://technet.microsoft.com/en-us/l.../gg309549.aspx И последнее - читайте SDK - там немало примеров. 
				__________________ 
		
		
		
		
	Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо. 
		
		
		
		
		
		
		
	Попытаюсь разобраться. А как получить ID связанной запись. (знаю как получить name) BR,  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Чайный пьяница 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Если поле вынесено на форму, то тогда примерно так: для 4.0: var id = crmForm.all.<поле лукапа связанной сущности>.DataValue[0].id; для 2011: var id = Xrm.Page.getAttribute(“поле лукапа связанной сущности”).getValue()[0].id; Если не вынесено - тогда через скрипты. 
				__________________ 
		
		
		
		
	Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, моя ошибка. 
		
		
		
		
		
		
		
	Dynamics CRM 4.0  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Что-то скрипт, господина - Jim Wang  не работает:-( 
		
		
		
		
		
		
		
	Нет случаем, какой еще ссылки на разбор данной проблематики?  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Чайный пьяница 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от KKNDSTER
			 
 
			Что-то скрипт, господина - Jim Wang  не работает:-( 
		
	Нет случаем, какой еще ссылки на разбор данной проблематики? 
				__________________ 
		
		
		
		
	Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Уже задолбался прямо.... 
		
		
		
		
		
		
		
	Использую вот этот: function GetAttributeValueFromID(sEntityName, GUID, sAttributeName) { var authenticationHeader = GenerateAuthenticationHeader(); // Prepare the SOAP message. var xml = ""; xml = 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>"+sEntityName+"</entityName>"+ "<id>"+GUID+"</id>"+ "<columnSet xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:ColumnSet'>"+ "<q1:Attributes>"+ "<q1:Attribute>"+sAttributeName+"</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/200...vices/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; var result = resultXml.selectSingleNode("//q1:" + sAttributeName).nodeTypedValue; if (errorCount != 0) { var msg = resultXml.selectSingleNode('//description').nodeTypedValue; result = " "; alert(msg); } // Display the retrieved value. else { return result; } } crmForm.new_serialnumber.DataValue = GetAttributeValueByEntityId("new_nomenclaturalposition", "document.crmForm.all.new_nomenclaturashippinglin.DataValue[0].id", "new_warranty"); Пишет, что значение функции  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Чайный пьяница 
		
			
	 | 
	
	
	
		
		
		
		 
			
			То о чём я и говорил. 2 ошибки в примитивном скрипте. Попробуйте так: 
		
		
		
		
		
		
			crmForm.all.new_serialnumber.DataValue = GetAttributeValueByEntityId("new_nomenclaturalposition", crmForm.all.new_nomenclaturashippinglin.DataValue[0].id, "new_warranty"); 
				__________________ 
		
		
		
		
	Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Приветствую, (спасибо) 
		
		
		
		
		
		
		
	Всё равно пишет что значение функции типа не определены, или Null или не является объектом Function.... :-(  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Чайный пьяница 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от KKNDSTER
			 
 
			Уже задолбался прямо.... 
		
	Использую вот этот: function GetAttributeValueFromID(sEntityName, GUID, sAttributeName) { var authenticationHeader = GenerateAuthenticationHeader(); // Prepare the SOAP message. var xml = ""; xml = 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>"+sEntityName+"</entityName>"+ "<id>"+GUID+"</id>"+ "<columnSet xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:ColumnSet'>"+ "<q1:Attributes>"+ "<q1:Attribute>"+sAttributeName+"</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/200...vices/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; var result = resultXml.selectSingleNode("//q1:" + sAttributeName).nodeTypedValue; if (errorCount != 0) { var msg = resultXml.selectSingleNode('//description').nodeTypedValue; result = " "; alert(msg); } // Display the retrieved value. else { return result; } } crmForm.new_serialnumber.DataValue = GetAttributeValueByEntityId("new_nomenclaturalposition", "document.crmForm.all.new_nomenclaturashippinglin.DataValue[0].id", "new_warranty"); Пишет, что значение функции 
				__________________ 
		
		
		
		
	Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Если вбить например вот так: 
		
		
		
		
		
		
		
	crmForm.all.new_serialnumber.DataValue = GetAttributeValueFromID("new_nomenclaturalposition", "crmForm.all.new_nomenclaturashippinglin.DataValue[0].id", "new_warranty"); То пишет - не удолось получить значение nodeTypedValue. Значение Null или оно не определено.  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Про название функции я уже раньше нашел:-)
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Чайный пьяница 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от KKNDSTER
			 
 
			Если вбить например вот так: 
		
	crmForm.all.new_serialnumber.DataValue = GetAttributeValueFromID("new_nomenclaturalposition", "crmForm.all.new_nomenclaturashippinglin.DataValue[0].id", "new_warranty"); То пишет - не удолось получить значение nodeTypedValue. Значение Null или оно не определено. и crmForm.all.new_serialnumber.DataValue = GetAttributeValueFromID("new_nomenclaturalposition", crmForm.all.new_nomenclaturashippinglin.DataValue[0].id, "new_warranty"); Разницу видите? Советую просто поучить JavaScript перед тем, как браться за задачи посложнее... 
				__________________ 
		
		
		
		
	Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вот я и учу. Разницу конечно вижу, просто я уже все варианты перепробовал. Сейчас на вставлял в код Аляртов. 
		
		
		
		
		
		
		
	..... // Capture the result. var resultXml = xHReq.responseXML; alert(resultXml); // Check for errors. var errorCount = resultXml.selectNodes('//error').length; var result = resultXml.selectSingleNode("//q1:" + sAttributeName).nodeTypedValue; alert(result); if (errorCount != 0) ..... Первый Алярт выводит [Object] Второй не выводиться и пишет про "не удолось получить значение nodeTypedValue. Значение Null или оно не определено. "  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Чайный пьяница 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Такое происходит когда поле пустое. Вы уверены, что поле заполнено?
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: KKNDSTER (1). | |
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, поле заполненно. Спасибо большое за помощь. 
		
		
		
		
		
		
		
	Воспользовался другим скриптом - Заработало.:-) Ух и на маялся. На всякий случай выкладываю. Да поле заполненно. Воспользовался другим скриптом заработало :-) (Ух) На всякий случай выкладываю. 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");  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			товарищи!  
		
		
		
		
		
		
		
	подскажите, пожалуйста, почему при пустом значении поля, из которого берем значение(и подставляем в нужное поле связанной сущности), 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;
} | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не очень понятно, где на какой строке у вас возникает ошибка, но в любом случае стоит делать вот так: 
		
		
		
		
		
		
		
	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). | |
| 
			
			 | 
		#20 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от 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;
} | 
| 
	
 | 
| 
	
	 | 
	
		
		
  |