データファイルのアップロードとダウンロード

本文介绍了如何使用ABAP进行文件操作,包括获取数据文件的物理路径、文件的上传和下载过程、排他锁处理等关键步骤,并提供了具体的操作方法和代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

■ サーバファイル

 ① データファイルの保存先を取得(論理バス(T-cd:file) → 物理パス)

 CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
    EXPORTING
      LOGICAL_PATH                     = LOGIC_FILEPATH  " 論理バス
      FILE_NAME                        = LOGIC_FILENAME  " ファイル名
    IMPORTING
      FILE_NAME_WITH_PATH              = PHYS_FILEPNAME          " 物理パス+ファイル名
    EXCEPTIONS
      PATH_NOT_FOUND                   = 1
      MISSING_PARAMETER                = 2
      OPERATING_SYSTEM_NOT_FOUND       = 3
      FILE_SYSTEM_NOT_FOUND            = 4
      OTHERS                           = 5.

  ※必要があれば、汎用モジュール「SPLIT_FILENAME」を利用して、完全パスからパスとファイル名を分離可能です。
 
 
 ② ファイルダウンロード場合、排他ロック処理
  
 CALL FUNCTION 'ENQUEUE_E_TABLE'
    EXPORTING
      MODE_RSTABLE   = 'X'
      TABNAME        =
      VARKEY         =   "ファイル名
    EXCEPTIONS
      FOREIGN_LOCK   = 1
      SYSTEM_FAILURE = 2
      OTHERS         = 3.
 
 ③ ファイルのアップロードとダウンロード
  
  ・ファイルオープン
   OPEN DATASET PHYS_FILEPNAME
     FOR INPUT(ダウンロード)/ FOR OUTPUT(アップロード)
                   IN BINARY/TEXT MODE.
    
    ・データの読込と転送
   READ DATASET PHYS_FILEPNAME INTO itab.  (ダウンロード)
   TRANSFER itab TO PHYS_FILEPNAME         (アップロード)
   
      ※一般的、内部テーブル:itabの項目タイプはC(length:レコードの最大文字数)である。
 ですので、内部テーブル:itab ⇔ 業務内部テーブルに変更しなければならない。
 
   ・ダウンロードの場合、(READ DATASET後) 内部テーブル:itab ⇒ 業務内部テーブル
 SPLIT命令を利用して、内部テーブル:itabの区切り符号
 (例えば:TABコード(CL_ABAP_CHAR_UTILITIES=>horizontal_tab))に従い、
     内部テーブル:itab の内容が分割 されます 
       
 DESCRIBE FIELD stru2(業務構造) LENGTH ilen IN CHARACTER MODE.
 
 LOOP AT itab INTO stru1.
       stru2 = stru1-char2000(ilen).
          APPEND stru2 TO itab2(業務内部テーブル).
        ENDLOOP.

   ・ アップロードの場合、(TRANSFER前)  業務内部テーブル ⇒ 内部テーブル:itab
 CONCATENATE命令(SEPARATED BY 区切り符号)を利用して、
    業務内部テーブルの各項目が連結されます

  ・ファイルクローズ
   CLOSE DATASET PHYS_FILEPNAME

 ④ ファイルダウンロード場合、排他ロック解除処理 
  CALL FUNCTION 'DEQUEUE_E_TABLE'
    EXPORTING
      MODE_RSTABLE = 'X'
      TABNAME      =
      VARKEY       =


■ ローカルファイル
 
 ① ファイルを保存ダイアログを表示
 CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    CHANGING
      FILENAME             = FILENAME
      PATH                 = PATH
      FULLPATH             = FULLPATH
    EXCEPTIONS
      CNTL_ERROR           = 1
      ERROR_NO_GUI         = 2
      NOT_SUPPORTED_BY_GUI = 3
      OTHERS               = 4
          .

 ② ファイルのアップロードとダウンロード
 
  * アップロード
 CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
    EXPORTING
      FILENAME                  = FULLPATH
      FILETYPE                  = 'DAT'
    CHANGING
      DATA_TAB                  = itab
          .
 
  * ダウンロード
 CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
    EXPORTING
      FILENAME                  = FULLPATH
      FILETYPE                  = 'DAT'
    CHANGING
      DATA_TAB                  = itab
          .

在 SAP 的ドリルダウンレポート(Drill Down Report)において、リード列(Lead Column)を設定することで、特定の列を基準にデータの展開や集計が行われるようにカスタマイズできます。リード列は通常、レポート内の階層構造における最上位の項目として機能し、他の列がその列に対して相対的に表示されます。 ### リード列を設定する手順 1. **SAP グリッドコントロール(ALV Grid Control)を使用したレポートを開く** 一般的にドリルダウンレポートは ALV(ABAP List Viewer)を利用して表示されます。レポート実行後、グリッドビューが表示される必要があります。 2. **レポートのレイアウトを変更するためのダイナミックアクションまたは GUI ステートを利用する** プログラム内でリード列を指定するには、`SET_LEAD_SELECTION_COLUMN` メソッドを使用します。これは CL_GUI_ALV_GRID クラスのメソッドであり、特定のカラムをリード列として設定します[^1]。 ```abap CALL METHOD alv_grid->set_lead_selection_column EXPORTING i_colname = 'MATNR'. " リード列として設定するフィールド名 ``` 3. **レイアウト設定でリード列を明示する(トランザクション SE80 などでのカスタマイズ)** - トランザクション SE80 を使用して ALV レイアウトを編集する場合、`LVC_S_LAYO` 構造体の `SEL_MODE` フィールドに「1」を設定すると、リード列として扱われます。 - フィールドカタログ内で該当列の `EMPHASIZE` フィールドにフラグを立てることで、視覚的にも区別できるようになります[^1]。 4. **ユーザーエクジットまたは BAdI を利用して動的に設定する(必要に応じて)** 特定のビジネスロジックに基づいてリード列を変更したい場合は、ユーザーエクジット(USEREXIT_FIELD_CATALOG 或いは USEREXIT_SET_LEAD_SELECTION_COLUMN)を利用します。 5. **レポートの実行時にもユーザーによるレイアウト変更が可能** ユーザーはレポート画面から「レイアウト変更」を選択し、任意の列をリード列に設定することも可能です。この操作は、GUI 上でドラッグ&ドロップによって行われます[^1]。 ### 注意点 - リード列はドリルダウン動作において非常に重要な役割を果たすため、選定には注意が必要です。不適切な列を設定すると、集計結果が意図したものと一致しなくなる可能性があります。 - レポート設計段階で、どの列が階層構造の起点となるかを明確にしておくことが推奨されます。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值