SalesPlatform Vtiger CRM Developers Руководство Обработка событий модуля

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

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


В коде Модуля можно обрабатывать события, генерируемые ядром Vtiger при выполнении определенных действий над Модулем: установка, удаление, обновление, включение и отключение. Событие — это переход объекта из одного состояния в другое. Перед/после совершением события можно предпринять ряд действий, предусмотренные какой-либо задачей.
Для того, чтобы указать действия, которые должны совершаться при определенных событиях, необходимо описать функцию “vtlib-handler” в файле Модуля, находящегося в каталоге modules/<MODULENAME>/<MODULENAME>.php. В качестве параметров функции “vtlib-handler” передаются имя Модуля ($modulename) и тип события ($event_type):

 function vtlib_handler($modulename, $event_type) {...} 

Параметр типа события event_type может иметь следующие значения:

В качестве примера использования vtlib-handler выполним следующие действия после установки и при включении Модуля “MyModule”:

При отключении Модуля:

Подробное описание о типах связей между модулями смотрите в статье «Создание нового Модуля».


Для реализации поставленных задач необходимо предусмотреть следующие действия:
1. Предварительно должны быть созданы объекты Модулей в функции “vtlib_handler”:

 $accounts = Vtiger_Module::getInstance('Accounts');
 $myModule = Vtiger_Module::getInstance('MyModule');
 $contacts = Vtiger_Module_Model::getInstance('Contacts'); 

2. Необходимо получить блок, куда будет добавлено новое поле:

 $block = Vtiger_Block::getInstance('LBL_CONTACT_INFORMATION', $contacts);         


Предусмотреть следующие действия ПОСЛЕ УСТАНОВКИ МОДУЛЯ (module.postinstall):
1. Добавить в модуль “Contacts” поле-ссылку на связанный Модуль “MyModule” (тип связи: Dependents list) (см. рис. 1). Подробное описание свойств поля смотрите в статье «Создание нового Модуля».

 if($event_type == 'module.postinstall') {
     $myModule_field = new Vtiger_Field();
     $myModule_field->name = 'mymoduleid';
     $myModule_field->label = 'My Module';
     $myModule_field->uitype = 10;
     $myModule_field->summaryfield =1;
     $myModule_field->column = $myModule_field->name;
     $myModule_field->columntype = 'VARCHAR(255)';
     $myModule_field->typeofdata = 'V~O';
     $block->addField($myModule_field);
     $myModule_field->setRelatedModules(Array('MyModule'));
 }
Рис. 1: Создание поле-ссылки


2. Добавить в модуль “Accounts” ссылку на связанный список “MyModule” (тип связи: Related list) (см. рис. 2).

 if($event_type == 'module.postinstall') {$accounts->setRelatedList($myModule,'MyModule',Array('ADD','SELECT'));} }   
Рис. 2: Создание связанного списка




Предусмотреть следующие действия ПРИ ВКЛЮЧЕНИИ МОДУЛЯ (module.enabled):
1. Включить в модуле “Contacts” поле-ссылку на связанный Модуль “MyModule”. Для начала получим поле методом getInstance класса Vtiger_Field, которое надо включить в Модуле “Contacts”. В качестве параметров методу getInstance передаем: имя поля (в нашем случае “mymoduleid”) и Модуль “Contacts”. Далее с помощью метода “isset” определяем, была ли установлена переменная $field значением отличным от NULL, если да, то поле включается при помощи установки свойству “presence” значение “2”, т.е. делаем поле-ссылку видимой.

 else if($event_type == 'module.enabled') {  
     $field=Vtiger_Field::getInstance('mymoduleid',$contacts);
     if (isset($field)){
         $field->setPresence(2);
     }
 }

2. Выполнить аналогичные действия (добавление в модуль “Accounts” ссылки на связанный список “MyModule”), используемые после установки Модуля.


Предусмотренные действия ПРИ ОТКЛЮЧЕНИИ МОДУЛЯ (module.disabled):
1. Отключить в модуле “Contacts” поле-ссылку на связанный Модуль “MyModule”. Выполнить аналогичные действия, используемые при включении в модуль “Contacts” поле-ссылки на связанный Модуль “MyModule”. Только поле-ссылку в данном случае необходимо отключить, т.е. свойству “presence” надо установить значение “1”. Тем самым сделаем поле-ссылку невидимой.

 else if($event_type == 'module.disabled') {
     $field=Vtiger_Field::getInstance('mymoduleid',$contacts);
     if (isset($field)){
         $field->setPresence(1);

2. Удалить связь между модулями “Accounts” и “MyModule”. Для удаления связи между Модулями используется метод unsetRelatedList, которому подается на вход связанный Модуль.

 $accounts->unsetRelatedList($myModule);}


Пример использования обработчиков событий управления модулем:

<?php
include_once 'modules/Vtiger/CRMEntity.php';

class MyModule extends Vtiger_CRMEntity {
    var $table_name = 'vtiger_mymodule';
    var $table_index = 'mymoduleid';
    var $customFieldTable = Array('vtiger_mymodulecf', 'mymoduleid');
    var $tab_name = Array('vtiger_crmentity', 'vtiger_mymodule','vtiger_mymodulecf');
    var $tab_name_index = Array('vtiger_crmentity' => 'crmid','vtiger_mymodule' =>'mymoduleid','vtiger_mymodulecf' => 'mymoduleid');	
    
    function vtlib_handler($modulename, $event_type) {
        $contacts=Vtiger_Module_Model::getInstance('Contacts');
        $accounts=Vtiger_Module_Model::getInstance('Accounts');
        $myModule = Vtiger_Module_Model::getInstance('MyModule');
        
        if($event_type == 'module.postinstall') {
            
            //Добавление для Модуля "Contacts" поля-ссылки на модуль "MyModule"
            $this->addField($contacts);
            
            //Добавить для модуля “Контрагент” ссылку на связанный список “MyModule”
            $accounts->setRelatedList($myModule, 'MyModule',Array('ADD','SELECT'));
                        
        } else if($event_type == 'module.disabled') {
            
            //Удаление связи между Модулями “Контрагент” и “MyModule”
            $accounts->unsetRelatedList($myModule);
        
            //Отключение из Модуля "Contacts" поля-ссылки на модуль "MyModule"
            $field=Vtiger_Field::getInstance('mymoduleid',$contacts);
            
            if (isset($field)){
                $field->setPresence(1);
            }
                        
        } else if($event_type == 'module.enabled') {
            
            //Добавить для модуля “Контрагент” ссылку на связанный список “MyModule”
            $accounts->setRelatedList($myModule, 'MyModule',Array('ADD','SELECT'));
            
            //Включение в Модуле "Contacts" поля-ссылки на модуль "MyModule"
            $field=Vtiger_Field::getInstance('mymoduleid',$contacts);
        
            if (isset($field)){
                $field->setPresence(2);
            }                             
                    
        } else if($event_type == 'module.preuninstall') {
        } else if($event_type == 'module.preupdate') {
        } else if($event_type == 'module.postupdate') {
        }
    }   
   
    function addField($contacts_) {
        
        $block=Vtiger_Block::getInstance('LBL_CONTACT_INFORMATION', $contacts_);    
     
        //Добавление для Модуля "Contacts" поля-ссылки на модуль "MyModule"
        $myModule_field = new Vtiger_Field();
        $myModule_field->name = 'mymoduleid';
        $myModule_field->label = 'My Module';
        $myModule_field->uitype = 10;
        $myModule_field->summaryfield =1;
        $myModule_field->column = $myModule_field->name;
        $myModule_field->columntype = 'VARCHAR(255)';
        $myModule_field->typeofdata = 'V~O';
        $block->addField($myModule_field);
        $myModule_field->setRelatedModules(Array('MyModule'));
    }
}


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

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