Follow
SIMG > ABAP Platform > Application Server > Basis Services > Communication Interfaces
> OAuth 2.0 Client Implementation for SAP SuccessFactors Integration
The default implementation allows only a connection to ONE SuccessFactors instance.
Then you can use the existing objects.
This ones decribes how to create custom objects for multiple instances.
x. OA2C_CONFIG (t.oa2c_client)
<sf_host>/oauth/token form, header, current, SAML www.successfactors.com 998
REPORT ZMDW_EC_RFC.
DATA:
lo_client TYPE REF TO if_http_client,
lv_res_data_bin TYPE xstring,
lv_res_data_str TYPE string,
lv_req_data_bin TYPE xstring,
lv_req_data_str TYPE string,
lo_conv TYPE REF TO cl_abap_conv_in_ce.
cl_http_client=>create_by_destination(
EXPORTING
"destination = 'SF_ContiDev_OAuth'
destination = 'SF_ContiQA_OAuth'
IMPORTING
client = lo_client
EXCEPTIONS
argument_not_found = 1
destination_not_found = 2
destination_no_authority = 3
plugin_not_active = 4
internal_error = 5
OTHERS = 6
).
lo_client->request->set_method( if_http_request=>co_request_method_get ).
"New path ->
lo_client->request->set_header_field( name = '~request_uri' value = '/odata/v2/FODivision?$filter=externalCode+eq+''204''' ). " <=========
lo_client->send( ).
lo_client->receive( ).
lv_res_data_bin = lo_client->response->get_data( ).
lo_conv = cl_abap_conv_in_ce=>create( input = lv_res_data_bin ).
lo_conv->read( IMPORTING data = lv_res_data_str ).
lo_client->close( ).
cl_demo_output=>display(
EXPORTING
data = lv_res_data_str
name = 'Response'
).
" Create entry with r.ZMDW_TEST, the new applic need to be assigned to the type via SM30 > CLB2V_PTYPE
FORM create_sf_application.
DATA: ls_app TYPE ssfapplic,
ls_appt type SSFAPPLICT,
lv_new_app_name TYPE string.
delete from ssfapplic where applic = 'OA_CD'.
delete from ssfapplict where applic = 'OA_CD'.
lv_new_app_name = 'OACD'.
SELECT SINGLE * FROM ssfapplic INTO ls_app WHERE applic = 'OA2CS'.
ls_app-applic = lv_new_app_name.
MODIFY ssfapplic FROM ls_app.
WRITE: / |modified { lv_new_app_name }, rc={ sy-subrc }|.
SELECT SINGLE * FROM SSFAPPLICT INTO ls_appt WHERE sprsl = 'E' and applic = 'OA2CS'.
ls_appt-applic = lv_new_app_name.
ls_appt-descript = |OAuth2 Client Identity Provider - { lv_new_app_name }|.
MODIFY SSFAPPLICT FROM ls_appt.
WRITE: / |modified { lv_new_app_name }, rc={ sy-subrc }|.
ENDFORM.
Add SFF ID specific parameters with
Note: use always same case to avoid mixing up at all artifacts: Profile, Type, Application ID, Service Provider Type, SSF ID, Server
CL_OA2C_SPECIFICS_DEFAULT
CL_OA2C_CONFIG_EXT_DEFAULT
(default) (custom)
Enh. Spot OA2C_SPECIFICS (not visible in OA2C_CONFIG)
Enh. Impl. SMI_OA2C_SPEC_SFSF (not visible in OA2C_CONFIG)
BAdI Def OA2C_SPECIFICS_BADI_DEF
BAdi Impl. SMI_OA2C_SPEC_SFSF_BIZX => Z_SMI_OA2C_SPEC_SFSF_BIZX_CD*
Filter Value: SUCCESSFACTORS => Z_CONTIDEV
Implementation Class: CL_SMI_OA2C_SPEC_SFSF => copied to ZCL_SMI_OA2C_SPEC_SFSF_CD
=> exchange all references from class CL_SMI_OA2C_CONFIG_SFSF to ZCL_SMI_OA2C_CONFIG_SFSF_CD
=> edit method IF_OA2C_SPECIFICS~GET_CONFIG_EXTENSION (replace R_CONFIG_EXTENSION name)
*SE18 > es.OA2C_SPECIFICS
> Right-Click > Create implementation > ei.Z_SMI_OA2C_SPEC_SFSF_CD
> bi.Z_SMI_OA2C_SPEC_SFSF_BIZX_CD
> assign class from above and add filter
Enh. Spot OA2C_CONFIG_EXTENSION Enh. Impl. SMI_OA2C_CONFIG_SFSF BAdI Def OA2C_CONFIG_EXTENSION_BADI_DEF BAdi Impl. SMI_OA2C_CONFIG_SFSF_BIZX Filter Value: SUCCESSFACTORS Implementation Class: CL_SMI_OA2C_CONFIG_SFSF => copied to ZCL_SMI_OA2C_CONFIG_SFSF_CD => update attributes GC_APPLICATION and GC_SMI_SP_SFSF SE18 > es.OA2C_CONFIG_EXTENSION > Right-Click > Create implementation > ei.Z_SMI_OA2C_CONFIG_SFSF_CD > bi.Z_SMI_OA2C_CONFIG_SFSF_BIZX_CD > assign class from above and add filter
Choose your Service Provider Type and Application ID Request Method: HTTP Get (GET) Manually Entered Endpoint Endpoint: /odata/v2/FODivision/ Authentication Context: User Context (USER)
The first is not secure anymore and should not be used anymore.
/oauth/idp parameters: client_id user_id private_key token_url use_email use_username <=== true /oauth/token parameters: company_id client_id grant_type assertion new_token <=== true