カスタム ABAP コードのインストゥルメント化
ABAP 言語は動的バイト コード インストルメンテーション(Java など)をサポートしていないため、実行時に任意の ABAP コマンドを代行受信することはできません(または、SAP で公式にはサポートされません)。
このセクションでは、自動インストルメンテーションがサポートされていない場合に便利な、手動の ABAP コード調整の手順について説明します。
このセクションでは、すでに検出されたビジネストランザクションの拡張についてのみ説明します。つまり、コードは既存のビジネストランザクションのコンテキストで実行する必要があります。そうでない場合は、モニターされません。
SAP GUI ダイアログトランザクションは、ログデータからビジネストランザクションに再構築されるため、実行時にビジネス トランザクション コンテキストは存在しません。
カスタム アクション
カスタム ABAP コードのセクションのパフォーマンスデータ収集を有効にするには、/DVD/APPD_CL_RUNTIME クラスを使用してランタイム測定を開始および停止します。
* Start action runtime measurement
/dvd/appd_cl_runtime=>action_start( iv_name = 'Custom action 1' ).
* Custom ABAP code to be monitored
....
* Stop action runtime measurement
/dvd/appd_cl_runtime=>action_stop( ).
上記のコードは、特定のアクションのコール数と合計ランタイムを収集します。これらのメトリックは、トランザクション スナップショットに保存されます(ランタイム順の上位 5 つのカスタムアクション)。
モニタ対象のアクションに対して常に action_stop( ) が呼び出されるようにします。
- アクション中に例外が発生した場合は、CATCH セクションの action_stop( ) メソッドを呼び出して測定を停止します。
- アクションを中断し、action_stop( ) コールを回避する EXIT、RETURN、またはその他のコマンドがないことを確認します。
ランタイム測定が適切に停止されない場合、パフォーマンスデータが収集されないか、誤って収集される可能性があります。
カスタム RFC exit コール
カスタム RFC コールの相関を有効にするには、次の例に示すように CALL FUNCTION ... DESTINATION 前後の ABAP コードを調整します。
* Declare local variable for AppD Correlation Header
DATA: lv_appd_header TYPE STRING.
* Start the exit call for function module and remote destination
lv_appd_header = /dvd/appd_cl_agent_rfc=>client_before_rfc(
iv_funcname = 'Z_MY_RFC_FUNCTION'
iv_destination = 'MY_RFCDEST' ).
* Custom RFC call
CALL FUNCTION 'Z_MY_RFC_FUNCTION'
DESTINATION 'MY_RFCDEST'
EXPORTING
iv_appd_header = lv_appd_header
...
IMPORTING ...
EXCEPTIONS ... .
* Stop the exitcall
/dvd/appd_cl_agent_rfc=>client_after_rfc( ).
sy-subrc = /dvd/appd_cl_agent_rfc=>sv_subrc. "restore SY-SUBRC after the call上記のコードは、RFC バックエンドへの新しい exit コールを開始します。ターゲットシステムがインストゥルメント化された ABAP または Java システムの場合、相関情報が伝播され、ターゲットシステムでビジネストランザクションが続行されます。
ターゲットシステムが ABAP の場合、RFC 宛先に関連付けられているユーザー、または RFC コールを行うユーザーは、ターゲットシステムで十分な権限を持っている必要があります。「SAP 認証」(auth. role /DVD/APPD_RFC_ABAP)を参照してください。
カスタム RFC exit コールでは、次の RFC 宛先タイプのみがサポートされます。
- ABAP 接続(タイプ「3」宛先)
- TCP/IP 接続(タイプ「T」宛先)
コードを拡張する前に、使用する宛先がサポートされている宛先タイプであることを確認してください。