Как связать значение контекстной модели с элементом списка данных в alfresco?

#java #alfresco #content-model

#java #alfresco #content-модель

Вопрос:

Проблема

Существует модель содержимого со conractType свойством и список данных со conractType столбцом. Необходимо указать contextModel.conractType dataList.conractType . Например. перед вставкой значения свойства следует проверить, присутствует ли это значение в списке данных. Также следует выбрать значение свойства из выпадающего списка, которое соответствует значениям списка данных.

Мое решение

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

 <!-- DataLists-->
<type name="sc:contractType">
    <title>Options</title>
    <parent>dl:dataListItem</parent>
    <properties>
        <property name="sc:type">
            <title>Type</title>
            <type>d:text</type>
        </property>
    </properties>
</type>

<!-- workflow model-->
<type name="sc:startProcesstask">
    <parent>bpm:startTask</parent>
    <properties>
        <property name="sc:helloName">
            <type>d:text</type>
            <mandatory>true</mandatory>
            <multiple>false</multiple>
        </property>
        <!-- Error after adding this property -->
        <property name="sc:requestCategory">
            <type>sc:contractType</type>
            <mandatory>true</mandatory>
            <multiple>false</multiple>
        </property>
    </properties>
</type>
  

Я получил сообщение об ошибке:

 Caused by: org.alfresco.service.cmr.dictionary.DictionaryException: 09180002 Property type 'sc:contractType' of property 'sc:requestCategory' is not found
  

Итак, кажется, что мне нужно создать:

  1. Пользовательский валидатор, который проверяет входное значение
  2. Пользовательский элемент пользовательского интерфейса, который извлекает все возможные значения списка из contractType столбца.

Вопрос 1

В этом случае как правильно связать средство проверки и элемент пользовательского интерфейса? Например. список данных имеет тип и UUID . Ссылка на UUID — это жесткий код, но ссылка на тип приводит к неожиданной ситуации, когда существует более одного списка со значениями. Может быть, необходимо иметь дополнительную привязку между типом данных списка и моделью?

Вопрос 2

Я думаю, что эта проблема распространена, но чрезвычайно сложно найти какой-либо фрагмент кода. (Много кода с отдельной моделью contextn и списками данных, но не вместе) Предоставляет ли alfresco встроенное решение для привязки значения свойства модели содержимого к списку данных?

Ответ №1:

Словарь Alfresco определил несколько типов данных, которые можно использовать при определении свойств в свойствах модели содержимого

Поэтому он не будет принимать тип, который вы определили.

Чтобы выполнить ваше требование, вы можете определить sc:requestCategory как дочернюю ассоциацию sc:startProcesstask

ваша измененная модель будет выглядеть так:

 <!-- DataLists-->
<type name="sc:contractType">
    <title>Options</title>
    <parent>dl:dataListItem</parent>
    <properties>
        <property name="sc:type">
            <title>Type</title>
            <type>d:text</type>
        </property>
    </properties>
</type>

<!-- workflow model-->
<type name="sc:startProcesstask">
    <parent>bpm:startTask</parent>
    <properties>
        <property name="sc:helloName">
            <type>d:text</type>
            <mandatory>true</mandatory>
            <multiple>false</multiple>
        </property>
    </properties>
   <associations>
       <child-association name="sc:requestCategory"">
           <target>
              <class>sc:contractType</class>
              <mandatory>true</mandatory>
              <many>false</many>
            </target>
        </child-association>
    </associations>
</type>
  

Комментарии:

1. Круто! При открытии формы и щелчке, чтобы управлять ею, предлагается выбрать «файл» (содержимое) и элементы, разрешенные только с правильным типом. Есть ли способ настроить управление, чтобы открыть выбрать весь список с типом? Сейчас мне нужно зайти на сайт, найти каталоги папок и так далее. Также это сбивает с толку конечное использование других списков и элементов списка, которые она не может добавить.