本篇参考:https://developer.salesforce.com/docs/atlas.en-us.228.0.apexcode.meta/apexcode/apex_enum_System_Quiddity.htm

https://developer.salesforce.com/blogs/2021/01/you-shall-not-pass-quiddity-for-secure-salesforce-development.html

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_with_security_stripInaccessible.htm

背景:不了解我的人如果只看过我的博客,会以为我是一个发亮稀少,或者表情严肃的程序狗。但是其实和我做过项目的基本都知道,我是一个年纪轻轻骚话不断的小逗比。以此为背景,前几天同事问我说岳奇,我有一段代码是公用的逻辑,但是想在trigger和batch都共用到,两个逻辑差不多,区别就是那么一小点点。怎样才能判断当前这个方法运行的上下文是在trigger里面还是batch里面啊。此时的我就和他说:哦我的上帝,先必应,在谷歌,找不到解决方案再找我,我就可以和你很自信的说这个实现不了了,搞定~~~当然,玩笑归玩笑,本着朋友的信任,基本上朋友问的问题我都知无不言,所以我说,以我干salesforce 开发5年的经验来看,这个确实好像实现不了,只能告诉你如果想知道是否batch运行可以System.isBatchable()。我对apex的概念还是有点落后的,之前apex develop guide没事确实也扫过一遍,当时扫的时候还是V36.0,现在都已经看不到了。

这几天对象出差,在家呆着刷剧也无聊,寻思好久没有看最新release的开发文档了,扫一扫哪些好用的新功能,混个脸熟。结果我发现前几天的回复是多么的无知,特此写下此篇,告诫自己不要太自负,温故而知新,说以前先多查查,多确定。

一. Quiddity

Quiddity是salesforce winter21新加的枚举类,apex如果使用,api version需要50及以上。我们通过上面的连接可以看到这个枚举类中包含的枚举元素。元素很多,找几个单独说一下:

  • ANONYMOUS: 匿名块或者develop console执行的代码,运行时环境将会是 ANONYMOUS;
  • AURA: 通过aura或者lwc调用的代码,运行时环境将会是AURA,需要注意的是,目前至少在API 51的版本上,无法区分当前运行的是aura还是lwc,以后有可能会改善吧;
  • BATCH_APEX:当前运行代码环境是batch job场景;
  • FUTURE:当前运行代码环境是feature场景;
  • QUICK_ACTION:当前运行的代码环境是 quick action;
  • REMOTE_ACTION:通常用于classic场景的 remote action;
  • SYNCHRONOUS:通常用于trigger等代码同步运行的场景;
  • VF: 通过VF page去触发的场景。

还有很多其他的枚举元素用于不同的场景,感兴趣的自行查看,那么如何在apex中获取当前的枚举呢,更简单了。只需要通过 Request获取当前的请求,然后调getQuiddity即可。具体如下:

//Get info about the current request
Request reqInfo = Request.getCurrent(); //Get the identifier for this request, which is universally unique
//Same as requestId in splunk or REQUEST_ID in event monitoring
String currentRequestId = reqInfo.getRequestId(); //Enum representing how Apex is running. e.g. BULK_API vs LIGHTNING
Quiddity currentType = reqInfo.getQuiddity();
//Use this with a switch statement,
//instead of checking System.isFuture() || System.isQueueable() || ...

通过上面的博客链接,我们可以对这个功能做更好的拓展,做一个功能阀,保证我们的代码只在部分场景运行。可扩展性很多,大家可以基于自身的业务去进行使用。下面截图是上述相似代码trigger上下文的apex class的执行结果。

总结:本篇本来还想介绍一下Security的stripInaccessible方法实现sf针对数据访问权限的安全化策略,后来过了一遍新的文档,发现还是有好多更新的内容没有查看,作罢了越更越多的特性点,还是推荐个人可以自己养成自我学习的习惯。篇中有错误欢迎指出,有不懂欢迎留言。自信是好东西,前提是有支撑着你自信的能力,我这次很惭愧。技术不断的更新变化,拥抱变化,不断努力。共勉。

salesforce零基础学习(一百零一)如何了解你的代码得运行上下文的更多相关文章

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

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

  2. salesforce零基础学习(一百一十三)Trigger中获取IP地址的过程

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

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

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

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

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

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

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

  6. salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见

    项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...

  7. salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值

    注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-fr ...

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

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

  9. salesforce lightning零基础学习(十五) 公用组件之 获取表字段的Picklist(多语言)

    此篇参考:salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type) 我们在lightning中在前台会经常碰到获取pi ...

  10. 【转】【Salesforce】salesforce 零基础学习(十七)Trigger用法

    看本篇之前可以相应阅读以下Trigger相关文章: 1.https://developer.salesforce.com/page/Trigger_Frameworks_and_Apex_Trigge ...

随机推荐

  1. CodeForces - 612D 思维

    题意: 给你n个线段和一个整数k,你需要找出来所有能被任意k条线段同时覆盖的区间个数的最小值,并按从左到右的顺序输出每个区间. 题解: 对于题目输入的n个线段的左端点L,右端点R,把它们分开放在结构体 ...

  2. servlet接口实现类HttpServlet以及开发中一些细节

    1. 但是eclipse不会帮我们改web.xml配置文件,所以我们也要在web.xml文件里面手动改 2. 这个样子的话你在用浏览器访问的时候链接的映射就改成了t_day05,这个主要用于你建立完一 ...

  3. Codeforces Round #654 (Div. 2) C. A Cookie for You (思维)

    题意:有\(a\)个蛋糕,\(b\)个巧克力,第一类人有\(n\)个,总是吃多的东西(若\(a>b\),吃蛋糕,否则吃巧克力),第二类人有\(m\)个,总是吃少的,可以随便调整这两类人吃的顺序, ...

  4. Zabbix 自动发现 & 自动注册

    自动发现 Zabbix 为用户提供了高效灵活的网络自动发现功能,有以下优点: 加快 Zabbix 部署 简化管理 无需过多管理,也能在快速变化的环境中使用 Zabbix Zabbix 网络发现基于以下 ...

  5. 在4.0框架下使用Sqlite数据库

    在4.0框架下使用Sqlite数据库出现"混合模式程序集是针对"v2.0.50727"版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集. ...

  6. Go语言中时间轮的实现

    最近在工作中有一个需求,简单来说就是在短时间内会创建上百万个定时任务,创建的时候会将对应的金额相加,防止超售,需要过半个小时再去核对数据,如果数据对不上就需要将加上的金额再减回去. 这个需求如果用Go ...

  7. codefoeces 864B

    B. Polycarp and Letters time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  8. 解决.dll类等文件丢失或出错

    简单暴力: 去官网下载WIN10 SDK 并安装, 将本机的DLL类文件重新刷新一遍. https://developer.microsoft.com/en-US/windows/downloads/ ...

  9. 十三香 & 香料

    十三香 & 香料 十三香原料组成不完全一致, 但有一些香料却是大家都会采用的: 草蔻.砂仁.肉豆蔻.肉桂.丁香. 花椒.大料.小茴香.木香.白芷. 山萘.良姜和姜 王守义十三香 http:// ...

  10. js & anti craw & crawler spam

    js & anti craw & crawler spam demo & X-Sign , function(t, e, n) { "use strict" ...