Skip to main content

例外処理とエラー時ロールバックを処理する

学習の目的

この単元を完了すると、次のことができるようになります。

  • ステップが失敗した場合に Try Catch Block を使用してエラーを特定する方法を説明する。
  • Rollback On Error を使用する場合について説明する。
  • カスタム権限を使用して特定のチームにデータアクセス権を付与する方法を説明する。

はじめに

ここまでに Robert は、ClearLight が求めていた新しいメンバーポータル機能を追加し、営業チームが大規模トランザクションを処理できるようにソリューションを補強しました。テクニカルアーキテクトの Robert

すべての処理時間の長い Integration Procedure が円滑に実行されるように更新もしました。

ClearLight プロジェクトの最終フェーズは、営業チーム向けに新しいカスタマー取引先と商談をモバイルデバイスから作成できるアプリケーションを作成することです。例外処理とエラー時のロールバック (Rollback On Error) という、2 つの重要な要件があります。このタスクを誰が担当するのでしょうか? もちろん、スーパー開発者の Robert です。

Robert はローコード API ビルダーで REST API を作成し、Salesforce でホストするつもりです。 

他にも次のことを実現する必要があります。

  1. 商談の作成が失敗したら、トランザクションは取引先レコードの作成をロールバックする。
  2. エラーが発生したら、REST API は会社で定義されたエラーコードとメッセージを返す。
  3. 営業チームの特定のグループのみが REST API にアクセスできる。

Robert は、この要件を満たすには Integration Procedure と DataRaptor Load をどう構成すればよいか調べています。

Rollback on Error (エラー時ロールバック) 構成

DataRaptor Load は JSON、XML、またはカスタムインプットフォーマットのデータを受け入れ、データを Salesforce オブジェクトに出力します。DataRaptor Load は呼び出されると、マッピングと数式をインプットデータに適用してアウトプットデータを作成します。そのアウトプットデータをマッピングに従って Salesforce オブジェクトに読み込みます。

Robert の最初のユースケースでは、商談の作成が失敗したら、トランザクションが取引先レコードの作成をロールバックする必要があります。この機能を作成するには、次のことをする必要があります。

  1. 親-子リレーションの保存をサポートする DataRaptor Load を作成する。
  2. AccountOpportunityCreation DataRaptor Load を構成する。
  3. Rollback On Error オプションを実装する。

Rollback On Error を構成する手順は、次のとおりです。

sObject が表示されている DataRaptor Load

1.DataRaptor Load で [Objects (オブジェクト)] タブ (1) を選択します。

2.更新する Salesforce オブジェクトを指定します。この場合、Account (取引先) レコード (2) と Opportunity (商談) レコード (3) を作成する必要があります。

DataRaptor Load に 4 つのオプションすべてが表示されている。

3.[Options (オプション)] タブ (1) を選択し、設定を検討します。

  • Ignore Errors (エラーを無視) (2): ステップでエラーが発生しても DataRaptor は実行を継続します。たとえば、Account ステップの取引先レコードの作成でエラーが発生しても、DataRaptor プロセスは次のステップに進み、商談レコードを作成します。
  • Rollback On Error (エラー時ロールバック) (3): エラーが発生したら、DataRaptor はすべての更新をロールバックします。
  • Use Assignment Rules (割り当てルールを使用) (4): ケースが割り当てられたら、構成されたルールに基づいて DataRaptor がユーザーにメール通知を送信します。
  • Overwrite Target For All Null Inputs (すべての null インプットに対して対象を上書き) (5): デフォルトで、値が null の場合、DataRaptor はアウトプット JSON にその項目のノードを作成しません。

4.[Rollback On Error (エラー時ロールバック)] を選択します。

 どうなるかプレビューしましょう。 

エラーメッセージが表示されている [Preview (プレビュー)] 画面

  1. [Preview (プレビュー)] (1) タブに移動して DataRaptor Load を実行します。[Objects Created (作成されたオブジェクト)] (2) セクションに商談レコードが表示されていません。
  2. [Errors (エラー)] (3) セクションを展開してエラーメッセージをチェックします。この例のエラーは、完了予定日がないことを示しています。

エラーは商談の保存時に発生したため、トランザクションは取引先レコードをロールバックしました。

Try Catch Block 構成

Robert は快調に Rollback On Error を設定し、次の要件に進んでいます。エラーが発生したら、API はクライアントが定義したエラーコードとメッセージを返す必要があります。Try Catch Block では、ブロック内でステップの実行を「try」し、ステップが失敗したらエラーを「catch」します。Robert は試してみることにしました。

Try Catch Block にエラーコードとメッセージを設定する方法を見ていきましょう。 

[Fail On Block Error (ブロックエラー時に失敗)] が有効になっている Integration Procedure

Try Catch Block を構成する手順は、次のとおりです。

  1. [Try Catch Block] (1) を [Structure (構造)] パネルにドラッグします。
  2. [Failure Response (失敗時レスポンス)] (2) に、Try Catch Block が失敗した場合にレスポンスで返す値を指定します。
  3. [Add Key/Value Pair (値/キーペアを追加)] をクリックします。
  4. キーを「ErrorCode」(エラーコード)、値を「001」に設定します。
  5. もう 1 つキー/値ペアを追加してエラーメッセージを指定します。キーを「Message」、値を「Error rollback all transactions (エラー時にすべてのトランザクションをロールバック)」に設定します。
  6. もう 1 つキー/値ペアを追加し、キーを「Detail」、値を「%CreateAccountAndOpportunity:errors%」に設定します。
  7. [Custom Failure Response (カスタム失敗時レスポンス)] セクションで、[Fail On Block Error (ブロックエラー時に失敗)] (3) が選択されていることを確認します。

どうなるかを確認してみましょう。

エラーコードとエラーメッセージが表示されている [Preview (プレビュー)] タブ

8.[Preview (プレビュー)] (1) タブに移動し、ErrorCode、Message、Detail が [Response (レスポンス)] (2) セクションで返されていることを確認します。

Rollback on Error の有効化

トランザクション境界内部で発生する操作は、操作の 1 つの単位に相当します。トランザクション内のすべての操作がエラーなしで実行を完了した後にのみ、すべての変更がデータベースにコミットされます。Rollback On Error オプションが有効な中間ステップのいずれかでエラーが発生した場合、すべてのデータベース変更はロールバックされ、トランザクションはコミットされません。

簡単に言うと、OmniScript から sObject のデータの変更、更新、作成が要求されたら、要求全体が正常に完了した場合にのみ、すべての変更はデータベースにコミットされます。 

[Rollback On Error (エラー時ロールバック)] オプションに再び目を向けましょう。 

[Rollback On Error (エラー時ロールバック)] が有効になっている Integration Procedure

[Structure (構造)] パネルの [Procedure Configuration (プロシージャー構成)] (1) で、[Rollback On Error (エラー時ロールバック)] (2) を有効にします。

2 つのトランザクションが表示されている Integration Procedure

この例では、2 つのトランザクションを含む Integration Procedure が表示されています。最初のトランザクション (1) では取引先の作成と更新、2 つ目のトランザクション (2) では商談の作成と更新を行います。両方のトランザクションが作成されて更新されると、Integration Procedure の実行は成功になります。一方のトランザクションのみが失敗した場合、作成されたもう一方のトランザクションでもロールバックを行います。 

ここでは Try Catch Block Account Creation は正常に作成されて更新されます。Try Catch Block Opportunity Creation でエラーが発生した場合、トランザクションは Account Creation をロールバックします。 

Integration Procedure REST API

DataRaptor の作成と Integration Procedure の有効化によって HTTP メソッド (GET、POST など) をサポートする REST API エンドポイントが作成されます。

Workbench に入力するエンドポイント URL は次のようになります。

  • DataRaptor の REST API は、このエンドポイントを使って使用できます: /services/apexrest/{namespace}/v2/DataRaptor/{DataRaptorName}/
    • 例: AccountOpportunityLoad という名前の DataRaptor のエンドポイント URL: /services/apexrest/vlocity_ins/v2/DataRaptor/AccountOpportunityLoad/
  • Type (タイプ) = sample で SubType (サブタイプ) = CreateOpportunity の Integration Procedure のエンドポイント URL: /services/apexrest/vlocity_ins/v1/integrationprocedure/sample_CreateOpportunity/
    • Integration Procedure のエンドポイント: /services/apexrest/{namespace}/v1/integrationprocedure/{Type}_{SubType}/

実行するアクションのリストが表示されている Workbench

Workbench (1) で Integration Procedure を実行しましょう。Workbench を開き、REST Explorer (2) を選択します。[Select (選択)] (3) をクリックして続行します。 

さまざまな HTTP メソッドが表示されている Workbench

REST API で実行する HTTP メソッド (1) を選択します。インプット項目 (2) にエンドポイント URL を入力し、[Execute (実行)] (3) をクリックしてレスポンスを表示します。 

インプットとレスポンスが表示されている Workbench

[Request Body (リクエストボディ)] (1) セクションにインプットを入力すると、[Raw Response (未加工レスポンス)] (2) セクションに結果が表示されます。

カスタム権限構成

Robert はついに最後のプロジェクト要件に取りかかります。REST API を特定のグループのみからアクセス可能にする必要があります。この例では、AccountOpportunityLoad DataRaptor と OpportunityCreation Integration Procedure へのアクセスを限定するカスタム権限について見ていきます。 

対応する情報のフロー図

営業チームには CreateOpportunity Integration Procedure REST API へのアクセス権のみ、内部システム管理者チームには AccountOpportunityLoad DataRaptorLoad REST API へのアクセス権のみを付与する必要があります。 

メモ
親の OpportunityCreation Integration Procedure には、DataRaptor Load Action を通じて自動的に AccountOpportunity DataRaptor へのアクセス権が付与されることを理解しておきます。

カスタム権限を使用して特定のチームにレコードアクセス権を付与する方法を学習しましょう。 

内部システム管理者と営業チームの [Custom Permissions (カスタム権限)] 設定

  1. [Setup (設定)] | [Custom Permissions (カスタム権限)] (1) に移動します。
  2. InternalAdmin (内部システム管理者) (2) と SalesTeam (営業チーム) (3) の新規カスタム権限を作成します。
  3. カスタム権限を DataRaptor に割り当てます。

[Required Permission (必須権限)] が InternalAdmin に設定された DataRaptor Load

  1. 新規 DataRaptor (1) を作成します。
  2. [Required Permission (必須権限)] (2) 項目に「InternalAdmin」と入力します。

次は、SalesTeam の [Custom Permission (カスタム権限)] を構成します。CreateOpportunity Integration Procedure への権限を割り当てます。

[Required Permission (必須権限)] が SalesTeam に設定された Integration Procedure

  1. 新規 Integration Procedure (1) を作成します。
  2. [Required Permission (必須権限)] (2) 項目に「SalesTeam」と入力します。

Robert はエラーと例外の処理のエキスパートになりました。プロジェクトの要件をすべて実現したことでかなり自信がつきました。今日はここで切り上げてリフレッシュしましょう!

リソース

無料で学習を続けましょう!
続けるにはアカウントにサインアップしてください。
サインアップすると次のような機能が利用できるようになります。
  • 各自のキャリア目標に合わせてパーソナライズされたおすすめが表示される
  • ハンズオン Challenge やテストでスキルを練習できる
  • 進捗状況を追跡して上司と共有できる
  • メンターやキャリアチャンスと繋がることができる