Getting the row that the user cursor is in accomplished by using the GET CURSOR LINE statement. As always, we need to declare a global field named something like cur_tbl_line to hold the current table line. Then during PAI processing we need to issue statements like the following :
(tc_mydata
is the name of the screen table control and XXX is the screen number)
MODULE user_command_XXX INPUT.
* set up the current line variable
GET CURSOR LINE cur_tbl_line.
cur_tbl_line = tc_mydata-top_line + cur_tbl_line - 1.
* do the classic stuff
ok_code = ok_code_XXX.
CLEAR ok_code_XXX.
...
ENDMODULE.
Using this approach, you can get the selected line of the tbl_mydata
table by writing code like this
FORM sync_mydata_with_selection
CHANGING
f_none_selected TYPE c.
FIELD-SYMBOLS
<fs> LIKE LINE OF tbl_mydata.
CLEAR f_none_selected.
* give precedence to the table control selection
READ TABLE tbl_mydata
WITH KEY sel = 'X'
ASSIGNING <fs>.
IF sy-subrc <> 0.
* No selection was made so get the current row using the
* cursor
IF cur_tbl_line > 0.
READ TABLE tbl_packages INDEX cur_tbl_line
ASSIGNING .
ELSE.
f_none_selected = 'X'.
ENDIF.
ENDIF.
ENDFORM.
After this is executed, the header line of tbl_mydata
contains the selected row and if your user has not selected anything then f_none_selected
will have a value of 'X'
.