17.05.2010, 16:35 | #21 |
Участник
|
Артем, спасибо, я Ваш вариант видела и думала над ним.. посоветовалась с коллегой..пока решили его не использовать но иметь ввиду, за совет спасибо.
slivka_83, Ваш вариант не пробывала... смотрела как бы его через плагин обойти но не так как Вы написали.. попробую, спасибо |
|
17.05.2010, 17:09 | #22 |
Moderator
|
В случае с электронной почтой можно и workflow отделаться! Но очереди можно назначать добавлять любые действия и обращения.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
17.05.2010, 17:21 | #23 |
Участник
|
Артем, я пробывала повесить БП на список ожидания, в котором по условию запуска "создание записи" отправляется письмо.. но это не отрабатывает... а из других вариантов условий запуска - чтото ничего подхожящего нет((
|
|
17.05.2010, 17:43 | #24 |
MCTS
|
Цитата:
Не срабатывает WF? Не отправляется письмо? Решал подобную задачу с помощью WF уведомления отправлялись ответсвенному за обращение и тому кто создал обращение
__________________
|
|
17.05.2010, 18:03 | #25 |
Участник
|
Андрей, не срабатывает WF. А Вы какое условие запуска WF задавали?
Последний раз редактировалось Hjvfirf; 17.05.2010 в 18:54. |
|
17.05.2010, 21:33 | #26 |
Moderator
|
Оно отрабатывает: при создании самого списка ожидания. Но это, я думаю, не то что вы хотели. Создайте WF для объекта Электронная почта в котором делайте проверку: если поле Получатель равно <Нужный список ожидания>, то <Ваши действия>. Я использовал подобное для преобразования писем попавших в ящик в интересы. К сожалению с объектом Обращение это не срабатывает: у него нет мультилиста Получатель, а есть только Ответственный, который всегда пользователь.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
18.05.2010, 09:58 | #27 |
Участник
|
Спасибо, Артем! Сейчас попробую)))
|
|
18.05.2010, 10:16 | #28 |
Участник
|
Артем...попробывала... повесила БП на объект Электронная почта, запуск при Создании записи... Не отрабатывает((( да и поля получатель нету(( но даже без вяких проверок не отрабатывает...не пойму почему((
|
|
18.05.2010, 11:02 | #29 |
MCTS
|
Не отрабатывает сам БП? Другие БП работают?
__________________
|
|
18.05.2010, 11:07 | #30 |
Moderator
|
Куда делось, простите? Имя схемы у него: "to", на атрибут может называться иначе, конечно. Вы точно с электронной почтой работаете?
Если вообще никакие процессы не запускаются, то нужно попробовать поставить последние пакеты обновлений, если еще не стоят. И перезапустить службу асинхронных операций CRM.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
18.05.2010, 11:14 | #31 |
Участник
|
Ребят, я точно работаю с Электронной почтой...другие БП отрабатывают... поля получатель или to нет, есть два поля "кому".. но это уже второй вопрос.. первый в том что этот БП не отрабатывает, хотя другие запускаются нормально....
|
|
18.05.2010, 11:22 | #32 |
Участник
|
В результате мы пришли к письмам, поскольку со всплывающими сообщениями были проблемы (RSS периодически перестает работать по непонятным причинам)
По сути дела: На форму обращения добавляем текстовое поле, которое хранит наименование текущей очереди. WF настраиваем на событие "назначение записи" (можно попробовать и на изменение нашего атрибута): создаем письмо и отправляем, адрес устанавливаем в зависимости от значения поля "Текущая очередь". Про изменение значения поля с именем очереди: На онанлоад функции добавляем скрипт, который проверяет, изменилась ли очередь и сохраняет изменения. window.onunload = function() { foronunload(); crmForm.detachCloseAlert();//поскольку сохраняем принудительно, то вопрос не задаем crmForm.Save(); //ну это необходимость, чтобы сохранилось наше поле } /*===============================================================*/ сама функция проверки: window.foronunload = function() { try{ try{ _guid = getQueue(crmForm.ObjectId); } catch(ex){} if (_guid !="" && _guid!=null && _guid!="undefined"){ var q=""; if(_guid!=null) { q = GetAttributeValueFromID("queue",_guid, "name"); //проверяем, если очередь изменилась - меняем new_currentqueue if (q!=crmForm.all.new_currentqueue.DataValue) { crmForm.all.new_currentqueue.DataValue =q; } } } } catch(ex){} } // скобки проверьте!!!!!!!!!!!!!!!! /*===============================================================*/ для получения guid очереди и ее наименования используем: function getQueue(accountguid) { var result= ""; 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>queueitem</q1:EntityName>"+ "<q1:ColumnSet xsi:type='q1:ColumnSet'>"+ "<q1:Attributes>"+ "<q1:Attribute>queueid</q1:Attribute>"+ "</q1:Attributes>"+ "</q1:ColumnSet>"+ "<q1istinct>false</q1istinct>"+ "<q1:Criteria>"+ "<q1:FilterOperator>And</q1:FilterOperator>"+ "<q1:Conditions>"+ "<q1:Condition>"+ "<q1:AttributeName>objectid</q1:AttributeName>"+ "<q1:Operator>Like</q1:Operator>"+ "<q1:Values>"+ "<q1:Value xsi:type='xsd:string'>"+accountguid+"</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; // Check for errors. var errorCount = resultXml.selectNodes('//error').length; if (errorCount != 0) { var msg = resultXml.selectSingleNode('//description').nodeTypedValue; // alert(msg); } // Display the retrieved value. else { var results = resultXml.getElementsByTagName('BusinessEntity'); var msg = ""; if (results.length == 0) { msg = "Nothing was found "; //alert(msg); return; } else { for (i=0;i < 1;i++) { var idValue = results[i].selectSingleNode('./q1:queueid').nodeTypedValue; result = idValue.toString(); } } return result; } } /*===============================================================*/ //спасибо тому, кто написал эту функцию (откуда скопирована - не помню, но кажется это был mmcrm.ru ) 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/2007/WebServices/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; } } Вот и все, надеюсь, заработает и кому-то еще пригодиться. P.S. если есть более оптимальные варианты - с удовольствием воспользуюсь |
|
|
За это сообщение автора поблагодарили: Elka (1), Hjvfirf (1). |
18.05.2010, 11:37 | #33 |
Участник
|
Хе, а если обращение очереди назначили, а карточку не открывали. Скрипт не сработает, поле не изменится, письмо не уйдет.
__________________
Опыт позволяет ошибаться гораздо увереннее. |
|
18.05.2010, 11:54 | #34 |
Участник
|
Это да но тут вопрос в том, как научить пользователей - можно показать только один вариант, а все остальные спрятать или добавить на кнопки аналогичный код.
Ну и у нас специфика такая, что почти каждый должен отписаться в примечании прежде, чем назначать, поэтому все открывают обращения и онанлоад подходит |
|
18.05.2010, 12:44 | #35 |
Участник
|
NatK, почему то пустой получается xHReq ((
|
|
19.05.2010, 06:17 | #36 |
Участник
|
Попробуйте пошагово пройти, это рабочий код (я его конечно почистила, прежде, чем сюда выкладывать, но вроде ничего нужного не убрала)
|
|
19.05.2010, 10:12 | #37 |
Участник
|
Вот начала проходить по шагам, стопорнулась на том, что xHReq пустой.. до этого все ок
|
|
19.05.2010, 11:51 | #38 |
Участник
|
Цитата:
Попробуйте указать абсолютный путь в этой строке: Код: xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
__________________
Опыт позволяет ошибаться гораздо увереннее. |
|
19.05.2010, 12:10 | #39 |
Участник
|
Денис, так и задано: xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
|
|
19.05.2010, 12:20 | #40 |
Участник
|
Цитата:
Вот и исправьте его на абсолютный, вида: http://[servername]/mscrmservices/2007/CrmService.asmx Неплохо бы еще перед этим в браузере проверить, что адрес рабочий.
__________________
Опыт позволяет ошибаться гораздо увереннее. |
|
|
|