① フィールドカタログ取得
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
② ALVレイアウト作成
GC_LAYOUT-COLWIDTH_OPTIMIZE = GCST_ON "カラム幅調整
GC_LAYOUT-ZEBRA = GCST_ON "ゼブラ
GC_LAYOUT-DETAIL_POPUT = P_DETAIL "詳細表示
③ ALV出力
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
通貨を表示する時、
① 当項目が通貨であることを宣言
② 当通貨が参照していいる通貨はなんであるか宣言する(etc. JPY? USD? MSEGの通貨科目)
2008年3月31日月曜日
2008年3月27日木曜日
2008年3月25日火曜日
ローカルファイルの選択方法
・ ローカルファイルを指定する際には、選択画面でファイルパス+ファイル名の形で入力する
・ XXXファイルのドロップダウンが押下さるた場合、GUIでローカルファイルを選択する
Sample:
① 画面ファイル名を取得
<汎用モジュール>
GET_DNYP_VALUE
<受け渡しパラメータ>
I_FIELD : 選択画面で指定されたローカルファイル
I_REPID : SY-CPROG(ABAP プログラム、外部プロシージャの呼び出し元)
I_DYNNR: SY-DYNNR(ABAP プログラム、現在のDynpro番号)
<受取パラメータ>
O_VALUE → LC_FILE
② ディレクトリパスの算出
SEARCH LC_FILE FOR GC_PATH ← ¥
WHILE SY-SUBRC = 0.
FIND GC_PATH IN CECTION OFFSET LI_OFF OF LC_FILE
MATCH OFFSET LI_LEN.
IF SY-SUBRC = <> 0.
LC_FILE = LC_FILE+0(LI_OFF).
ELSE.
LC_OFF = LI_LEN + 1.
ENDIF.
ENDWHILE.
③ ファイル名選択
<汎用モジュール>
TMP_GUI_FILE_OPEN_DIALOG
<受け渡しパラメータ>
WINDOW_TITLE : 固定値(アップロードファイルetc.)
DEFAULT_FILENAME: 選択画面上で指定したローカルファイル
FILE_FILTER: 固定値(*.TXT etc.)
MULTISELECTION: SPACE(固定値)
INITIAL_DIRECTORY: ②で取得したファイルパス
<受取パラメータ>
FILE_TABLE
RC
→ RCが-1でない且つ処理が正常に終了した場合、FILE_TABLEの1行目からファイル名を取得する
※ ファイル選択メソッドも使える
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
・ XXXファイルのドロップダウンが押下さるた場合、GUIでローカルファイルを選択する
Sample:
① 画面ファイル名を取得
<汎用モジュール>
GET_DNYP_VALUE
<受け渡しパラメータ>
I_FIELD : 選択画面で指定されたローカルファイル
I_REPID : SY-CPROG(ABAP プログラム、外部プロシージャの呼び出し元)
I_DYNNR: SY-DYNNR(ABAP プログラム、現在のDynpro番号)
<受取パラメータ>
O_VALUE → LC_FILE
② ディレクトリパスの算出
SEARCH LC_FILE FOR GC_PATH ← ¥
WHILE SY-SUBRC = 0.
FIND GC_PATH IN CECTION OFFSET LI_OFF OF LC_FILE
MATCH OFFSET LI_LEN.
IF SY-SUBRC = <> 0.
LC_FILE = LC_FILE+0(LI_OFF).
ELSE.
LC_OFF = LI_LEN + 1.
ENDIF.
ENDWHILE.
③ ファイル名選択
<汎用モジュール>
TMP_GUI_FILE_OPEN_DIALOG
<受け渡しパラメータ>
WINDOW_TITLE : 固定値(アップロードファイルetc.)
DEFAULT_FILENAME: 選択画面上で指定したローカルファイル
FILE_FILTER: 固定値(*.TXT etc.)
MULTISELECTION: SPACE(固定値)
INITIAL_DIRECTORY: ②で取得したファイルパス
<受取パラメータ>
FILE_TABLE
RC
→ RCが-1でない且つ処理が正常に終了した場合、FILE_TABLEの1行目からファイル名を取得する
※ ファイル選択メソッドも使える
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
サーバ上のライル指定方法
・ サーバ上の処理対象ファイルのパスを「XXXデータファイルパス」で指定する
・ サーバ上の処理対象ファイル名を「XXXデータファイル名」で指定する
実装Sample:
汎用モジュール: FILE_GET_NAME_USING_PATH、XXXデータファイルの物理ファイルパスを取得する。
<汎用モジュール>
FILE_GET_NAME_USING_PATH
<受け渡し項目>
論理パス : 選択画面上で指定されたファイルパス
ファイル名: 選択画面上で指定されたファイル名
<取得項目>
パス付きのファイル名
・ サーバ上の処理対象ファイル名を「XXXデータファイル名」で指定する
実装Sample:
汎用モジュール: FILE_GET_NAME_USING_PATH、XXXデータファイルの物理ファイルパスを取得する。
<汎用モジュール>
FILE_GET_NAME_USING_PATH
<受け渡し項目>
論理パス : 選択画面上で指定されたファイルパス
ファイル名: 選択画面上で指定されたファイル名
<取得項目>
パス付きのファイル名
2008年3月19日水曜日
BAdiについて(1)
ユーザーEXIT、カスタマーEXIT、ビジネスアドイン(BAdi)、OPEN FIなど拡張の技術は様々であるが、これらが存在する理由としては、企業固有の業務や特殊なロジックを標準のR/3の機能だけで表現していくには限界があり、それを実現していくのユーザーモディフィケーションである。
各手法の自由度、実装方法は違うが、バージョンアップ、ノート適用、バッチ適用などの影響を最小限にするため、BAdiはよりスタンダード的な技術になっていく。
BAdiの実装方法
① 定義[SE18]
② 実装[SE19]
③ クラスビルダ[SE24]
④ 実装の有効化[SE24]
BAdi定義の検索方法
①[SE84]
②実装内容確認:
i.SE37 SXV_GET_CLIF_BY_NAME
ii.確認TRを起動
各手法の自由度、実装方法は違うが、バージョンアップ、ノート適用、バッチ適用などの影響を最小限にするため、BAdiはよりスタンダード的な技術になっていく。
BAdiの実装方法
① 定義[SE18]
② 実装[SE19]
③ クラスビルダ[SE24]
④ 実装の有効化[SE24]
BAdi定義の検索方法
①[SE84]
②実装内容確認:
i.SE37 SXV_GET_CLIF_BY_NAME
ii.確認TRを起動
2008年3月12日水曜日
ABAPからPDFファイルを作成する
用件:
・ レポートをバックグラウンド処理にてPDFファイルとしてファイルサーバーに保存する
方法:
・汎用モジュールCONVERT_ABAPSPOOLJOB_2_PDFを実行
(参照PG:PTRA_WEB_EXPENSE_FORM_PDF_GET)
手順:
1. ファイルサーバーに臨時保存ファイルののパス、ファイルを作成する
・ パス、ファイル名を指定して、Commondの Open、Transferを利用してファイルを作成する
2. スプールを作成する
① GET_PRINT_PARAMETERSを利用して、パラメータをセットする
取得値: DATA_SET ← スプールテーブル名の初期値
LIST_NAME ← スプール依頼名の初期値
OUT_PARAMETERS ← コールされた印刷パラメータ一覧
② スプールを作成する(SUBMIT rep TO SAP-SPOOL)
例:
SUBMIT XXX
TO SAP-SPOOL
SPOOL PARAMETERS OUT_PARAMETERS
WITHOUT SPOOL DYNPRO
AND RETURN.
・ABAP 命令の NEW-PAGE PRINT ON を使用し 、レポートからの印刷機能を有効にし、ス
プールを作成する方法もある。
3. スプールIDを取得する(汎用モジュール:RSPO_FIND_SPOOL_REQUESTS)
I/F: DATA_SET、LIST_NAME
取得値: L_SPOOL_IDS
4. スプールをPDFに変換する(汎用モジュール:CONVERT_ABAPSPOOLJOB_2_PDF)
I/F: SRC_SPOOLID = 'XXX' " ← 3.で取得したスプール番号
5. 汎用モジュールDOWNLOADを利用して、PDFファイルを取得する
問題点: サーバーへ格納するのは直接DOWNLOADを利用できるかなぁ?
→
① サーバーへ格納する時、OPEN DATASETとTRANSFERを利用する
EXAMPLE:
LC_OUTPUT_FILE_PATH = '/SAP/UP/TESTPDF.PDF.
OPEN DATASET LC_OUTPUT_FILE_PATH FOR OUTPUT IN BINARY MODE.
LOOP AT LIT_PDF_TABLE INTO LFC_PDF_TABLE
TRANSFER LFC_PDF_TABLE TO LC_OUTPUT_FILE_PATH.
ENDLOOP.
CLOSE DATASET LC_OUTPUT_FILE_PATH.
② GUI_UPLOADはローカルのファイルを内部テーブルに格納する
・ レポートをバックグラウンド処理にてPDFファイルとしてファイルサーバーに保存する
方法:
・汎用モジュールCONVERT_ABAPSPOOLJOB_2_PDFを実行
(参照PG:PTRA_WEB_EXPENSE_FORM_PDF_GET)
手順:
1. ファイルサーバーに臨時保存ファイルののパス、ファイルを作成する
・ パス、ファイル名を指定して、Commondの Open、Transferを利用してファイルを作成する
2. スプールを作成する
① GET_PRINT_PARAMETERSを利用して、パラメータをセットする
取得値: DATA_SET ← スプールテーブル名の初期値
LIST_NAME ← スプール依頼名の初期値
OUT_PARAMETERS ← コールされた印刷パラメータ一覧
② スプールを作成する(SUBMIT rep TO SAP-SPOOL)
例:
SUBMIT XXX
TO SAP-SPOOL
SPOOL PARAMETERS OUT_PARAMETERS
WITHOUT SPOOL DYNPRO
AND RETURN.
・ABAP 命令の NEW-PAGE PRINT ON を使用し 、レポートからの印刷機能を有効にし、ス
プールを作成する方法もある。
3. スプールIDを取得する(汎用モジュール:RSPO_FIND_SPOOL_REQUESTS)
I/F: DATA_SET、LIST_NAME
取得値: L_SPOOL_IDS
4. スプールをPDFに変換する(汎用モジュール:CONVERT_ABAPSPOOLJOB_2_PDF)
I/F: SRC_SPOOLID = 'XXX' " ← 3.で取得したスプール番号
5. 汎用モジュールDOWNLOADを利用して、PDFファイルを取得する
問題点: サーバーへ格納するのは直接DOWNLOADを利用できるかなぁ?
→
① サーバーへ格納する時、OPEN DATASETとTRANSFERを利用する
EXAMPLE:
LC_OUTPUT_FILE_PATH = '/SAP/UP/TESTPDF.PDF.
OPEN DATASET LC_OUTPUT_FILE_PATH FOR OUTPUT IN BINARY MODE.
LOOP AT LIT_PDF_TABLE INTO LFC_PDF_TABLE
TRANSFER LFC_PDF_TABLE TO LC_OUTPUT_FILE_PATH.
ENDLOOP.
CLOSE DATASET LC_OUTPUT_FILE_PATH.
② GUI_UPLOADはローカルのファイルを内部テーブルに格納する
2008年3月5日水曜日
アプリケーションサーバへタブ区切りでファイルを出力する
1. 出力内容をタブ区切りでセットする
2. 出力内容をアプリケーションサーバのファイルへ渡す
CONSTANTS:
GCST_TAB TYPE C VALUE CL_ABAP_CHAR_LTILITIES=>HORIZONTAL_TAB.
CONCATENATE A B C
INTO D
SEPARATED BY GCST_TAB.
TRANSFER D TO LC_FILE_PATH.
2. 出力内容をアプリケーションサーバのファイルへ渡す
CONSTANTS:
GCST_TAB TYPE C VALUE CL_ABAP_CHAR_LTILITIES=>HORIZONTAL_TAB.
CONCATENATE A B C
INTO D
SEPARATED BY GCST_TAB.
TRANSFER D TO LC_FILE_PATH.
登録:
投稿 (Atom)