首页 > 解决方案 > 将范围表传递给 ABAP 类/方法会导致提交

问题描述

来自 RSA3 的短转储

我想为 OBJNR 传递一个范围表,例如

    call method ME->ME_GET_STATUS
      exporting
        I_OBJNR                  = <FS_DATA>-OBJNR_NTF
        I_AEDAT                  = LV_AEDAT
        I_AEZEIT                 = LV_AEZEIT
        IT_OBJNR                 = LR_OBJNR
      importing ...

在超类的公共部分中,我有:

    RT_OBJNR                  type range of JSTO-OBJNR . (this is inherited by the calling class)

调用和被调用的方法都使用它。

ME_GET_STATUS 方法有一个参数:

IT_OBJNR 导入类型 RT_OBJNR OBJNR 范围表

和代码

     ,WA_OBJNR                   like line of IT_OBJNR
     ,LR_OBJNR                   type RT_OBJNR

  LR_OBJNR[] = IT_OBJNR[].

范围表仅用于缓冲 itab - LT_JCDS。

select S~OBJNR, S~STAT,  S~CHGNR, S~UDATE, S~UTIME,
         S~INACT, O~OBTYP, O~STSMA
    from JCDS  as S
    join JSTO  as O
      on O~OBJNR = S~OBJNR
    into table @IT_JCDS
   where S~OBJNR in @LR_OBJNR
   order by S~OBJNR, S~UDATE, S~UTIME, S~STAT, S~CHGNR
         
loop at IT_JCDS into data(LT_JCDS)  
               where OBJNR = I_OBJNR
    
  group by ( OBJNR = LT_JCDS-OBJNR  STAT = LT_JCDS-STAT
             GS  = group size GI = group index     )
        ascending
        reference into data(OBJNR_REF)

如果范围表中只有 1 条记录,则一切正常。

问题是,如果我传递超过 1 条记录,它仍然可以正常工作,但似乎会导致提交(?)关闭游标,导致MCEX_BW_LO_API. 当为第二个数据包调用宏“sel”时会发生这种情况。

这个想法是传递“EQ”和“BT”选择的多条记录,从而减少从数据库返回的记录。

我尝试更改为标准表并使用= LR_OBJNR[]

标签: methodsparametersrangeabap

解决方案


推荐阅读