2022 May 16 8:03 AM
Hi All,
I'm currently implementing a cockpit. For this I want to display the long text of a sales order position. I created an dynpro with an cl_gui_textedit field. It works all fine in my first case.
The problem is, that I'm trying to reuse this dynpro at another position. To clarify my problem:
First position: Main dynpro 2000 -> double click on a sales order with one position in an ALV Grid -> Displaying dynpro 2010 with long text. (Dynpro Stack: 2000-2010)
Second Position: Main dynpro 2000 -> double click on a sales order with several positions in ALV Grid -> Displaying dynpro 2001 with ALV grid of positions -> double click on position -> Displaying dynpro 2010 with long text. (Dynpro Stack: 2000-2001-2010)
In both cases it works fine at first. But if I call the first position and afterwards I try to call the second Position the dynpro is showing without the textedit field. Same the other way around. If I call the second position first the first position doesn't show properly. If I stay to one position it works several times in a row, even if I try another long text.
I have the same problem with an alv grid I wanted to display twice.
My guess: The textedit or the custom container saves the dynpro stack. But I don't know how to fix this Problem. I also tried to free the instance of the textedit and the custom container and rebound it, but it is not working either.
Had someone else the same problem or could help me?
Greetings Max
2022 May 16 8:43 AM
I don't have any issue with this kind of scenario, you must be doing something wrong, but I can't tell you what, if you don't provide a minimal reproducible example.
2022 May 16 8:47 AM
Just an idea, be careful about the Control "lifetime management".
SAP library "lifetime management": Lifetime Management | SAP Help Portal
2022 May 16 9:10 AM
Hey, thanks for your reply. Here is some of my coding.
Initialization:
METHODS init_longtext_textedit . "Definition
METHOD init_longtext_textedit.
IF gs_alv_data-o_dep_long_text IS BOUND.
RETURN.
* gs_alv_data-o_cc_dep_long_text->free( ).
* gs_alv_data-o_dep_long_text->free( ).
ENDIF.
gs_alv_data-o_cc_dep_long_text = NEW #( container_name = gc_custom_container-longtext_depo
repid = sy-cprog
dynnr = gc_dynpro-depo_longtext ).
gs_alv_data-o_dep_long_text = NEW #( parent = gs_alv_data-o_cc_dep_long_text
wordwrap_position = 132 ).
gs_alv_data-o_dep_long_text->set_readonly_mode( COND #( WHEN gs_active_deposit-action <> zasd_if_cms_deposit=>mc_action-create THEN 1 ELSE 0 ) ).
IF gs_active_deposit IS NOT INITIAL.
set_depo_longtext( it_text = gt_depo_text ).
ENDIF.
ENDMETHOD.
Set data:
METHODS set_depo_longtext "Definition
IMPORTING
!it_text TYPE tline_t .
METHOD set_depo_longtext.
IF gs_alv_data-o_dep_long_text IS BOUND.
IF it_text IS NOT INITIAL.
gs_alv_data-o_dep_long_text->set_text_as_r3table(
EXPORTING
table = get_longtext( it_text )
EXCEPTIONS
error_dp = 1
error_dp_create = 2
OTHERS = 3
).
ELSE.
gs_alv_data-o_dep_long_text->delete_text( ).
ENDIF.
ELSE.
gt_depo_text = it_text.
ENDIF.
ENDMETHOD.
Something I forgot to mention: The complete coding is inside a class, which is called and instanced in a program. The calls of the dynpros are realized due to an event I created.
I'm not sure what else I could provide. At both positions its only a call screen, and afterwards the PBO of the dynpro is triggered with the initialization of the textedit.
Greetings Max
2022 May 16 10:31 AM
What you could do is provide a minimal reproducible example. I could write one in 20 minutes that you could try and you would see it works fine. If you could do this little one for us so that we debug it for you, that would be better.
Quick win: maybe you instantiate twice or free incorrectly the GUI control (textedit or container).