我有一个屏幕,其中有一个表控件(使用screen Painter生成),用于显示数据库表中的记录。屏幕上还有一个按钮,点击后会显示一个弹出窗口。弹出窗口有一个向数据库表中添加记录的窗体。
提交表单时,记录会添加到数据库中,但当弹出窗口关闭时,显示数据库记录的屏幕不会刷新,即不会显示新记录。简单地再次调用屏幕似乎不起作用。
如何刷新表控件以显示新记录?
表引用数据库字段并不意味着它将自动更新/填充以反映数据库的状态。在显示屏幕之前发生的PBO(输出前处理)事件期间,您需要以编程方式填充表。
为了了解这是如何工作的,您可能需要花一些时间了解ABAP dynpro(屏幕)中的表控件。这里是一个很好的起点:
http://help.sap.com/saphelp_nw04/helpdata/en/9f/dbac1d35c111d1829f0000e829fbfe/frameset.htm
您必须确保要显示的数据实际上在屏幕显示的内部表中。
- 您可以重新读取数据库表或
- 将弹出窗体生成的行附加到内部表中(如果行类型不相同,则必须先将字段移动到类似的结构中)
如果内部表包含所有数据,但仍然没有显示在表控件中,请确保更新表控件中具有行数的字段以反映额外的行。
添加新行后,请确保更新表视图的行变量。
CONTROLS: gr_table TYPE TABLEVIEW USING SCREEN <your_screen_here>.
DATA: gt_data TYPE STANDARD TABLE OF <your_type_here>,
gs_data LIKE LINE OF gt_data.
PROCESS BEFORE OUTPUT.
DESCRIBE TABLE gt_data LINES gr_table-lines.
LOOP AT gt_data INTO gs_data
WITH CONTROL gr_table
CURSOR gr_table-current_line.
ENDLOOP.
PROCESS AFTER INPUT.
<adding_the_new_line_somewhere_here>