このトピックでは、BTEの検索方法を取り上げて説明します。
検索機能利用
BTEを検索するには、SAP標準から以下のトランザクションが用意されています。
- BERE
Publish and Subscribe Interface検索 - BERP
Process Interface検索
上記のトランザクションはトランザクションコードを直接入力するほか、FIBFの「環境」メニューからも起動することができます。
BERE利用
BERP利用
プログラム内一括検索
BTEを呼び出すには、必ず「OPEN_FI_PERFORM_~」という名前の汎用モジュールを使用しているため、OPEN_FI_PERFORMというキーワードで、標準プログラムのソースを一括検索すれば、該当標準プログラムからどんなBTEを呼び出しているかが分かります。 OpenFIという呼び方はここから由来しているものと見受けられます。 汎用モジュール名の最後は必ずE或いはPが付けられており、EはPublish and Subscribe Interface、PはProcess Intefaceを示しております。
会計伝票を転記するプログラムSAPMF05Aを例として、プログラム内の一括検索方法を示します。
BTEは当初FIモジュールの業務拡張方法として導入されて、その後別のもじゅーるにも利用できるような汎用的な拡張方法に変わったため、FI以外のモジュールでBTEを呼び出す汎用モジュールも同じく「OPEN_FI_PERFORM_~」のような名前を付けております。
ALV出力時の項目カテゴリ制御は主に以下三つの方法があります。
- 自動生成
- マニュアル生成
- 半自動生成
このトピックでは、各方法をそれぞれ取り上げて説明します。
自動生成
出力テーブルの構造がデータディクショナリに定義されている場合、汎用モジュールを呼び出す際に入力パラメータI_STRUCTURE_NAMEで構造体の名前を指定することにより、項目カテゴリは内部に自動的に生成されることになります。 ここで注意すべきのは、出力テーブルは必ず該当構造体を使って定義しなけれなりません。そうではない場合、なかみが同じでも、実行時ランタイムエラーが発生します。
16をこのやり方で見直す場合、ABAPディクショナリに該当構造体を定義しておけば、以下のようにソースプログラムがすごくシンプルになります。
REPORT YLWF_ALV_FC_AUTO. *ALV用のタイププール TYPE-POOLS: slis. TYPES ttbl_account_doc TYPE STANDARD TABLE OF YLWF_FC_AUTO_STRUC. DATA g_account_doc TYPE YLWF_FC_AUTO_STRUC. DATA gtbl_account_doc TYPE ttbl_account_doc. DATA: g_bukrs TYPE bukrs. SELECTION-SCREEN BEGIN OF BLOCK LAYOUT WITH FRAME . SELECT-OPTIONS: S_BUKRS FOR g_bukrs. SELECTION-SCREEN END OF BLOCK LAYOUT. START-OF-SELECTION. SELECT bukrs belnr gjahr buzei pswbt pswsl FROM bseg INTO CORRESPONDING FIELDS OF TABLE gtbl_account_doc UP TO 10 ROWS WHERE bukrs in s_bukrs. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_structure_name = 'YLWF_FC_AUTO_STRUC' i_grid_title = '伝票照会' TABLES t_outtab = gtbl_account_doc EXCEPTIONS OTHERS = 0 .
マニュアル生成
データディクショナリでは、テーブルデータ型LVC_T_FCAT によって項目カタログが定義されています。項目カタログテーブルの各行には、出力テーブルの項目が記述されています。 項目カタログのマニュアル生成は、上記のテーブルを作成して、汎用モジュールを呼び出す際に入力パラメータIT_FIELDCATとして受け渡します。
実装の詳細は、16をご参照ください。
半自動生成
項目カタログの半自動生成は、
- ABAPディクショナリーの構造体から項目カタログを自動生成する
- 自動生成された項目カタログに対してマニュアル修正を加える
というプロセスになります。
ABAPディクショナリーの構造体から項目カタログを自動生成するには、汎用モジュールLVC_FIELDCATALOG_MERGEを使用します。
ALVを出力する前に、選択画面でユーザにALVの出力レイアウトを指定してもらう場面があります。 このトピックでは、16を元に出力レイアウト選択機能を追加する例を取り上げて説明します。
プログラムの実装
変数の定義を追加
DATA: g_variant TYPE disvariant. DATA: VG_SAVE TYPE CHAR1, VG_EXIT TYPE CHAR1, VG_VARIANT TYPE DISVARIANT, VG_VARIANT_EX TYPE DISVARIANT.
選択パラメータを追加
PARAMETERS: P_LAYOUT TYPE DISVARIANT-VARIANT.
初期化処理を追加
初期化処理で、デフォルトのバリアント値を取得して自動提案します。
INITIALIZATION. VG_SAVE = 'A'. "ユーザ定義レイアウトとグローバルレイアウトの両方を保存できます。 VG_VARIANT-REPORT = SY-REPID. VG_VARIANT_EX = VG_VARIANT.
- バリアントの初期化
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
I_SAVE = VG_SAVE
CHANGING
CS_VARIANT = VG_VARIANT_EX
EXCEPTIONS
WRONG_INPUT = 1
NOT_FOUND = 2
PROGRAM_ERROR = 3
OTHERS = 4.
IF SY-SUBRC = 0.
P_LAYOUT = VG_VARIANT_EX-VARIANT.
ENDIF.
検索ヘルプ実装
* AT SELECTION-SCREEN 選択画面:レイアウトのヘルプ設定
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LAYOUT .
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
IS_VARIANT = VG_VARIANT
I_SAVE = VG_SAVE
IMPORTING
E_EXIT = VG_EXIT
ES_VARIANT = VG_VARIANT_EX
EXCEPTIONS
NOT_FOUND = 1
PROGRAM_ERROR = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
IF VG_EXIT = SPACE.
P_LAYOUT = VG_VARIANT_EX-VARIANT.
ELSE.
ENDIF.
ENDIF.
入力チェックを追加
入力チェック処理で、入力されたレイアウトバリアント値が存在するかどうかをチェックします。
AT SELECTION-SCREEN.
IF P_LAYOUT IS NOT INITIAL.
VG_VARIANT-VARIANT = P_LAYOUT.
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
I_SAVE = VG_SAVE
CHANGING
CS_VARIANT = VG_VARIANT
EXCEPTIONS
WRONG_INPUT = 1
NOT_FOUND = 2
PROGRAM_ERROR = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
レイアウト選択値を反映
汎用モジュールを呼び出してALV一覧出力を行う時、汎用モジュールの入力パラメータとしてレイアウトの選択値を受け渡します。
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_pf_status_set = 'PF_STATUS_SIMP'
it_fieldcat = gtbl_fieldcat i_structure_name = 'YLWF_AL'
is_layout = g_layout
IS_VARIANT = VG_VARIANT
i_save = VG_SAVE
TABLESt_outtab = gtbl_account_doc
EXCEPTIONS
program_error = 0
OTHERS = 0このトピックでは、ALVコントロールを利用したALV出力実装の基本方法を取り上げて説明します。
宣言
イベントキャッチ
*---------------------------------------------------------------------* * クラス イベントキャッチ(定義) * CLASS lcl_event_receiver DEFINITION *---------------------------------------------------------------------* CLASS LCL_EVENT_RECEIVER DEFINITION . PUBLIC SECTION. * 選択行のダブルクリックイベント * CATCH THELINE BOUBLECLICK EVENT METHODS CATCH_DOUBLECLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING E_ROW E_COLUMN. * グリッドのツールバー(PDFボタン=オン) * CATCH THE TOOLBAR'S PDF BUTTON METHODS HANDLE_TOOLBAR_PDF FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID IMPORTING E_OBJECT. * グリッドのコマンド * CATCH THE GRID COMMAND EVENT METHODS HANDLE_UCOMM FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID IMPORTING E_UCOMM . ENDCLASS. "lcl_event_receiver DEFINITION
ALV出力用コンテナ対象
DATA VG_GRID TYPE REF TO CL_GUI_ALV_GRID.
ALVイベントキャッチ
DATA: EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.
コントロールの実例化
ALV出力用コンテナ対象をインスタンス化する。
CREATE OBJECT VG_GRID EXPORTING I_PARENT = CL_GUI_CONTAINER=>SCREEN0.
カタログの作成
ALV出力
CALL METHOD VG_GRID->SET_TABLE_FOR_FIRST_DISPLAY EXPORTING IS_LAYOUT = WL_SLA CHANGING IT_OUTTAB = TG_ALV[] IT_FIELDCATALOG = TG_FIELDCAT[] EXCEPTIONS INVALID_PARAMETER_COMBINATION = 1 PROGRAM_ERROR = 2 TOO_MANY_LINES = 3 OTHERS = 4. CALL METHOD VG_GRID->SET_READY_FOR_INPUT " EXPORTING I_READY_FOR_INPUT = 1.
イベント処理の設定
ALV出力用イベント対象をインスタンス化します。
CREATE OBJECT EVENT_RECEIVER.
ALV出力用イベント「ダブルクリック」を実装します。
SET HANDLER EVENT_RECEIVER->CATCH_DOUBLECLICK FOR VG_GRID.
「ツールバー」イベントを実装します。
SET HANDLER EVENT_RECEIVER->HANDLE_TOOLBAR_FAX FOR VG_GRID
ALV表示
ALVを再表示します。
CALL METHOD VG_GRID->REFRESH_TABLE_DISPLAY EXPORTING
IS_STABLE = WL_STABLE.
このトピックでは、ALVの項目カタログを取り上げて説明します。
概要
項目カタログは、ALVで出力される各列(項目)のデータ型情報等が定義されます。 項目カタログに格納される定義情報は、以下のように分類することができます。
- 項目名
内部出力テーブルの項目名を指定します。列定義構造体のキー項目になります。 - データ型情報
ABAPデータ型や出力長などの情報が定義されます。
ABAPディクショナリーの項目を参照して定義するとマニュアルで定義するとの2パターンがあります。 - 単位や通貨情報
数量や金額などの項目は、それぞれ関連する単位や通貨の情報を定義する必要があります。 - 列の書式情報
- 列の出力オプション
項目カタログの項目
項目カタログの項目一覧は下記のリンクをご参考ください。 項目カタログの項目-SAP Help Portal
項目カタログの生成
基本的に、ALVを使用して表示する一覧ごとに項目カタログが必要です。項目カタログを生成する方法として、以下の方法があります。
- データディクショナリ構造を使用して自動的に生成
- ABAPプログラムでマニュアル生成
- 上記の2 つの方法を組み合わせて半自動的に生成
外部リンク
このトピックでは、ツールバー関連のプログラミングを取り上げて説明します。
機能固有のボタンを追加
関連技術
自動的に設定される選択画面の GUI ステータスでは、 アプリケーションツールバーに無効な 押ボタンが 5 つあり、これらに機能コード FC01 から FC05 までが割り当てられ ています。この命令を使用すると、機能コード FC0n の押ボタンが有効化されます。 n には 1 と 5 の間にある値を入力しなければなりません。 押ボタンを使用できるようにするには、 TABLES 命令を使用して、ABAP ディクショナリに由来する構造 SSCRFIELDS の インタ フェース作業領域を宣言しなければなりません。 選択画面を呼び出す前にインタフェース領域 sscrfields のコンポーネント functxt_0n にテキスト が割り当てられていると、 このテキストが該当の押ボ タン上に表示されます。割 り当てられていないと、押 ボタンにテキストは表示されません。
サンプル
SAP標準のMIR5請求書一覧照会トランザクションのエキスパートモード機能の実装を例として解説します。 * 画面イメージ * 機能概要 「エキスパートモード」ボタンを押下により、エキスパートモードの表示/非表示を切り替える * 実装詳細 ①選択画面の定義に対象機能コードのボタンを有効にする
SELECTION-SCREEN FUNCTION KEY 1.
②INITIALIZATIONイベントブロックでボタンの初期表示テキストを設定
sscrfields-functxt_01 = text-001. "エキスパートモード
③AT SELECTION /AT USER-COMMANDイベントブロックでボタン押下イベントを処理
CASE sscrfields-ucomm. WHEN 'FC01'. IF status_expert = c_hide."元々エキスパートモードが閉じれれた場合 status_expert = c_show. "エキスパートモードフラグをONにする sscrfields-functxt_01 = text-007."ボタンテキストを「エキスパートモード非表示」に ELSE. "元々エキスパートモードがオープンれれた場合 status_expert = c_hide."エキスパートモードフラグをOFFにする sscrfields-functxt_01 = text-001. "ボタンテキストを「エキスパートモード」に ENDIF. ENDCASE.
④AT SELECTION-SCREEN OUTPUTイベントブロックでエキスパートモード項目の表示/非表示を切り替え
LOOP AT SCREEN. CASE screen-group1. WHEN 'F'. IF status_expert = c_show. screen-active = 1. SET CURSOR FIELD 'PA_FIDOC'. ELSE. screen-active = 0. ENDIF. MODIFY SCREEN. ENDCASE. ENDLOOP.