|
11.09.2009, 13:47 | #1 |
Участник
|
Отправка e-mail из сохраненного заказа с данными об организации и продуктами из заказа
Вот такая вот нетривиальная задача. Есть ли способы решения без плагина? можно какой нибуть JavaScript на OnSave повесить?
|
|
11.09.2009, 13:50 | #2 |
MCTS
|
Т.е. при создании заказа, необходимо кого-то уведомить по мыло (начальника)... о таком заказе ?
__________________
|
|
11.09.2009, 13:53 | #3 |
Участник
|
|
|
11.09.2009, 13:59 | #4 |
Kostya Afendikov
|
Цитата:
А по вопросу: Может будете ссылку на заказ в письме передавать, они будут на нее нажимать и видеть все что им надо |
|
11.09.2009, 14:04 | #5 |
Консультант-джедай
|
+ (1000*колво_бухов) вечно зеленых
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
11.09.2009, 14:06 | #6 |
Kostya Afendikov
|
|
|
11.09.2009, 14:06 | #7 |
Участник
|
Цитата:
Сообщение от Bondonello
А потом бухгалтера делают Заказ в 1С? Если да, то уже существуют готовые решения по передачи объектов (Заказов, Организаций...) из CRM в 1С ну и наоборот соответственно, правда стоят денег. Зато автоматизация и уверенность в том, что бухгалтер не ошибется при переписывании/копировании заказа, его данных, продуктов.
А по вопросу: Может будете ссылку на заказ в письме передавать, они будут на нее нажимать и видеть все что им надо По вопросу: Тоже хорошая идея. Есть ссылка на решение как это реализавать? |
|
11.09.2009, 14:08 | #8 |
Kostya Afendikov
|
Цитата:
|
|
11.09.2009, 13:52 | #9 |
Консультант-джедай
|
думается что нет...
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
11.09.2009, 13:55 | #10 |
MCTS
|
Я вот не программер, и думаю в другую сторону.
Например добавить на форме заказа - статус (при создании - новый, при подготовленном заказе к исполнению). Манагер создал заказ, проверил, поставил статус к исполнению, сохранил закрыл а в это время изменение статуса поджитает готовое правило. Workflow (запуск событие OnChange), при изменении статуса формировал бы письмо в бух
__________________
|
|
11.09.2009, 13:56 | #11 |
Консультант-джедай
|
А как в письме перечислить все заказанные продукты?
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
11.09.2009, 13:59 | #12 |
MCTS
|
Есть трабл, такая же хреновина была со слиянием. Из перечня продуктов (предложения, заказа) брался ока первый продукт.
Решение валялось где-то, не помню. Думаю и тута можно решить! К сожалению CRM не щупал уже больше 9ти месяцев, проверить не могу
__________________
|
|
11.09.2009, 13:55 | #13 |
Консультант-джедай
|
Кстати... может быть Вам отчет написать и отсылать его по расписанию?
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
11.09.2009, 14:02 | #14 |
Участник
|
|
|
11.09.2009, 14:06 | #15 |
Консультант-джедай
|
Нет нужно писать отчет в Visual Studio или в встроенном (в CRM) редакторе отчетов ... затем использовать механизм Reporting Services для рассылки
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
11.09.2009, 14:11 | #16 |
Участник
|
|
|
11.09.2009, 14:15 | #17 |
Чайный пьяница
|
Делал подобную кастомизацию с тем отличием, что это всё выполнялось не из заказа, а из предложения.
Итак идея: 1. Отключаем фильтрацию параметров в CRM - добавляете параметр в ветку реестра HKEY_Local_Machine\Software\Microsoft\MSCRM DWORD DisableParameterFilter = 1 и выполняете iisreset. 2. Добавляете через ISV конфиг кнопку в сущность, из которой надо вызывать открытие письма с заполнением тела деталями. Суть - открыть новое письмо с дополнительным параметром в строке по наличию которого анализируется, что надо заполнить тело письма. Код кнопки: Код: <Entity name="quote"> <ToolBar ValidForCreate="0" ValidForUpdate="1"> <Button Icon="/_imgs/ico_16.gif" JavaScript="var url = '/' + ORG_UNIQUE_NAME + '/activities/email/edit.aspx?pId=' + crmForm.ObjectId + '&pType='+crmForm.ObjectTypeCode+ '&pName=' + crmForm.all.name.DataValue + '&FillWithQuoteDetails=1'; window.open(url);"> <Titles> <Title LCID="1049" Text="Заявка на информацию" /> </Titles> <ToolTips> <ToolTip LCID="1049" Text="Заявка на информацию" /> </ToolTips> </Button> </ToolBar> </Entity> Код: function InsertDescription() { var descrFrame = document.getElementById('descriptionIFrame'); if(descrFrame.readyState != 'complete') return; var quoteid = ''; if (crmForm.all.regardingobjectid.DataValue != null && crmForm.all.regardingobjectid.DataValue[0] != null) quoteid = crmForm.all.regardingobjectid.DataValue[0].id; else return; var textbody = "Прошу предоставить информацию по указанным продуктам:"; 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>"+ "<Fetch xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+ "<fetchXml><fetch mapping='logical'>"+ "<entity name='quotedetail'>"+ "<attribute name='productdescription'/>"+ "<attribute name='quantity'/>"+ "<attribute name='productid'/>"+ "<attribute name='uomid'/>"+ "<filter type='and'>"+ "<condition attribute='quoteid' operator='eq' value='" + quoteid + "'/>"+ "</filter>"+ "</entity>"+ "</fetch></fetchXml>"+ "</Fetch>"+ "</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/Fetch"); xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); xHReq.setRequestHeader("Content-Length", xml.length); xHReq.send(xml); var resultXml = xHReq.responseXML; var resultSet = resultXml.text; resultSet.replace('<','<'); resultSet.replace('>','>'); var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM"); oXmlDoc.async = false; oXmlDoc.loadXML(resultSet); var results = oXmlDoc.getElementsByTagName('result'); //debugger; for (var i=0; i < results.length;i++) { textbody = textbody + "<br/>"+ (results[i].selectSingleNode('./productid') == null ? "" : results[i].selectSingleNode('./productid').getAttribute('name')) + " " + (results[i].selectSingleNode('./productdescription') == null ? "" : results[i].selectSingleNode('./productdescription').nodeTypedValue) + " в количестве " + (results[i].selectSingleNode('./quantity') == null ? "" : results[i].selectSingleNode('./quantity').nodeTypedValue) + " " + (results[i].selectSingleNode('./uomid') == null ? "" : results[i].selectSingleNode('./uomid').getAttribute('name')); } var descrWindow = document.frames['descriptionIFrame']; descrWindow.document.body.innerHTML = textbody; } if (crmForm.FormType == 1 && window.location.href.indexOf('FillWithQuoteDetails=1') != -1) { var descrFrame = document.getElementById('descriptionIFrame'); descrFrame.attachEvent('onreadystatechange',InsertDescription); }
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: datfi (1). |
11.09.2009, 14:25 | #18 |
Участник
|
Цитата:
Сообщение от a33ik
Делал подобную кастомизацию с тем отличием, что это всё выполнялось не из заказа, а из предложения.
Итак идея: 1. Отключаем фильтрацию параметров в CRM - добавляете параметр в ветку реестра HKEY_Local_Machine\Software\Microsoft\MSCRM DWORD DisableParameterFilter = 1 и выполняете iisreset. 2. Добавляете через ISV конфиг кнопку в сущность, из которой надо вызывать открытие письма с заполнением тела деталями. Суть - открыть новое письмо с дополнительным параметром в строке по наличию которого анализируется, что надо заполнить тело письма. Код кнопки: Код: <Entity name="quote"> <ToolBar ValidForCreate="0" ValidForUpdate="1"> <Button Icon="/_imgs/ico_16.gif" JavaScript="var url = '/' + ORG_UNIQUE_NAME + '/activities/email/edit.aspx?pId=' + crmForm.ObjectId + '&pType='+crmForm.ObjectTypeCode+ '&pName=' + crmForm.all.name.DataValue + '&FillWithQuoteDetails=1'; window.open(url);"> <Titles> <Title LCID="1049" Text="Заявка на информацию" /> </Titles> <ToolTips> <ToolTip LCID="1049" Text="Заявка на информацию" /> </ToolTips> </Button> </ToolBar> </Entity> Код: function InsertDescription() { var descrFrame = document.getElementById('descriptionIFrame'); if(descrFrame.readyState != 'complete') return; var quoteid = ''; if (crmForm.all.regardingobjectid.DataValue != null && crmForm.all.regardingobjectid.DataValue[0] != null) quoteid = crmForm.all.regardingobjectid.DataValue[0].id; else return; var textbody = "Прошу предоставить информацию по указанным продуктам:"; 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>"+ "<Fetch xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+ "<fetchXml><fetch mapping='logical'>"+ "<entity name='quotedetail'>"+ "<attribute name='productdescription'/>"+ "<attribute name='quantity'/>"+ "<attribute name='productid'/>"+ "<attribute name='uomid'/>"+ "<filter type='and'>"+ "<condition attribute='quoteid' operator='eq' value='" + quoteid + "'/>"+ "</filter>"+ "</entity>"+ "</fetch></fetchXml>"+ "</Fetch>"+ "</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/Fetch"); xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); xHReq.setRequestHeader("Content-Length", xml.length); xHReq.send(xml); var resultXml = xHReq.responseXML; var resultSet = resultXml.text; resultSet.replace('<','<'); resultSet.replace('>','>'); var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM"); oXmlDoc.async = false; oXmlDoc.loadXML(resultSet); var results = oXmlDoc.getElementsByTagName('result'); //debugger; for (var i=0; i < results.length;i++) { textbody = textbody + "<br/>"+ (results[i].selectSingleNode('./productid') == null ? "" : results[i].selectSingleNode('./productid').getAttribute('name')) + " " + (results[i].selectSingleNode('./productdescription') == null ? "" : results[i].selectSingleNode('./productdescription').nodeTypedValue) + " в количестве " + (results[i].selectSingleNode('./quantity') == null ? "" : results[i].selectSingleNode('./quantity').nodeTypedValue) + " " + (results[i].selectSingleNode('./uomid') == null ? "" : results[i].selectSingleNode('./uomid').getAttribute('name')); } var descrWindow = document.frames['descriptionIFrame']; descrWindow.document.body.innerHTML = textbody; } if (crmForm.FormType == 1 && window.location.href.indexOf('FillWithQuoteDetails=1') != -1) { var descrFrame = document.getElementById('descriptionIFrame'); descrFrame.attachEvent('onreadystatechange',InsertDescription); } DWORD DisableParameterFilter = 1 на что еще повлияет? Какую фильтрацию оно отключает? |
|
14.09.2009, 09:43 | #19 |
Участник
|
Господа убил все выходные не смог разобраться что не так с этим кодом.
Вроде все поменял как надо на salesorder и на salesorderdetail. Письмо открывается а описание не вставляется. Вот код в ISV Код: var url = '/' + ORG_UNIQUE_NAME + '/activities/email/edit.aspx?pId=' + crmForm.ObjectId + '&pType='+crmForm.ObjectTypeCode+ '&pName=' + crmForm.all.name.DataValue + '&FillWithSalesOrderDetails=1'; window.open(url); Код: function InsertDescription() { var descrFrame = document.getElementById('descriptionIFrame'); if(descrFrame.readyState != 'Complete') return; var salesorderid = ''; if (crmForm.all.regardingobjectid.DataValue != null && crmForm.all.regardingobjectid.DataValue[0] != null) salesorderid = crmForm.all.regardingobjectid.DataValue[0].id; else return; var textbody = "sрошу выставить счет по данным продуктам:"; 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>"+ "<Fetch xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+ "<fetchXml><fetch mapping='logical'>"+ "<entity name='SalesOrderDetail'>"+ "<attribute name='productdescription'/>"+ "<attribute name='quantity'/>"+ "<attribute name='productid'/>"+ "<attribute name='uomid'/>"+ "<filter type='and'>"+ "<condition attribute='SalesOrderid' operator='eq' value='" + salesorderid + "'/>"+ "</filter>"+ "</entity>"+ "</fetch></fetchXml>"+ "</Fetch>"+ "</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/Fetch"); xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); xHReq.setRequestHeader("Content-Length", xml.length); xHReq.send(xml); var resultXml = xHReq.responseXML; var resultSet = resultXml.text; resultSet.replace('<','<'); resultSet.replace('>','>'); var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM"); oXmlDoc.async = false; oXmlDoc.loadXML(resultSet); var results = oXmlDoc.getElementsByTagName('result'); //debugger; for (var i=0; i < results.length;i++) { textbody = textbody + "<br/>"+ (results[i].selectSingleNode('./productid') == null ? "" : results[i].selectSingleNode('./productid').getAttribute('name')) + " " + (results[i].selectSingleNode('./productdescription') == null ? "" : results[i].selectSingleNode('./productdescription').nodeTypedValue) + " в количестве " + (results[i].selectSingleNode('./quantity') == null ? "" : results[i].selectSingleNode('./quantity').nodeTypedValue) + " " + (results[i].selectSingleNode('./uomid') == null ? "" : results[i].selectSingleNode('./uomid').getAttribute('name')); } var descrWindow = document.frames['descriptionIFrame']; descrWindow.document.body.innerHTML = textbody; } if (crmForm.FormType == 1 && window.location.href.indexOf('FillWithSalesOrderDetails=1') != -1) { var descrFrame = document.getElementById('descriptionIFrame'); descrFrame.attachEvent('onreadystatechange',InsertDescription); } Последний раз редактировалось datfi; 14.09.2009 в 09:55. |
|
11.09.2009, 14:29 | #20 |
Консультант-джедай
|
Этот ключь разрешает передавать дополнительные параметры в адресной строке (браузера) на формы CRM. Если не включить этот флаг при добавлении параметра в адресноую строку форма свалится с ошибкой
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|