zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    LeetCode题解之Flipping an Image
    LeetCode 之Find Minimum in Rotated Sorted Array
    LeetCode题解Transpose Matrix
    LeetCode 题解之Minimum Index Sum of Two Lists
    LeetCode题解之Intersection of Two Linked Lists
    LeetCode 题解之Add Two Numbers II
    LeetCode题解之Add two numbers
    href="#"与href="javascript:void(0)"的区别
    有关ie9 以下不支持placeholder属性以及获得焦点placeholder的移除
    ie7下属性书写不规范造成的easyui 弹窗布局紊乱
  • 原文地址:https://www.cnblogs.com/ckstock/p/10276905.html
Copyright © 2011-2022 走看看