SalesPlatform Vtiger CRM Developers Руководство Создание программного обработчика

Материал из SalesPlatform Wiki
Перейти к: навигация, поиск

Главная страница руководства


Программный обработчик

Система SalesPlatform Vtiger CRM позволяет автоматизировать различные бизнес-процессы компании при помощи механизма Обработчиков. Обработчики могут создаваться для любых модулей системы. Один обработчик запускает одну или несколько Задач по одному из событий, а именно:

В системе имеются стандартные типы Задач, которые можно запускать через Обработчики:

  1. Отправить E-mail
  2. Создать Задачу
  3. Создать Событие
  4. Изменить поля
  5. Создать сущность
  6. Отправить SMS
  7. Запустить пользовательскую функцию

Если же не достаточно имеющейся функциональности, которая заложена в стандартные Задачи, имеется возможность реализовывать Задачи программно. Для этого необходимо создать программный метод для Модуля, представляющий собой заданные действия, оформленные в виде Задач, выполняемых в системе. Для того, чтобы добавить в Обработчик Задачу, созданную программно, необходимо выбрать пункт “Запустить пользовательскую функцию” из списка стандартных типов Задач, и в дополнительном окне указать необходимый программный метод.


В качестве примера создадим программный метод для Модуля “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" );

в качестве параметров указываются:

Далее определим программный метод в файле “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();
        }
    }

Присутствуют две возможности добавления Обработчика в систему:

    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):

Рис. 1: Обработчик Модуля “MyModule”


Также можно увидеть пользовательскую Задачу, связанную с Обработчиком:

Рис. 2: Пользовательская Задача


При сохранении записи Модуля “MyModule”. выполняется созданный нами Обработчик, в котором предусмотрена программная Задача, осуществляющая перенос значения поля “Дата” из текущей записи Модуля “MyModule” в связанную с данным Модулем карточку Заказа в поле “Срок оплаты” (см. рис. 3, 4).

Рис. 3: Текущая запись Модуля “MyModule”
Рис. 4: Связанная запись Заказа с текущей записью Модуля “MyModule”



Главная страница руководства

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Документация
Разработчикам
Присоединяйтесь!
Инструменты