自分のプログラムに問題があります。このプログラムでは、ユーザーは選択画面でデータを入力する必要があります。そこで、保存された ALV バリアントの 1 つを選択することもできます。次のステップで、選択したデータを含む ALV リストが表示されます。さらに、ALV 内のデータには、選択されたレイアウトが含まれている必要があります。この ALV では、ユーザーは通常の ALV 機能を使用して、ALV のバリアントを変更、保存、選択、および管理できます。とはいえ、それには問題があります。ユーザーがフィルターを使用して既存の ALV バリアントに切り替えたい場合、(すべてのケースの 90%) フィルターと選択した ALV の並べ替えが適用されないことがあります。選択画面でこのバリアントを入力すると、すべてのフィルター、並べ替えなどを含む適切な ALV レイアウトが正しく適用されます。選択画面の f4-help の私のコード:
DATA: lwa_variant LIKE disvariant,
lw_exit_flag TYPE cmpflag.
lwa_variant-report = sy-repid.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = lwa_variant
i_save = 'A'
IMPORTING
e_exit = lw_exit_flag
es_variant = wa_variant
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE s899(mm) WITH text-088.
ELSEIF NOT lw_exit_flag IS INITIAL.
MESSAGE s899(mm) WITH text-089.
CLEAR wa_variant.
ENDIF.
p_layou = wa_variant-variant.
ALV を使用した画面の PBO 内の私のコード:
DATA: i_fieldcat TYPE lvc_t_fcat,
wa_layout TYPE lvc_s_layo,
wa_stable TYPE lvc_s_stbl,
wa_r_variant TYPE DISVARIANT.
IF o_alv_container IS INITIAL.
CREATE OBJECT o_alv_container
EXPORTING
container_name = 'O_ALV_CONTAINER'.
CREATE OBJECT o_alv
EXPORTING
i_parent = o_alv_container
EXCEPTIONS
others = 1.
IF sy-subrc <> 0.
MESSAGE e002.
ENDIF.
IF wa_variant IS INITIAL AND p_layou IS INITIAL.
wa_r_variant-report = sy-repid.
ELSEIF wa_variant IS NOT INITIAL.
wa_r_variant = wa_variant.
wa_r_variant-handle = SPACE.
wa_r_variant-log_group = SPACE.
wa_r_variant-username = SPACE.
wa_r_variant-text = SPACE.
wa_r_variant-dependvars = SPACE.
ELSE.
wa_r_variant-report = sy-repid.
wa_r_variant-variant = p_layou.
ENDIF.
wa_layout-zebra = ''.
wa_layout-stylefname = 'IMPUT_STYLE'.
wa_layout-sel_mode = 'A'.
wa_layout-cwidth_opt = 'X'.
CALL METHOD o_alv->set_table_for_first_display
EXPORTING
is_variant = wa_r_variant
is_layout = wa_layout
i_save = 'A'
i_default = 'A'
CHANGING
it_outtab = i_alv_data
it_fieldcatalog = i_fieldcat
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE e002.
ENDIF.
ELSE.
wa_stable-COL = 'X'.
wa_stable-row = 'X'.
CALL METHOD o_alv->refresh_table_display
EXPORTING
is_stable = wa_stable
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE e003.
ENDIF.
ENDIF.
他のプログラムでこのような問題が発生したことは一度もありませんし、これについて聞いたこともありません。残念なことに、テーブルには多くのフィールド (>20) があるため、ユーザーは希望する方法で (フィルター、並べ替えなどを使用して) 構成する必要があります。何時間ものテストの後、自分のコードの何が問題なのかを突き止めることができませんでした。SAP ALV メソッドもデバッグしました。場合によっては、システムがフィルターを読み込めないことがわかりました。しかし、理由はわかりません。ヒントや情報は私にとって役立つ場合があります。前もって感謝します!