2012-07-31 45 views
0

我的問題或多或少出現在標題中,我在數據模型中添加了新的數據類型。Alfresco Share - 動態呈現表單中的字段

<type name="moi:montype"> 
    <title>titre type</title> 
    <parent>cm:content</parent> 
    <mandatory-aspects> 
    <aspect>moi:monaspect</aspect> 
    </mandatory-aspects> 
</type> 

這一個使用中,我增加了一個新字段

<aspect name="moi:monaspect"> 
    <title>titre aspect</title> 
    <properties> 
    <property name="moi:monchamp"> 
     <type>d:text</type> 
     <mandatory>false</mandatory> 
    </property> 
    ... 
    </properties> 
</aspect> 

我然後通過編輯文件共享-CONFIG-custom.xml顯示在共享形式這個新的字段的新的方面。

<config evaluator="node-type" condition="moi:montype"> 
    <forms> 
    <form> 
     <field-visibility> 
     <show id="moi:monchamp"/> 
     ... 
     </field-visibility> 
     <appearance> 
     <field id="moi:monchamp" label="Champ texte" /> 
     ... 
     </appearance> 
    </form> 
    </forms> 
</config> 

到那時,我可以測試我的改變,並且新的區域顯示良好。 但我想進一步,並根據登錄的用戶組條件例如顯示字段的顯示。 如果登錄用戶是「特權組」的一部分,則會顯示該字段,否則將不會或僅以只讀模式顯示。

您認爲我們可以做到這一點嗎?如何 ? 我看着文檔,但無法找到我的幸福。 我不要求完整的解決方案,但需要遵循的提示。

謝謝你的幫助。

回答

0

有幾種方法可以做到這一點。

最簡單的方法是使webscript如果登錄用戶當前是你的目標羣體中返回HTML基於表單域。然後添加一個表單控件,它只是對Web腳本進行ajax調用,並將結果追加到您的表單控件(ftl)中指定的容器div。

你可以使用第二種方法是延長「org.alfresco.repo.forms.processor.AbstractFilter」,並在Java中實現的功能。如果當前登錄的用戶不在目標組中,那麼您可能可以在生成並移除表單字段後執行。

希望這有助於一點... :)

1

每個字段都有一個組件渲染器。這些都是使用FreeMarker實現的。大多數時候,就像你的情況一樣,你依賴於默認的組件渲染器。除了Matjaz提到的選項之外,另一種選擇是將該字段指向自定義渲染器。渲染器可以檢查用戶的組成員身份以及該字段所需的組(例如可能作爲參數傳入),然後決定是否顯示自己。

+0

謝謝您的輸入。 我雖然唯一的方式來查詢存儲庫是通過.js文件,而不是通過.ftl。 – fop6316 2012-08-03 09:12:39

+0

是的,但是您的FTL可以添加可以查詢存儲庫的客戶端JavaScript。 – 2012-08-03 13:36:35

+0

你如何看待FTL中的JavaScript? 我試圖在textfield.ftl中添加這個,但是我得到了錯誤500. $ {person.properties.userName} 我應該添加一個