link 如何将上下文模型值赋给露天数据列表项?

How link context model value to data list item in alfresco?

问题

有一个包含 conractType 属性 的内容模型和包含 conractType 列的数据列表。需要将contextModel.conractType指向dataList.conractType。例如。在插入 属性 值之前,应该检查该值是否存在于数据列表中。还应使用下拉列表中对应于数据列表值的 select 属性 值。

我的解决方案

当尝试 link 直接使用数据列表类型 属性 建模时:

<!-- 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. 自定义 ui 元素,它从 contractType 列中检索所有可能的列表值。

问题 1

在这种情况下如何正确地 link 验证器和 ui 元素?例如。数据列表有类型和 UUID。 Link 到 UUID 是硬编码,但是 link 键入会导致意外情况,当有多个值列表时。可能需要在列表数据类型和模型之间进行额外的绑定?

问题 2

我认为这个问题很常见,但是很难找到任何一段代码。 (很多代码具有单独的上下文模型和数据列表,但没有在一起)露天是否为 link 内容模型 属性 数据列表的值提供 build-in 解决方案?

A​​lfresco 的字典定义了几种数据类型,可以在定义内容模型中的属性时使用这些数据类型 Properties

因此它不会接受您定义的类型。

为了达到您的要求,您可以将 sc:requestCategory 定义为 sc:startProcesstask[=12 的子关联=]

您修改后的模型将如下所示:

<!-- 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>