|
|
#1 |
|
Участник
|
Можно ли посчитать связанные сущности?
Добрый день.
Ситауция: есть сущность "Строка контракта" с ней связана сущность "Оборудование" (отношение N:N), т.е. в одну строку контракта набирается некоторое количество оборудования. Нужно: посчитать количество добавленных строк Оборудования и сумму вставить в поле "Количество оборудования" на форме Строка контракта. Вроде SOAP нужен, только вот с чего начать не могу понять, помогите... |
|
|
|
|
#2 |
|
Moderator
|
Fecth запросы теперь, действительно поддерживают агрегацию. Читайте Using Count Aggregation in FetchXML в SDK
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#3 |
|
Чайный пьяница
|
Цитата:
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|
|
#4 |
|
Moderator
|
Хотя я бы, скорее всего, плагины для этого использовал.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#5 |
|
Участник
|
Доброе утро.
Составил Fetch, ставлю на OnSave пишет ошибка на странице и тишина......... Что-то тут не так, знающие люди посмотрите код Спасибоfunction getFetchXml(){ return '<fetch mapping='logical' aggregate='SUM'> <entity name='equipment'> <attribute name='name'/> <link-entity name='new_equipment_contractdetail' from='equipmentid' to='equipmentid'/> </entity> </fetch>'; } crmForm.all.new_count.DataValue = return; |
|
|
|
|
#6 |
|
Консультант-джедай
|
вопервых, берите эту софтину и проверяйте работает ли Ваш фетч http://mmcrm.ru/?p=494
далее... для фетча нужен соап запрос вот такой http://msdn.microsoft.com/en-us/library/cc677073.aspx
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога
|
|
|
|
|
#7 |
|
Участник
|
В проге fetch проверил, нормально возвращает id всех сущностей оборудования (хотя мне нужно количество сущностей вернуть):
Код: <fetch mapping='logical'> <entity name='equipment'> <no-attrs/> <link-entity name='new_equipment_contractdetail' from='equipmentid' to='equipmentid'/> </entity> </fetch> ![]() Всё равно где-то допускаю ошибку, пишет "ошибка на странице", код такой: Код: // Prepare variables to fetch accounts.
var fetchMapping = "logical";
var entityName = "equipment";
var linkEntityname ="new_equipment_contractdetail";
var linkEntityfrom ="equipmentid";
var linkEntityto ="equipmentid";
var authenticationHeader = GenerateAuthenticationHeader();
// Prepare the SOAP message.
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'>"+
authenticationHeader+
"<soap:Body>"+
"<Fetch xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+
"<fetchXml><fetch mapping='"+fetchMapping+"'>"+
"<entity name='"+entityName+"'>"+
"<link-entity name='"+linkEntityname+"' from='"+linkEntityfrom+"'>" to='"+linkEntityto+"'>"+
"</link-entity>"+
"</entity>"+
"</fetch></fetchXml>"+
"</Fetch>"+
"</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/2007/WebServices/Fetch");
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;
if (errorCount != 0)
{
var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
alert(msg);
}
// Process and display the results.
else
{
// Capture the result and UnEncode it.
var resultSet = new String();
resultSet = resultXml.text;
resultSet.replace('<','<');
resultSet.replace('>','>');
// Create an XML document that you can parse.
var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
oXmlDoc.async = false;
// Load the XML document that has the UnEncoded results.
oXmlDoc.loadXML(resultSet);
// Display the results.
var results = oXmlDoc.getElementsByTagName('result');
var msg = "\equipment Id\t\t\t\tequipment Name\r";
msg +="--------------------------------------------------------------------------------\r";
for (i=0;i < results.length;i++)
{
var idValue = results[i].selectSingleNode('./equipmentid').nodeTypedValue;
var name = results[i].selectSingleNode('./name').nodeTypedValue;
msg += idValue +"\t"+ name+"\r";
alert(idValue);
} |
|
|
|
|
#8 |
|
Консультант-джедай
|
Вы убрали из фетча возвращаемые поля, но не добавили <no-attrs/>
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога
Последний раз редактировалось slivka_83; 20.08.2009 в 10:05. |
|
|
|
|
#9 |
|
Консультант-джедай
|
А запрос с суммой у Вас в фетчбилдере работает?
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога
|
|
|
|
|
#10 |
|
Участник
|
|
|
|
|
|
#11 |
|
Консультант-джедай
|
попробуйте так:
X++: var authenticationHeader = GenerateAuthenticationHeader(); // Prepare the SOAP message. 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'>"+ authenticationHeader+ "<soap:Body>"+ "<Fetch xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+ "<fetch mapping='logical'><entity name='equipment'><no-attrs/><link-entity name='new_equipment_contractdetail' from='equipmentid' to='equipmentid'/></entity></fetch>"+ "</Fetch>"+ "</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","[URL]http://schemas.microsoft.com/crm/2007/WebServices/Fetch[/URL]"); 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; if (errorCount != 0) { var msg = resultXml.selectSingleNode('//description').nodeTypedValue; alert(msg + "0"); } // Process and display the results. else { // Capture the result and UnEncode it. var resultSet = new String(); resultSet = resultXml.text; resultSet.replace('<','<'); resultSet.replace('>','>'); // Create an XML document that you can parse. var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM"); oXmlDoc.async = false; // Load the XML document that has the UnEncoded results. oXmlDoc.loadXML(resultSet); // Display the results. var results = oXmlDoc.getElementsByTagName('result'); var msg = "\equipment Id\t\t\t\tequipment Name\r"; msg +="--------------------------------------------------------------------------------\r"; for (i=0;i < results.length;i++) { var idValue = results[i].selectSingleNode('./equipmentid').nodeTypedValue; msg += idValue +"\t"; alert(idValue); }
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога
|
|
|
|
|
#12 |
|
Чайный пьяница
|
2 Slivka_83:
код работать не будет 100%. Строка - xHReq.setRequestHeader("SOAPAction","URLhttp://schemas.microsoft.com/crm/2007/WebServices/Fetch/URL");
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|
|
#13 |
|
Консультант-джедай
|
ну это уже движок форума чего то нахимичил
![]() var authenticationHeader = GenerateAuthenticationHeader(); // Prepare the SOAP message. 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'>"+ authenticationHeader+ "<soap:Body>"+ "<Fetch xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+ "<fetch mapping='logical'><entity name='equipment'><no-attrs/><link-entity name='new_equipment_contractdetail' from='equipmentid' to='equipmentid'/></entity></fetch>"+ "</Fetch>"+ "</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/2007/WebServices/Fetch"); 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; if (errorCount != 0) { var msg = resultXml.selectSingleNode('//description').nodeTypedValue; alert(msg + "0"); } // Process and display the results. else { // Capture the result and UnEncode it. var resultSet = new String(); resultSet = resultXml.text; resultSet.replace('<','<'); resultSet.replace('>','>'); // Create an XML document that you can parse. var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM"); oXmlDoc.async = false; // Load the XML document that has the UnEncoded results. oXmlDoc.loadXML(resultSet); // Display the results. var results = oXmlDoc.getElementsByTagName('result'); var msg = "\equipment Id\t\t\t\tequipment Name\r"; msg +="--------------------------------------------------------------------------------\r"; for (i=0;i < results.length;i++) { var idValue = results[i].selectSingleNode('./equipmentid').nodeTypedValue; msg += idValue +"\t"; alert(idValue); }
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога
|
|
|
|
|
#14 |
|
Участник
|
Так Ошибки на странице уже нет, но и результата тоже нет, тишина.
|
|
|
|
|
#15 |
|
Консультант-джедай
|
Попробуйте это
var authenticationHeader = GenerateAuthenticationHeader(); // Prepare the SOAP message. 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'>"+ authenticationHeader+ "<soap:Body>"+ "<Fetch xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+ "<fetchXml><fetch mapping='logical'><entity name='equipment'><no-attrs/></entity></fetch></fetchXml>"+ "</Fetch>"+ "</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/2007/WebServices/Fetch"); 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; if (errorCount != 0) { var msg = resultXml.selectSingleNode('//description').nodeTypedValue; alert(msg); } // Process and display the results. else { // Capture the result and UnEncode it. var resultSet = new String(); resultSet = resultXml.text; resultSet.replace('<','<'); resultSet.replace('>','>'); // Create an XML document that you can parse. var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM"); oXmlDoc.async = false; // Load the XML document that has the UnEncoded results. oXmlDoc.loadXML(resultSet); // Display the results. var results = oXmlDoc.getElementsByTagName('result'); var msg = "\Account Id\t\t\t\tAccount Name\r"; msg +="--------------------------------------------------------------------------------\r"; for (i=0;i < results.length;i++) { var idValue = results[i].selectSingleNode('./equipmentid').nodeTypedValue; msg += idValue +"\t"; } alert(msg); }
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога
|
|
|
|
|
#16 |
|
Участник
|
Отлично! Работает, выводит все id`шники связанных сущностей.
Есть ещё один вопросик, если позволите Как теперь получить количество этих id ? В fetch пишу aggregate='sum' и 'count' , но в полученном тексте количества нет. |
|
|
|
|
#17 |
|
Чайный пьяница
|
А чем results.length не угодила - вот вам и количество этих идентификаторов.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|
| За это сообщение автора поблагодарили: Dekan (1). | |
|
|
#18 |
|
Участник
|
Точно. Всем спасибо
![]() PS: Мне уже не дают плюсики вам ставить лимит кончился......... Последний раз редактировалось Dekan; 20.08.2009 в 15:30. |
|
|
|
|
#19 |
|
Консультант-джедай
|
а вот так с помощью фетча считает
![]() <fetch mapping='logical' aggregate='true'> <entity name='equipment'> <attribute name='equipmentid' alias='sum' aggregate='count'/> </entity> </fetch>
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога
|
|
|
|
|
#20 |
|
Участник
|
Сейчас всё протестировал, получается, что считаются всё количество оборудования в системе, а не связанное со строкой контракта. Как их отфильтровать?
|
|
|