看似简单的需求
我需要一个包含 4 个字段(文本字段、权限和日期 x2)的表单,其行为与编辑元数据表单完全相同,这些字段代表节点上的 4 个属性。
但是,此表单应作为与编辑元数据表单分开的 UI 提供,最好以 UI 操作的方式提供;DocLibActions 中有一个带有图标的按钮,单击该按钮时会弹出一个表单。
遇到的问题
我使用 UI 操作机制的问题是我无法将字段链接到属性。因此,每次打开表单时,都不会加载节点上可用的当前值。此外,不会自动强制执行适当的约束。我也想不出另一种方法来实现这个要求。
UI动作方式
从 UI 操作开始,我尝试使用form.destination
保存 noderef 的模型变量访问自定义字段控件 ftl 中的节点。但是,当我想用它来获取节点属性时,结果发现companyhome
ftl 中所需的对象对表单控件不可用。
然后我开始编写一个自定义的 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 操作不是强制性的;我可以以任何我想要的方式实现这一点。