如何为Design Automation WorkItem设置自定义标志以指定调用方法?
在Design Automation中调用Bundle内指定方法的实现方案
1. 先在Design Automation Activity中声明自定义标志参数
首先要确保你的Design Automation Activity里已经定义了这个自定义输入参数,否则WorkItem传参后Bundle无法接收。比如在Activity的输入列表里添加一个字符串类型的参数,命名为methodFlag(名字可自定义,只要前后保持一致即可)。
2. API端修改WorkItem,传入自定义标志
创建WorkItem时,直接在Arguments字典里新增这个自定义参数,根据业务需求传入不同的标志值(比如"Method1"或"Method2"):
public async Task RunDesignAutomation() { // 根据业务逻辑确定要调用的方法标志 string targetMethod = "Method1"; // 按需切换为"Method2" var workItem = new WorkItem() { ActivityId = activityName, Arguments = new Dictionary<string, IArgument>() { { "rvtFile", inputFileArgument }, { "inputJson", inputJsonArgument }, { "result", outputFileArgument }, { "onComplete", onCompleteArgument }, // 添加自定义标志参数 { "methodFlag", new StringArgument { Value = targetMethod } } } }; await _designAutomation.CreateWorkItemAsync(workItem); }
3. Bundle端读取标志并执行对应方法
在HandleDesignAutomationReadyEvent方法中,通过e.InputArguments获取传入的标志值,判断后调用对应方法,同时针对不同方法处理对应的inputJson:
private void HandleDesignAutomationReadyEvent(object sender, DesignAutomationReadyEventArgs e) { // 获取自定义标志 if (e.InputArguments.TryGetValue("methodFlag", out var flagArg) && flagArg is StringArgument flag) { string inputJson = ((StringArgument)e.InputArguments["inputJson"]).Value; if (flag.Value.Equals("Method1", StringComparison.OrdinalIgnoreCase)) { // 解析Method1对应的JSON模型(需提前定义对应实体类) var method1Input = JsonConvert.DeserializeObject<Method1InputModel>(inputJson); Method1(method1Input); } else if (flag.Value.Equals("Method2", StringComparison.OrdinalIgnoreCase)) { // 解析Method2对应的JSON模型 var method2Input = JsonConvert.DeserializeObject<Method2InputModel>(inputJson); Method2(method2Input); } } }
补充说明
- 需提前定义
Method1InputModel、Method2InputModel等实体类,确保和对应方法的参数类型匹配。 - 如果不需要区分JSON解析逻辑,也可以直接将原始JSON字符串传入对应方法处理。
内容的提问来源于stack exchange,提问作者Oleh
相关产品推荐
相关产品推荐

