问题
I have a screen with a table control in it (generated with the Screen Painter) that shows records from a database table. The screen also has a button, which shows a popup when it's clicked. The popup has a form to add a record to the database table.
When the form is submitted the record is added to the database, but when the popup is closed, the screen that shows the database records isn't refreshed i.e. the new record isn't shown. Simply calling the screen again doesn't seem to work.
How to refresh the table control to show the new record?
回答1:
You have to make sure that the data that you want to display is actually in the internal table that is displayed by the screen.
- You can reread the database table or
- append the line generated by the pop-up form to the internal table (If the line types aren't identical you will have to move the fields to a similar structure first).
If the internal table has all the data, but it still does not display in the table control, make sure that the field in the table control that has the number of lines is updated to reflect the extra line.
回答2:
Just because your table refers to database fields does not mean it will be updated/populated automatically to reflect the state of the database. You need to programmatically populate the table during the PBO (Process Before Output) event that occurs before the screen is displayed.
To gain an understanding of how this works, you may need to spend some time understanding table controls in ABAP dynpros (screens). Here is a good place to get started:
http://help.sap.com/saphelp_nw04/helpdata/en/9f/dbac1d35c111d1829f0000e829fbfe/frameset.htm
回答3:
Be sure to update the lines variable of your tableview after adding the new line.
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>
来源:https://stackoverflow.com/questions/6170657/refresh-table-control-after-action