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

Подключить выбор дела на форму РКК


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

Статус

Комментарий

Реализация

Подключить поле Дело на форму

Создать схему объекта, которое будет отображаться в поле "Дело"

<?xml version='1.0' encoding='UTF-8'?>
<schemas xmlns="http://www.intertrust.ru/schema/palette/tn-schema">
  <schema name="InventoryDoc">
    <meta>
      <category name="Отношение к делу" />
    </meta>
    <string name="id">
      <storage-field name="inventory_ID" />
    </string>
    <string name="description"  computed="true">
      <storage-field name="inventory_description" />
      <calc-values>
        <script lang="SPEL" event="open"><![CDATA[fc_name]]></script>
      </calc-values>
    </string>
    <string  name="subject">
      <storage-field name="inventory_subject" />
    </string>
    <hyperlink computed="true"  name="Link">
      <storage-field name="inventory_link" />
      <calc-values>
        <script lang="SPEL" event="open"><![CDATA[id == null ? null : T(ru.intertrust.cmj.af.misc.HyperLink).createHyperLink(invPrefix + invNumber + ' ' + subject +'~#'+T(ru.intertrust.cmj.ws.base.servlet.ServletUrlHolder).getServerUrlStr() + '/ids/' + id +'~#newTab~#local')]]></script>
      </calc-values>
    </hyperlink>
    <string  name="invPrefix">
      <storage-field name="inventory_prefix" />
    </string>
    <string  name="invNumber">
      <storage-field name="inventory_number" />
    </string>
    <string  name="fc_name">
      <storage-field name="inventory_name" />
    </string>
  </schema>
</schemas>

Создать структуру объекта Дела для отображения UI-интерфейсе

<?xml version='1.0' encoding='UTF-8'?>
<ui xmlns="http://www.intertrust.ru/schema/palette/tn-ui">
  <form schema-ref="InventoryDoc" projection="default" id="InventoryDocForm">
    <properties>
      <hide condition-union="AND">
        <negative-condition-ref ref="digest"/>
      </hide>
    </properties>
	<!--Отображение в виде ссылки на дело-->
    <component>
      <field attribute-ref="Link" alias="description">
        <appearance importance="normal" />
      </field>
    </component>
  </form>
</ui>

Подключить объект Дела к схеме документа

<?xml version='1.0' encoding='UTF-8'?>
<schemas xmlns="http://www.intertrust.ru/schema/palette/tn-schema">
	<!-- schema -- >
		<schema-ref ref="InventoryDoc" name="case"/>
	<!-- schema -- >
</schemas>

Подключить поле "Дело" в UI-интерфейс

<?xml version='1.0' encoding='UTF-8'?>
<ui xmlns="http://www.intertrust.ru/schema/palette/tn-ui">
 	<!--form-->
 		<!--section-->
 			<field attribute-ref="case" name="${ui.form.RkkResourceInputForm.field.case.name:Дело:}">
				<!-- Визуализация -->
				<appearance importance="normal" multiline="true" open-form="newTab">
                	<label-style>
                    	<style id="tunBorderedField"/>
                    </label-style>
                </appearance>
				
				<!--Подключение справочника-->
                <directories relation="inventory-all-case" limit-livesearch="sys-current">
					<directory-category-custom-coll attribute-ref="regPlaceID" ref="inventory-all-case"/>
				</directories>

             </field>
	 	<!--section-->
	<!--form-->
</ui>

Подключить справочник Дел

Написать SQL запрос для вывода списка Дел

<collection name="Inventory_(vw_cmj_all_case)" idField="id" replace="runtime">
    <prototype>
        <![CDATA[
SELECT id,
       numberWOTags,
       created_date,
       Module,
       self_1,
       self_2,
       self_3,
       invPrefix_tag,
       subject_tag,
       invNumber_tag,
       numberWOTags,
       subject,
       moduleName,
       fc_subject,
       fileCardNumber || invNumber || ' ' || subject as description,
       invNumber,
       fc_depId,
       fileCardNumber as invPrefix
FROM (
         SELECT
             CASE WHEN b.cmjunid IS NULL THEN substring(u.migrationid, 0, 33) ELSE substring(b.cmjunid, 0, 33) END AS fc_depId,
             fc.id AS id,
             fc.module as Module,
             complect,
             ss_module.title as moduleName,
             fc.created_date,
             fc.title as subject,
             fc.Code as numberWOTags,
             fc.Number as invNumber,
             '<id>'                                                 AS self_1,
             ':'                                                    AS self_2,
             '</>'                                                  AS self_3,
             '<invPrefix>'                                          AS invPrefix_tag,
             '<subject>'                                            AS subject_tag,
             '<invNumber>'                                          AS invNumber_tag,
             CASE
                 WHEN (parent.IsCodeNumIndex = 1)
                     THEN parent.Code || '-' || fc.Number || ' ' || fc.title
                 ELSE fc.Code || '-' || fc.Number || ' ' || fc.title
                 END AS fc_subject,
             CASE
                 WHEN (parent.IsCodeNumIndex = 1)
                     THEN parent.Code || '-' || fc.Number
                 ELSE fc.Code || '-'
                 END AS fileCardNumber
         FROM
             FD_FileCard fc
                 LEFT JOIN SO_Parent parent ON parent.id = fc.soobject
                 JOIN ss_module ON ss_module.id=fc.module
                 JOIN so_parent_su ON fc.soobject = so_parent_su.id
                 JOIN so_structureunit su on su.id = so_parent_su.owner
                 JOIN so_unit u on u.id = su.id
                 JOIN so_beard b on b.id = su.beard
         UNION
         SELECT
             substring(b.cmjunid, 0, 33) as fc_depId,
             fc.id AS id,
             fc.module as Module,
             complect,
             ss_module.title as moduleName,
             fc.created_date,
             fc.title as subject,
             fc.Code as numberWOTags,
             fc.Number as invNumber,
             '<id>'                                                 AS self_1,
             ':'                                                    AS self_2,
             '</>'                                                  AS self_3,
             '<invPrefix>'                                          AS invPrefix_tag,
             '<subject>'                                            AS subject_tag,
             '<invNumber>'                                          AS invNumber_tag,
             CASE
                 WHEN (parent.IsCodeNumIndex = 1)
                     THEN parent.Code || '-' || fc.Number || ' ' || fc.title
                 ELSE fc.Code || '-' || fc.Number || ' ' || fc.title
                 END AS fc_subject,
             CASE
                 WHEN (parent.IsCodeNumIndex = 1)
                     THEN parent.Code || '-' || fc.Number
                 ELSE fc.Code || '-'
                 END AS fileCardNumber
         FROM
             FD_FileCard fc
                 LEFT JOIN SO_Parent parent ON parent.id = fc.soobject
                 JOIN ss_module ON ss_module.id=fc.module
                 JOIN so_parent_ph ON fc.soobject = so_parent_ph.id
                 JOIN so_posthead ph on ph.id = so_parent_ph.owner
                 JOIN so_appointmenthead apph on apph.post = ph.id AND apph.accessredirect is NULL
                 JOIN so_appointment app on app.id = apph.id
                 JOIN so_beard b on b.id = app.beard
     ) s
WHERE 1=1
    ::where-clause
        ]]>
    </prototype>
    <counting-prototype>
        <![CDATA[
            SELECT
            COUNT(1)
            FROM (
         SELECT
             CASE WHEN b.cmjunid IS NULL THEN substring(u.migrationid, 0, 33) ELSE substring(b.cmjunid, 0, 33) END AS fc_depId,
             fc.id AS id,
             fc.module as Module,
             complect,
             ss_module.title as moduleName,
             fc.created_date,
             fc.title as subject,
             fc.Code as numberWOTags,
             fc.Number as invNumber,
             '<id>'                                                 AS self_1,
             ':'                                                    AS self_2,
             '</>'                                                  AS self_3,
             '<invPrefix>'                                          AS invPrefix_tag,
             '<subject>'                                            AS subject_tag,
             '<invNumber>'                                          AS invNumber_tag,
             CASE
                 WHEN (parent.IsCodeNumIndex = 1)
                     THEN parent.Code || '-' || fc.Number || ' ' || fc.title
                 ELSE fc.Code || '-' || fc.Number || ' ' || fc.title
                 END AS fc_subject,
             CASE
                 WHEN (parent.IsCodeNumIndex = 1)
                     THEN parent.Code || '-' || fc.Number
                 ELSE fc.Code || '-'
                 END AS fileCardNumber
         FROM
             FD_FileCard fc
                 LEFT JOIN SO_Parent parent ON parent.id = fc.soobject
                 JOIN ss_module ON ss_module.id=fc.module
                 JOIN so_parent_su ON fc.soobject = so_parent_su.id
                 JOIN so_structureunit su on su.id = so_parent_su.owner
                 JOIN so_unit u on u.id = su.id
                 JOIN so_beard b on b.id = su.beard
         UNION
         SELECT
             substring(b.cmjunid, 0, 33) as fc_depId,
             fc.id AS id,
             fc.module as Module,
             complect,
             ss_module.title as moduleName,
             fc.created_date,
             fc.title as subject,
             fc.Code as numberWOTags,
             fc.Number as invNumber,
             '<id>'                                                 AS self_1,
             ':'                                                    AS self_2,
             '</>'                                                  AS self_3,
             '<invPrefix>'                                          AS invPrefix_tag,
             '<subject>'                                            AS subject_tag,
             '<invNumber>'                                          AS invNumber_tag,
             CASE
                 WHEN (parent.IsCodeNumIndex = 1)
                     THEN parent.Code || '-' || fc.Number || ' ' || fc.title
                 ELSE fc.Code || '-' || fc.Number || ' ' || fc.title
                 END AS fc_subject,
             CASE
                 WHEN (parent.IsCodeNumIndex = 1)
                     THEN parent.Code || '-' || fc.Number
                 ELSE fc.Code || '-'
                 END AS fileCardNumber
         FROM
             FD_FileCard fc
                 LEFT JOIN SO_Parent parent ON parent.id = fc.soobject
                 JOIN ss_module ON ss_module.id=fc.module
                 JOIN so_parent_ph ON fc.soobject = so_parent_ph.id
                 JOIN so_posthead ph on ph.id = so_parent_ph.owner
                 JOIN so_appointmenthead apph on apph.post = ph.id AND apph.accessredirect is NULL
                 JOIN so_appointment app on app.id = apph.id
                 JOIN so_beard b on b.id = app.beard
     ) s
WHERE 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="description">
        <criteria placeholder="where-clause">
            <![CDATA[
                description = {0}
            ]]>
        </criteria>
    </filter>
    <filter name="description_partial">
        <criteria placeholder="where-clause">
            <![CDATA[
                description iLIKE ('%'||{0}||'%')
            ]]>
        </criteria>
    </filter>
    <filter name="subject">
        <criteria placeholder="where-clause">
            <![CDATA[
                subject = {0}
            ]]>
        </criteria>
    </filter>
    <filter name="subject_partial">
        <criteria placeholder="where-clause">
            <![CDATA[
                subject iLIKE ('%'||{0}||'%')
            ]]>
        </criteria>
    </filter>
    <filter name="fc_subject">
        <criteria placeholder="where-clause">
            <![CDATA[
                    fc_subject ilike '%'||{0}||'%'
                ]]>
        </criteria>
    </filter>
    <filter name="fc_subject_partial">
        <criteria placeholder="where-clause">
            <![CDATA[
                    fc_subject ilike '%'||{0}||'%'
                ]]>
        </criteria>
    </filter>
    <filter name="fc_depId">
        <criteria placeholder="where-clause">
            <![CDATA[
                    fc_depId ilike '%'||{0}||'%'
                ]]>
        </criteria>
    </filter>
    <filter name="fc_depId_partial">
        <criteria placeholder="where-clause">
            <![CDATA[
                    fc_depId ilike '%'||{0}||'%'
                ]]>
        </criteria>
    </filter>
    <filter name="moduleName">
        <criteria placeholder="where-clause">
            <![CDATA[
                    moduleName LIKE {0}
                ]]>
        </criteria>
    </filter>
    <filter name="CQSEARCH">
        <criteria placeholder="where-clause">
            <![CDATA[(lower(fc_subject) like ('%' || lower({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="Inventory_(vw_cmj_all_case)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>
                <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="fc_subject" p:filter="fc_subject" p:sortOrder="ASCENDING">
                    <property name="virtualField">
                        <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.BuildVirtualField" p:name="fc_subject">
                            <property name="realFields">
                                <list>
                                    <value>fc_subject</value>
                                </list>
                            </property>
                        </bean>
                    </property>
                </bean>
                <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field"
                      p:name="MODULE" p:sortOrder="ASCENDING" p:filter="MODULE"/>
                <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="inventory_obj">
                    <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>
                                    <value>invPrefix_tag</value>
                                    <value>invPrefix</value>
                                    <value>self_3</value>
                                    <value>subject_tag</value>
                                    <value>subject</value>
                                    <value>self_3</value>
                                    <value>invNumber_tag</value>
                                    <value>invNumber</value>
                                    <value>self_3</value>
                                </list>
                            </property>
                            <property name="separator" value="" />
                            <property name="emptySeparator" value="true" />
                        </bean>
                    </property>
                </bean>
                <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="fc_depId" p:filter="fc_depId" p:sortOrder="ASCENDING" p:categorized="true" p:sortPriority="0" />
            </list>
        </constructor-arg>
    </bean>
</beans>

Создать описатель коллекции для UI-интерфейса

<?xml version='1.0' encoding='UTF-8'?>
<catalog xmlns="http://www.intertrust.ru/schema/palette/cat-ui">
	<custom-descriptor ident="Inventory" view="(vw_cmj_all_case)" id="inventory-all-case" name="Список дел для диалога" style="default">
  		<help id="99778660" />
  		<builder name="ru.intertrust.cmj.af.collections.impl.BuilderDominoViewCQSearch" />
  		<table>
    		<columns>
      			<column-ref ref="fc_subject" filter="true"/>
      			<column-ref ref="inventory_obj" />
      			<column-ref ref="self" />
     			<column-ref ref="fc_depId" category="true" />
    		</columns>
  		</table>
	</custom-descriptor>
</catalog>
<?xml version='1.0' encoding='UTF-8'?>
<catalog xmlns="http://www.intertrust.ru/schema/palette/cat-ui"> 
	<column name="invPrefix" subject="${catalog.column.invPrefix.subject:Префикс}" extends="string">
    	<meta>
      		<documentation>Префикс дела</documentation>
    	</meta>
  	</column>
  	<column name="invNumber" subject="${catalog.column.invPrefix.subject:Номер}" extends="string">
    	<meta>
      		<documentation>Номер дела</documentation>
    	</meta>
  	</column>
  	<complex-column extends="object" subject="${catalog.complex-column.inventory_obj.subject:Объект дела}" name="inventory_obj" schema-ref="InventoryDoc">
    	<meta>
      		<documentation>Объект документа</documentation>
    	</meta>
    	<column-ref ref="invPrefix" />
    	<column-ref ref="subject" />
    	<column-ref ref="id" />
    	<column-ref ref="invNumber"/>
  	</complex-column>
</catalog>
<?xml version='1.0' encoding='UTF-8'?>
<catalog xmlns="http://www.intertrust.ru/schema/palette/cat-ui">
	<view parent-ref="ProgrammedNavigator" id="inventory-all-case" name="${catalog.view.inventory_all_case.name:Список номенклатурных дел}" position="10011">
    	<descriptor-ref ref="inventory-all-case"/>
    	<source>
     		<module ident="Inventory"/>
    	</source>
  	</view>
</catalog>

Подключить коллекцию дел к справочнику

<?xml version='1.0' encoding='UTF-8'?>
<ui xmlns="http://www.intertrust.ru/schema/palette/tn-ui">
  <directories>
		<custom-collection name="${ui.directories.custom-collection.inventory-dictionary.name: Номенклатура дел}" id="inventory-all-case">
    		<view-ref ref="inventory-all-case"/>
		</custom-collection>
  </directories>
</ui>

Подключить справочник Дел к полю

<?xml version='1.0' encoding='UTF-8'?>
<ui xmlns="http://www.intertrust.ru/schema/palette/tn-ui">
 	<!--form-->
 		<!--section-->
 			<field attribute-ref="case" name="${ui.form.RkkResourceInputForm.field.case.name:Дело:}">
				<!-- Визуализация -->
				<appearance importance="normal" multiline="true" open-form="newTab">
                	<label-style>
                    	<style id="tunBorderedField"/>
                    </label-style>
                </appearance>
				
				<!--Подключение справочника-->
                <directories relation="inventory-all-case" limit-livesearch="sys-current">
					<directory-category-custom-coll attribute-ref="regPlaceID" ref="inventory-all-case"/>
				</directories>

             </field>
	 	<!--section-->
	<!--form-->
</ui>