我有一个包含三个步骤的审批流程,所有步骤都设置为Assigned Approver = Manually Chosen。当用户提交记录以供批准时,我想让Apex代码确定三个批准者是谁。但是,我没有看到挂钩批准请求提交的方法。
如果我使用Approval.process()
向Apex提交批准,我可以使用ProcessSubmitRequest.setNextApproverIds()
设置初始(仅限初始)批准者。此调用使您相信您可以指定多个批准者,因为它需要一个Ids数组,但该数组只能有1个元素,否则运行时会发生错误。
一旦我知道第一个批准者的回复是什么,我就可以使用Apex提交她的回复,并再次通过将ProcessWorkitemRequest
个实例传递给Approval.process()
来设置下一个批准者。这里一个重要的注意事项是批准者不得通过标准UI批准。相反,他们必须做一些调用Apex代码的事情,以便我们可以设置下一个批准的对象。可以使用自动查询对象上的触发器或自定义按钮+ VF页面来调用Apex。
我的主要问题是,如何确保用户不使用标准批准按钮?它们出现在Approvals相关列表和salesforce主屏幕上。它也可能在其他地方。同样,如果他们使用标准的提交和批准按钮,我没有任何方法可以设置下一个审批者。
答案 0 :(得分:3)
我们一段时间遇到了类似的问题,并通过为某些用户创建自定义查找字段来解决它。例如,如果我们想要将批准请求路由到Director,然后是VP,我们将Director__c和MarketVP__c字段添加到对象。通过在提交请求时爬上角色层次结构,这些字段在代码中填充。然后,我们的审批流程的步骤选择受让人将基于这些字段中的值(第一步将分配给相关用户:Director,第二步将分配给相关用户:市场副总裁等)。
为了解决标准批准按钮问题(我们有其他原因隐藏它),我们只是从他们的主页布局中隐藏它并构建我们自己的VF页面并将其包含在自定义主页组件中。此组件用作收件箱,其中包含指向待用户批准的任何记录的链接。所有用户与批准对象的交互都通过其他具有自己的批准和拒绝按钮的VF页面进行处理。我不知道您提交审批流程的对象是否使用VF页面,因此这可能不适合您的情况。
对于不应该需要的东西进行大量定制,我知道。可能不是你正在寻找的答案,但希望这是一些值得思考的东西。