• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
^ω^SAp傻X^o^
博客园    首页    新随笔    联系   管理    订阅  订阅
abap调token+ws代码备份
REPORT zcrm_in_order_api.

TYPES:BEGIN OF ty_but0,
        partner  TYPE bu_partner,
        bu_group TYPE bu_group,
        xsexm    TYPE bu_xsexm,
        birthdt  TYPE datum,
        mc_name1 TYPE bu_mcname1,
        mc_name2 TYPE bu_mcname2,
      END OF ty_but0,
      BEGIN OF ty_log,
        object TYPE crmt_object_id,
        area   TYPE rs38l_area,
        rtype  TYPE bapi_mtype,
      END OF ty_log,
      BEGIN OF ty_customer,
*customer_details   客户信息结构,包含以下同色字段
        first_name      TYPE string, "  取售达方First name
        last_name       TYPE  string, "  取售达方Last name
        mobile_phone    TYPE string, "  取售达方的移动电话
        home_phone      TYPE string, "  取售达方固定电话
        alternate_phone TYPE  string, "  备用电话,留空
        email           TYPE  string, "  取售达方电子邮件地址
        contact_person  TYPE string, "  联系人,留空
      END OF ty_customer,
      BEGIN OF ty_addr,
        address  TYPE string,
        landmark TYPE string,
        pincode  TYPE string,
      END OF ty_addr,
      BEGIN OF ty_prd,
        brand         TYPE  string, "  品牌,取文本,大写
        product       TYPE string, "  取安装单产品英文描述
        model         TYPE  string, "  取安装单客户型号
        serial_number TYPE  string, "  取安装单序列号
      END OF ty_prd,
      BEGIN OF ty_war,
        warranty_period_value TYPE i, "  逻辑待定
        warranty_period_unit  TYPE string, "  逻辑待定
      END OF ty_war,
      BEGIN OF ty_pay,
        payment_method    TYPE string, "  留空
        amount_to_collect TYPE i, "  留空
      END OF ty_pay,
      BEGIN OF ty_create,
        client_reference_id TYPE string, "  海信安装单号
        complaint_type      TYPE string, "  订单类型,安装默认‘INSTALLATION’
        remarks             TYPE string, "  取安装单长文本A002 Note
        ticket_spd          TYPE string, "  日期,先驱Assignment Job Date,格式如:2022-04-29T00:00:00
        customer_details    TYPE ty_customer,
        address_details     TYPE ty_addr,
        product_details     TYPE ty_prd, "  产品信息结构,包含以下同色字段
        warranty_details    TYPE ty_war,
        payment_details     TYPE ty_pay, "  付款信息结构,包含以下同色字段
      END OF ty_create,
      BEGIN OF ty_receive,
        response_code       TYPE  string, " 返回码,1表示成功
        case_id             TYPE  string, " 服务商系统安装单号
        client_reference_id TYPE  string, " 海信安装单号
        error_message       TYPE  string, " 错误信息
        success             TYPE  string, " 是否成功,true & false
      END OF ty_receive.
DATA:gw_login    TYPE zcrm_login,
     gw_customer TYPE ty_customer,
     gw_addr     TYPE ty_addr,
     gw_prd      TYPE ty_prd,
     gw_war      TYPE ty_war,
     gw_pay      TYPE ty_pay,
     gw_create   TYPE ty_create,
     lv_service  TYPE  string,
     gw_receive  TYPE  ty_receive,
     lv_que_url  TYPE  string.
DATA:gt_fields TYPE tihttpnvp.
DATA:gw_index   TYPE zhsb_order_index,
     gt_index   TYPE TABLE OF zhsb_order_index,
     gw_adrc    TYPE adrc,
     gw_adr2    TYPE adr2,
     gt_adr2    TYPE TABLE OF adr2,
     gw_adr6    TYPE adr6,
     gw_t005    TYPE t005u,
     gw_but0    TYPE ty_but0,
     lt_crmt13  TYPE TABLE OF zcrmt0013,
     ls_crmt13  LIKE LINE OF lt_crmt13,
     gw_log     TYPE ty_log,
     lv_log     TYPE zcrmtfr002,
     gt_line    TYPE TABLE OF tline,
     gw_line    LIKE LINE OF gt_line,
     lv_name    TYPE thead-tdname,
     gt_iflog   TYPE TABLE OF zcrmtin001,
     gw_iflog   LIKE LINE OF gt_iflog,
     v_retailer TYPE string.

DATA: lo_des         TYPE REF TO zprocessjson,
      lo_http_client TYPE REF TO if_http_client,
      lv_customer    TYPE string,
      lv_xrequest    TYPE xstring,
      lx_result      TYPE xstring,
      lv_result      TYPE string,
      lv_que_str     TYPE string,
      lv_len         TYPE i,
      conv           TYPE REF TO cl_abap_conv_in_ce,
      BEGIN OF re_login,
        access_token TYPE string,
        token_type   TYPE string,
        expires_in   TYPE string,
        scope        TYPE string,
      END OF re_login.


SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME TITLE text-001.
PARAMETERS:p_org TYPE crmt_sales_org OBLIGATORY DEFAULT 'O 50000615'.
PARAMETERS:p_dat TYPE crmt_posting_date OBLIGATORY DEFAULT sy-datum.
PARAMETERS:p_prd TYPE bu_partner OBLIGATORY DEFAULT '0000506843'.
SELECT-OPTIONS:s_obj FOR gw_index-object_id.
SELECTION-SCREEN END OF BLOCK blk01.


START-OF-SELECTION.
  APPEND INITIAL LINE TO gt_index.

  IF gt_index[] IS NOT INITIAL.
    SELECT * INTO TABLE gt_iflog FROM zcrmtin001 FOR ALL ENTRIES IN gt_index WHERE guid = gt_index-guid.
    "获取token

    PERFORM prm_get_token.

    CHECK re_login-access_token IS NOT INITIAL.
    "拼接后续要使用的tken
    CONCATENATE 'Bearer' re_login-access_token INTO re_login-access_token SEPARATED BY space.
    LOOP AT gt_index INTO gw_index.
      CLEAR:gw_adrc,gw_adr6,gt_adr2[],gw_but0,gw_iflog."清空查询数据
      CLEAR:gw_login."清空业务数据
      READ TABLE gt_iflog INTO gw_iflog WITH KEY guid = gw_index-guid.
      IF sy-subrc = 0."已存log不再处理
        CONTINUE.
      ENDIF.

      "客户信息
      SELECT SINGLE * INTO gw_adrc FROM adrc WHERE addrnumber = gw_index-addr_nr.
      SELECT SINGLE * INTO gw_t005 FROM t005u WHERE spras = 'E' AND land1 = gw_adrc-country AND bland = gw_adrc-region.
      SELECT SINGLE * INTO gw_adr6 FROM adr6 WHERE addrnumber = gw_index-addr_nr.
      SELECT * INTO TABLE gt_adr2 FROM adr2 WHERE addrnumber = gw_index-addr_nr.
      SELECT SINGLE partner bu_group xsexm birthdt mc_name1 mc_name2 INTO gw_but0 FROM but000 WHERE partner = gw_index-end_user.

      "业务数据处理
      PERFORM prm_proce_data.

      "调用API发送单据信息
      PERFORM prm_send_data.

      "记录log
      PERFORM prm_log.

    ENDLOOP.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  PRM_GET_TOKEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM prm_get_token .
  DATA:
       lv_query_str TYPE string.


  lv_service = 'xxxxx.xxxxx/xxxxx?xxxxx=xxxxx&xxxxx=xxxxx'.

  REFRESH gt_fields.
  PERFORM frm_add_header_value USING '~request_method' 'GET' CHANGING gt_fields.
  PERFORM frm_add_header_value USING '~request_uri' lv_service CHANGING gt_fields.



  cl_http_client=>create_by_url(
    EXPORTING
      url                = lv_service
    IMPORTING
      client             = lo_http_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4 ).

  lo_http_client->request->if_http_entity~set_content_type( content_type = 'application/x-www-form-url_encoded' ).

  lo_http_client->request->set_method( if_http_request=>co_request_method_get ).
  lo_http_client->request->set_header_fields( gt_fields ).
*  lo_http_client->request->set_method( if_http_request=>co_request_method_post ).

  lo_http_client->send(
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2 ).


  lo_http_client->receive(
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3 ).
  IF sy-subrc <> 0.
  ENDIF.

  CLEAR lv_result .
  lx_result = lo_http_client->response->get_data( ).
  CALL METHOD lo_http_client->close.

  CHECK lx_result IS NOT INITIAL.

  CALL METHOD cl_abap_conv_in_ce=>create
    EXPORTING
      encoding = '8400'
    RECEIVING
      conv     = conv.
  conv->convert( EXPORTING input = lx_result IMPORTING data = lv_result ).

  zprocessjson=>deserialize(
    EXPORTING
      json        = lv_result
    CHANGING
      data        = re_login
         ).

  "获取token结束
ENDFORM.
FORM frm_add_header_value USING    lv_name
                                   lv_value
                          CHANGING lt_fields TYPE tihttpnvp.
  DATA: lw_fields TYPE ihttpnvp.

  lw_fields-name  = lv_name.
  lw_fields-value = lv_value.
  APPEND lw_fields TO lt_fields.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  PRM_SEND_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM prm_send_data .
  CLEAR:lv_que_str.


  lv_customer = zprocessjson=>serialize(
      data        = gw_create
      pretty_name = 'L' ).


  lv_que_url = 'https://xxxxx/xxxxx/xxxx/xxxx'.

  lv_que_str = lv_customer.

  REPLACE ALL OCCURRENCES OF `\` IN lv_que_str WITH ''.

  FREE:lo_http_client.

  cl_http_client=>create_by_url(
    EXPORTING
      url                = lv_que_url
*      ssl_id             = 'ANONYM'
    IMPORTING
      client             = lo_http_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4 ).

  lo_http_client->request->if_http_entity~set_content_type( content_type = 'application/json' ).
  lo_http_client->request->if_http_entity~set_header_field( name = 'Accept' value = 'application/json' ).
  lo_http_client->request->set_method( if_http_request=>co_request_method_post ).
  lo_http_client->request->if_http_entity~set_header_field( name   = 'Authorization' value = re_login-access_token ).
  lo_http_client->request->if_http_entity~set_header_field( name   = 'X-CLIENT-ID' value = 'hisense_jeeves' ).
  lo_http_client->request->if_http_entity~set_header_field( name   = '~server_protocol' value = 'HTTP/1.1' ).


  lo_http_client->response->if_http_entity~set_content_type( content_type = 'application/json' ).

  lv_len = strlen( lv_que_str ).

  CALL METHOD lo_http_client->request->set_cdata
    EXPORTING
      data   = lv_que_str
      offset = 0
      length = lv_len.

  lo_http_client->send(
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2 ).

  lo_http_client->receive(
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3 ).
  IF sy-subrc <> 0.
  ENDIF.

  DATA:v_i TYPE i,
       v_s TYPE string.

  CLEAR lv_result .
  lx_result = lo_http_client->response->get_data( ).

  lo_http_client->response->get_status(
   IMPORTING
     code   = v_i
     reason = v_s ).

  CALL METHOD lo_http_client->close.

  CHECK lx_result IS NOT INITIAL.

  CALL METHOD cl_abap_conv_in_ce=>create
    EXPORTING
      encoding = '8400'
    RECEIVING
      conv     = conv.
  conv->convert( EXPORTING input = lx_result IMPORTING data = lv_result ).
  "ree
  zprocessjson=>deserialize(
    EXPORTING
      json        = lv_result
    CHANGING
      data        = gw_receive
         ).
  CHECK 1 = 1 .
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  PRM_PROCE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM prm_proce_data .
*customer_details   客户信息结构,包含以下同色字段
  gw_customer-first_name = gw_adrc-name1.
  gw_customer-last_name = gw_adrc-name2.

  IF gw_customer-last_name IS INITIAL.
    gw_customer-last_name = gw_customer-first_name.
  ENDIF.
  IF gw_customer-first_name IS INITIAL AND gw_customer-last_name IS INITIAL.
    gw_customer-first_name = gw_but0-mc_name1.
    gw_customer-last_name = gw_but0-mc_name2.
  ENDIF.

  READ TABLE gt_adr2 INTO gw_adr2 WITH KEY r3_user = '1'.
  IF sy-subrc = 0.
    gw_customer-home_phone = gw_adr2-telnr_long.
  ENDIF.
  READ TABLE gt_adr2 INTO gw_adr2 WITH KEY r3_user = '3'.
  IF sy-subrc = 0.
    gw_customer-mobile_phone = gw_adr2-telnr_long.
  ENDIF.

  gw_customer-email = gw_adr6-smtp_addr.

  "address_details详细地址,格式为:售达方street/售达方City1/售达方Region描述
  CONCATENATE gw_adrc-street gw_adrc-str_suppl1 gw_adrc-city1 gw_t005-bezei INTO gw_addr-address SEPARATED BY space.
  gw_addr-pincode = gw_adrc-post_code1.
  "product_details
  gw_prd-brand = gw_index-zzzbrand.
  gw_prd-model = gw_index-zzzmodeno.
  gw_prd-serial_number = gw_index-zzzserialno.
  SELECT SINGLE short_text INTO gw_prd-product FROM comm_prshtext
    INNER JOIN comm_product
    ON comm_product~product_guid = comm_prshtext~product_guid
    WHERE comm_product~product_id = gw_index-product_id
    AND  comm_prshtext~langu = 'E'.

  gw_create-client_reference_id = gw_index-object_id.
  gw_create-complaint_type = 'INSTALLATION'.
  lv_name = gw_index-guid.
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      id                      = 'A002'
      language                = 'E'
      name                    = lv_name
      object                  = 'CRM_ORDERH'
    TABLES
      lines                   = gt_line
    EXCEPTIONS
      id                      = 1
      language                = 2
      name                    = 3
      not_found               = 4
      object                  = 5
      reference_check         = 6
      wrong_access_to_archive = 7
      OTHERS                  = 8.
  IF sy-subrc <> 0.
  ELSE.
    LOOP AT gt_line INTO gw_line.
      REPLACE ALL OCCURRENCES OF `\` IN gw_line-tdline WITH ''.
      REPLACE ALL OCCURRENCES OF `"` IN gw_line-tdline WITH ''.
      IF gw_line-tdformat = '*'.
        CONCATENATE gw_create-remarks cl_abap_char_utilities=>cr_lf gw_line-tdline INTO gw_create-remarks SEPARATED BY space.
      ELSE.
        CONCATENATE gw_create-remarks gw_line-tdline INTO gw_create-remarks SEPARATED BY space.
      ENDIF.
    ENDLOOP.
  ENDIF.

  gw_create-ticket_spd = gw_index-assign_date+0(4) && '-' && gw_index-assign_date+4(2) && '-' && gw_index-assign_date+6(2) && 'T00:00:00'.

  gw_pay-payment_method = 'PREPAID'.
  gw_pay-amount_to_collect = 0.

  gw_war-warranty_period_value = 3.
  gw_war-warranty_period_unit = 'YEARS'.

  gw_create-customer_details = gw_customer.
  gw_create-address_details = gw_addr.
  gw_create-product_details = gw_prd.
  gw_create-warranty_details = gw_war.
  gw_create-payment_details = gw_pay.
*
*
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  PRM_LOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM prm_log .
  DATA:v_s1 TYPE string,
       v_s2 TYPE string.

  IF gw_receive-response_code = 1.
    gw_iflog-guid = gw_index-guid.
    gw_iflog-object_id = gw_index-object_id.
    gw_iflog-ref_obj = gw_receive-case_id.
    gw_iflog-flag = 'X'.
    gw_iflog-create_flg = 'X'.

    MODIFY zcrmtin001 FROM gw_iflog.
    gw_log-rtype = 'S'.
  ELSE.
    gw_log-rtype = 'E'.
  ENDIF.

  DELETE FROM zcrmtfr002 WHERE object = gw_index-object_id.
  gw_log-object = gw_index-object_id.
  gw_log-area = 'EJSON'.
  EXPORT gw_log-area = lv_result TO DATABASE zcrmtfr002(fr) FROM lv_log ID gw_log.
  gw_log-area = 'SJSON'.
  EXPORT gw_log-area = lv_que_str TO DATABASE zcrmtfr002(fr) FROM lv_log ID gw_log.
  IF gw_log-rtype = 'E'.
    WRITE: / gw_index-object_id , lv_result.
  ENDIF.

ENDFORM.

 

^_^很多人都把资料锁进了note里,以后还怎么百度呢^_^
posted on 2022-06-10 10:49  ^ω^SAP傻X^o^  阅读(307)  评论(2)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3