Control Finish Behavior & Resume Paused Interviews

DEX475 - Flows

📄 第 345 页 🎬 视频课程

课程章节介绍

好,那我们来谈谈在使用 Lightning Web Components 控制流程时,一个很实用的技巧——怎么处理流程的结束状态,以及怎么恢复一个暂停中的面试。 默认情况下,如果你没有做任何设置,当流程运行结束时,它会自动开启一个全新的面试。这不一定是我们想要的,比如我们想在流程完成后跳转到刚刚创建的那条记录,或者只是显示一条消息。所以,我们需要用一点自定义逻辑来控制。 我们可以使用 flow 组件上的 `onstatuschange` 事件处理程序,来监听流程的状态变化。当状态变成 `FINISHED` 时,我们就可以执行自己的代码了。一个很常见的例子就是导航:从流程的输出变量里提取出新记录的 ID,然后利用 NavigationMixin 重定向到该记录的详情页,这样用户完成流程就能直接看到结果。 另外,如果你用的是自动启动的流,也就是 `auto-start` 的那种,还可能会遇到一个特殊状态叫 `FINISHED_SCREEN`。记得也要处理它,否则屏幕可能会停在那里没反应。 接着是暂停面试的恢复。如果你想帮用户恢复他们之前没填完的流程,可以在组件上设置 `flow-interview-id` 属性,传入那个暂停面试的 ID。但你得先找到这个 ID。怎么做呢?在 Apex 控制器里,我们可以去查 `FlowInterview` 对象,按照当前的用户和流名称来筛选,看看有没有暂停状态的面试记录。如果有,就返回第一个 ID;如果没有,就返回空。然后通过一个 wire 连线把这个数据拿到前端。 在 JavaScript 里,我们可以根据 wire 返回的结果来做分支处理。如果数据为空,或者出了错,说明没有可恢复的面试,那么我们就设置 `flow-api-name` 属性,告诉组件:“开始一个新面试吧”。如果拿到一个暂停面试的 ID,我们就设置 `pausedInterviewId` 变量,并把它绑定到组件的 `flow-interview-id` 属性上,这样就能恢复面试。 这里有个关键的规则一定要记住:,你不能同时设置 `flow-api-name` 和 `flow-interview-id`,,它们两个是互斥的。所以我们才会在模板里用条件判断,要么显示一个,要么显示另一个。这样就能保证流程组件只做一件事——要么开始新的,要么恢复旧的。 通过这样的设计,你就可以很灵活地控制流程的用户体验,既能让用户接着上次的继续填,也能完成后快速跳转到需要的地方。

关键词

LWC Lightning Web Components Salesforce