on 01-29-2016 11:53 AM
Hi, I am trying to follow along this tutorial:
And when I debug my WebService using:
ZHREC_CONTR_CH_GETDETAILS_SRV/HeaderSet?$filter=Formid eq '005056BA6B481ED5B1B3EBDD61A2D44C'&$expand=NavMainDetails
then I noticed that the parameter lt_filter_select_options is empty (and I didn't really get from the blog where it was populated in the first place) and in the Gateway Client I get this error:
Method 'MAINDETAILSSET_GET_ENTITY' not implemented in data provider class (???)
Scenario
I have a header table Header and infotype tables MainDetails, OrgLocation and SalaryDetails. I want to get data from the three infotype tables with 1 webservice request based on the given filter parameter Formid. Each table has the property Formid which is a key field.
Associations
Navigations
My Redefined /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_EXPANDED_ENTITYSET
METHOD /iwbep/if_mgw_appl_srv_runtime~get_expanded_entityset.
*----------------------------------------------------------------------*
* Deep Structure
*----------------------------------------------------------------------*
DATA: BEGIN OF ls_contr_ch_form_details.
INCLUDE TYPE zcl_zhrec_contr_ch_get_mpc=>ts_header.
DATA: navmaindetails TYPE STANDARD TABLE OF zcl_zhrec_contr_ch_get_mpc=>ts_maindetails WITH DEFAULT KEY.
DATA: navorglocation TYPE STANDARD TABLE OF zcl_zhrec_contr_ch_get_mpc=>ts_orglocation WITH DEFAULT KEY.
DATA: navsalarydetails TYPE STANDARD TABLE OF zcl_zhrec_contr_ch_get_mpc=>ts_salarydetails WITH DEFAULT KEY,
END OF ls_contr_ch_form_details,
ls_maindetails_1 TYPE zcl_zhrec_contr_ch_get_mpc=>ts_maindetails,
ls_orglocation_1 TYPE zcl_zhrec_contr_ch_get_mpc=>ts_orglocation,
ls_salarydetails_1 TYPE zcl_zhrec_contr_ch_get_mpc=>ts_salarydetails.
*----------------------------------------------------------------------*
* Data Declaration
*----------------------------------------------------------------------*
DATA: ls_maindetails TYPE zcl_zhrec_contr_ch_get_mpc_ext=>ts_maindetails,
lt_maindetails TYPE TABLE OF zcl_zhrec_contr_ch_get_mpc_ext=>ts_maindetails,
ls_orglocation TYPE zcl_zhrec_contr_ch_get_mpc_ext=>ts_orglocation,
ts_orglocation TYPE TABLE OF zcl_zhrec_contr_ch_get_mpc_ext=>ts_orglocation,
ls_header TYPE zcl_zhrec_contr_ch_get_mpc_ext=>ts_header,
ltheader TYPE STANDARD TABLE OF zhrec_header,
lsheader TYPE zhrec_header,
lsmaindetails TYPE zhrec_contr_ch,
ltmaindetails TYPE STANDARD TABLE OF zhrec_contr_ch,
lsorglocation TYPE zhrec_it0001_wtexts,
ltorglocation TYPE STANDARD TABLE OF zhrec_it0001_wtexts,
lssalarydetails TYPE zhrec_it0008_wtexts,
ltsalarydetails TYPE STANDARD TABLE OF zhrec_it0008_wtexts,
lv_filter_str TYPE string,
lt_filter_select_options TYPE /iwbep/t_mgw_select_option,
ls_filter TYPE /iwbep/s_mgw_select_option,
ls_filter_range TYPE /iwbep/s_cod_select_option,
ls_expanded_clause1 LIKE LINE OF et_expanded_tech_clauses,
ls_expanded_clause2 LIKE LINE OF et_expanded_tech_clauses,
ls_expanded_clause3 LIKE LINE OF et_expanded_tech_clauses,
lv_formid TYPE zhrec_form_id,
lt_contr_ch_form_details LIKE TABLE OF ls_contr_ch_form_details.
*----------------------------------------------------------------------*
* Entity Set - HeaderSet
*----------------------------------------------------------------------*
CASE iv_entity_set_name.
WHEN 'HeaderSet'.
LOOP AT lt_filter_select_options INTO ls_filter.
LOOP AT ls_filter-select_options INTO ls_filter_range.
TRANSLATE ls_filter-property TO UPPER CASE.
CASE ls_filter-property.
WHEN 'FORMID'.
lv_formid = ls_filter_range-low.
WHEN OTHERS.
" Log message in the application log
me->/iwbep/if_sb_dpc_comm_services~log_message(
EXPORTING
iv_msg_type = 'E'
iv_msg_id = '/IWBEP/MC_SB_DPC_ADM'
iv_msg_number = 020
iv_msg_v1 = ls_filter-property
* iv_msg_v2 =
* iv_msg_v3 =
* iv_msg_v4 =
).
" Raise Exception
RAISE EXCEPTION TYPE /iwbep/cx_mgw_tech_exception
EXPORTING
textid = /iwbep/cx_mgw_tech_exception=>internal_error.
ENDCASE.
ENDLOOP.
ENDLOOP.
*----------------------------------------------------------------------*
* Call Function - ZHREC_CONTR_CH_GETDETAIL
*----------------------------------------------------------------------*
DATA: wa_maindetails TYPE zhrec_contr_ch.
CALL FUNCTION 'ZHREC_CONTR_CH_GETDETAIL'
EXPORTING
iv_formid = lv_formid
IMPORTING
et_maindetails = lsmaindetails
et_orglocation = ltorglocation
et_salarydetails = ltsalarydetails.
*----------------------------------------------------------------------*
* Fill Header Values to Deep Structure
*----------------------------------------------------------------------*
ls_contr_ch_form_details-formid = lv_formid.
*----------------------------------------------------------------------*
* Fill MainDetails Values to Deep Structure
*----------------------------------------------------------------------*
* LOOP AT ltmaindetails INTO lsmaindetails.
CLEAR ls_maindetails_1.
ls_maindetails_1-formid = lsmaindetails-formid.
ls_maindetails_1-attachment = lsmaindetails-attachment.
ls_maindetails_1-ch_valid_from = lsmaindetails-ch_valid_from.
ls_maindetails_1-empforename = lsmaindetails-empforename.
ls_maindetails_1-emplastname = lsmaindetails-emplastname.
ls_maindetails_1-empno = lsmaindetails-empno.
ls_maindetails_1-hire_date = lsmaindetails-hire_date.
ls_maindetails_1-notes = lsmaindetails-notes.
ls_maindetails_1-reasontext = lsmaindetails-reasontext.
ls_maindetails_1-status = lsmaindetails-status.
APPEND ls_maindetails_1 TO ls_contr_ch_form_details-navmaindetails.
* ENDLOOP.
*----------------------------------------------------------------------*
* Fill OrgLocation Values to Deep Structure
*----------------------------------------------------------------------*
LOOP AT ltorglocation INTO lsorglocation.
CLEAR ls_orglocation_1.
ls_orglocation_1-formid = lsorglocation-formid.
ls_orglocation_1-company_code = lsorglocation-company_code.
ls_orglocation_1-company_code_t = lsorglocation-company_code_t.
ls_orglocation_1-cost_center = lsorglocation-cost_center.
ls_orglocation_1-cost_center_t = lsorglocation-cost_center_t.
ls_orglocation_1-employee_group = lsorglocation-employee_group.
ls_orglocation_1-employee_group_t = lsorglocation-employee_group_t.
ls_orglocation_1-employee_sgroup = lsorglocation-employee_sgroup.
ls_orglocation_1-employee_sgroup_t = lsorglocation-employee_sgroup_t.
ls_orglocation_1-orgunit = lsorglocation-orgunit.
ls_orglocation_1-payroll_area = lsorglocation-payroll_area.
ls_orglocation_1-payroll_area_t = lsorglocation-payroll_area_t.
ls_orglocation_1-personnel_sarea = lsorglocation-personnel_sarea.
ls_orglocation_1-personnel_sarea_t = lsorglocation-personnel_sarea_t.
ls_orglocation_1-peamine_ts = lsorglocation-peamine_ts.
ls_orglocation_1-position_id = lsorglocation-position_id.
ls_orglocation_1-position_id_t = lsorglocation-position_id_t.
ls_orglocation_1-position_weight = lsorglocation-position_weight.
APPEND ls_orglocation_1 TO ls_contr_ch_form_details-navorglocation.
ENDLOOP.
*----------------------------------------------------------------------*
* Fill SalaryDetails Values to Deep Structure
*----------------------------------------------------------------------*
LOOP AT ltsalarydetails INTO lssalarydetails.
CLEAR ls_salarydetails_1.
ls_salarydetails_1-formid = lssalarydetails-formid.
ls_salarydetails_1-paysum = lssalarydetails-paysum.
ls_salarydetails_1-paytype = lssalarydetails-paytype.
ls_salarydetails_1-paytype_t = lssalarydetails-paytype_t.
ls_salarydetails_1-payvalidfrom = lssalarydetails-payvalidfrom.
ls_salarydetails_1-payvalidto = lssalarydetails-payvalidto.
APPEND ls_salarydetails_1 TO ls_contr_ch_form_details-navsalarydetails.
ENDLOOP.
*----------------------------------------------------------------------*
* Assign the Navigation Properties name to Expand Tech clauses
*----------------------------------------------------------------------*
ls_expanded_clause1 = 'NAVMAINDETAILS'.
ls_expanded_clause2 = 'NAVORGLOCATION'.
ls_expanded_clause3 = 'NAVSALARYDETAILS'.
APPEND ls_expanded_clause1 TO et_expanded_tech_clauses.
APPEND ls_expanded_clause2 TO et_expanded_tech_clauses.
APPEND ls_expanded_clause3 TO et_expanded_tech_clauses.
*----------------------------------------------------------------------*
* Append Deep Structure Values to Final Internal Table
*----------------------------------------------------------------------*
APPEND ls_contr_ch_form_details TO lt_contr_ch_form_details.
*----------------------------------------------------------------------*
* Send back Response to Consumer
*----------------------------------------------------------------------*
copy_data_to_ref(
EXPORTING
is_data = lt_contr_ch_form_details
CHANGING
cr_data = er_entityset ).
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
I believe the blog left out a few important details when the author thought they were self-explanatory.
Hopefully someone can point out what is missing or what is wrong with my modeling or code.
PS: If you need more info on anything, then plz let me know.
1. MainDetails and OrgLocation have 1:1 cardinality wrt Header. So the definition for output structure should be like this:
DATA: BEGIN OF ls_contr_ch_form_details.
INCLUDE TYPE zcl_zhrec_contr_ch_get_mpc=>ts_header.
DATA: navmaindetails TYPE zcl_zhrec_contr_ch_get_mpc=>ts_maindetails.
DATA: navorglocation TYPE zcl_zhrec_contr_ch_get_mpc=>ts_orglocation.
DATA: navsalarydetails TYPE STANDARD TABLE OF zcl_zhrec_contr_ch_get_mpc=>ts_salarydetails WITH DEFAULT KEY,
END OF ls_contr_ch_form_details,
2. To get all the three infotype tables as an output you should use the request like
ZHREC_CONTR_CH_GETDETAILS_SRV/HeaderSet?$filter=Formid eq '005056BA6B481ED5B1B3EBDD61A2D44C'&$expand=NavMainDetails,NavOrgLocation,NavSalaryDetails
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I fixed the filter selection problem, but the Method 'MAINDETAILSSET_GET_ENTITY' not implemented in data provider class problem still exists although I get throught the method nicely with all the data I want.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
101 | |
13 | |
13 | |
11 | |
11 | |
7 | |
6 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.