【发布时间】:2012-10-27 01:56:40
【问题描述】:
我将表单定义存储在基于文件系统的存储库中。存储库中的每个表单定义都有一个file-id。在 Orbeon Forms 中,表单定义由 <app name, form name> 对标识。所以我使用file-id 作为form name。我根据the persistence API编写了一个定制的持久层来桥接Orbeon Forms和存储库。
我想将表单定义从一个存储库复制/导出/导入到另一个存储库,以便共享/重用/迁移表单定义。当一个表单定义从一个存储库复制到另一个时,它的file-id 会改变,但是,表单定义中的form name 仍然是旧的。就像将普通文件复制到另一个目录或重命名一样,但文件内容没有改变。
在这种情况下,我将在持久性 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>。我的第二个问题是,我们可以更改或自定义优先级吗?
【问题讨论】:
-
我不确定您是如何将数据保存在持久层中的磁盘上的。文档ID呢?使用捆绑的资源持久层,从磁盘读取数据(并且是只读的),数据保存在一个目录层次结构中,如下所示:wiki.orbeon.com/forms/doc/developer-guide/form-runner/…
-
表单定义和表单数据保存在不同的地方。表单数据保存在数据库中。表单定义保存为文件,每个文件都有相关的元数据,
file-id就是这样的元数据之一。我觉得表单数据不是问题;关键是表单定义。 -
见下方 Erik 的回答,还要注意 Form Builder 使用的应用名称/表单名称来自表单定义元数据,存储在表单定义文档中。所以如果你想改变应用名称/表单名称,你也应该改变表单定义。
-
按照 avernet 的建议,
document参数有效。发布表单时,我的持久层使用document参数而不是元数据中的form name。 -
所以,我想一个解决方案,如果您希望应用程序/表单名称与文件名称匹配,则为: 1. 在您的持久层中,当保存/读取数据时,使用应用程序XML 文档中的 /form 名称,而不是文档 ID。 2. 复制/重命名表单时,还要更改 XML 文档中的表单/应用程序名称。这是你在想的吗? (或者当然,您可以放弃将应用程序/表单名称用作文件名,而使用文档 ID,这会使一切变得更简单。)
标签: portability orbeon