Code: Alles auswählen.
loop at lt_fkkdefrev assigning <ls_fkkdefrev>.
clear sy-subrc.
while sy-subrc = 0.
assign component sy-index of structure <ls_fkkdefrev> to field-symbol(<ld_feld>).
check sy-subrc = 0.
gr_descr ?= cl_abap_typedescr=>describe_by_data( p_data = <ld_feld> ).
CASE gr_descr->type_kind.
WHEN 'P'.
field-SYMBOLS <fs> TYPE any.
assign <ld_feld> to <fs> CASTING TYPE C.
<ld_feld> = <fs>.
ENDCASE.
ENDWHILE.
endloop.
Code: Alles auswählen.
FUNCTION Z_UNICODE_TEST.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" EXPORTING
*" REFERENCE(STRING) TYPE ANY
*" CHANGING
*" REFERENCE(RESULT) TYPE ANY
*"----------------------------------------------------------------------
**
DATA: gr_descr TYPE REF TO cl_abap_typedescr.
FIELD-SYMBOLS: <fs_structure> TYPE RESULT.
FIELD-SYMBOLS: <fs_hilf> TYPE RESULT.
ASSIGN STRING to <fs_structure> CASTING.
RESULT = <fs_structure>.
*APPEND STRUKTUR to lt_hilf.
*LOOP at lt_hilf ASSIGNING <fs_hilf>.
* clear sy-subrc.
while sy-subrc = 0.
ASSIGN COMPONENT sy-index of STRUCTURE <fs_structure> to FIELD-SYMBOL(<ld_feld>).
check sy-subrc = 0.
gr_descr ?= cl_abap_typedescr=>describe_by_data( p_data = <ld_feld> ).
case gr_descr->type_kind.
WHEN 'P'.
FIELD-SYMBOLS <fs> TYPE any.
ASSIGN <ld_feld> to <fs> CASTING TYPE C.
<ld_feld> = <fs>.
ENDCASE.
ENDWHILE.
*ENDLOOP.
ENDFUNCTION.
Code: Alles auswählen.
FIELD-SYMBOLS: <fs_structure> TYPE RESULT.
Code: Alles auswählen.
FIELD-SYMBOLS: <fs_structure> LIKE RESULT.
Code: Alles auswählen.
FIELD-SYMBOLS <fs_structure> TYPE RESULT.
FIELD-SYMBOLS <fs_hilf> TYPE RESULT.
Code: Alles auswählen.
FIELD-SYMBOLS: <fs_structure> TYPE RESULT,
<fs_hilf> TYPE RESULT.
Die Zuweisung erfolgt dann typgerecht beim ASSIGNewx hat geschrieben:TYPE ANY
weil man mit einer Klasse einfach ein Demoprogramm schreiben und posten kann. Ein Funktionsbaustein mit Funktionsgruppe und Report ist deutlich umständlicher.DeathAndPain hat geschrieben:Was hat das denn mit der Frage zu tun, ob er einen FB oder eine Klasse nutzt?
Code: Alles auswählen.
...
DATA p_vbak TYPE vbak.
p_vbak-vbeln = '9876543210'.
p_vbak-mandt = sy-mandt.
PERFORM check_cast CHANGING p_vbak.
DATA p_mara TYPE mara.
p_mara-matnr = '012345678901234567'.
p_mara-mandt = sy-mandt.
p_mara-ntgew = '2345.678'.
PERFORM check_cast CHANGING p_mara.
....
FORM check_cast CHANGING p_rec TYPE any.
FIELD-SYMBOLS <any> TYPE any.
FIELD-SYMBOLS <field> TYPE any.
FIELD-SYMBOLS <xany> TYPE x.
FIELD-SYMBOLS <cany> TYPE c.
DATA gr_descr TYPE REF TO cl_abap_typedescr.
DATA dfies TYPE dfies_tab.
ASSIGN p_rec TO <any>.
gr_descr ?= cl_abap_typedescr=>describe_by_data( p_data = <any> ).
WRITE : / gr_descr->absolute_name.
ASSIGN ('<any>-mandt') TO <field>.
IF sy-subrc EQ 0. WRITE : / 'MANDT', <field>. ENDIF.
ASSIGN COMPONENT 'VBELN' OF STRUCTURE <any> TO <field>.
IF sy-subrc EQ 0.
WRITE : / 'Feld VBELN ist enhalten'.
ENDIF.
ASSIGN ('<any>-vbeln') TO <field>.
IF sy-subrc EQ 0. WRITE : / 'VBELN', <field>. ENDIF.
ASSIGN p_rec TO <xany> CASTING.
WRITE : / <xany>.
ASSIGN p_rec TO <cany> CASTING.
WRITE : / <cany>.
ASSIGN COMPONENT 'NTGEW' OF STRUCTURE <any> TO <field>.
IF sy-subrc EQ 0.
WRITE : / 'Feld NTGEW ist enhalten gehen wir mal davon aus - es ist die MARA'.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = 'MARA'
TABLES
dfies_tab = dfies
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.
* Wo steht NTGEW ?
READ TABLE dfies ASSIGNING FIELD-SYMBOL(<dfies>) WITH KEY fieldname = 'NTGEW'.
IF sy-subrc EQ 0.
* Assign mit Namen
ASSIGN ('<any>-ntgew') TO <field>.
IF sy-subrc EQ 0. WRITE : / 'NTGEW', <field>. ENDIF.
* das ist der ganze Satz Hex
ASSIGN p_rec TO <xany> CASTING.
WRITE : / <xany>.
* Jetzt mit offset und Länge das ist ein Packed Decimals als Hex :
ASSIGN <xany>+<dfies>-offset(<dfies>-intlen) TO <field>.
WRITE : / <field>.
* und das ein p mit offset länge und gecastet
ASSIGN <xany>+<dfies>-offset(<dfies>-intlen) TO <field> CASTING TYPE p DECIMALS <dfies>-decimals.
WRITE : / <field>.
ENDIF.
ENDIF.
ASSIGN ('<any>-matnr') TO <field>.
IF sy-subrc EQ 0. WRITE : / 'MATNR', <field>. ENDIF.
ENDFORM.
Er will ja sicherlich kein "Demoprogramm", sondern hat eine produktive Anwendung im Auge. Und einen Funktionsbaustein kann man auch einfach in der SE37 "testen", wenn es nur darum geht.ewx hat geschrieben:weil man mit einer Klasse einfach ein Demoprogramm schreiben und posten kann. Ein Funktionsbaustein mit Funktionsgruppe und Report ist deutlich umständlicher.
na dann viel Spass beim Testen in der SE37 mit einem 'ANY' Parameter.DeathAndPain hat geschrieben:Und einen Funktionsbaustein kann man auch einfach in der SE37 "testen", wenn es nur darum geht.