【发布时间】:2013-07-13 23:10:37
【问题描述】:
看似简单的要求
我需要一个包含 4 个字段(文本字段、权限和日期 x2)的表单,其行为与编辑元数据表单完全相同,这些字段代表节点上的 4 个属性。
但是,此表单应该作为与编辑元数据表单分开的 UI 提供,最好以 UI 操作的方式提供; DocLibActions 中有一个带有图标的按钮,单击该按钮时会弹出一个表单。
遇到的问题
我使用 UI 操作机制的问题是我无法将字段链接到属性。因此,每次打开表单时,都不会加载节点上可用的当前值。此外,不会自动强制执行适当的约束。我也想不出另一种方式来实现这个要求。
UI动作方式
从 UI 操作开始,我尝试使用保存 noderef 的 form.destination 模型变量访问自定义字段控件 ftl 中的节点。但是,当我想用它来获取节点属性时,结果发现 ftl 中所需的 companyhome 对象对表单控件不可用。
然后我开始编写一个自定义 java webscript,它使用给定的 nodeRef 返回我需要的 4 个属性,并使用 javascript 从我的自定义字段控件中调用它。这提出了以下两个问题:
- 我必须自己将检索到的值传递给表单字段,这对
date.ftl控件提出了相当大的挑战,但对authority.ftl控件来说更是如此。 - 从客户端 JavaScript 调用 webscript 会增加另一个往返行程。
当前表单定义
<config evaluator="string-compare" condition="my-action">
<forms>
<form>
<field-visibility>
<show id="textProperty" />
<show id="authorityProperty" />
<show id="dateProperty1" />
<show id="dateProperty2" />
</field-visibility>
<appearance>
<set id="generalSet" appearance="bordered-panel" label="General" />
<field id="textProperty" label="textProp" set="generalSet">
<control template="/org/alfresco/components/form/controls/propertyBasedTextfield.ftl">
<control-param name="propertyProvider">/alfresco/service/mark/custom/nodeProperties</control-param>
</control>
</field>
<field id="authorityProp" label="Authority" set="generalSet" >
<control template="/org/alfresco/components/form/controls/authority.ftl" >
<control-param name="compactMode">true</control-param>
</control>
</field>
<field id="dateProperty1" label="Date 1" set="generalSet">
<control template="/org/alfresco/components/form/controls/date.ftl" />
</field>
<field id="dateProperty2" label="Date 2" set="generalSet">
<control template="/org/alfresco/components/form/controls/date.ftl" />
</field>
</appearance>
</form>
</forms>
</config>
我怎样才能最好地实施此要求?请注意,使用 UI 操作不是强制性的;我可以随心所欲地实现这一点。
【问题讨论】:
-
您想在 doclib 中添加第二个编辑表单吗?如果是,你有没有看一下 alfresco 是如何实现默认操作的?
标签: forms customization alfresco alfresco-share