0

我将表单定义存储在基于文件系统的存储库中。存储库中的每个表单定义都有一个file-id. 在 Orbeon Forms 中,表单定义由<app name, form name>对标识。所以我使用file-idas form name。我根据持久性 API编写了一个定制的持久层来桥接 Orbeon 表单和存储库。

我想将表单定义从一个存储库复制/导出/导入到另一个存储库,以便共享/重用/迁移表单定义。当一个表单定义从一个存储库复制到另一个时,它file-id会改变,但是,form name表单定义仍然是旧的。就像将普通文件复制到另一个目录或重命名一样,但文件内容没有改变。

在这种情况下,我将使用<app name, new file-id>持久性 URL(API) 来访问包含<app name, old file-id>其内容的表单定义。我的第一个问题是,在表单构建器或表单运行器中,哪个标识优先?

如果<app name, new file-id>持久性 URL(API) 在表单构建器或表单运行器中都优先,那么可移植性将是完美的。我在表单生成器中进行了测试,保存或发布时,表单生成器将<app name, old file-id>在其内容(XML)中使用。我的第二个问题是,我们可以更改或自定义优先级吗?

4

2 回答 2

0

作为参考,此处记录了 API,此处记录了属性和术语。

为了确定使用什么持久层,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"/>

这分别意味着 Form Builder 本身的表单定义存储在 Orbeon Forms 资源中(通常在 JAR 文件中)。但是,Contact 表单的表单定义存储在 eXist 中。等等与其他属性。

当 Form Builder 使用 Save 存储表单定义时,它将它们作为表单数据存储在orbeon/builder应用程序/表单名称下。当它发布表单时,它将它们作为表单定义存储在其实际的应用程序/表单名称下。

我希望这有助于回答你的问题。

于 2012-11-07T18:10:40.647 回答
0

@avernet,在我的解决方案中,我不使用form nameXML 内部。我使用以下 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用来调用表单运行器。

于 2012-11-08T07:15:51.017 回答