上一篇内容是通过Process Builder和Approval Processes实现锁定记录的功能,有的时候,往往锁定一条记录需要很多的限制条件,如果通过Approval Processes的条件判断写起来可能很麻烦,有些逻辑通过Apex写起来很容易,此篇内容为通过Process Builder 和Apex代码实现锁定记录。

需求:对Opportunity表进行判断是否加锁或者解锁。当Delivery/Installation Status这一项的值为'Completed'情况下加锁,为其他的值情况下,如果原来记录加锁,则解锁。

一.获取允许在apex中使用Lock 和UnLock记录的权限:Setup->Build->Create->Workflow&Approvals->Process Automation Settings。点进去将Enable record locking and unlocking in Apex这一项选中。

二.Apex代码实现加锁解锁

写代码之前我们需要先了解一些基础知识。当我们使用Process Builder选择Action为Apex的时候,我们需要选择相关Action执行的类,此类中的方法必须要是InvocableMethod的一个方法,即需要添加@InvocableMethod注解。一个类中仅允许有一个此注解的方法。

加锁的类如下所示:

 public class RecordLockController {
@InvocableMethod(label='Lock Opportunities' description='Lock opportunities and return the record ids')
public static List<Id> lockRecord(List<Id> opportunityIds) {
system.debug('=========opportunityIds=======' + opportunityIds);
system.debug('---------userName-------' + UserInfo.getUserName());
List<ID> alreadyLockedList = new List<ID>();
Map<Id,Boolean> isLockedMap = Approval.isLocked(opportunityIds);
for(Id currentOpportunityId : opportunityIds) {
Boolean isCurrentOpportunityLocked = isLockedMap.get(currentOpportunityId) == null ? false : isLockedMap.get(currentOpportunityId);
if(!isCurrentOpportunityLocked) {
Approval.LockResult lockResult = Approval.lock(currentOpportunityId);
if(lockResult.isSuccess()) {
alreadyLockedList.add(currentOpportunityId);
} else {
for(Database.Error error : lockResult.getErrors()) {
System.debug('error message : ' + error.getMessage());
}
}
}
}
system.debug(alreadyLockedList);
return alreadyLockedList;
} }

解锁的类如下所示

 public class UnLockRecordController {
@InvocableMethod(label='UnLock Opportunities' description='UnLock Opportunities and return the record ids')
public static List<ID> unlockRecords(List<ID> opportunityIds) {
system.debug('=========opportunityIds=======' + opportunityIds);
system.debug('---------userName-------' + UserInfo.getUserName());
List<ID> alreadyUnLockedList = new List<ID>();
Map<Id,Boolean> isLockedMap = Approval.isLocked(opportunityIds);
for(Id currentOpportunityId : opportunityIds) {
Boolean isCurrentOpportunityLocked = isLockedMap.get(currentOpportunityId) == null ? false : isLockedMap.get(currentOpportunityId);
if(isCurrentOpportunityLocked) {
Approval.UnLockResult unLockResult = Approval.unlock(currentOpportunityId);
if(unLockResult.isSuccess()) {
alreadyUnLockedList.add(currentOpportunityId);
} else {
for(Database.Error error : unLockResult.getErrors()) {
System.debug('error message : ' + error.getMessage());
}
}
}
}
system.debug(alreadyUnLockedList);
return alreadyUnLockedList;
}
}

三.设置Process Builder

1.Setup->Build->Create->Workflow&Approvals->Process Builder.点击进入后选择右上方的new

2.设置相关信息名称

3.选择要操作的Object,这里选择Opportunity

4.设置锁定的条件

5.设置加锁条件所走的Action,我们在Action Type选择Apex代码,并选择相关操作的类,并且要传递参数,程序中传的是ID,这里我们选择Opportunity的ID

6.在FALSE下添加解锁条件

7.添加解锁的Action,选择Apex,选择执行此Action的Apex Class,添加参数,点击save以后点击右上方activate将其激活。

总结:此篇内容仅仅通过很简单的业务逻辑进行加锁解锁,如果业务逻辑复杂,可以自行添加,如果内容有不对的地方欢迎指正,如果有不懂的地方欢迎留言。

如果想通过Permission Set来判断是否可以加锁解锁,也可以设置一个自定义的button,button调用apex代码,代码中通过permission set来判断是否拥有加锁解锁权限,如果拥有此权限则可以通过Approval的lock或者unlock方法进行操作。

salesforce 零基础学习(三十六)通过Process Builder以及Apex代码实现锁定记录( Lock Record)的更多相关文章

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

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

  2. salesforce零基础学习(九十六)Platform Event浅谈

    本篇参考:https://developer.salesforce.com/blogs/2018/07/which-streaming-event-do-i-use.html https://trai ...

  3. salesforce零基础学习(九十六)项目中的零碎知识点小总结(四)

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.216.0.apexcode.meta/apexcode/apex_classes_ke ...

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

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

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

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

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

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

  7. salesforce 零基础学习(六十八)http callout test class写法

    此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...

  8. salesforce 零基础学习(三十五) 通过Process Builder和Approval Processes锁定记录(Lock Record)

    有的时候我们可能有这样的需求,当某个字段为特定的值情况下,便锁定此条记录,仅允许Profile为System Admin的用户修改或者解锁,其他的用户只能查看此条记录,不能修改此条记录,这种情况下我们 ...

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

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

随机推荐

  1. Field 'id' doesn't have a default value(jdbc连接错误)

    JDBC 连接错误: 编写数据库连接增添数据时,出现以下错误: error : java.sql.SQLException: Field 'id' doesn't have a default val ...

  2. HTML5 Web Worker的使用

    Web Workers 是 HTML5 提供的一个javascript多线程解决方案,我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面. 一:如何使用Worker Web Wo ...

  3. ASP.NET使用ConfigurationSection在Web.Config创建自定义配置节集合

    核心代码 using System; using System.Data; using System.Configuration; using System.Web; using System.Web ...

  4. Devexpress 汉化

    DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.对于较老的版本(例如之前项目中遇到的dev9),对于汉化(应该说本地化Localization)支持 ...

  5. js call apply

    参考文章:https://www.zhihu.com/question/20289071 引用:call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是 ...

  6. Android开机启动Activity或者Service方法

    本文出自 “Bill_Hoo专栏” 博客,请务必保留此出处http://billhoo.blog.51cto.com/2337751/761230 这段时间在做Android的基础开发,现在有一需求是 ...

  7. jQqery EasyUI dategrid行中多列数据的可编辑操作

    最近的项目中需要在前台dategrid列表中直接修改某些列的数据,并且修改后的数据需要不通过后台而自动更新在列表中. 带着这一问题开始寻找实现的思路,首先想到的就是去jQqery EasyUI官网找例 ...

  8. iOS开发之AppIcon及LaunchScreen设置

    一.AppIcon设置 具体设置步骤如下图: 二.LaunchScreen设置与停留时间设置 具体设置步骤如下图: 通过程序可以增加背景的停留时间:

  9. uva 11357 Matches

    // uva 11357 Matches // // 题目大意: // // 给你n个火柴,用这n个火柴能表示的非负数有多少个,不能含有前导零 // // 解题思路: // // f[i] 表示正好用 ...

  10. 一步一步安装hive

    安装hive 1.下载hive-0.11.0.tar.gz,解压; 2.下载mysql-connector-java-5.1.29-bin.jar并放到hive/lib/下: 3.配置hive/con ...