visual studio打开.h文件_ABAP FTP 文件上传

ad6b3b5ec325bac8665899b91ac888fe.png

*&---------------------------------------------------------------------**& Report ZFTP_001*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*REPORT zftp_001.INCLUDE zftp_001_screen.INCLUDE zftp_001_f01.INITIALIZATION."按钮显示描述
  sscrfields-functxt_01 = TEXT-f01.".*  sscrfields-functxt_02 = TEXT-f02.""隐藏执行按钮APPEND 'ONLI' TO gt_exclude.CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'EXPORTING
      p_status  = sy-pfkeyTABLES
      p_exclude = gt_exclude.AT SELECTION-SCREEN.PERFORM sub_ftp_commd.

*----------------------------------------------------------------------****INCLUDE ZFTP_001_F01.*----------------------------------------------------------------------**&---------------------------------------------------------------------**& Form SUB_FTP_COMMD*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& -->  p1        text*& *&---------------------------------------------------------------------*FORM sub_ftp_commd .DATA:
    p_file_name    TYPE char255, "文件名
    p_file_prefix  TYPE char255, "本地文件前缀
    p_folder(1000) TYPE c.*    VALUE '/ERP/bf/', "ftp 上传的路径DATA ls_ztftp_oa TYPE ztftp_oa.DATA: hdl     TYPE i,key     TYPE i VALUE 26101957,
        slen    TYPE i,
        cmd(80) TYPE c.DATA lv_error TYPE char1.DATA ls_ztftp_002 TYPE ztftp_002.DATA result TYPE STANDARD TABLE OF  gty_result WITH HEADER LINE.DATA: BEGIN OF lt_data_txt OCCURS 0 ,line(500),END OF lt_data_txt.*  DATA: BEGIN OF lt_data_binary OCCURS 0,*          x(2000) TYPE x,*        END OF lt_data_binary.*  DATA: lv_binary_len TYPE i.*  DATA:  l_codepage(4) TYPE n .*  DATA:  l_encoding(20).DATA:lv_memory TYPE i,
       lv_visual TYPE i.*  DATA: BEGIN OF result OCCURS 0,*          line(100) TYPE c,*        END OF result.REFRESH gt_msg[].CLEAR : p_file_name,p_file_prefix,p_folder.CLEAR :ls_ztftp_002,lv_error.REFRESH result[].CLEAR result."按钮相应CASE sscrfields-ucomm.WHEN 'FC01'.  " 文件上传"获取文件名CLEAR :lv_error,p_file_name.PERFORM sub_get_p_file USING p_file_prefix p_file_name lv_error.*      p_file_prefix = 'D:\test\'.*      p_file_name = 't.rar'.IF lv_error = 'X'.MESSAGE e000(zftp) WITH '文件路径输入错误!'.EXIT.ENDIF.CLEAR lv_error.*      DATA lv_str TYPE clike.CLEAR : lv_memory,lv_visual.*      lv_str = p_file_name."判断文件名是否有汉字CALL FUNCTION 'NLS_VISUAL_CHARLEN'EXPORTING
          str        = p_file_nameIMPORTING
          len_memory = lv_memory
          len_visual = lv_visual.IF lv_visual = 2.MESSAGE e000(zftp) WITH '文件名不允许包含汉字!'.EXIT.ENDIF."检查流水号是否存在SELECT COUNT(*) FROM zgt_001 WHERE zlsh = p_js_no.IF sy-subrc NE 0 .MESSAGE e000(zftp) WITH '申请流水号不存在!'.EXIT.ENDIF.SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_ztftp_oa FROM ztftp_oaWHERE id = 'FTP001' AND status = 'X' .IF sy-subrc = 0.SELECT COUNT(*) FROM sapftp_servers WHERE ftp_server_name = ls_ztftp_oa-ftp_server_nameAND ftp_server_port = ls_ztftp_oa-ftp_server_port AND description = ls_ztftp_oa-description.IF sy-subrc = 0.
          slen = strlen( ls_ztftp_oa-ftppwd ).* "获取加密密码 保存到ls_ztftp_oa-ftppwdCALL FUNCTION 'HTTP_SCRAMBLE'EXPORTING
              source      = ls_ztftp_oa-ftppwd
              sourcelen   = slenkey         = keyIMPORTING
              destination = ls_ztftp_oa-ftppwd.DO 3 TIMES.* 连接ftp服务器CALL FUNCTION 'FTP_CONNECT'EXPORTING
                user            = ls_ztftp_oa-ftpuser
                password        = ls_ztftp_oa-ftppwd
                host            = ls_ztftp_oa-ftp_server_name
                rfc_destination = ls_ztftp_oa-description "destIMPORTING
                handle          = hdl.  "连接的句柄IF sy-subrc = 0.EXIT.ENDIF.ENDDO.IF sy-subrc <> 0.MESSAGE e000(zftp) WITH sy-datum  sy-uzeit  sy-uname '连接ftp文档服务器失败!'.*            WRITE :/ sy-datum, sy-uzeit, sy-uname,  '连接ftp失败!'.            "MESSAGEGSTOP.ENDIF."判断是否存在文件夹(打开此文件夹)CLEAR lv_error.REFRESH result[].CONCATENATE  ls_ztftp_oa-prefix_path p_js_no '/' INTO p_folder.CONCATENATE 'cd' p_folder INTO cmd SEPARATED BY space.PERFORM sub_ftp_command TABLES resultUSING hdl cmd lv_error.IF lv_error = 'X'.*            文件夹不存在则打开前缀文件夹        再  创建创建CLEAR lv_error.REFRESH result[].
            p_folder = ls_ztftp_oa-prefix_path.CONCATENATE 'cd' p_folder INTO cmd SEPARATED BY space.PERFORM sub_ftp_command TABLES resultUSING hdl cmd lv_error.IF lv_error NE 'X'.*创建文件夹CONCATENATE 'mkdir ' p_js_no INTO cmd SEPARATED BY space.PERFORM sub_ftp_command TABLES resultUSING hdl cmd lv_error."文件夹创建成功后 打开IF lv_error NE 'X'.CLEAR lv_error.REFRESH result[].CONCATENATE  ls_ztftp_oa-prefix_path p_js_no '/' INTO p_folder.CONCATENATE 'cd' p_folder INTO cmd SEPARATED BY space.PERFORM sub_ftp_command TABLES resultUSING hdl cmd lv_error.IF  lv_error NE 'X'."打开本地文件夹CLEAR lv_error.REFRESH result[].CONCATENATE 'lcd' p_file_prefix INTO cmd SEPARATED BY space.PERFORM sub_ftp_command TABLES resultUSING hdl cmd lv_error.IF  lv_error NE 'X'.*CALL FUNCTION 'SCMS_TEXT_TO_BINARY'*    EXPORTING*      ENCODING      = '8400'*    IMPORTING*      output_length = blob_length*    TABLES*      text_tab      = text   " input*      binary_tab    = in_data" output*    EXCEPTIONS*      failed        = 1*      OTHERS        = 2."创建文件CONCATENATE 'put ' p_file_name INTO cmd SEPARATED BY space.PERFORM sub_ftp_command TABLES resultUSING hdl cmd lv_error.IF  lv_error NE 'X'.
                      add_msg 'S' '上传成功'.CLEAR lv_error.REFRESH result[]."存储信息*                      ZTFTP_002CLEAR ls_ztftp_002.
                      ls_ztftp_002-zlsh =  p_js_no.CONCATENATE  ls_ztftp_oa-prefix_path p_js_no '/' p_file_name INTO ls_ztftp_002-ftp_file_path.
                      ls_ztftp_002-uname = sy-uname.
                      ls_ztftp_002-aedat  = sy-datum.
                      ls_ztftp_002-aetim = sy-uzeit.MODIFY ztftp_002 FROM  ls_ztftp_002.COMMIT WORK.ELSE.LOOP AT  result.
                        add_msg 'E' result-line.CLEAR result.ENDLOOP.REFRESH result[].ENDIF.ELSE.LOOP AT  result.
                      add_msg 'E' result-line.CLEAR result.ENDLOOP.REFRESH result[].ENDIF.ELSE.LOOP AT  result.
                    add_msg 'E' result-line.CLEAR result.ENDLOOP.REFRESH result[].ENDIF.ELSE.LOOP AT  result.
                  add_msg 'E' result-line.CLEAR result.ENDLOOP.REFRESH result[].ENDIF.ELSE.LOOP AT  result.
                add_msg 'E' result-line.CLEAR result.ENDLOOP.REFRESH result[].ENDIF.ELSE.*            文件夹存在则直接创建文件"打开本地文件夹CLEAR lv_error.REFRESH result[].CONCATENATE 'lcd' p_file_prefix INTO cmd SEPARATED BY space.PERFORM sub_ftp_command TABLES resultUSING hdl cmd lv_error.IF  lv_error NE 'X'.*              "将文件名放入 lt_data_txt*              "转码*              DATA lv_len TYPE int4.*              DATA lv_i TYPE i.*              lv_i = 0.*              lv_len = strlen( p_file_name ).**              DO  lv_len TIMES.*                APPEND p_file_name+lv_i(1) TO lt_data_txt.*                lv_i = lv_i + 1.*                IF lv_i = lv_len .*                  EXIT.*                ENDIF.*              ENDDO.**              CALL FUNCTION 'SCMS_TEXT_TO_BINARY'*                EXPORTING*                  encoding      = '8450'*                IMPORTING*                  output_length = lv_binary_len "编码后占多少字节*                TABLES*                  text_tab      = lt_data_txt*                  binary_tab    = lt_data_binary.*              IF sy-subrc NE 0.**                LOOP AT  result.*                  add_msg 'E' '文件名转码错误,请检查文件名!'.*                  CLEAR result.*                ENDLOOP.*                REFRESH result[].**                EXIT.**              ENDIF.**              CALL FUNCTION 'FTP_R3_TO_SERVER'*                EXPORTING*                  handle      = hdl*                  fname       = p_file_name*                  blob_length = lv_binary_len*                TABLES*                  blob        = lt_data_binary. "二进制输出DATA aa TYPE string.DATA bb TYPE xstring.
              aa = p_file_name.CALL FUNCTION 'SCMS_STRING_TO_XSTRING'EXPORTINGtext   = aa "stringIMPORTINGbuffer = bbEXCEPTIONS
                  failed = 1OTHERS = 2."创建文件CONCATENATE 'put ' p_file_name INTO cmd SEPARATED BY space.PERFORM sub_ftp_command TABLES resultUSING hdl cmd lv_error.IF  lv_error NE 'X'.
                add_msg 'S' '上传成功'.CLEAR lv_error.REFRESH result[]."存储信息*                      ZTFTP_002CLEAR ls_ztftp_002.
                ls_ztftp_002-zlsh =  p_js_no.CONCATENATE  ls_ztftp_oa-prefix_path p_js_no '/' p_file_name INTO ls_ztftp_002-ftp_file_path.
                ls_ztftp_002-uname = sy-uname.
                ls_ztftp_002-aedat  = sy-datum.
                ls_ztftp_002-aetim = sy-uzeit.MODIFY ztftp_002 FROM  ls_ztftp_002.COMMIT WORK.ELSE.LOOP AT  result.
                  add_msg 'E' result-line.CLEAR result.ENDLOOP.REFRESH result[].ENDIF.ELSE.LOOP AT  result.
                add_msg 'E' result-line.CLEAR result.ENDLOOP.REFRESH result[].ENDIF.ENDIF.CLEAR lv_error."根据金税发票号查找FTP 文件路径  TABLES result TYPE STANDARD  TABLE   gty_result* 断开FTP连接CALL FUNCTION 'FTP_DISCONNECT'EXPORTING
              handle = hdl.* 断开RFC链接CALL FUNCTION 'RFC_CONNECTION_CLOSE'EXPORTING
              destination = ls_ztftp_oa-description  "destEXCEPTIONSOTHERS      = 1.ELSE.MESSAGE e002(zftp) .EXIT .ENDIF.ELSE.MESSAGE e001(zftp) .EXIT .ENDIF.WHEN OTHERS.ENDCASE.IF gt_msg IS NOT INITIAL.
    zbc_cl_tool=>display_msg( IMPORTING it_msg = gt_msg ).ENDIF.ENDFORM.FORM sub_ftp_command TABLES result STRUCTURE ls_resultUSING  hdl  TYPE i
                             cmd TYPE c
                             lv_error TYPE char1.CALL FUNCTION 'FTP_COMMAND'EXPORTING
      handle        = hdl
      command       = cmd
      compress      = 'N' "compressTABLESdata          = resultEXCEPTIONS
      command_error = 1
      tcpip_error   = 2.IF sy-subrc NE 0.
    lv_error = 'X'.ENDIF.ENDFORM.*&---------------------------------------------------------------------**& Form SUB_GET_P_FILE*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**      -->P_P_FILE  text*&---------------------------------------------------------------------*FORM sub_get_p_file  USING p_file_prefix TYPE char255
         p_file_name  TYPE char255
                         lv_error TYPE char1.CALL FUNCTION 'STPU1_EXTRACT_FILENAME'EXPORTING
      file_and_path = p_fileIMPORTING
      file          = p_file_name
      pathname      = p_file_prefix.IF sy-subrc NE 0.
    lv_error = 'X'.ENDIF.ENDFORM.

*&---------------------------------------------------------------------**& 包含               ZFTP_001_SCREEN*&---------------------------------------------------------------------*TABLES: sscrfields.DATA gt_exclude TYPE TABLE OF sy-ucomm.TYPES: BEGIN OF gty_result,line(100) TYPE c,END OF gty_result.DATA ls_result TYPE gty_result.* 处理的日志DATA:gt_msg TYPE bapirettab.DATA:gs_msg TYPE bapiret2.DATA:gv_message TYPE bapiret2-message.DEFINE add_msg.
  gs_msg-type = &1.
  gs_msg-id = '00'.
  gs_msg-number = '398'.
  gs_msg-message_v1 = &2.APPEND gs_msg TO gt_msg.CLEAR:gs_msg,gv_message.END-OF-DEFINITION."添加了五个按钮SELECTION-SCREEN: FUNCTION KEY 1.SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE TEXT-h01.PARAMETERS p_js_no TYPE zgt_001-zlsh OBLIGATORY.PARAMETERS: p_file TYPE sapb-sappfad OBLIGATORY.SELECTION-SCREEN END OF BLOCK bl1.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.CALL FUNCTION 'WS_FILENAME_GET'EXPORTING
      def_filename     = space
      def_path         = p_filemask             = ',Excel Files,*.xls,All Files,*.csv,*.*.'mode             = 'O'IMPORTING
      filename         = p_fileEXCEPTIONS
      selection_cancel = 0.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值