on 06-24-2015 10:40 PM
Hi all
I build a REST Gateway Services through SEGW and I followed all the step in this tutorial:
just the read operations
and from this to build my association/navigation between my Entities
so my entities are:
DocFi is a based on BKPF and POSFI is based on BSEG,
this the code I implemented in /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_EXPANDED_ENTITYSET
METHOD /iwbep/if_mgw_appl_srv_runtime~get_expanded_entityset.
DATA: BEGIN OF ty_expand_fi.
INCLUDE TYPE zcl_zgw_fi_doc_mpc_ext=>ts_docfi.
DATA: posfi TYPE zcl_zgw_fi_doc_mpc_ext=>tt_posfi,
END OF ty_expand_fi.
DATA: lti_expand_fi LIKE STANDARD TABLE OF ty_expand_fi,
lwa_expand_fi LIKE LINE OF lti_expand_fi,
lwa_posfi TYPE zcl_zgw_fi_doc_mpc_ext=>ts_posfi.
DATA: lti_bkpf TYPE STANDARD TABLE OF bkpf,
lti_bseg TYPE STANDARD TABLE OF bseg,
lwa_bkpf TYPE bkpf,
lwa_bseg TYPE bseg.
CONSTANTS: lc_expand_tech_clause TYPE string VALUE 'POSFISET'.
*consulta de datos de la bkpf
SELECT bukrs belnr gjahr blart bldat budat monat cpudt cputm
aedat upddt wwert usnam tcode bvorg xblnr dbblg stblg
FROM bkpf INTO CORRESPONDING FIELDS OF TABLE lti_bkpf UP TO 2 ROWS.
*consulta de datos de la bseg
SELECT bukrs belnr gjahr buzei buzid augdt augcp augbl
bschl koart umskz umsks zumsk shkzg gsber pargb
mwskz qsskz dmbtr wrbtr kzbtr pswbt pswsl txbhw
txbfw mwsts wmwst hwbas fwbas hwzuz fwzuz shzuz
stekz mwart txgrp ktosl FROM bseg
INTO CORRESPONDING FIELDS OF TABLE lti_bseg
FOR ALL ENTRIES IN lti_bkpf
WHERE bukrs EQ lti_bkpf-bukrs
AND belnr EQ lti_bkpf-belnr
AND gjahr EQ lti_bkpf-gjahr.
*se agregan las cab con las pos en la tabla de salida
LOOP AT lti_bkpf INTO lwa_bkpf.
MOVE-CORRESPONDING lwa_bkpf TO lwa_expand_fi.
LOOP AT lti_bseg INTO lwa_bseg WHERE belnr EQ lwa_bkpf-belnr.
MOVE-CORRESPONDING lwa_bseg TO lwa_posfi.
APPEND lwa_posfi TO lwa_expand_fi-posfi.
CLEAR lwa_posfi.
ENDLOOP.
APPEND lwa_expand_fi TO lti_expand_fi.
CLEAR lwa_expand_fi.
ENDLOOP.
* se llena ER_ENTITYSET
CALL METHOD me->copy_data_to_ref
EXPORTING
is_data = lti_expand_fi
CHANGING
cr_data = er_entityset.
* se inserta propiedad de navegacion "PosFISet" en la tabla ET_EXPANDED_TECH_CLAUSES
INSERT lc_expand_tech_clause INTO TABLE et_expanded_tech_clauses.
ENDMETHOD.
and this the code I implemented in /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_EXPANDED_ENTITY
METHOD /iwbep/if_mgw_appl_srv_runtime~get_expanded_entity.
**TRY.
*CALL METHOD SUPER->/IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_EXPANDED_ENTITY
** EXPORTING
** iv_entity_name =
** iv_entity_set_name =
** iv_source_name =
** it_key_tab =
** it_navigation_path =
** io_expand =
** io_tech_request_context =
** IMPORTING
** er_entity =
** es_response_context =
** et_expanded_clauses =
** et_expanded_tech_clauses =
* .
** CATCH /iwbep/cx_mgw_busi_exception .
** CATCH /iwbep/cx_mgw_tech_exception .
**ENDTRY.
DATA: BEGIN OF ty_expand_fi.
INCLUDE TYPE zcl_zgw_fi_doc_mpc_ext=>ts_docfi.
DATA: posfi TYPE zcl_zgw_fi_doc_mpc_ext=>tt_posfi,
END OF ty_expand_fi.
*
DATA: lwa_expand_fi LIKE ty_expand_fi,
lwa_posfi TYPE zcl_zgw_fi_doc_mpc_ext=>ts_posfi.
DATA: lst_key_tab TYPE /iwbep/s_mgw_name_value_pair,
ldr_bukrs TYPE bukrs,
ldr_belnr TYPE belnr_d,
ldr_gjahr TYPE gjahr,
ldr_entity_id TYPE /iwbep/med_entity_id,
lti_bseg TYPE STANDARD TABLE OF bseg,
lwa_bkpf TYPE bkpf,
lwa_bseg TYPE bseg.
CONSTANTS: lc_expand_tech_clause TYPE string VALUE 'POSFISET'.
READ TABLE it_key_tab WITH KEY name = 'Bukrs' INTO lst_key_tab.
ldr_bukrs = lst_key_tab-value.
CLEAR lst_key_tab.
READ TABLE it_key_tab WITH KEY name = 'Belnr' INTO lst_key_tab.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lst_key_tab-value
IMPORTING
output = ldr_belnr.
CLEAR lst_key_tab.
READ TABLE it_key_tab WITH KEY name = 'Gjahr' INTO lst_key_tab.
ldr_gjahr = lst_key_tab-value.
CLEAR lst_key_tab.
*consulta de datos de la bkpf
SELECT SINGLE bukrs belnr gjahr blart bldat budat monat cpudt cputm
aedat upddt wwert usnam tcode bvorg xblnr dbblg stblg
FROM bkpf INTO CORRESPONDING FIELDS OF lwa_bkpf
WHERE bukrs EQ ldr_bukrs
AND belnr EQ ldr_belnr
AND gjahr EQ ldr_gjahr.
*consulta de datos de la bseg
SELECT bukrs belnr gjahr buzei buzid augdt augcp augbl
bschl koart umskz umsks zumsk shkzg gsber pargb
mwskz qsskz dmbtr wrbtr kzbtr pswbt pswsl txbhw
txbfw mwsts wmwst hwbas fwbas hwzuz fwzuz shzuz
stekz mwart txgrp ktosl FROM bseg
INTO CORRESPONDING FIELDS OF TABLE lti_bseg
WHERE bukrs EQ lwa_bkpf-bukrs
AND belnr EQ lwa_bkpf-belnr
AND gjahr EQ lwa_bkpf-gjahr.
IF lwa_bkpf IS INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ldr_belnr
IMPORTING
output = ldr_belnr.
CONCATENATE 'Soc.' ldr_bukrs 'Doc.' ldr_belnr 'Año' ldr_gjahr INTO ldr_entity_id SEPARATED BY space.
RAISE EXCEPTION TYPE /iwbep/cx_mgw_med_exception
EXPORTING
textid = /iwbep/cx_mgw_med_exception=>entity_id_not_found
method = 'DOCFISET_GET_ENTITY'
entity_type = 'DocFI'
entity_id = ldr_entity_id
username = sy-uname.
ELSE.
MOVE-CORRESPONDING lwa_bkpf TO lwa_expand_fi.
LOOP AT lti_bseg INTO lwa_bseg.
MOVE-CORRESPONDING lwa_bseg TO lwa_posfi.
APPEND lwa_posfi TO lwa_expand_fi-posfi.
CLEAR lwa_posfi.
ENDLOOP.
* se llena ER_ENTITY
CALL METHOD me->copy_data_to_ref
EXPORTING
is_data = lwa_expand_fi
CHANGING
cr_data = er_entity.
* se inserta propiedad de navegacion "PosFISet" en la tabla ET_EXPANDED_TECH_CLAUSES
INSERT lc_expand_tech_clause INTO TABLE et_expanded_tech_clauses.
ENDIF.
ENDMETHOD.
and when a I do a request with the $expand returns header data but doesn't return items.... this is the response
{
"d" : {
"__metadata" : {
"id" : "http://myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/DocFISet(Bukrs='XXX',Belnr='XX',Gjahr='2015')",
"uri" : "http://myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/DocFISet(Bukrs='XXX',Belnr='XX',Gjahr='2015')",
"type" : "ZGW_FI_DOC_SRV.DocFI"
},
"Bukrs" : "XXX",
"Belnr" : "XX",
"Gjahr" : "2015",
"Blart" : "KR",
"Bldat" : "20150624",
"Budat" : "20150624",
"Monat" : "06",
"Cpudt" : "20150624",
"Cputm" : "155121",
"Aedat" : "00000000",
"Upddt" : "00000000",
"Wwert" : "20150624",
"Usnam" : "YYY",
"Tcode" : "FB60",
"Bvorg" : "",
"Xblnr" : "",
"Dbblg" : "",
"Stblg" : "0000840003",
"PosFISet" : {
"results" : [
]
}
}
as you can see I get the header data but in the "PosFISet" the result came empty, I already check that the internal table had the bseg data, and searching on SCN I found this notes
but the Basis team said those notes can't be implemented because the system have a superior Support pacakage, any help would be appreciate and I don't know what else to do .
Most probably the problem is with
CONSTANTS: lc_expand_tech_clause TYPE string VALUE 'POSFISET'.
Navigation name is just POSFI isn't it?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Krishna, that help me a lot I made the changes to:
CONSTANTS: lc_expand_tech_clause TYPE string VALUE 'POSFI'.
and I get the full structure of POSFi but I don't get the BSEG data , this is response:
{
"d" : {
"__metadata" : {
"id" : "myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/DocFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015')",
"uri" : "myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/DocFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015')",
"type" : "ZGW_FI_DOC_SRV.DocFI"
},
"Bukrs" : "XXX",
"Belnr" : "XXX",
"Gjahr" : "2015",
"Blart" : "KX",
"Bldat" : "20150624",
"Budat" : "20150624",
"Monat" : "06",
"Cpudt" : "20150624",
"Cputm" : "155749",
"Aedat" : "00000000",
"Upddt" : "00000000",
"Wwert" : "20150624",
"Usnam" : "YYY",
"Tcode" : "FB08",
"Bvorg" : "",
"Xblnr" : "",
"Dbblg" : "",
"Stblg" : "0019000015",
"PosFISet" : {
"results" : [
{
"__metadata" : {
"id" : "myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/PosFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015',Buzei='')",
"uri" : "myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/PosFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015',Buzei='')",
"type" : "ZGW_FI_DOC_SRV.PosFI"
},
"Bukrs" : "XXX",
"Belnr" : "XXX",
"Gjahr" : "2015",
"Buzei" : "",
"Buzid" : "",
"Augdt" : "",
"Augcp" : "",
"Augbl" : "",
"Bschl" : "",
"Koart" : "",
"Umskz" : "",
"Umsks" : "",
"Zumsk" : "",
"Shkzg" : "",
"Gsber" : "",
"Pargb" : "",
"Mwskz" : "",
"Qsskz" : "",
"Dmbtr" : "0.00",
"Wrbtr" : "0.00",
"Kzbtr" : "0.00",
"Pswbt" : "0.000",
"Pswsl" : "",
"Txbhw" : "0.00",
"Txbfw" : "0.00",
"Mwsts" : "0.00",
"Wmwst" : "0.00",
"Hwbas" : "0.00",
"Fwbas" : "0.00",
"Hwzuz" : "0.00",
"Fwzuz" : "0.00",
"Shzuz" : "",
"Stekz" : "",
"Mwart" : "",
"Txgrp" : "",
"Ktosl" : "
},
{
"__metadata" : {
"id" : "myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/PosFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015',Buzei='')",
"uri" : "myserverl:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/PosFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015',Buzei='')",
"type" : "ZGW_FI_DOC_SRV.PosFI"
},
"Bukrs" : "XXX",
"Belnr" : "XXX",
"Gjahr" : "2015",
"Buzei" : "",
"Buzid" : "",
"Augdt" : "",
"Augcp" : "",
"Augbl" : "",
"Bschl" : "",
"Koart" : "",
"Umskz" : "",
"Umsks" : "",
"Zumsk" : "",
"Shkzg" : "",
"Gsber" : "",
"Pargb" : "",
"Mwskz" : "",
"Qsskz" : "",
"Dmbtr" : "0.00",
"Wrbtr" : "0.00",
"Kzbtr" : "0.00",
"Pswbt" : "0.000",
"Pswsl" : "",
"Txbhw" : "0.00",
"Txbfw" : "0.00",
"Mwsts" : "0.00",
"Wmwst" : "0.00",
"Hwbas" : "0.00",
"Fwbas" : "0.00",
"Hwzuz" : "0.00",
"Fwzuz" : "0.00",
"Shzuz" : "",
"Stekz" : "",
"Mwart" : "",
"Txgrp" : "",
"Ktosl" : ""
}
]
}
}
}
as you can see I get the empty positions... and the real positions are:
{
"d" : {
"results" : [
{
"__metadata" : {
"id" : "myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/PosFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015',Buzei='001')",
"uri" : "myserverl:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/PosFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015',Buzei='001')",
"type" : "ZGW_FI_DOC_SRV.PosFI"
},
"Bukrs" : "XXX",
"Belnr" : "XXX",
"Gjahr" : "2015",
"Buzei" : "001",
"Buzid" : "",
"Augdt" : "20150624",
"Augcp" : "20150624",
"Augbl" : "0000840003",
"Bschl" : "22",
"Koart" : "K",
"Umskz" : "",
"Umsks" : "",
"Zumsk" : "",
"Shkzg" : "S",
"Gsber" : "",
"Pargb" : "",
"Mwskz" : "V7",
"Qsskz" : "XX",
"Dmbtr" : "28224.31",
"Wrbtr" : "28224.31",
"Kzbtr" : "0.00",
"Pswbt" : "28224.310",
"Pswsl" : "COP",
"Txbhw" : "0.00",
"Txbfw" : "0.00",
"Mwsts" : "0.00",
"Wmwst" : "0.00",
"Hwbas" : "0.00",
"Fwbas" : "0.00",
"Hwzuz" : "0.00",
"Fwzuz" : "0.00",
"Shzuz" : "",
"Stekz" : "",
"Mwart" : "",
"Txgrp" : "000",
"Ktosl" : "EGK"
},
{
"__metadata" : {
"id" : "http://myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/PosFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015',Buzei='002')",
"uri" : "myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/PosFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015',Buzei='002')",
"type" : "ZGW_FI_DOC_SRV.PosFI"
},
"Bukrs" : "XXX",
"Belnr" : "XXX",
"Gjahr" : "2015",
"Buzei" : "002",
"Buzid" : "",
"Augdt" : "00000000",
"Augcp" : "00000000",
"Augbl" : "",
"Bschl" : "50",
"Koart" : "S",
"Umskz" : "",
"Umsks" : "",
"Zumsk" : "",
"Shkzg" : "H",
"Gsber" : "",
"Pargb" : "",
"Mwskz" : "V7",
"Qsskz" : "",
"Dmbtr" : "30000.00",
"Wrbtr" : "30000.00",
"Kzbtr" : "0.00",
"Pswbt" : "30000.000",
"Pswsl" : "COP",
"Txbhw" : "25862.07",
"Txbfw" : "25862.07",
"Mwsts" : "0.00",
"Wmwst" : "0.00",
"Hwbas" : "0.00",
"Fwbas" : "0.00",
"Hwzuz" : "0.00",
"Fwzuz" : "0.00",
"Shzuz" : "",
"Stekz" : "",
"Mwart" : "",
"Txgrp" : "001",
"Ktosl" : ""
},
{
"__metadata" : {
"id" : "myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/PosFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015',Buzei='003')",
"uri" : "myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/PosFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015',Buzei='003')",
"type" : "ZGW_FI_DOC_SRV.PosFI"
},
"Bukrs" : "XXX",
"Belnr" : "XXX",
"Gjahr" : "2015",
"Buzei" : "003",
"Buzid" : "",
"Augdt" : "00000000",
"Augcp" : "00000000",
"Augbl" : "",
"Bschl" : "40",
"Koart" : "S",
"Umskz" : "",
"Umsks" : "",
"Zumsk" : "",
"Shkzg" : "S",
"Gsber" : "",
"Pargb" : "",
"Mwskz" : "",
"Qsskz" : "02",
"Dmbtr" : "249.83",
"Wrbtr" : "249.83",
"Kzbtr" : "0.00",
"Pswbt" : "249.830",
"Pswsl" : "COP",
"Txbhw" : "0.00",
"Txbfw" : "0.00",
"Mwsts" : "0.00",
"Wmwst" : "0.00",
"Hwbas" : "0.00",
"Fwbas" : "0.00",
"Hwzuz" : "0.00",
"Fwzuz" : "0.00",
"Shzuz" : "",
"Stekz" : "",
"Mwart" : "",
"Txgrp" : "000",
"Ktosl" : "WIT"
},
{
"__metadata" : {
"id" : "myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/PosFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015',Buzei='004')",
"uri" : "myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/PosFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015',Buzei='004')",
"type" : "ZGW_FI_DOC_SRV.PosFI"
},
"Bukrs" : "XXX",
"Belnr" : "XXX",
"Gjahr" : "2015",
"Buzei" : "004",
"Buzid" : "",
"Augdt" : "00000000",
"Augcp" : "00000000",
"Augbl" : "",
"Bschl" : "40",
"Koart" : "S",
"Umskz" : "",
"Umsks" : "",
"Zumsk" : "",
"Shkzg" : "S",
"Gsber" : "",
"Pargb" : "",
"Mwskz" : "",
"Qsskz" : "IS",
"Dmbtr" : "620.69",
"Wrbtr" : "620.69",
"Kzbtr" : "0.00",
"Pswbt" : "620.690",
"Pswsl" : "COP",
"Txbhw" : "0.00",
"Txbfw" : "0.00",
"Mwsts" : "0.00",
"Wmwst" : "0.00",
"Hwbas" : "0.00",
"Fwbas" : "0.00",
"Hwzuz" : "0.00",
"Fwzuz" : "0.00",
"Shzuz" : "",
"Stekz" : "",
"Mwart" : "",
"Txgrp" : "000",
"Ktosl" : "WIT"
},
{
"__metadata" : {
"id" : "myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/PosFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015',Buzei='005')",
"uri" : "myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/PosFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015',Buzei='005')",
"type" : "ZGW_FI_DOC_SRV.PosFI"
},
"Bukrs" : "XXX",
"Belnr" : "XXX",
"Gjahr" : "2015",
"Buzei" : "005",
"Buzid" : "",
"Augdt" : "00000000",
"Augcp" : "00000000",
"Augbl" : "",
"Bschl" : "40",
"Koart" : "S",
"Umskz" : "",
"Umsks" : "",
"Zumsk" : "",
"Shkzg" : "S",
"Gsber" : "",
"Pargb" : "",
"Mwskz" : "",
"Qsskz" : "RA",
"Dmbtr" : "905.17",
"Wrbtr" : "905.17",
"Kzbtr" : "0.00",
"Pswbt" : "905.170",
"Pswsl" : "COP",
"Txbhw" : "0.00",
"Txbfw" : "0.00",
"Mwsts" : "0.00",
"Wmwst" : "0.00",
"Hwbas" : "0.00",
"Fwbas" : "0.00",
"Hwzuz" : "0.00",
"Fwzuz" : "0.00",
"Shzuz" : "",
"Stekz" : "",
"Mwart" : "",
"Txgrp" : "000",
"Ktosl" : "WIT"
}
]
}
}
I get these positions by using the navigation URL:
myserver:8000/sap/opu/odata/sap/ZGW_FI_DOC_SRV/DocFISet(Bukrs='XXX',Belnr='XXX',Gjahr='2015')/PosFISet?$format=json
thanks for help
grettings!!
yeah, I already check by debugging the service, and what I see its that first the class /IWBEP/CL_MGW_ABS_DATA call get_expanded_entity method but after call the get_expanded_entityset method and this populated the first three fields (Bukrs" : "XXX", "Belnr" : "XXX", "Gjahr" : "2015") ,
this is the lwa_expand_fi in the get_expanded_entity method
and this is LWA_EXPAND_FI-POSFI data (nested data)
but later the services class (/IWBEP/CL_MGW_ABS_DATA) call the get_expanded_entityset method and return this:
until now all goes ok but then it calls the /iwbep/cl_mgw_data_helper=>move_corresponding method and returns this:
and that's the data we see in the json response... why /IWBEP/CL_MGW_ABS_DATA it's calling the get_expanded_entityset?... thanks in advance for your help I really apreciate
Hi Krishna, thanks for your help I solve the problem by recoding this lines:
DATA: BEGIN OF ty_expand_fi.
INCLUDE TYPE zcl_zgw_fi_doc_mpc_ext=>ts_docfi.
DATA: posfi TYPE zcl_zgw_fi_doc_mpc_ext=>tt_posfi,
END OF ty_expand_fi.
to
DATA: BEGIN OF ty_expand_fi.
INCLUDE TYPE zcl_zgw_fi_doc_mpc_ext=>ts_docfi.
DATA: posfiset TYPE zcl_zgw_fi_doc_mpc_ext=>tt_posfi,
END OF ty_expand_fi.
and this line:
CONSTANTS: lc_expand_tech_clause TYPE string VALUE 'POSFISET'.
that do the trick
grettings
User | Count |
---|---|
87 | |
10 | |
10 | |
10 | |
7 | |
6 | |
6 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.