Показать сообщение отдельно
Старый 19.08.2009, 15:05   #1  
Blog bot is offline
Blog bot
Участник
 
25,475 / 846 (79) +++++++
Регистрация: 28.10.2006
Мелкомягкий CRM: Запуск бизнес-процессов с помощью JavaScript
Источник: http://mmcrm.ru/?p=611
==============

Даже при том, что механизм бизнес-процессов в CRM 4.0 поддерживает массу способов срабатывания, могут быть случаи, когда треуется более сложная логика их запуска (чем простые события) или более простая – по кнопке на форме или в представлении (что предпочтительно для рутинных задач).

Допустим мы хотим облегчить жизнь нашей службе поддержки, которой приходится обрабатывать кучу обращений в день. Посему сократим для них количество щелчков мыши! В данном примере рассмотрим простой бизнес-процесс, который будет просто закрывать Обращение. В Вашем же случаи он конечно же будет сложнее и может, например, управлять потоками обращений между уровнями службы поддержки (ну, или еще что-нибудь ).

Бизнес-процесс

Создайте бизнес-процесс для объекта Обращение, единственным шагом которого будет изменение статуса на Закрыто! Публикуйте.

Откройте окно настройки бизнес-процесса снова (если Вы его уже закрыли) и нажмите Ctrl + N, откроется новое окно браузера, в котором будет все то же окно настройки бизнес-процесса плюс адресная строка, в которой, в свою очередь, будет GUID бизнес-процесса. Скопируйте его куда-нибудь – он нам позже понадобится (также нужный GUID можно посмотреть в табличке WorkflowBase)!




Вызов с формы

Для этого воспользуемся CRM’ной функцией launchOnDemandWorkflowForm. Добавим кнопку на форму объекта Обращение:
  • Выгрузите файл ISV.Config и откройте его в каком-нибудь тектовом редакторе;
  • Добавьте в него следующий код:
    Пояснение… функции launchOnDemandWorkflowForm мы передали три параметра: первый пустой (всегда), второй это id объекта на который настроен бизнес-процесс (в данном случаи это Обращение), а последний это id самого бизнес-процесса!
  • Экспортируйте ISV.Config обратно!
  • Если Вы этого еще не сделали, то включите отображение настраеваемых меню в CRM системе: Параметры – Администрирование – Системные параметры – вкладка Настройка – секция Настраиваемые меню и панели инструментов – добавьте те клиенты, в которых хотите показывать кастомные кнопки!
  • Откройте какое-нибудь активное Обращение и нажмите на новую кнопку! Появится вопрос с подтверждением, жмите ОК – запусится бизнес-процес (Вы можете наблюдать есо в Системных заданиях или в разделе Бизнес-процессы на левой навигационной панели). Через некоторое время (после того как бизнес-процесс отработает) обращение перейдет в неактивное состояние!





Вызов из представления

Также используем стандартную CRM’ную функцию, но на этот раз она называется launchOnDemandWorkflow! В отличие от предыдущей первый парметр у нее всегда должен быть равен crmGrid (остальные такие же):
  • Снова выгрузите ISV.Config и добавьте в него следующий код:
  • Импортируйте обратно ISV.Config и наблюдает новую кнопочку на панели инструментов представленя объекта Обращения! Там же и протестируйте!
Как Вы понимаете, в представлении можно выбрать несколько записей и применить к ним всем нужный воркфлоу по одной кнопке!

Вызов с помощью Web-сервиса

Использование вышеописанных функции является не поддерживаемым методом, т.к. используются не документированные функции. Поэтому Вы можете воспользоваться вызовом web-сервиса (который является абсолютно поддерживаемым, но более гроздким). Итак, предположим, мы хотим закрыть Обращение после того, как изменили поле Степень удовлетворенности. Добавьте на событие поля Степень удовлетворенности следующий код:

/* объявляем функцию */ExecuteWorkflow = function(entityId, workflowId) {var xml = "" +"" +"" + GenerateAuthenticationHeader() +" " +" " +" " +" " + entityId + "" +" " + workflowId + "" +" " +" " +" " +"" +"";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 resultXml = xmlHttpRequest.responseXML;return(resultXml.xml);}// вызываем бизнес-процессExecuteWorkflow(crmForm.ObjectId, "82F70D59-8FBA-4809-8178-A3161173440E"); // измените на Id Вашего бизнес-процессаТестируем: создайте новое обращение, введите обязательные поля, сохраните (если не сохраним не будет записи, а не будет записи не сможем применить к ней бизнес-процесс), измените поле Степень удовлетворенности. Все на связанном представлении можете любоваться как постепенно закрывается Вам инцидент!






Этот же скрипт можно встроить и в ISV.Config (для любителей саппорта )! Например, так (измените только id бизнес-процесса в третьей переменной):






Обратите внимание, что все служебные символы для xml-файла заменены, так называемыми, ссылками на сущность (т.е., например, левая угловая скобка < заменена на < и т.д. с дргими заменителями и, вообще, более подробно с форматом xml можете ознакомится в педивикии).



Источник: http://mmcrm.ru/?p=611
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.