2012-11-07 50 views
0

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

我想复制/导出/导入表单定义从一个仓库到另一个,从而共享/重用/迁移的形式定义。当表单定义从存储库复制到另一个时,它的file-id被更改,但是表单定义中的form name保持旧的。就像将普通文件复制到另一个目录或重命名它一样,但文件内容不会更改。

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

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

+1

我不知道如何将数据保存在持久层的磁盘上。什么文件ID?使用从磁盘读取数据的捆绑资源持久层(并且是只读的),数据将保存在目录层次结构中,如下所示:http://wiki.orbeon.com/forms/doc/developer- guide/form-runner/persistence-api#TOC-Virtual-hierarchy-of-data – avernet

+0

表单定义和表单数据保存在不同的地方。表格数据保存在数据库中。表单定义被保存为文件,每个文件都有相关的元数据,'file-id'就是这样的元数据之一。我觉得表单数据不是问题;关键是表单定义。 – bopomofu

+0

请参阅下面的Erik的回答,并且还请注意,Form Builder使用的应用程序名称/表单名称来自表单定义元数据,它存储在表单定义文档中。所以如果你想改变应用程序名称/表单名称,你也应该改变表单定义。 – avernet

回答

0

作为参考,API是记录here,并且属性和术语here

要确定使用什么持久层,窗体生成和形式亚军对付只有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形式资源(通常在JAR文件中)。但是,联系人表单的表单定义存储在eXist中。等与其他属性。

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

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

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来打电话给表格跑步者。