如何在填充了内部 table 的应用程序服务器上创建一个 txt 文件?

How to create a txt-file on the application server filled with an internal table?

我目前正在学习 ABAP,并得到了构建函数的任务,该函数从内部 table 创建 .txt 文件或 .csv 文件并将其保存在应用程序服务器上。 我知道您可以为此使用 GUI_DOWNLOAD,但任务是构建我自己的函数来执行此操作。

所以我得到了一个内部 table 填充,我希望将其保存为 AS 上的 .txt 文件。我在 Eclipse 中编码,顺便说一句。

有人知道如何使用函数做到这一点吗?

编辑:

这是我已经尝试过的方法:

我在函数生成器中创建了一个函数。在导入参数上,我放置了一个名称为“lv_mytab”且类型为 table.

的参数

我的函数的源代码如下所示:

*"-------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     REFERENCE(LV_MYTAB) TYPE  TABLE
*"-------------------------------------------------------------------

DATA(myfile) = '/usr/sap/S42/data/textfile.txt'.
 
OPEN DATASET myfile FOR OUTPUT IN TEXT MODE ENCODING DEFAULT WITH SMART LINEFEED.
  
LOOP AT lv_mytab into lt_table.
  
TRANSFER lt_table to myfile.
  
CLOSE DATASET myfile.  

在我的程序中,我试过这样调用函数:

CALL FUNCTION 'EXPORT_TXT_CSV_MR'
        EXPORTING
            lv_mytab            = lt_summe.

lt_summe是内部table我要导出为txt或者csv

像这样:

OPEN DATASET lv_p_app FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

LOOP AT gt_error INTO gs_final.

TRANSFER gs_final TO lv_p_app.

ENDLOOP.

CLOSE DATASET lv_p_app.

ENDIF.

这里有更多示例https://answers.sap.com/questions/3704234/download-internal-table-onto-the-application-serve.html

好的,在一位同学的帮助下,我成功了。 这是我找到的解决方案:

函数代码来源:

FUNCTION EXPORT_TXT_CSV_MR.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     REFERENCE(S_FILENAME) TYPE  STRING
*"  CHANGING
*"     REFERENCE(GT_MYTAB) TYPE  STANDARD TABLE
*"     REFERENCE(GD_VERARBEITUNG) TYPE  INT4
*"----------------------------------------------------------------------

DATA:
ld_filename TYPE string,
ld_datei type standard table of sbook,
ld_Zeile like line of ld_datei,
gd_useraction TYPE i,
lt_Ausgabe TYPE STANDARD TABLE OF sbook.



CONCATENATE '/usr/sap/S42/data/' s_filename into ld_filename.

IF gd_Verarbeitung = 1.

ld_datei = gt_mytab.

OPEN DATASET ld_filename FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

LOOP AT ld_datei into ld_Zeile.

Data(ld_string) = | Partnernummer: { ld_Zeile-customid } Betrag: { ld_Zeile-forcuram } Waehrung: { ld_Zeile-forcurkey } Name: { ld_Zeile-passname }|.

Transfer ld_string to ld_filename.

ENDLOOP.

Close dataset ld_filename.

ElseIF gd_Verarbeitung = 2.

ld_datei = gt_mytab.
*ld_filename = '/usr/sap/S42/data/CSVFile_MR.csv'.

Open Dataset ld_filename for output in text mode encoding default with SMART LINEFEED.

LOOP AT ld_datei into ld_Zeile.

ld_string = | Partnernummer: { ld_Zeile-customid } Betrag: { ld_Zeile-forcuram } Waehrung: { ld_Zeile-forcurkey } Name: { ld_Zeile-passname }|.

Transfer ld_string to ld_filename.

ENDLOOP.

Close dataset ld_filename.

ENDIF.
ENDFUNCTION.

在我的程序中我这样称呼它:

if p_txt = 'X'.

ld_txtcsv = 1.

    CALL FUNCTION 'EXPORT_TXT_CSV_MR'
        EXPORTING
            s_filename          = 'TXTFile_MR.txt'
        CHANGING
            gt_mytab            = lt_summe
            gd_verarbeitung     = ld_txtcsv.

clear ld_txtcsv.

endif.

if p_csv = 'X'.

ld_txtcsv = 2.

 CALL FUNCTION 'EXPORT_TXT_CSV_MR'
        EXPORTING
            s_filename          = 'CSVFile_MR.csv'
        CHANGING
            gt_mytab            = lt_summe
            gd_verarbeitung     = ld_txtcsv.

clear ld_txtcsv.

ENDIF.

感谢您的帮助!我现在明白了! :)