Code: Alles auswählen.
method IF_FPM_GUIBB_FORM~FLUSH.
DATA: lo_fpm TYPE REF TO if_fpm,
lo_event TYPE REF TO cl_fpm_event,
ls_structure TYPE SPFLI .
FIELD-SYMBOLS: <structure> TYPE ANY.
ASSIGN is_data->* To <structure>.
MOVE-CORRESPONDING <structure> TO ls_structure.
CREATE OBJECT lo_event
EXPORTING
iv_event_id = 'DIALOG_OK'.
lo_event->mo_event_Data->set_value( iv_key = 'STRUCTURE_DIALOG'
iv_value = ls_structure ).
lo_fpm = cl_fpm_factory=>get_instance( ).
lo_fpm->raise_event( io_event = lo_event ).
endmethod.
Code: Alles auswählen.
FIELD-SYMBOLS: <ls_Struc> type any.
DATA: ls_struc TYPE REF TO data.
CREATE DATA ls_struc TYPE ddictype.
ASSIGN ls_struc->* to <ls_struc>.
Code: Alles auswählen.
FIELD-SYMBOLS <structure> TYPE any.
DATA : lo_event TYPE REF TO cl_fpm_event,
lo_fpm TYPE REF TO if_fpm.
ASSIGN is_data->* TO <structure>.
MOVE-CORRESPONDING <structure> to ms_structure.
Code: Alles auswählen.
FIELD-SYMBOLD: <fs> TYPE any.
ASSIGN ms_structure->* to <fs>.
<fs>-col = 'wasauchimmer'.
Wie heißt diese Möglichkeit ?Thanatos82 hat geschrieben: Als Tipp: Wenn du es flexibel halten möchtest gibt es die Möglichkeit sich die Namen der Felder einer Struktur tabellarisch ausgeben zu lassen.
Dann kannst du über diese Tabelle loopen und mit assign component jedes Feld der struktur <fs_structure> zuweisen. Dann musst du dir das dazugehörige Feld in der ms_structure mit dem gleichen Befehl zuweisen, den Feldwert übergeben und dann sollte das so funktionieren wie du möchtest.
FIELD-SYMBOLS <structure> TYPE ref to data.
DATA: lv_string TYPE string,
lo_event TYPE REF TO cl_fpm_event,
lo_fpm TYPE REF TO if_fpm.
ASSIGN is_data->* TO <structure>.
CREATE OBJECT lo_event
EXPORTING
iv_event_id = 'DIALOG_OK'.
lo_event->mo_event_data->set_value( iv_key = 'STRUCTURE_DIALOG'
iv_value = <structure> ).
lo_fpm = cl_fpm_factory=>get_instance( ).
lo_fpm->raise_event( io_event = lo_event ).
Diese Möglichkeit hatte ich eigentlich oben beschrieben, wie es funktioniert. Ging das etwa nicht?Trulchen hat geschrieben:besser wäre es die "unbekannte" strukur in eine membervariable zu schreiben und dann in einer anderen Methode wieder "abzurufen" und zu verarbeiten...
<structure> darf hier nicht type ref to data sein, sondern in diesem fall am "besten" dann type any (da es jede mögliche Struktur annehmen können muss)Trulchen hat geschrieben: Aber jetzt geht mein Assign nicht mehr weil ein Typ konflikt vor liegt ... obowhl <strucutre> von typ ref to data und is_data auch...
FIELD-SYMBOLS <structure> TYPE ref to data.
DATA: lv_string TYPE string,
lo_event TYPE REF TO cl_fpm_event,
lo_fpm TYPE REF TO if_fpm.
ASSIGN is_data->* TO <structure>.
CREATE OBJECT lo_event
EXPORTING
iv_event_id = 'DIALOG_OK'.
lo_event->mo_event_data->set_value( iv_key = 'STRUCTURE_DIALOG'
iv_value = <structure> ).
lo_fpm = cl_fpm_factory=>get_instance( ).
lo_fpm->raise_event( io_event = lo_event ).
Code: Alles auswählen.
FIELD-SYMBOLS: <structure> TYPE ANY ,
<test> TYPE REF TO data.
BREAK-POINT.
DATA: lv_string TYPE string,
lo_event TYPE REF TO cl_fpm_event,
lo_fpm TYPE REF TO if_fpm.
ASSIGN is_data->* TO <structure>.
ms_structure = <structure>.
Code: Alles auswählen.
METHOD Constructor.
CREATE DATA ms_structure TYPE dyn_datatype.
"Das funktioniert so natürlich nur, wenn dyn_datatype ein echter ddic-Datentyp ist. Wenn dem Constructor hier ein String übergeben wird, in welchem der DDIC_Typ als Text drin steht, muss es glaube ich wie folgt erstellt werden:
CREATE DATA ms_structure TYPE (dyn_datatype_string).
ENDMETHOD.
Code: Alles auswählen.
METHOD jede_methode.
FIELD-SYMBOLS: <fs> TYPE any.
ASSIGN ms_structure->* TO <fs>.
ENDMETHOD.
Code: Alles auswählen.
mt_result = lr_data.
FIELD-SYMBOLS: <data> TYPE ANY TABLE.
FIELD-SYMBOLS: <f_line> TYPE any.
FIELD-SYMBOLS: <fs_value> TYPE any.
DATA data_line TYPE REF TO data.
ASSIGN mt_result->* TO <data>.
CREATE DATA data_line LIKE LINE OF <data>.
ASSIGN data_line->* TO <f_line>.
DATA:
lt_field_cat_attr TYPE REF TO cl_abap_structdescr,
lt_fields TYPE ddfields,
ls_field TYPE dfies,
ls_test TYPE c.
*** Parameterstruktur eingetragen
*** Ermitteln der Komponenten der Parameterliste
lt_field_cat_attr ?= cl_abap_structdescr=>describe_by_data( <f_line> ).
lt_fields = lt_field_cat_attr->get_ddic_field_list( ).
LOOP AT <data> ASSIGNING <f_line> WHERE <f_line>.
LOOP AT lt_fields INTO ls_field.
IF ls_field-fieldname = 'RESPONSIBLE_USER'.
ASSIGN COMPONENT 'RESPONSIBLE_USER' OF STRUCTURE <f_line> TO <fs_value>.
WRITE <fs_value> TO ls_test USING EDIT MASK '==ZUSER'.
<fs_value> = ls_test.
UNASSIGN <fs_value>.
INSERT <f_line> INTO TABLE <data>.
ENDIF.
CLear ls_field.
clear <f_line>.
ENDLOOP.
ENDLOOP.
So geht esa-dead-trousers hat geschrieben:Lass mich raten: Im Ergebnis steht in der Spalte nur ein Zeichen drinnen und die Zeilen werden zweimal angezeigt?
1) Die Variable LS_TEST hat keine Längenangabe somit wird automatisch Länge 1 angenommen.
2) Das INSERT am Ende kannst du dir sparen, da du mit LOOP AT ... ASSIGNING bereits auf die aktuelle Zeile zugreifst.
Code: Alles auswählen.
mt_result = lr_data.
FIELD-SYMBOLS: <data> TYPE ANY TABLE.
FIELD-SYMBOLS: <f_line> TYPE any.
FIELD-SYMBOLS: <fs_value> TYPE zsit_responsible_name.
DATA data_line TYPE REF TO data.
ASSIGN mt_result->* TO <data>.
CREATE DATA data_line LIKE LINE OF <data>.
ASSIGN data_line->* TO <f_line>.
DATA:
lt_field_cat_attr TYPE REF TO cl_abap_structdescr,
lt_fields TYPE ddfields,
ls_field TYPE dfies,
ls_test TYPE zsit_responsible_name.
**** Parameterstruktur eingetragen
**** Ermitteln der Komponenten der Parameterliste
* lt_field_cat_attr ?= cl_abap_structdescr=>describe_by_data( <f_line> ).
* lt_fields = lt_field_cat_attr->get_ddic_field_list( ).
LOOP AT <data> ASSIGNING <f_line>.
Data l_name TYPE zsit_responsible_name.
ASSIGN COMPONENT 'RESPONSIBLE_USER' OF STRUCTURE <f_line> TO <fs_value>.
WRITE <fs_value> TO ls_test USING EDIT MASK '==ZUSER'.
<fs_value> = ls_test.
ENDLOOP.
Code: Alles auswählen.
CALL METHOD lo_event_data->get_value
EXPORTING
iv_key = 'SELECTED_LINE'
IMPORTING
ev_value = <selected_line>.
Code: Alles auswählen.
Move Coresponding <selected line> to variable.
variable = <selected_line>
Entweder hast du dich hier im Forum verschrieben oder die Strukturen sind nicht "kompatibel".Trulchen hat geschrieben:Typ <selected_line> wurde als typ any definiert und zur Laufzeit ist es vom Typ "Z_ST_BE_RESULT" (Struktur)
Diese Selected line will ich nun einer Variable übergebn vom gleichen Typ (ZSIT_ST_BE_REMovSULT).