Alfresco Share - 动态呈现表单中的字段

时间:2012-07-31 15:05:54

标签: alfresco 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>

然后我通过编辑文件share-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>

直到那时,我可以测试我的更改并且新字段显示良好。 但我想更进一步,例如根据登录用户的组显示字段。 如果登录用户是“特权组”的一部分,则显示该字段,否则不显示该字段,或仅显示该模式。

你认为我们能做到吗?如何 ? 我查看了文档,但找不到我的快乐。 我不是要求完整的解决方案,而是要求提示。

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

每个字段都有一个组件渲染器。这些是使用FreeMarker实现的。大多数情况下,就像你的情况一样,你依赖于默认的组件渲染器。除了Matjaz提到的选项之外,另一个选项是将字段指向自定义渲染器。渲染器可以检查用户的组成员身份以及该字段所需的组(例如,可以作为参数传递),然后决定是否显示自己。

答案 1 :(得分:0)

有几种方法可以做到这一点。

最简单的方法是制作一个webscript,根据当前登录用户是否在目标组中,为表单字段返回html。然后添加一个表单控件,它只是javascript对webscript进行ajax调用,并将结果附加到你的表单控件(ftl)中指定的容器div。

您可以使用的第二种方法是扩展“org.alfresco.repo.forms.processor.AbstractFilter”并在Java中实现该功能。如果当前登录用户不在目标组中,则可以在生成并删除表单字段后实现。

希望这有点帮助......:)

答案 2 :(得分:0)

没有简单的方法可以做到这一点,因为alfresco不允许您设置节点属性的权限。

每个字段都有控件模板,您可以定义自己的模板。在模板中,您将根据用户类型定义如何呈现此属性。

<config evaluator="node-type" condition="cm:content">
   <forms>
      <form>
         <appearance>
            <field id="cm:title">
               <control template="/org/alfresco/components/form/controls/yourOwnFtl.ftl" />
            </field>
         </appearance>
      </form>
   </forms>
</config>

答案 3 :(得分:0)

另一种方法是编写自己的共享配置表单评估程序(如node-type ...)

这可以检查节点类型和用户权限角色/组

让您为每个设置(每个用户组/角色)编写一个配置

...

NB!这将是一个适用于表单,因此纯粹是一个cosmetical设置,露天界面和CIFS等将不支持此设置。