2012-07-31 40 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} 我应该添加一个