首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何自动生成包括设置在内的M2Doc?

如何自动生成包括设置在内的M2Doc?
EN

Stack Overflow用户
提问于 2021-08-23 11:27:49
回答 1查看 76关注 0票数 0

我已经应用M2Doc编程使用指南 (也与这种帮助一起)通过API成功地生成了一个文档,这是以前通过使用M2Doc GUI (配置的.docx加上一个.genconf文件)准备的。它似乎也适用于配置好的.docx,但没有.genconf文件。

现在,我想更进一步,在我们的应用程序中简化用户界面。用户应该附带一个.docx,其中包括{m:.}字段,特别是变量定义字段,然后在我们的Eclipse应用程序中,只需将模型元素分配给变量列表。最后按下“生成”键。其余的我想通过M2Doc API来处理:

  • 从.docx获取变量列表
  • 告诉M2Doc变量对象(以及它们的类型和其他所需的信息,如果需要的话)
  • 向M2Doc提供足够的信息,以处理Word字段中的AQL表达式(如projectmodel::PJDiagram.allInstances() )

我试图对M2Doc源代码进行分析,但为了达到目标,我有一些问题:

  1. 解析/生成API不会在.docx或.genconf文件中创建任何配置信息,对吗?至少要生成.docx配置信息的API是什么?
  2. 源代码提到“如果你使用的是一代”--这意味着什么?.genconf文件的使用(对于generate来说似乎是可选的)?
  3. 我可以从哪里获得变量列表,哪个M2Doc在.docx中找到(在解析期间?),以便我可以将它呈现给用户进行对象(模型元素)分配?
  4. 除了提交变量对象之外,我是否必须告诉M2Doc变量的类型,以及它们位于哪个资源文件中?我的猜测是否定的,因为使用空白的.docx文件而没有存储任何M2Doc信息也适用于变量本身(对于使用其他类型的任何附加AQL表达式,或者.oclAsType()类型铸件)。
  5. 如何为M2Doc提供上述AQL表达式的类型信息,这通常是通过nsURI配置告诉它的?我提交了我的应用程序的完整resourceSet,但这似乎还不够。

任何帮助都是非常感谢的!

到目前为止,为了给您留下我的代码的印象,请注意,它实际上是Javascript而不是Java,因为我们的应用程序有一个内置的Java接口。

代码语言:javascript
复制
//=================== PARSING OF THE DOCUMENT ==============================
var templateURIString = "file:///.../templateReqs.docx";
var templateURI = URI.createURI(templateURIString);

// canNOT be empty, as we get nullpointer exceptions otherwise
var options = {"TemplateURI":templateURIString};

var exceptions = new java.util.ArrayList();

var resourceSetForModels = ...; //here our application's resource set for the whole model is used, instead of M2Doc "createResourceSetForModels" - works for the moment, but not sure if some services linking is not working

var queryEnvironment = m2doc.M2DocUtils.getQueryEnvironment(resourceSetForModels, templateURI, options);
        
var classProvider = m2doc.M2DocPlugin.getClassProvider();

// empty Monitor for the moment
var monitor = new BasicMonitor();

var template = m2doc.M2DocUtils.parse(resourceSetForModels.getURIConverter(), templateURI, queryEnvironment, classProvider, monitor);

// =================== GENERATION OF THE DOCUMENT ==============================

var outputURIString = "file:///.../templateReqs.autogenerated.docx";
var outputURI = URI.createURI(outputURIString);

variables["myVar1"] = ...; // assigment of objects...

m2doc.M2DocUtils.generate(template, queryEnvironment, variables, resourceSetForModels, outputURI, monitor);

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-23 13:01:29

  1. 不,用于解析生成的API不修改模板文件或.genconf文件。要修改模板的配置,需要使用TemplateCustomProperties类。这将允许您注册元模型和服务类。然后使用此信息配置IQueryEnvironment,因此您也可能希望在代码中直接配置IQueryEnvironment。
  2. 此上下文中的生成引用.genconf文件。请注意,genconf文件也是一个EMF模型,因此您也可以在内存中手工创建一个,以便在您比较容易的情况下启动您的生成。但是,是的,.genconf文件的使用是可选的,如代码示例中所示。
  3. 对于模板中的变量列表,可以使用类TemplateCustomProperties:
  • TemplateCustomProperties.getVariables()将列出以其类型声明的变量
  • TemplateCustomProperties.getMissingVariables()列出模板中使用但未声明的变量

您还可以找到已使用的元模型(EPackage,nsURI)和导入的服务类的le列表。

  1. 在生成时不需要变量类型,只有在要验证模板时才需要变量类型。在生成时,您需要将一个映射从变量名传递到它的值,就像在示例中所做的那样。变量的值可以是模型中的任意对象( EObject)、字符串、整数、.如果您想使用类似于oclIsKindOf( pkg ::MyEClass)的东西,您需要首先注册pkg的nsURI,参见下一点。
  2. 您提供的代码应该允许您使用类似于projectmodel::PJDiagram.allInstances()的代码。该服务需要一个在ResourceSetRootEObjectProvider()中初始化的M2DocUtils.getQueryEnvironment()。但是您需要在模板中声明元模型的nsURI (参见TemplateCustomProperties)。这将在IQueryEnvironment中注册它。您也可以使用IQueryEnvironment.registerEPackage()自己注册它。

这将帮助您找到AQL环境配置中缺少的部分。您的代码看起来很好,在添加配置部分时应该可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68891842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档