如何自动生成M2Doc包括设置?



我已经应用了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是什么?
  • 源代码中提到"如果你使用的是generation";-这是什么意思?使用.genconf文件(这似乎是可选的生成API)?
  • 我在哪里可以得到变量列表,其中M2Doc发现在一个。docx(在解析期间?),以便我可以把它呈现给用户对象(模型元素)分配?
  • 除了交出变量对象外,我是否必须告诉M2Doc变量的类型,以及它们位于哪个资源文件中?我的猜测是否定的,因为使用空白的.docx文件而不存储任何M2Doc信息也适用于变量本身(不适用使用其他类型或. oclastype()类型转换的任何其他AQL表达式)。
  • 我如何为M2Doc提供上述AQL表达式的类型信息,我通常通过nsURI配置告诉它?我提交了我的应用程序的完整资源集,但这似乎还不够。
  • 任何帮助将非常感激!

    给你一个目前为止我的代码的印象,见下面-注意它实际上是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);

    谢谢!

    1. 不,用于解析和生成的API不会修改模板文件或.genconf文件。要修改模板的配置,您需要使用TemplateCustomProperties类。这将允许您注册元模型和服务类。该信息随后用于配置IQueryEnvironment,因此您可能还希望在代码中直接配置IQueryEnvironment。

    2. 这里的generation指的是.genconf文件。注意:genconf文件也是一个EMF模型,因此您也可以在内存中创建一个模型来启动您的生成,如果这对您来说更容易的话。但是,是的,.genconf文件的使用是可选的,就像你的代码示例一样。

    3. 对于模板中的变量列表,您可以使用TemplateCustomProperties类:

    • TemplateCustomProperties.getVariables()将列出以其类型
    • 声明的变量
    • TemplateCustomProperties.getMissingVariables()列出模板中使用但未声明的变量

    您还可以找到使用的元模型(eppackage nsURIs)和导入的服务类的列表。

    1. 变量的类型在生成时不需要,只有当你想要验证你的模板时才需要。在生成时,您需要像在示例中那样将一个映射从变量名传递到它的值。变量的值可以是模型中的任何对象(EObject), String, Integer,…如果你想使用oclIsKindOf(pkg::MyEClass),你需要先注册pkg的nsURI,参见下一点。

    2. 您提供的代码应该允许您使用类似projectmodel::PJDiagram.allInstances()的东西。这个服务需要一个在M2DocUtils.getQueryEnvironment()中初始化的ResourceSetRootEObjectProvider()。但是你需要在模板中声明元模型的nsURI(参见TemplateCustomProperties)。这将在IQueryEnvironment中注册它。您也可以使用IQueryEnvironment.registerEPackage()自己注册。

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

    最新更新