Header orange

Elementi di sintassi ABAP Object Oriented (OO)

Guida publicata da: Anonymous
Parole chiave: SAP, ABAP, Programmazione Object Oriented, OO, classi, oggetti, sintassi.

Ecco una lista di elementi di codice ABAP utili per la programmazione ABAP OO, nell'ambito di classi, oggetti, webservices e reports Object Oriented.

-Sei uno sviluppatore ABAP? Salva il tuo codice (o la tua guida) su You-Specialist, lo troverai sempre disponibile su internet! Usa questo link, inserisci il codice nel form e noi lo pubblicheremo. Ricorda di dare una breve descrizione sull'utilizzo del codice o sulla sua funzione-

Definizione di un range all'interno di codice OO
La maniera più semplice di definire un range in ambito OO consiste nello sfruttare la tabella e la struttura standard delle select options per definire un range:

DATA: rg_pvcodes_tab TYPE /sappo/tab_rseloption,

      rg_pvcodes_str TYPE /sappo/str_rsdsselopt.

*Passaggio dati da tabella esterna al range
  LOOP AT gt_pvcodes INTO gw_pvcodes.
    CLEAR
rg_pvcodes_str.
    MOVE
gw_pvcodes-sign   TO rg_pvcodes_str-sign.
    MOVE
gw_pvcodes-option TO rg_pvcodes_str-option.
    MOVE
gw_pvcodes-low    TO rg_pvcodes_str-low.
    MOVE
gw_pvcodes-high   TO rg_pvcodes_str-high.
    IF
rg_pvcodes_str IS NOT INITIAL.
      APPEND
rg_pvcodes_str TO rg_pvcodes_tab.
    ENDIF.
  ENDLOOP.


In questo esempio la tabella di partenza (gt_pvcodes) aveva campi di tipo "string", quindi non era possibile usarla in una SELECT come WHERE CONDITION. Passando i suoi dati nella tabella di tipo rg_pvcodes_tab, invece, si otterrà questo risultato.

Definizione di types per strutture e tabelle all'interno di codice OO
Quando si creano metodi ABAP, non è possibile utilizzare l'istruzione ABAP "LIKE" per referenziare le nostre strutture o tabelle ad oggetti già esistenti nel dictionary. E' allora necessario sfruttare le istruzioni "TYPES" per definire dei "tipi" da poter referenziare.

*Definizione del tipo per la struttura
TYPES : BEGIN OF ty_structure,
contractnumber TYPE vbeln,
ordernumber TYPE vbeln.
TYPES : END OF ty_structure.

*Definizione del tipo per la tabella
TYPES : ty_table TYPE TABLE OF ty_structure.

A questo punto i types generati potranno essere usati con la sintassi:
DATA : lw_data_item TYPE ty_structure,
       lt_data_item TYPE ty_table.


Eseguire un metodo ABAP in maniera dinamica (senza conoscere a priori il nome del metodo da lanciare)

TYPE-POOLS abap.
CLASS cl_abap_objectdescr DEFINITION LOAD.

DATA: lf_specific_method TYPE string,
lf_docnum TYPE edi_docnum,
lf_sap_job_id TYPE zsapjobid,
lt_return TYPE bapiret2_tab,
lw_return TYPE bapiret2,
lw_alldata TYPE zinput_row,
lt_alldata TYPE zinput_tab.

DATA: exc_ref TYPE REF TO cx_sy_dyn_call_error,
lf_exception TYPE string.

DATA: ptab TYPE abap_parmbind_tab,
ptab_line TYPE abap_parmbind,
etab TYPE abap_excpbind_tab,
etab_line TYPE abap_excpbind.

*Preparo la tabella contenente i parametri relativi al metodo che verrà chiamato
ptab_line-name = 'I_ALLDATA'.
ptab_line-kind = cl_abap_objectdescr=>exporting.
GET REFERENCE OF lt_alldata INTO ptab_line-value.
INSERT ptab_line INTO TABLE ptab.

ptab_line-name = 'I_SAPJOBID'.
ptab_line-kind = cl_abap_objectdescr=>exporting.
GET REFERENCE OF lf_sap_job_id INTO ptab_line-value.
INSERT ptab_line INTO TABLE ptab.

ptab_line-name = 'E_RETURN'.
ptab_line-kind = cl_abap_objectdescr=>changing.
GET REFERENCE OF lt_return INTO ptab_line-value.
INSERT ptab_line INTO TABLE ptab.

ptab_line-name = 'E_DOCNUM'.
ptab_line-kind = cl_abap_objectdescr=>importing.
GET REFERENCE OF lf_docnum INTO ptab_line-value.
INSERT ptab_line INTO TABLE ptab.

TRY.
CALL METHOD zclassfull=>(lf_specific_method)
PARAMETER-TABLE
ptab.
CATCH cx_sy_dyn_call_error INTO exc_ref.
lf_exception = exc_ref->get_text( ).
ENDTRY.

*I prerequisiti sono: la valorizzazione di lt_alldata e lf_sap_job_id.
*All'uscita dal metodo, troveremo valorizzati lf_docnum e lt_return


-Questo contenuto ti sembra utile? Clicca il pulsante "Mi Piace" qui sotto!-










ADS LINK LARGO 2