如何添加将执行模型到 MS Word 的特定生成阶段?
How to add a specific generation phase that would do Model-To-MS Word?
假设我在 MPS 中开发了一组行为,允许我使用 POI 将描述文字处理器文档的 WordDocument
概念(和子项)的实例转换为 MS Word 文档并且我已经能够在 MPS 插件中执行一个操作,允许我通过右键单击我的根节点来生成我想要的 MS Word 文档。
我想将其添加为生成过程中的一个阶段,以便在模型到模型阶段之后,MPS 的生成过程进行模型到 MS Word 生成而不是模型到文本.
MPS 是否可以通过这种方式自定义,要使用的概念集是什么?
当您运行 在 MPS 中制作或重建模型时,MPS 将在此会话中启动所谓的 MakeSession
MPS 执行多个步骤。例如,make 会话中的一个步骤是 "generate",其中 运行 是模型到模型的转换,第二个步骤是 "textgen",然后将生成步骤的结果模型写入通过执行语言的 textgen 定义来磁盘。
这些单独的步骤称为 "facet"。您可以将自己的方面贡献到整个制作过程中。为此,您需要用您的语言创建一个插件方面,然后在其中创建一个方面。在这方面,您可以声明它的依赖性和优先级。在您的情况下,您希望 运行 在 textgen 之前但在生成之后,以便您可以访问生成的结果。
构面可以以声明的方式统计其输入数据。在您的情况下,您需要 GResource
代表生成器方面的输出。然后你可以访问上面的模型和 运行 你的 POI 代码。
一个最小的例子是这样的:
facet RunPoi extends <none> {
Required: Generate, TextGen
<no optional facets>
Targets:
target genWord overrides <none> weight default {
resources policy: transform GResource -> <no output>
Dependencies:
after generate
before textGen
before textGenToMemory
<no properties>
<no queries>
<no config>
(progressMonitor, input)->void {
foreach resource in input {
SModel mdl = resource.model;
// run poi code with mdl
}
}
}
}
假设我在 MPS 中开发了一组行为,允许我使用 POI 将描述文字处理器文档的 WordDocument
概念(和子项)的实例转换为 MS Word 文档并且我已经能够在 MPS 插件中执行一个操作,允许我通过右键单击我的根节点来生成我想要的 MS Word 文档。
我想将其添加为生成过程中的一个阶段,以便在模型到模型阶段之后,MPS 的生成过程进行模型到 MS Word 生成而不是模型到文本.
MPS 是否可以通过这种方式自定义,要使用的概念集是什么?
当您运行 在 MPS 中制作或重建模型时,MPS 将在此会话中启动所谓的 MakeSession
MPS 执行多个步骤。例如,make 会话中的一个步骤是 "generate",其中 运行 是模型到模型的转换,第二个步骤是 "textgen",然后将生成步骤的结果模型写入通过执行语言的 textgen 定义来磁盘。
这些单独的步骤称为 "facet"。您可以将自己的方面贡献到整个制作过程中。为此,您需要用您的语言创建一个插件方面,然后在其中创建一个方面。在这方面,您可以声明它的依赖性和优先级。在您的情况下,您希望 运行 在 textgen 之前但在生成之后,以便您可以访问生成的结果。
构面可以以声明的方式统计其输入数据。在您的情况下,您需要 GResource
代表生成器方面的输出。然后你可以访问上面的模型和 运行 你的 POI 代码。
一个最小的例子是这样的:
facet RunPoi extends <none> {
Required: Generate, TextGen
<no optional facets>
Targets:
target genWord overrides <none> weight default {
resources policy: transform GResource -> <no output>
Dependencies:
after generate
before textGen
before textGenToMemory
<no properties>
<no queries>
<no config>
(progressMonitor, input)->void {
foreach resource in input {
SModel mdl = resource.model;
// run poi code with mdl
}
}
}
}