SAPステートレスコールを実行する
一部のSAP BAPIリモート関数は、データベースの変更のコミットを必要としません。しかし、OutSystemsプラットフォームは特定のSAPリモート関数がコミットを必要とするかどうかを検出する手段を持たないため、デフォルトでは、SAPリモート関数が呼び出されるたびに新しいトランザクションを作成し、トランザクションの終了前に変更をコミットします。
プラットフォームにより作成されるこのトランザクションの存在により、暗黙的にコミット済みであるかコミットが不要な古いBAPIを呼び出す場合、パフォーマンスが低下する可能性があります。
このパフォーマンス上の問題を解消するには、以下の手順を実行し、SAPのステートレス領域を管理する拡張モジュールを作成します。
- SAP Extensibility APIを使用して、SAPのステートレス接続の処理を行う拡張モジュールを作成します。
- Service Studioのアプリケーションモジュールで、拡張機能のアクションに依存関係を追加します。
- アプリケーションでSAPステートレスコールを実行するロジックを実装します。
SAP用の拡張モジュールを作成する
-
OutSystems Forgeで入手可能なSAPユーティリティコンポーネントを取得します。これは、SAP用の拡張モジュールを持つサンプルコンポーネントです。このモジュールにはステートフルコールとステートレスコールの両方を処理するためのアクションが含まれます。
注記: この拡張機能はSAP Extensibility APIを利用するため、その要件を満たしていることを確認してください。
-
拡張機能をパブリッシュします。
モジュールの拡張機能のアクションに依存関係を追加する
アプリケーションでステートレスコールを実装するには、拡張機能の次のアクションへの参照を追加します。
- BeginStatelessRegion: SAPのステートレス接続領域を開始します。
- EndStatelessRegion: SAPのステートレス接続領域を終了します。
詳細については、モジュールで公開された要素を使用する方法をご覧ください。
ステートレスコールを実行するロジックを実装する
上記の拡張機能のアクションとSAPリモート機能を組み合わせて使用し、ステートレスコールを実装します。
CreateContextアクションで手動コンテキストが作成された場合を除き、ステートレス領域内のすべてのコールがステートレス接続で行われます。
以下の例では、コミットが不要なSAPのリモート関数を使用します。
-
メインフローで以下の要素を使用し、アクションにステートレスコールを実装します。
- BeginStatelessRegion
- SAPのステートレス接続領域を開始します。
- BAPI_SelectedMethod
- 操作を実行するSAPリモート関数の例。データベースのコミットが不要です。
- EndStatelessRegion
- SAPのステートレス接続領域を終了します。
-
例外処理フローに、以下の要素を追加します。
- EndStatelessRegion
- SAPのステートレス接続領域を終了します。