动态添加字段到共享表单
Adding fields dynamically to Share form
我想为每个添加到 alfresco 附加包项目中的文件添加一个文本字段,以写关于每个文件的注释,可以吗?
我已经实现了一些可以在您的用例中重复使用的东西。
您可以定义具有多个值的 属性,其中将包含与每个附件关联的注释列表。
post 具有多个值的 属性 有一个简单的技巧:将“[]”添加到 属性 的名称。例如:
<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 returns 值列表作为单个逗号分隔值。
您可以自定义在免费标记模板中注入模型的网络脚本 "org.alfresco.web.scripts.forms.FormUIGet" 以传递数组而不是 csv。
一个更快更脏的解决方案是拆分 csv 值。在 share-config-custom.xml 中,您可以指定 textfield.ftl show 用作分隔符而不是逗号。
当用户从adds/remove元素中打包时,可以拦截更新和add/remove相应的注释。请注意,我已将字段 "noderef" 添加到每个输入,因此可以了解注释与包中节点之间的关系。
更新:
对于关联(例如用于定义工作流任务中的包),Share 使用名为 "object finder"(或 "object picker")的 javascript 库。该库会触发一个名为 "formValueChanged" 的事件,您可以拦截该事件:
YAHOO.Bubbling.fire("formValueChanged",
{
eventGroup: this,
addedItems: addedItems,
removedItems: removedItems,
selectedItems: selectedItems,
selectedItemsMetaData: Alfresco.util.deepCopy(this.selectedItems)
});
我想为每个添加到 alfresco 附加包项目中的文件添加一个文本字段,以写关于每个文件的注释,可以吗?
我已经实现了一些可以在您的用例中重复使用的东西。
您可以定义具有多个值的 属性,其中将包含与每个附件关联的注释列表。
post 具有多个值的 属性 有一个简单的技巧:将“[]”添加到 属性 的名称。例如:
<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 returns 值列表作为单个逗号分隔值。
您可以自定义在免费标记模板中注入模型的网络脚本 "org.alfresco.web.scripts.forms.FormUIGet" 以传递数组而不是 csv。
一个更快更脏的解决方案是拆分 csv 值。在 share-config-custom.xml 中,您可以指定 textfield.ftl show 用作分隔符而不是逗号。
当用户从adds/remove元素中打包时,可以拦截更新和add/remove相应的注释。请注意,我已将字段 "noderef" 添加到每个输入,因此可以了解注释与包中节点之间的关系。
更新: 对于关联(例如用于定义工作流任务中的包),Share 使用名为 "object finder"(或 "object picker")的 javascript 库。该库会触发一个名为 "formValueChanged" 的事件,您可以拦截该事件:
YAHOO.Bubbling.fire("formValueChanged",
{
eventGroup: this,
addedItems: addedItems,
removedItems: removedItems,
selectedItems: selectedItems,
selectedItemsMetaData: Alfresco.util.deepCopy(this.selectedItems)
});