Создание основы
В основу входит:
- Написание SQL-запроса (Кастомная коллекция)
- Описание метаданных (Кастомная коллекция)
- Связь колонок с данными SQL-запроса (Дескриптор)
- Связь навигационной панели на полученную таблицу (Представление)
Кастомная коллекция
Кастомная коллекция представляет собой набор 2-х файлов:
language | xml |
---|---|
title | в одном из которых описывается SQL-запрос, кол-во возвращаемых записей, фильтрация |
linenumbers | true |
collapse | true |
Создание представления
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> so_unit.created_date,<![CDATA[ '<id>' as self_1,SELECT ':' as self_2id, '</>' as selfcreated_3date, so_department.HierRoot as orgsystemupdated_iddate, fullName Module, getisolated(so_department.id) as gorf, self_1, CASEself_2, WHEN so_department.departmenttype = 'ГО: ГОЛОВНОЙ ОФИС' then '0' self_3, typeRequest, statusWPRequest, stage, WHEN so_department.departmenttype = 'РФ: РЕГИОНАЛЬНЫЙ ФИЛИАЛ' then '1' regNumber, WHEN so_department.departmenttype = 'Р: РУКОВОДСТВО' then '2' rNumber, WHEN so_department.departmenttype = 'Д: ДЕПАРТАМЕНТ' then '3' numberWOTags, wpInitiator, term, WHEN so_department.departmenttype = 'ЕСЦ: ЕСЦ' then '4' finishtime, wpEmployee, WHEN so_department.departmenttype = 'У: УПРАВЛЕНИЕ' then '5' wpEmpDepartment, WHEN so_department.departmenttype = 'С: СЛУЖБА' then '6' wpEmpHierDepatment, WHEN so_department.departmenttype = 'О: ОТДЕЛ' then '7' wpEmpGoingToWork, wpMovingDate, WHEN so_department.departmenttype = 'Г: ГРУППА' then '8' wpInitBranch, WHEN so_department.departmenttype = 'ДО: ДОПОЛНИТЕЛЬНЫЙ ОФИС' then '9'wpOffice, wpTypeOffice, WHEN so_department.departmenttype = 'ОО: ОПЕРАЦИОННЫЙ ОФИС' then '10' wpInitOrganization, WHEN so_department.departmenttype = 'КО: КРЕДИТНЫЙ ОФИС' then '11' wpInitiatorDepartment, WHEN so_department.departmenttype = 'ОКВКУ: ОПЕРАЦИОННАЯ КАССА ВНЕ КАССОВОГО УЗЛА' then '12' wpLocality, wpCountry, ELSE '13' wpArea, END as departmenttype wpFloor, FROM SO_Department so_department wpRoomNumber, natural join so_unitwpCode natural joinFROM so_structureunit( inner join so_beard beard on beard select rkkbase.id, = so_structureunit.beard and beardrkkbase.id_type = so_structureunit.beard_type created_date, rkkbase.updated_date, rkkbase.module WHERE so_department.accessRedirect is null )AS sModule, '<id>' ::from-clause WHERE 1 = 1 ::where-clause AS self_1, ':' ]]> </prototype> <filter name="MODULE"> <reference placeholder="from-clause"> <![CDATA[ AS self_2, '</>' join SS_ModuleOrg ss_module_org on ss_module_org.Organization = orgsystem_id ]]> </reference> <criteria placeholder="where-clause"> AS self_3, <![CDATA[ rkkbase."type" ss_module_org.Module = {0} AS ]]>typeRequest, (select </criteria> tfs."value" as v </filter> <filter name="fullName_partial"> <criteria placeholder="where-clause"> from tn_field join tn_field_string tfs on tn_field.access_object_id = tfs.id where tn_field."owner" <![CDATA[= rkkbase.id and tn_field.owner_type = rkkbase.id_type lower(s.fullName) like ('%' || lower({0}) || '%') and tn_field.cmjfield = 'status') as statusWPRequest, (select tfs."value" as v ]]>from tn_field </criteria> </filter> <filter name="gorf_partial">join tn_field_string tfs on tn_field.access_object_id = tfs.id <criteria placeholder="where-clause"> where tn_field."owner" = rkkbase.id <![CDATA[and tn_field.owner_type = rkkbase.id_type and tn_field.cmjfield = 'stage') as lower(s.gorf) like ('%stage, '<regNumberPrefix>' || lower({0}coalesce(rkk.prjnumprist, '') || '%</>') || '<regNumberCounter#Number>' || coalesce(cast(rkk.prjnumcounter as varchar), '') || '</>' || '<regNumberSuffix>' || coalesce(rkk.prjnumfin , ]]> </criteria> </filter> <filter name="CQSEARCH"> <criteria placeholder="where-clause"> <![CDATA[ lower(s.fullName) like ('%' || lower({0}) || '%'') || '</>' as regNumber, rkk.prjnumcounter as rNumber, coalesce(rkk.prjnumprist, '') || coalesce(cast(rkk.prjnumcounter as VARCHAR), '') || coalesce(rkk.prjnumfin, '') as numberWOTags, (select coalesce('<id>' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'%(.*)') || ':' || ]]> </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/beanssubstring(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 and tn_field.owner_type = rkkbase.id_type 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">and tn_field.cmjfield = 'wpInitiator') as wpInitiator, (select tfs."value" as v <constructor-arg> from tn_field <list value-type="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field"> join tn_field_datetime tfs on tn_field.access_object_id = tfs.id <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="self">where tn_field."owner" = rkkbase.id and tn_field.owner_type = rkkbase.id_type <property name="virtualField"> and tn_field.cmjfield = 'plannedfinishtime') as term, (select tfs."value" as v <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.BuildVirtualField">from tn_field join tn_field_datetime tfs on tn_field.access_object_id = tfs.id <property name="realFields"> where tn_field."owner" = rkkbase.id and tn_field.owner_type = rkkbase.id_type <list> and tn_field.cmjfield = 'finishtime') as finishtime, (select tfs."value" as v from tn_field join <value>self_1</value> tn_field_beard tfs on tn_field.access_object_id = tfs.id where tn_field."owner" = rkkbase.id and tn_field.owner_type <value>Module</value>= rkkbase.id_type and tn_field.cmjfield = 'assignee') as assignee, (select coalesce('<id>' || substring(substring(substring(substring(tfs."value", '%(.*)'), <value>self_2</value>'%(.*)'), '%(.*)'),'%(.*)') || ':' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'(.*)%') || '</><shortName>' || substr(tfs."value", 1, strpos(tfs."value", '%') - 1) || '</>', '<id></><shortName></>') as <value>ID</value>v from tn_field join tn_field_string tfs on tn_field.access_object_id <value>created_date</value>= tfs.id where tn_field."owner" = rkkbase.id and tn_field.owner_type <value>self_3</value>= rkkbase.id_type and tn_field.cmjfield = 'wpEmployee') as wpEmployee, (select date(tfs."value") </list>as v from tn_field join tn_field_dateonly tfs </property> on tn_field.access_object_id = tfs.id where tn_field."owner" = rkkbase.id <property name="pattern" value="<id>([0-9]{16}):([0-9A-F]{32})</>" />and tn_field.owner_type = rkkbase.id_type and tn_field.cmjfield = 'wpEmpGoingToWork') as wpEmpGoingToWork, <property name="separator" value="" />(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 </property>= rkkbase.id_type and tn_field.cmjfield = 'wpInitBranch') as wpInitBranch, (select tfs."value" as </bean>v </property>from tn_field join tn_field_string tfs </bean> on tn_field.access_object_id = tfs.id <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="depType" p:sortOrder="ASCENDING" /> where tn_field."owner" = rkkbase.id and tn_field.owner_type = rkkbase.id_type <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="fullName" p:filter="fullName" p:sortOrder="ASCENDING" />and tn_field.cmjfield = 'wpOffice') as wpOffice, (select tfs."value" as v </list> from tn_field </constructor-arg> </bean> </beans> | ||||||||
Раскрыть | ||||||||
| ||||||||
<?xml version="1.0" encoding="UTF-8"?> |
Примечание |
---|
Названия корневого bean должно строиться из названия collection и префикса Metadata. Пример: SO_(vw_cmj_all_deps)Metadata |
Дескриптор
Действия and tn_field.cmjfield = 'wpRoomNumber') as wpRoomNumber,
(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 = 'wpRMCode') as wpCode
FROM F_DP_Intrkk internalrkk
JOIN f_dp_rkk rkk ON rkk.id = internalrkk.id
JOIN f_dp_rkkbase rkkbase ON rkkbase.id = rkk.id
JOIN F_DP_Intrkk_Executor executor ON executor.owner = internalrkk.id
JOIN so_beard beard ON beard.id = executor.executor
WHERE rkkbase.isdeleted <> 1
AND rkk.regnumcnt IS NULL
) s
WHERE stage NOT IN ('Перемещена в архив')
AND 1 = 1
::where-clause
]]>
</prototype>
<counting-prototype>
<![CDATA[
SELECT
COUNT(1)
FROM (
SELECT
rkkbase.id
FROM F_DP_Intrkk internalrkk
JOIN f_dp_rkk rkk ON rkk.id = internalrkk.id
JOIN f_dp_rkkbase rkkbase ON rkkbase.id = rkk.id
JOIN F_DP_Intrkk_Executor executor ON executor.owner = internalrkk.id
JOIN so_beard beard ON beard.id = executor.executor
WHERE rkkbase.isdeleted <> 1 AND rkk.regnumcnt IS NULL
) s
WHERE stage NOT IN ('Перемещена в архив')
AND 1 = 1
::where-clause
]]>
</counting-prototype>
<filter name="MODULE">
<criteria placeholder="where-clause">
<![CDATA[
Module = {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 есть.
Нужно перейти в раздел Структура системы\Каталог\Папки и Структура системы\Каталог\Дескрипторы