18.05.2011, 11:33 | #1 |
Участник
|
Данные из связанной сущности.
Приветствую, Коллеги.
Не подкажите как из скрипта получить данные связанной сущности. То есть, есть бизнес-партнер и связанны ним контакт. Нахожуcь в контакте :-) и хочу получить например Отрасть бизнес партнера и скопироваь ее в поле контакта. Заранее спасибо за помощь. Последний раз редактировалось a33ik; 18.05.2011 в 12:02. Причина: Орфография x_x |
|
18.05.2011, 11:50 | #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 |
|
18.05.2011, 12:45 | #3 |
Участник
|
Спасибо.
Попытаюсь разобраться. А как получить ID связанной запись. (знаю как получить name) BR, |
|
18.05.2011, 12:52 | #4 |
Чайный пьяница
|
Цитата:
Если поле вынесено на форму, то тогда примерно так: для 4.0: var id = crmForm.all.<поле лукапа связанной сущности>.DataValue[0].id; для 2011: var id = Xrm.Page.getAttribute(“поле лукапа связанной сущности”).getValue()[0].id; Если не вынесено - тогда через скрипты.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
18.05.2011, 12:56 | #5 |
Участник
|
Да, моя ошибка.
Dynamics CRM 4.0 |
|
18.05.2011, 16:04 | #6 |
Участник
|
Что-то скрипт, господина - Jim Wang не работает:-(
Нет случаем, какой еще ссылки на разбор данной проблематики? |
|
18.05.2011, 17:22 | #7 |
Чайный пьяница
|
Цитата:
Сообщение от KKNDSTER
Что-то скрипт, господина - Jim Wang не работает:-(
Нет случаем, какой еще ссылки на разбор данной проблематики?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
18.05.2011, 17:53 | #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"); Пишет, что значение функции |
|
18.05.2011, 18:01 | #9 |
Чайный пьяница
|
То о чём я и говорил. 2 ошибки в примитивном скрипте. Попробуйте так:
crmForm.all.new_serialnumber.DataValue = GetAttributeValueByEntityId("new_nomenclaturalposition", crmForm.all.new_nomenclaturashippinglin.DataValue[0].id, "new_warranty");
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
19.05.2011, 11:17 | #10 |
Участник
|
Приветствую, (спасибо)
Всё равно пишет что значение функции типа не определены, или Null или не является объектом Function.... :-( |
|
19.05.2011, 11:36 | #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 |
|
19.05.2011, 11:41 | #12 |
Участник
|
Если вбить например вот так:
crmForm.all.new_serialnumber.DataValue = GetAttributeValueFromID("new_nomenclaturalposition", "crmForm.all.new_nomenclaturashippinglin.DataValue[0].id", "new_warranty"); То пишет - не удолось получить значение nodeTypedValue. Значение Null или оно не определено. |
|
19.05.2011, 11:42 | #13 |
Участник
|
Про название функции я уже раньше нашел:-)
|
|
19.05.2011, 11:59 | #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 |
|
19.05.2011, 12:11 | #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 или оно не определено. " |
|
19.05.2011, 12:28 | #16 |
Чайный пьяница
|
Такое происходит когда поле пустое. Вы уверены, что поле заполнено?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: KKNDSTER (1). |
19.05.2011, 12:59 | #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"); |
|
23.12.2011, 11:06 | #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; } |
|
23.12.2011, 14:03 | #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). |
23.12.2011, 14:29 | #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; } |
|
|
|