将文件从Presentation Server本地文件夹移动到AL11,而无需在后台模式下使用FTP

2020-09-07 18:24发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

我需要在不使用FTP的情况下将" .txt"文件从本地文件夹移动到AL11,在后台模式下。 当前正在使用FM ARCHIVFILE_CLIENT_TO_SERVER。

当我在SCN中搜索时,有人发布了如下内容。

使用FM" C13Z_FILE_UPLOAD_ASCII"以批处理模式将文件上传到应用程序服务器,然后使用打开数据集读取数据集和关闭数据集。

我很累但没有运气。

任何建议。

此致

Ishwarya

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

我需要在不使用FTP的情况下将" .txt"文件从本地文件夹移动到AL11,在后台模式下。 当前正在使用FM ARCHIVFILE_CLIENT_TO_SERVER。

当我在SCN中搜索时,有人发布了如下内容。

使用FM" C13Z_FILE_UPLOAD_ASCII"以批处理模式将文件上传到应用程序服务器,然后使用打开数据集读取数据集和关闭数据集。

我很累但没有运气。

任何建议。

此致

Ishwarya

付费偷看设置
发送
8条回答
哎,真难
1楼 · 2020-09-07 18:52.采纳回答

注意:C13Z_FILE_UPLOAD_ASCII(C13Z_UPLOAD)使用GUI类从演示服务器上载文件,因此答案错误或您在上下文之外使用它。 不要忘记演示服务器没有在后台定义。 ARCHIVFILE_CLIENT_TO_SERVER(SCMS_DOWNLOAD)使用FTP。

如果您不想使用FTP(为什么?),请询问是否将目录定义为共享文件夹并将其映射到应用程序服务器上,因此AL11将显示 它可以使用DATASET语句。

追夢秋陽
2楼-- · 2020-09-07 19:00

这是从AL1读取的内容

宇峰Kouji
3楼-- · 2020-09-07 18:52

您好,Ishwarya,

背景意味着.txt文件将如何传递到您的程序?

能否请您详细解释一下您的要求?

致谢

Raju C D

hongfeng1314
4楼-- · 2020-09-07 19:08

感谢雷蒙德的回复! 我希望知道除FTP之外的所有其他可能性。

对不起,我目前还不清楚,请问是否将目录定义为共享文件夹并将其映射到应用程序服务器上。

如果这样做,AL11中是否可以使用本地文件夹中的文件? 仅在Windows Server中会发生上述问题吗?

clever101
5楼-- · 2020-09-07 18:52

感谢各种见解。.

 SPAN {
 字体家族:" Courier New";
 字体大小:10pt;
 颜色:#000000;
 背景:#FFFFFF;
 }
 .L0S31 {
 字体样式:斜体;
 颜色:#808080;
 }
 .L0S32 {
 颜色:#3399FF;
 }
 .L0S33 {
 颜色:#4DA619;
 }
 .L0S52 {
 颜色:#0000FF;
 }
 .L0S55 {
 颜色:#800080;
 }
 .L0S70 {
 颜色:#808080;
 }

 *&------------------------------------------------  --------------------- *

 *&报告ZZ_ALL11_UP_DOWN

 *&------------------------------------------------  --------------------- *

 *&

 *&------------------------------------------------  --------------------- *

 报告zz_al11_down_up。



 表格:可旋转。



 常量:c_execute_command类型sy-ucomm值'ONLI'。



 具有帧标题lv_t1的第1块的选择屏幕开始。

 参数gv_rb1类型c RADIOBUTTON GROUP对接默认'X'。

 参数gv_rb2 TYPE C RADIOBUTTON GROUP对接。

 参数gv_rb3 TYPE C RADIOBUTTON GROUP对接。

 选择屏幕的结尾1。



 选择选项:so_asfil FOR rovertable-filename没有间隔。  " RLGRAP-FILENAME。

 参数:p_out TYPE字符串默认值'C:\ temp'小写。





 参数:p_addext类型c AS CHECKBOX DEFAULT"。



 数据:ls_asfil,就像so_asfil的行一样,

       ls_subrc类型为sy-subrc。



 在p_out值请求的选择屏幕上。

   DATA:lv_selected_folder TYPE字符串。

   呼叫方法cl_gui_frontend_services => directory_browse

     改变

       selected_folder = lv_selected_folder

     例外情况

       cntl_error = 1

       error_no_gui = 2

       not_supported_by_gui = 3

       其他= 4。

   如果sy-subrc <> 0。

     消息ID sy-msgid类型sy-msgty编号sy-msgno

                与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。

   万一。



   p_out = lv_selected_folder。



 在选择屏幕上。

   如果sy-ucomm = c_execute_command。

     执行check_directory。

   万一。



 在SELECT-SCREEN上对so_asfil-low的值请求。

 *******************

   PERFORM z30_get_filename更改so_asfil-low。



 选择开始。

 *如果选择下载到桌面

 如果gv_rb1 ='X'。

  循环至so_asfil INTO ls_asfil。

  使用ls_asfil-low p_out执行下载。

  执行show_msg。

 结局。



 ELSEIF gv_rb2 ='X'。  "选择了"上载到应用程序服务器"



 循环至so_asfil INTO ls_asfil。

 BREAK-POINT。

 使用ls_asfil-low p_out ls_subrc执行上传。

 使用ls_subrc执行show_upd_msg。

 结局。



 ELSEIF gv_rb3 ='X'。  "已选择从应用程序服务器删除文件



 循环至so_asfil INTO ls_asfil。

   使用ls_asfil-low ls_subrc执行delete_from_as。

   使用ls_subrc执行show_del_msg。

 结局。

 万一。



 FORM delete_from_as使用

       pv_dimfile TYPE本地文件

       更改lv_subrc类型sy-subrc。

 *从文件名中修剪路径

 * .//BU_LINE-> BU_LINE

 数据:

 文件大小为类型epsf-epsfilsiz,

 filenm TYPE epsfilnam,

 文件路径类型epsdirnam,

 lv_string TYPE字符串," VALUE'.//BU_LINE",

 lv_len TYPE i,

 lv_pos TYPE i,

 lv_last_occ类型i。



 将pv_dimfile移动到lv_string。



 lv_len = strlen(lv_string)。

 做。

 搜索lv_string FOR'/'。

 如果sy-subrc ='0'。

 lv_pos = sy-fdpos + 1。

 lv_len = lv_len-sy-fdpos-1。

 lv_string = lv_string + lv_pos(lv_len)。

 lv_last_occ = lv_last_occ + sy-fdpos + 1。

 其他。

 出口。

 万一。

 ENDDO。

 *文件名是

 filenm = lv_string。

 *路径为

 文件路径= pv_dimfile(lv_last_occ)。



 *检查文件是否存在

   通话功能'EPS_GET_FILE_ATTRIBUTES'

    出口

      file_name = filenm

 * IV_LONG_FILE_NAME =

      dir_name =文件路径

 * IV_LONG_DIR_NAME =

    输入

      file_size =文件大小

 * FILE_OWNER =

 * FILE_MODE =

 * file_type = filetyp

 * FILE_MTIME =

 * FILE_SIZE_LONG =

    例外情况

      read_directory_failed = 1

      read_attributes_failed = 2

      其他= 3

             。

   如果sy-subrc <> 0。

 *在这里实施适当的错误处理

    lv_subrc = sy-subrc。

   其他。

   通话功能'EPS_DELETE_FILE'

    出口

      file_name = filenm" VERSION

 * IV_LONG_FILE_NAME =

      dir_name =文件路径" .//

 * IV_LONG_DIR_NAME =

 *重要

 * FILE_PATH =

 * EV_LONG_FILE_PATH =

 *例外情况

 * INVALID_EPS_SUBDIR = 1

 * SAPGPARAM_FAILED = 2

 * BUILD_DIRECTORY_FAILED = 3

 * NO_AUTHORIZATION = 4

 * BUILD_PATH_FAILED = 5

 * DELETE_FAILED = 6

 *其他= 7

             。

   如果sy-subrc <> 0。

 *在这里实施适当的错误处理

     lv_subrc = sy-subrc。

   万一。



   万一。



 ENDFORM。



 表格show_msg。

   带有文本004的消息s398(00)。"文件下载成功!

 ENDFORM。  " show_msg





 使用p_subrc类型sy-subrc的FORM show_upd_msg。

   如果p_subrc = 0。

   带有文本003的消息s398(00)。"文件已成功上传!

   其他。

   带有文本002的消息s398(00)。"上传文件时出错!

   万一。

 ENDFORM。  " show_msg



 FORM show_del_msg使用p_subrc类型sy-subrc。

   如果p_subrc = 0。

   带有文本005的消息s398(00)。"文件已成功删除!

   其他。

   带有文本006的消息s398(00)。"文件删除错误!



   万一。

 ENDFORM。  " show_del_msg





 FORM上传使用pv_dimfile TYPE localfile

       out_path TYPE字符串

       更改lv_subrc类型sy-subrc。



 数据:lv_dimfile类型SAPB-SAPPFAD,

       ls_out_path TYPE SAPB-SAPPFAD,

       lv_out_path类型SAPB-SAPPFAD。

 数据:

 文件大小为类型epsf-epsfilsiz,

 filenm TYPE epsfilnam,

 文件路径类型epsdirnam,

 lv_string TYPE字符串," VALUE'.//BU_LINE",

 lv_len TYPE i,

 lv_pos TYPE i,

 lv_last_occ类型i。



 移动:pv_dimfile至lv_string,

       ls_out_path的out_path。



 lv_len = strlen(lv_string)。

 做。

 搜索lv_string FOR'/'。

 如果sy-subrc ='0'。

 lv_pos = sy-fdpos + 1。

 lv_len = lv_len-sy-fdpos-1。

 lv_string = lv_string + lv_pos(lv_len)。

 lv_last_occ = lv_last_occ + sy-fdpos + 1。

 其他。

 出口。

 万一。

 ENDDO。

 *文件名是

 filenm = lv_string。

 *路径为

 文件路径= pv_dimfile(lv_last_occ)。



 CONCATENATE out_path filenm INTO ls_out_path用'\'分隔。

 移动:pv_dimfile到lv_out_path,

       lv_dimfile的ls_out_path。



 如果p_addext ='X'。

 将lv_dimfile'.txt'并入lv_dimfile。

 CONCATENATE lv_out_path'.txt'INTO lv_out_path。

 万一。



 通话功能'ARCHIVFILE_CLIENT_TO_SERVER'

   出口

     路径= lv_dimfile

     targetpath = lv_out_path

  例外情况

    error_file = 1

    no_authorization = 2

    其他= 3。



 lv_subrc = sy-subrc。

 清除:lv_last_occ,lv_string,lv_len,lv_pos,filenm,filepath,lv_dimfile,lv_out_path,ls_out_path。

 ENDFORM。  "表格上传

 *&------------------------------------------------  --------------------- *

 *&表格下载

 *&------------------------------------------------  --------------------- *

 *文字

 * -------------------------------------------------  --------------------- *

 表格下载使用

       pv_dimfile TYPE本地文件

       out_path TYPE字符串。

   DATA:lv_path像sapb-sappfad VALUE``,

        lv_targetpath像sapb-sappfad,

        lv_ot_filename TYPE字符串。

   CONCATENATE lv_path pv_dimfile INTO lv_path。

   如果p_addext ='X'。

   将pv_dimfile'.txt'连接到pv_dimfile中。

   万一。

   CONCATENATE out_path pv_dimfile INTO lv_targetpath由" \"分隔。

 * BREAK-POINT。

   通话功能'ARCHIVFILE_SERVER_TO_CLIENT'

     出口

       路径= lv_path

       targetpath = lv_targetpath

     例外情况

       error_file = 1

       其他= 2。

   如果sy-subrc <> 0。

     消息ID sy-msgid类型sy-msgty编号sy-msgno

             与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。

   万一。

 ENDFORM。  "下载



 *&------------------------------------------------  --------------------- *

 *&表格check_directory

 *&------------------------------------------------  --------------------- *

 *文字

 * -------------------------------------------------  --------------------- *

 FORM check_directory。

   数据:lv_result TYPE c,

         lv_directory TYPE字符串。

   lv_directory = p_out。

   呼叫方法cl_gui_frontend_services => directory_exist

     出口

       目录= lv_directory

     接收

       结果= lv_result

     例外情况

       cntl_error = 1

       error_no_gui = 2

       错误参数= 3

       not_supported_by_gui = 4

       其他= 5。

   如果sy-subrc <> 0。

     消息ID sy-msgid类型sy-msgty编号sy-msgno

                与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。

   万一。

   如果lv_result是INITIAL。

     带有文本001的消息e398(00)。"输出目录不存在!

   万一。

 ENDFORM。  " check_directory

 *&------------------------------------------------  --------------------- *
 *&表格Z30_GET_FILENAME
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 FORM z30_get_filename更改p_file。
 * ------------------- *
   数据:lt_files TYPE文件表,
         ls_file TYPE file_table,
         lv_lfile TYPE字符串,
         lv_rc TYPE i,
         lv_applserv TYPE as4flag,
         lv_al11 TYPE as4flag,
         lv_initial_dir TYPE字符串,
         lv_guiext TYPE字符串,
         lv_guiflt TYPE字符串,
         lv_title TYPE字符串。
 *情况" X"。
 *当p_pc。  "来自PC或网络的文件
 * lv_initial_dir ='我的文档'。
 *当p_unix。  "来自SAP服务器的文件
 * lv_applserv ='X'。
 * lv_al11 ='X'。
 *当别人。
 *结束。
   lv_lfile = p_file。
   呼叫方法cl_rsan_ut_files => f4
     出口
       i_applserv ='X'" lv_applserv'
       i_title = lv_title
       i_gui_extension = lv_guiext
       i_gui_ext_filter = lv_guiflt
       i_applserv_logical =空间
       i_applserv_al11 ='X'" lv_al11'
     改变
       c_file_name = lv_lfile
     例外情况
       失败= 1
       其他= 2。
   如果sy-subrc <> 0。
     消息ID sy-msgid类型sy-msgty编号sy-msgno
                与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
   万一。
   p_file = lv_lfile。

 ENDFORM。  " Z30_GET_FILENAME 
SAP小菜
6楼-- · 2020-09-07 18:53

询问您的管理员(不是Abap开发问题),他们应该回答如何"装载"这样的文件夹。(FTP容易得多,或者如果您的系统上有FTP查找功能, ESB/ETL工具)

DafaDDDa
7楼-- · 2020-09-07 19:01

询问您的管理员(这不是Abap开发问题),如果异构系统(例如Windows与Unix),他们应该回答如何"装载"此类文件夹 ),可能需要一些外部工具(例如Samba)。

FTP更加简单,或者在您的系统中查找任何可用的ESB/ETL工具。

一周热门 更多>