Application Integration でサポートされているコネクタをご覧ください。

SAP ERP トリガー

SAP ERP トリガーは、コネクタ イベント トリガーです。SAP ERP コネクタを使用すると、SAP ERP データに対して、挿入、削除、更新、読み取りオペレーションを遂行できます。

始める前に

  • SAP ERP トリガーの新しい接続を作成または構成する場合は、プロジェクトに対する次の IAM ロールがあることを確認してください。
    • Connectors 管理者( roles/connectors.admin
    • ロールの付与については、アクセスの管理をご覧ください。

  • SAP ERP トリガーに使用するサービス アカウントに、次の IAM ロールを付与します。
  • SAP ERP トリガーを追加する

    インテグレーションに SAP ERP トリガーを追加する手順は次のとおりです。

    1. Google Cloud コンソールで [Application Integration] ページに移動します。

      Application Integration に移動

    2. ナビゲーション メニューで [統合] をクリックします。

      [統合リスト] ページが開き、Google Cloud プロジェクトで使用可能なすべての統合が一覧表示されます。

    3. 既存の統合を選択するか、[統合の作成] をクリックして新しい統合を作成します。

      新しい統合を作成する場合:

      1. [統合の作成] ペインで名前と説明を入力します。
      2. 統合のリージョンを選択します。
      3. 統合用のサービス アカウントを選択します。統合のサービス アカウントの詳細は、統合ツールバーの [統合の概要] ペインでいつでも変更または更新できます。
      4. [作成] をクリックします。

      統合エディタで統合が開きます。

    4. 統合エディタのナビゲーション バーで、[トリガー] をクリックして、使用可能なトリガーのリストを表示します。
    5. 統合エディタで、[SAP ERP トリガー] 要素をクリックして配置します。
    6. SAP ERP トリガーを構成するには、Integration Connectors で使用可能な既存の SAP ERP 接続を使用するか、インライン接続作成オプションを使用して新しい SAP ERP 接続を作成します。

    既存の接続を使用して SAP ERP トリガーを構成する

    SAP ERP トリガーコネクタ イベント トリガーであるため、トリガーの構成にはイベント サブスクリプションを有効にした SAP ERP 接続のみが使用できます。

    新しい SAP ERP 接続を使用して SAP ERP トリガーを構成する方法については、新しい接続を使用して SAP ERP トリガーを構成するをご覧ください。

    既存の SAP ERP 接続を使用して SAP ERP トリガーを構成するには、次の手順を行います。

    1. 統合エディタで [SAP ERP トリガー] 要素をクリックして、トリガー構成ペインを開きます。
    2. [トリガーの構成] をクリックします。
    3. [Connector Event Trigger Editor] ページで、構成の詳細を次のとおりに入力します。
      1. リージョン: SAP ERP 接続のリージョンを選択します。
      2. 接続: 使用する SAP ERP 接続を選択します。

        Application Integration には、アクティブであり、イベント サブスクリプションが有効になっている SAP ERP 接続のみが表示されます。

      3. イベントタイプのフィールド名を入力します。このフィールドは、受信イベント リクエストに関連付けられているイベントのタイプを識別します。
        {
            "event_type": "user.created",
            ...
            // other request fields
            ...
            }
      4. サービス アカウント: SAP ERP トリガーに必要な IAM ロールを持つサービス アカウントを選択します。
    4. [Done] をクリックしてトリガーの構成を完了し、ページを閉じます。

    新しい接続を使用して SAP ERP トリガーを構成する

    1. 統合エディタで [SAP ERP トリガー] 要素をクリックして、トリガー構成ペインを開きます。
    2. [トリガーの構成] をクリックします。
    3. [リージョン] フィールドはスキップします。
    4. [接続] をクリックし、プルダウン メニューから [接続を作成] オプションを選択します。
    5. [接続の詳細] セクションで、次の操作を行います。
      1. Connector: 使用可能なコネクタのプルダウン リストから [SAP ERP] を選択します。
      2. コネクタのバージョン: 使用可能なバージョンのプルダウン リストからコネクタのバージョンを選択します。
      3. [接続名] フィールドに、接続インスタンスの名前を入力します。

        接続名は次の条件を満たす必要があります。

        • 接続名には英字、数字、ハイフンを使用できます。
        • 文字は小文字のみを使用できます。
        • 接続名の先頭には英字を設定し、末尾には英字または数字を設定する必要があります。
        • 接続名は 63 文字以内で指定してください。
      4. 必要に応じて、接続の [説明] を入力します。
      5. 必要に応じて、Cloud Logging を有効にします。
      6. サービス アカウント: 必要なロールを持つサービス アカウントを選択します。
      7. イベント サブスクリプションの接続を使用するには、[イベント サブスクリプションを有効にする] を選択します。これを選択すると、次のオプションが表示されます。
        • エンティティとアクションを使用したイベント サブスクリプションを有効にする: このオプションを選択すると、イベント サブスクリプションとコネクタ オペレーション(エンティティとアクション)の両方に対して接続が使用されます。
        • イベント サブスクリプションのみを有効にする: イベント サブスクリプションに対してのみ接続を使用するには、このオプションを選択します。 このオプションを選択した場合は、[次へ] をクリックしてイベント サブスクリプションを構成します。
      8. Client: SAP システムを認証するクライアント。
      9. System Id: SAP システムのシステム ID または R3Name で、最大 3 文字の文字列です。ロード バランシング接続でよく使用されます。
      10. System Number: ターゲット システムを定める番号。ホスト接続プロパティを設定するときに使用されます。
      11. Project ID: SAP JCo jar を含む GCS バケットが存在する Google Cloud プロジェクトの ID。
      12. Bucket: sapjco3.jar ファイルと libsapjco3.so ファイルが含まれるバケットの名前
      13. Jaco jar オブジェクト ID: JCo jar のオブジェクト ID。
      14. libsapjco3 オブジェクト ID: libsapjco3 jar のオブジェクト ID。
      15. テーブルモード: ビューとして表示する SAP テーブルを選択します。
      16. SNC_LIB オブジェクト ID: SNC ライブラリのオブジェクト ID。
      17. PSE 名: バケットに適用される Personal Security Environment(PSE)ファイルの名前。PSE ファイルには、公開鍵と秘密鍵のペア、X.509 証明書が ASN.1 構造で保存されます。
      18. グループ: ログオンのグループ名。これは通常、SAP システムがロードバランサを使用している場合に指定されます。
      19. メッセージ サーバー: ロードバランサを使用する SAP システムへの接続時に使用するメッセージ サーバーの名前。
      20. 読み取りテーブル関数: テーブルの読み取りに使用される関数の名前。詳細については、カスタム読み取りテーブル関数を使用するをご覧ください。
      21. 接続スキーム: SAP システムへの接続に使用する接続スキームを選択します。
      22. システム ID: SAP システムのシステム ID または R3Name。最大 3 文字まで入力できます。
      23. SNC パスコード: SNC ライブラリ パスコードの Secret Manager の Secret を選択します。
      24. シークレットのバージョン: シークレットのバージョンを選択します。
      25. SNC モード: Application Integration と SAP システム間の認証用に SNC を有効にするには、このオプションを選択します。
      26. SNC 名: SNC 接続の名前を入力します。
      27. SNC qop: 保護レベルを選択します。サポートされているレベルは次のとおりです。
        • 1 - 認証のみを適用します。
        • 2 - 完全性保護を適用します。これには認証保護も含まれます。
        • 3 - プライバシー保護を適用します。これには完全性と認証の保護も含まれます。
        • 8 - デフォルトの保護を適用します。
        • 9 - 最大限の保護を適用します。
      28. SNC パートナー名: アプリケーション サーバーの SNC 名を入力します。
      29. クエリモード: ビューとして表示するべき SAP テーブルを選択します。
      30. 閲覧可能なビュー: 表示するビューのカンマ区切りリストを入力します。 例: ViewA,ViewB,ViewC
      31. 詳細レベル: ログの詳細レベルを入力します。サポートされている値は 1 ~ 5 です。値が大きいほど、ログの詳細が取得できることを意味します。
      32. 必要に応じて、接続ノードの設定を構成します。

        • ノードの最小数: 接続ノードの最小数を入力します。
        • ノードの最大数: 接続ノードの最大数を入力します。

        ノードは、トランザクションを処理する接続の単位(またはレプリカ)です。1 つの接続でより多くのトランザクションを処理するには、より多くのノードが必要になります。逆に、より少ないトランザクションを処理するには、より少ないノードが必要になります。ノードがコネクタの料金に与える影響については、接続ノードの料金をご覧ください。値を入力しない場合は、デフォルトで最小ノード数は 2 に設定され(可用性を高めるため)、最大ノード数は 50 に設定されます。

      33. 必要に応じて、[+ ラベルを追加] をクリックして Key-Value ペアの形式でラベルを接続に追加します。
      34. [次へ] をクリックします。
    6. [宛先] セクションに、接続するリモートホスト(バックエンド システム)の詳細を入力します。
      1. Destination Type: 宛先の種類を選択します。
        • リストから [ホストアドレス] を選択して、宛先のホスト名または IP アドレスを指定します。
        • バックエンド システムへのプライベート接続を確立する場合は、リストからエンドポイント アタッチメントを選択し、次にエンドポイント アタッチメントリストから必要なエンドポイント アタッチメントを選択します。

        セキュリティをさらに強化してバックエンドシステムへのパブリック接続を確立する場合は、接続用の静的アウトバウンド IP アドレスの構成を検討してから、特定の静的 IP アドレスのみを許可リストに登録するようファイアウォール ルールを構成します。

        他の宛先を入力するには、[+ 宛先を追加] をクリックします。

      2. [次へ] をクリックします。
    7. [認証] セクションで、認証の詳細を入力します。
      1. [認証タイプ] を選択し、関連する詳細を入力します。

        SAP ERP 接続でサポートされる認証タイプは、次のとおりです。

        • ユーザー名とパスワードを指定する
      2. これらの認証タイプの構成方法については、認証を構成するをご覧ください。

      3. [次へ] をクリックします。
    8. イベント サブスクリプションを有効にしている場合は、接続作成ページに [イベント サブスクリプションの詳細] セクションが表示されます。イベント サブスクリプションの詳細の構成方法については、イベント サブスクリプションを構成するをご覧ください。
    9. Review: 接続と認証の詳細を確認します。
    10. [作成] をクリックします。

    認証を構成する

    使用する認証に基づいて詳細を入力します。

    • ユーザー名とパスワード
      • ユーザー名: コネクタのユーザー名
      • パスワード: コネクタに関連付けられたパスワードを含む Secret Manager の Secret。

    イベント サブスクリプション用に構成する

    イベント サブスクリプションを有効にしている場合は、[イベント サブスクリプションの詳細] セクションに次の値を入力します。

    1. イベント リスナーに次のいずれかの認証タイプを選択します。
    2. イベントタイプのフィールド名を入力します。このフィールドは、受信イベント リクエストに関連付けられているイベントのタイプを識別します
      {
      "event_type": "user.created",
      ...
      // other request fields
      ...
      }
    3. Select Enable private connectivity for secured connectivity between your backend application and your connection. If you select this option, you must perform additional configuration steps after creating the connection. For more information, see Private connectivity for event subscription.
    4. Enter the dead-letter configuration. If you configure dead-letter, the connection writes the unprocessed events to the specified Pub/Sub topic. Enter the following details:
      1. Dead-letter project ID: The Google Cloud project ID where you have configured the dead-letter Pub/Sub topic.
      2. Dead-letter topic: The Pub/Sub topic where you want to write the details of the unprocessed event.

    Use a custom read table function

    RFC_READ_TABLE

    The connector uses the SAP RFC_READ_TABLE function to get data from SAP tables.

    However, it has certain limitations. As an example, consider the DATA_BUFFER_EXCEEDED exception. The SAP RFC_READ_TABLE has a fixed size of 512 bytes. It can buffer for each row of data, and thus you cannot select more columns than the amount that would fit in this buffer. If you select more than 512 bytes, an exception occurs indicating that you have exceeded the maximum buffer size allowed per row and need to select fewer columns.

    RFC_READ_TABLE2

    The SAP ERP connector supports the RFC_READ_TABLE2 table read function. You can switch the active table read function to RFC_READ_TABLE2 by setting ReadTableFunction to /SAPDS/RFC_READ_TABLE2.

    Custom read table functions

    The connector includes a custom read-table RFC, Z_CUSTOM_READ_TABLE that is similar to the SAP RFC_READ_TABLE, but with a larger buffer to address the DATA_BUFFER_EXCEEDED problem and bypass RFC_READ_TABLE limitations.

    To use the included custom read-table RFC to bypass limitations with the default RFC_READ_TABLE, follow these steps:

    1. Use the RFC_READ_TABLE function as a template for the new function. Select transaction code SE37 and the SDTX function group and copy RFC_READ_TABLE to a new function group or your working function group. In this example, RFC_READ_TABLE is copied to Z_CUSTOM_READ_TABLE.
    2. On the Attributes tab of the SAP screen, select Remote Enabled Module.
    3. On the Tables tab, set the DATA parameter to CHAR8000. Right-click on the screen and then click Display -> Change.
    4. On the Source Code tab, paste the example source code for the replacement RFC_READ_TABLE function module located in the db subfolder of the installation directory. The code is located in Z_CUSTOM_READ_TABLE.txt, though Z_CUSTOM_READ_TABLE_752.txt is preferred if your SAP ERP instance is running ABAP version 7.52 or later.
    5. Click Save.
    6. Define the imports, tables, and exceptions as documented in the provided custom read table.
    7. Activate the function module and in your connection string set ReadTableFunction to Z_CUSTOM_READ_TABLE, or the name of your function module.

    The ABAP 7.52 Custom Read Table

    Along with Z_CUSTOM_READ_TABLE.txt, there is also a Z_CUSTOM_READ_TABLE_752.txt file, for ABAP version 7.52 and above. It is similar to Z_CUSTOM_READ_TABLE, but it takes advantage of the newly available keywords in ABAP 7.52 to perform paging within the database instead of in the ABAP script itself. This makes paging efficient when working with large tables.

    It is recommended to use the Z_CUSTOM_READ_TABLE_752 RFC.

    Configure authentication in SAP

    Configure the authentication in SAP by following the instructions in the Authentication overview for the on-premises or any cloud edition of ABAP SDK for Google Cloud guide.

    Validate the trigger

    To validate the trigger, you can create an ABAP program. The following is a sample ABAP program that you can use as a reference. The ls_event_payload field changes based on your requirements:

    *&---------------------------------------------------------------------*
    *& Report ZR_TEST_INT_CONNECTOR
    *&---------------------------------------------------------------------*
    *&
    *&---------------------------------------------------------------------*
    REPORT zr_test_int_connector.
    PARAMETERS: p_auth TYPE char1 RADIOBUTTON GROUP rbg1 USER-COMMAND uc DEFAULT 'X',
     p_apik TYPE char1 RADIOBUTTON GROUP rbg1.
    DATA:
     lv_p_projects_id TYPE string,
     lv_p_locations_id TYPE string,
     lv_p_connections_id TYPE string,
     ls_input TYPE /goog/cl_connectors_v1=>ty_103.
    TYPES: BEGIN OF event_payload,
     event_type TYPE string,
     event_id TYPE string,
     name TYPE string,
     org_id TYPE string,
     END OF event_payload.
    DATA: ls_event_payload TYPE event_payload.
    ls_event_payload = VALUE #(
     event_type = 'create-entity'
     event_id = '1'
     name = 'demo-org'
     org_id = 'SAP'
     ).
    TRY.
     IF p_Auth = abap_true.
     DATA(lv_client_key) = 'IC_DEMO_GOOGLE_AUTH'.
     lv_p_connections_id = 'conn-event-triggers-from-sap-erp'.
     ELSE.
     lv_client_key = 'IC_DEMO_GOOGLE_APIK'.
     lv_p_connections_id = 'conn-event-triggers-from-sap-erp-apik'.
     ENDIF.
    * Open HTTP Connection
     DATA(lo_client) = NEW /goog/cl_connectors_v1( iv_key_name = CONV #( lv_client_key ) ).
    * Populate relevant parameters
     lv_p_projects_id = lo_client->gv_project_id.
     lv_p_locations_id = 'us-central1'.
     GET REFERENCE OF ls_event_payload INTO ls_input-payload .
    * Call API method: connectors.projects.locations.connections.listenEvent
     CALL METHOD lo_client->listen_event_connections
     EXPORTING
    
    
    iv_p_projects_id = lv_p_projects_id
     iv_p_locations_id = lv_p_locations_id
     iv_p_connections_id = lv_p_connections_id
     is_input = ls_input
     IMPORTING
    * es_raw =
     es_output = DATA(ls_output)
     ev_ret_code = DATA(lv_ret_code)
     ev_err_text = DATA(lv_err_text)
     es_err_resp = DATA(ls_err_resp).
     IF lo_client->is_success( lv_ret_code ).
     MESSAGE 'Success' TYPE 'S'.
     ELSE.
     MESSAGE lv_err_text TYPE 'E'.
     ENDIF.
    * Close HTTP Connection
     lo_client->close( ).
     CATCH /goog/cx_sdk INTO DATA(lo_exception).
     MESSAGE lo_exception->get_text( ) TYPE 'E'.
    ENDTRY.