I develop interface and meet issue that how to move data from interal table to deep table. I transfer data to external system as jason format.
1Define code
** gv_json
data ztrexjson type ref to cl_trex_json_serializer.
data ztrexjsonret type ref to zcl_trex_json_deserializer.
data: http_client type ref to if_http_client .
data: z_len type i,
z_sysid type sysysid.
data: begin of lw_alv .
include structure ztmm123.
data:sel type char1,
biaoj type char1.
data: end of lw_alv.
data: lt_alv like table of lw_alv .
* URL地址
data: z_url type string .
data: z_url1 type string .
* 返回的MEAASGE
data: z_return type string,
lv_msg type string.
data: lv_str type char4 .
2.Logic
loop at gt_alv into gw_alv where sel is not initial.
move-corresponding gw_alv to lw_alv.
append lw_alv to lt_alv.
ref_delete_zero:gw_alv-matnr.
ref_delete_zero:gw_alv-lifnr.
gw_poitems-material_code = gw_alv-matnr .
gw_poitems-material_Remark = gw_alv-TXZ01 .
gw_poitems-num = gw_alv-menge .
gw_poitems-unit_code = gw_alv-meins.
gw_poitems-unit_remark = gw_alv-msehl.
gw_poitems-factory_code = gw_alv-werks .
gw_poitems-factory_remark = gw_alv-butxt .
gw_poitems-stock_code = gw_alv-lgort.
gw_poitems-stock_remark = gw_alv-lgobe.
append gw_poitems to gt_poitems[].
concatenate gw_alv-aedat+0(4) '-' gw_alv-aedat+4(2) '-' gw_alv-aedat+6(2) into gw_send-order_time.
gw_send-purchase_code = gw_alv-ebeln .
gw_send-purchase_type = gw_alv-bsart .
gw_send-supplier_code = gw_alv-lifnr .
gw_send-supplier_remark = gw_alv-name1 .
at end of ebeln.
gw_send-items = gt_poitems[].
gv_json = zcl_json=>serialize( data = gw_send compress = abap_true pretty_name = zcl_json=>pretty_mode-camel_case ).
check gv_json is not initial.
z_sysid = sy-sysid.
z_len = strlen( gv_json ) .
select single zurl zurl1 into (z_url,z_url1) from ztpm002
where progname = 'ZMM_E_123' and zsysid = z_sysid
and sys_detail = 'WZ'.
concatenate z_url z_url1 into z_url.
check z_url is not initial.
"创建客户端请求
call method cl_http_client=>create_by_url
exporting
url = z_url
importing
client = http_client.
http_client->propertytype_logon_popup = http_client->co_enabled .
call method http_client->request->set_header_field
exporting
name = 'CONTENT-TYPE'
value = 'APPLICATION/JSON'.
call method http_client->request->set_method( 'POST' )."PUT
"设置待传输内容
call method http_client->request->set_cdata
exporting
data = gv_json
offset = 0
length = z_len.
"发送请求
call method http_client->send
exceptions
http_communication_failure = 1
http_invalid_state = 2
http_invalid_timeout = 4
http_processing_failed = 3
others = 5.
if sy-subrc <> 0 .
http_client->get_last_error( importing message = lv_msg ).
endif.
"读取远程服务返回的处理过结果。
call method http_client->receive
exceptions
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3.
if sy-subrc <> 0 .
http_client->get_last_error( importing message = lv_msg ).
endif.
* 获取返回的数据
z_return = http_client->response->get_cdata( ).
call method http_client->close.
if z_return is not initial and z_return+0(1) = '{' .
replace all occurrences of regex '"(\w+)"(\s*:\s*)'
in z_return with '$1$2'.
create object ztrexjsonret.
call method ztrexjsonret->deserialize(
exporting json = z_return
importing abap = gw_return ).
endif.
"写日志
if gw_return-success = '1'.
lw_alv-status = 'S'.
lw_alv-resultdata = '操作成功'.
lw_alv-zrecdate = sy-datum.
lw_alv-zrectime = sy-uzeit.
lw_alv-zcnme = sy-uname.
modify gt_alv from lw_alv transporting status resultdata zrecdate zrectime zcnme
where ebeln = lw_alv-ebeln .
elseif gw_return-success = '0'.
lw_alv-status = 'E'.
lw_alv-resultdata = gw_return-msg.
lw_alv-zrecdate = sy-datum.
lw_alv-zrectime = sy-uzeit.
lw_alv-zcnme = sy-uname.
modify gt_alv from lw_alv transporting status resultdata zrecdate zrectime zcnme
where ebeln = lw_alv-ebeln .
endif.
modify lt_alv from lw_alv transporting status resultdata zrecdate zrectime zcnme
where ebeln = lw_alv-ebeln .
endat.
clear: gw_send,gv_msg,gw_alv.
endloop.
3 summary
In the blog We will use 'at end of … endat for the ’