我将表单定义存储在基于文件系统的存储库中。存储库中的每个表单定义都有file-id
。在Orbeon Forms中,表单定义由<app name, form name>
对标识。所以我使用file-id
作为form name
。我根据the persistence API编写了一个自定义持久层来桥接Orbeon Forms和存储库。
我想将表单定义从一个存储库复制/导出/导入到另一个存储库,以便共享/重用/迁移表单定义。将表单定义从存储库复制到另一个存储库时,其file-id
会更改,但是,表单定义中的form name
仍然是旧的。{1}}。就像将普通文件复制到另一个目录或重命名一样,但文件内容不会改变。
在这种情况下,我将在持久性URL(API)中使用<app name, new file-id>
来访问其内容中包含<app name, old file-id>
的表单定义。我的第一个问题是,在表单构建器或表单运行器中哪个标识优先?
如果持久性URL(API)中的<app name, new file-id>
在表单构建器或表单运行器中优先,则可移植性将是完美的。我在表单构建器中测试过,在保存或发布时,表单构建器将在其内容(XML)中使用<app name, old file-id>
。我的第二个问题是,我们可以更改或自定义优先级吗?
答案 0 :(得分:0)
要确定使用什么持久层,Form Builder和Form Runner只处理3个参数(我们只是使术语更加一致):
配置属性(您可以使用通配符)为每个应用程序/名称/资源类型组合确定要使用的持久层。
因此,发生某种优先级的唯一地方是持久层的配置属性级别。没有其他相关的东西。例如,默认属性为:
<property
as="xs:string"
name="oxf.fr.persistence.provider.*.*.*"
value="exist"/>
这意味着,默认情况下,所有内容都通过eXist。
但也有:
<property as="xs:string"
name="oxf.fr.persistence.provider.orbeon.builder.form"
value="resource"/>
<property
as="xs:string"
name="oxf.fr.persistence.provider.orbeon.contact.form"
value="exist"/>
这分别意味着表单生成器本身的表单定义存储在Orbeon Forms资源中(通常在JAR文件中)。但是,Contact表单的表单定义存储在eXist中。等等其他属性。
当Form Builder使用Save存储表单定义时,它会将它们存储为orbeon/builder
app / form名称下的表单数据。当它发布表单时,它会将它们存储为实际的应用程序/表单名称下的表单定义。
我希望这有助于回答你的问题。
答案 1 :(得分:0)
@avernet,在我的解决方案中,我没有在XML中使用form name
。我使用以下URL来调用表单构建器:
/orbeon/fr/orbeon/builder/edit/${fileId}
发布时,表单构建器将调用:
/orbeon/fr/service/my-perisit/crud/${app-name-in-xml}/${form-name-in-xml}/form/form.xhtml?document=${fileId}
我的自定义持久层my-persist
忽略了${form-name-in-xml}
参数。
我使用/orbeon/fr/${app name}/${fileId}/new
来调用表单运行程序。