zoukankan      html  css  js  c++  java
  • salesforce 零基础学习(四十五)Approval Lock & UnLock相关注意事项

    我们都知道,当一条记录进入审批流程以后会自动加锁,apex提供Approval类的lock和unlock方法可以让我们使用代码对记录进行加锁和解锁。

    项目中遇到一个需求,需要当某种情况下对记录进行先解锁,然后update相关数据,然后再加锁。此种方式不影响审批流程。

    主要大概代码如下所示

     1 if(Approval.isLocked(xxApproval)) {
     2       Approval.UnlockResult ur = Approval.unlock(xxApproval.Id);
     3       if (ur.isSuccess()) { // Operation was successful, so get the ID of the record that was processed 
     4          System.debug('Successfully unlocked  with ID: ' + ur.getId());
     5       } else {
     6          for(Database.Error err : ur.getErrors()) { 
     7              System.debug('The following error has occurred.'); 
     8              System.debug('=============xxxx:' + err.getStatusCode() + ': ' + err.getMessage());
     9          }
    10       }
    11  }

    这段代码写完以后,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吧。篇中有错误的地方欢迎指正,有问题的欢迎留言。

  • 相关阅读:
    版本回退
    时光机穿梭
    创建版本库
    安装Git
    Git简介
    Nexus私服安装
    eclipse中创建MAVEN-web项目
    AsyncTask的使用
    在子线程中更新UI,只能使用Handler
    使用VideoView播放视频
  • 原文地址:https://www.cnblogs.com/zero-zyq/p/5872229.html
Copyright © 2011-2022 走看看