2013-07-13 3 views
1

Казалось бы, простое требованиеПользовательские (отдельные) формы метаданных под открытым небом доля

мне нужна форма, содержащая 4 поля (TextField, власть, дата и x2), что ведет себя точно так же как и форму редактирования метаданных, поля представляющий 4 свойства на узле.

Эта форма, однако, должна быть доступна в виде отдельного пользовательского интерфейса из формы редактирования метаданных, предпочтительно в виде действия UI; кнопку со значком в DocLibActions и всплывающую форму при нажатии.

Возникли проблемы

Моя проблема с использованием механизма действия UI, является то, что я не могу связать поля со свойствами. Поэтому при каждом открытии формы текущие значения, доступные на узле, не загружаются. Кроме того, соответствующие ограничения не применяются автоматически. Я не могу придумать другой способ реализовать это требование.

Действие UI путь

Начиная его как действие пользовательского интерфейса, я попытался получить доступ к узлу в 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> 

Как лучше идти о реализации этого требования? Обратите внимание, что использование действия пользовательского интерфейса не является обязательным; Я могу реализовать это так, как хочу.

+0

Вы хотите добавить 2-ю правую форму в doclib? если да, то посмотрели ли вы, как alfresco выполнила действие по умолчанию? – alfrescian

ответ

4

Посмотрите на функцию Alfresco.doclib.Actions.onActionDetails() в клиентском модуле actions.js (source code). Самый простой способ - зарегистрировать свой собственный custom action handler, который может быть основан на коде в onActionDetails(), но с использованием вашего собственного идентификатора формы, который предоставляет основную форму, например.

var templateUrl = YAHOO.lang.substitute(Alfresco.constants.URL_SERVICECONTEXT + "components/form?itemKind={itemKind}&itemId={itemId}&destination={destination}&mode={mode}&submitType={submitType}&formId={formId}&showCancelButton=true", 
{ 
    itemKind: "node", 
    itemId: nodeRef, 
    mode: "edit", 
    submitType: "json", 
    formId: "***custom-form-id***" 
}); 
var editDetails = new Alfresco.module.SimpleDialog(this.id + "-editDetails-" + Alfresco.util.generateDomId()); 
editDetails.setOptions({ 
    width: "40em", 
    templateUrl: templateUrl, 
    ... 
}); 

Вы, очевидно, необходимо добавить определение пользовательской формы в share-config-custom.xml файл или аналогичный, где вы можете также включать в свой документ определение библиотеки действий.

Вам не нужно писать какие-либо пользовательские компоненты пользовательского интерфейса.

Также вам не нужно вручную вводить значения свойств в форму при визуализации пользовательского интерфейса или писать любые веб-скрипты для обработки формы - структура форм будет обрабатывать все это для вас, если вы используете это правильно.

+0

Спасибо! Это отличное лидерство. Однако, что вы подразумеваете под «полной страницей»? –

+0

Возможно, я неправильно прочитал ваш вопрос. Когда вы сказали, что хотите, чтобы ваша пользовательская всплывающая форма вела себя как существующее действие «Редактировать метаданные», я предположил, что вам нужна кнопка внутри всплывающего окна, которая связана с полной страницей с более подробной формой. Если это не является требованием, это упростит ситуацию! –

+0

Подозрилось что-то вдоль линии: P. Это конечно, спасибо. Тем не менее, я уже использую настраиваемое действие, поэтому я думаю, что могу просто использовать с ним свой собственный обработчик. Единственный вопрос, который приходит на ум тогда, заключается в том, что в состоянии определения формы я помещаю действие или тип содержимого, содержащий свойства? Я добавлю свое текущее определение, чтобы уточнить. –

Смежные вопросы