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

本篇参考: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,现在都已经看不到了。

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

 这几天对象出差,在家呆着刷剧也无聊,寻思好久没有看最新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() || ...

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyzdx.html