SAP ABAP接口实施使用JSON格式

变量定义
DATA: lo_client TYPE REF TO if_http_client,

lo_request TYPE REF TO if_http_request,

lv_result TYPE string,

lv_errocode TYPE sysubrc,

lv_message TYPE string,

lv_input TYPE string,

lv_xinput TYPE xstring.

DATA:

lr_json_reader TYPE REF TO if_sxml_reader.

DATA: lv_url TYPE string.

 

TYPES: BEGIN OF lty_keywords,

key TYPE string,

deleted_at TYPE string,

translations TYPE ty_trans,

END OF lty_keywords.

 

DATA: lt_result TYPE TABLE OF lty_keywords.

调用JSON request
lv_url = 'http://xx.xxx.0.217/api/keywords'.

CALL METHOD cl_http_client=>create_by_url

EXPORTING

url = lv_url

IMPORTING

client = lo_client

EXCEPTIONS

argument_not_found = 1

plugin_not_active = 2

internal_error = 3

OTHERS = 4.

 

IF sy-subrc IS NOT INITIAL.

" Error

EXIT.

ENDIF.

 

lo_client->request->set_header_field( EXPORTING name = '~request_method' value = 'GET' ).

 

lo_client->authenticate(

EXPORTING

* proxy_authentication = 'X'

username = 'certipedia'

password = 'jfds8201'

* language =

).

 

CALL METHOD lo_client->send

EXCEPTIONS

http_communication_failure = 1

http_invalid_state = 2

http_processing_failed = 3

http_invalid_timeout = 4

OTHERS = 5.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

 

 

 

 

 

接受返回值
CALL METHOD lo_client->receive

EXCEPTIONS

http_communication_failure = 1

http_invalid_state = 2

http_processing_failed = 3

OTHERS = 4.

 

CALL METHOD lo_client->get_last_error

IMPORTING

code = lv_errocode

message = lv_message.

 

lv_input = lo_client->response->get_cdata( ).

 

返回数据格式转换
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'

EXPORTING

text = lv_input

IMPORTING

buffer = lv_xinput

EXCEPTIONS

failed = 1   

OTHERS = 2.

IF sy-subrc <> 0.

* Implement suitable error handling here

ENDIF.

 

lr_json_reader = cl_sxml_string_reader=>create( input = lv_xinput ).

 

CALL TRANSFORMATION id SOURCE XML lr_json_reader

RESULT keywords = lt_result.

 

lo_client->close( ).

第二种方式

 DATA: lo_client TYPE REF TO if_http_client,

        lo_request TYPE REF TO if_http_request,

       lv_parameter TYPE string,

        lv_parameter2 TYPE string.

 

  DATA: lv_result TYPE string,

        lv_errocode TYPE sysubrc,

        lv_message TYPE string.

 

  DATA: ls_config TYPE zwzert_id_inf,

        lv_username   TYPE string,

        lv_psw    TYPE string,

        lv_url    TYPE string.

 

处理参数
   lv_parameter = ' { '

     & '"id": "=ID=",'

     & '"caption": =TMC=, '

     & '"layout": 3,'

     & '"keywords": [ =KEYWORD=],'

     & '"qr_code_url": null,'

     & ' "third_party_mark": null,'

     & ' "annual_ring_range": null,'

     & ' "annual_ring_text": null,'.

 

    lv_parameter2 =

    ' "output_format": 1,'

    & ' "output_quality": 1,'

*    & ' "generate_zip": true,'

    & ' "generate_zip": false,'

    & ' "use_small_font": =FONT=,'

    & ' "langs": ['

    &  ' "=LANG=",'

    &  ' "=LANG=",'

    &   '"=LANG="'

*    & ' ]'

    & ' ],'

    & '"generate_jpg_instead_png":true'

& '}'.

 

  lv_length = strlen( lv_parameter ).

 

 

  CALL FUNCTION 'CONVERT_STRING_TO_TABLE'

    EXPORTING

      i_string         = lv_parameter

      i_tabline_length = 80

    TABLES

      et_table         = lt_table.

 

发送JSON request
  CALL METHOD cl_http_client=>create_by_url

    EXPORTING

      url                = lv_url 

    IMPORTING

      client             = lo_client

    EXCEPTIONS

      argument_not_found = 1

      plugin_not_active  = 2

      internal_error     = 3

      OTHERS             = 4.

 

  lo_client->request->set_header_field( EXPORTING name = '~request_method' value = 'POST' ).

 

  lo_client->request->set_header_field( EXPORTING name = '~request_protocol' value = 'HTTP/1.0' ).

 

  lo_client->request->set_header_field( EXPORTING name = 'Content-Type' value = 'text/xml' ).

 

  CALL METHOD lo_client->request->set_header_field

    EXPORTING

      name  = '~request_uri'

      value = '/generator/tdcgenerator.svc/generator'.

 

  lo_client->request->set_cdata( EXPORTING data  = lv_parameter offset = 0  length = lv_length ).

 

CALL METHOD lo_client->authenticate

    EXPORTING

*      proxy_authentication = 'X'

*     client               =

      username             = lv_username

      password             = lv_psw

*     language             =

    .

 

  CALL METHOD lo_client->send

    EXCEPTIONS

      http_communication_failure = 1

      http_invalid_state         = 2

      http_processing_failed     = 3

      http_invalid_timeout       = 4

      OTHERS                     = 5.

  IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDIF.

 

接受反馈信息
  CALL METHOD lo_client->receive

    EXCEPTIONS

      http_communication_failure = 1

      http_invalid_state         = 2

      http_processing_failed     = 3

      OTHERS                     = 4.

 

  CALL METHOD lo_client->get_last_error

    IMPORTING

      code    = lv_errocode

      message = lv_message.

 

  lv_result = lo_client->response->get_cdata( ).

 

处理URL
*JPG

  FIND REGEX 'http.*jpg' IN lv_result

       MATCH OFFSET lv_moff

       MATCH LENGTH lv_mlen.

 

  TRY .

      ev_url = substring( val = lv_result off = lv_moff len = lv_mlen ).

    CATCH cx_sy_range_out_of_bounds.

      MESSAGE e151(zw).

  ENDTRY.

  lo_client->close( ).

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP是一种高级编程语言,通常用于SAP系统的开发,它是面向对象的,可扩展的,具有跨平台的特性。而JSON是一种轻量级的数据交换格式,由于它具有易读性,易解析性以及广泛的支持,已经成为Web开发、移动开发等领域的数据传输标准。 对于在SAP系统中使用JSON数据格式的情况,我们需要使用ABAP中的JSON解析器来将JSON数据转化为ABAP内部的数据结构。在ABAP中,有两种常用的JSON解析方式: 1. JSON转换器(SAP内部类型) 这种方式是将JSON字符串转换成SAP内部类型的结构(例如table、structure、string、numeric值等),从而方便我们在ABAP程序中进行后续的操作。 首先需要通过调用兼容JSON的结构描述语言的类,生成兼容JSON语法的文档类型,之后再根据需要的数据结构,利用WRITE_JSON_FILE函数生成JSON数据格式,最后再将JSON数据格式传入PARSE_JSON()函数解析。 利用JSON转换器的方式,我们可以通过简单的语句实现JSON数据与ABAP内部数据的转化,但是由于其复杂的使用方式,这种方法不太适合在大型的应用中使用。 2. JSON解析器接口SAP内置类) 另外一种解析JSON数据的方式是使用SAP内置的JSON解析器接口,这种方法比较容易理解和使用,也比较适合在大型的应用中使用ABAP中提供了CL_TREX_JSON_PARSER类,它可以处理所有JSON数据结构(例如object、array、value等)并将其转换成ABAP数据类型。利用该类,我们可以轻松地将JSON数据转换为ABAP内部数据结构,同时也能够轻松地将ABAP数据类型转换为JSON数据格式。 总而言之,无论是使用SAP内置的JSON转换器,还是直接在ABAP使用JSON解析器接口,都可以轻松地将JSON数据转换成ABAP内部数据结构,并进行各种操作或者通过HTTP或其他协议与外部系统进行数据交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值