Создание стандартного раздела

Версии: 2.x.

Цель данной статьи — наглядно показать процесс создания нового раздела в IRIS CRM. Под разделом мы будем понимать пункт меню системы, при выборе которого появляется таблица записей, и вкладки. Раздел создается примерно таким же образом, как и справочник. XML описание раздела имеет такой же формат, как и описание справочника, за исключением некоторых дополнительных тегов (об этом ниже). Если для создания справочника мы создавали XML файл с его описанием и добавляли ссылку на данный справочник в разделе «Справочники», то для создания раздела нужно будет сделать два аналогичных действия.

  1. Создать в папке config/sections папку <имя_раздела> и в ней файл structure.xml.
  2. В меню (config/menu.xml) добавить тег для созданного раздела.

Итак, приступим к созданию раздела. Продолжим автомобильную тематику и создадим раздел «Автомобили».

Пример нового раздела

Данный раздел будет содержать следующие свойства для транспортного средства (ТС).

  • «Гос. номер»
  • «Марка»
  • «Тип ТС»
  • «Дата выпуска»
  • «Категория ТС»
  • «VIN»
  • «Цвет»
  • «№ двигателя»
  • «№ кузова»
  • «Мощность л.c.»
  • «Масса»

Поля «Марка» и «Тип ТС» будут ссылками на соответствующие таблицы-справочники, а поле «Категория ТС» — доменным. Процесс создания справочника «Типы ТС» описан в статье «Создание справочника». Скрипт таблицы и его XML описание можно посмотреть там. Скрипты создания таблицы и XML файла для справочника «Марки ТС» выглядит так.

Скрипт создания таблицы:

CREATE TABLE iris_autobrand
(
  id character varying(36) NOT NULL,
  createid character varying(36),
  createdate timestamp without time zone,
  modifyid character varying(36),
  modifydate timestamp without time zone,
 
  name character varying(150),
  startdate timestamp without time zone,
  enddate timestamp without time zone,
  description character varying(500),
 
  CONSTRAINT pk_iris_autobrand PRIMARY KEY (id)
)

Ниже приведен файл описания справочника autobrand.xml.

<?xml version="1.0"?>
<DICT>
   <DICTONARY table="iris_autobrand">
      <GRID_WND caption="Марки ТС" width="600" height="275">
         <COLUMNS>
            <ITEM caption="Название" db_field="Name" width="50%" row_type="common"/>
            <ITEM db_field="startdate" caption="Начало выпуска" width="25%" row_type="common" row_datatype="date"/>
            <ITEM db_field="enddate" caption="Окончание выпуска" width="25%" row_type="common" row_datatype="date"/>
         </COLUMNS>
      </GRID_WND>
      <EDITCARD name="dc_SpaceState" caption="Марка ТС" width="450" height="130" layout="1, 2, 1">
         <ELEMENTS>
            <FIELD elem_type="text" caption="Название" db_field="Name" mandatory="yes" datatype="string" row_type="common"/>
            <FIELD elem_type="text" caption="Начало выпуска" db_field="startdate" mandatory="no" datatype="date" row_type="date"/>
            <FIELD elem_type="text" caption="Окончание выпуска" db_field="enddate" mandatory="no" datatype="date" row_type="date"/>
            <FIELD elem_type="textarea" textarea_rows="2" caption="Описание" db_field="Description" mandatory="no" datatype="string" row_type="common"/>
         </ELEMENTS>
      </EDITCARD>
   </DICTONARY>
</DICT>

Данный справочник имеет 2 поля формата «Дата». Но, как видно из XML файла, добавлять поля с типом «Дата» совсем не сложно.

Теперь, когда оба справочника созданы, желательно проверить их работу и внести в них тестовые данные. Если все в порядке, то можно приступать к созданию раздела. Вначале создадим таблицу «Автомобили».

CREATE TABLE iris_auto
(
  id character varying(36) NOT NULL,
  createid character varying(36),
  createdate timestamp without time zone,
  modifyid character varying(36),
  modifydate timestamp without time zone,
 
  gosnum character varying(100),
  autobrandid character varying(36),
  autotypeid character varying(36),
  builddate timestamp without time zone,
  vin character varying(100),
  color character varying(100),
  enginenum character varying(100),
  bodynum character varying(100),
  power numeric(10,2),
  mass numeric,
 
  CONSTRAINT pk_iris_auto PRIMARY KEY (id),
  CONSTRAINT fk_iris_auto_autotypeid FOREIGN KEY (autotypeid) REFERENCES iris_autotype (id) MATCH SIMPLE,
  CONSTRAINT fk_iris_auto_autobrandid FOREIGN KEY (autobrandid) REFERENCES iris_autobrand (id) MATCH SIMPLE
)

После того, как таблица будет создана, можно создать XML файл с описанием раздела. Создадим папку config/Auto и в ней файл описания раздела structure.xml.

Внимание! Создаваемый файл должен быть в кодировке UTF-8.

XML файл описания созданного раздела Auto будет иметь следующее содержимое.

<?xml version="1.0"?>
<MENU_TAB>
   <TAB section_type="common" caption="Автомобили" table="iris_auto">
      <GRID lines_count="1">
         <COLUMNS>
            <ITEM db_field="gosnum" caption="Гос. номер" width="30%" row_type="common"/>
            <ITEM db_field="AutobrandID" caption="Марка" width="15%" row_type="fk_column" row_type_parent_table="iris_AutoBrand" row_type_parent_display_column="Name"/>
            <ITEM db_field="AutotypeID" caption="Тип" width="15%" row_type="fk_column" row_type_parent_table="iris_AutoType" row_type_alias="AT" row_type_parent_display_column="Name"/>
            <ITEM db_field="vin" caption="VIN" width="30%" row_type="common"/>
            <ITEM db_field="enginenum" caption="Номер двигателя" width="30%" row_type="common" display_format="none"/>
         </COLUMNS>
         <FILTERS>
            <ITEM caption="Все авто" item_style="font-weight: bold;" where_clause="1=1" default_selected="yes"/>
         </FILTERS>
      </GRID>
      <GRID_WND lines_count="1" caption="Автомобили" width="600" height="280">
         <COLUMNS>
            <ITEM db_field="gosnum" caption="Гос. номер" width="30%" row_type="common"/>
            <ITEM db_field="vin" caption="VIN" width="30%" row_type="common"/>
            <ITEM db_field="enginenum" caption="Номер двигателя" width="30%" row_type="common"/>
         </COLUMNS>
      </GRID_WND>
      <EDITCARD name="c_Auto" caption="Автомобиль" width="600" height="120" layout="2, 2, 1, 1, 2, 2">
         <ELEMENTS row_type="fk_column">
            <FIELD elem_type="lookup" caption="Марка" db_field="AutobrandID" mandatory="yes" datatype="id" row_type="fk_column" row_type_parent_source_type="dict" row_type_parent_source_name="autobrand" row_type_parent_display_column="Name"/>
            <FIELD elem_type="text" caption="Гос. номер" db_field="gosnum" mandatory="yes" datatype="string" row_type="common"/>
            <FIELD elem_type="select" caption="Тип ТС" db_field="AutoTypeID" mandatory="yes" datatype="id" row_type="fk_column" row_type_parent_table="iris_AutoType" row_type_parent_display_column="Name"/>
            <FIELD elem_type="text" caption="Дата выпуска" db_field="BuildDate" mandatory="no" datatype="date" row_type="date"/>
            <FIELD elem_type="splitter" caption="Технические данные"/>
            <FIELD elem_type="text" caption="VIN" db_field="vin" mandatory="yes" datatype="string" row_type="common"/>
            <FIELD elem_type="text" caption="Номер двигателя" db_field="enginenum" mandatory="no" datatype="string" row_type="common"/>
              <FIELD elem_type="text" caption="Масса, кг"    db_field="mass" mandatory="no" datatype="int" row_type="common"/>
              <FIELD elem_type="text" caption="Мощность, л.с."    db_field="power" mandatory="yes" datatype="decimal"    row_type="common"/>
            <FIELD elem_type="text" caption="Цвет" db_field="color" mandatory="no" datatype="string" row_type="common"/>
         </ELEMENTS>
      </EDITCARD>
   </TAB>
</MENU_TAB>

Чтобы новый раздел появился в системе, его нужно добавить в меню. Для этого в файл config/menu.xml добавим новую группу, и в ней наш раздел.

<MENU type="mini">
   <GROUP name="Примеры">
      <ITEM name="Auto"/>
   </GROUP>
   ..........................
</MENU>

Итак, раздел создан. Если все было создано без ошибок, то при обновлении системы (кнопка обновить в браузере) он должен появиться. Теперь рассмотрим, что означают теги в файле structure.xml. Как мы видим, структура этого файла похожа на описание справочника. В файле присутствуют 3 объемных тега:

  1. GRID. Описывает таблицу записей раздела. В нем каждый тег ITEM описывает соответсвующую колонку таблицы. Порядок следования колонок таблицы зависит от их порядка в XML файле. Кроме того, в таблице отображается 4 колонки, а в XML файле их 5. Дело в том, что последняя колонка — скрытая. у нее имеется атрибут display_format = none. Она не отображена в таблице, зато доступна в его панели поиска. Панель поиска в таблице записей формируется автоматически на основе описания его колонок. Поэтому если необходимо сделать поиск по каким либо полям, которые не нужно отображать в таблице, то можно поступить вышеописанным образом. Также, можно отключить панель поиска в таблице, указав тегу GRID атрибут display_search = no. Также, таблицу записей можно сделать редактируемой. Для этого в теге GRID нужно указать атрибут is_editable = yes и по двойному щелчку можно будет менять значение полей.

  2. GRID_WND. Данный тег описывает таблицу записей раздела, которая будет открываться в окне (например, при нажатии кнопки «...» lookup поля). Его функционал полностью аналогичен GRID. Но используется данную таблицу, когда из какой либо карточки в поле с кнопкой «…» (например, «Компания») необходимо открыть список компаний. В этой таблице, как правило, присуствуют только необходимые поля, хотя можно целиком копировать поля из тега GRID.

  3. EDITCARD. Данный тег отвечает за описание карточки. На данной карточке представлены помимо текстовых полей поля select (выпадающий список) и lookup (выбор значения из большого списка с автозавершением). Также, имеется псевдополе splitter, которое создает группу элементов на карточке.

Данный раздел пока не имеет панели фильтров и закладок. Как добавить эти элементы будет описано в следующих статьях.