将字段动态添加到共享表单



我想为添加到alfresco中附加包项的每个文件添加一个文本字段,以编写有关每个文件的注释,可以吗?

我已经实现了一些可以为您的用例重用的东西。

您可以定义具有多个值的属性,这些值将包含与每个附件关联的注释列表。

发布具有多个值的属性有一个简单的技巧:将"[]"添加到属性名称中。例如:

<input id="template_x002e_edit-metadata_x002e_edit-metadata_x0023_default_prop_someco_notes_0" 
    name="prop_someco_notes[]" 
    tabindex="0" 
    type="text" 
    value="Meeting minutes" 
    title="Notes"
    noderef="workflow://...."
    >
<input id="template_x002e_edit-metadata_x002e_edit-metadata_x0023_default_prop_someco_notes_1" 
    name="prop_someco_notes[]" 
    tabindex="1" 
    type="text" 
    value="Meeting minutes" 
    title="Notes"
    noderef="workflow://...."
>

如您所见,输入的名称以 [] 结尾。两个输入文本字段具有相同的名称。

Alfresco表单引擎会将这两个输入视为具有多个值的属性的值:"someco:notes"。

更大的问题是你需要用一些智能的javascript和免费的标记模板来生成这个html。

您可以编写自定义的免费标记模板来呈现初始 html:如果用户打开的任务已附加文档,则需要使用自定义控件生成输入列表(当然可以从 textfield.ftl 开始(。

生成初始列表并不容易,因为不幸的是Alfresco将值列表作为单个逗号分隔的值返回。

您可以自定义在免费标记模板"org.alfresco.web.scripts.forms.FormUIGet"中注入模型的 Web 脚本,以传递数组而不是 csv。

更快、更脏的解决方案是拆分 csv 值。在share-config-custom.xml中,您可以指定使用哪个textfield.ftl show作为分隔符而不是逗号。

当用户在包中添加/删除元素时,您可以截获更新并添加/删除相应的注释。请注意,我已经将归档的"noderef"添加到每个输入中,因此可以知道包中的注释和节点之间的关系。

更新:对于关联(例如,用于定义工作流任务中的包(,Share 使用名为"对象查找器"(或"对象选取器"(的 JavaScript 库。此库触发一个名为"formValueChanged"的事件,您可以截获该事件:

        YAHOO.Bubbling.fire("formValueChanged",
        {
           eventGroup: this,
           addedItems: addedItems,
           removedItems: removedItems,
           selectedItems: selectedItems,
           selectedItemsMetaData: Alfresco.util.deepCopy(this.selectedItems)
        });

最新更新