我们都知道,当一条记录进入审批流程以后会自动加锁,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相关注意事项的更多相关文章

  1. salesforce 零基础学习(十九)Permission sets 讲解及设置

    Permission sets以及Profile是常见的设置访问权限的方式. Profile规则为'who see what'.通过Profile可以将一类的用户设置相同的访问权限.对于有着相同Pro ...

  2. salesforce 零基础学习(十八)WorkFlow介绍及用法

    说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow. 当你分配许多任务,定期发送电子邮件,记录修改时,可以通过自动配置workflow来完成以上 ...

  3. salesforce 零基础学习(十六)Validation Rules & Date/time

    上一篇介绍的内容为Formula,其中的Date/time部分未指出,此篇主要介绍Date/time部分以及Validation rules. 本篇参考PDF: Date/time:https://r ...

  4. salesforce零基础学习(九十五)lightning out

    随着salesforce对lightning的推进,越来越多的项目基于lightning开发,导致很多小伙伴可能都并不了解classic或者认为不需要用到classic直接就开始了lightning的 ...

  5. salesforce零基础学习(一百一十)list button实现的一些有趣事情

    本篇参考: salesforce零基础学习(九十五)lightning out https://developer.salesforce.com/docs/component-library/docu ...

  6. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  7. salesforce零基础学习(八十)使用autoComplete 输入内容自动联想结果以及去重实现

    项目中,我们有时候会需要实现自动联想功能,比如我们想输入用户或者联系人名称,去联想出系统中有的相关的用户和联系人,当点击以后获取相关的邮箱或者其他信息等等.这种情况下可以使用jquery ui中的au ...

  8. salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件

    在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...

  9. salesforce零基础学习(一百零五)Change Data Capture

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.232.0.api_streaming.meta/api_streaming/using ...

随机推荐

  1. 老生长谈的$.extend()方法

    jq的extend()是jq插件扩展很重要的部分,到这里证明是可以自己在jq的基础上,分为两种方法去扩展或开发,为jq本身添加一个方法,可以理解成扩展静态方法和自定义方法. 今天有看到一篇帖子,对这部 ...

  2. Android下的屏幕适配

    1080 100dp 300px720 100dp 200px 300px 1080px 比例是300/1080=0.277200px 720px

  3. From cls答辩

    我没有想过有一天会因为wjmzbmr而开一篇. 因为看到了cls答辩的链接而震撼或是感动. 可能也跟最近身心比较疲惫有关...容易产生这样那样的感触... cls可能已不是我们这代OIER所能膜到的了 ...

  4. centos yum换阿里云源

    阿里云Linux安装软件镜像源 阿里云是最近新出的一个镜像源.得益与阿里云的高速发展,这么大的需求,肯定会推出自己的镜像源. 阿里云Linux安装镜像源地址:http://mirrors.aliyun ...

  5. JavaScript中严格模式"use strict";需注意的几个雷区:

    1.with语句会抛错误 2.未声明的变量被赋值会报错 3.arguments在严格模式下变为静态,传入的参数与arguments无关系 4.delete会报错 5.对象的重复属性名会报错 6.禁止八 ...

  6. docker入门-学习笔记

    docker可以类比成window下的VMware或者virtualbox软件.docker有两个基本的概念:容器(container)和镜像(image),分别对应为VMware中的系统镜像和系统镜 ...

  7. 洛谷 P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers Label:ExWater

    题目描述 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少.在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人.然而,在任何一群朋友中 ...

  8. Spark Application的调度算法

    要想明白spark application调度机制,需要回答一下几个问题: 1.谁来调度? 2.为谁调度? 3.调度什么? 3.何时调度? 4.调度算法 前四个问题可以用如下一句话里来回答:每当集群资 ...

  9. BZOJ 2048 题解

    2048: [2009国家集训队]书堆 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1076  Solved: 499[Submit][Status ...

  10. 【转】Microsoft .NET Framework 3.5 sp1 安装速度慢,快速离线安装的方法

    1.到官网上下载3.5SP1的完整安装包.2.下载完成后,命令行下运行dotnetfx35.exe/x,解压到一个目录(如D:"),此时会生成一个D:"wcu目录3.进入解压目录下 ...