Loading
自動化業務流程
目錄
選取篩選

          沒有結果
          沒有結果
          以下是搜尋小祕訣

          檢查關鍵字的拼字。
          使用較常見的搜尋字詞。
          選取較少篩選條件以擴大您的搜尋。

          搜尋所有 Salesforce 說明
          避免 CPU 限制的大量記錄處理範例

          避免 CPU 限制的大量記錄處理範例

          瞭解如何重構流程,以使用防止 APEX_CPU_TIME_LIMIT_EXCEEDED 錯誤的大量處理模式。此範例示範低效率與最佳化流程設計之間的差異。

          必要版本

          檢視支援的版本。
          所需的使用者權限
          若要使用 Flow Builder 中所有可用的流程類型、元素和功能 (包括 Einstein 和 Agentforce for Flow) 來開啟、編輯、建立、啟用或停用流程: 管理流程

          此範例顯示如何將在迴圈內執行「資料操作語言」(DML) 的流程轉換為有效處理記錄的大量流程。檢視之前和之後的比較,並瞭解流程大量處理的原則。

          實例

          建立記錄觸發流程,在機會結束時執行。針對每個已結束成交的機會,流程會為機會小組的每個成員建立追蹤工作。流程:

          • 取得所有機會小組成員。
          • 建立指派給每個小組成員的工作。
          • 即使使用者一次更新多個機會,仍有效運作。
          • 避免大量作業期間發生 APEX_CPU_TIME_LIMIT_EXCEEDED 錯誤。

          Salesforce 會為每個同步交易強制執行 10,000 毫秒 (10 秒) 的單一 CPU 時間限制。該交易中的每個自動化 (Apex 觸發、流程、工作流程規則和程序) 都會從相同的預算中提取。流程設計效率不佳會加強問題。交易中的其他自動化項目會先減少共用預算,而效率不佳的流程會耗用超過必要的剩餘預算。

          流程執行的順序取決於流程類型。此範例使用儲存後記錄觸發流程,其會依儲存前流程的順序執行。如需執行指示的詳細資料,請參閱「觸發和執行順序」。

          效率不佳方法:迴圈內的 DML 作業

          此方法會在處理多個機會時造成 CPU 限制錯誤。

          流程結構:流程會從「機會」物件上的「記錄觸發流程」開始,當「階段」等於「已結束成交」時,該流程會在記錄更新後執行。流程會使用「取得記錄」取得觸發記錄的「機會小組成員」,然後循環完成集合。在迴圈內,「建立記錄」元素會為每個小組成員建立一個工作。

          此方法失敗的原因:

          • 每個迴圈迭代都會執行個別的 DML 作業。
          • 具有 5 個小組成員的機會會產生 5 個 DML 作業。
          • 當使用者一次更新 20 個機會時,流程會在一個交易中處理所有機會。
          • 20 個機會 × 每個小組成員 = 100 個 DML 作業在一個交易中。
          • 100 個 DML 作業的累積 CPU 時間超過管理員限制。
          • 結果:APEX_CPU_TIME_LIMIT_EXCEEDED 錯誤。

          有效率方法:以集合為基礎的大量處理

          無論記錄量為何,此方法都能有效率地處理記錄。

          流程結構:流程會從「機會」物件上的記錄觸發流程開始,並使用「取得記錄」取得「機會小組成員」。流程會建立「工作」記錄變數和「工作」記錄集合變數。記錄變數會保留流程正在處理的目前工作,而記錄集合會保留要建立的工作。流程會循環完成小組成員。在迴圈內,「指派」元素會透過設定「工作」記錄變數的值來建立每個工作記錄,並將工作與迴圈中的目前小組成員相關聯。其他「指派」元素會將「工作」記錄變數值新增至「工作」記錄集合。迴圈完成後,單一「建立記錄」元素會從集合建立所有工作。

          為何運作:

          • 迴圈會建立工作記錄的集合,而無須執行 DML 作業。
          • 迴圈完成後只會進行一個 DML 作業。
          • 具有 5 個小組成員的機會仍只會產生 1 個 DML 作業 (一次建立 5 個工作)。
          • 當使用者一次更新 20 個機會時,流程會執行 20 個 DML 作業 (每個機會一個)。
          • 明顯減少 CPU 時間消耗。
          • 結果:流程在未達到管理員限制的情況下順利完成。

          績效比較

          實例 效率不佳 (迴圈中的 DML) 有效 (大量處理)
          1 個包含 5 個小組成員的機會 5 個 DML 作業 1 個 DML 作業
          20 個機會 (大量更新),每個小組成員有 5 個

          100 個 DML 作業

          (可能會因 CPU 限制錯誤而失敗)

          20 個 DML 作業

          (成功完成)

          100 個機會 (資料載入),每個小組成員為 3 個

          300 個 DML 作業

          (絕對失敗)

          100 個 DML 作業

          (成功完成)

          大量處理的重要原則

          • 切勿在迴圈內執行 DML 作業。一律在迴圈期間收集集合變數中的記錄,然後在迴圈完成後執行 DML。
          • 從頭開始進行大量作業的設計。假設記錄觸發流程同時處理多個記錄。
          • 使用記錄集合變數。集合型 DML 作業的效率高於個別作業。
          • 使用實際量的測試。一個記錄的除錯模式不會顯示大量作業問題。使用「資料匯入精靈」、「Data Loader」或大量更新進行測試。
          • 監視效能。檢閱除錯記錄,以識別在流程在生產環境中失敗之前接近管理員限制的流程。

          高階步驟

          檢閱此範例中的步驟。請依序遵循,或前往一個區段以取得更明確的指示。

          建立流程

          設定記錄觸發流程,以在機會結束時執行。

          1. 開啟「流程」清單檢視。
            • 進入「設定」,在「快速尋找」方塊中,輸入流程,然後選取「流程」。
            • 進入「自動化」應用程式,選取「流程」 索引標籤。
            • 從任何 Lightning 應用程式的「流程」 索引標籤中,按一下動作功能表,然後選取「開啟流程」。
          2. 建立記錄觸發的流程。
            1. 進入「自動化 Lightning」應用程式,按一下「新增」。搜尋並選取「記錄觸發流程」。
            2. 進入「設定」,按一下「新增流程」,搜尋並選取「記錄觸發流程」。
            「設定開始」面板隨即開啟。
          3. 設定「開始」元素。
            1. 針對「物件」,選取「機會」。
            2. 針對「觸發流程的時機」,選取「記錄已更新」。
            3. 在「設定項目條件」區段中,針對「條件需求」,選取「符合所有條件 (AND)」。
            4. 針對「欄位」,選取「階段」。
            5. 針對「運算子」,選取「等於」。
            6. 針對「值」,選取「已結束成交」。
            7. 針對「最佳化流程」,選取「動作與相關記錄」。

          建立資源

          建立大量處理所需的變數。

          1. 若要建立每個工作,請建立記錄變數以建立工作記錄。
            1. 若要開啟「工具箱」,請按一下「工具箱圖示。」。
            2. 按一下「新增資源」,然後選取「變數」。
            3. 針對「API 名稱」,輸入 TaskRecord
            4. 針對「資料類型」,選取「記錄」。
            5. 針對「物件」,選取「工作」。
            6. 按一下「完成」。
          2. 若要儲存所有工作,請為所有工作建立記錄集合變數。
            1. 按一下「新增資源」,然後選取「變數」。
            2. 針對「API 名稱」,輸入 TasksToCreate
            3. 針對「資料類型」,選取「記錄」。
            4. 針對「物件」,選取「工作」。
            5. 選取以 允許多重值 (集合)
            6. 按一下「完成」。

          取得小組成員

          使用「取得記錄」元素取得「機會小組成員」記錄以供處理。

          1. 按一下 新增元素加號圖示,然後選取「搜尋並取得 記錄」。
          2. 設定元素。
            1. 針對「標籤」,輸入 取得機會小組成員
            2. 針對「物件」,選取「機會連絡人角色」。
              在此範例中,流程會將小組成員儲存在「機會連絡人角色」物件中。將機會連結至連絡人的物件。
            3. 在「篩選機會連絡人角色記錄」區段中,針對「欄位」選取「機會識別碼」。
            4. 針對「運算子」,選取「等於」。
            5. 針對「值」,選取「觸發機會」,然後選取「機會識別碼」。
            6. 針對「要儲存多少記錄」,選取「所有記錄」。
            7. 針對「如何儲存記錄資料」,選取「自動儲存所有欄位」。

          新增要檢查小組成員的決策

          新增「決策」元素,以避免在沒有小組成員時處理。

          1. 按一下 新增元素加號圖示,然後搜尋並選取「決策」。
          2. 設定決策。
            1. 針對「標籤」,輸入「尋找小組成員?」
            2. API 名稱會自動填入。
            3. 針對「成果標籤」,輸入
            4. API 名稱會自動填入。
            5. 針對「資源」,選取「取得機會小組成員中的 機會連絡人角色」。
            6. 針對「運算子」,選取「為 Null」。
            7. 針對「值」,選取「False」。
            8. 按一下「預設結果」。
            9. 針對「標籤」,輸入

          新增迴圈元素

          新增迴圈元素以迭代小組成員。

          1. 在「是」路徑中,按一下 新增元素加號圖示,然後搜尋並選取「迴圈」。
          2. 設定迴圈。
            1. 針對「標籤」,輸入 反覆透過小組成員
            2. API 名稱會自動填入。
            3. 針對「集合變數」,選取「取得機會小組成員中的 機會連絡人角色」。
              即使此資源包含多個記錄,仍會顯示為單數。
            4. 針對「方向」,選取「第一個項目到最後一個項目」。

          在迴圈內建立工作記錄

          針對迴圈內的每個小組成員填入 TaskRecord 記錄變數的欄位值。

          1. 在「針對每個項目」之後,按一下 新增元素加號圖示,然後搜尋並選取「指派」。
          2. 設定指派。
            1. 針對「標籤」,輸入 建立工作記錄
            2. API 名稱會自動填入。
            3. 針對「變數」,選取「TaskRecord」,然後選取「主題」。
            4. 針對「運算子」,選取「等於」。
            5. 針對「值」,輸入「跟隨已結束的機會」。
            6. 按一下 + 新增指派
            7. 繼續新增指派並設定值。
              資源 運算子
              TaskRecord>狀態 等於 未開始
              TaskRecord>priority 等於
              TaskRecord>指派對象識別碼 等於 來自迴圈>連絡人識別碼的目前項目
              TaskRecord>與識別碼相關 等於 觸發機會>機會識別碼

          將工作新增至集合

          將每個工作記錄新增至 TasksToCreate 集合變數以進行大量建立。

          1. 在「指派」元素之後,仍在迴圈中,按一下 新增元素加號圖示,然後搜尋並選取「指派」。
          2. 設定指派。
            1. 針對「標籤」,輸入 新增工作至集合
            2. 針對「變數」,選取「TasksToCreate」。
            3. 針對「運算子」,選取「新增」。
            4. 針對「值」,選取「TaskRecord」,然後選取「整個資源」。

          在迴圈後建立所有工作

          使用單一「建立記錄」元素可在一個作業中建立所有工作。

          1. 迴圈結束後,按一下 新增元素加號圖示,然後搜尋並選取「建立記錄」。
          2. 設定元素。
            1. 針對「標籤」,輸入 建立所有工作
            2. 針對「如何設定記錄欄位值」,選取「從記錄變數」。
            3. 針對「要建立多少記錄」,選取「個」。
            4. 針對「記錄集合」,選取「TasksToCreate」。
          3. 儲存流程。
          4. 針對「標籤」,輸入「為機會小組成員建立工作」。
          5. API 名稱會自動填入。

          新增錯誤處理

          設定錯誤管理,以捕捉並報告錯誤。

          1. 若要管理錯誤,請將錯誤路徑新增至「建立記錄」元素。
            1. 按一下「建立所有工作」元素上的三個點,然後選取「新增錯誤路徑」。
          2. 若要通知 Salesforce 管理員錯誤路徑失敗,請新增「傳送電子郵件」動作。
            1. 在錯誤路徑上,按一下 新增元素加號圖示,然後搜尋並選取「傳送電子郵件」。
            2. 針對「標籤」,輸入 通知管理員有關錯誤
            3. API 名稱會自動填入。
            4. 針對「收件者地址」,輸入您要接收通知之人員的電子郵件地址。
            5. 針對「主題」,輸入需要注意的 流程
            6. 針對「內文」,輸入「機會小組成員 的建立工作」流程發生錯誤。以下是錯誤:.
            7. 按一下「插入資源」。
            8. 選取「執行中流程」,然後選取「錯誤訊息」。
          3. 儲存您的工作。

          使用大量資料進行測試

          測試大量處理流程需要模擬大量作業。

          1. 若要測試個別記錄,請使用除錯模式更新一個機會,並確認流程正確建立工作。
          2. 啟用流程。
          3. 若要在 Sandbox 中測試大量作業,請使用「資料匯入精靈」、「Data Loader」或清單檢視一次更新多個機會。
            1. 建立 10 到 20 個測試機會。
            2. 將小組成員新增至每個機會。
            3. 使用 Data Loader 或大量更新,同時將所有機會的階段變更為「已結束成交」。
            4. 確認流程建立所有工作且沒有錯誤。
          4. 若要驗證效能,請檢閱 Apex 除錯記錄,以確認 CPU 耗用時間在可接受的限制內。

          更多最佳化技術

          使用這些技術進一步最佳化大量處理的流程。

          使用項目條件限制執行

          將條件新增至流程「開始」元素,以確保流程僅在必要時執行。例如,僅處理超過特定金額或來自特定記錄類型的機會。

          針對非重要作業考量儲存後

          儲存後記錄觸發流程可以在您儲存機會後建立後續工作。其會非同步執行,且管理員限制較高。

          大量批次流程

          如果機會定期有數十個小組成員,請使用已排程流程,以批次方式處理已結束機會,而非即時處理。

          轉換現有流程

          在迴圈中使用「資料操作語言」(DML) 作業將流程轉換為大量模式。

          如果您有具有迴圈中 DML 作業的現有流程,請遵循下列步驟進行轉換。

          1. 若要尋找迴圈中的 DML 作業,請識別迴圈內的所有「建立記錄」、「更新記錄」和「刪除記錄」元素。
          2. 針對每個 DML 元素執行轉換。
            1. 若要建立記錄,請為該物件類型建立記錄變數。
            2. 若要儲存您要處理的記錄,請為該物件類型建立記錄集合變數。
            3. 若要儲存記錄的欄位值,請使用「指派」元素將值指派給記錄變數。
            4. 若要收集要處理的記錄,請使用「指派」將記錄變數新增至記錄集合。
            5. 若要有效率地建立記錄,請在迴圈之後新增一個處理整個記錄集合的 DML 元素。
          3. 若要確認轉換,請使用大量資料進行完整測試,以確認重新產生是否正確運作。
           
          正在載入
          Salesforce Help | Article