• sf生成PDF至FTP


    Z_06MM_FWYS_PRINT

    FUNCTION z_06mm_fwys_print.
    *"----------------------------------------------------------------------
    *"*"本地接口:
    *"----------------------------------------------------------------------
    * 数据申明
      data:ET_ALV TYPE Z29MMTENTRYSHEET.
    *  data:ET_LINES like TLINE.
      DATA:lt_number TYPE TABLE OF z06pms_not_number_i WITH HEADER LINE,
           ls_number TYPE z06pms_not_number_i.
      DATA: gt_alv    TYPE TABLE OF z29mmsentrysheet.
      DATA:gt_hs TYPE STANDARD TABLE OF tline  .
      DATA:gs_hs TYPE  tline  .
      RANGES:r_qmnum FOR qmel-qmnum.
      DATA:gs_alv TYPE z29mmsentrysheet.
    
      DATA:return_pdf TYPE TABLE OF z06pms_bapiret2 WITH HEADER LINE.
    
      DATA:lv_path TYPE z06pmepath,
           lv_filename TYPE z06pmefilename,
           lt_return TYPE TABLE OF z06pms_bapiret2 WITH HEADER LINE,
           ls_return TYPE z06pms_bapiret2.
    
      DATA:lv_msg TYPE string.
    
    *      data :              gt_notif_otfdata_01 TYPE TABLE OF itcoo.
      "----------------------------------------------------------------------
    * 数据初始化
      INCLUDE z06pm500_z01_notif_print_01.
    
      CLEAR:object_tab[],gs_notif_ssfcrescl,gt_notif_otfdata[],gs_notif_otfdata.
    
      CLEAR:lv_msg.
    
      CLEAR:return_pdf[].
    
      CLEAR:lv_path,lv_filename,lt_return[],ls_return.
    
      CLEAR:return_notif_print[],gs_return_notif_print.
    
    *  gv_webusrid = i_webusrid.
    *"----------------------------------------------------------------------
    * 数据校验
    *"----------------------------------------------------------------------
    * 获取打印数据
    *-------------------
      IF IV_ALV[] IS NOT INITIAL.
        PERFORM frm_print TABLES    IV_ALV
                                    IV_LINES
                          CHANGING  ccc_ccc  .
      ELSE.
        MESSAGE ID 'Z06500' TYPE 'E' NUMBER '093' INTO lv_msg.
        ls_return-type = 'E'.
        ls_return-message = lv_msg.
        APPEND ls_return TO lt_return.CLEAR:ls_return.
      ENDIF.
    *"----------------------------------------------------------------------
    * 处理打印返回参数
      APPEND LINES OF return_notif_print TO lt_return.
    
      LOOP AT lt_return TRANSPORTING NO FIELDS WHERE type CA 'EA'.
        EXIT.
      ENDLOOP.
    *"----------------------------------------------------------------------
    * SMARTFORMS生成PDF至FTP
      IF sy-subrc <> 0.
        IF gt_notif_otfdata_01[] IS NOT INITIAL.
          CALL FUNCTION 'Z_06PM_NOTIF_SF_TO_FTP'
            IMPORTING
              e_path     = lv_path
              e_filename = lv_filename
            TABLES
              it_otfdata = gt_notif_otfdata_01
              et_return  = return_pdf.
    
          APPEND LINES OF return_pdf TO lt_return.
        ELSE.
          MESSAGE ID 'Z06500' TYPE 'E' NUMBER '080' INTO lv_msg.
          ls_return-type = 'E'.
          ls_return-message = lv_msg.
          APPEND ls_return TO lt_return.CLEAR:ls_return.
        ENDIF.
      ENDIF.
    *"----------------------------------------------------------------------
      e_path = lv_path.
      e_filename = lv_filename.
      et_return[] = lt_return[].
    *"----------------------------------------------------------------------
    ENDFUNCTION.

    Z_06PM_NOTIF_SF_TO_FTP

    FUNCTION z_06pm_notif_sf_to_ftp.
    *"----------------------------------------------------------------------
    *"*"Local interface:
    *"  EXPORTING
    *"     VALUE(E_PATH) TYPE  Z06PMEPATH
    *"     VALUE(E_FILENAME) TYPE  Z06PMEFILENAME
    *"  TABLES
    *"      IT_OTFDATA STRUCTURE  ITCOO
    *"      ET_RETURN STRUCTURE  Z06PMS_BAPIRET2
    *"----------------------------------------------------------------------
    * 数据申明
      DATA:lt_otfdata TYPE TABLE OF itcoo WITH HEADER LINE.
    
      DATA:file_bin TYPE xstring,
           file_size(12) TYPE c.
    
      DATA:lv_hdl TYPE i,
           lv_command(255) TYPE c,
           lv_blength TYPE i,
           lv_num(100) TYPE i,
           lv_ftp_path TYPE z06pmepath,
           lv_path TYPE z06pmepath,
           lv_filename TYPE char1024,
           lv_comp_sizp TYPE i,
           lv_guid TYPE sysuuid_c32.
    
      DATA:lt_lines TYPE TABLE OF tline,
           ls_lines TYPE tline.
    
      TYPES:BEGIN OF ls_blob,
        line(1022) TYPE x,
      END OF ls_blob.
    
      DATA:lt_bindata TYPE STANDARD TABLE OF ls_blob,
           ls_bindata TYPE ls_blob.
    
      DATA:BEGIN OF it_result OCCURS 0,
        line(100) TYPE c,
      END OF it_result.
    
      DATA:ls_msgout TYPE LINE OF z10wfsket1,
           ls_return TYPE z06pms_bapiret2,
           lv_msg TYPE string,
           lv_oref TYPE REF TO cx_uuid_error,
           ls_ftp TYPE z06pmtftpcf.
    *"----------------------------------------------------------------------
    * 数据初始化
      CLEAR:lt_otfdata[].
    
      CLEAR:file_bin,file_size.
    
      CLEAR:lv_hdl,lv_command,lv_blength,lv_num,lv_ftp_path,lv_filename,lv_comp_sizp,lv_guid.
    
      CLEAR:lt_lines[],ls_lines.
    
      CLEAR:lt_bindata[],ls_bindata.
    
      CLEAR:it_result[].
    
      CLEAR:ls_msgout,ls_return,lv_msg,lv_oref,ls_ftp.
    
      lt_otfdata[] = it_otfdata[].
    * 查询FTP配置表
      SELECT SINGLE *
         INTO ls_ftp
         FROM z06pmtftpcf
         WHERE intid EQ 'PWPFTP'.
    
      lv_ftp_path = ls_ftp-folder_t."临时文件夹
    *  lv_ftp_path = '/upload'.
    *"----------------------------------------------------------------------
    * OTF预览和转换
      CALL FUNCTION 'CONVERT_OTF'
        EXPORTING
          format                = 'PDF'
        IMPORTING
          bin_filesize          = file_size
          bin_file              = file_bin
        TABLES
          otf                   = lt_otfdata
          lines                 = lt_lines
        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 'Z06500' TYPE 'E' NUMBER '087' INTO lv_msg.
        ls_return-type = 'E'.
        ls_return-message = lv_msg.
        APPEND ls_return TO et_return.CLEAR:ls_return.
    
        RETURN.
      ENDIF.
    *"----------------------------------------------------------------------
    * 数据二进制转换
      CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
        EXPORTING
          buffer        = file_bin
        IMPORTING
          output_length = lv_comp_sizp
        TABLES
          binary_tab    = lt_bindata.
    ##FM_SUBRC_OK
      IF sy-subrc <> 0.
        MESSAGE ID 'Z06500' TYPE 'E' NUMBER '088' INTO lv_msg.
        ls_return-type = 'E'.
        ls_return-message = lv_msg.
        APPEND ls_return TO et_return.CLEAR:ls_return.
    
        RETURN.
      ELSE.
        lv_blength = lv_comp_sizp.
      ENDIF.
    *"----------------------------------------------------------------------
    * 连接FTP
      CALL FUNCTION 'Z_06PM_FTP_CONNECT'
        IMPORTING
          e_hdl = lv_hdl
          e_msg = ls_msgout.
    
      IF ls_msgout-msgtyp CA 'EA'.
        ls_return-type = ls_msgout-msgtyp.
        ls_return-message = ls_msgout-msgtxt.
        APPEND ls_return TO et_return.CLEAR:ls_return.
    
        RETURN.
      ENDIF.
    *"----------------------------------------------------------------------
    * 操作FTP
    * 打开upload文件夹
      CLEAR:lv_command.
    
      CONCATENATE 'cd' lv_ftp_path INTO lv_command SEPARATED BY space.
    
      CALL FUNCTION 'FTP_COMMAND'
        EXPORTING
          handle        = lv_hdl
          command       = lv_command
        TABLES
          data          = it_result
        EXCEPTIONS
          command_error = 1
          tcpip_error   = 2.
    
      IF sy-subrc <> 0.
        MESSAGE ID 'Z06500' TYPE 'E' NUMBER '089' INTO lv_msg."FTP操作失败-打开根目录失败
        ls_return-type = 'E'.
        ls_return-message = lv_msg.
        APPEND ls_return TO et_return.CLEAR:ls_return.
    
        RETURN.
      ENDIF.
    * 打开临时文件夹
      CLEAR:lv_command.
    
      CONCATENATE 'cd' lv_ftp_path INTO lv_command SEPARATED BY space.
    
      CONCATENATE lv_command sy-datum INTO lv_command. "edit by pxmwyzh 20181014
    *  CONCATENATE lv_command '/' sy-datum INTO lv_command.
    
      CALL FUNCTION 'FTP_COMMAND'
        EXPORTING
          handle        = lv_hdl
          command       = lv_command
        TABLES
          data          = it_result
        EXCEPTIONS
          command_error = 1
          tcpip_error   = 2.
    
      IF sy-subrc = 1.
    * 如临时文件夹不存在,创建临时文件夹
        CLEAR:lv_command.
    
        CONCATENATE 'mkdir' sy-datum INTO lv_command SEPARATED BY space.
    
        CALL FUNCTION 'FTP_COMMAND'
          EXPORTING
            handle        = lv_hdl
            command       = lv_command
          TABLES
            data          = it_result
          EXCEPTIONS
            command_error = 1
            tcpip_error   = 2.
    
        IF sy-subrc <> 0.
          MESSAGE ID 'Z06500' TYPE 'E' NUMBER '100' INTO lv_msg."FTP操作失败-创建子目录失败
          ls_return-type = 'E'.
          ls_return-message = lv_msg.
          APPEND ls_return TO et_return.CLEAR:ls_return.
    
          RETURN.
        ENDIF.
    * 打开临时文件夹
        CLEAR:lv_command.
    
        CONCATENATE 'cd' lv_ftp_path INTO lv_command SEPARATED BY space.
    
        CONCATENATE lv_command sy-datum INTO lv_command. "edit by pxmwyzh 20181014
    *    CONCATENATE lv_command '/' sy-datum INTO lv_command.
    
        CALL FUNCTION 'FTP_COMMAND'
          EXPORTING
            handle        = lv_hdl
            command       = lv_command
          TABLES
            data          = it_result
          EXCEPTIONS
            command_error = 1
            tcpip_error   = 2.
    
        IF sy-subrc <> 0.
          MESSAGE ID 'Z06500' TYPE 'E' NUMBER '101' INTO lv_msg. "FTP操作失败-打开子目录失败
          ls_return-type = 'E'.
          ls_return-message = lv_msg.
          APPEND ls_return TO et_return.CLEAR:ls_return.
    
          RETURN.
        ENDIF.
      ELSEIF sy-subrc <> 0 AND sy-subrc <> 1.
        MESSAGE ID 'Z06500' TYPE 'E' NUMBER '101' INTO lv_msg.
        ls_return-type = 'E'.
        ls_return-message = lv_msg.
        APPEND ls_return TO et_return.CLEAR:ls_return.
    
        RETURN.
      ENDIF.
    *"----------------------------------------------------------------------
    * 获取GUID
      TRY.
          lv_guid = cl_system_uuid=>create_uuid_c32_static( ).
        CATCH cx_uuid_error INTO lv_oref.
          ls_return-type = 'E'.
          ls_return-number = '000'.
          ls_return-message =  lv_oref->get_text( ).
          APPEND ls_return TO et_return.CLEAR:ls_return.
    
          RETURN.
      ENDTRY.
    *"----------------------------------------------------------------------
    * 生成PDF文件
      CONCATENATE lv_guid '.pdf' INTO lv_filename.CONDENSE lv_filename NO-GAPS.
    
      CALL FUNCTION 'FTP_R3_TO_SERVER' "传输到FTP服务器
        EXPORTING
          handle        = lv_hdl
          fname         = lv_filename
          blob_length   = lv_blength
        TABLES
          blob          = lt_bindata
        EXCEPTIONS
          tcpip_error   = 1
          command_error = 2
          data_error    = 3.
    
      IF sy-subrc <> 0.
        MESSAGE ID 'Z06500' TYPE 'E' NUMBER '090' INTO lv_msg. "PDF文件生成失败
        ls_return-type = 'E'.
        ls_return-message = lv_msg.
        APPEND ls_return TO et_return.CLEAR:ls_return.
    
        RETURN.
      ENDIF.
    
      lv_num = strlen( lv_command ).
    
      lv_path = lv_command+2(lv_num).
    
      CONDENSE lv_path NO-GAPS.
    *"----------------------------------------------------------------------
      e_path = lv_path.
      e_filename = lv_filename.
    *"----------------------------------------------------------------------
    ENDFUNCTION.

    Z_06PM_FTP_CONNECT

    FUNCTION z_06pm_ftp_connect.
    *"----------------------------------------------------------------------
    *"*"Local interface:
    *"  EXPORTING
    *"     REFERENCE(E_HDL) TYPE  I
    *"     REFERENCE(E_MSG) TYPE  Z10WFSKE01
    *"----------------------------------------------------------------------
    
      DATA: lv_slen       TYPE i,
              lv_host(100)  TYPE c,
              lv_pwd(50)    TYPE c,
              ls_mess       TYPE z10wfske01,
              lv_hdl  TYPE i.
      DATA: ls_ftp TYPE z06pmtftpcf.
    *查询配置表
      SELECT SINGLE *
         INTO ls_ftp
         FROM z06pmtftpcf
         WHERE intid EQ cns_intid .
    
    * 生成FTP服务器地址
      CLEAR lv_host.
      CONCATENATE ls_ftp-ipadr ls_ftp-zport INTO lv_host SEPARATED BY space.
    *  CONCATENATE cns_ip cns_port INTO lv_host SEPARATED BY space.
      CLEAR lv_slen.
      lv_slen = strlen( ls_ftp-paswd ).
    *  lv_slen = strlen( cns_pass ).
    
    * 将密码加密
      CLEAR lv_pwd.
      CALL FUNCTION 'HTTP_SCRAMBLE'
        EXPORTING
          source      = ls_ftp-paswd
    *     source      = cns_pass
          sourcelen   = lv_slen
          key         = cns_key
        IMPORTING
          destination = lv_pwd.
    
    * 连接到FTP服务器
      DO 3 TIMES.
        CLEAR lv_hdl.
        CALL FUNCTION 'FTP_CONNECT'
          EXPORTING
            user            = ls_ftp-usrid
    *       user            = cns_user
            password        = lv_pwd
            host            = lv_host
            rfc_destination = cns_dest
          IMPORTING
            handle          = lv_hdl
          EXCEPTIONS
            not_connected   = 1.
        IF sy-subrc NE 0.
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_mess-msgtxt.
          ls_mess-msgtyp   = sy-msgty.
          ls_mess-msgno = sy-msgno.
          e_msg = ls_mess.
          RETURN.
        ENDIF.
      ENDDO.
    
      e_hdl = lv_hdl.
    
    
    ENDFUNCTION.
  • 相关阅读:
    数据结构
    SpringBoot实战
    基于Redis的分布式资源锁
    计算机网络知识
    Dubbo学习使用
    css设置图片适配:显示中间部分(居中显示)
    document.ready和onload的区别
    JS的事件委托(事件代理)
    在vue-cli项目中使用echarts
    addEventListener的第三个参数
  • 原文地址:https://www.cnblogs.com/ckstock/p/10276905.html
Copyright © 2020-2023  润新知