使用Apex Flow跳转步骤时获取实例ID/子流程ID失败求助
修复Apex Flow跳转错误:设置SUBFLOW_ID并解决实例ID缺失问题
1. 启动Flow时捕获并存储实例ID
要解决这个错误,核心是在创建并启动Flow实例的流程中,把生成的Flow实例ID存入会话状态:
- Apex代码启动场景:
启动Flow后通过Flow.Interview.getId()获取实例ID,再写入会话:// 定义Flow输入参数(按需配置) Map<String, Object> flowInputs = new Map<String, Object>{ 'Your_Input_Variable' => 'Sample_Value' }; // 初始化并启动Flow Flow.Interview targetFlow = Flow.Interview.createInterview('Your_Flow_API_Name', flowInputs); targetFlow.start(); // 将实例ID存入会话 String flowInstanceId = targetFlow.getId(); ApexPages.currentPage().getSessionMap().put('SUBFLOW_ID', flowInstanceId); - Salesforce Flow启动子Flow场景:
在启动子Flow的元素中,勾选「存储子Flow实例ID」选项,将该变量的值写入会话状态(可通过Apex动作或Flow内置的会话变量设置实现)。
2. 跳转流程中读取SUBFLOW_ID并推进步骤
在负责跳转的流程里,先从会话读取SUBFLOW_ID,再定位Flow实例执行下一步:
// 从会话获取实例ID String flowInstanceId = (String)ApexPages.currentPage().getSessionMap().get('SUBFLOW_ID'); if (String.isNotBlank(flowInstanceId)) { // 获取已运行的Flow实例 Flow.Interview activeFlow = Flow.Interview.getInterview(flowInstanceId); // 推进到Flow的下一个步骤 activeFlow.next(); // 若实例ID有变更,更新会话中的值 ApexPages.currentPage().getSessionMap().put('SUBFLOW_ID', activeFlow.getId()); } else { throw new FlowException('会话中未设置SUBFLOW_ID,无法推进Flow步骤'); }
3. 常见排查点
- 确认Flow API名称拼写正确,启动逻辑未传入错误的Flow名称
- 检查会话变量作用域:跨页面跳转时,确保会话状态未被清空(Visualforce页面避免
cache="true",Apex中不要用transient修饰会话变量) - LWC集成场景:通过
lightning-flow组件的onstatuschange事件捕获实例ID,存入sessionStorage:handleFlowStatus(event) { if (event.detail.status === 'STARTED') { sessionStorage.setItem('SUBFLOW_ID', event.detail.interviewId); } }
错误根源
报错「Unable to get Flow Instance Id and or subflow Id to manage the step.」是因为推进Flow步骤的逻辑无法定位到当前运行的Flow实例——必须在启动Flow时持久化实例ID到SUBFLOW_ID,后续跳转才能找到对应的实例。
内容的提问来源于stack exchange,提问作者Chadmerdinger
相关产品推荐
相关产品推荐

