Источник:
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