01.03.2010, 13:34 | #1 |
Участник
|
Проблемы с обновлением родительского объекта
Имеется объект "Счет" у него связь с объектом "Оплата" как "один ко многим".
При создании оплаты срабатывает скрипт который пересчитывает сумму всех связаных со счетом оплат и записывает полученое значение в родительский объект. Вся незадача в том что если запись происходит кнопкой "Сохранить и закрыть", то расчеты все происходять оплата создается а вот значение суммы в родительский объект не записывается. Если повторно открыть объект и "сохранить и закрыть" или изначально просто "Сохранить", то все работает коректно. |
|
01.03.2010, 13:48 | #2 |
Чайный пьяница
|
Цитата:
Сообщение от Samson
Имеется объект "Счет" у него связь с объектом "Оплата" как "один ко многим".
При создании оплаты срабатывает скрипт который пересчитывает сумму всех связаных со счетом оплат и записывает полученое значение в родительский объект. Вся незадача в том что если запись происходит кнопкой "Сохранить и закрыть", то расчеты все происходять оплата создается а вот значение суммы в родительский объект не записывается. Если повторно открыть объект и "сохранить и закрыть" или изначально просто "Сохранить", то все работает коректно.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
01.03.2010, 14:56 | #3 |
Участник
|
Нашел где скрывается незадача. При создании объекта его значение не учитывается, а при его редактировании в расчете суммы учитывается старое значение из базы.
К сожалению, плагины это пока еще не мой профиль, мне и скрипты толком пока не удалось понять. Вот выдрал из sdk два подходящих скрипта и приспособил под свои нужды. X++: // Prepare variables for updating . var id = crmForm.all.new_invoice.DataValue[0].id; 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>"+ "<RetrieveMultiple xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+ "<query xmlns:q1='http://schemas.microsoft.com/crm/2006/Query'"+ " xsi:type='q1:QueryExpression'>"+ "<q1:EntityName>new_payment</q1:EntityName>"+ "<q1:ColumnSet xsi:type='q1:ColumnSet'>"+ "<q1:Attributes>"+ "<q1:Attribute>new_summ</q1:Attribute>"+ "</q1:Attributes>"+ "</q1:ColumnSet>"+ "<q1:Distinct>false</q1:Distinct>"+ "<q1:Criteria>"+ "<q1:FilterOperator>And</q1:FilterOperator>"+ "<q1:Conditions>"+ "<q1:Condition>"+ "<q1:AttributeName>new_invoice</q1:AttributeName>"+ "<q1:Operator>Like</q1:Operator>"+ "<q1:Values>"+ "<q1:Value xsi:type='xsd:string'>"+id+"</q1:Value>"+ "</q1:Values>"+ "</q1:Condition>"+ "</q1:Conditions>"+ "</q1:Criteria>"+ "</query>"+ "</RetrieveMultiple>"+ "</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/RetrieveMultiple"); 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; // Parse and display the results. if (results.length == 0) {} else { var summa = 0 for (i=0;i < results.length;i++) { summa = summa + parseFloat(results[i].selectSingleNode('./q1:new_summ').nodeTypedValue); } // 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>"+ "<Update xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+ "<entity xsi:type='invoice'>"+ "<ec_totalpayment>"+atr+"</ec_totalpayment>"+ "<invoiceid>"+id+"</invoiceid>"+ "</entity>"+ "</Update>"+ "</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/Update"); 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; |
|
01.03.2010, 15:35 | #4 |
Чайный пьяница
|
Попробуйте такой.
В принципе учёл варианты создания/изменения. Тут уже дело за Вами. Тестируйте. По идее всё честно. Код: if (crmForm.all.new_invoice.DataValue != null) { 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>"+ "<RetrieveMultiple xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+ "<query xmlns:q1='http://schemas.microsoft.com/crm/2006/Query'"+ " xsi:type='q1:QueryExpression'>"+ "<q1:EntityName>new_payment</q1:EntityName>"+ "<q1:ColumnSet xsi:type='q1:ColumnSet'>"+ "<q1:Attributes>"+ "<q1:Attribute>new_summ</q1:Attribute>"+ "</q1:Attributes>"+ "</q1:ColumnSet>"+ "<q1:Distinct>false</q1:Distinct>"+ "<q1:Criteria>"+ "<q1:FilterOperator>And</q1:FilterOperator>"+ "<q1:Conditions>"+ "<q1:Condition>"+ "<q1:AttributeName>new_invoice</q1:AttributeName>"+ "<q1:Operator>Equal</q1:Operator>"+ "<q1:Values>"+ "<q1:Value xsi:type='xsd:string'>"+crmForm.all.new_invoice.DataValue[0].id+"</q1:Value>"+ "</q1:Values>"+ "</q1:Condition>"; if (crmForm.FormType != 1) { xml = xml + "<q1:Condition>"+ "<q1:AttributeName>new_paymentid</q1:AttributeName>"+ "<q1:Operator>NotEqual</q1:Operator>"+ "<q1:Values>"+ "<q1:Value xsi:type='xsd:string'>" + crmForm.ObjectId + "</q1:Value>"+ "</q1:Values>"+ "</q1:Condition>"; } xml = xml + "</q1:Conditions>"+ "</q1:Criteria>"+ "</query>"+ "</RetrieveMultiple>"+ "</soap:Body>"+ "</soap:Envelope>"; var xHReq = new ActiveXObject("Msxml2.XMLHTTP"); xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false); xHReq.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple"); xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); xHReq.setRequestHeader("Content-Length", xml.length); xHReq.send(xml); var resultXml = xHReq.responseXML; if (results.length != 0) { var summa = 0 for (i=0;i < results.length;i++) { summa = summa + parseFloat(results[i].selectSingleNode('./q1:new_summ') == null ? 0 :results[i].selectSingleNode('./q1:new_summ').nodeTypedValue); } if (crmForm.all.new_summ.DataValue != null) summa = summa + crmForm.all.new_summ.DataValue; 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>"+ "<Update xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+ "<entity xsi:type='invoice'>"+ "<ec_totalpayment>"+atr+"</ec_totalpayment>"+ "<invoiceid>"+crmForm.all.new_invoice.DataValue[0].id+"</invoiceid>"+ "</entity>"+ "</Update>"+ "</soap:Body>"+ "</soap:Envelope>"; var xHReq = new ActiveXObject("Msxml2.XMLHTTP"); xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false); xHReq.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Update"); xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); xHReq.setRequestHeader("Content-Length", xml.length); xHReq.send(xml); } }
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
01.03.2010, 16:14 | #5 |
Участник
|
Сенкс, все работает. Вернул только несколько пропущеных переменных.
|
|