Si vous souhaitez appeler en local une de vos APIs à des fins de tests, ou encore pour l’utiliser dans un de vos objets de développement, vous pouvez utiliser un proxy local ( On premise ou Private Cloud seulement ).
Prenons par exemple l’API suivante ( API_OUTBOUND_DELIVERY_SRV ) sur S/4 Hana Private Cloud : https://api.sap.com/api/OP_API_OUTBOUND_DELIVERY_SRV_0002/overview
Nous utiliserons cette API pour mettre à jour une livraison sortante dans SAP.
Développement et appel de l’API
Pour l’appeler dans un développement local on procèdera comme suit :
- Exposition du service ( ici oData V2 )

- On vérifie si ETag il y a en regardant dans le projet en SEGW : ici DeliveryVersion (servira plus tard)

- On écrit enfin le code
1/ Déclaration des variables et création du proxy client
| 1 2 3 4 5 6 7 8 9 10 11 | * GET       DATA: lo_client_proxy  TYPE REF TO /iwbep/if_cp_client_proxy,             lo_read_request  TYPE REF TO /iwbep/if_cp_request_read_list,             lo_resource      TYPE REF TO /iwbep/if_cp_resource_entity,             lo_response      TYPE REF TO /iwbep/if_cp_response_read,             lo_read_response TYPE REF TO /iwbep/if_cp_response_read_lst,             ls_entity_key    TYPE cl_api_outbound_del_02_mpc=>ts_a_outbdeliveryheadertype,             ls_business_data TYPE cl_api_outbound_del_02_mpc=>ts_a_outbdeliveryheadertype. * Création du Proxy client       lo_client_proxy = /iwbep/cl_cp_client_proxy_fact=>create_v2_local_proxy( VALUE #( service_id = 'API_OUTBOUND_DELIVERY_SRV' service_version = '0001' ) ). | 
2/ Création de la requête GET pour obtenir le ETag
| 1 2 3 4 5 6 7 8 9 10 |      lo_read_request = lo_client_proxy->create_resource_for_entity_set( 'A_OutbDeliveryHeader' )->create_request_for_read( ).       lo_read_response = lo_read_request->execute( ).       ls_entity_key = VALUE #(               deliverydocument  = iv_deliverynumber ). "Delivery to update       lo_resource = lo_client_proxy->create_resource_for_entity_set( 'A_OutbDeliveryHeader' )->navigate_with_key( ls_entity_key ).       " Execute the request and retrieve the business data       lo_response = lo_resource->create_request_for_read( )->execute( ).       lo_response->get_business_data( IMPORTING es_business_data = ls_business_data ). | 
Les données reçues de l’API sont placées dans ls_business_data
3/ Création de la requête PATCH pour modifier le champs DeliveryDocumentBySupplier
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |       " Navigate to the resource and create a request for the update operation       DATA: lo_patch_resource TYPE REF TO /iwbep/if_cp_resource_entity,             lo_patch_request  TYPE REF TO /iwbep/if_cp_request_update,             ls_patch_data     TYPE cl_api_outbound_del_02_mpc=>ts_a_outbdeliveryheadertype,             lo_patch_response TYPE REF TO /iwbep/if_cp_response_update.       lo_patch_resource = lo_client_proxy->create_resource_for_entity_set( 'A_OutbDeliveryHeader' )->navigate_with_key( ls_entity_key ).       lo_patch_request = lo_patch_resource->create_request_for_update( /iwbep/if_cp_request_update=>gcs_update_semantic-patch ).       " ETag is needed       lo_patch_request->set_if_match( CONV string( ls_business_data-deliveryversion ) ).       ls_patch_data = VALUE #(       DeliveryDocumentBySupplier  = iv_lifex "External ID to update       deliverydocument = iv_deliverynumber "In OData V2, it's needed to add also the key in the body request).       " Execute the request and retrieve the business data       lo_patch_request->set_business_data( is_business_data = ls_patch_data       it_provided_property = VALUE #( ( |DELIVERYDOCUMENTBYSUPPLIER| ) ) ).       lo_patch_response = lo_patch_request->execute( ). | 
Conclusion
Voici une solution pour appeler des APIs en interne dans un programme ABAP. Via cette méthode il n’y a pas d’entête HTTP précisé dans la requête puisque tout se fait en interne dans le même système SAP.
Cependant, la classe /IWBEP/CL_CP_CLIENT_PROXY_FACT n’est pas disponible sur le cloud (BTP, ABAP environment et S/4 Cloud). En cas de développement dans ces environnements, il vaudra mieux s’orienter vers l’utilisation d’API qui ont été créées en utilisant le framework RAP et ainsi utiliser l’EML pour interagir directement avec le business object, ou utiliser plutôt la classe /IWBEP/CL_CP_FACTORY_REMOTE et donc la création d’un remote proxy.
Pour les tests unitaires, on pourra utiliser en ABAP Cloud la classe /IWBEP/CL_CP_FACTORY_UNIT_TST.
