ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ABAP 连接FTP发送打印凭证(PDF数据)

2022-01-24 16:34:56  阅读:183  来源: 互联网

标签:CONCATENATE FTP INTO cmd ftpcomm lv ABAP PDF lwa


大概步骤分为以下几步:

  • 首先将打印的凭证以pdf格式存到sap文件服务器AL11
  • 连接FTP
  • 编写FTP命令从AL11中去下载对饮文件
  • 关闭连接
    • gt_otf为打印产生的结果表
    • 以二进制的形式存到AL11
    • filename1为AL11路径和文件名
    CALL FUNCTION 'CONVERT_OTF'
      EXPORTING
        format                = 'PDF'
        max_linewidth         = 132
      IMPORTING
        bin_filesize          = w_bin_filesize
      TABLES
        otf                   = gt_otf
        lines                 = tline[]
      EXCEPTIONS
        err_max_linewidth     = 1
        err_format            = 2
        err_conv_not_possible = 3
        err_bad_otf           = 4
        OTHERS                = 5.
    IF sy-subrc <> 0.
*   MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*    WITHsy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    i_pdf[] = tline[].
  ENDIF.


  CONCATENATE '/usr/sap/trans/' filename INTO filename1.
  OPEN DATASET filename1 FOR OUTPUT IN BINARY MODE.
  IF sy-subrc = 0.
    LOOP AT i_pdf.
      TRANSFER i_pdf TO filename1.
    ENDLOOP.
  ENDIF.

  CLOSE DATASET filename1.
* get ftp command
  CLEAR t_ftpcomm[].
  t_ftpcomm-ftpcomm = 'prompt'.
  APPEND t_ftpcomm. CLEAR t_ftpcomm.
  t_ftpcomm-ftpcomm = 'bi'.
  APPEND t_ftpcomm. CLEAR t_ftpcomm.


* 进入指定文件夹/XX/YYYY/MM/YYYYMMDD/ ,如果没有文件夹则创建
  PERFORM frm_goto_folder USING uv_fold CHANGING t_ftpcomm[].


  CONCATENATE 'lcd' '/usr/sap/trans/' INTO t_ftpcomm-ftpcomm
  SEPARATED BY space.
  MOVE t_ftpcomm-ftpcomm TO f_str.
  SHIFT f_str RIGHT DELETING TRAILING '/'.
  CONDENSE f_str.
  MOVE f_str TO t_ftpcomm-ftpcomm.
  APPEND t_ftpcomm. CLEAR t_ftpcomm.

  CONCATENATE '"' filename '"' INTO filename.
  CONCATENATE 'dele' filename INTO t_ftpcomm-ftpcomm SEPARATED BY space.  APPEND t_ftpcomm. CLEAR t_ftpcomm.
  CONCATENATE 'put' filename INTO t_ftpcomm-ftpcomm SEPARATED BY space.  APPEND t_ftpcomm. CLEAR t_ftpcomm.
* end ftp command
* ftp connect
  SET EXTENDED CHECK OFF.
  slen = strlen( f_pwd ).

  CALL FUNCTION 'HTTP_SCRAMBLE'
    EXPORTING
      source      = f_pwd
      sourcelen   = slen
      key         = key
    IMPORTING
      destination = f_pwd1.
  CALL FUNCTION 'FTP_CONNECT'
    EXPORTING
      user            = f_user
      password        = f_pwd1
      host            = f_host
      rfc_destination = f_dest
    IMPORTING
      handle          = hdl.
  IF sy-subrc NE 0.
    RAISE connect_ftp_error.
  ENDIF.

* exec ftp command
  CLEAR ftp_result1[].
  LOOP AT t_ftpcomm.
    CALL FUNCTION 'FTP_COMMAND'
      EXPORTING
        handle        = hdl
        command       = t_ftpcomm-ftpcomm
        compress      = compress
      TABLES
        data          = ftp_result1
      EXCEPTIONS
        command_error = 1
        tcpip_error   = 2.
  ENDLOOP.
  CALL FUNCTION 'FTP_DISCONNECT'
    EXPORTING
      handle = hdl.

  CALL FUNCTION 'RFC_CONNECTION_CLOSE'
    EXPORTING
      destination = 'SAPFTPA'
    EXCEPTIONS
      OTHERS      = 1.
* unix command
  REFRESH result.
  DELETE DATASET filename1.

FTP创建文件夹

**end   add by caijh on 20211214
*&---------------------------------------------------------------------*
*&      Form  FRM_GOTO_FOLDER
*&---------------------------------------------------------------------*
*       进入夹/XX/YYYY/MM/YYYYMMDD/ ,如果没有文件夹则创建,年月日格式。
*----------------------------------------------------------------------*
FORM frm_goto_folder  USING    uv_foldername
                      CHANGING t_ftpcomm TYPE  ty_tab_cmd.


  DATA lwa_cmd TYPE ty_cmd.
  DATA lv_tmp_str TYPE string.
  DATA lv_filenum TYPE string.
  DATA lv_filesecond TYPE string.


  IF uv_foldername <> 'FIVOUCHER'.

    SPLIT uv_foldername AT '&' INTO uv_foldername lv_filesecond lv_filenum.
  ELSE.
    SPLIT uv_foldername AT '&' INTO uv_foldername lv_filenum.
  ENDIF.




  CONCATENATE 'CWD /'    ``  INTO lwa_cmd-ftpcomm  SEPARATED BY space.  APPEND lwa_cmd TO t_ftpcomm.
  CONCATENATE 'mkdir '    uv_foldername   INTO lwa_cmd-ftpcomm  SEPARATED BY space.  APPEND lwa_cmd TO t_ftpcomm.
  CONCATENATE 'TYPE A'    ``  INTO lwa_cmd-ftpcomm  SEPARATED BY space.  APPEND lwa_cmd TO t_ftpcomm.
  CONCATENATE 'cd'  uv_foldername INTO lwa_cmd-ftpcomm  SEPARATED BY space.
  APPEND lwa_cmd TO t_ftpcomm.

  IF  uv_foldername <> 'FIVOUCHER' .
    CONCATENATE  'mkdir '   lv_filesecond   `/`  INTO lwa_cmd-ftpcomm  SEPARATED BY space.  APPEND lwa_cmd TO t_ftpcomm.
    CONCATENATE   `/` uv_foldername  `/`  lv_filesecond  `/`  INTO lv_tmp_str.
    CONCATENATE 'cd' lv_tmp_str   INTO lwa_cmd-ftpcomm  SEPARATED BY space.  APPEND lwa_cmd TO t_ftpcomm.
    CONCATENATE uv_foldername '/' lv_filesecond INTO uv_foldername.
  ENDIF.


  CONCATENATE 'mkdir ' sy-datum+0(4)  `/` INTO lwa_cmd-ftpcomm  SEPARATED BY space.  APPEND lwa_cmd TO t_ftpcomm.

  CONCATENATE   `/` uv_foldername  `/`  sy-datum+0(4)  `/`  INTO lv_tmp_str.

  CONCATENATE 'cd' lv_tmp_str   INTO lwa_cmd-ftpcomm  SEPARATED BY space.  APPEND lwa_cmd TO t_ftpcomm.

  CONCATENATE 'mkdir ' sy-datum+4(2)  INTO lwa_cmd-ftpcomm  SEPARATED BY space.  APPEND lwa_cmd TO t_ftpcomm.

  CONCATENATE  `/` uv_foldername `/`   sy-datum+0(4)  `/`  sy-datum+4(2)  INTO lv_tmp_str.
  CONCATENATE 'cd' lv_tmp_str   INTO lwa_cmd-ftpcomm  SEPARATED BY space.  APPEND lwa_cmd TO t_ftpcomm.

*  IF uv_foldername = 'FIVOUCHER' OR uv_foldername = 'CHECKVOUCHER'.
  CONCATENATE 'mkdir ' sy-datum+6(2)   INTO lwa_cmd-ftpcomm  SEPARATED BY space.  APPEND lwa_cmd TO t_ftpcomm.

  CONCATENATE  `/` uv_foldername `/`  sy-datum+0(4)  `/`  sy-datum+4(2)  `/`  sy-datum+6(2)   INTO lv_tmp_str.
  CONCATENATE 'cd' lv_tmp_str INTO lwa_cmd-ftpcomm SEPARATED BY space.  APPEND lwa_cmd TO t_ftpcomm.
*  ENDIF.
  CONCATENATE 'mkdir ' lv_filenum   INTO lwa_cmd-ftpcomm  SEPARATED BY space.  APPEND lwa_cmd TO t_ftpcomm.

*  IF uv_foldername = 'FIVOUCHER' OR uv_foldername = 'CHECKVOUCHER'. .
  CONCATENATE  `/` uv_foldername `/`  sy-datum+0(4)  `/`  sy-datum+4(2)  `/`  sy-datum+6(2)  `/`  lv_filenum   INTO lv_tmp_str.
*  ELSE.
*    CONCATENATE  `/` uv_foldername `/`  sy-datum+0(4)  `/`  sy-datum+4(2)  `/`  lv_filenum   INTO lv_tmp_str.
*  ENDIF.

  CONCATENATE 'cd' lv_tmp_str INTO lwa_cmd-ftpcomm SEPARATED BY space. APPEND lwa_cmd TO t_ftpcomm.


ENDFORM.

标签:CONCATENATE,FTP,INTO,cmd,ftpcomm,lv,ABAP,PDF,lwa
来源: https://www.cnblogs.com/Hao9933/p/15839958.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有