特定のクラス メソッドがトリガーされたときに、dynpro でタイトルバーを変更したい。そのため、dynpro が配置されているレポートで、'SET TITLE' を使用してタイトルバーのコンテンツを変更する関数を呼び出すことができると考えました。
これは可能ですか?それとももっと良い方法がありますか?
ありがとう!
PBO 処理中に使用SET TITLEBAR
- メソッド、FORM、またはモジュールから直接使用されても問題ありません。保守性を高めるためにコードをステートメントSET TITLEBAR
で散らかすのではなく、制御フローの同じポイントで常に呼び出される単一のステートメントを使用することをお勧めします。SET TITLEBAR
最近、似たようなものを実装する必要があったので、「CALL_DYNPRO」メソッドで抽象クラスを作成するクラス階層を定義しました。このメソッドは、具象クラスに特定の Dynpro をロードすることを目的としています。
そのため、内部で定義したアクションに応じて適切なインスタンスを生成し、メソッド 'CALL_DYNPRO' が作成した dynpro を独自の GUI ステータスとタイトルと共にロードします。
以下は、多かれ少なかれ私が作成したコードです。
********************************* The abstract class
class lc_caller definition abstract.
public section.
methods: call_dynpro.
endclass.
class lc_caller implementation.
method call_dynpro.
endmethod.
endclass.
********************************* The concrete classes
class lc_caller_01 definition inheriting from lc_caller.
public section.
methods: call_dynpro redefinition.
endclass.
class lc_caller_01 implementation.
method call_dynpro.
call screen 101.
endmethod.
endclass.
class lc_caller_02 definition inheriting from lc_caller.
public section.
methods: call_dynpro redefinition.
endclass.
class lc_caller_02 implementation.
method call_dynpro.
call screen 102.
endmethod.
endclass.
********************************* Factory
class caller definition.
public section.
class-methods call importing i_type type char01
returning value(r_instance) type ref to lc_caller.
endclass.
class caller implementation.
method call.
data: caller1 type ref to lc_caller_01,
caller2 type ref to lc_caller_02.
case i_type.
when '0'.
create object caller1.
r_instance = caller1.
when '1'.
create object caller2.
r_instance = caller2.
when others.
endcase.
endmethod.
endclass.
start-of-selection.
data obj type ref to lc_caller.
obj = caller=>call( '0' ).
obj->call_dynpro( ).
これは、PBO 内のコードです。
ディンプロ101
module status_0101 output.
set pf-status 'FORM1'.
set titlebar 'VER'.
endmodule.
ディンプロ102
module status_0102 output.
set pf-status 'FORM2'.
set titlebar 'TRA'.
endmodule.
明日、別の dynpro を呼び出す必要がある場合は、それを作成し、具体的なクラスをコーディングしてロードします。
非常に簡単で、非常にうまく機能します。
それが役に立てば幸い。