SalesPlatform Vtiger CRM Developers Руководство Создание программного обработчика
Программный обработчик
Система SalesPlatform Vtiger CRM позволяет автоматизировать различные бизнес-процессы компании при помощи механизма Обработчиков. Обработчики могут создаваться для любых модулей системы. Один обработчик запускает одну или несколько Задач по одному из событий, а именно:
- только после первого сохранения записи модуля;
- пока не будет достигнуто условие по значениям полей записи модуля;
- после каждого сохранения записи модуля;
- после каждого изменения записи модуля (т.е. кроме первого сохранения);
- по расписанию.
В системе имеются стандартные типы Задач, которые можно запускать через Обработчики:
- Отправить E-mail
- Создать Задачу
- Создать Событие
- Изменить поля
- Создать сущность
- Отправить SMS
- Запустить пользовательскую функцию
Если же не достаточно имеющейся функциональности, которая заложена в стандартные Задачи, имеется возможность реализовывать Задачи программно. Для этого необходимо создать программный метод для Модуля, представляющий собой заданные действия, оформленные в виде Задач, выполняемых в системе. Для того, чтобы добавить в Обработчик Задачу, созданную программно, необходимо выбрать пункт “Запустить пользовательскую функцию” из списка стандартных типов Задач, и в дополнительном окне указать необходимый программный метод.
В качестве примера создадим программный метод для Модуля “MyModule”, который будет осуществлять перенос значение поля “Дата” из текущей записи Модуля “MyModule” в связанную с данным Модулем карточку Заказа в поле “Срок оплаты”.
Для реализации такой возможности для начала необходимо зарегистрировать программный метод в Менеджере методов, который будет выполнять описанную выше операцию.
Регистрация программного метода Модуля “MyModule”:
require 'modules/com_vtiger_workflow/VTEntityMethodManager.inc'; $emm = new VTEntityMethodManager($adb); $emm->addEntityMethod("MyModule", "Update the Order date","modules/MyModule/workflow/processOrderDate.php", "UpdateOrderDate");
где для добавления программного метода в Менеджер событий используется метод “addEntityMethod”:
$emm->addEntityMethod("Module Name","Label", "Path to file" , "Method Name" );
в качестве параметров указываются:
- Module Name - имя Модуля, к которому добавляется метод;
- Label - название метода;
- Path to file - путь к файлу с кодом обработчика;
- Method Name - название функции метода, расположенной в файле обработчика.
Далее определим программный метод в файле “processOrderDate.php” в директории “modules/MyModule/workflow/”, который будет осуществлять перенос значение поля “Дата” (см. выше).
<?php function UpdateOrderDate($ws_entity){ // WS id $ws_id = $ws_entity->getId(); $module = $ws_entity->getModuleName(); if (empty($ws_id) || empty($module)) { return; } // CRM id $crmid = vtws_getCRMEntityId($ws_id); if ($crmid <= 0) { return; } //получение объекта со всеми данными о текущей записи Модуля "MyModule" $myModuleInstance = Vtiger_Record_Model::getInstanceById($crmid); //получение id Заказа $soId = $myModuleInstance->get('salesorderid'); if($soId) { //получение Даты текущей записи Модуля "MyModule" $date = $myModuleInstance->get('date'); //получение объекта со всеми данными о текущей записи Модуля "Заказ" $soInstance = Vtiger_Record_Model::getInstanceById($soId); //объект в режиме редактирования $soInstance->set('mode', 'edit'); //запись Даты в поле “Срок оплаты” $soInstance->set('duedate', $date); //сохранение $soInstance->save(); } }
Присутствуют две возможности добавления Обработчика в систему:
- через раздел “Другие настройки/Обработчики” в настройках CRM. Где при добавлении Обработчика Вы указываете условие его запуска, необходимые фильтры и программный метод добавляемый при выборе пункта “Запустить пользовательскую функцию” из списка стандартных типов Задач.
- программно (код приведен ниже), например, после установки Модуля (module.postinstall). В примере ниже создается Обработчик при помощи метода “newWorkFlow”. Необходимые Задачи создаются при помощи метода “createTask” с указанием для созданной Задачи программного метода (в нашем случае “UpdateOrderDate”).
vimport("~~modules/com_vtiger_workflow/include.inc"); vimport("~~modules/com_vtiger_workflow/tasks/VTEntityMethodTask.inc"); vimport("~~modules/com_vtiger_workflow/VTEntityMethodManager.inc"); vimport("~~modules/com_vtiger_workflow/VTTaskManager.inc"); //создание Менеджера событий $vtWorkFlow = new VTWorkflowManager($adb); //создание Обработчика $myWorkFlow = $vtWorkFlow->newWorkFlow("MyModule"); $myWorkFlow->test = ''; $myWorkFlow->description = "Перенос Даты после каждого сохранения"; $myWorkFlow->executionCondition = VTWorkflowManager::$ON_EVERY_SAVE; $myWorkFlow->defaultworkflow = 1; //сохранение нового обработчика в Менеджере Событий $vtWorkFlow->save($myWorkFlow); //получение id созданного Обработчика $id1=$myWorkFlow->id; //создание Задачи $tm = new VTTaskManager($adb); $task = $tm->createTask('VTEntityMethodTask', $myWorkFlow->id); $task->active=true; $task->methodName = "UpdateOrderDate"; $task->subject = "Уведомление о переносе Даты"; $task->summary = 'Перенос Даты из Модуля "MyModule" в связанный Модуль "Заказы"'; $tm->saveTask($task);
В результате в списке обработчиков появится наш обработчик, который будет выполняться после каждого сохранения записи (см.рис.1):
Также можно увидеть пользовательскую Задачу, связанную с Обработчиком:
При сохранении записи Модуля “MyModule”. выполняется созданный нами Обработчик, в котором предусмотрена программная Задача, осуществляющая перенос значения поля “Дата” из текущей записи Модуля “MyModule” в связанную с данным Модулем карточку Заказа в поле “Срок оплаты” (см. рис. 3, 4).