动态添加字段到共享表单

时间:2016-02-07 08:43:11

标签: alfresco alfresco-share

我想为在alfresco中添加到附加包项目的每个文件添加一个文本字段来编写关于每个文件的注释,是否可以这样做?

1 个答案:

答案 0 :(得分:1)

我已经实现了一些可以重用的用例。

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

有一个简单的方法来发布一个具有多个值的属性:add" []"到财产的名称。例如:

<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表单引擎会将这两个输入视为具有多个值的属性的值:&#34; someco:notes&#34;。

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

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

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

您可以自定义在自由标记模板中注入模型的webscript&#34; org.alfresco.web.scripts.forms.FormUIGet&#34;传递数组而不是csv。

更快更脏的解决方案是分割csv值。在share-config-custom.xml中,您可以指定textfield.ftl显示什么用作分隔符而不是逗号。

当用户添加/删除包中的元素时,您可以拦截更新并添加/删除相应的注释。请注意,我已经添加了字段&#34; noderef&#34;每个输入都可以知道注释与包中节点之间的关系。

<强>更新 对于关联(例如用于在工作流任务中定义包),Share使用名为&#34; object finder&#34;的javascript库。 (或&#34;对象选择器&#34;)。该库触发一个名为&#34; formValueChanged&#34;的事件。你可以拦截:

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