Abap 如何在上一个模式对话框上提高PBO?
我有两个对话框,一个调用另一个。为了阐明我的意思,让我们来看看第一个对话框: 正如您在屏幕上看到的,它包含ALV。当我单击该行时,它将打开第二个对话框:Abap 如何在上一个模式对话框上提高PBO?,abap,Abap,我有两个对话框,一个调用另一个。为了阐明我的意思,让我们来看看第一个对话框: 正如您在屏幕上看到的,它包含ALV。当我单击该行时,它将打开第二个对话框: 当我关闭第二个对话框时,我想在第一个is屏幕上触发PBO以执行RERERENDER ALV。如何存档 更新 代码,调用第二个屏幕: METHOD handle_double_click. FIELD-SYMBOLS <lt_task> TYPE STANDARD TABLE. FIELD-SYMBOLS &
当我关闭第二个对话框时,我想在第一个is屏幕上触发PBO以执行RERERENDER ALV。如何存档 更新 代码,调用第二个屏幕:
METHOD handle_double_click.
FIELD-SYMBOLS <lt_task> TYPE STANDARD TABLE.
FIELD-SYMBOLS <ls_task> TYPE any.
FIELD-SYMBOLS <ls_clicked_data> TYPE any.
DATA(lo_task_provider) = lcl_alv_task_provider=>get_instance( ).
DATA(lt_task) = lo_task_provider->c_gt_data.
ASSIGN lt_task->* TO <lt_task>.
IF sy-subrc <> 0 OR <lt_task>[] IS INITIAL.
RETURN.
ENDIF.
CREATE DATA lo_task_provider->c_gs_clicked_data LIKE LINE OF <lt_task>.
ASSIGN lo_task_provider->c_gs_clicked_data->* TO <ls_clicked_data>.
READ TABLE <lt_task> ASSIGNING <ls_task> INDEX e_row.
<ls_clicked_data> = <ls_task>.
zdp2_planning_split = me->fill_splitt_info( <ls_task> ).
DATA(ls_planning_split_alv) = VALUE zdp2_planning_split_alv( matnr = zdp2_planning_split-matnr
lfdat = zdp2_planning_split-lfdat
sollmng = zdp2_planning_split-sollmng
meins = zdp2_planning_split-meins ).
DATA(lt_planning_split_alv) = VALUE zdp2_planning_split_alv_t( ).
INSERT ls_planning_split_alv INTO TABLE lt_planning_split_alv.
lcl_alv_split_provider=>get_instance( )->insert_data( lt_planning_split_alv ).
CALL SCREEN '0100' STARTING AT 8 8.
ENDMETHOD.
双击方法句柄。
字段符号类型标准表。
字段符号类型任意。
字段符号类型任意。
数据(lo_任务_提供程序)=lcl_alv_任务_提供程序=>get_实例()。
数据(lt_任务)=lo_任务提供程序->c_gt_数据。
将lt_任务->*分配给。
如果sy subrc 0或[]是首字母。
返回。
恩迪夫。
创建数据lo_任务\u提供程序->c_gs\u单击\u数据,如第行。
将lo_任务\u提供程序->c_gs\u单击的\u数据->*分配给。
读取分配索引e_行的表。
= .
zdp2_planning_split=me->fill_splitt_info()。
数据(ls_planning_split_alv)=值zdp2_planning_split_alv(matnr=zdp2_planning_split-matnr
lfdat=zdp2\u规划\u分割-lfdat
sollmng=zdp2\u规划\u分割-sollmng
meins=zdp2\u计划\u分割meins)。
数据(lt_planning_split_alv)=值zdp2_planning_split_alv_t()。
将ls_planning_split_alv插入表lt_planning_split_alv。
lcl\u alv\u split\u provider=>get\u instance()->insert\u data(lt\u planning\u split\u alv)。
从8点开始呼叫屏幕“0100”。
ENDMETHOD。
更新
我想这些图片并没有阐明我的意思。现在应该更好了:
第一个模态调用第二个模态。当第二个模式关闭时,应刷新第一个屏幕上的ALV。我无法刷新它,因为第一个屏幕上的PBO在第二个模式关闭后不会执行。我猜方法
HANDLE\u DOUBLE\u CLICK
是在CL\u GUI\u ALV\u GRID
的事件双击时触发的。此事件仅触发一个方法,不会启动PAI(因此也不会触发PBO)
如果您想触发PAI,只需添加此行(您必须指明一个功能代码,此处为“ZZZ”):
但是,在呼叫屏幕
之后,为什么不刷新ALV网格呢
假设您使用classCL\u GUI\u ALV\u grid
对ALV网格进行编程,添加以下代码:
" first update the internal table of the ALV
...
" transfer the internal table to the control, it also does an "update_view"
alv_grid->refresh_table_display( ).
您不应该从8开始使用呼叫屏幕“0100”
下面是调用弹出屏幕的示例代码,当弹出屏幕关闭时,您可以编写代码来刷新第一个ALV屏幕数据
TYPES: BEGIN OF alv_line,
carrid TYPE spfli-carrid,
connid TYPE spfli-connid,
cityfrom TYPE spfli-cityfrom,
cityto TYPE spfli-cityto,
END OF alv_line.
DATA alv_tab TYPE TABLE OF alv_line.
SELECT carrid, connid, cityfrom, cityto
FROM spfli
WHERE carrid = @carrid
INTO CORRESPONDING FIELDS OF TABLE @alv_tab.
IF sy-subrc <> 0.
MESSAGE e007(sabapdemos).
ENDIF.
TRY.
cl_salv_table=>factory(
IMPORTING r_salv_table = DATA(alv)
CHANGING t_table = alv_tab ).
alv->set_screen_popup( start_column = 1
end_column = 60
start_line = 1
end_line = 12 ).
alv->display( ).
CATCH cx_salv_msg.
MESSAGE 'ALV display not possible' TYPE 'I'
DISPLAY LIKE 'E'.
ENDTRY.
类型:从alv_线开始,
卡里德型spfli卡里德,
connid类型spfli connid,
cityfrom类型spfli cityfrom,
cityto类型spfli cityto,
alv_线的末端。
数据alv_选项卡alv_线的类型表。
选择carrid、connid、cityfrom、cityto
来自spfli
其中carrid=@carrid
进入表格@alv_选项卡的相应字段。
如果sy subrc为0。
消息e007(sabapdemos)。
恩迪夫。
尝试
cl_salv_表=>工厂(
导入r_salv_表=数据(alv)
更改t_表=alv_选项卡)。
alv->设置屏幕弹出窗口(开始列=1
end_列=60
起始线=1
结束线=12)。
alv->显示()。
抓到你的萨尔夫味精。
信息“ALV显示不可能”类型“I”
像“E”一样显示。
结束。
第二个对话框是否取代第一个?请附上从第一个对话框导航到第二个对话框的代码好吗?第一个对话框不会取代第二个对话框。我把代码贴在了第二个屏幕上。在SCN上我也问了一个问题:@zero_编码你的最新更新(1月8日14:22)反映了我最初的理解。Cf my answer(PBO未调用,但您仍可以更新alv网格;如果您确实希望调用PBO,则可以强制触发PAI/PBO)
TYPES: BEGIN OF alv_line,
carrid TYPE spfli-carrid,
connid TYPE spfli-connid,
cityfrom TYPE spfli-cityfrom,
cityto TYPE spfli-cityto,
END OF alv_line.
DATA alv_tab TYPE TABLE OF alv_line.
SELECT carrid, connid, cityfrom, cityto
FROM spfli
WHERE carrid = @carrid
INTO CORRESPONDING FIELDS OF TABLE @alv_tab.
IF sy-subrc <> 0.
MESSAGE e007(sabapdemos).
ENDIF.
TRY.
cl_salv_table=>factory(
IMPORTING r_salv_table = DATA(alv)
CHANGING t_table = alv_tab ).
alv->set_screen_popup( start_column = 1
end_column = 60
start_line = 1
end_line = 12 ).
alv->display( ).
CATCH cx_salv_msg.
MESSAGE 'ALV display not possible' TYPE 'I'
DISPLAY LIKE 'E'.
ENDTRY.