User Tools

Site Tools


abap:dynamic_programming

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
abap:dynamic_programming [2014/12/15 19:47] ginkoabap:dynamic_programming [2017/08/01 17:04] ginko
Line 3: Line 3:
  
 ===== Les field-symbols ===== ===== Les field-symbols =====
 +//Note : les field-symbols ont été en grande partie remplacés par les références (les fs sont la précédente génération). Une référence permet de faire tout ce que fait un fs et d'autres choses encore.//
 +
 L'élément central de la programmation dynamique : les field-symbols. L'élément central de la programmation dynamique : les field-symbols.
  
Line 15: Line 17:
 ASSIGN (ls_plop) TO <fs1>. "Content of var. ie. if ls_foo-bar = '1234' ; ls_plop = 'ls_foo-bar' then <fs1> = '1234'. ASSIGN (ls_plop) TO <fs1>. "Content of var. ie. if ls_foo-bar = '1234' ; ls_plop = 'ls_foo-bar' then <fs1> = '1234'.
 ASSIGN et_plip[] TO <et_plip>[]. "Table content</code> ASSIGN et_plip[] TO <et_plip>[]. "Table content</code>
 +===== Références =====
 +==== Déclaration ====
 +<code abap>DATA wldv_val TYPE REF TO i. "Déclaration typée
 +DATA wldv_val TYPE REF TO data. "Sans type
 +DATA wldv_val TYPE REF TO cl_gui_alv_grid. "Type objet</code>
 +==== Référencement/déréférencement ====
 +<code abap>GET REFERENCE OF wlv_val INTO wldv_val. "Référencement
 +wldv_val->* = wlv_val2. "Déréférencement</code>
 ===== Typage dynamique ===== ===== Typage dynamique =====
 Au delà de l'assignation de field-symbols depuis des sources instanciées et typées (même si le type peut ne pas être connu à l'avance), il faut aussi parfois pouvoir manipuler des données qui vont être crées lors de l'exécution et dont le type est inconnu à l'avance. Pour cela il va falloir recourir à des commandes particulières et à des fonctions qui vont puiser des informations directement auprès du kernel (autrefois des FM ALV, aujourd'hui des classes dédiées). Au delà de l'assignation de field-symbols depuis des sources instanciées et typées (même si le type peut ne pas être connu à l'avance), il faut aussi parfois pouvoir manipuler des données qui vont être crées lors de l'exécution et dont le type est inconnu à l'avance. Pour cela il va falloir recourir à des commandes particulières et à des fonctions qui vont puiser des informations directement auprès du kernel (autrefois des FM ALV, aujourd'hui des classes dédiées).
Line 53: Line 63:
  
 __NB2__ : Si la classe ''cl_abap_typedescr'' n'est pas dispo, zieuter vers ''GET_COMPONENT_LIST'' et ''GET_GLOBAL_SYMBOLS''. __NB2__ : Si la classe ''cl_abap_typedescr'' n'est pas dispo, zieuter vers ''GET_COMPONENT_LIST'' et ''GET_GLOBAL_SYMBOLS''.
 +
 +==== Créer une itab ex nihilo ====
 +
 +[[https://wiki.scn.sap.com/wiki/display/Snippets/Steps+to+Create+Type+Dynamically|Sauce]]
 +<code abap>    METHOD create_data.
 +        DATA:
 +          lo_structdescr         TYPE REF TO cl_abap_structdescr,
 +          lo_typedescr           TYPE REF TO cl_abap_typedescr,
 +          lo_tabledescr          TYPE REF TO cl_abap_tabledescr,
 +          lt_lvc_scol            TYPE lvc_t_scol,
 +          lt_lvc_styl            TYPE lvc_t_styl,
 +          lt_comp_all            TYPE cl_abap_structdescr=>component_table.
 +        FIELD-SYMBOLS:
 +          <component>            TYPE LINE OF abap_component_tab.
 +     
 +        APPEND INITIAL LINE TO lt_comp_all ASSIGNING <component>.
 +        <component>-type ?= cl_abap_datadescr=>describe_by_data( lt_lvc_styl ).
 +        <component>-name = lc_fieldname_t_styl.
 +     
 +        APPEND INITIAL LINE TO lt_comp_all ASSIGNING <component>.
 +        <component>-type ?= cl_abap_datadescr=>describe_by_data( lt_lvc_scol ).
 +        <component>-name = lc_fieldname_t_color.
 +     
 +    * create structure description
 +        lo_structdescr = cl_abap_structdescr=>create( lt_comp_all ).
 +     
 +    * create table description for structure
 +        lo_tabledescr = cl_abap_tabledescr=>create(
 +                        p_line_type  = lo_structdescr
 +                        p_table_kind = cl_abap_tabledescr=>tablekind_std
 +                        p_unique     = abap_false ).
 +     
 +    * create data object
 +        CREATE DATA rr_dispodata TYPE HANDLE lo_tabledescr.
 +     
 +      ENDMETHOD.</code>
 +
 ===== Exemples ===== ===== Exemples =====
 ==== Select dans table dynamique ==== ==== Select dans table dynamique ====
 [[http://wiki.scn.sap.com/wiki/display/ABAP/Dynamic+Internal+table?original_fqdn=wiki.sdn.sap.com]] [[http://wiki.scn.sap.com/wiki/display/ABAP/Dynamic+Internal+table?original_fqdn=wiki.sdn.sap.com]]
abap/dynamic_programming.txt · Last modified: 2017/08/01 17:31 by ginko