ABAPにはまったく新しい機能です。私はテーブル属性it_pakket(トラック内のパッケージ)を持つクラス "トラック"( "vrachtwagen")を持っています。私はこのテーブルの内容を画面に書き込む方法を書いた(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