Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Свойства страницы
Статус

Статус
colourYellow
titleВ работе

Автор
Комментарий
панель

На этой странице:

Оглавление



Постановка задачи

Разработать представление для отображения документов, в котором будет присутствовать фильтрация, сортировка по колонкам.


Инструмент

Палитра XML

Реализация

Создание основы

В основу входит:

  1. Написание SQL-запроса (Кастомная коллекция)
  2. Описание метаданных (Кастомная коллекция)
  3. Связь колонок с данными SQL-запроса (Дескриптор)
  4. Связь навигационной панели на полученную таблицу (Представление)

Кастомная коллекция

Кастомная коллекция представляет собой набор 2-х файлов:

Блок кода
languagexml
titleв одном из которых описывается XML коллекции. Описывается SQL-запрос, кол-во возвращаемых записей, фильтрация, поиск
linenumberstrue
collapsetrue
<collection name="SOWorkplaceRequests_(vw_cmj_all_deps)" idField="id" replace="runtime">
    <prototype>
        <![CDATA[
          SELECT 
      SELECT
      s.id,
            s.created_dateid,
            ss_module_org.Module,
      created_date,
      s.self_1,
            s.selfupdated_2date,
            s.self_3,
      Module,
      s.orgsystem_id,
            s.fullNameself_1,
            s.gorf,
        self_2,
    cast (s.departmenttype as int) as deptype
         FROM (self_3,
            SELECT
      typeRequest,
				  statusWPRequest,
				    stage,
   so_department.id,
               so_unit.created_dateregNumber,
               '<id>'  as self_1rNumber,
                  ':' as self_2,
  numberWOTags,
				  wpInitiator,
				  term,
             '</>' as self_3    finishtime,
               so_department.HierRoot  as orgsystem_idwpEmployee,
                  fullNamewpEmpDepartment,
                getisolated(so_department.id) as gorfwpEmpHierDepatment,
               CASE
   wpEmpGoingToWork,
               WHEN  so_department.departmenttype = 'ГО: ГОЛОВНОЙ ОФИС' then '0'
 wpMovingDate,
                  wpInitBranch,
     WHEN so_department.departmenttype = 'РФ: РЕГИОНАЛЬНЫЙ ФИЛИАЛ' then '1'
      wpOffice,
            WHEN so_department.departmenttype = 'Р: РУКОВОДСТВО' then '2'wpTypeOffice,
                  WHEN so_department.departmenttype = 'Д: ДЕПАРТАМЕНТ' then '3'
wpInitOrganization,
                  wpInitiatorDepartment,
      WHEN so_department.departmenttype = 'ЕСЦ: ЕСЦ' then '4'
      wpLocality,
            WHEN so_department.departmenttype = 'У: УПРАВЛЕНИЕ' then '5'wpCountry,
                  WHEN so_department.departmenttype = 'С: СЛУЖБА' then '6'
wpArea,
                  wpFloor,
      WHEN so_department.departmenttype = 'О: ОТДЕЛ' then '7'
      wpRoomNumber,
            WHEN so_department.departmenttype = 'Г: ГРУППА' then '8'wpCode
                FROM (
 WHEN so_department.departmenttype = 'ДО: ДОПОЛНИТЕЛЬНЫЙ ОФИС' then '9'
               select
	rkkbase.id,
   WHEN so_department.departmenttype = 'ОО: ОПЕРАЦИОННЫЙ ОФИС' then '10'
 rkkbase.created_date,
    rkkbase.updated_date,
    rkkbase.module                 WHEN so_department.departmenttype = 'КО: КРЕДИТНЫЙ ОФИС' then '11'
           AS Module,
    '<id>'  WHEN so_department.departmenttype = 'ОКВКУ: ОПЕРАЦИОННАЯ КАССА ВНЕ КАССОВОГО УЗЛА' then '12'
                  ELSE '13'
            AS self_1,
  END  ':'  as departmenttype
            FROM
               SO_Department so_department
               naturalAS join so_unitself_2,
    '</>'           natural join so_structureunit
               inner join so_beard beard on beard.id = so_structureunit.beard and beard.id_type = so_structureunit.beard_type
           AS self_3,
    rkkbase."type"         WHERE
               so_department.accessRedirect is null
         )AS stypeRequest,
    (select tfs."value"    ::from-clauseas v
        from WHEREtn_field
        join tn_field_string tfs  1on tn_field.access_object_id = 1tfs.id
        where tn_field."owner" =  ::where-clauserkkbase.id
        and tn_field.owner_type = rkkbase.id_type
        and tn_field.cmjfield  ]]>
   </prototype>
= 'status') as statusWPRequest,
    <filter name="MODULE">(select tfs."value" as v
      <reference  placeholder="from-clause">from tn_field
         <![CDATA[
     join tn_field_string tfs on tn_field.access_object_id = tfs.id
           where tn_field."owner" = rkkbase.id
   join   SS_ModuleOrg ss_module_org onand sstn_module_org.Organizationfield.owner_type = orgsystemrkkbase.id_idtype
        and tn_field.cmjfield = 'stage') as stage,
  ]]>
      </reference>
      <criteria placeholder="where-clause">
         <![CDATA[
                   ss_module_org.Module = {0}
               ]]>
      </criteria>
   </filter>
   <filter name="fullName_partial">
      <criteria placeholder="where-clause"> '<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, '') || 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
         <![CDATA[from tn_field
        join tn_field_string tfs on tn_field.access_object_id =  lower(s.fullName) like ('%' || lower({0}) || '%')
     tfs.id
        where tn_field."owner" = rkkbase.id
        and tn_field.owner_type  ]]>= rkkbase.id_type
      </criteria>
   </filter>
   <filter name="gorf_partial">
  and tn_field.cmjfield = 'wpInitiator') as wpInitiator,
	(select tfs."value" as v
    <criteria placeholder="where-clause">
   from tn_field
     <![CDATA[
   join tn_field_datetime tfs on tn_field.access_object_id = tfs.id
      lower(s.gorf) like ('%' || lower({0}) || '%')where tn_field."owner" = rkkbase.id
        and tn_field.owner_type = rkkbase.id_type
     ]]>
   and tn_field.cmjfield  </criteria>
   </filter>= 'plannedfinishtime') as term,
	(select tfs."value" as v
   <filter name="CQSEARCH">
      <criteria placeholder="where-clause">from tn_field
         <![CDATA[
    join tn_field_datetime tfs on tn_field.access_object_id = tfs.id
        where tn_field."owner" = rkkbase.id
     lower(s.fullName) like ('%' || lower({0}) || '%') and tn_field.owner_type = rkkbase.id_type
        and tn_field.cmjfield = 'finishtime') as finishtime,
	(select tfs."value" as ]]>v
       </criteria>
 from tn_field
         </filter>
</collection>
Блок кода
languagexml
titleв другом описывается сортировка по умолчанию, категоризация, специфичные колонки
linenumberstrue
collapsetrue
<?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/beansjoin tn_field_beard tfs on tn_field.access_object_id = tfs.id
        where tn_field."owner" = rkkbase.id
         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.owner_type = rkkbase.id_type
      <constructor-arg>
   and tn_field.cmjfield = 'assignee') as  <list value-type="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field">assignee,
	(select
		coalesce('<id>' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'%(.*)')
    	|| ':' || substring(substring(substring(substring(tfs."value", '%(.*)'),    <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="self">'%(.*)'), '%(.*)'),'(.*)%') || '</><shortName>'
    	|| substr(tfs."value",          <property name="virtualField">1, strpos(tfs."value", '%') - 1) || '</>', '<id></><shortName></>') as v
        from tn_field
         <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.BuildVirtualField">
     join tn_field_string tfs on tn_field.access_object_id = tfs.id
        where tn_field."owner" = rkkbase.id
     <property name="realFields">
   and tn_field.owner_type = rkkbase.id_type
        and tn_field.cmjfield = 'wpEmployee') as wpEmployee,
     <list>
  (select date(tfs."value") as v
        from tn_field
        join tn_field_dateonly tfs on tn_field.access_object_id    <value>self_1</value>= tfs.id
        where tn_field."owner" = rkkbase.id
        and tn_field.owner_type = rkkbase.id_type
     <value>Module</value>
   and tn_field.cmjfield = 'wpEmpGoingToWork') as wpEmpGoingToWork,
    (select date(tfs."value") as v
        from tn_field
   <value>self_2</value>
     join tn_field_dateonly tfs on tn_field.access_object_id = tfs.id
        where tn_field."owner" = rkkbase.id
      <value>ID</value>
  and tn_field.owner_type = rkkbase.id_type
        and tn_field.cmjfield = 'wpMovingDate') as wpMovingDate,
	(select
		coalesce('<id>' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'%(.*)')
    <value>created_date</value>
        	|| ':' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'(.*)%') || '</><shortName>'
    	|| substr(tfs."value", 1, strpos(tfs."value", '%') - 1) || '</>', '<id></><shortName></>')      <value>self_3</value>as v
        from tn_field
        join tn_field_string tfs on tn_field.access_object_id   </list>= tfs.id
        where tn_field."owner" = rkkbase.id
        and  </property>tn_field.owner_type = rkkbase.id_type
        and tn_field.cmjfield = 'wpEmpDepartment') as  wpEmpDepartment,
       <property name="pattern" value="<id>([0-9]{16}):([0-9A-F]{32})</>" />(select
		tfs."value"  as v
        from tn_field
        join tn_field_string tfs  <property name="separator" value="" />on tn_field.access_object_id = tfs.id
        where tn_field."owner" = rkkbase.id
        and  <property name="emptySeparator" value="true" />tn_field.owner_type = rkkbase.id_type
        and tn_field.cmjfield = 'wpEmpHierDepatment')       </bean>
               </property>as wpEmpHierDepatment,
	(select
		coalesce('<id>' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'%(.*)')
    	|| ':' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'(.*)%') || '</bean>><shortName>'
            <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="beard">
       	|| 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 = 'wpInitBranch') as wpInitBranch,
	(select tfs."value" as v
        from <list>tn_field
        join tn_field_string tfs on tn_field.access_object_id = tfs.id
        where tn_field."owner"    <value>Module</value>= rkkbase.id
        and tn_field.owner_type = rkkbase.id_type
        and tn_field.cmjfield = 'wpOffice') as wpOffice,
	(select tfs."value" as <value>self_2</value>v
        from tn_field
        join tn_field_string tfs        <value>ID</value>on tn_field.access_object_id = tfs.id
        where tn_field."owner" = rkkbase.id
        and tn_field.owner_type       <value>created_date</value>= rkkbase.id_type
        and tn_field.cmjfield = 'wpTypeOffice')             </list>
as wpTypeOffice,
	(select
	    coalesce('<id>' || substring(substring(substring(substring(tfs."value", '%(.*)'),              </property>'%(.*)'), '%(.*)'),'%(.*)')
    	|| ':' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'(.*)%')        || '</bean>><shortName>'
    	|| substr(tfs."value", 1, strpos(tfs."value", '%') - 1) ||    '</property>
   >', '<id></><shortName></>') as v
         </bean>from tn_field
        join tn_field_string tfs  <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="depType" p:sortOrder="ASCENDING" />on tn_field.access_object_id = tfs.id
            <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="fullName" p:filter="fullName" p:sortOrder="ASCENDING" />where tn_field."owner" = rkkbase.id
         </list>and tn_field.owner_type = rkkbase.id_type
      </constructor-arg>
   </bean>
</beans>
Раскрыть
titleв другом описывается сортировка по умолчанию, категоризация, специфичные колонки
<?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"
and tn_field.cmjfield = 'wpInitOrganization') as wpInitOrganization, (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 class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.CollectionMetadataNew" p:searchArea="so_departments_search_uicoll">
tfs on tn_field.access_object_id = tfs.id <constructor-arg>
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 = 'wpInitDepartment') as <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="self">
wpInitiatorDepartment, (select tfs."value" as v from tn_field join <property name="virtualField">
tn_field_string tfs 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 = 'wpLocality') as wpLocality, (select tfs."value" as v from tn_field <property name="realFields">
join tn_field_string tfs on tn_field.access_object_id = tfs.id where tn_field."owner" = rkkbase.id <list>
and tn_field.owner_type = rkkbase.id_type and tn_field.cmjfield = 'wpCountry') as wpCountry, (select coalesce('<id>' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'%(.*)') <value>self_1</value>
|| ':' || substring(substring(substring(substring(tfs."value", '%(.*)'), '%(.*)'), '%(.*)'),'(.*)%') || '</><shortName>' || substr(tfs."value", 1, strpos(tfs."value", '%') - 1) || '</>', '<id></><shortName></>') as v from tn_field <value>Module</value>
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 <value>self_2</value>
and tn_field.cmjfield = 'wpArea') as wpArea, (select tfs."value" as v from tn_field join tn_field_string tfs on tn_field.access_object_id = tfs.id <value>ID</value>
where tn_field."owner" = rkkbase.id and tn_field.owner_type = rkkbase.id_type and tn_field.cmjfield = 'wpFloor') as wpFloor, (select tfs."value" <value>created_date</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 <value>self_3</value>
and tn_field.owner_type = rkkbase.id_type and tn_field.cmjfield = 'wpRoomNumber') as wpRoomNumber, (select tfs."value" as v </list>
from tn_field join tn_field_string tfs on tn_field.access_object_id = tfs.id where tn_field."owner" = rkkbase.id </property>
and tn_field.owner_type = rkkbase.id_type and tn_field.cmjfield = 'wpRMCode') as <property name="pattern" value="&lt;id&gt;([0-9]{16}):([0-9A-F]{32})&lt;/&gt;" />
wpCode FROM F_DP_Intrkk internalrkk JOIN f_dp_rkk rkk ON rkk.id = internalrkk.id <property name="separator" value=""/>
JOIN f_dp_rkkbase rkkbase ON rkkbase.id <property name="emptySeparator" value="true"/>
</bean>
</property>
</bean>
<bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="beard">
<property name="virtualField">
<bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.BeardVirtualField">
<property name="realFields">
<list>
<value>Module</value>
<value>self_2</value>
<value>ID</value>
<value>created_date</value>
</list>
</property>
</bean>
</property>
</bean>
<bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="depType" p:sortOrder="ASCENDING" />
<bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="fullName" p:filter="fullName" p:sortOrder="ASCENDING" />
</list>
</constructor-arg>
</bean>
</beans>
Примечание

Названия корневого bean должно строиться из названия collection и префикса Metadata. Пример: SO_(vw_cmj_all_deps)Metadata

Дескриптор

Действия
= 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> 
Блок кода
languagexml
titleXML метаданных коллекции. Описывается сортировка по умолчанию, категоризация, специфичные колонки
linenumberstrue
collapsetrue
<?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


Дескриптор

Дескриптор решает следующие задачи:

  1. Связывает колонки с табличными данными
  2. Управляет колонками: категоризация, сортировка, фильтрация, скрытие, важность и т.д.
  3. Определяет по какому алгоритму будут отображаться данные в Web-клиенте, с помощью builder
  4. Связывает с модулем
  5. Подключает кастомные кнопки
Блок кода
languagexml
titleПример. Дескриптора
linenumberstrue
collapsetrue
<?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>

Представление

Представление связывает дескриптор с навигационной панелью.

Блок кода
languagexml
titleПример. Представления
  <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>