На первый взгляд простое требование
Мне нужна форма, содержащая 4 поля (текстовое поле, полномочия и дата x2), которая ведет себя точно так же, как форма редактирования метаданных, поля, представляющие 4 свойства на узле.
Однако эта форма должна быть доступна как отдельный пользовательский интерфейс от формы редактирования метаданных, предпочтительно в том виде, в котором это пользовательский интерфейс; кнопка со значком в DocLibActions и всплывающая форма при нажатии на нее.
Возникли проблемы
Моя проблема с использованием механизма действий пользовательского интерфейса заключается в том, что я не могу связать поля со свойствами. Поэтому при каждом открытии формы текущие значения, доступные на узле, не загружаются. Кроме того, соответствующие ограничения не применяются автоматически. Я также не могу придумать другого способа реализовать это требование.
Способ действия пользовательского интерфейса
Начав это как действие пользовательского интерфейса, я попытался получить доступ к узлу в пользовательском поле управления ftl, используя переменную модели form.destination
, содержащую ссылку noderef. Однако, когда я хотел получить свойства узла с этим, оказалось, что объект companyhome
, необходимый для этого в ftl, недоступен для элемента управления формы.
Затем я приступил к написанию пользовательского веб-скрипта java, который возвращает 4 свойства, которые мне нужны, с использованием заданного nodeRef, и вызывал его из моего пользовательского поля управления с помощью javascript. Это представляет следующие две проблемы:
- Мне приходится самому передавать полученные значения в поля формы, что представляет собой довольно сложную задачу для элементов управления
date.ftl
, но гораздо сложнее даже для элемента управленияauthority.ftl
. - Вызов веб-скрипта с клиентской стороны javascript добавляет еще один круговой путь.
Текущее определение формы
<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>
Как я могу лучше всего выполнить это требование? Обратите внимание, что использование действия пользовательского интерфейса не является обязательным; Я могу реализовать это так, как захочу.