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

September 12, 2013

Версии: 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 &mdash;&gt; c_account_industry.js &mdash;&gt; c_account.js

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

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

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

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

c_account_myfilial.js &mdash;&gt; c_account_mycompany.js &mdash;&gt; c_account_bank.js &mdash;&gt; 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_. Например, таблица раздела «Компании» — irisaccount. В этом случае не будет проблем при работе с API.
    • Поля-справочники (т.е. колонки, ссылающиеся на другие записи), по возможности следует называть по следующему шаблону: {Название таблицы}id. Например, поле, ссылающееся на справочник компании — accountid.
    • Символ «» в названиях таблиц рекомендуется использовать только в префиксе и для таблиц-вкладок. Например, iris_projectproduct — таблица продукта в заказе, тут project от product разделен символом «». А таблица iris_projecttype — справочник типов заказа. В ней project от type ничем не разделен.

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

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

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

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

<?php
class TasksByStateReport_custom extends ReportRender
{

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

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