如何在ORBEON中保存新版本的旧表格?

How to keep an anciant form saved with new version in ORBEON?

提问人:Lebki 提问时间:9/28/2017 最后编辑:Lebki 更新时间:11/20/2017 访问量:99

问:

如何用新版本保存旧表格。 我已经在我们的应用程序中保存了一个表单,这是我在构建器和 Runner 中的表单的屏幕截图: enter image description here enter image description here 之后,我使用(form-builder)添加了一个新字段,但是当我打开保存的这个表单时,我没有找到添加的字段。 这是我的新版本Form的屏幕截图: 这是我得到的结果:enter image description hereenter image description here

编辑

@Avernet,我使用了 CRUD API,我使用两种方法执行步骤:

  1. 通过施加最新的版本号来检索表单的 xml:

    => 如果我把旧版本 1 而不是 2 放在一起,就没有错误。

  2. 使用最新版本创建一个空的测试表单,并填写 使用旧版本创建的表单

这是发生错误时的堆栈跟踪:

|发生错误 | |----------------------------------------------------------------------------------------------------------------------| |致命错误:文档中根元素后面的标记必须格式正确。| |----------------------------------------------------------------------------------------------------------------------| |应用程序调用堆栈 | |----------------------------------------------------------------------------------------------------------------------| |oxf:/ops/pfc/xforms-xml-submission.xpl |读取处理器输出 |111| |······················································································································· |元素= | |name =数据 | |ref =实例 | |----------------------------------------------------------------------------------------------------------------------| |oxf:/ops/pfc/xforms-xml-submission.xpl |读取处理器输出 |102| |······················································································································· |元素= | |name =数据 | |id =原始实例 | |----------------------------------------------------------------------------------------------------------------------| |:/Users/fkammoun/AppData/Local/Temp/upload__5a2c8fe_15fbb88e967__8000_00000000.tmp| |1| |----------------------------------------------------------------------------------------------------------------------| |异常:org.orbeon.oxf.common.ValidationException | |----------------------------------------------------------------------------------------------------------------------| |org.orbeon.oxf.xml.XMLParsing$ErrorHandler |fatalError |XMLParsing.java |221| |orbeon.apache.xerces.util.ErrorHandlerWrapper |fatalError | | | |orbeon.apache.xerces.impl.XMLErrorReporter |reportError | | | |orbeon.apache.xerces.impl.XMLErrorReporter |reportError | | | |orbeon.apache.xerces.impl.XMLErrorReporter |reportError | | | |orbeon.apache.xerces.impl.XMLScanner |reportFatalError | | | |.实现。XMLDocumentScannerImpl$TrailingMiscDispatcher|调度 | | | |n.apache.xerces.impl.XMLDocumentFragmentScannerImpl|scanDocument | | | |orbeon.apache.xerces.parsers.XML11Configuration |解析 | | | |orbeon.apache.xerces.parsers.XML11Configuration |解析 | | | |orbeon.apache.xerces.parsers.XMLParser |解析 | | | |orbeon.apache.xerces.parsers.AbstractSAXParser |解析 | | | |processor.generator.URLGenerator$URLResourceHandler|readXML |URLGenerator.java |1042| |org.orbeon.oxf.processor.generator.URLGenerator$1 |readImpl |URLGenerator.java |545| |essor.impl.ProcessorOutputImpl$TopLevelOutputFilter|阅读 |处理器输出Impl.java |257| |org.orbeon.oxf.processor.impl.ProcessorOutputImpl |阅读 |处理器输出Impl.java |394| |org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |处理器Impl.java |262| |ssor.pipeline.PipelineProcessor$InternalTopOutput$1|运行 |管道处理器.java |535| |org.orbeon.oxf.processor.pipeline.PipelineProcessor|executeParents |管道处理器.java |696| |org.orbeon.oxf.processor.pipeline.PipelineProcessor|访问$400 |管道处理器.java |60| |cessor.pipeline.PipelineProcessor$InternalTopOutput|readImpl |管道处理器.java |531| |essor.impl.ProcessorOutputImpl$TopLevelOutputFilter|阅读 |处理器输出Impl.java |257| |org.orbeon.oxf.processor.impl.ProcessorOutputImpl |阅读 |处理器输出Impl.java |394| |org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |处理器Impl.java |262| |org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |处理器Impl.java |266| |org.orbeon.oxf.processor.IdentityProcessor$1 |readImpl |身份处理器 .java |33| |essor.impl.ProcessorOutputImpl$TopLevelOutputFilter|阅读 |处理器输出Impl.java |257| |org.orbeon.oxf.processor.impl.ProcessorOutputImpl |阅读 |处理器输出Impl.java |394| |org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |处理器Impl.java |262| |orbeon.oxf.processor.pipeline.PipelineProcessor$1$1|运行 |管道处理器.java |93| |org.orbeon.oxf.processor.pipeline.PipelineProcessor|executeChildren |管道处理器.java |679| |org.orbeon.oxf.processor.pipeline.PipelineProcessor|访问$000 |管道处理器.java |60| |g.orbeon.oxf.processor.pipeline.PipelineProcessor$1|readImpl |管道处理器.java |91| |essor.impl.ProcessorOutputImpl$TopLevelOutputFilter|阅读 |处理器输出Impl.java |257| |org.orbeon.oxf.processor.impl.ProcessorOutputImpl |阅读 |处理器输出Impl.java |394| |processor.pipeline.choose.ConcreteChooseProcessor$1|readImpl |ConcreteChooseProcessor.java |126| |essor.impl.ProcessorOutputImpl$TopLevelOutputFilter|阅读 |处理器输出Impl.java |257| |org.orbeon.oxf.processor.impl.ProcessorOutputImpl |阅读 |处理器输出Impl.java |394| |org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |处理器Impl.java |262| |orbeon.oxf.processor.pipeline.PipelineProcessor$1$1|运行 |管道处理器.java |93|

谢谢

表单 XHTML 字段 orbeon 保存更改

评论

2赞 izlin 9/28/2017
请提供一个最小的可重复示例

答:

0赞 avernet 9/29/2017 #1

这是设计使然,如果您使用的是Orbeon Forms支持版本控制的数据库,那么Orbeon Forms甚至可以跟踪在填写新表单时使用的表单定义版本,并在您返回编辑该数据时再次使用该版本(可能是旧版本)。

这样做是因为表单定义的新版本可能与以前的版本不兼容。通常,可以将数据从旧版本的表单定义迁移到新版本,但Orbeon Forms不知道如何自动执行此迁移。如果这是您需要的,则需要在数据库级别执行此操作。

评论

0赞 Lebki 11/14/2017
谢谢你的回答。是的,我们需要将数据从旧版本的表单定义迁移到新版本:为了节省日常活动的时间(和金钱),我们希望能够重用以前保存的数据(例如,相同的订单,相同的客户,...),通过复制使用Orbeon保存的现有文件。如果表单定义发生了变化(错误修复、增强等),我们希望重用“旧”数据,但使用新的表单版本。那么,您能否更准确地提出您的建议:“您需要在数据库级别进行操作。你有没有想过XSL转换?
0赞 avernet 11/14/2017
我认为最好的办法是使用 CRUD API 读取要更新的数据,然后再对 XML 进行更改并使用相同的 CRUD API 将其写回。写入时,可以将 设置为要将数据更新到的新版本。如果这对您有用,您会告诉我。Orbeon-Form-Definition-Version
0赞 Lebki 11/14/2017
感谢 Avernet 的回复,我会尝试一下,我会告诉你它是否有效。