如何大規模地更新各 profile 對於某個 object 的 record type 的存取權限 How to mass update record type visibility for every profile?


情境說明

之前有一篇談到如何快速用 SOQL 撈出哪些 Profile / Permission Set 有權限對某特定 Object 做 Create/Read/Update/Delete

那篇的主題是針對 object record的 CRUD 在討論。但今天我們有另一個不同的面向要處理:如何大規模地查看或更新各 profile 對於某個 object 的 record type 的存取權限。

這又是一個獨立的設定了。不是 record 層級的設定,也不是 Field-Level Security 的設定。是 Record Type 的設定。

若只是要更動一兩個 profile 的 record type access permission 倒也不難,網頁上滑鼠點一點即可。但如果今天我們需要大模模更動呢?

例如我們有某一個既有的Opportunity Record Type,想要一次開給所有 Profile 都能有存取權限。或是反過來,想要讓僅一兩個 Profile 擁有存取權限,其它通通都不準看到。

難道我們要一個個點進每一個 Profile 去慢慢檢查、慢慢設定嗎?

此處提供一個沒那麼辛苦的解法。


解法概念

  1. 用 SFDX 下載 Profile and Record Type 的 XML 檔
  2. 用 Visual Studio Code 尋找、大量取代
  3. Deploy 回 Salesforce

解法細節

    第0步,把Visual Studio Code 和 SFDX 環境設定好。
  1. 用 SFDX 下載 Profile and Record Type 的 XML 檔
    1. 準備同時包含 Profile 和 RecordType的 XML
      package.xml
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <Package xmlns="http://soap.sforce.com/2006/04/metadata">
      <types>
      <members>*</members>
      <name>Profile</name>
      </types>
      <types>
      <members>*</members>
      <name>RecordType</name>
      </types>
      <version>55.0</version>
      </Package>
    2. Retrieve Source in Manifest from Org
  2. 用 Visual Studio Code 尋找、大量取代 <recordTypeVisibilities> tag
    (此圖範例為把 Opportunity 的 foo Record Type 打開)

    tag example:
    <recordTypeVisibilities>
    <default>false</default>
    <recordType>Opportunity.foo</recordType>
    <visible>false</visible>
    </recordTypeVisibilities>
  3. Deploy 回 Salesforce

留言

這個網誌中的熱門文章

Salesforce證照考試心得 (Administrator and Advanced Administrator)

ISC2 CC (Certified in Cybersecurity Certification) 考試心得