2016-02-07 61 views
1

我想爲每個添加到附件中的打包項目的文件添加一個文本字段,以便在每個文件中寫入註釋,可以這樣做嗎?將字段動態添加到共享表單

+0

你需要使用這些字段更新附加文件的元數據或只是在任務上設置的屬性?容器是工作流程任務還是其他文檔/文件夾? –

+0

我需要這些字段來設置任務的屬性,容器是一個工作流任務 這種情況是,當一個用戶添加文件到工作流包項目時,他也可以添加關於每個文件的註釋 – Basil

回答

1

我已經實現了一些可以重用的用例。

您可以定義一個包含與每個附件關聯的註釋列表的多個值的屬性。

有一個簡單的技巧來發布具有多個值的屬性:將「[]」添加到屬性的名稱。例如:

<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顯示用作分隔符而不是逗號。

當用戶從包中添加/刪除元素時,可以攔截更新並添加/刪除通訊記錄。請注意,我已將字段「noderef」添加到每個輸入中,因此可以知道包中的音符和節點之間的關係。

UPDATE: 對於關聯(例如用於定義工作流任務的包),分享使用稱爲「對象查找程序」(或「對象選取器」)一個JavaScript庫。這個庫觸發所謂的「formValueChanged」的事件,您可以攔截:

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

謝謝你的回答,其實我我仍然是露天的初學者,我可以使用任何可能的澄清,你發佈的代碼段是什麼?我應該在哪裏嘗試類似的邏輯? – Basil

+1

我從共享打開的表單複製了代碼段。如果您打開表單,例如使用「編輯屬性」或者在「編輯模式」下打開任務,則可以看到相同類型的HTML。該html由基於Alfresco webscripts的「Alfresco Form Engine」生成。所有OOTB模板都在文件夾中:「share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/form /」。您可以在那裏找到,例如Share for textfield屬性使用的模板「controls/textfield.ftl」。 –

+1

在share-config-custom.xml中,您可以配置表單並指定要爲每個屬性使用哪個模板。如果您未指定模板,則Share將根據屬性類型使用默認值。 –