M2Doc API实现带配置的自动化文档生成相关问题咨询
问题解答
- 你说的没错,默认的解析、生成API不会对原.docx模板文件或.genconf文件做任何写入操作。如果需要生成对应.genconf配置文件,可调用
GenconfSerializer类的序列化API,传入Template实例、变量配置、依赖元包等参数即可输出标准.genconf文件。 - 源码中提到的“if you are using a Generation”确实指代使用.genconf文件的场景。.genconf本质是GUI场景下用于持久化生成配置的存储文件,核心是把Generation作为根元素存储模板路径、变量声明、元包依赖、服务配置等信息,直接调用底层API生成文档时.genconf完全是可选的。
- 你解析得到的
template对象本身就包含所有识别到的变量信息,直接调用template.getVariables()方法即可获取变量列表,返回值的每个元素为TemplateVariable类型,包含变量名、声明的变量类型等属性,可直接提取用于展示给用户做模型元素绑定。 - 你的猜测是正确的:如果仅需要传递变量对象、不需要做AQL类型校验、
oclAsType()类型转换等操作,不需要额外向M2Doc告知变量类型、所属资源。如果需要支持上述高级AQL能力,才需要提前把变量对应的元类型注册到查询环境中。 - 仅传入ResourceSet不够的原因是M2Doc的QueryEnvironment需要显式注册用到的元包才能识别类型。你可以调用
queryEnvironment.getEPackageRegistry().put(你的元包nsURI, 对应的EPackage实例)将你用到的projectmodel等元包注册进去,也可以遍历ResourceSet中所有的EPackage批量注册,注册完成后projectmodel::PJDiagram.allInstances()这类AQL表达式就可以正常解析。如果用到自定义服务,还需要调用queryEnvironment.registerServicePackage()注册对应的服务类。
代码优化参考
你可以在现有解析逻辑后补充变量提取、元包注册的逻辑:
// 解析模板后获取变量列表用于用户绑定 var variableList = template.getVariables(); for each (var tempVar in variableList) { print("识别到模板变量:" + tempVar.getName() + ",声明类型:" + tempVar.getType()); // 这里可以把变量信息输出到前端界面让用户绑定模型元素 } // 注册用到的自定义元包,支持AQL类型解析 var projectModelNsURI = "http://www.yourcompany.com/projectmodel/1.0"; // 替换为你的元包nsURI var projectModelPackage = resourceSetForModels.getPackageRegistry().getEPackage(projectModelNsURI); queryEnvironment.getEPackageRegistry().put(projectModelNsURI, projectModelPackage);
内容的提问来源于stack exchange,提问作者Nils Heuermann
相关产品推荐
相关产品推荐

