如何解决将内联声明的表/变量传递给ABAP中的子例程
我知道何时需要将内部表传递给子例程,我需要声明一个类型,以便可以在FORM语句中使用它。 如果内部表是这样的SELECT语句中的内联声明表,会发生什么:
SELECT * FROM KNA1 INTO TABLE @DATA(LT_KNA1)
有什么方法可以将此表传递给子例程? 谢谢。
解决方法
从ABAP 7.02(2009)开始,子例程已过时,因此在示例中使用了一种方法。
内联声明是一种隐式声明类型的简便方法,但是此解决方案的局限性在于,您只能通用地键入方法的参数(类型STANDARD TABLE
,INDEX TABLE
,{{1} },ANY TABLE
),以防止您在代码中静态说明组件名称。
但是类型ANY
的内联声明始终基于完整的“绑定”数据类型,因此您可以使用DATA(...)
显式声明该类型,并使用它同时键入参数和数据对象
如果使用ABAP开发工具(Eclipse),则可以使用快速修复“显式声明局部变量...”来简化任务:
给出以下代码:
TYPES
现在,手动声明表类型,使用它来键入方法的参数(此处为新参数):
REPORT.
CLASS lcl_app DEFINITION.
PUBLIC SECTION.
CLASS-METHODS main.
ENDCLASS.
CLASS lcl_app IMPLEMENTATION.
METHOD main.
TYPES: BEGIN OF helper_type," <=== automatically generated
carrid TYPE scarr-carrid,carrname TYPE scarr-carrname,END OF helper_type.
DATA: lt_scarr TYPE STANDARD TABLE OF helper_type. " <=== automatically generated
SELECT carrid,carrname FROM scarr
INTO TABLE @lt_scarr. " <=== automatically changed
ENDMETHOD.
ENDCLASS.
,
使用TYPE ANY
或通用表类型作为参数,TABLE
参数已过时:
FORM fill_table USING tab TYPE any
CHANGING ptab TYPE INDEX TABLE.
APPEND LINES OF tab TO ptab.
ENDFORM.
是的,子例程本身已经过时,仅在绝对必须这样做时才使用它们,例如在旧版环境中。
,您无需指明执行变量表的结构类型。但是,如果在执行中使用任何字段名称更改,则在运行时会出错。下面是两个工作示例。
SELECT * FROM kna1 INTO TABLE @DATA(lt_kna1).
PERFORM test TABLES lt_kna1.
FORM test TABLES pt_kna1 STRUCTURE kna1.
*
ENDFORM.
危险的一个:
FORM test TABLES pt_kna1.
*
ENDFORM.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。