我想为添加到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)
});