Alfresco:定义新的Control-Params

时间:2015-06-17 20:35:11

标签: forms alfresco alfresco-share

我正在开发一个自定义表单控件,需要定义一个名为 helptext 的字符串类型的新控件参数。我理解如何在我的share-config-custom中调用它,如何在我的自定义表单控件中使用它,而不是如何在最初声明它。

我看到其他控制参数使用格式 field.control.params。$ {param} ,但无法找到定义其中任何一个的位置。对现有control-params的文件搜索会返回数十个文件。

在使用它们之前和如何声明控制参数?

编辑:收到一些好的答案后,我仍然得到同样的错误。以下是我的代码摘录:

共享配置定制

<set appearance="title" label-id="Opportunity Registration Form" id="info"/>
<field set="info" label-id="Program Name" id="orpWorkflow:programName">
  <control template="/org/alfresco/components/form/controls/textfieldcustom.ftl">
    <control-param name="helptext">"Help text goes here."</control-param>
  </control>
</field>

textfieldcustom.ftl

<div class="form-field">
   <#if form.mode == "view">
      <div class="viewmode-field">
         <#if field.mandatory && !(field.value?is_number) && field.value == "">
            <span class="incomplete-warning"><img src="${url.context}/res/components/form/images/warning-16.png" title="${msg("form.field.incomplete")}" /><span>
         </#if>
         <span class="viewmode-label">${field.label?html}:</span>
         <#if field.control.params.activateLinks?? && field.control.params.activateLinks == "true">
            <#assign fieldValue=field.value?html?replace("((http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?\\^=%&:\\/~\\+#]*[\\w\\-\\@?\\^=%&\\/~\\+#])?)", "<a href=\"$1\" target=\"_blank\">$1</a>", "r")>
         <#else>
            <#if field.value?is_number>
               <#assign fieldValue=field.value?c>
            <#else>
               <#assign fieldValue=field.value?html>
            </#if>
         </#if>
         <span class="viewmode-value"><#if fieldValue == "">${msg("form.control.novalue")}<#else>${fieldValue}</#if></span>
      </div>
   <#else>
      <label for="${fieldHtmlId}">${field.label?html}:<#if field.mandatory><span class="mandatory-indicator">${msg("form.required.fields.marker")}</span></#if></label>
      <input id="${fieldHtmlId}" name="${field.name}" tabindex="0"
             <#if field.control.params.password??>type="password"<#else>type="text"</#if>
             <#if field.control.params.styleClass??>class="${field.control.params.styleClass}"</#if>
             <#if field.control.params.style??>style="${field.control.params.style}"</#if>
             <#if field.value?is_number>value="${field.value?c}"<#else>value="${field.value?html}"</#if>
             <#if field.description??>title="${field.description}"</#if>
             <#if field.control.params.maxLength??>maxlength="${field.control.params.maxLength}"</#if> 
             <#if field.control.params.size??>size="${field.control.params.size}"</#if> 
             <#if field.disabled && !(field.control.params.forceEditable?? && field.control.params.forceEditable == "true")>disabled="true"</#if> />
      <@formLib.renderFieldHelp field=field />
	  <script type="text/javascript">//<![CDATA[
      (function()
      {
         new Alfresco.CustomYUIObject("${fieldHtmlId}").setOptions(
         {
            helpText:"${helpText}"
         }).setMessages(
            ${messages}
         );
      })();
      //]]></script>
	  <div class="format-info">
            <span class="date-format">${msg("${field.control.params.helpText}")}</span>
      </div>
   </#if>
</div>

错误消息

Caused by: freemarker.core.InvalidReferenceException: The following has evaluated to null or missing:
==> helpText  [in template "org/alfresco/components/form/controls/textfieldcustom.ftl" at line 36, column 25]

2 个答案:

答案 0 :(得分:1)

您传递的变量在FTL文件中定义,该文件(fTL文件)从share-config-custom.xml引用。让我们看一看。

份额-CONFIG-custom.xml
这里我们声明控制参数。

private static void InitializeSessionFactory()
{
    _sessionFactory = Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2012
            .ConnectionString(@"Server=ARK\DARKAGE;Database=PNH;Trusted_Connection=True;")
            .ShowSql()
            )
            .Mappings(m => m.FluentMappings
                            .AddFromAssembly(Assembly.GetExecutingAssembly()))
            .BuildSessionFactory();
      }
}

      public static ISession OpenSession()
      {
            return SessionFactory.OpenSession();
      }



您-定制templete.ftl
这是您的参数首次出现的位置

 <field-visibility>
             <show id="fieldName"/>
 </field-visibility>
 <appearance>
     <field id="fieldName" label="Name of Field">
            <control template="/path/to/ftl/textarea.ftl" />    
                <control-param name="helpText">Description of field</control-param>
            </control>
     </field>

 </appearance>

CustomYUIObject.js
它是你可以在组件上使用javascript做某事的地方。

<script type="text/javascript">//<![CDATA[
      (function()
      {
         new Alfresco.CustomYUIObject("${fieldHtmlId}").setOptions(
         {
            helpTest:"${field.control.params['helpText']}",
         }).setMessages(
            ${messages}
         );
      })();
      //]]></script>

答案 1 :(得分:1)

这是控制参数流的方式。 对于每种类型的表单控件,都可以在Alfresco中使用支持的FTL文件。您可以在这里找到所有这些文件。

<ALF_HOME>\tomcat\webapps\share\WEB-INF\classes\alfresco\site-webscripts\org\alfresco\components\form\controls

For Instance。 数据类型数据的表单项由date.ftl处理。

  • 创建新的字段处理器FTL(例如customDate.ftl)。

  • 在自定义字段处理器中定义自定义参数 share-config-custom.xml ,表示您要使用新处理器处理的字段。

  • 处理FTL(customDate.ftl)文件中的该参数。