我已经应用了M2Doc编程使用指南(也是在此帮助下),通过API成功生成文档,该API以前是通过使用M2Doc GUI(配置.docx和.genconf文件)准备的。它似乎也可以与配置的。docx一起工作,但没有。genconf文件。
现在我想更进一步,简化我们应用程序中的用户界面。用户应该自带.docx文件,包括{m:…}字段,特别是用于变量定义,然后在我们的Eclipse应用程序中仅将模型元素分配给变量列表。最后按"生成"。其余的我想通过M2Doc API来处理:
- 从.docx 获取变量列表
- 告诉M2Doc变量对象(以及它们的类型和其他必要的信息,如果单独需要的话)
- 为M2Doc提供足够的信息来处理Word字段中的AQL表达式,如
projectmodel::PJDiagram.allInstances()
我试图分析M2Doc源代码,但有一些问题,以实现目标:
解析/生成API不会在。docx或。genconf文件中创建任何配置信息,对吗?至少生成.docx配置信息的API是什么?任何帮助将非常感激!
给你一个目前为止我的代码的印象,见下面-注意它实际上是Javascript而不是Java,因为我们的应用程序有一个内置的JS-Java接口。
//=================== 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);
谢谢!
-
不,用于解析和生成的API不会修改模板文件或.genconf文件。要修改模板的配置,您需要使用TemplateCustomProperties类。这将允许您注册元模型和服务类。该信息随后用于配置IQueryEnvironment,因此您可能还希望在代码中直接配置IQueryEnvironment。
-
这里的generation指的是.genconf文件。注意:genconf文件也是一个EMF模型,因此您也可以在内存中创建一个模型来启动您的生成,如果这对您来说更容易的话。但是,是的,.genconf文件的使用是可选的,就像你的代码示例一样。
-
对于模板中的变量列表,您可以使用TemplateCustomProperties类:
- TemplateCustomProperties.getVariables()将列出以其类型 声明的变量
- TemplateCustomProperties.getMissingVariables()列出模板中使用但未声明的变量
您还可以找到使用的元模型(eppackage nsURIs)和导入的服务类的列表。
-
变量的类型在生成时不需要,只有当你想要验证你的模板时才需要。在生成时,您需要像在示例中那样将一个映射从变量名传递到它的值。变量的值可以是模型中的任何对象(EObject), String, Integer,…如果你想使用oclIsKindOf(pkg::MyEClass),你需要先注册pkg的nsURI,参见下一点。
-
您提供的代码应该允许您使用类似projectmodel::PJDiagram.allInstances()的东西。这个服务需要一个在M2DocUtils.getQueryEnvironment()中初始化的ResourceSetRootEObjectProvider()。但是你需要在模板中声明元模型的nsURI(参见TemplateCustomProperties)。这将在IQueryEnvironment中注册它。您也可以使用IQueryEnvironment.registerEPackage()自己注册。
这将帮助您找到AQL环境配置中缺少的部分。你的代码看起来不错,当你添加配置部分时应该可以工作。