Создание основы
В основу входит:
- Написание SQL-запроса (Кастомная коллекция)
- Описание метаданных (Кастомная коллекция)
- Связь колонок с данными SQL-запроса (Дескриптор)
- Связь навигационной панели на полученную таблицу (Представление)
Кастомная коллекция
Кастомная коллекция представляет собой набор 2-х файлов:
language | xml |
---|---|
title | в одном из которых описывается SQL-запрос, кол-во возвращаемых записей, фильтрация |
Создание представления
SQL-запрос
Примечание |
---|
Список обязательных колонок, если по записи нужно потом получить объект (документ, заявку, справочник и т.д.): id, created_date, updated_date, Module, self_1, self_2, self_3. |
Получение данных:
- Системные поля прописаны в таблицах и их можно найти в разделе 4.1. Схема данных AF5/CM6.
Настраиваемые поля хранятся в таблицах tn_field и tn_field_<тип данных> (string, date, datetime, decimal и т.д.)
Блок кода language sql title Запрос на получение значения из настаиваемого поля status linenumbers true collapse true select tfs."value" as v from
tn_field join
tn_field_string tfs
on tn_field.access_object_id = tfs.id where tn_field."owner"
= rkkbase.id and tn_field.owner_type =
rkkbase.
id_
type
and tn_field.cmjfield = 'status') as statusWPRequest
Поля из комплексного справочника хранятся в таблицах classifier_compleх, clscom_tag, cls_typeComp
Блок кода language sql title Запрос на получение значения из поля valueCountry комплексного справочника Офис (схема ComplectClassifierOffice) linenumbers true collapse true SELECT title FROM classifier_complex WHERE classifier_complex.id = ( SELECT complex1.id FROM clscom_tag tag1 left join clscom_to_tag to_tag1 on to_tag1.tag = tag1.id left join classifier_complex complex1 on complex1.id = to_tag1.classifier left join cls_typeComp typecom1 on typecom1.id = complex1.owner WHERE ( tag1.schema = 'ComplectClassifierOffice' and typecom1.alias = 'valueCountry' and tag1.id = tag.id )) ) as OfficeCountry
Кастомная коллекция
Кастомная коллекция представляет собой набор 2-х файлов:
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<collection name="WorkplaceRequests_(vw_cmj_all)" idField="id" replace="runtime"> <prototype> <![CDATA[ '<id>' as self_1, SELECT ':' as self_2, '</>' as self_3id, so_department.HierRoot as orgsystemcreated_iddate, fullName updated_date, getisolated(so_department.id) as gorfModule, CASE self_1, WHEN so_department.departmenttype = 'ГО: ГОЛОВНОЙ ОФИС' then '0' self_2, WHEN so_department.departmenttype = 'РФ: РЕГИОНАЛЬНЫЙ ФИЛИАЛ' then '1' self_3, typeRequest, statusWPRequest, stage, WHEN so_department.departmenttype = 'Р: РУКОВОДСТВО' then '2' regNumber, WHEN so_department.departmenttype = 'Д: ДЕПАРТАМЕНТ' then '3' rNumber, WHEN so_department.departmenttype = 'ЕСЦ: ЕСЦ' then '4' numberWOTags, wpInitiator, term, WHEN so_department.departmenttype = 'У: УПРАВЛЕНИЕ' then '5' finishtime, wpEmployee, WHEN so_department.departmenttype = 'С: СЛУЖБА' then '6' wpEmpDepartment, WHEN so_department.departmenttype = 'О: ОТДЕЛ' then '7'wpEmpHierDepatment, WHEN so_department.departmenttype = 'Г: ГРУППА' then '8' wpEmpGoingToWork, wpMovingDate, WHEN so_department.departmenttype = 'ДО: ДОПОЛНИТЕЛЬНЫЙ ОФИС' then '9' wpInitBranch, WHEN so_department.departmenttype = 'ОО: ОПЕРАЦИОННЫЙ ОФИС' then '10' wpOffice, wpTypeOffice, WHEN so_department.departmenttype = 'КО: КРЕДИТНЫЙ ОФИС' then '11' wpInitOrganization, WHEN so_department.departmenttype = 'ОКВКУ: ОПЕРАЦИОННАЯ КАССА ВНЕ КАССОВОГОwpInitiatorDepartment, УЗЛА' then '12' wpLocality, ELSE '13' wpCountry, END as departmenttype FROMwpArea, SO_Department so_department wpFloor, natural join so_unitwpRoomNumber, natural join so_structureunitwpCode inner join so_beard beard on beard.id = so_structureunit.beard and beard.id_type = so_structureunit.beard_type FROM ( WHERE select rkkbase.id, rkkbase.created_date, rkkbase.updated_date, so_department.accessRedirect is null rkkbase.module ) s ::from-clause WHERE AS Module, '<id>' 1 = 1 ::where-clause ]]> </prototype> <filter name="MODULE">AS self_1, ':' <reference placeholder="from-clause"> <![CDATA[ join SS_ModuleOrg ss_module_org on ss_module_org.Organization = orgsystem_id AS self_2, ]]> '</>' </reference> <criteria placeholder="where-clause"> <![CDATA[ ss_module_org.Module = {0} AS self_3, rkkbase."type" ]]> </criteria> </filter> <filter name="fullName_partial"> <criteria placeholder="where-clause"> <![CDATA[AS typeRequest, (select tfs."value" as v lower(s.fullName) like ('%' || lower({0}) || '%')from tn_field join tn_field_string tfs ]]> on tn_field.access_object_id = tfs.id </criteria> </filter>where tn_field."owner" = rkkbase.id <filter name="gorf_partial"> and <criteria placeholder="where-clause">tn_field.owner_type = rkkbase.id_type <![CDATA[ and tn_field.cmjfield = 'status') as statusWPRequest, (select tfs."value" as v lower(s.gorf) like ('%' || lower({0}) || '%') from tn_field join tn_field_string tfs on tn_field.access_object_id = tfs.id ]]> </criteria> </filter>where tn_field."owner" = rkkbase.id <filter name="CQSEARCH"> and <criteria placeholder="where-clause">tn_field.owner_type = rkkbase.id_type <![CDATA[ lower(s.fullName) like ('%' || lower({0})and tn_field.cmjfield = 'stage') as stage, '<regNumberPrefix>' || coalesce(rkk.prjnumprist, '') || '</>' || '<regNumberCounter#Number>' || coalesce(cast(rkk.prjnumcounter as varchar), '') || '</>' || '%<regNumberSuffix>') || coalesce(rkk.prjnumfin , '') || '</>' as regNumber, rkk.prjnumcounter as rNumber, coalesce(rkk.prjnumprist, ]]> </criteria> </filter> </collection> | ||||||||
Блок кода | ||||||||
| ||||||||
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd" default-lazy-init="true"> <bean id="SO_(vw_cmj_all_deps)Metadata" class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.CollectionMetadataNew" p:searchArea="so_departments_search_uicoll"> <constructor-arg>'') || coalesce(cast(rkk.prjnumcounter as VARCHAR), '') || coalesce(rkk.prjnumfin, '') as numberWOTags, (select coalesce('<id>' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'%(.*)') || ':' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'(.*)%') || '</><shortName>' || substr(tfs."value", 1, strpos(tfs."value", '%') - 1) || '</>', '<id></><shortName></>') as v from tn_field join tn_field_string tfs on tn_field.access_object_id = tfs.id where tn_field."owner" = rkkbase.id <list value-type="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field">and tn_field.owner_type = rkkbase.id_type and tn_field.cmjfield <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="self">= 'wpInitiator') as wpInitiator, (select tfs."value" as v from tn_field join tn_field_datetime tfs <property name="virtualField">on tn_field.access_object_id = tfs.id where tn_field."owner" = rkkbase.id <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.BuildVirtualField"> and tn_field.owner_type = rkkbase.id_type and tn_field.cmjfield = 'plannedfinishtime') as term, (select tfs."value" <property name="realFields">as v from tn_field join tn_field_datetime tfs on tn_field.access_object_id = <list>tfs.id where tn_field."owner" = rkkbase.id and tn_field.owner_type = rkkbase.id_type <value>self_1</value> and tn_field.cmjfield = 'finishtime') as finishtime, (select tfs."value" as v from tn_field <value>Module</value> join tn_field_beard tfs on tn_field.access_object_id = tfs.id where tn_field."owner" = rkkbase.id <value>self_2</value> and tn_field.owner_type = rkkbase.id_type and tn_field.cmjfield = 'assignee') as assignee, (select coalesce('<id>' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'%(.*)') || ':' <value>ID</value> || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'(.*)%') || '</><shortName>' || substr(tfs."value", 1, strpos(tfs."value", '%') - 1) || '</>', '<id></><shortName></>') as v <value>created_date</value> from tn_field join tn_field_string tfs on tn_field.access_object_id = tfs.id where <value>self_3</value>tn_field."owner" = rkkbase.id and tn_field.owner_type = rkkbase.id_type and tn_field.cmjfield = 'wpEmployee') as </list>wpEmployee, (select date(tfs."value") as v from tn_field </property> join tn_field_dateonly tfs on tn_field.access_object_id = tfs.id <property name="pattern" value="<id>([0-9]{16}):([0-9A-F]{32})</>" />where tn_field."owner" = rkkbase.id and tn_field.owner_type = rkkbase.id_type and tn_field.cmjfield <property name="separator" value="" />= 'wpEmpGoingToWork') as wpEmpGoingToWork, (select date(tfs."value") as v from tn_field join tn_field_dateonly tfs <property name="emptySeparator" value="true" />on tn_field.access_object_id = tfs.id where tn_field."owner" = rkkbase.id </bean> and tn_field.owner_type = rkkbase.id_type and tn_field.cmjfield </property> </bean>= 'wpMovingDate') as wpMovingDate, (select coalesce('<id>' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'%(.*)') || ':' <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="beard">|| substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'(.*)%') || '</><shortName>' || substr(tfs."value", 1, strpos(tfs."value", '%') - 1) || '</>', '<id></><shortName></>') as v <property name="virtualField"> from tn_field join tn_field_string tfs <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.BeardVirtualField">on tn_field.access_object_id = tfs.id where tn_field."owner" = rkkbase.id and <property name="realFields"> tn_field.owner_type = rkkbase.id_type and tn_field.cmjfield = 'wpEmpDepartment') as wpEmpDepartment, (select tfs."value" as <list>v from tn_field join tn_field_string tfs on tn_field.access_object_id = tfs.id <value>Module</value> where tn_field."owner" = rkkbase.id and tn_field.owner_type = rkkbase.id_type and <value>self_2</value> <value>ID</value> tn_field.cmjfield = 'wpEmpHierDepatment') as wpEmpHierDepatment, (select coalesce('<id>' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'%(.*)') || ':' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'(.*)%') || '</><shortName>' || substr(tfs."value", 1, strpos(tfs."value", '%') - 1) || '</>', '<id></><shortName></>') as v from <value>created_date</value>tn_field join tn_field_string tfs on tn_field.access_object_id = tfs.id </list> where tn_field."owner" = rkkbase.id and tn_field.owner_type = rkkbase.id_type </property> and tn_field.cmjfield = 'wpInitBranch') as wpInitBranch, (select tfs."value" as v </bean>from tn_field join tn_field_string tfs </property>on tn_field.access_object_id = tfs.id where tn_field."owner" </bean>= rkkbase.id <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="depType" p:sortOrder="ASCENDING" />and tn_field.owner_type = rkkbase.id_type and tn_field.cmjfield = 'wpOffice') <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="fullName" p:filter="fullName" p:sortOrder="ASCENDING" />as wpOffice, (select tfs."value" as v </list> from tn_field </constructor-arg> join </bean> </beans> | ||||||||
Раскрыть | ||||||||
| ||||||||
<?xml version="1.0" encoding="UTF-8"?> |
Примечание |
---|
Названия корневого bean должно строиться из названия collection и префикса Metadata. Пример: SO_(vw_cmj_all_deps)Metadata |
Дескриптор
Действия= {0}
]]>
</criteria>
</filter>
<filter name="self">
<criteria placeholder="where-clause"><![CDATA[ Module = {0} and id = {1} ]]></criteria>
</filter>
<filter name="created_date">
<criteria placeholder="where-clause">
<![CDATA[
cast(created_date as date) = cast({0} as date)
]]>
</criteria>
</filter>
<filter name="rNumber">
<criteria placeholder="where-clause"><![CDATA[ rNumber = {0} ]]></criteria>
</filter>
<filter name="rNumber_partial">
<criteria placeholder="where-clause"><![CDATA[ rNumber iLIKE ('%'||{0}||'%') ]]></criteria>
</filter>
<filter name="rNumber_L">
<criteria placeholder="where-clause"><![CDATA[ rNumber < {0} ]]></criteria>
</filter>
<filter name="rNumber_GE">
<criteria placeholder="where-clause"><![CDATA[ rNumber >= {0} ]]></criteria>
</filter>
<filter name="rNumber_Partial">
<criteria placeholder="where-clause"><![CDATA[ rNumber LIKE {0} ]]></criteria>
</filter>
<filter name="regNumber">
<criteria placeholder="where-clause"><![CDATA[ regNumber = {0} ]]></criteria>
</filter>
<filter name="regNumber_partial">
<criteria placeholder="where-clause"><![CDATA[ numberWOTags iLIKE ('%'||{0}||'%') ]]></criteria>
</filter>
<filter name="typeRequest">
<criteria placeholder="where-clause">
<![CDATA[
typeRequest = {0}
]]>
</criteria>
</filter>
<filter name="typeRequest_partial">
<criteria placeholder="where-clause">
<![CDATA[
typeRequest ilike '%'||{0}||'%'
]]>
</criteria>
</filter>
<filter name="wpInitiator">
<criteria placeholder="where-clause">
<![CDATA[
wpInitiator = {0}
]]>
</criteria>
</filter>
<filter name="wpInitiator_partial">
<criteria placeholder="where-clause">
<![CDATA[
wpInitiator ilike '%'||{0}||'%'
]]>
</criteria>
</filter>
<filter name="stage">
<criteria placeholder="where-clause">
<![CDATA[
stage = {0}
]]>
</criteria>
</filter>
<filter name="stage_partial">
<criteria placeholder="where-clause">
<![CDATA[
stage ilike '%'||{0}||'%'
]]>
</criteria>
</filter>
<filter name="statusWPRequest">
<criteria placeholder="where-clause">
<![CDATA[
wpStatus = {0}
]]>
</criteria>
</filter>
<filter name="statusWPRequest_partial">
<criteria placeholder="where-clause">
<![CDATA[
statusWPRequest ilike '%'||{0}||'%'
]]>
</criteria>
</filter>
<filter name="term_partial">
<criteria placeholder="where-clause">
<![CDATA[
cast(term as date) = cast({0} as date)
]]>
</criteria>
</filter>
<filter name="finishtime_partial">
<criteria placeholder="where-clause">
<![CDATA[
cast(finishtime as date) = cast({0} as date)
]]>
</criteria>
</filter>
<filter name="wpEmpGoingToWork_partial">
<criteria placeholder="where-clause">
<![CDATA[
cast(wpEmpGoingToWork as date) = cast({0} as date)
]]>
</criteria>
</filter>
<filter name="wpMovingDate">
<criteria placeholder="where-clause">
<![CDATA[
(wpMovingDate >= ({0})::timestamp and
wpMovingDate < (({0})::timestamp + interval '1 day'))
]]>
</criteria>
</filter>
<filter name="assignee">
<criteria placeholder="where-clause">
<![CDATA[
assignee = {0}
]]>
</criteria>
</filter>
<filter name="assignee_partial">
<criteria placeholder="where-clause">
<![CDATA[
assignee ilike '%'||{0}||'%'
]]>
</criteria>
</filter>
<filter name="wpEmployee">
<criteria placeholder="where-clause">
<![CDATA[
wpEmployee = {0}
]]>
</criteria>
</filter>
<filter name="wpEmployee_partial">
<criteria placeholder="where-clause">
<![CDATA[
wpEmployee ilike '%'||{0}||'%'
]]>
</criteria>
</filter>
<filter name="wpEmpDepartment">
<criteria placeholder="where-clause">
<![CDATA[
wpEmpDepartment = {0}
]]>
</criteria>
</filter>
<filter name="wpEmpDepartment_partial">
<criteria placeholder="where-clause">
<![CDATA[
wpEmpDepartment ilike '%'||{0}||'%'
]]>
</criteria>
</filter>
<filter name="wpInitBranch">
<criteria placeholder="where-clause">
<![CDATA[
wpInitBranch = {0}
]]>
</criteria>
</filter>
<filter name="wpInitBranch_partial">
<criteria placeholder="where-clause">
<![CDATA[
wpInitBranch ilike '%'||{0}||'%'
]]>
</criteria>
</filter>
<filter name="wpInitiatorDepartment">
<criteria placeholder="where-clause">
<![CDATA[
wpInitiatorDepartment = {0}
]]>
</criteria>
</filter>
<filter name="wpInitiatorDepartment_partial">
<criteria placeholder="where-clause">
<![CDATA[
wpInitiatorDepartment ilike '%'||{0}||'%'
]]>
</criteria>
</filter>
<filter name="wpLocality">
<criteria placeholder="where-clause">
<![CDATA[
wpLocality = {0}
]]>
</criteria>
</filter>
<filter name="wpLocality_partial">
<criteria placeholder="where-clause">
<![CDATA[
wpLocality ilike '%'||{0}||'%'
]]>
</criteria>
</filter>
<filter name="wpCountry">
<criteria placeholder="where-clause">
<![CDATA[
wpCountry = {0}
]]>
</criteria>
</filter>
<filter name="wpCountry_partial">
<criteria placeholder="where-clause">
<![CDATA[
wpCountry ilike '%'||{0}||'%'
]]>
</criteria>
</filter>
<filter name="wpArea">
<criteria placeholder="where-clause">
<![CDATA[
wpArea = {0}
]]>
</criteria>
</filter>
<filter name="wpArea_partial">
<criteria placeholder="where-clause">
<![CDATA[
wpArea ilike '%'||{0}||'%'
]]>
</criteria>
</filter>
<filter name="wpFloor">
<criteria placeholder="where-clause">
<![CDATA[
wpFloor = {0}
]]>
</criteria>
</filter>
<filter name="wpRoomNumber">
<criteria placeholder="where-clause">
<![CDATA[
wpRoomNumber = {0}
]]>
</criteria>
</filter>
<filter name="wpCode">
<criteria placeholder="where-clause">
<![CDATA[
wpCode = {0}
]]>
</criteria>
</filter>
<filter name="wpEmpHierDepatment">
<criteria placeholder="where-clause">
<![CDATA[
wpEmpHierDepatment = {0}
]]>
</criteria>
</filter>
<filter name="wpEmpHierDepatment_partial">
<criteria placeholder="where-clause">
<![CDATA[
wpEmpHierDepatment ilike '%'||{0}||'%'
]]>
</criteria>
</filter>
<filter name="BeforeDate">
<criteria placeholder="where-clause">
<![CDATA[
updated_date < {0}
]]>
</criteria>
</filter>
</collection> |
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd" default-lazy-init="true">
<bean id="WorkplaceRequests_(vw_cmj_all)Metadata"
class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.CollectionMetadataNew" p:caseSensitiveFieldNames="true">
<constructor-arg>
<list value-type="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field">
<bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="self">
<property name="virtualField">
<bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.BuildVirtualField">
<property name="realFields">
<list>
<value>self_1</value>
<value>Module</value>
<value>self_2</value>
<value>ID</value>
<value>created_date</value>
<value>self_3</value>
</list>
</property>
<property name="pattern" value="<id>([0-9]{16}):([0-9A-F]{32})</>" />
<property name="separator" value=""/>
<property name="emptySeparator" value="true"/>
</bean>
</property>
</bean>
</list>
</constructor-arg>
</bean>
</beans> |
Примечание |
---|
Названия корневого bean должно строиться из названия collection и префикса Metadata. Пример: WorkplaceRequests_(vw_cmj_all)Metadata |
Тип элемента коллекции
Описывает тип колонки и её название
Идентификатор колонки должен совпадать с названием колонки, возвращаемой в SQL-запросе кастомной коллекции.
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<?xml version='1.0' encoding='UTF-8'?>
<catalog xmlns="http://www.intertrust.ru/schema/palette/cat-ui">
<column name="finishtime" subject="${catalog.column.finishtime.subject:Дата исполнения}" extends="datetime">
<meta>
<documentation>Фактический срок исполнения</documentation>
</meta>
</column>
<column name="NumberWPRequest" subject="${catalog.column.NumberWPRequest.subject:Номер}" extends="string">
<meta>
<documentation>Номер</documentation>
</meta>
</column>
<column name="NumberWPRequestOneline" subject="${catalog.column.NumberWPRequestOneline.subject:Номер заявки}" extends="string">
<meta>
<documentation>Номер заявки</documentation>
</meta>
</column>
<column name="statusWPRequest" subject="${catalog.column.statusWPRequest.subject:Статус документа}" extends="string">
<meta>
<documentation>Статус</documentation>
</meta>
</column>
<column name="term" subject="${catalog.column.term.subject:Срок исполнения по регламенту}" extends="datetime">
<meta>
<documentation>Срок исполнения по регламенту</documentation>
</meta>
</column>
<complex-column name="wpEmpDepartment" subject="${catalog.column.wpEmpDepartment.subject:СП Работника по заявке}" extends="vcard">
<meta>
<documentation>СП Работника по заявке</documentation>
</meta>
<column-ref ref="shortName"/>
<column-ref ref="id"/>
<column-ref ref="hint"/>
</complex-column>
<complex-column name="wpEmployee" subject="${catalog.column.wpEmployee.subject:Работник по заявке}" extends="vcard">
<meta>
<documentation>Работник по заявке</documentation>
</meta>
<column-ref ref="shortName"/>
<column-ref ref="id"/>
<column-ref ref="hint"/>
</complex-column>
<complex-column name="wpInitBranch" subject="${catalog.column.wpInitBranch.subject:Филиал/ ГО}" extends="vcard">
<meta>
<documentation>Филиал/ ГО</documentation>
</meta>
<column-ref ref="shortName"/>
<column-ref ref="id"/>
<column-ref ref="hint"/>
</complex-column>
<complex-column name="wpInitiatorDepartment" subject="${catalog.column.wpInitiatorDepartment.subject:СП инициатора}" extends="vcard">
<meta>
<documentation>СП инициатора</documentation>
</meta>
<column-ref ref="shortName"/>
<column-ref ref="id"/>
<column-ref ref="hint"/>
</complex-column>
<complex-column name="wpInitOrganization" subject="${wp.Organization:Организация}" extends="vcard">
<meta>
<documentation>Организация</documentation>
</meta>
<column-ref ref="shortName"/>
<column-ref ref="id"/>
<column-ref ref="hint"/>
</complex-column>
<complex-column name="wpArea" subject="${wp.Area:Зона СП}" extends="vcard">
<meta>
<documentation>Зона СП</documentation>
</meta>
<column-ref ref="shortName"/>
<column-ref ref="id"/>
<column-ref ref="hint"/>
</complex-column>
<complex-column name="wpInitiator" subject="${wp.Inititator:Инициатор}" extends="vcard">
<meta>
<documentation>Инициатор</documentation>
</meta>
<column-ref ref="shortName"/>
<column-ref ref="id"/>
<column-ref ref="hint"/>
</complex-column>
<column name="wpOffice" subject="${wp.Office:Офис}" extends="string"/>
<column name="wpTypeOffice" subject="${wp.TypeOffice:Тип офиса}" extends="string"/>
<column name="wpLocality" subject="${wp.Locality:Город}" extends="string"/>
<column name="wpCountry" subject="${wp.Country:Страна}" extends="string"/>
<column name="wpFloor" subject="${wp.Floor:Этаж}" extends="string"/>
<column name="wpRoomNumber" subject="${wp.RoomNumber:Номер кабинета}" extends="string"/>
<column name="wpCode" subject="${wp.Code:Код РМ}" extends="string"/>
<column name="wpEmpGoingToWork" subject="${wp.GoingToWork:Дата выхода}" extends="datetime"/>
<column name="wpMovingDate" subject="${wp.wpMovingDate:Дата переезда}" extends="datetime"/>
<column name="wpEmpHierDepatment" subject="${wp.wpEmpHierDepatment:Подразделение}" extends="string"/>
</catalog> |
Дескриптор
Дескриптор решает следующие задачи:
- Связывает колонки с табличными данными
- Управляет колонками: категоризация, сортировка, фильтрация, скрытие, важность и т.д.
- Определяет по какому алгоритму будут отображаться данные в Web-клиенте, с помощью builder
- Связывает с модулем
- Подключает кастомные кнопки
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<?xml version='1.0' encoding='UTF-8'?>
<catalog xmlns="http://www.intertrust.ru/schema/palette/cat-ui">
<custom-descriptor ident="WorkplaceRequests" view="WorkplaceRequests_(vw_cmj_all)" id="wp-request-all-docs-af5" name="Заявки на организацию РМ - Все" style="default">
<builder name="ru.intertrust.cm_sochi.srv.uicollections.UiBuilder">
<config>
<view-complex-classif level-select="all"/>
</config>
</builder>
<table>
<columns>
<column-ref ref="self" important="true"/>
<column-ref ref="created_date" sort-asc="true" sort-desc="true" filter="true" invisible-default="true"/>
<column-ref ref="typeRequest" sort-asc="true" sort-desc="true" filter="true" invisible-default="true"/>
<column-ref ref="regNumber" sort-asc="true" sort-desc="true" filter="true"/>
<column-ref ref="wpInitBranch" sort-asc="true" sort-desc="true" important="true" filter="true"/>
<column-ref ref="wpInitiator" sort-asc="true" sort-desc="true" important="true" filter="true"/>
<column-ref ref="wpInitiatorDepartment" sort-asc="true" sort-desc="true" important="true" filter="true"/>
<column-ref ref="wpEmployee" sort-asc="true" sort-desc="true" important="true" filter="true"/>
<column-ref ref="wpEmpDepartment" sort-asc="true" sort-desc="true" important="true" filter="true"/>
<column-ref ref="wpEmpHierDepatment" sort-desc="true" sort-asc="true" filter="true" invisible-default="true"/>
<column-ref ref="stage" sort-asc="true" sort-desc="true" important="true" filter="true"/>
<column-ref ref="statusWPRequest" filter="true" sort-asc="true" sort-desc="true" important="true"/>
<column-ref ref="term" sort-asc="true" sort-desc="true" important="true" filter="true"/>
<column-ref ref="finishtime" sort-asc="true" sort-desc="true" important="true" filter="true"/>
<column-ref ref="wpArea" sort-asc="true" sort-desc="true" filter="true" invisible-default="true"/>
<column-ref ref="wpCode" sort-asc="true" sort-desc="true" filter="true" invisible-default="true"/>
<column-ref ref="wpCountry" sort-asc="true" sort-desc="true" filter="true" invisible-default="true"/>
<column-ref ref="wpInitOrganization" sort-asc="true" sort-desc="true" filter="true" invisible-default="true"/>
<column-ref ref="wpFloor" sort-asc="true" sort-desc="true" filter="true" invisible-default="true"/>
<column-ref ref="wpLocality" sort-asc="true" sort-desc="true" filter="true" invisible-default="true"/>
<column-ref ref="wpRoomNumber" sort-asc="true" sort-desc="true" filter="true" invisible-default="true"/>
<column-ref ref="wpTypeOffice" sort-asc="true" sort-desc="true" filter="true" invisible-default="true"/>
<column-ref ref="wpOffice" sort-asc="true" sort-desc="true" filter="true" invisible-default="true"/>
<column-ref ref="wpEmpGoingToWork" sort-asc="true" sort-desc="true" filter="true" invisible-default="true"/>
<column-ref ref="wpMovingDate" sort-asc="true" sort-desc="true" filter="true" invisible-default="true"/>
</columns>
</table>
<custom-actions schema-ref="RkkReadersCollection"/>
</custom-descriptor>
</catalog> |
Представление
Представление связывает дескриптор с навигационной панелью.
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<view parent-ref="request" id="workplace-requests" name="${catalog.view.workplace_requests.name:Заявки на ОРМ}" position="10">
<pagename name="Заявки на ОРМ"/>
<descriptor-ref ref="wp-request-all-docs-af5"/>
<source>
<module ident="WorkplaceRequests"/>
</source>
</view> |
Инструменты отладки
Кастомные коллекции
Отлаживать кастомные коллекции можно через Управление конфигурациями. Данный раздел находится в админ-клиенте AF5 в Структуре Системы.
С помощью фильтров ищется нужная коллекция, открывается на редактирование, на вкладку Черновик вносится код xml-коллекции, сохраняется.
Далее выделяется данная коллекция и нажимается кнопка "Применить черновик"
Изменения применяются без dropcache
Дескрипторы и представления
Дескрипторы и представления отлаживать удобнее, через заливу Палитры XML, но возможность сделать через админку AF5 есть.
Нужно перейти в раздел Структура системы\Каталог\Папки и Структура системы\Каталог\Дескрипторы