Рекомендации по выполнению настроек

Версии: 4+

Описания разделов CRM системы хранятся в каталоге config/sections/<Код раздела>. В каждом каталоге содержится файл structure.xml с описанием таблиц и карточек раздела. А также .js и .php файлы с описанием бизнес-логики.

Если Вы желаете упростить процесс обновления системы до свежих версий, то мы не рекомендуем изменять эти файлы. Вместо этого мы рекомендуем выполнять изменения в одноимённых файлах с окончанием _custom. Например, если требуется в карточку компании добавить новое поле, то скопируйте файл config/sections/Account/structure.xml в config/sections/Account/structure_custom.xml и выполните необходимые настройки в новом файле.

Далее подробнее описан принцип работы с каждым типом файла.

XML

При копировании XML файла (в structure_custom.xml) всё его содержимое будет переопределяться новой копией файла. При обновлении системы будет перезаписан только прежний XML файл. Это означает, что изменения XML файла из обновления не будут отражены в системе. Но и настройки, выполненные Вами, не будут изменены.

PHP

Часто требуется к стандартной бизнес-логике добавить свои функции. Для этой цели скопируйте PHP файл, в котором содержится необходимый обработчик. Например, s_account.php в s_account_custom.php. Переименуйте класс соответствующим образом (в данном случае s_Account в s_Account_custom). Вы можете наследовать новый класс от старого. Например.

<?php
require_once dirname(__FILE__) . '/s_account.php';

class s_Account_custom extends s_Account
{
    function onPrepare($params) 
    {
        // Обработчик родительского класса
        $result = parent::onPrepare($params);

        // Заполняем значения по умолчанию только при создании новой записи
        if ($params['mode'] != 'insert') {
            return $result;
        }

        // Пример
        $result = FieldValueFormat('Description', 'Test description', null, $result);

        return $result;
    }
}

В таком случае при обновлении системы заменяется старый PHP файл с родительским классом. В итоге оба файла будут выполнять свои функции.

Javascript

По аналогии с PHP допускается создавать копии .js файлов (c _custom), в которых можно дополнять или переопределять обработчики родительского класса.

irisControllers.classes.c_Account_custom = irisControllers.classes.c_Account.extend({

  onOpen: function () {
    // Родительский обработчик
    irisControllers.classes.c_Account_custom.__super__.onOpen.call(this);

    alert('Новый функционал');
  }

});

Изменение порядка наследования

Для версии 4.0.09+.

По умолчанию определена 3-уровневая иерархия. На примере c_account.js:

c_account_custom.js —> c_account_industry.js —> c_account.js

Если Вы желаете изменить порядок наследования, то для этого можно создать файл config/loader_custom.php следующего содержания.

class Loader_custom extends Loader
{
    // Конструктор
    public function __construct() 
    {
        parent::__construct();

        /**
         * В порядке наследования
         */
        $this->_order = array(
            '',
            '_bank',
            '_mycompany',
            '_myfilial',
        );
    }
}

Теперь иерархия будет выглядеть так.

c_account_myfilial.js —> c_account_mycompany.js —> c_account_bank.js —> c_account.js

Шаблоны

В 4-й версии Iris CRM стандартные представления содержатся в каталоге core/engine/views/. Если в шаблоне представление не переопределено, то используется стандартное представление. Для изменения представления скопируйте файл с соответствующим представлением из ядра в каталог views Вашего шаблона (в core/templates/<Ваш шаблон>/views).

Описание представлений.

ПредставлениеОписание
card.phpКарточка
card-details.phpВкладки карточки
card-field-<Тип>.phpПоле карточки соответствующего типа
card-form.phpФорма карточки
card-header.phpЗаголовок карточки
card-loading.phpЗагрузка карточки
card-title.phpЗаголовок карточки
current-time.phpТекущее время
dialog.phpДиалоговое окно
filter.phpФильтры раздела
grid.phpТаблица с данными
grid-buttons.phpНижняя панель с кнопками таблицы
grid-search.phpСтрока поиска в таблице с данными
grid-summary.phpСтрока с итоговыми данными таблицы
menu.phpМеню
menu-refresh-icon.phpИконка для пункта меню при загрузке раздела
reminder.phpНапоминания
report.phpОтчёт
user-info-panel.phpИнформация о пользователе
workspace.phpШаблон

База данных

  • Добавлять/редактировать таблицы и колонки рекомендуется только из интерфейса системы в разделе Администрирование-Таблицы. В этом случае созданные таблицы и колонки будут доступны для вывода в отчеты. В такие таблицы можно импортировать данные штатными средствами.
  • Не стоит переименовывать таблицы и колонки, относящиеся к стандартной конфигурации. Также не рекомендуется менять типы стандартных колонок. Это усложнит дальнейшую поддержку системы. В таких случаях рекомендуется создавать новые таблицы/колонки. С другой стороны, изменить ограничения в стандартных колонках — нормальная практика.
  • Соглашение о наименованиях
    • Названия таблиц и колонок на английском языке в нижнем регистре.
    • В названиях таблиц необходимо использовать префикс iris_. Например, таблица раздела «Компании» — iris_account. В этом случае не будет проблем при работе с API.
    • Поля-справочники (т.е. колонки, ссылающиеся на другие записи), по возможности следует называть по следующему шаблону: {Название таблицы}id. Например, поле, ссылающееся на справочник компании — accountid.
    • Символ «_» в названиях таблиц рекомендуется использовать только в префиксе и для таблиц-вкладок. Например, iris_project_product — таблица продукта в заказе, тут project от product разделен символом «_». А таблица iris_projecttype — справочник типов заказа. В ней project от type ничем не разделен.

Обработчики в отчетах

Если стандартных возможностей конструктора отчетов недостаточно, то можно использовать серверные и клиентские обработчики отчетов. Для этого в первую очередь в конструкторе отчета необходимо указать код отчета, для которого надо переопределить логику отрисовки. Для этого заполните поле Код в карточке отчета. Например, TasksByState.

Серверные обработчики

Создайте файл iriscrm/config/sections/Report/reports/tasksbystate_custom.php (в нижнем регистре). Класс, который определяется в этом файле, должен переопределять необходимые методы класса ReportRender. Обратите внимание на название класса, оно состоит из <Код отчёта>Report.

class TasksByStateReport_custom extends ReportRender
{

    /**
     * Построение таблицы отчёта
     */
    public function buildTable()
    {
        $table = null;
        if (!$this->format || $this->format == 'html') {
            $table .= '<h2 id="headers">this::_show_info</h2><pre>';
            $table .= print_r($this->_show_info, true);
            $table .= '</pre>';
            $table .= '<h2 id="data">this::data</h2><pre>';
            $table .= print_r($this->data, true);
            $table .= '</pre>';

            // Если этих элементов нет в стандартном шаблоне, 
            // то можно их добавить вручную (для вызова JavaScript):
            // (в версиях до 4.0.29)
            $table .= '<!--#aftershowscript#-->';
            $table .= '<!--#aftershowfunction#-->';
        }
        else 
        if ('csv' == $this->format) {
            $table = BuildReportTable($this->data, $this->_show_info, 
                    $this->_sql, $this->_params, 
                    $this->errorinfo, $this->format);
        }
        return $table;
    }

}

Метод buildTable() должен возвращать табличную часть. Аналогично можно переопределять и другие методы класса ReportRender.

Клиентские обработчики

Создайте файл iriscrm/config/sections/Report/reports/tasksbystate_custom.js (в нижнем регистре). Обратите внимание на название класса, оно состоит из <Код отчёта>Report. В этом классе достаточно определить обработчик onOpen().

irisControllers.classes.TasksByStateReport_custom = IrisController.extend({
  onOpen: function() {
    alert(jQuery('#headers').text());
  }
});

Навигация