【问题标题】:How to keep an anciant form saved with new version in ORBEON?如何在 ORBEON 中保存旧形式与新版本一起保存?
【发布时间】:2018-03-10 02:45:02
【问题描述】:

如何将旧表单保存在新版本中。 我在我们的应用程序中保存了一个表单。下面是我在 builder 和 Runner 中的表单的屏幕截图: 之后我使用(表单生成器)添加了一个新字段,但是当我打开保存的这个表单时,我没有找到添加的字段。 这是我新版表单的截图: 这就是我得到的结果:

编辑

@Avernet,我使用了 CRUD API,并按照以下步骤使用了两种方法:

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

    => 如果我把旧版本 1 而不是 2,则没有错误。

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

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

|发生错误 | |------------------------------------------------- -------------------------------------------------- -------------------| |致命错误:文档中根元素之后的标记必须格式正确。 | |------------------------------------------------- -------------------------------------------------- -------------------| |应用程序调用栈| |------------------------------------------------- -------------------------------------------------- -------------------| |oxf:/ops/pfc/xforms-xml-submission.xpl |读取处理器输出 | 111| |·················································································································· ·························································································································· ·························································································································· ·························································································································· ··································| |元素= | |名称=数据 | |ref =实例 | |------------------------------------------------- -------------------------------------------------- -------------------| |oxf:/ops/pfc/xforms-xml-submission.xpl |读取处理器输出 | 102| |·················································································································· ·························································································································· ·························································································································· ·························································································································· ··································| |元素= | |名称=数据 | |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 | | | |.impl.XMLDocumentScannerImpl$TrailingMiscDispatcher|dispatch | | | |n.apache.xerces.impl.XMLDocumentFragmentScannerImpl|scanDocument | | | |orbeon.apache.xerces.parsers.XML11配置 |解析 | | | |orbeon.apache.xerces.parsers.XML11配置 |解析 | | | |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|读取 |ProcessorOutputImpl.java | 257| |org.orbeon.oxf.processor.impl.ProcessorOutputImpl |读取 |ProcessorOutputImpl.java | 394| |org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |ProcessorImpl.java | 262| |ssor.pipeline.PipelineProcessor$InternalTopOutput$1|运行 |PipelineProcessor.java | 535| |org.orbeon.oxf.processor.pipeline.PipelineProcessor|executeParents |PipelineProcessor.java | 696| |org.orbeon.oxf.processor.pipeline.PipelineProcessor|访问$400 |PipelineProcessor.java | 60| |cessor.pipeline.PipelineProcessor$InternalTopOutput|readImpl |PipelineProcessor.java | 531| |essor.impl.ProcessorOutputImpl$TopLevelOutputFilter|读取 |ProcessorOutputImpl.java | 257| |org.orbeon.oxf.processor.impl.ProcessorOutputImpl |读取 |ProcessorOutputImpl.java | 394| |org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |ProcessorImpl.java | 262| |org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |ProcessorImpl.java | 266| |org.orbeon.oxf.processor.IdentityProcessor$1 |readImpl |IdentityProcessor.java | 33| |essor.impl.ProcessorOutputImpl$TopLevelOutputFilter|读取 |ProcessorOutputImpl.java | 257| |org.orbeon.oxf.processor.impl.ProcessorOutputImpl |读取 |ProcessorOutputImpl.java | 394| |org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |ProcessorImpl.java | 262| |orbeon.oxf.processor.pipeline.PipelineProcessor$1$1|运行 |PipelineProcessor.java | 93| |org.orbeon.oxf.processor.pipeline.PipelineProcessor|executeChildren |PipelineProcessor.java | 679| |org.orbeon.oxf.processor.pipeline.PipelineProcessor|access$000 |PipelineProcessor.java | 60| |g.orbeon.oxf.processor.pipeline.PipelineProcessor$1|readImpl |PipelineProcessor.java | 91| |essor.impl.ProcessorOutputImpl$TopLevelOutputFilter|读取 |ProcessorOutputImpl.java | 257| |org.orbeon.oxf.processor.impl.ProcessorOutputImpl |读取 |ProcessorOutputImpl.java | 394| |processor.pipeline.choose.ConcreteChooseProcessor$1|readImpl |ConcreteChooseProcessor.java | 126| |essor.impl.ProcessorOutputImpl$TopLevelOutputFilter|读取 |ProcessorOutputImpl.java | 257| |org.orbeon.oxf.processor.impl.ProcessorOutputImpl |读取 |ProcessorOutputImpl.java | 394| |org.orbeon.oxf.processor.ProcessorImpl |readInputAsSAX |ProcessorImpl.java | 262| |orbeon.oxf.processor.pipeline.PipelineProcessor$1$1|运行 |PipelineProcessor.java | 93|

谢谢

【问题讨论】:

标签: forms xhtml field orbeon savechanges


【解决方案1】:

这是设计使然,如果您使用数据库 for which Orbeon Forms supports versioning,那么 Orbeon Forms 甚至会在填写新表单时跟踪使用哪个版本的表单定义,并在填写新表单时再次使用该(可能是旧的)版本你回来编辑那条数据。

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

【讨论】:

  • 感谢您的回答。是的,我们需要将数据从旧版本的表单定义迁移到新版本:为了在我们的日常活动中节省时间(和金钱),我们希望能够重用以前保存的数据(例如,相同的订单,相同的客户端, ... ),通过复制使用 Orbeon 保存的现有文件。如果表单定义发生了变化(错误修复、增强……),我们希望重用“旧”数据,但使用新的表单版本。那么您能否更准确地说明您的建议«您需要在数据库级别执行此操作。 » ?您是否考虑过 XSL 转换?。
  • 我认为最好的办法是使用 CRUD API 读取要更新的数据,然后再对 XML 进行更改并使用相同的 CRUD API 将它们写回。编写时,您可以将Orbeon-Form-Definition-Version 设置为您要更新数据的新版本。你会告诉我这是否适合你。
  • 感谢 Avernet 的回复,我会尝试一下,如果它有效,我会告诉你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
相关资源
最近更新 更多