Moryx 8中如何执行自定义Workplan Importer并检查代码?
Moryx 8自定义Workplan导入器执行方案及代码修正
代码重大错误修正
你的导入器代码存在3个关键问题,会导致编译失败或工作计划无法正常运行:
- 重复变量声明:三个步骤中重复使用
var output声明变量,编译时会报错“变量已定义”,需去掉后续的var关键字直接赋值。 - 缺少结束路径:最后一个任务的输出未连接到
End节点,会导致工作流无法正常完成,需添加连接逻辑补全路径。 - 缺少唯一标识:Moryx的Workplan需要唯一Id才能被系统正确存储和识别,需添加Id赋值。
修正后的完整代码:
namespace Products.Importer { public class WorkplanImporter { private readonly IWorkplanManagement _workplanManagement; // 注入Moryx工作计划管理服务,用于持久化生成的计划 public WorkplanImporter(IWorkplanManagement workplanManagement) { _workplanManagement = workplanManagement; } public void CreateAndSaveWorkplan() { var workplan = new Workplan(); workplan.Id = Guid.NewGuid(); // 添加唯一标识 workplan.Name = "TestWorkplan"; var start = WorkplanInstance.CreateConnector("Start", NodeClassification.Start); var end = WorkplanInstance.CreateConnector("Ende", NodeClassification.End); var failed = WorkplanInstance.CreateConnector("Failed", NodeClassification.Failed); workplan.Add(start, end, failed); var input = start; var output = WorkplanInstance.CreateConnector("Task 1 finished"); workplan.AddStep(new InsertHousingTask(), new AssembleParameters(), input, output, failed); input = output; output = WorkplanInstance.CreateConnector("Task 2 finished"); // 去掉var,避免重复声明 workplan.AddStep(new TestHousingTask(), new AssembleParameters(), input, output, failed); input = output; output = WorkplanInstance.CreateConnector("Task 3 finished"); // 去掉var workplan.AddStep(new InsertPowerbarTask(), new AssembleParameters(), input, output, failed); // 连接最后一个任务输出到结束节点,补全工作流路径 workplan.Connect(output, end); // 保存工作计划到系统 _workplanManagement.SaveWorkplan(workplan); } } }
导入器执行方式
Moryx 8中执行自定义导入器有3种常用方式,可根据需求选择:
方式1:通过Initializer模块执行(推荐)
这是最便捷的内置执行方式,步骤如下:
- 创建初始化器类,实现
IInitializable接口,调用导入器的生成方法:
public class WorkplanImporterInitializer : IInitializable { private readonly WorkplanImporter _importer; public WorkplanImporterInitializer(WorkplanImporter importer) { _importer = importer; } public void Initialize() { _importer.CreateAndSaveWorkplan(); } }
- 在你的模块的
ConfigureServices方法中,注册导入器和初始化器:
services.AddTransient<WorkplanImporter>(); services.AddInitializer<WorkplanImporterInitializer>();
- 重启Command Center,进入Initializer模块,找到你注册的初始化器,点击执行即可生成工作计划。
方式2:开发Command Center自定义扩展
如果需要在界面手动触发执行,可以开发简单UI扩展:
- 创建带有触发按钮的Blazor组件,点击按钮时注入
WorkplanImporter并调用CreateAndSaveWorkplan()方法。 - 将组件注册为Command Center的扩展模块,即可在界面看到执行入口。
方式3:命令行工具/后台任务
编写控制台应用或后台定时任务,初始化Moryx容器后获取WorkplanImporter实例,调用生成方法实现自动执行。
内容的提问来源于stack exchange,提问作者Bastyy
相关产品推荐
相关产品推荐

