処理時間の長い Integration Procedure を管理する
学習の目的
この単元を完了すると、次のことができるようになります。
- 処理時間の長い Integration Procedure に使用する設定について説明する。
- Chainable および Queueable Chainable 構成の制限について説明する。
はじめに
ClearLight では、個人のヘルスケア消費者に加え、中~大規模グループの顧客にもサービスを提供しています。大規模グループとは従業員数 100 名以上の団体または企業です。ClearLight の営業チームは頻繁にこうした大規模顧客の大量データを使用し、多くの保険契約を含む大規模な見積や契約の管理などを行っています。そのため、同社の Sales Cloud ソリューションに高負荷がかかる処理が必要になります。
Salesforce ガバナ制限は、Salesforce プラットフォーム上で確実に効率的な処理とリソースの使用を行うための使用上限です。OmniScript を使用するチームにとって、Integration Procedure のトランザクションがガバナ制限を超える場合、制限が問題となることがあります。制限に達すると、Salesforce によってトランザクションが終了し、Integration Procedure は失敗します。
ときどき、営業チームの大量データを扱うトランザクションが制限に達して、セールスプロセスが遅延しかねない状況になります。誰に助けを求めればよいでしょうか? もちろん、OmniStudio 開発者の Robert です。
Robert は ClearLight をサポートするというこの課題を快く引き受けます。OmniScript で大量トランザクションと処理時間の長い Integration Procedure をサポートできるようにすると確約しました。そうすれば、営業チームは営業活動を進めて目標を達成できます。
チェーニングにようこそ
Apex トランザクションは、1 つの単位として実行される一連の処理を表します。Robert は 1 つの Integration Procedure のアクションはデフォルトですべて同じトランザクション内で実行されることを知っています。Robert は Salesforce 開発者ドキュメントを読み込み、過剰で混乱を招く可能性があるため、チェーニングと制限を重点的に調べることにしました。
チェーニングは逐次処理に便利です。実行中のジョブから後続のジョブを開始することで、Robert はあるジョブから別のジョブをチェーニングすることができます。特定のトランザクション制限に達したらチェーニングをトリガーするようにガバナ制限を設定することも必要です。次のようなチェーニング設定があります。
- Chainable (チェーン可能): この設定は同期 Apex ガバナ制限に使用します。
- Queueable Chainable (キュー可能なチェーン可能): この設定は非同期 Apex ガバナ制限に使用します。
- Chain On Step (ステップのチェーン): アクションの次のステップを常に新しいトランザクションで実行する場合はこの設定を有効にします。
Chainable 設定
チェーニングが有効で Integration Procedure ステップが構成された制限を超えた場合、中間結果が保存され、ステップは新しいトランザクションで継続されます。この方法により、ステップと Integration Procedure の他のステップとの間でリソースの競合は発生しません。パフォーマンスを最大化するために、Integration Procedure ではトランザクションが構成された制限を超えた場合にのみステップをチェーニングします。制限を超えていない場合、Integration Procedure のすべてのステップは 1 つのトランザクションで実行されます。
ソリューションを顧客に提案する前に、Robert は既存の自動車保険見積 OmniScript を使用して Chainable と Queueable Chainable 設定を試そうと考えています。まず、OmniScript のパフォーマンスを改善する箇所を正確に把握する必要があるため、テスト用に処理時間が長くなりそうな Integration Procedure を選択します。次に、便利な OmniStudio IDX Workbench を開き、Process Profiler を使用して Calculation Action のいずれかの SOQL クエリ数を判定します。この数は約 70 クエリです。
Robert はチェーニングを有効にすることにしました。
まず、OmniScript で [Integration Procedure Action Properties (Integration Procedure Action プロパティ)] (1) にアクセスし、[Chainable (チェーン可能)] (2) を選択します。
次に、Integration Procedure にアクセスします。[Structure (構造)] パネルで、Robert は [Procedure Configuration (プロシージャー構成)] を選択し、[Chainable Configuration (チェーン可能構成)] セクション (1) を展開します。[Chainable Queries Limit (チェーン可能クエリ制限)] (2) は 70 のままにします。
この設定では、クエリが 70 に達すると、Integration Procedure は次の Action を新しいトランザクションとして実行します。
Robert はこの構成をテストします。Calculation Action が完了するとチェーニングが発生します。Action のクエリの総数が 71 になり、制限の 70 を超えたからです。
Action で 70 クエリを実行すると、Integration Procedure は中間結果を保存して 2 つ目の Calculation Action を開始します。次の Calculation Action はクエリを 73 回実行するため、再び制限の 70 を超えます。これにより、Integration Procedure を実行し続けるための新しいトランザクションが起動されます。Data Mapper Transform Action と Response Action ではクエリ総数が制限内であるため、チェーニングは発生しません。
Queueable Chainable 設定
チェーン可能なステップが、非同期 Apex として実行されるキュー可能ジョブを開始できるようにして、ガバナ制限を増やすことができます。Queueable Chainable 設定で Chainable 設定がオーバーライドされます (両方とも設定されている場合)。
キュー可能なチェーニングを構成するには、OmniScript を開き、[Integration Procedure Action Properties (Integration Procedure Action プロパティ)] (1) にアクセスし、[Queueable Chainable (キュー可能なチェーン可能)] オプション (2) を選択します。
Queueable Chainable は Chainable とどう違うのでしょうか? Queueable Chainable が設定されていると、各チェーニング Integration Procedure の実行がキュー可能な非同期 Apex ジョブになります。SOQL クエリ制限など一部のガバナ制限は、同期 Apex の場合よりも高く設定されています。
Robert は OmniScript で [Queueable Chainable (キュー可能なチェーン可能)] オプションを選択します。Integration Procedure の [Procedure Configuration (プロシージャー構成)] で [Queueable Chainable Limits (キュー可能なチェーン可能制限)] セクション (1) を展開し、[Queueable Chainable Queries Limits (キュー可能なチェーン可能クエリ制限)] を 140 に設定します。
こうした設定が構成されていると何が起こるかを見てみましょう。
この例では、Multi-Automobiles レーティングの Calculation Action でクエリ総数が 144 に達し、制限の 140 を超えます。したがって、この Calculation Action でチェーニングが発生します。
Chain On Step (ステップのチェーン)
特定の Action でのチェーニングを構成するには、Chainable または Queueable Chainable が有効な [Chain On Step (ステップのチェーン)] 設定を使用します。OmniScript で [Chain On Step (ステップのチェーン)] が有効な Integration Procedure Action をコールすると、アクションの次のステップは常に新しいトランザクションで実行されます。では、このしくみを見てみましょう。
Salesforce プラットフォームではデータ操作言語 (DML) 操作の後に Apex 外部コールアウトを使用することが禁じられています。そのため、Data Mapper Post Action に続いて HTTP Action がある場合、その Data Mapper Post Action で Chain On Step を有効にできます。これにより、「You have uncommitted work pending」(コミットされていない待機中の作業があります) を示す Salesforce エラーを回避できます。
プロシージャーの例に従ってこの種のシナリオに Chain On Step を構成しましょう。
- Integration Procedure の [Structure (構造)] パネルで、[Data MapperPostUpdateAccountInfo] (1) を選択します。
-
[Chain On Step (ステップのチェーン)] (2) は有効になっていません。
3.[Preview (プレビュー)] タブ (1) を表示し、[Execute (実行)] (2) をクリックして結果を表示します。[Response (レスポンス)] ペイン (3) に、Integration Procedure が失敗したことが表示され、エラーメッセージに次のステップに関するガイダンスが提供されています。
このエラーを回避するために、[Chain On Step (ステップのチェーン)] を有効にしてテストしましょう。
- [Data MapperPostUpdateAccountInfo] (1) で [Chain On Step (ステップのチェーン)] (2) を選択します。
- [Preview (プレビュー)] タブを表示し、[Options (オプション)] セクションを展開します。
3.[Chainable (チェーン可能)] の値を false (1) から true (2) に変更します。
4.[Execute (実行)] (1) をクリックしてプロセスを実行し、[Response (レスポンス)] (2) を表示します。[Response (レスポンス)] に success と表示され、Account が更新されています。
制限設定
制限を構成するには、Integration Procedure の [Procedure Configuration (プロシージャー構成)] セクションで [Chainable Configuration (チェーン可能構成)] と [Queueable Chainable Limits (キュー可能なチェーン可能制限)] 設定を編集する必要があります。制限チェックを無効にするには、設定を空白のままにします。ただし、制限チェックを無効にして、ステップが Salesforce ガバナ制限を超えると、Integration Procedure は失敗します。
Chainable (チェーン可能) 設定の構成制限
設定 |
説明 |
デフォルトの最大値 |
---|---|---|
Chainable Heap Size Limit (チェーン可能ヒープサイズ制限) |
トランザクション処理中にデータの保存に使用される最大メモリ。 |
6 MB |
Chainable Query Rows Limit (チェーン可能クエリ行制限) |
SOQL クエリに取得が許可される最大行数 |
50,000 |
Chainable DML Rows Limit (チェーン可能 DML 行制限) |
DML ステートメントの結果として処理可能な最大レコード数 |
10,000 |
Chainable SOSL Queries Limit (チェーン可能 SOSL クエリ制限) |
実行可能な SOSL クエリの最大数 |
20 |
Chainable SOQL Queries Limit (チェーン可能 SOQL クエリ制限) |
実行可能な SOQL クエリの最大数 |
100 |
Chainable DML Statements Limit (チェーン可能 DML ステートメント制限) |
実行可能な DML ステートメントの最大数 |
150 |
Chainable CPU Limit (チェーン可能 CPU 制限) |
Salesforce サーバーでの最大 CPU 時間 |
10,000 ミリ秒 |
Chainable Actual Time (チェーン可能実時間) |
Salesforce 同時要求制限に達するのを避けるためにチェーニングが発生するまでに Integration Procedure が実行可能な秒数 |
Integration Procedure に応じて異なる |
[Queueable Chainable (キュー可能なチェーン可能)] 設定の構成制限
設定 |
説明 |
デフォルトの最大値 |
---|---|---|
Queueable Chainable Heap Size Limit (キュー可能なチェーン可能ヒープサイズ制限) |
トランザクション処理中にデータの保存に使用されるメモリ。 |
12 MB |
Queueable Chainable Queries Limit (キュー可能なチェーン可能クエリ制限) |
実行可能な SOQL クエリの最大数 |
200 |
Queueable Chainable CPU Limit (キュー可能なチェーン可能 CPU 制限) |
Salesforce サーバーでの最大 CPU 時間 |
60,000 ミリ秒 |
できました! これで ClearLight にソリューションを提案できます。Robert は Chainable、Queueable Chainable、Chain On Step を使用して処理時間の長い Integration Procedure を管理する方法を学習しました。こうした設定は Integration Procedure を円滑に実行し、必要だが煩わしいガバナ制限を回避するのに役立ちます。ClearLight は Robert のソリューションをレビューし、大変満足しています。Robert の昇格と昇給も期待できそうです。
リソース
-
Trailhead: OmniStudio Developer Tools (OmniStudio 開発者ツール)
-
Salesforce ヘルプ: 実行ガバナと制限
-
Salesforce ヘルプ: Settings for Long-Running Integration Procedures (処理時間の長い Integration Procedure の設定)