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

Инструмент: Каталог

Статус

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


Создание кастомных представлений в Notes

Для создания кастомного представления (коллекции) в клиенте Notes необходимо открыть БД Каталог, перейти в представление "~Админ CMJ/Конфигурации коллекций" и нажать на кнопку "Новая конфигурация коллекции". В открывшейся форме необходимо указать название коллекции (например, "InputDocs_(vw_cmj_04_288005353535_input)"), вложить в поле "XML коллекции" файл, содержащий непосредственно запрос для формирования коллекции (аналогичный тому, что указывается в sochi в файлах с наименованиями вида "col-....xml"),  а в поле "XML метаданных коллекции" - файл, содержащий метаданные коллекции (аналогичный тому, что указывается в sochi в файлах с наименованиями вида "ctx-col-....xml"), и сохранить документ.

Замечание: только первый файл, находящийся в поле "XML коллекции", а также только первый файл в поле "XML метаданных коллекции" будут переданы в соответствующие таблицы AF5 для формирования доступных кастомных представлений.


Пример содержимого XML коллекции:

<collection name="InputDocs_(vw_cmj_02_input)" idField="id" replace="runtime">
        <prototype>
            <![CDATA[
                 SELECT
                  id,
                  Module,
                  created_date,
                  hasAttachments,
                  templateName,
                  reqType,
                  self_1,
                  self_2,
                  self_3,
                  correspondentAuthor,
                  Subject
                FROM (
                       SELECT
                         rkkbase.id,
                         rkkbase.module                               AS Module,
                         rkkbase.created_date,
                         rkkbase.type AS reqType,
                         (SELECT
                         coalesce(max(a), cast(0 AS SMALLINT))
                          FROM (
                                 SELECT
                                   cast(1 AS SMALLINT) a
                                 FROM f_ContentFiles_Rkk CF
                                 WHERE CF.f_dp_rkkbase = imputrkkT.id
                                 UNION SELECT
                                         cast(1 AS SMALLINT)
                                       FROM f_ContentRichText_Rkk CRT
                                       WHERE CRT.f_dp_rkkbase = imputrkkT.id
                                 UNION SELECT
                                         cast(1 AS SMALLINT)
                                       FROM f_VerifyImage_Rkk VI
                                       WHERE VI.f_dp_rkk = imputrkkT.id
                               ) t
                         )                                            AS hasAttachments,
                         rkkT.Name                                    AS templateName,
                         '<id>'                                       AS self_1,
                         ':'                                          AS self_2,
                         '</>'                                        AS self_3,
			 (SELECT
			 coalesce(
			     string_agg(
					 '<id>' ||
					 coalesce(
					     nullif(substring(corr.cmjunid, 33, 48) || ':' || substring(corr.cmjunid, 1, 32), ':')
					     , ''
					 ) || '</><shortName>' ||
					 coalesce(
					     nullif(corr.orig_shortname, '')
					     , ''
					 )
					 || '</>'
					 , ','
			      )
			     , '<id></><shortName></>'
			 )
			  FROM F_DP_InputRkkT_Author imputrkkTAuthor
                            LEFT JOIN SO_Beard corr ON corr.id = imputrkkTAuthor.Author
                          WHERE imputrkkTAuthor.Owner = imputrkkT.id) AS correspondentAuthor,
                         rkkbase.subject                              AS Subject
                       FROM
                         F_DP_InputRkkT imputrkkT
                         JOIN F_DP_RkkTemplate rkkT ON rkkT.id = imputrkkT.id
                         JOIN F_DP_RkkBase rkkbase ON rkkbase.id = rkkT.id
                       WHERE rkkbase.isdeleted <> 1
                     ) s
                WHERE
                  1 = 1
                    ::where-clause
            ]]>
        </prototype>
        <counting-prototype>
            <![CDATA[
                SELECT
                  COUNT(1)
                FROM (
                       SELECT
                         rkkbase.id,
                         rkkbase.module                               AS Module,
                         rkkbase.created_date,
                         (SELECT
                         coalesce(max(a), cast(0 AS SMALLINT))
                          FROM (
                                 SELECT
                                   cast(1 AS SMALLINT) a
                                 FROM f_ContentFiles_Rkk CF
                                 WHERE CF.f_dp_rkkbase = imputrkkT.id
                                 UNION SELECT
                                         cast(1 AS SMALLINT)
                                       FROM f_ContentRichText_Rkk CRT
                                       WHERE CRT.f_dp_rkkbase = imputrkkT.id
                                 UNION SELECT
                                         cast(1 AS SMALLINT)
                                       FROM f_VerifyImage_Rkk VI
                                       WHERE VI.f_dp_rkk = imputrkkT.id
                               ) t
                         )                                            AS hasAttachments,
                         rkkT.Name                                    AS templateName,
                         rkkbase.type                                 AS reqType,
			 (SELECT
			 coalesce(
			     string_agg(
				 '<id>' ||
				 coalesce(
				     nullif(substring(corr.cmjunid, 33, 48) || ':' || substring(corr.cmjunid, 1, 32), ':')
				     , ''
				 ) || '</><shortName>' ||
				 coalesce(
				     nullif(corr.orig_shortname, '')
				     , ''
				 )
				 || '</>'
				 , ',')
			     , '<id></><shortName></>'
			 )
			  FROM F_DP_InputRkkT_Author imputrkkTAuthor
                            LEFT JOIN SO_Beard corr ON corr.id = imputrkkTAuthor.Author
                          WHERE imputrkkTAuthor.Owner = imputrkkT.id) AS correspondentAuthor,
                         rkkbase.subject                              AS Subject
                       FROM
                         F_DP_InputRkkT imputrkkT
                         JOIN F_DP_RkkTemplate rkkT ON rkkT.id = imputrkkT.id
                         JOIN F_DP_RkkBase rkkbase ON rkkbase.id = rkkT.id
                       WHERE rkkbase.isdeleted <> 1
                     ) s
                WHERE
                  1 = 1
                    ::where-clause
                    ]]>
        </counting-prototype>
        <filter name="MODULE">
            <criteria placeholder="where-clause">
                <![CDATA[
                    Module = {0}
                ]]>
            </criteria>
        </filter>
        <filter name="hasAttachments">
            <criteria placeholder="where-clause">
                <![CDATA[
                        hasAttachments = {0}
                    ]]>
            </criteria>
        </filter>
        <filter name="templateName">
            <criteria placeholder="where-clause">
                <![CDATA[
                        templateName = {0}
                    ]]>
            </criteria>
        </filter>
        <filter name="self">
            <criteria placeholder="where-clause">
                <![CDATA[
                        Module = {0} and id = {1}
                    ]]>
            </criteria>
        </filter>
        <filter name="reqType">
            <criteria placeholder="where-clause">
                <![CDATA[
                        reqType = {0}
                    ]]>
            </criteria>
        </filter>
        <filter name="correspondentAuthor">
            <criteria placeholder="where-clause">
                <![CDATA[
                        correspondentAuthor = {0}
                    ]]>
            </criteria>
        </filter>
        <filter name="correspondentAuthor_partial">
            <criteria placeholder="where-clause">
                <![CDATA[
                        correspondentAuthor ilike '%'||{0}||'%'
                    ]]>
            </criteria>
        </filter>
        <filter name="Subject">
            <criteria placeholder="where-clause">
                <![CDATA[
                        Subject = {0}
                    ]]>
            </criteria>
        </filter>
    </collection>

Пример содержимого XML коллекции:

Пример содержимого XML метаданных коллекции:

<?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">
<bean id="InputDocs_(vw_cmj_04_2880053535351_input)Metadata"
          class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.CollectionMetadataNew"
          p:caseSensitiveFieldNames="true" p:searchArea="InputDocs_uicoll">
        <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="&lt;id&gt;([0-9]{16}):([0-9A-F]{32})&lt;/&gt;"/>
                            <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="regPlace" p:filter="regPlace" p:sortOrder="ASCENDING" p:categorized="true"/>-->
                <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="linkedDoc">
                    <property name="virtualField">
                        <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.MultiValuedVirtualField" p:realFields="linkedDoc" p:elementSeparator=";"/>
                    </property>
                </bean>
                <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="rNumber" p:filter="rNumber" p:sortOrder="DESCENDING"/>
                <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="docDate">
                    <property name="virtualField">
                        <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.InputOutDateVirtualField" p:realFields="docDate"/>
                    </property>
                </bean>
            </list>
        </constructor-arg>
    </bean>
</beans>
                 

Далее необходимо в конкретном дескрипторе выбрать ранее созданную конфигурацию коллекции. Для этого необходимо открыть требуемый дескриптор, выбрать тип поиска - "по конфигурации коллекции" и по кнопке "выбрать" в поле "Представление БД" выбрать интересующую конфигурацию коллекции. Файлы конфигураций коллекции будут переданы в необходимые таблицы в AF5 при экспорте БД Каталог.

Создание кастомных представлений в админке AF5

Одиночная коллекция

Для создания кастомных представлений непосредственно в админке AF5 необходимо выполнить следующие действия:

  1. В меню "Структура системы\Инструменты\Управление конфигурациями" создать новую коллекцию. В поле "название" указать наименование коллекции (например, "InputDocs_(vw_cmj_04_288005353535_input)"), в поле "тип" указать collection. Собственно xml коллекции необходимо указать в поле "Черновик". Тело такого xml должно начинаться с элемента <collection... (содержимое файла аналогично тому, что представлено в примере содержимого XML коллекции). После сохранения документа необходимо нажать кнопку "Применить"
  2. В меню "Структура системы\Инструменты\Загрузка конфигурации GUI" необходимо загрузить файл с метаданными коллекции. Для этого - выбрать тип конфигурации "Бин коллекции", выбрать сам файл и нажать (предупреждение) "Загрузить конфигурацию"(предупреждение). Содержимое файла аналогично тому, что представлено в примере содержимого XML метаданных коллекции.
  3. В требуемом дескрипторе выбрать тип поиска "по конфигурации коллекции" и указать наименование коллекции (например, "InputDocs_(vw_cmj_04_288005353535_input)") в поле "Запрос". Затем необходимо выполнить дропкеш, после чего данные из указанной коллекции будут отображаться в веб-клиенте в пункте меню, соответствующем папке, в которой указан данный дескриптор


Массовая загрузка

В Структура системы\Инструменты\Миграция, необходимо указать путь до набора файлов аналогичного path-info.rar, который был получен при выгрузке. Набор содержит

  1. 0.index - всегда одинаков 0.index
  2. path-info.meta - генерируется при экспорте
  3. папка content с xml файлами
  4. набор csv из 0.index, которые были сгенерированы при экспорте

Нажать на кнопку (предупреждение)"Импортировать конфигурацию" (предупреждение)  Если нажать "Импорт системных файлов", выгрузка может пройти, но произойдет ошибка деплоя при рестарте