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 클래스 구현의 write 메소드가 화면에 쓸 수 없다는 것입니다.
어디서 'it_pakket'을 채우시겠습니까? –
@lausek 코드의 다른 부분 (혼란을 방지하기 위해 원래 게시물에 포함시키지 않았습니다)에서 3 개의 "pakket"개체를 만들고이를 테이블 it_pakket에 추가합니다. 별도의 Write 문을 사용하여이 테이블의 출력을 인쇄 할 수 있었으므로 테이블 it_pakket이 의심의 여지없이 채워집니다. – RobVH
문제는 제공하지 않은 코드 부분에서 발생할 가능성이 큽니다. [MCVE] (https://stackoverflow.com/help/mcve)를 포함하도록 질문을 편집하십시오. ABAP은 대소 문자를 구분하지 않으므로 CamelCase 명명 규칙을 익히는 것이 좋지만 추천되는 lower_case_with_underscores 명명법을 고수해야합니다. 또한 코드의 이름은 영어 여야합니다. – vwegert