Hi SCN Folks,
Hope you guys are doing great 🙂
Note 01: This blog does not include execution screenshots.
Note 02: The entire code was developed and validated in the SANDBOX system, with results meeting expectations.
Note 03: There are several ways; this blog is written about one of them.
Create one custom class, with 02 methods:
ZCL_MDGS_ASSISTIVE
GET_INSTANCE_GOV_API
* <SIGNATURE>—————————————————————————————+
* | Static Public Method ZCL_MDGS_ASSISTIVE=>GET_INSTANCE_GOV_API
* +————————————————————————————————-+
* | [—>] IV_MODEL TYPE USMD_MODEL
* | [<—] EV_INSTANCE_EXISTS TYPE ABAP_BOOL
* | [<—] EO_GOV_API TYPE REF TO CL_USMD_GOV_API
* +————————————————————————————–</SIGNATURE>
METHOD get_instance_gov_api.
DATA: lo_gov_api TYPE REF TO if_usmd_gov_api,
lo_cx_root TYPE REF TO cx_root,
lv_exception TYPE string.
IF cl_usmd_gov_api=>check_instance_exists( iv_model_name = iv_model ) EQ abap_false.
ev_instance_exists = abap_false.
TRY.
cl_usmd_gov_api=>get_instance(
EXPORTING
iv_model_name = iv_model
RECEIVING
ro_gov_api = lo_gov_api
).
CATCH cx_usmd_gov_api INTO lo_cx_root.
lv_exception = lo_cx_root->get_text( ).
ENDTRY.
IF lv_exception IS INITIAL AND
lo_gov_api IS BOUND.
eo_gov_api ?= lo_gov_api.
ENDIF.
ELSE.
ev_instance_exists = abap_true.
TRY.
cl_usmd_gov_api=>get_instance(
EXPORTING
iv_model_name = iv_model
RECEIVING
ro_gov_api = lo_gov_api
).
CATCH cx_usmd_gov_api INTO lo_cx_root.
lv_exception = lo_cx_root->get_text( ).
ENDTRY.
IF lv_exception IS INITIAL AND
lo_gov_api IS BOUND.
eo_gov_api ?= lo_gov_api.
ENDIF.
ENDIF.
ENDMETHOD.
GET_CR_DATA
(***Note: above method making use in this method)
* <SIGNATURE>—————————————————————————————+
* | Static Public Method ZCL_MDGS_ASSISTIVE=>GET_CR_DATA
* +————————————————————————————————-+
* | [—>] IV_CR_ID TYPE USMD_CREQUEST
* | [<–>] CS_CR_ATTRIBUTES TYPE USMD_S_CREQUEST(optional)
* | [<–>] CV_MODEL TYPE USMD_MODEL(optional)
* | [<–>] CV_CR_TYPE_PROCESS TYPE USMD_PROCESS(optional)
* | [<-()] RT_CR_DATA TYPE USMD_TS_ENTITY_DATA_ALL
* +————————————————————————————–</SIGNATURE>
METHOD get_cr_data.
DATA: lo_gov_api TYPE REF TO cl_usmd_gov_api,
lt_cr_data TYPE usmd_ts_entity_data_all,
lv_model TYPE usmd_model,
lv_inst_exists TYPE abap_bool.
” Determine the model from CR ID to get the instance of
” Goverance API.
CHECK IV_CR_ID IS NOT INITIAL.
IF NOT cv_model IS INITIAL.
lv_model = cv_model.
ELSE.
cl_usmd_crequest_util=>get_model_by_cr(
EXPORTING
i_crequest = iv_cr_id
IMPORTING
e_model = cv_model
).
ENDIF.
” Get the instance of the governance API
IF NOT cv_model IS INITIAL.
ZCL_MDGS_ASSISTIVE=>get_instance_gov_api(
EXPORTING
iv_model = cv_model
IMPORTING
ev_instance_exists = lv_inst_exists
eo_gov_api = lo_gov_api
).
” Read the data of the CR data using the Governance API
IF lo_gov_api IS BOUND.
lo_gov_api->if_usmd_gov_api_cr_data~get_crequest_data(
EXPORTING
iv_crequest_id = iv_cr_id
IMPORTING
et_entity_data_inactive = rt_cr_data
).
” CR Header Data
cs_cr_attributes = lo_gov_api->if_usmd_gov_api_cr_data~get_crequest_attributes( iv_crequest_id = iv_cr_id ).
” CR Business activity or Business Process ID
SELECT SINGLE usmd_process
FROM usmd1601
INTO _cr_type_process
WHERE usmd_creq_type = _cr_attributes-usmd_creq_type.
ENDIF.
ENDIF.
ENDMETHOD.
Now, Making use of ZCL_MDGS_ASSISTIVE in system method caller implementation (if_usmd_ssw_syst_method_caller~call_system_method)
DATA:
ls_crequest TYPE usmd_s_crequest,
lv_model TYPE usmd_model,
lv_cr_process TYPE usmd_process,
lt_cr_data TYPE usmd_ts_entity_data_all,
lt_supp_data TYPE REF TO data.
FIELD-SYMBOLS:
<lt_supp_data> TYPE SORTED TABLE,
<ls_supp_data> TYPE any,
<lv_fno> TYPE any.
CALL METHOD zcl_mdgs_assistive=>get_cr_data
EXPORTING
iv_cr_id = iv_cr_number
CHANGING
cs_cr_attributes = ls_crequest
cv_model = lv_model
cv_cr_type_process = lv_cr_process
RECEIVING
rt_cr_data = lt_cr_data.
IF ls_crequest-usmd_creq_type = ‘ZMDGS01’,
IF lv_cr_process = ‘SUP1’.
lt_supp_data = VALUE #( lt_cr_data[ usmd_entity = ‘BP_HEADER’ usmd_entity_cont = ‘BP_CENTRL’ struct = ‘KATTR’ ]-r_data OPTIONAL ).
IF lt_supp_data IS BOUND .
ASSIGN lt_supp_data->* TO <lt_supp_data>.
IF <lt_supp_data> IS ASSIGNED.
LOOP AT <lt_supp_data> ASSIGNING <ls_supp_data>.
ASSIGN COMPONENT ‘NAME_ORG1’ OF STRUCTURE <ls_supp_data> TO <lv_fno>.
IF <lv_fno> IS ASSIGNED AND <lv_fno> IS NOT INITIAL.
.
. “Requirement Logic etc…
.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
Thank You,
Sandeep Suggu.
SAP Community Profile | SAP Profile | LinkedIn
Hi SCN Folks, Hope you guys are doing great 🙂Note 01: This blog does not include execution screenshots.Note 02: The entire code was developed and validated in the SANDBOX system, with results meeting expectations.Note 03: There are several ways; this blog is written about one of them.Create one custom class, with 02 methods:ZCL_MDGS_ASSISTIVEGET_INSTANCE_GOV_API* <SIGNATURE>—————————————————————————————+
* | Static Public Method ZCL_MDGS_ASSISTIVE=>GET_INSTANCE_GOV_API
* +————————————————————————————————-+
* | [—>] IV_MODEL TYPE USMD_MODEL
* | [<—] EV_INSTANCE_EXISTS TYPE ABAP_BOOL
* | [<—] EO_GOV_API TYPE REF TO CL_USMD_GOV_API
* +————————————————————————————–</SIGNATURE>
METHOD get_instance_gov_api.
DATA: lo_gov_api TYPE REF TO if_usmd_gov_api,
lo_cx_root TYPE REF TO cx_root,
lv_exception TYPE string.
IF cl_usmd_gov_api=>check_instance_exists( iv_model_name = iv_model ) EQ abap_false.
ev_instance_exists = abap_false.
TRY.
cl_usmd_gov_api=>get_instance(
EXPORTING
iv_model_name = iv_model
RECEIVING
ro_gov_api = lo_gov_api
).
CATCH cx_usmd_gov_api INTO lo_cx_root.
lv_exception = lo_cx_root->get_text( ).
ENDTRY.
IF lv_exception IS INITIAL AND
lo_gov_api IS BOUND.
eo_gov_api ?= lo_gov_api.
ENDIF.
ELSE.
ev_instance_exists = abap_true.
TRY.
cl_usmd_gov_api=>get_instance(
EXPORTING
iv_model_name = iv_model
RECEIVING
ro_gov_api = lo_gov_api
).
CATCH cx_usmd_gov_api INTO lo_cx_root.
lv_exception = lo_cx_root->get_text( ).
ENDTRY.
IF lv_exception IS INITIAL AND
lo_gov_api IS BOUND.
eo_gov_api ?= lo_gov_api.
ENDIF.
ENDIF.
ENDMETHOD.GET_CR_DATA (***Note: above method making use in this method)* <SIGNATURE>—————————————————————————————+
* | Static Public Method ZCL_MDGS_ASSISTIVE=>GET_CR_DATA
* +————————————————————————————————-+
* | [—>] IV_CR_ID TYPE USMD_CREQUEST
* | [<–>] CS_CR_ATTRIBUTES TYPE USMD_S_CREQUEST(optional)
* | [<–>] CV_MODEL TYPE USMD_MODEL(optional)
* | [<–>] CV_CR_TYPE_PROCESS TYPE USMD_PROCESS(optional)
* | [<-()] RT_CR_DATA TYPE USMD_TS_ENTITY_DATA_ALL
* +————————————————————————————–</SIGNATURE>
METHOD get_cr_data.
DATA: lo_gov_api TYPE REF TO cl_usmd_gov_api,
lt_cr_data TYPE usmd_ts_entity_data_all,
lv_model TYPE usmd_model,
lv_inst_exists TYPE abap_bool.
” Determine the model from CR ID to get the instance of
” Goverance API.
CHECK IV_CR_ID IS NOT INITIAL.
IF NOT cv_model IS INITIAL.
lv_model = cv_model.
ELSE.
cl_usmd_crequest_util=>get_model_by_cr(
EXPORTING
i_crequest = iv_cr_id
IMPORTING
e_model = cv_model
).
ENDIF.
” Get the instance of the governance API
IF NOT cv_model IS INITIAL.
ZCL_MDGS_ASSISTIVE=>get_instance_gov_api(
EXPORTING
iv_model = cv_model
IMPORTING
ev_instance_exists = lv_inst_exists
eo_gov_api = lo_gov_api
).
” Read the data of the CR data using the Governance API
IF lo_gov_api IS BOUND.
lo_gov_api->if_usmd_gov_api_cr_data~get_crequest_data(
EXPORTING
iv_crequest_id = iv_cr_id
IMPORTING
et_entity_data_inactive = rt_cr_data
).
” CR Header Data
cs_cr_attributes = lo_gov_api->if_usmd_gov_api_cr_data~get_crequest_attributes( iv_crequest_id = iv_cr_id ).
” CR Business activity or Business Process ID
SELECT SINGLE usmd_process
FROM usmd1601
INTO _cr_type_process
WHERE usmd_creq_type = _cr_attributes-usmd_creq_type.
ENDIF.
ENDIF.
ENDMETHOD.Now, Making use of ZCL_MDGS_ASSISTIVE in system method caller implementation (if_usmd_ssw_syst_method_caller~call_system_method)DATA:
ls_crequest TYPE usmd_s_crequest,
lv_model TYPE usmd_model,
lv_cr_process TYPE usmd_process,
lt_cr_data TYPE usmd_ts_entity_data_all,
lt_supp_data TYPE REF TO data.
FIELD-SYMBOLS:
<lt_supp_data> TYPE SORTED TABLE,
<ls_supp_data> TYPE any,
<lv_fno> TYPE any.
CALL METHOD zcl_mdgs_assistive=>get_cr_data
EXPORTING
iv_cr_id = iv_cr_number
CHANGING
cs_cr_attributes = ls_crequest
cv_model = lv_model
cv_cr_type_process = lv_cr_process
RECEIVING
rt_cr_data = lt_cr_data.
IF ls_crequest-usmd_creq_type = ‘ZMDGS01’,
IF lv_cr_process = ‘SUP1’.
lt_supp_data = VALUE #( lt_cr_data[ usmd_entity = ‘BP_HEADER’ usmd_entity_cont = ‘BP_CENTRL’ struct = ‘KATTR’ ]-r_data OPTIONAL ).
IF lt_supp_data IS BOUND .
ASSIGN lt_supp_data->* TO <lt_supp_data>.
IF <lt_supp_data> IS ASSIGNED.
LOOP AT <lt_supp_data> ASSIGNING <ls_supp_data>.
ASSIGN COMPONENT ‘NAME_ORG1’ OF STRUCTURE <ls_supp_data> TO <lv_fno>.
IF <lv_fno> IS ASSIGNED AND <lv_fno> IS NOT INITIAL.
.
. “Requirement Logic etc…
.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDIF. Thank You, Sandeep Suggu.SAP Community Profile | SAP Profile | LinkedIn Read More Technology Blog Posts by Members articles
#SAP
#SAPTechnologyblog