您位於此處:
歸檔 Apex—被遺忘權 (RTBF)
資料隱私權法規授予個人「被遺忘權」(RTBF),要求組織根據要求安全清除個人資料。封存 Apex 透過從「封存」應用程式中識別和刪除特定資料來實現合規性,確保完全移除,同時保留其他封存資料的完整性。
RTBF 篩選條件
若要處理 RTBF 要求,請指定適當的篩選條件。例如:
| 條件 | 範例 |
|---|---|
| 欄位名稱 | 員工識別碼 |
| 物件 | 連絡人 |
| 值 | 識別碼 123456789011121314 |
重要考量事項
- 提交限制為每天 10,000 個要求,且根記錄搜尋限制為 10,000 個。
- RTBF 刪除流程會延伸至階層內直接和間接相關的子系記錄。
- 重疊搜尋結果可能會將某些記錄標記為已在稽核檔案中刪除。
- 如果已達到搜尋結果限制,則 Apex 活動狀態會顯示具有此錯誤的
200狀態代碼。Request processed. Maximum search results reached. Refine your search or submit a new request. - 大多數標準 RTBF 要求都會在 30 分鐘內完成。
- 為獲得最佳結果,請鎖定根物件。
- 「物件」與「欄位名稱」篩選條件不區分大小寫。
- 封存不支援部分刪除。
已歸檔階層中子系記錄的 RTBF 行為
在子系記錄上執行 RTBF 要求時,要求會移除與其相關聯的整個已歸檔階層。
例如,如果您搜尋特定的「個案」記錄並提交「歸檔 RTBF」要求,則要求會移除「個案」及其相關聯的工作,以及其相關的「帳戶」根記錄。由於這些記錄已封存在一起,因此 RTBF 會刪除整個封存階層。
不過,如果「帳戶」已個別歸檔,則對「個案」記錄執行 RTBF 只會移除「個案」及其「工作」,但不會移除「帳戶」記錄。
RTBF 的運作方式
RTBF 流程會以非同步流程的形式執行,並遵循這些序列 API 呼叫。
- 資料識別—Apex 查詢封存,以找到符合指定篩選條件的所有記錄。
- 資料刪除—Apex 會將刪除要求傳送至「封存」,移除所有相符記錄。
流程完成時,RTBF 活動圖示會顯示在「封存主控台」的「活動」索引標籤下方。
RTBF 要求範例
一位前員工 Maria Johnson 提交了 RTBF 要求,要求刪除您系統中的所有個人資料。您的公司會歸檔員工記錄及其電子郵件通訊、客戶互動和專案指派。若要遵循 RTBF 要求,請使用此篩選條件。
| 物件 | 欄位名稱 | 值 |
|---|---|---|
| 連絡人 | 電子郵件 | Maria@own.com |
| 個案 | 員工識別碼 | 987654321 |
| 工作 | 指派對象 | Maria Johnson |
| 電子郵件 | 寄件者 | Maria@own.com |
| 文件 | 擁有者 | Maria Johnson |
此要求可確保完整移除 Maria 的資料,包括她的連絡人資訊、她參與的個案、指派給她的工作,以及所有與她連結的電子郵件和文件記錄。此流程有助於維持資料隱私權法規的合規性,同時確保完整且準確地刪除敏感資訊。
API 方法與回應處理
提交 RTBF 要求之前,建議您先在 Apex 資料查詢上執行查詢來驗證您的條件。
| 輸入 | 輸出 | 定義 |
|---|---|---|
ArchiverAccessorResponse |
|
來自「忘記 API」呼叫的回應。使用 getRTBFStatus 方法傳回追蹤要求狀態的 requestId。 |
Criteria(字串 sObjectName、字串 fieldName、字串 value) |
||
forgetArchivedRecords(list<Criteria>
inputFilters) |
ArchiverAccessorResponse |
公用方法會建立「要歸檔的忘記」要求,以及要刪除的條件清單。 |
getRTBFStatus(string requestId) |
包含所有已刪除資訊詳細資料的 CSV 報告。 | 可讓您追蹤 RTBF 要求的公用方法。 |
- 歸檔 Apex—執行 RTBF 要求
手動測試「封存 Apex」,並在「封存」應用程式中執行 RTBF 要求。 - 歸檔 Apex—RTBF 使用個案實例
在「封存」應用程式中使用 RTBF 的個案案例。 - 封存 Apex—在封存應用程式中匿名化 PII
在已歸檔記錄中將個人可識別資訊 (PII) 匿名化,而無須刪除記錄本身。匿名化會以無法復原的預留位置取代敏感值,以協助您遵循隱私權法規,同時保留「封存」應用程式的記錄結構。
歸檔 Apex—執行 RTBF 要求
手動測試「封存 Apex」,並在「封存」應用程式中執行 RTBF 要求。
- 按一下「設定」圖示。
- 選取「開發人員主控台」。
-
若要開啟主控台,請在 Windows 上按下
F12或Ctrl+Shift+I,或在 Mac 上按下Cmd+E。 -
在主控台中,執行此程式碼以建立條件清單、傳送 RTBF 要求,並從「封存」取得
requestId。SF_Archive.Criteria criteria1 = new SF_Archive.Criteria('Account', 'Name', 'example name'); list<SF_Archive.Criteria> lst = new list<SF_Archive.Criteria>(); lst.add(criteria1); SF_Archive.ArchiverAccessorResponse response = SF_Archive.ArchiverAccessor.forgetArchivedRecords(lst); Map<String, String> values = (Map<String, String>)JSON.deserialize(response.getBody(), Map<String, String>.class); String requestId = values.get('request_id'); system.debug(requestId); -
按一下「執行」。
要求隨即開始。完成時,
requestId會儲存在「執行記錄」中。
檢視 RTBF 要求的狀態
傳送 RTBF 要求後,您可以檢視要求的狀態。
- 在頁面右上方,按一下「設定」圖示。
- 選取「開發人員主控台」。
-
按下
Command + E。 -
使用 RTBF 要求的
requestId,執行此程式碼。SF_Archive.ArchiverAccessorResponse reportResponse = SF_Archive.ArchiverAccessor.getRTBFStatus(requestId); system.debug(reportResponse.getBody()); -
按一下「執行」。
狀態要求隨即開始。完成時,其中一個狀態會顯示在「執行記錄」中。
Request failed, please contact support.要求失敗且失敗。
Request handled, no matching results were found.:沒有任何符合指定條件的記錄。
Request is open. Scan is still in progress.要求仍在進行中。
當要求成功完成時,您會收到包含所有已刪除資訊詳細資料的 CSV 報告。
CSV 報告包含以下資訊。
| 欄位 | 描述 |
|---|---|
| 條件記錄 | 符合要求之刪除條件的記錄欄位。 |
| 條件記錄類型 | 要求的條件。 |
| 觸發刪除的相關 Salesforce 識別碼 | 表格中另一個記錄參照的列,也符合條件。 |
| Salesforce 識別碼 | 報告列中包含的記錄識別碼。 |
| 狀態 | 表示記錄是否遭到刪除。 |
歸檔 Apex—RTBF 使用個案實例
在「封存」應用程式中使用 RTBF 的個案案例。
情況 1:具有多個物件的 RTBF
Jane Doe 是 XYZ 銀行的客戶,過去 2 年她在該處擁有帳戶。最近,她決定想要根據一般資料保護規則 (GDPR) 執行其 RTBF。Jane 認為銀行保留其相關不必要的個人資料,並且想要將其從其記錄中刪除。
Jane 將其 RTBF 要求提交至 XYZ 銀行,並指定她想要清除的個人資料,其中可能包含帳戶資訊、交易歷程記錄,以及銀行持有的任何其他個人資料。銀行會繼續識別並找到 Jane 的個人資料。
| 條件 | 篩選 | 篩選 | 篩選 | 篩選 |
|---|---|---|---|---|
| 物件 | 帳戶 | Transaction_c | 個案 | 電子郵件 |
| 欄位名稱 | 名稱 | 交易使用者 | 客戶名稱 | 開始 |
| 值 | Jane Doe | Jane Doe | Jane Doe | Jane Doe |
RTBF 要求最多可包含 10 個個別物件。
結果:
「封存」會找到 1 個帳戶、2000 個交易、15 個個案作為根目錄,以及 30 封電子郵件。
情況 2:RTBF 單一物件
一家製藥公司發行試驗藥物 Eddy's Elixirs 來治療關節炎。然而,導致病患發生嚴重的不良反應。召回藥物後,該公司提交了 RTBF 要求,以移除與 Eddy 的 Elixirs 相關的所有公開記錄和數位內容。
| 條件 | 篩選 |
|---|---|
| 物件 | 個案 |
| 欄位名稱 | 藥物名稱 |
| 值 | Eddy 的 Elixir |
結果:
「封存」會尋找 1,000 個個案作為根目錄,以及 1,000 個在根目錄下封存為子系記錄的病患記錄。它會將其全部移除。
系統會在「歸檔主控台活動」索引標籤中建立一個「活動」,其中顯示 RTBF 圖示。
情況 3:找到超過 10,000 筆 RTBF 根記錄
名為 ConnectWorld 的熱門社交媒體平台一般使用者 Emily Jones 停用了她的帳戶,並要求根據資料保護法規執行其 RTBF。
| 物件 | 篩選 | 篩選 | 篩選 |
|---|---|---|---|
| 物件 | 使用者帳戶 | 連絡人 | 個案 |
| 欄位名稱 | 名稱 | 電話 | 相關識別碼 |
| 值 | Emily Jones 的帳戶識別碼 | Emily 的電話號碼 | Emily Jones 的帳戶識別碼 |
結果:
「封存」會尋找 20,000 個根個案記錄、300,000 個連絡人和 10,000 個個案作為根記錄,以及移除子系記錄時在根目錄下封存的 150,000 個連絡人。
系統會在「歸檔主控台活動」索引標籤中建立一個「活動」,其中顯示 RTBF 圖示。
getRTBFStatus 會傳回具有錯誤訊息「已處理要求」的狀態代碼 200。已達到的搜尋結果上限。限定搜尋或提交新要求以查看更多記錄」。
封存只能處理每個 RTBF Apex 要求最多 10,000 個根記錄。若要解決此錯誤,請再次執行查詢,以取回剩餘的記錄。
封存 Apex—在封存應用程式中匿名化 PII
在已歸檔記錄中將個人可識別資訊 (PII) 匿名化,而無須刪除記錄本身。匿名化會以無法復原的預留位置取代敏感值,以協助您遵循隱私權法規,同時保留「封存」應用程式的記錄結構。
匿名化又稱為遮罩,可協助您遵循隱私權要求,例如「被遺忘權」(RTBF)。此流程會對已歸檔記錄執行內嵌更新。不同於永久刪除資料的清除動作,匿名化會以一般文字取代特定的敏感值,例如 redacted@example.com。
匿名化運作方式
系統會使用物件中繼資料來偵測 PII 欄位,例如「名稱」、「電子郵件」、「電話」和「地址」。當您提交要求時,系統會以無法復原的預留位置遮蔽原始 PII 值。非 PII 資料 (例如記錄識別碼和時間戳記) 保持不變且可搜尋。
匿名化是全面的。當您將根記錄匿名化時,匿名化流程會自動串聯至相同已歸檔階層內的所有相關子系記錄。例如,匿名化「連絡人」記錄也會在該記錄的相關「工作」和「事件」中匿名化 PII。
重要考量事項
- 匿名化流程是永久的。匿名化後,您無法復原或檢視原始 PII 值。
- 您只能將記錄匿名化一次。如果您提交匿名化記錄的重複要求,則系統會忽略該記錄。
- 匿名化共用每個組織每天 10,000 個要求的標準「歸檔 RTBF」率限制。
- 您無法手動選取要匿名化的欄位。系統會根據「復原」演算法自動識別 PII 欄位。
- 您無法將合法持有的記錄匿名化。系統會自動排除目前在法律保留或保留鎖定的記錄。
另請參照:
提交匿名化要求
使用 SF_Archive.ArchiverAccessor Apex 類別定義您的目標條件並提交匿名化工作。
請確保您符合下列需求。
- 執行 Apex 程式碼的使用者具有存取
SF_Archive命名空間的權限。 - 存取開發人員主控台或 IDE 以執行「執行匿名 Apex」。
- 開啟「開發人員主控台」或您偏好的 Apex 執行工具。
- 開啟「執行匿名」視窗。
-
若要定義條件並提交要求,請執行此程式碼。此程式碼區塊會將「連絡人」記錄上的電子郵件地址欄位匿名化。
// 1. Define the criteria for the records to anonymize. // Syntax: new Criteria('ObjectAPIName', 'FieldAPIName', 'ValueToMatch'); List<SF_Archive.Criteria> criteriaList = new List<SF_Archive.Criteria>(); // Example: Anonymize a specific Contact by Email criteriaList.add(new SF_Archive.Criteria( 'Contact', 'Email', 'mickey.mouse@example.com' )); // 2. Submit the anonymization request. SF_Archive.ArchiverAccessorResponse response = SF_Archive.ArchiverAccessor.maskArchivedRecords(criteriaList); // 3. Process the response to get the request ID. Map<String, String> values = (Map<String, String>)JSON.deserialize(response.getBody(), Map<String, String>.class); String requestId = values.get('request_id'); // Output the request ID for tracking. System.debug('Anonymization Job Submitted. Request ID: ' + requestId);
確認匿名化狀態
使用提交期間產生的要求識別碼,檢查匿名化工作的狀態,並產生稽核報告。
匿名化是非同步程序。提交要求後,請使用傳回的要求識別碼追蹤其進度並驗證結果。
-
若要檢查匿名化工作狀態,請在「執行匿名」視窗中執行此程式碼。
// Paste the Request ID found in the Debug Log from the anonymization request. // Example: String requestId = '0Qn5e000000abcD'; String requestId = 'YOUR_REQUEST_ID_HERE'; // Check the status. String statusResponse = SF_Archive.ArchiverAccessor.getMaskingStatus(requestId); System.debug('Anonymization Job Status: ' + statusResponse); -
若要在匿名化工作完成後產生稽核報告,請在「執行匿名」視窗中執行此程式碼。
String requestId = 'YOUR_REQUEST_ID_HERE'; String report = SF_Archive.ArchiverAccessor.getMaskingReport(requestId); System.debug('Anonymization Audit Report: ' + report);
匿名化結果
檢閱匿名化程序完成後 PII 欄位的顯示方式。工作狀態為 HANDLED 時,系統會立即更新已歸檔的資料。
- 使用原始 PII (例如電子郵件地址) 的搜尋不會傳回任何結果。
- 使用非敏感識別碼 (例如記錄識別碼) 的搜尋會傳回匿名化記錄。
- 當您透過「搜尋」、「匯出」或「取消封存」檢視記錄時,PII 欄位會顯示預留位置值。
| 欄位 | 原始值 | 匿名化值 |
|---|---|---|
| 名稱 | Mickey 滑鼠 | redacted_first_name |
| 電子郵件 | mickey.mouse@example.com | redacted@example.com |
| 電話 | +1-415-555-1234 | 000-000-0000 |
| ContactId | 003XX0000123AbC | 003XX0000123AbC |

