salesforce 零基础学习(四十五)Approval Lock & UnLock相关注意事项
我们都知道,当一条记录进入审批流程以后会自动加锁,apex提供Approval类的lock和unlock方法可以让我们使用代码对记录进行加锁和解锁。
项目中遇到一个需求,需要当某种情况下对记录进行先解锁,然后update相关数据,然后再加锁。此种方式不影响审批流程。
主要大概代码如下所示
if(Approval.isLocked(xxApproval)) {
Approval.UnlockResult ur = Approval.unlock(xxApproval.Id);
if (ur.isSuccess()) { // Operation was successful, so get the ID of the record that was processed
System.debug('Successfully unlocked with ID: ' + ur.getId());
} else {
for(Database.Error err : ur.getErrors()) {
System.debug('The following error has occurred.');
System.debug('=============xxxx:' + err.getStatusCode() + ': ' + err.getMessage());
}
}
}
这段代码写完以后,xxApproval这条记录理论上也就解锁了,于是我自信满满的开始跑业务,跑到了这块方法的时候,第一个error message显示了:
System.UnexpectedException: Apex approval lock/unlock api preference not enabled.
此种问题原因是因为在salesforce中没有配置允许使用apex代码对记录进行加锁,解锁。设置如下:
Setup->Build->Create->Workflow & Approvals->Process Automation Settings。将Enable record locking and unlocking in Apex这一项checkbox设置为true。
修改完这个配置以后,又自信满满的开始跑业务,跑到了这块方法的时候,第二个error message显示了:
System.UnexpectedException: null
当时很纳闷为什么会出现null这个问题,因为我的xxApproval.Id通过追踪以后发现并不是null,那么只有一种可能,没有Approval.unlock方法,额,亦或是当前api version没有此方法,然后看一下这个类的api version,调成35.0,因为Approval.unlock和lock方法貌似是api 35以后才有的方法,然后保存。
这次心还是有点忐忑的继续跑这块,好在成功了,写下此篇博客,记录一下,以防以后还出现此种逗逼却又耗时的事情,有出现此种问题的小伙伴可以参照此种问题修改。
总结:使用某个类或者某个类的某个方法时,需要了解此类或者此方法支持的api版本是多少,如果项目是以前的,api版本通常不会高,有些方法不支持,这个时候不要怀疑自己的代码能力,怀疑一下你使用的api version吧。篇中有错误的地方欢迎指正,有问题的欢迎留言。
salesforce 零基础学习(四十五)Approval Lock & UnLock相关注意事项的更多相关文章
- salesforce 零基础学习(十九)Permission sets 讲解及设置
Permission sets以及Profile是常见的设置访问权限的方式. Profile规则为'who see what'.通过Profile可以将一类的用户设置相同的访问权限.对于有着相同Pro ...
- salesforce 零基础学习(十八)WorkFlow介绍及用法
说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow. 当你分配许多任务,定期发送电子邮件,记录修改时,可以通过自动配置workflow来完成以上 ...
- salesforce 零基础学习(十六)Validation Rules & Date/time
上一篇介绍的内容为Formula,其中的Date/time部分未指出,此篇主要介绍Date/time部分以及Validation rules. 本篇参考PDF: Date/time:https://r ...
- salesforce零基础学习(九十五)lightning out
随着salesforce对lightning的推进,越来越多的项目基于lightning开发,导致很多小伙伴可能都并不了解classic或者认为不需要用到classic直接就开始了lightning的 ...
- salesforce零基础学习(一百一十)list button实现的一些有趣事情
本篇参考: salesforce零基础学习(九十五)lightning out https://developer.salesforce.com/docs/component-library/docu ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- salesforce零基础学习(八十)使用autoComplete 输入内容自动联想结果以及去重实现
项目中,我们有时候会需要实现自动联想功能,比如我们想输入用户或者联系人名称,去联想出系统中有的相关的用户和联系人,当点击以后获取相关的邮箱或者其他信息等等.这种情况下可以使用jquery ui中的au ...
- salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件
在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...
- salesforce零基础学习(一百零五)Change Data Capture
本篇参考: https://developer.salesforce.com/docs/atlas.en-us.232.0.api_streaming.meta/api_streaming/using ...
随机推荐
- 让mysql不能为空的字段为空时也能插入
第一步: 在mysql安装目录中找到my.ini将: #sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTIT ...
- 【原】iOS学习之应用之间的操作
关于应用之间的相互操作,小编一直觉得非常高大上,在一次面试中被面试官一顿暴虐,今天小编就决定学习一下!经过一顿度娘,找到一些博客,不过都比较凌乱,我就打算自己整理一下! 首先要说的是每一个APP都可以 ...
- jQuery Ajax请求(关于火狐下SyntaxError: missing ] after element list ajax返回json,var json = eval("("+data+")"); 报错)
$.ajax({ contentType: "application/x-www-form-urlencoded;charset=UTF-8" , type: &quo ...
- 【BZOJ1911】[Apio2010]特别行动队 斜率优化DP
想了好久啊....——黑字为第一次更新.——这里是第二次更新,维护上下凸包据题而论,第一种方法是化式子的方法,需要好的化式子的方法,第二种是偏向几何,十分好想,纯正的维护凸包的方法,推荐. 用了我感觉 ...
- Python之路Day17-jQuery
本节内容: jQuery 参考:http://jquery.cuishifeng.cn/ 模块 <==>类库 Dom/Bom/JavaScript的类库 版本:1.x 1.12 2. ...
- Swift小练习-引导页
任何一门语言,只要长期不用就会忘掉,得时不时的敲敲小项目,练练手; let scrollViewBG = UIScrollView.init(frame: SLScreenRect) let imag ...
- *HDU1848 博弈
Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- ANT_HOME is set incorrectly or ant could not be located .Please set ANT_HOME.
今天配置ant,奶奶的老是报错. 因为环境变量 ANT_HOME 和 JAVA_HOME 设置值不能有“;” ,把分号去掉即可成功了. 神奇!
- 浅谈C#中常见的委托<Func,Action,Predicate>(转)
一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的. 关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微,尤其是张子阳的那一篇.我就不 ...
- Git ignore UserInterfaceState.xcuserstate
1. 退出xcdoe, 打开终端(Terminal),进入到你的项目目录下 2. 在终端键入 git rm --cached [YourProjectName].xcodeproj/project. ...