salesforce零基礎學習(一百零一)如何瞭解你的代碼得運行上下文

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

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

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

背景:不瞭解個人人若是隻看過個人博客,會覺得我是一個發亮稀少,或者表情嚴肅的程序狗。可是其實和我作過項目的基本都知道,我是一個年紀輕輕騷話不斷的小逗比。以此爲背景,前幾天同事問我說岳奇,我有一段代碼是公用的邏輯,可是想在trigger和batch都共用到,兩個邏輯差很少,區別就是那麼一小點點。怎樣才能判斷當前這個方法運行的上下文是在trigger裏面仍是batch裏面啊。此時的我就和他說:哦個人上帝,先必應,在谷歌,找不到解決方案再找我,我就能夠和你很自信的說這個實現不了了,搞定~~~固然,玩笑歸玩笑,本着朋友的信任,基本上朋友問的問題我都知無不言,因此我說,以我幹salesforce 開發5年的經驗來看,這個確實好像實現不了,只能告訴你若是想知道是否batch運行能夠System.isBatchable()。我對apex的概念仍是有點落後的,以前apex develop guide沒事確實也掃過一遍,當時掃的時候仍是V36.0,如今都已經看不到了。安全

 這幾天對象出差,在家呆着刷劇也無聊,尋思很久沒有看最新release的開發文檔了,掃一掃哪些好用的新功能,混個臉熟。結果我發現前幾天的回覆是多麼的無知,特此寫下此篇,告誡本身不要太自負,溫故而知新,說之前先多查查,多肯定。ide

一. Quiddity學習

Quiddity是salesforce winter21新加的枚舉類,apex若是使用,api version須要50及以上。咱們經過上面的鏈接能夠看到這個枚舉類中包含的枚舉元素。元素不少,找幾個單獨說一下:ui

  • 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便可。具體以下:this

//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的執行結果。spa

總結:本篇原本還想介紹一下Security的stripInaccessible方法實現sf針對數據訪問權限的安全化策略,後來過了一遍新的文檔,發現仍是有好多更新的內容沒有查看,做罷了越更越多的特性點,仍是推薦我的能夠本身養成自我學習的習慣。篇中有錯誤歡迎指出,有不懂歡迎留言。自信是好東西,前提是有支撐着你自信的能力,我此次很慚愧。技術不斷的更新變化,擁抱變化,不斷努力。共勉。3d

相關文章
相關標籤/搜索