Orchard Workflow自定义事件参数无法在Notify Activity读取求助
我来帮你梳理下可能遗漏的环节,你遇到的情况是事件参数没被正确解析到通知模板里,大概率是以下几个点出了问题:
确认事件参数是否真的进入了工作流上下文
你写的TriggerEvent代码里,第三个参数是返回字典的委托,但有些工作流框架不会自动把这个字典里的键值对注入到全局工作流上下文。建议在Notify Activity执行前加个调试步骤(比如输出日志),打印工作流上下文的所有变量/参数,看看ProductName是否存在,值是不是正确的model.Name。如果上下文里根本没有这个参数,那得检查TriggerEvent的实现逻辑,是否把委托返回的参数正确传递到了后续Activity能访问的地方。检查通知模板的语法是否匹配框架要求
不同工作流引擎的模板变量语法差异很大:有的用{ProductName},有的需要双大括号{{ProductName}},还有的用@ProductName或者${ProductName}。你现在用的{ProductName}可能不符合你所用框架的解析规则,导致被当成普通字符串输出。比如如果是.NET WF,可能需要用{0}占位符并绑定参数;如果是自定义引擎,要确认模板解析器是否启用了变量替换,还要注意变量名的大小写是否完全匹配(比如别把ProductName写成productName)。验证事件与Notify Activity的参数映射配置
很多时候,事件传递的参数不会直接暴露给Activity,需要显式做参数映射。比如你得在Notify Activity的配置界面里,把ProductAdded事件的ProductName参数绑定到Activity的某个输入属性(比如NotificationParams.ProductName),然后模板里引用这个绑定后的属性。如果跳过了这个映射步骤,模板自然读不到参数值。检查委托是否被正确执行
你的代码里用了() => new Dictionary<...>的委托,要确认这个委托是否真的被工作流框架调用了。比如有些框架可能在触发事件时,不会自动执行这个委托来获取参数,而是需要你直接传入字典实例,而不是委托。可以改成直接传字典试试:_workflowManager.TriggerEvent("ProductAdded", null, new Dictionary<string, object> {{"ProductName", model.Name}});,看看参数能不能正常传递。
先从打印上下文参数开始排查,这是最快定位问题的方法——如果参数存在,就看模板语法;如果不存在,就回头查参数传递的环节。
内容的提问来源于stack exchange,提问作者buff

