上一篇内容是通过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. struts1拦截器

    Struts2已经发布一段时间了,这个版本较struts1.x版本有了很大变化,其中一个就是增加了拦截器功能.这是个非常有用的功能,可是struts1.x却没有.     其实,struts1.x可以 ...

  2. css3 自定义动画(1)

    <style> /*@-webkit-keyframes 动画名称 {} 用时:-webkit-animation:时间 动画名称; */ /* @-webkit-keyframes mo ...

  3. VS2010 网页错误

    VS2010向导添加消息处理时,弹出以上错误,原因之一为: 类内没有定义IDD的宏

  4. ios xcode 下 报出 ”xx“is missing from working copy 的问题

    在项目中提交过svn后,再在本机上删除不用的图片资源后,build后会有   ”xx“is missing from working copy  的警告.在网上找了些资料后,总结下. 直接在终端下用s ...

  5. CrossApp入门简介

    来自9miao社区的CrossApp号称可以极大的简化移动应用的开发,因为开源的时间不长,有效的资料不多. 官方网站: http://crossapp.9miao.com/ 环境搭建说明:http:/ ...

  6. CMM能力成熟度模型

    CMM把软件企业的过程管理能力划分为5个等级: 1  .初始级:个别的.混乱无序的过程,软件缺乏定义,项目的成功严重依赖于某几个关键人员的努力.软件质量由个人的开发经验来保障. 2.可重复级 实施了基 ...

  7. HDOJ 4749 Parade Show

    说实在的在比赛时看错了题意,一直对最后一段的描述不是很清楚.闲话少说: 题意:给一个主串,再一个副串,问主串中有多少个子串和副串的的规律相同,即相邻的相等大于小于,用过的就不能再用了. #includ ...

  8. 本地推送UILocalNotification

    //本地推送---无需网络,由本地发起 UILocalNotification *localNotification = [[UILocalNotification alloc]init]; //设置 ...

  9. HTML5-布局的使用

    DIV布局: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...

  10. 【原创】.NET之我见

    最近在准备面试,自己也顺带巩固了下基础,加上自己对码农的一些理解都写在这里了,水平不行,欢迎吐槽 //.NET基础 1.Class 和struct 区别 类是一种“引用类型”.创建类的对象时,对象赋值 ...