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

Инструмент: Палитра XML

Статус

РазделПредставления
Комментарий



Создание представления

SQL-запрос

Список обязательных колонок, если по записи нужно потом получить объект (документ, заявку, справочник и т.д.): id, created_date, updated_date, Module, self_1, self_2, self_3.

Получение данных:

  1. Системные поля прописаны в таблицах и их можно найти в разделе 4.1. Схема данных AF5/CM6.
  2. Настраиваемые поля хранятся в таблицах tn_field и tn_field_<тип данных> (string, date, datetime, decimal и т.д.)

    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
  3. Поля из комплексного справочника хранятся в таблицах classifier_compleх, clscom_tag, cls_typeComp

    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[
                 SELECT
                  id,
                  created_date,
                  updated_date,
                  Module,
                  self_1,
                  self_2,
                  self_3,
                  typeRequest,
				  statusWPRequest,
				  stage,
                  regNumber,
                  rNumber,
                  numberWOTags,
				  wpInitiator,
				  term,
                  finishtime,
                  wpEmployee,
                  wpEmpDepartment,
                  wpEmpHierDepatment,
                  wpEmpGoingToWork,
                  wpMovingDate,
                  wpInitBranch,
                  wpOffice,
                  wpTypeOffice,
                  wpInitOrganization,
                  wpInitiatorDepartment,
                  wpLocality,
                  wpCountry,
                  wpArea,
                  wpFloor,
                  wpRoomNumber,
                  wpCode
                FROM (
                       select
	rkkbase.id,
    rkkbase.created_date,
    rkkbase.updated_date,
    rkkbase.module                                   AS Module,
    '<id>'                                           AS self_1,
    ':'                                              AS self_2,
    '</>'                                            AS self_3,
    rkkbase."type"                                   AS typeRequest,
    (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,
    (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 = '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, '') || 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
        and tn_field.owner_type = rkkbase.id_type
        and tn_field.cmjfield = 'wpInitiator') as wpInitiator,
	(select tfs."value" as v
        from tn_field
        join tn_field_datetime 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 = 'plannedfinishtime') as term,
	(select tfs."value" as v
        from tn_field
        join tn_field_datetime 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 = 'finishtime') as finishtime,
	(select tfs."value" as v
        from tn_field
        join tn_field_beard 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 = 'assignee') as assignee,
	(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
         and tn_field.owner_type = rkkbase.id_type
        and tn_field.cmjfield = 'wpEmployee') as wpEmployee,
    (select date(tfs."value") as v
        from tn_field
        join tn_field_dateonly 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 = 'wpEmpGoingToWork') as wpEmpGoingToWork,
    (select date(tfs."value") as v
        from tn_field
        join tn_field_dateonly 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 = 'wpMovingDate') as wpMovingDate,
	(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
        and tn_field.owner_type = rkkbase.id_type
        and tn_field.cmjfield = 'wpEmpDepartment') as wpEmpDepartment,
    (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 = '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 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 = 'wpInitBranch') as wpInitBranch,
	(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 = 'wpOffice') as wpOffice,
	(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 = 'wpTypeOffice') as wpTypeOffice,
	(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
        and tn_field.owner_type = rkkbase.id_type
        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 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 = 'wpInitDepartment') as wpInitiatorDepartment,
	(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 = 'wpLocality') as wpLocality,
	(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 = 'wpCountry') as wpCountry,
	(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
        and tn_field.owner_type = rkkbase.id_type
        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
        where tn_field."owner" = rkkbase.id
        and tn_field.owner_type = rkkbase.id_type
        and tn_field.cmjfield = 'wpFloor') as wpFloor,
	(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 = '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>


Дескриптор

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

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

Нужно перейти в раздел Структура системы\Каталог\Папки и Структура системы\Каталог\Дескрипторы