SharePoint API aus ABAP aufrufen

Hier war es lange still, Zeit für einen neuen Beitrag. Das Thema hat mich einige Stunden gekostet. Ich hoffe es hilft dem ein oder anderen.

SharePoint bietet eine umfassende REST-API mit CRUD (Create Read Update Delete) Methoden an. Mit dieser API können z.B. Listenelemente gelesen und erstellt werden. Diese lässt sich auch in ABAP verwenden.

Die REST-API wird mittels HTTP Requests angesprochen. Das Ergebnis ist ein XML Dokument. Diese URL z.B. liefert die XML Struktur einer Liste.

http://<url zur Site>/_api/web/lists/GetByTitle('<Listentitel>')

Das folgende Beispiel zeigt, wie sich die SharePoint-API aus SAP aufrufen lässt. Somit ist es beispielsweise möglich, aus SAP heraus ein neues SharePoint Listenelement zu erzeugen.

Wird auf der SharePoint Liste ein Workflow ausgeführt (Trigger ist die Erstellung eines neuen Elements), kann über diesen Weg der SharePoint Workflow von SAP angestoßen werden.

Code

In diesem Beispiel wird die Listendefinition einer Liste gelesen

*&---------------------------------------------------------------------*
*& Report  Z_TEST_RESTFUL_SERVICE
*&
*&---------------------------------------------------------------------*
*&  SharePoint API aufrufen
*&
*&---------------------------------------------------------------------*
REPORT z_test_restful_service.

DATA: lo_http_client   TYPE REF TO if_http_client,
      lv_service       TYPE string,
      lv_result        TYPE xstring.

lv_service = 'http://url/_api/web/lists/GetByTitle(' && |'| && 'Title' && |'| && ')'.

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 ).

" Methode setzen
lo_http_client->request->set_method( if_http_request=>co_request_method_get ).

" Protokollversion setzen
lo_http_client->request->set_version( if_http_request=>co_protocol_version_1_0 ).

" content type setzen
lo_http_client->request->set_content_type( 'application/json' ).

" Header setzen
lo_http_client->request->set_header_field( name = 'accept' value = 'application/json;odata/verbose' ).


" Authentifizierung
lo_http_client->request->set_authorization( auth_type = '1'
                                            username = 'user'
                                            password = 'passwd').

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 ).

" XML Ergebnis lesen
CLEAR lv_result .
lv_result = lo_http_client->response->get_data( ).

" XML ausgeben
CALL FUNCTION 'SRTUTIL_HELPER_XML_SHOW'
  EXPORTING
    xdoc = lv_result
    html = abap_false.

Verweise

https://msdn.microsoft.com/de-de/library/office/fp142380.aspx

https://msdn.microsoft.com/de-de/library/office/dn292552.aspx