SalesPlatform Vtiger CRM Developers Руководство Автозаполнение полей

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

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


В системе 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». А именно:

Пример автозаполнения поля можно увидеть на рисунке 1.

Рис. 1: Автозаполнение полей


Для начала получим название и идентификатор Модуля-источника открытой карточки-родителя:

 $sourceModule = $request['sourceModule'];
 $sourceRecordId = $request['sourceRecord'];	
Vt important.png Важно
В версии 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); 	
Vt important.png Важно
Для версии 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).

Рис. 2: Автозаполнение полей Модуля “MyModule”


Готовый скрипт:

<?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;
  }

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

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