对ABAP来说很新颖。我有一个班级“卡车”(“vrachtwagen”),它有一个表属性it_pakket(卡车包)。我写了一个方法将这个表的内容写到屏幕上(DisplayLading)。我想为每辆卡车做这个,所以我在for循环中调用这个方法。程序运行没有错误,但输出不显示在屏幕上。for循环中的ABAP方法调用
REPORT ZPR412_OO_OEF1.
CLASS CPakket DEFINITION.
PUBLIC SECTION.
DATA: Id TYPE I READ-ONLY,
aantal TYPE I,
bestemmeling TYPE STRING.
METHODS: SetID IMPORTING ID TYPE I.
ENDCLASS.
CLASS CPakket IMPLEMENTATION.
METHOD SetID.
me->Id = ID.
ENDMETHOD.
ENDCLASS.
CLASS CVrachtwagen DEFINITION.
PUBLIC SECTION.
DATA: Id TYPE I READ-ONLY.
METHODS: SetID IMPORTING ID TYPE I,
LaadPakket IMPORTING Pakket TYPE REF TO CPakket,
LosPakket IMPORTING Pakket TYPE REF TO CPakket,
DisplayLading.
PRIVATE SECTION.
DATA: it_pakket TYPE STANDARD TABLE OF REF TO CPakket,
pakket TYPE REF TO CPakket.
ENDCLASS.
CLASS CVrachtwagen IMPLEMENTATION.
METHOD SetID.
me->Id = ID.
ENDMETHOD.
METHOD LaadPakket.
APPEND Pakket TO it_pakket.
ENDMETHOD.
METHOD LosPakket.
ENDMETHOD.
METHOD DisplayLading.
LOOP AT me->it_pakket into pakket.
WRITE:/ pakket->Id, pakket->aantal, pakket->bestemmeling.
ENDLOOP.
ENDMETHOD.
ENDCLASS.
DATA:
vrachtwagen TYPE REF TO CVrachtwagen,
it_vrachtwagens TYPE STANDARD TABLE OF REF TO CVrachtwagen,
pakket TYPE REF TO CPakket,
it_pakket TYPE STANDARD TABLE OF REF TO CPakket,
s TYPE string.
start-of-selection.
DO 2 TIMES.
CREATE OBJECT vrachtwagen.
CALL METHOD vrachtwagen->SetId EXPORTING Id = sy-index.
APPEND vrachtwagen TO it_vrachtwagens.
ENDDO.
CREATE OBJECT pakket.
CALL METHOD pakket->SetId EXPORTING Id = 1.
pakket->aantal = 5.
pakket->bestemmeling = 'Bob'.
APPEND pakket TO it_pakket.
CREATE OBJECT pakket.
CALL METHOD pakket->SetId EXPORTING Id = 2.
pakket->aantal = 2.
pakket->bestemmeling = 'Jan'.
APPEND pakket TO it_pakket.
CREATE OBJECT pakket.
CALL METHOD pakket->SetId EXPORTING Id = 3.
pakket->aantal = 1.
pakket->bestemmeling = 'Piet'.
APPEND pakket TO it_pakket.
LOOP AT it_vrachtwagens INTO vrachtwagen.
CASE sy-index.
WHEN 1.
loop at it_pakket into pakket.
if sy-index lt 3.
vrachtwagen->LaadPakket(pakket).
endif.
endloop.
WHEN 2.
read table it_pakket into pakket index 3.
vrachtwagen->LaadPakket(pakket).
ENDCASE.
ENDLOOP.
LOOP AT it_vrachtwagens INTO vrachtwagen.
vrachtwagen->DisplayLading().
ENDLOOP.
我写的代码,以填补包卡车和添加的卡车内部表在我环路。我的猜测是CVrachtwagen类实现中的写入方法无法写入屏幕,因为程序仍在运行循环?
你在哪里填写'it_pakket'? – 2017-10-04 15:40:53
@lausek在代码的不同部分(没有在我的原始文章中包含它以防止混乱),我创建3个“pakket”对象并将它们附加到表it_pakket。我能够使用单独的Write语句打印此表的输出,因此表it_pakket毫无疑问地被填充。 – RobVH
问题很可能出现在您未提供的部分代码中。请修改您的问题以包含[MCVE](https://stackoverflow.com/help/mcve)。除此之外:ABAP不区分大小写,所以我不建议你习惯于使用CamelCase命名约定,而是坚持推荐的lower_case_with_underscores命名。此外,代码中的名称应该是英文的。 – vwegert