如何创建具有预定义可见性、控件名称、默认值的 Orbeon 自定义控件 XBL?
How to create Orbeon custom control XBL with predefined visibility, control name, default value?
我创建了一个自定义控件(带有一些预定义值的隐藏文本框),我想在 XBL
文件中设置 visibility=false()
、controlName="Mycustom"
、default value="This is my custom control"
.因此,每当我们使用 Orbeon Form Builder 中的自定义控件时,它都会带有所有默认值,无需设置任何内容。
XBL:
<xbl:xbl xmlns:xh="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xxi="http://orbeon.org/oxf/xml/xinclude"
xmlns:xxf="http://orbeon.org/oxf/xml/xforms"
xmlns:fr="http://orbeon.org/oxf/xml/form-runner"
xmlns:saxon="http://saxon.sf.net/"
xmlns:xbl="http://www.w3.org/ns/xbl"
xmlns:exf="http://www.exforms.org/exf/1-0"
xmlns:xxbl="http://orbeon.org/oxf/xml/xbl">
<metadata xmlns="http://orbeon.org/oxf/xml/form-builder">
<display-name lang="en">Epson Custom Controls</display-name>
</metadata>
<xbl:binding id="fr-custom" element="fr|custom" >
<metadata xmlns="http://orbeon.org/oxf/xml/form-builder">
<display-name lang="en">My Custom Control</display-name>
<icon lang="en">
<small-icon>/forms/orbeon/builder/images/input.png</small-icon>
<large-icon>/forms/orbeon/builder/images/input.png</large-icon>
</icon>
<templates>
<bind xxf:whitespace="trim"/>
<view>
<xf:input id="myCustom" ref="" xmlns="">
<xf:label>My Custom lable</xf:label>
<xf:hint ref=""/>
<xf:help ref=""/>
<xf:alert ref=""/>
</xf:input>
</view>
</templates>
</metadata>
</xbl:binding>
</xbl:xbl>
使用上面的控件我想要带有 value='This is my custom control'
的隐藏文本框,它的控件名称应该是 Mycustom
.
Update
我已尝试进行以下更改,但它不起作用
<templates>
<bind xxf:whitespace="trim" relevant="false()" xxf:default="'This is my custom control'"/>
<view>
<xf:input id="myCustom" ref="" xmlns="">
<xf:label>Success Message</xf:label>
<xf:hint ref=""/>
<xf:help ref=""/>
<xf:alert ref=""/>
</xf:input>
</view>
</templates>
通过以上更改,现在它可以正常工作了(控件被隐藏了一些默认值)。
你能告诉我如何放置 if 条件吗
properties-local.xml:
<property as="xs:string" name="oxf.fr.detail.process.save-final-custom.*.*">
require-uploads
then validate-all
then save
if({xxf:instance('fr-form-instance')//customMessage} != null)
{
then success-message(message = "{xxf:instance('fr-form-instance')//customMessage}")
}
recover error-message("database-error")
</property>
在这里我想覆盖这个成功消息,如果它从支持正确配置的话。如果它的值为 null 则要显示 OOTB 消息(不要覆盖)。
Update2
Hybris 中的集成更改。以下是我在 Hybris
中所做的更改
- 创建
XBL > orbeon > custom > custom.xbl
<bind xxf:whitespace="trim" relevant="false()" xxf:default="'This is my custom control'"/>
问题:- 当我们 select 自定义控件时,它会在没有任何 lable/message/visibility 等的情况下进行绑定。但是如果我刷新左侧控制面板,标签就会开始出现在表单上。但仍未设置默认消息。
让我们一一列举您提到的项目:
visibility="false()"
– 我想您指的是 XForms 中的 relevant
属性,而不是 visibility
属性。 (Form Builder 称之为 "visibility",因为它就是这样,但在 XForms 中,该属性是 relevant
。)这可以通过在 <templates>
中添加一个 <bind relevant="false()"/>
.
controlName="Mycustom"
– 您无法在 XBL 中设置控件的 ID。 (顺便说一句,当使用 Form Builder 时,XForms id 是从 Form Builder 中表单作者定义的控件名称中推断出来的。)id 是由使用控件的人设置的,而不是由定义它的人设置的,否则,对于一个人来说,这会阻止您不会在表单中拥有该控件的多个实例。
default value="This is my custom control"
– 与上面的#1 一样,您可以使用 <bind xxf:default="'This is my custom control'">
来完成此操作。请注意添加的单引号,因为 xxf:default
的值是一个 XPath 表达式。
我创建了一个自定义控件(带有一些预定义值的隐藏文本框),我想在 XBL
文件中设置 visibility=false()
、controlName="Mycustom"
、default value="This is my custom control"
.因此,每当我们使用 Orbeon Form Builder 中的自定义控件时,它都会带有所有默认值,无需设置任何内容。
XBL:
<xbl:xbl xmlns:xh="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xxi="http://orbeon.org/oxf/xml/xinclude"
xmlns:xxf="http://orbeon.org/oxf/xml/xforms"
xmlns:fr="http://orbeon.org/oxf/xml/form-runner"
xmlns:saxon="http://saxon.sf.net/"
xmlns:xbl="http://www.w3.org/ns/xbl"
xmlns:exf="http://www.exforms.org/exf/1-0"
xmlns:xxbl="http://orbeon.org/oxf/xml/xbl">
<metadata xmlns="http://orbeon.org/oxf/xml/form-builder">
<display-name lang="en">Epson Custom Controls</display-name>
</metadata>
<xbl:binding id="fr-custom" element="fr|custom" >
<metadata xmlns="http://orbeon.org/oxf/xml/form-builder">
<display-name lang="en">My Custom Control</display-name>
<icon lang="en">
<small-icon>/forms/orbeon/builder/images/input.png</small-icon>
<large-icon>/forms/orbeon/builder/images/input.png</large-icon>
</icon>
<templates>
<bind xxf:whitespace="trim"/>
<view>
<xf:input id="myCustom" ref="" xmlns="">
<xf:label>My Custom lable</xf:label>
<xf:hint ref=""/>
<xf:help ref=""/>
<xf:alert ref=""/>
</xf:input>
</view>
</templates>
</metadata>
</xbl:binding>
</xbl:xbl>
使用上面的控件我想要带有 value='This is my custom control'
的隐藏文本框,它的控件名称应该是 Mycustom
.
Update
我已尝试进行以下更改,但它不起作用
<templates>
<bind xxf:whitespace="trim" relevant="false()" xxf:default="'This is my custom control'"/>
<view>
<xf:input id="myCustom" ref="" xmlns="">
<xf:label>Success Message</xf:label>
<xf:hint ref=""/>
<xf:help ref=""/>
<xf:alert ref=""/>
</xf:input>
</view>
</templates>
通过以上更改,现在它可以正常工作了(控件被隐藏了一些默认值)。
你能告诉我如何放置 if 条件吗
properties-local.xml:
<property as="xs:string" name="oxf.fr.detail.process.save-final-custom.*.*">
require-uploads
then validate-all
then save
if({xxf:instance('fr-form-instance')//customMessage} != null)
{
then success-message(message = "{xxf:instance('fr-form-instance')//customMessage}")
}
recover error-message("database-error")
</property>
在这里我想覆盖这个成功消息,如果它从支持正确配置的话。如果它的值为 null 则要显示 OOTB 消息(不要覆盖)。
Update2
Hybris 中的集成更改。以下是我在 Hybris
中所做的更改- 创建
XBL > orbeon > custom > custom.xbl
<bind xxf:whitespace="trim" relevant="false()" xxf:default="'This is my custom control'"/>
问题:- 当我们 select 自定义控件时,它会在没有任何 lable/message/visibility 等的情况下进行绑定。但是如果我刷新左侧控制面板,标签就会开始出现在表单上。但仍未设置默认消息。
让我们一一列举您提到的项目:
visibility="false()"
– 我想您指的是 XForms 中的relevant
属性,而不是visibility
属性。 (Form Builder 称之为 "visibility",因为它就是这样,但在 XForms 中,该属性是relevant
。)这可以通过在<templates>
中添加一个<bind relevant="false()"/>
.controlName="Mycustom"
– 您无法在 XBL 中设置控件的 ID。 (顺便说一句,当使用 Form Builder 时,XForms id 是从 Form Builder 中表单作者定义的控件名称中推断出来的。)id 是由使用控件的人设置的,而不是由定义它的人设置的,否则,对于一个人来说,这会阻止您不会在表单中拥有该控件的多个实例。default value="This is my custom control"
– 与上面的#1 一样,您可以使用<bind xxf:default="'This is my custom control'">
来完成此操作。请注意添加的单引号,因为xxf:default
的值是一个 XPath 表达式。