m2doc

How can I export descriptions that contain xhtml tables with a m:template from Capella with M2Doc?


Using Capella 5.2 with M2Doc 3.2.1 I can generate from descriptions that contain xhtml tables with:

{ m:for fkt | mySystemEngineering.eAllContents(pa::PhysicalFunction) }
{ m:if not fkt.description.trim().equals('') and fkt.description.trim()->size() > 0 }
{ m: fkt.description.trim().fromHTMLBodyString() }
{ m:else }
- 
{ m:endif }
{ m:endfor }

I want to use this inside of a m:template, but the generation stops with the error below. Same with Capella 6.1 and M2Doc 3.3.0. What do I have to change to make it work using m:template?

Version with m:template:

{ m:template showDescriptions(top:capellamodeller::SystemEngineering) }
{ m:for fkt | top.eAllContents(pa::PhysicalFunction) }
{ m:if not fkt.description.trim().equals('') and fkt.description.trim()->size() > 0 }
{ m: fkt.description.trim().fromHTMLBodyString() }
{ m:else }
- 
{ m:endif }
{ m:endfor }
{ m:endtemplate }

{ m:mySystemEngineering.showDescriptions() }

The error message:

M2Doc : technical error.

org.apache.xmlbeans.impl.values.XmlValueDisconnectedException
    at org.apache.xmlbeans.impl.values.XmlObjectBase.check_orphaned(XmlObjectBase.java:1258)
    at org.openxmlformats.schemas.wordprocessingml.x2006.main.impl.CTPImpl.addNewR(Unknown Source)
    at org.apache.poi.xwpf.usermodel.XWPFParagraph.createRun(XWPFParagraph.java:1414)
    at org.obeonetwork.m2doc.util.M2DocUtils.appendMessageRun(M2DocUtils.java:238)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.insertBody(M2DocEvaluator.java:716)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.insertGenerationResult(M2DocEvaluator.java:694)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.insertObject(M2DocEvaluator.java:670)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.caseQuery(M2DocEvaluator.java:610)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.caseQuery(M2DocEvaluator.java:1)
    at org.obeonetwork.m2doc.template.util.TemplateSwitch.doSwitch(TemplateSwitch.java:186)
    at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:53)
    at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:69)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.doSwitch(M2DocEvaluator.java:1450)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.caseBlock(M2DocEvaluator.java:1675)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.caseBlock(M2DocEvaluator.java:1)
    at org.obeonetwork.m2doc.template.util.TemplateSwitch.doSwitch(TemplateSwitch.java:199)
    at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:53)
    at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:69)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.doSwitch(M2DocEvaluator.java:1450)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.caseDocumentTemplate(M2DocEvaluator.java:314)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.caseDocumentTemplate(M2DocEvaluator.java:1)
    at org.obeonetwork.m2doc.template.util.TemplateSwitch.doSwitch(TemplateSwitch.java:279)
    at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:53)
    at org.eclipse.emf.ecore.util.Switch.doSwitch(Switch.java:69)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.doSwitch(M2DocEvaluator.java:1450)
    at org.obeonetwork.m2doc.generator.M2DocEvaluator.generate(M2DocEvaluator.java:299)
    at org.obeonetwork.m2doc.util.M2DocUtils.generate(M2DocUtils.java:853)
    at org.obeonetwork.m2doc.genconf.GenconfUtils.generate(GenconfUtils.java:507)
    at org.obeonetwork.m2doc.genconf.GenconfUtils.generate(GenconfUtils.java:432)
    at org.obeonetwork.m2doc.genconf.editor.command.GenerateHandler$GenerateJob.runInWorkspace(GenerateHandler.java:87)
    at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:42)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

Solution

  • This looks like a bug in M2Doc. If you can provide a simple reproduction case, please open an issue.

    As a workaround you can try to add an empty paragraph at the beginning of your template, it might help. However it will generate an empty paragraph in the resulting document. You can also try to insert a comment or a block comment at the beginning of your template.