SAP调用http、webservice生成pdf打印签字签证

技术点提示

  1. sap调用http接口
  2. sap调用webservice传输pdf文件
  3. sap生成pdf文件
  4. binary转base64
  5. sap文件下载、上传
REPORT zzsd0029.

TYPE-POOLS:icon,  slis.

TYPES: BEGIN OF ty_bank,
         zz100  TYPE ztfi_zz002-zz100,
         zz101  TYPE ztfi_zz002-zz101,
         zz002  TYPE ztfi_zz002-zz002,
         zz001  TYPE ztfi_zz002-zz001,
         zz001t TYPE ztfi_zz002-zz001t,
         bukrs  TYPE ztfi_zz002-bukrs,
         butxt  TYPE ztfi_zz002-butxt,
         zz102  TYPE ztfi_zz002-zz102,
         waers  TYPE ztfi_zz002-waers,
         zjdkmh TYPE ztfi_zz002-zjdkmh,
       END OF ty_bank.
*----------------------------------------------------------------------*
* TABLES
*----------------------------------------------------------------------*
TABLES: sscrfields,likp,ztsd_ds_bzj,ztsd_023.


*----------------------------------------------------------------------*
* 常量                                                                 *
*----------------------------------------------------------------------*
CONSTANTS:
  c_x      TYPE char01   VALUE 'X',
  c_e      TYPE char01   VALUE 'E',
  c_s      TYPE char01   VALUE 'S',
  c_file   TYPE char4    VALUE 'C:\',
  c_exit   TYPE char4    VALUE 'EXIT',
  c_cancel TYPE char6    VALUE 'CANCEL',
  c_back   TYPE char4    VALUE 'BACK'.

DATA wa_functxt TYPE smp_dyntxt.

***定义
DATA gt_fieldcat TYPE TABLE OF lvc_s_fcat."定义列属性内表
DATA wa_layout TYPE lvc_s_layo."定义布局结构
DATA:BEGIN OF wa_data,
       bukrs  TYPE bukrs, "公司代码
       kunnr  TYPE kunnr, "客户编号
       name1  TYPE name1_gp, "名称
       budat  TYPE budat, "日期
       zje    TYPE zeje,
       zskfs  TYPE zeskfs1,
       zskyh  TYPE zeskyh,
       vbeln  TYPE vbeln_va,
       zbz    TYPE zebz01,
       zz101  TYPE ztfi_zz002-zz101,
       zz002  TYPE ztfi_zz002-zz002,
       zz001  TYPE ztfi_zz002-zz001,
       zz001t TYPE ztfi_zz002-zz001t,
     END OF wa_data.
DATA:gt_data LIKE TABLE OF wa_data WITH HEADER LINE.
DATA:BEGIN OF wa_out,
       box       TYPE c,
       light(4),
       bukrs     TYPE bukrs, "公司代码
       kunnr     TYPE kunnr, "客户编号
       name1     TYPE name1_gp, "名称
       budat     TYPE budat, "日期
       zje       TYPE zeje,
       zskfs     TYPE zeskfs1,
       zskyh     TYPE zeskyh,
       vbeln     TYPE vbeln_va,
       zbz       TYPE zebz01,
       zz101     TYPE ztfi_zz002-zz101,
       zz002     TYPE ztfi_zz002-zz002,
       zz001     TYPE ztfi_zz002-zz001,
       zz001t    TYPE ztfi_zz002-zz001t,
       belnr     TYPE belnr_d, "会计科目
       zdycs     TYPE zedycs, "打印次数
       mess      TYPE bapi_msg,
       guid      TYPE guid_32,
       zcrd_name TYPE uname,
       jedx      TYPE string,
*---------------INSERT--------20190525------SUNQI----BEGIN-------------*
       djbh      TYPE string,
*---------------INSERT--------20190525------SUNQI----END---------------*
       uplerr    TYPE c,
     END OF wa_out.
DATA:gt_out LIKE TABLE OF wa_out WITH HEADER LINE.

DATA:gt_print LIKE TABLE OF wa_out WITH HEADER LINE,
     wa_print LIKE wa_out.

DATA:BEGIN OF wa_kunnr,
       kunnr TYPE kunnr,
       name1 TYPE name1_gp,
     END OF wa_kunnr.

DATA:gt_kunnr LIKE TABLE OF wa_kunnr WITH HEADER LINE.


DATA:BEGIN OF wa_bkpf,
       bukrs TYPE bukrs,
       belnr TYPE belnr_d,
       gjahr TYPE gjahr,
       stblg TYPE stblg,
     END OF wa_bkpf.

DATA:gt_bkpf LIKE TABLE OF wa_bkpf WITH HEADER LINE.
DATA:l_pdf TYPE xstring.
*-------------------------------------------------------------------------------------*
"接口定义
"合同创建接口
DATA: lc_do_clientproxy TYPE REF TO zqysco_ws_document_service,
      lo_sys_exception  TYPE REF TO cx_ai_system_fault.
*-------------------------------------------------------------------------------------*
"文件类型创建合同表
DATA: ls_filetype TYPE  zcreatebyfiletype1,
      ls_response TYPE  zcreatebyfiletype_response1,
      ls_document TYPE zws_document_by_file_request,
      ls_return   TYPE zwebservice_result.
DATA: lv_error_message TYPE          string,
      lo_uuid_error    TYPE REF TO   cx_uuid_error.
DATA: ev_sucessfully TYPE char01,
      ev_message     TYPE ze_message.
"结果字符串
DATA: lv_str TYPE string,
      str1   TYPE string,
      str2   TYPE string,
      str3   TYPE string.
DATA docid TYPE string.
DATA contid TYPE string.
DATA url TYPE string.
*-------------------------------------------------------------------------------------*
*浏览打印接口
DATA: lc_ct_clientproxy   TYPE REF TO zqysco_ws_contract_service.
*-------------------------------------------------------------------------------------*
"文件类型创建合同表
DATA: ls_eprinturl   TYPE  zqysefprinturl1,
      ls_ep_response TYPE  zqysefprinturl_response1,
      ls_url         TYPE zqysws_efp_url_request.
*-------------------------------------------------------------------------------------*
"搜索帮助内表
DATA:BEGIN OF lt_hitlist OCCURS 0,
       hit_field  TYPE bukrs,
       hit_field2 TYPE zeskyh,
     END OF lt_hitlist.
*----------------------------------------------------------------------*
*       CLASS lcl_alv_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_alv_receiver DEFINITION.

  PUBLIC SECTION.
    METHODS:
      handle_data_changed
                    FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm,
      "自定义搜索帮助
      handle_onf4 FOR EVENT onf4 OF cl_gui_alv_grid
        IMPORTING e_fieldname es_row_no er_event_data.


ENDCLASS.                    "lcl_event_receiver DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_alv_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_alv_receiver IMPLEMENTATION.

  METHOD handle_data_changed.
    PERFORM handle_data_changed USING er_data_changed.
  ENDMETHOD.                    "handle_data_changed
  "自定义搜索帮助
  METHOD handle_onf4.
    PERFORM handle_onf4 USING e_fieldname es_row_no er_event_data.
  ENDMETHOD.
ENDCLASS.               "lcl_ALV_event_receiver

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS :s_vkorg FOR likp-vkorg OBLIGATORY MEMORY ID vko.

PARAMETER:p_file   TYPE rlgrap-filename MODIF ID g1 ."OBLIGATORY
SELECT-OPTIONS:s_budat FOR ztsd_ds_bzj-budat MODIF ID g2.

SELECT-OPTIONS :s_kunnr FOR ztsd_023-kunnr MODIF ID g2,
                s_zskyh FOR ztsd_023-zskyh MODIF ID g2.
*                S_DJBH  FOR ZTSD_023-ZDYCS MODIF ID G2.

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
PARAMETERS: r_a RADIOBUTTON GROUP r1 DEFAULT 'X' USER-COMMAND us1,
            r_b RADIOBUTTON GROUP r1,
            r_c RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-002.
PARAMETERS: r_sk RADIOBUTTON GROUP r2 DEFAULT 'X' USER-COMMAND us2,
            r_tk RADIOBUTTON GROUP r2.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN: FUNCTION KEY 1.

*----------------------------------------------------------------------*
* 选择文件路径-F4帮助                                                   *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* 选择屏幕【文件路径】检索帮助
  PERFORM frm_get_filename.

AT SELECTION-SCREEN.
* 按钮事件
  PERFORM frm_func.

  DATA:BEGIN OF gs_vkorg,
         vkorg LIKE vbak-vkorg,
       END OF gs_vkorg.
  DATA:gt_vkorg LIKE TABLE OF gs_vkorg WITH HEADER LINE.
  CLEAR:gs_vkorg,gt_vkorg[].
  SELECT
    vkorg
    INTO CORRESPONDING FIELDS OF TABLE gt_vkorg
    FROM tvko
    WHERE vkorg IN s_vkorg.
  SORT gt_vkorg.
  DELETE ADJACENT DUPLICATES FROM gt_vkorg.
  DATA:lv_mess TYPE string.
  CLEAR:lv_mess.
  LOOP AT gt_vkorg INTO gs_vkorg.
    AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
           ID 'VKORG' FIELD gs_vkorg-vkorg.
    IF sy-subrc <> 0.
      lv_mess = lv_mess && '|' && '无权限对' && gs_vkorg-vkorg && '进行操作'.
    ENDIF.
    CLEAR:gs_vkorg.
  ENDLOOP.
  IF lv_mess IS NOT INITIAL.
    MESSAGE lv_mess  TYPE 'E'.
  ENDIF.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF r_a EQ 'X'.
      IF screen-group1 EQ 'G2'.
        screen-active = 0 .
      ELSEIF screen-group1 EQ 'G1'.
        screen-active = 0.
      ENDIF.
      MODIFY SCREEN.
    ENDIF.

    IF r_b EQ 'X'.
      IF screen-group1 EQ 'G1'.
        screen-active = 1 .
      ELSEIF screen-group1 EQ 'G2'.
        screen-active = 0.
      ENDIF.
      MODIFY SCREEN.
    ENDIF.
    IF r_c EQ 'X'.
      IF screen-group1 EQ 'G1'.
        screen-active = 0 .
      ELSEIF screen-group1 EQ 'G2'.
        screen-active = 1.
      ENDIF.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
* 按钮追加
  PERFORM frm_add_button.

*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
  IF r_a EQ 'X'.
    CLEAR:wa_out.
    wa_out-budat = sy-datum.
    "wa_out-bukrs  = S_VKORG-low.
    wa_out-zskfs  = '转账'.
    CALL FUNCTION 'ZFGET_USERNAME'
      EXPORTING
        i_uname = sy-uname
      IMPORTING
        e_uname = wa_out-zcrd_name. "=  ."凭证创建人
    APPEND wa_out TO gt_out.
  ENDIF.
  IF r_b EQ 'X'.
    PERFORM frm_upload_file.
  ENDIF.
  IF r_c EQ 'X'.
    DATA:lv_flag.
    CLEAR:lv_flag.
    IF r_sk EQ 'X'.
      lv_flag = 'A'.
    ENDIF.
    IF r_tk EQ 'X'.
      lv_flag = 'B'.
    ENDIF.

    SELECT
      *
      INTO CORRESPONDING FIELDS OF TABLE gt_out
      FROM ztsd_023
      WHERE bukrs IN s_vkorg
      AND   budat IN s_budat
     AND  kunnr  IN s_kunnr
      AND  zskyh  IN s_zskyh
     AND   zflag = lv_flag.
     .

    IF gt_out[] IS NOT INITIAL.
      SELECT
        kunnr
        name2 AS name1
        INTO CORRESPONDING FIELDS OF TABLE gt_kunnr
        FROM kna1
        FOR ALL ENTRIES IN gt_out
        WHERE kunnr = gt_out-kunnr
      .
      SELECT
        bukrs
        belnr
        gjahr
        stblg
        INTO CORRESPONDING FIELDS OF TABLE gt_bkpf
        FROM bkpf
        FOR ALL ENTRIES IN gt_out
        WHERE bukrs = gt_out-bukrs
        AND   belnr = gt_out-belnr
        AND   gjahr = gt_out-budat+0(4)
      AND   stblg NE ''.

      DATA:lv_tabix TYPE sy-tabix.
      CLEAR:lv_tabix.
      LOOP AT gt_out INTO wa_out.
        CLEAR:lv_tabix.
        lv_tabix = sy-tabix.
        READ TABLE gt_kunnr INTO wa_kunnr WITH KEY kunnr = wa_out-kunnr.
        IF sy-subrc = 0.
          wa_out-name1 = wa_kunnr-name1.
          CLEAR:wa_kunnr.
        ENDIF.

        READ TABLE gt_bkpf INTO wa_bkpf WITH KEY belnr = wa_out-belnr bukrs = wa_out-bukrs
                                                 gjahr = wa_out-budat+0(4).
        IF sy-subrc = 0.
          DELETE gt_out INDEX lv_tabix.
          CLEAR:wa_bkpf.
        ELSE.
          DATA:lv_dmbtr TYPE dmbtr.
          CLEAR:lv_dmbtr.
          lv_dmbtr = wa_out-zje.
          CALL FUNCTION 'ZF_CONVERT_TO_CAPITALIZATION'
            EXPORTING
              p_amount         = lv_dmbtr
            IMPORTING
              p_capitalization = wa_out-jedx.  "=  ."金额大写
          MODIFY gt_out FROM wa_out INDEX lv_tabix.
        ENDIF.


        CLEAR:wa_out.
      ENDLOOP.
    ENDIF.

    SORT gt_out BY guid..
  ENDIF.

  PERFORM f_alv_out.


END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& 包含               ZMMN0001_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_GET_FILENAME
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*

FORM frm_get_filename .

  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_filename     = '*.xls'
      def_path         = c_file
      mask             = ',*.xls ,*.xls.'
      title            = '选择文件'
    IMPORTING
      filename         = p_file
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
  IF sy-subrc <> 0.
*
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_FUNC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_func .

  CASE sscrfields-ucomm.
    WHEN 'FC01'.
*     下载模板操作
      PERFORM frm_download_excel.
  ENDCASE.


ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_EXCEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_download_excel .

  DATA: lv_filename    TYPE string,
        lv_path        TYPE string,
        lv_fullpath    TYPE string,
        lv_user_action TYPE i.
  DATA: lv_filepath    LIKE rlgrap-filename.

  DATA: lv_def_file_name TYPE string.

  CONCATENATE '客户收款退款模板' sy-datum '.xls'
         INTO lv_def_file_name.

  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = '保存模板文件'
      default_extension    =
                             ',Excel Files,*.xls,All Files,*.*.'               "#EC NOTEXT
      default_file_name    = lv_def_file_name
      file_filter          =
                             'Excel(*.xls , *.xlsx)|*.xls*|'                   "#EC NOTEXT
      prompt_on_overwrite  = 'X'
    CHANGING
      filename             = lv_filename
      path                 = lv_path
      fullpath             = lv_fullpath
      user_action          = lv_user_action
*     file_encoding        =
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.

  CHECK sy-subrc = 0.
* 取消
  IF lv_user_action <> 0.
    RETURN.
* 确定
  ELSE.
    lv_filepath = lv_fullpath.
*   下载文件模板
    PERFORM frm_download_fileexcel USING lv_filepath.

  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_FILEEXCEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> LV_FILEPATH
*&---------------------------------------------------------------------*
FORM frm_download_fileexcel  USING    p_file.

  DATA: l_string TYPE string.
  DATA: objdata LIKE wwwdatatab,
        lv_rc   LIKE sy-subrc.

  DATA: lv_objid TYPE wwwdatatab-objid.    "对象

  lv_objid = 'ZSDR0023'.

  SELECT SINGLE relid
                 objid
            INTO CORRESPONDING FIELDS OF objdata
            FROM wwwdata
           WHERE srtf2 = 0
             AND relid = 'MI'
  AND objid = lv_objid.
  IF sy-subrc <> 0.
    CONCATENATE '模板文件:' lv_objid '不存在,请用TCODE:SMW0进行加载'
           INTO l_string.
    MESSAGE l_string TYPE 'E'.
    EXIT.
  ENDIF.
  IF objdata-objid = space .
    CONCATENATE '模板文件:' lv_objid '不存在,请用TCODE:SMW0进行加载'
           INTO l_string.
    MESSAGE l_string TYPE 'E'.
    EXIT.
  ENDIF.

  CONDENSE p_file.

  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      key         = objdata
      destination = p_file
    IMPORTING
      rc          = lv_rc.
  IF lv_rc <> 0.
    CONCATENATE '模板文件:' lv_objid '下载失败,请与开发人员联系'
       INTO l_string.
    MESSAGE l_string TYPE 'E'.
    EXIT.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_ADD_BUTTON
*&---------------------------------------------------------------------*
*& text
*<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值