Alfresco:定义新的控制参数
Alfresco: Defining new Control-Params
我正在开发自定义表单控件,需要定义一个名为 helptext 的字符串类型的新控件参数。我知道如何在我的 share-config-custom 中调用它,如何在我的自定义表单控件中使用它,但不知道如何最初声明它。
我看到其他控制参数使用格式 field.control.params.${param},但无法找到其中任何一个的定义位置。一个文件搜索现有的 control-params returns 几十个文件。
在使用控制参数之前,我在哪里以及如何声明它们?
编辑:在收到一些好的答案后,我仍然遇到同样的错误。以下是我的代码摘录:
共享配置自定义
<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=\"\" target=\"_blank\"></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]
您传递的变量在 FTL 文件中定义,该文件(FTL 文件)是从 share-config-custom.xml 引用的。让我们深入了解一下。
share-config-custom.xml
在这里我们声明控制参数。
<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>
您的定制-templete.ftl
这是你的参数最先出现的位置
<script type="text/javascript">//<![CDATA[
(function()
{
new Alfresco.CustomYUIObject("${fieldHtmlId}").setOptions(
{
helpTest:"${field.control.params['helpText']}",
}).setMessages(
${messages}
);
})();
//]]></script>
CustomYUIObject.js
它是您可以在组件上使用 javascript 执行某些操作的地方。
(function() {
var Dom = YAHOO.util.Dom, Event = YAHOO.util.Event;
var $html = Alfresco.util.encodeHTML;
Alfresco.CustomYUIObject = function ExportDMSD_constructor(htmlId) {
Alfresco.CustomYUIObject.superclass.constructor.call(this,
"Alfresco.CustomYUIObject", htmlId, [ "button", "container",
"datasource", "datatable", "paginator", "history",
"animation" ]);
return this;
};
YAHOO.extend(Alfresco.CustomYUIObject, Alfresco.component.Base);
YAHOO.lang.augmentObject(Alfresco.CustomYUIObject.prototype, {
options : {
helpText:null
},
onReady : function ExportDMSD_onReady() {
console.log(this.options.helpText);//Its the javascript place where you can access yout variable,register and event and do javascript things
}
});
})();
控制参数流是这样的。
对于每种类型的表单控件,Alfresco.You 中提供了支持的 FTL 文件,可以在此处找到所有这些文件。
<ALF_HOME>\tomcat\webapps\share\WEB-INF\classes\alfresco\site-webscripts\org\alfresco\components\form\controls
例如。
数据类型数据的表单项由date.ftl.
处理
创建新的现场处理器 FTL(例如 customDate.ftl)。
在您的自定义字段处理器中定义自定义参数
share-config-custom.xml 用于您要使用新处理器处理的字段。
在您的 FTL(customDate.ftl) 文件中处理该参数。
我正在开发自定义表单控件,需要定义一个名为 helptext 的字符串类型的新控件参数。我知道如何在我的 share-config-custom 中调用它,如何在我的自定义表单控件中使用它,但不知道如何最初声明它。
我看到其他控制参数使用格式 field.control.params.${param},但无法找到其中任何一个的定义位置。一个文件搜索现有的 control-params returns 几十个文件。
在使用控制参数之前,我在哪里以及如何声明它们?
编辑:在收到一些好的答案后,我仍然遇到同样的错误。以下是我的代码摘录:
共享配置自定义
<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=\"\" target=\"_blank\"></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]
您传递的变量在 FTL 文件中定义,该文件(FTL 文件)是从 share-config-custom.xml 引用的。让我们深入了解一下。
share-config-custom.xml
在这里我们声明控制参数。
<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>
您的定制-templete.ftl
这是你的参数最先出现的位置
<script type="text/javascript">//<![CDATA[
(function()
{
new Alfresco.CustomYUIObject("${fieldHtmlId}").setOptions(
{
helpTest:"${field.control.params['helpText']}",
}).setMessages(
${messages}
);
})();
//]]></script>
CustomYUIObject.js
它是您可以在组件上使用 javascript 执行某些操作的地方。
(function() {
var Dom = YAHOO.util.Dom, Event = YAHOO.util.Event;
var $html = Alfresco.util.encodeHTML;
Alfresco.CustomYUIObject = function ExportDMSD_constructor(htmlId) {
Alfresco.CustomYUIObject.superclass.constructor.call(this,
"Alfresco.CustomYUIObject", htmlId, [ "button", "container",
"datasource", "datatable", "paginator", "history",
"animation" ]);
return this;
};
YAHOO.extend(Alfresco.CustomYUIObject, Alfresco.component.Base);
YAHOO.lang.augmentObject(Alfresco.CustomYUIObject.prototype, {
options : {
helpText:null
},
onReady : function ExportDMSD_onReady() {
console.log(this.options.helpText);//Its the javascript place where you can access yout variable,register and event and do javascript things
}
});
})();
控制参数流是这样的。 对于每种类型的表单控件,Alfresco.You 中提供了支持的 FTL 文件,可以在此处找到所有这些文件。
<ALF_HOME>\tomcat\webapps\share\WEB-INF\classes\alfresco\site-webscripts\org\alfresco\components\form\controls
例如。 数据类型数据的表单项由date.ftl.
处理创建新的现场处理器 FTL(例如 customDate.ftl)。
在您的自定义字段处理器中定义自定义参数 share-config-custom.xml 用于您要使用新处理器处理的字段。
在您的 FTL(customDate.ftl) 文件中处理该参数。