zl程序教程

您现在的位置是:首页 >  其他

当前栏目

使用 ABAP 代码消费 SAP Cloud for Customer 系统的 OData 服务

SAPCloud系统服务代码 for ABAP 消费
2023-09-14 09:02:43 时间

下面这个程序演示了如何使用 SAP ABAP 程序,在 SAP C4C 系统里创建 Opportunity 数据:

REPORT ZCREATE_OPP.

define insert_line.
   lv_body = lv_body && &1.
   lv_body = lv_body && cl_abap_char_utilities=>newline.
end-of-DEFINITION.

DATA:lo_http_client TYPE REF TO if_http_client,
         lv_status      TYPE i,
         lt_fields      TYPE tihttpnvp,
         lv_sysubrc     TYPE sysubrc.

    CALL METHOD cl_http_client=>create_by_url
      EXPORTING
        url                = 'https://sap.com/sap/c4c/odata/v1/c4codata/$batch'
      IMPORTING
        client             = lo_http_client
      EXCEPTIONS
        argument_not_found = 1
        plugin_not_active  = 2
        internal_error     = 3
        OTHERS             = 4.

    ASSERT sy-subrc = 0.

    CALL METHOD lo_http_client->request->set_method( if_http_request=>co_request_method_post ).

    lo_http_client->request->set_header_field( name = 'Content-Type' value = 'multipart/mixed; boundary=batch_1' ).
    lo_http_client->request->set_header_field( name = 'x-csrf-token' value = 'fA_ZUYNfTF_Jdl_kff2G6A==' ).
    lo_http_client->request->set_header_field( name = 'Authorization' value = 'Basic 123456' ).


    DATA: lv_body TYPE string.

insert_line '--batch_1'.
insert_line 'Content-Type: multipart/mixed; boundary=changeset_1'.
lv_body = lv_body && cl_abap_char_utilities=>cr_lf.
*
insert_line '--changeset_1'.
insert_line 'Content-Type: application/http'.
insert_line 'Content-Transfer-Encoding: binary'.
lv_body = lv_body && cl_abap_char_utilities=>cr_lf.

insert_line 'POST OpportunityCollection HTTP/1.1'.
insert_line 'Content-Length: 5000'.
insert_line 'Accept: application/json'.
insert_line 'Content-Type: application/json'.

lv_body = lv_body && cl_abap_char_utilities=>cr_lf.
insert_line '{'.
insert_line '"AccountID": "8000018122",'.
insert_line '"OwnerID": "8000018122",'.
insert_line `"Name": {"content": "Testing ticket creation via OData Jerry1"}`.
insert_line '}'.
insert_line '--changeset_1--'.
lv_body = lv_body && cl_abap_char_utilities=>cr_lf.
insert_line '--batch_1--'.

    lo_http_client->request->set_cdata( data = lv_body ).
    CALL METHOD lo_http_client->send
      EXCEPTIONS
        http_communication_failure = 1
        http_invalid_state         = 2
        http_processing_failed     = 3.

    ASSERT sy-subrc = 0.

    CALL METHOD lo_http_client->receive
      EXCEPTIONS
        http_communication_failure = 1
        http_invalid_state         = 2
        http_processing_failed     = 3.

    IF sy-subrc <> 0.
      CALL METHOD lo_http_client->get_last_error
        IMPORTING
          code    = lv_sysubrc
          message = DATA(ev_message).
      WRITE: / |error occurred during receive data: { ev_message } | COLOR COL_NEGATIVE.
      RETURN.
    ENDIF.

    DATA(lv_json) = lo_http_client->response->get_cdata( ).

    BREAK-POINT.