Attributes problem (inheritance)
Closed this issue · 5 comments
Hello @fidley!
On zcl_falv inherition I add new methods and attributes.
Before calling lo_alv->display( ).
I use lo_alv->set_autosave( abap_true ).
.
On redefinition method evf_user_command I try to get attribute autosave, but it is empty. It happends if class instance is created as popup screen. If i_popup = abap_false
evertything is OK.
For example:
CLASS lcl_alv DEFINITION INHERITING FROM zcl_falv.
PUBLIC SECTION.
METHODS set_autosave
IMPORTING
iv_autosave TYPE abap_bool.
METHODS get_autosave
RETURNING
VALUE(rv_autosave) TYPE abap_bool.
PROTECTED SECTION.
METHODS evf_user_command REDEFINITION.
PRIVATE SECTION.
DATA mv_autosave TYPE abap_bool.
ENDCLASS.
CLASS lcl_alv IMPLEMENTATION.
METHOD set_autosave.
mv_autosave = iv_autosave.
ENDMETHOD.
METHOD get_autosave.
rv_autosave = mv_autosave.
ENDMETHOD.
METHOD evf_user_command.
...
IF get_autosave( ) = abap_true.
...
ENDIF.
ENDMETHOD.
ENDCLASS.
I figured out that in metod create_by_copy creating new object.
Can you fix it?
Hi @PShumilov,
it is the same issue like #41. I don't know why it is this way, but when I want to display grid in the popup, then the instance of grid should be created inside the PBO event of the popup.
If I could solve this problem then your issue and #41 would be solved. I need to check if there is a way for that.
Maybe you have an idea?
Cheers
Łukasz
I tried to fix the bug different ways. In case that instance of grid should be created in PBO event I invented horrible bad solution (but it works). Maybe this could lead you to find good solvation.
I added new EXPORTING parametr eo_falv like io_falv in FM Z_FALV_DISPLAY and call it in method create for popup:
rv_falv->layout_save = 'A'.
rv_falv->variant-report = sy-cprog.
rv_falv->variant-username = sy-uname.
rv_falv->grid = cast #( rv_falv ).
if i_popup = abap_true.
call function 'Z_FALV_DISPLAY'
exporting
io_falv = rv_falv
iv_start_row = 1
iv_start_column = 1
importing
eo_falv = rv_falv
endif.
After create_by_copy in PBO event:
falv->pbo( iv_dynnr = iv_dynnr ).
falv->display( iv_force_grid = abap_true ).
LEAVE TO SCREEN 0.
Then replace "old" instance with instance of grid created in PBO:
if io_falv->screen eq io_falv->c_screen_popup.
call screen io_falv->screen starting at iv_start_column iv_start_row
ending at iv_end_column iv_end_row.
eo_falv ?= <out>->falv.
else.
call screen io_falv->screen.
endif.
Perfect, I haven't thought about such way! Thanks I will try to implement similar thing inside to get rid of create_by_copy :D
I'll keep you informed.
Please update your FALV, I've used your approach but bit pimped :)
I am creating a main GUI container in the screen and then I quit, then I pass it to grid object and now copying of objects is not necessary. :)