Orbeon Forms中表单定义的可移植性问题

时间:2012-11-07 02:47:28

标签: portability orbeon

我将表单定义存储在基于文件系统的存储库中。存储库中的每个表单定义都有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>。我的第二个问题是,我们可以更改或自定义优先级吗?

2 个答案:

答案 0 :(得分:0)

供参考,API会记录here,以及属性和术语here

要确定使用什么持久层,Form Builder和Form Runner只处理3个参数(我们只是使术语更加一致):

  • app name
  • 表格名称
  • 资源类型(无论是表单定义还是表单数据)

配置属性(您可以使用通配符)为每个应用程序/名称/资源类型组合确定要使用的持久层。

因此,发生某种优先级的唯一地方是持久层的配置属性级别。没有其他相关的东西。例如,默认属性为:

<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来调用表单运行程序。