2008年3月31日月曜日

ALV形式でレポートを出力

① フィールドカタログ取得
   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の通貨科目)
  

メッセージ管理

メッセージ管理テーブル:T100

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データファイルパス」で指定する
・ サーバ上の処理対象ファイル名を「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を起動

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はローカルのファイルを内部テーブルに格納する

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.