跨工作流调用时,如何从initiator变量提取用户邮箱?
问题原因
你遇到的Script31$_run_closure3@6d9d597c是闭包对象的内存标识,说明在当前脚本上下文里,{{initiator}}并不是直接返回用户信息字符串,而是一个延迟执行的闭包——只有调用它才能获取到实际的用户对象。
解决方案
1. 执行闭包获取用户对象
先调用闭包拿到真实的用户实例,再从中提取邮箱:
// 执行闭包,获取initiator对应的用户对象 def initiatorUser = {{initiator}}() loggerApi.info('用户对象详情: ' + initiatorUser)
2. 提取用户邮箱
大多数工作流系统(如Flowable、Activiti等)的用户对象会提供email属性或getEmail()方法,直接调用即可:
// 提取邮箱字符串 def initiatorEmail = initiatorUser.email // 若属性访问不生效,尝试调用getter方法 // def initiatorEmail = initiatorUser.getEmail() loggerApi.info('发起者邮箱: ' + initiatorEmail)
3. 传递邮箱到第二个工作流
启动子工作流时,直接传入提取到的邮箱字符串即可,避免传递闭包导致类型错误:
// 示例:假设启动工作流的方法为startWorkflow,传入参数 startWorkflow('你的子工作流Key', [initiator: initiatorEmail])
额外排查技巧
如果不确定用户对象的邮箱属性名,可以打印所有属性来确认:
initiatorUser.properties.each { key, value -> loggerApi.info("属性名: $key, 值: $value") }
内容的提问来源于stack exchange,提问作者Tijs Bijnens
相关产品推荐
相关产品推荐

