SalesPlatform Vtiger CRM Developers Руководство Автозаполнение полей
В системе SalesPlatform Vtiger CRM присутствует возможность организовывать предварительную обработку данных карточки перед ее отображением пользователю. Для организации такой обработки используется механизм “prepare-view”. Для его реализации необходимо создать файл “PrepareView.php” в директории Модуля. Пример содержимого файла:
function prepareEditView_ModuleName($focus, $request, $smarty) { return $focus; }
Вместо “ModuleName” указывается имя модуля. В переменной «$focus» передаются все данные записи (тип "Vtiger_Record_Model") текущего Модуля. Через параметр «$request» можно получить данные HTTP-запроса. В частности, если карточка создается из другой связанной карточки, то в «$request» содержится информация о ней: имя Модуля, а также ее идентификатор. На основе этой информации можно получить необходимые данные для автозаполнения полей создаваемой записи.
Для реализации механизма “prepare-view” необходимо создать файл “Module.php” в директории “models” Модуля со следующим содержимым:
<?php class MyModule_Module_Model extends Vtiger_Module_Model { public function isQuickCreateSupported() { return false; } } ?>
где переопределяется метод “isQuickCreateSupported”, отвечающий за возможность быстрого создания карточки Модуля. Данную возможность мы отключаем, при этом карточка отобразится в детальном режиме. В качестве примера использования “prepare-view” создадим карточку для Модуля «MyModule» из связанного списка открытой карточки Модуля «Accounts» выполнялось автозаполнение необходимых полей текущего Модуля из карточки Модуля-источника «Accounts». А именно:
- установим в поле “Статус” значение “Активно”;
- поле “Name” заполним значением из поля “Название” (“account_no”) открытой карточки Модуля-источника.
Пример автозаполнения поля можно увидеть на рисунке 1.
Для начала получим название и идентификатор Модуля-источника открытой карточки-родителя:
$sourceModule = $request['sourceModule']; $sourceRecordId = $request['sourceRecord'];
Важно
- В версии SalesPlatform Vtiger CRM 7 были изменены названия полей, поэтому их следует заменить: sourceModule на returnmodule и sourceRecord на returnrecord. В итоге строки будут выглядеть следующим образом:
$sourceModule = $request['sourceModule']; $sourceRecordId = $request['sourceRecord'];
Далее в созданный объект «sourceFocus» типа «$sourceModule()» (в нашем случае «Accounts»), в поле «id» фиксируем «id» открытой карточки объекта-источника. Методом «retrieve_entity_info» подгружаем все данные из открытой карточки объекта-родителя в пустой объект «sourceFocus».
$sourceFocus = new $sourceModule(); $sourceFocus->id = $sourceRecordId; $sourceFocus->retrieve_entity_info($sourceRecordId,$sourceModule);
Важно
- Для версии SalesPlatform Vtiger CRM 7 после строки, которая отвечает за создание объекта, следует добавить следующую строку:
$sourceFocus = CRMEntity::getInstance($sourceModule);
После того, как объект «sourceFocus» заполнен, можно воспользоваться его данными для заполнения нужных полей текущего Модуля необходимой информацией, т.е. выполнить автозаполнение полей.
$focus->set('is_active_status', 'Активно'); $focus->set('name', $sourceFocus->column_fields['account_no']);
В результате, при создании карточки для Модуля «MyModule» из связанного списка карточки Модуля-источника «Accounts», форма должна выглядеть следующим образом (см. рис. 2).
Готовый скрипт:
<?php function prepareEditView_MyModule($focus, $request, $smarty) { $sourceModule = $request['sourceModule']; $sourceRecordId = $request['sourceRecord']; if (!empty($sourceRecordId) && $sourceModule == 'Accounts' ) { //Подключаем Модуль-источник require_once ("modules/$sourceModule/$sourceModule.php"); $sourceFocus = new $sourceModule(); $sourceFocus->id = $sourceRecordId; $sourceFocus->retrieve_entity_info($sourceRecordId, $sourceModule); //Заполняем поля текущего Модуля $focus->set('is_active_status', 'Активно'); $focus->set('name', $sourceFocus->column_fields['account_no']); } return $focus; }