ABAP 通过SUBMIT获取另一个程序里的数据

本文介绍了一个使用SAP ABAP编程语言从报告ZFI_R_014_C_NO1中获取并处理数据的例子。该过程涉及JSON序列化与反序列化,通过定义数据结构、提交报告并读取返回的数据到指定的表格结构中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Introduction

In the code we will demostrate that how get data in the other report. The other
report is ZFI_R_014_C_NO1

2. Code Example

 DATA:LO_EXCEPTION TYPE REF TO CX_ROOT,
       ZTREXJSON    TYPE REF TO CL_TREX_JSON_SERIALIZER,
       ZTREXJSONRET TYPE REF TO ZCL_TREX_JSON_DESERIALIZER,
       HTTP_CLIENT  TYPE REF TO IF_HTTP_CLIENT.

  DATA : GT_ZTFI084 LIKE TABLE OF ZTFI084,
        GW_ZTFI084 LIKE LINE OF GT_ZTFI084.



*------------------->增加前导零
  DEFINE REF_ADD_ZERO.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = &1
      IMPORTING
        OUTPUT = &1.
  END-OF-DEFINITION.
*------------------->除去前导零
  DEFINE REF_DELETE_ZERO.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = &1
      IMPORTING
        OUTPUT = &1.
  END-OF-DEFINITION.

*  DATA: LS_WERKS TYPE CHAR10.

  DATA:BEGIN OF  GW_DATA,
    BUKRS  LIKE  AUFK-BUKRS,
    ANLN1  LIKE  ANLA-ANLN1,
    END OF GW_DATA.
  DATA: GT_DATA LIKE TABLE OF GW_DATA .

  DATA: BEGIN OF GW_OUTDATA,
     BUKRS LIKE ANLA-BUKRS,
     ANLN1 LIKE ANLA-ANLN1,
     TXT50 LIKE ANLA-TXT50,
     TXA50 LIKE ANLA-TXA50,
     INVNR LIKE ANLA-INVNR,
     AKTIV LIKE ANLA-AKTIV,
     RMAIN TYPE STRING,
     MENGE LIKE ANLA-MENGE,
     ANSWL LIKE ANLC-ANSWL,
     NETVL LIKE ANLP-NAFAZ,
   END OF  GW_OUTDATA.
   TYPES:    BEGIN OF TP_RETURN,
       INDEX TYPE SY-INDEX,
       BUKRS TYPE ANLA-BUKRS,                       "公司代码
       ANLN1 TYPE ANLA-ANLN1,                       "资产号
       ANLHTXT TYPE ANLHTXT,                        "资产主号文本
       ANLN2 TYPE ANLA-ANLN2,                       "资产次级编号
       TXT50 TYPE ANLA-TXT50,                       "资产描述
       TXA50 TYPE ANLA-TXA50,                       "备注
       ANLKL TYPE ANLA-ANLKL,                       "类别
       INVNR TYPE ANLA-INVNR,                       "存货号
       SERNR TYPE ANLA-SERNR,                       "序列号
       IVDAT TYPE ANLA-IVDAT,                       "最后库存日
       INVZU TYPE ANLA-INVZU,                       "库存注记
       ZSKZC TYPE CHAR50,                            "数控资产
       ZYYRJ TYPE CHAR50,                            "应用软件
       ZHTH  TYPE CHAR50,                            "合同号
       ZSBGL TYPE CHAR50,                            "设备功率
       LIFNR TYPE ANLA-LIFNR,                       "供应商
       NAME1 TYPE LFA1-NAME1,
       HERST TYPE ANLA-HERST,
       LEART TYPE ANLA-LEART,                       "租赁类型
       ORD41 TYPE ANLA-ORD41,                       "资产状态
       ORDTX TYPE T087T-ORDTX,                       "资产状态描述
       AEDAT TYPE ANLA-AEDAT,                       "资产状态变更时间
       ZUGDT TYPE ANLA-ZUGDT,                       "首次购置日
       AKTIV TYPE ANLA-AKTIV,                       "资本化日期
       KOSTL TYPE ANLZ-KOSTL ,                      "成本中心
       KTEXT TYPE CSKT-KTEXT,                       "成本中心
       AFASL TYPE ANLB-AFASL,                       "折旧方法
       MEINS TYPE ANLA-MEINS,                       "单位
       MENGE TYPE ANLA-MENGE,                       "数量
       ANSWL TYPE ANLC-ANSWL,                       "原值
       NASUM TYPE ANLP-NAFAZ,                       "累计折旧
       NAFAZ TYPE ANLP-NAFAZ,                       "本期折旧
       NAFAG TYPE ANLC-NAFAG,                       "本年折旧
       NETVL TYPE ANLP-NAFAZ,                       "净值
       TOTAL TYPE STRING,                            "使用寿命
       DEAKT TYPE ANLA-DEAKT,                        "报废日期
       RMAIN TYPE STRING,                            "剩余寿命
       W_TAL TYPE I,
       W_RES TYPE I,
       ANLN3 TYPE ANEK-ANLN1,                        "调出资产号
       BUKRS1 TYPE ANEK-BUKRS,                        "调入资产号
       BZDAT TYPE ANEP-BZDAT,                        "原资产价值日期
       JISHU TYPE SY-INDEX,                           "计数

     END OF TP_RETURN.
  DATA: LT_RETURN TYPE STANDARD TABLE OF  TP_RETURN .

  DATA:GT_OUTDATA LIKE TABLE OF  GW_OUTDATA.
  DATA: CL_DATA TYPE REF TO DATA.
  FIELD-SYMBOLS: <F_OUTTAB> LIKE LT_RETURN.
  FIELD-SYMBOLS: <F_LINE> TYPE TP_RETURN.
  FIELD-SYMBOLS: <F_FIELD> TYPE ANY.

  " Start it by jinggl 20220322

 DATA: L_YEAR TYPE CHAR4.
  CLEAR: L_YEAR.
  L_YEAR = SY-DATUM+0(4).
  DATA: G_DATUM TYPE SY-DATUM.
  DATA L_ZUPER TYPE CHAR2 .
  L_ZUPER = SY-DATUM+4(2).


  TRY.


  CHECK IJSON IS NOT INITIAL.
  ZCL_JSON=>DESERIALIZE( EXPORTING JSON = IJSON PRETTY_NAME = ZCL_JSON=>PRETTY_MODE-CAMEL_CASE CHANGING DATA = GW_DATA ).

      IF GW_DATA IS INITIAL.
        ESIGN = 'E'.
        EMESSAGE = '传输数据为空,或JSON数据解析出错,请检查!'.
        EXIT.
      ENDIF.





  CL_SALV_BS_RUNTIME_INFO=>SET(
     DISPLAY  = ABAP_FALSE
     METADATA = ABAP_FALSE
     DATA     = ABAP_TRUE
  ).





  SUBMIT ZFI_R_014_C_NO1 USING SELECTION-SCREEN '1000'
                       WITH P_BUKRS =  GW_DATA-BUKRS

                       WITH P_ANLN1 EQ GW_DATA-ANLN1
                       WITH P_ZUJHR EQ L_YEAR
                       WITH P_ZUPER EQ L_ZUPER

                       AND RETURN.

  TRY.
      CL_SALV_BS_RUNTIME_INFO=>GET_DATA_REF(
            IMPORTING
              R_DATA = CL_DATA
      ).

    CATCH CX_SALV_BS_SC_RUNTIME_INFO.
      MESSAGE 'ZFIR014C无返回数据' TYPE 'E'.
  ENDTRY.
  CHECK CL_DATA IS NOT INITIAL.
    CL_SALV_BS_RUNTIME_INFO=>CLEAR_ALL( ).
    ASSIGN CL_DATA->* TO <F_OUTTAB>.
    CHECK <F_OUTTAB> IS NOT INITIAL.
      LOOP AT <F_OUTTAB> ASSIGNING <F_LINE>.
        ASSIGN COMPONENT 'BUKRS' OF STRUCTURE <F_LINE> TO <F_FIELD>.
        GW_OUTDATA-BUKRS = <F_FIELD>.
          ASSIGN COMPONENT 'ANLN1' OF STRUCTURE <F_LINE> TO <F_FIELD>.
        GW_OUTDATA-ANLN1 = <F_FIELD>.
        ASSIGN COMPONENT 'TXT50' OF STRUCTURE <F_LINE> TO <F_FIELD>.
        GW_OUTDATA-TXT50 = <F_FIELD>.
        ASSIGN COMPONENT 'TXA50' OF STRUCTURE <F_LINE> TO <F_FIELD>.
        GW_OUTDATA-TXA50 = <F_FIELD>.
        ASSIGN COMPONENT 'INVNR' OF STRUCTURE <F_LINE> TO <F_FIELD>.
        GW_OUTDATA-INVNR = <F_FIELD>.
        ASSIGN COMPONENT 'AKTIV' OF STRUCTURE <F_LINE> TO <F_FIELD>.
        GW_OUTDATA-AKTIV = <F_FIELD>.
        ASSIGN COMPONENT 'RMAIN' OF STRUCTURE <F_LINE> TO <F_FIELD>.
        GW_OUTDATA-RMAIN = <F_FIELD>.
         ASSIGN COMPONENT 'MENGE' OF STRUCTURE <F_LINE> TO <F_FIELD>.
        GW_OUTDATA-MENGE = <F_FIELD>.
        ASSIGN COMPONENT 'ANSWL' OF STRUCTURE <F_LINE> TO <F_FIELD>.
        GW_OUTDATA-ANSWL = <F_FIELD>.
          ASSIGN COMPONENT ' NETVL' OF STRUCTURE <F_LINE> TO <F_FIELD>.
        GW_OUTDATA-NETVL = <F_FIELD>.
        MOVE-CORRESPONDING GW_OUTDATA TO GW_ZTFI084.

        APPEND GW_OUTDATA TO GT_OUTDATA.
        APPEND GW_ZTFI084 TO GT_ZTFI084.

        CLEAR: GW_OUTDATA,GW_ZTFI084.

      ENDLOOP.




      MODIFY ZTFI084 FROM TABLE GT_ZTFI084.
      IF SY-SUBRC = 0.
        COMMIT WORK.
      ENDIF.


      " End it by jinggl 20220322


      CLEAR:EJSON.
      EJSON = ZCL_JSON=>SERIALIZE( DATA = GT_OUTDATA[]
                     COMPRESS = ABAP_FALSE PRETTY_NAME =
                     ZCL_JSON=>PRETTY_MODE-EXTENDED ).

    CATCH CX_ROOT INTO LO_EXCEPTION.
      ESIGN = 'E'.
      EMESSAGE =  LO_EXCEPTION->GET_TEXT( ).
  ENDTRY.

### ABAPSUBMIT 语句的传参方法 在 ABAP 编程中,`SUBMIT` 是用于启动一个程序的关键字。通过 `SUBMIT` 可以实现不同程序之间的交互,并支持多种参数传递方式。以下是常见的几种传参方法及其示例。 #### 方法一:使用 EXPORTING LIST 可以将变量列表作为参数导出到目标程序。这些变量将在目标程序的全局数据声明部分可用。 ```abap DATA: lv_var TYPE string VALUE 'Test Value'. SUBMIT zprogram_1 AND RETURN EXPORTING LIST (lv_var). ``` 这种方法适用于简单的变量传递场景[^1]。 #### 方法二:使用 SET PARAMETER ID 和 GET PARAMETER ID `SET PARAMETER ID` 将值存储到 SAP 内存中,而目标程序可以通过 `GET PARAMETER ID` 来获取该值。需要注意的是,这种内存共享可能会引发意外行为,因为即使关闭原程序后,其他会话仍可能访问此内存中的值[^2]。 ```abap " 在源程序中设置参数 SET PARAMETER ID 'YTEST' FIELD 'ExampleValue'. " 在目标程序中获取参数 PARAMETERS: p_test TYPE string. GET PARAMETER ID 'YTEST' FIELD p_test. WRITE: / p_test. ``` #### 方法三:通过 SELECT-OPTIONS 或 RANGES 参数传递复杂条件 当需要向目标程序传递复杂的筛选条件时,可以选择利用 `SELECT-OPTIONS` 或者 `RANGES` 数据结构来完成这一需求。系统会在运行时自动处理这些选项并将其转换为目标程序所需的格式[^4]。 ```abap SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-b01. SELECT-OPTIONS: s_matnr FOR mara-matnr. SELECTION-SCREEN END OF BLOCK b1. START-OF-SELECTION. SUBMIT zprogram_2 WITH SELECTION-TABLE s_matnr AND RETURN. ``` #### 方法四:调用带有 SCREEN 的事务代码并通过 BDC 实现自动化输入 如果目标是一个基于屏幕的标准事务,则可通过 `CALL TRANSACTION` 配合 `USING BDC DATA` 完成批处理数据录入功能。外也可以借助工具如 SHDB 录制脚本简化开发过程[^5]。 ```abap PERFORM prepare_bdc_data CHANGING it_bdcdata. CALL TRANSACTION 'VA01' USING it_bdcdata MODE 'E' UPDATE 'A'. ... FORM prepare_bdc_data CHANGING ct_bdcdata TYPE TABLE OF bdcdata. ENDFORM. ``` 以上就是关于 ABAPSUBMIT 语句主要的四种传参手段介绍以及相应实例展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值