如何给嵌套内表赋值


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 ’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值