Cerca nel blog

martedì 29 dicembre 2015

ABAP - Aggiungere Codice Transazione alla lista dei Preferiti mediante FM

Aggiungere Codice Transazione alla lista dei Preferiti mediante FM

Per aggiungere alla lista dei preferitii codici transazione più usati, richiamare la transazione SE37 ed in particolare il FM GUI_ADD_TCODE_TO_FAVORITES. 


Premere F8, ed aggiungiamo la transazione SE93.


Premere F8, ed andare successivamente nella schermata iniziale di SAP, dove sarà visualizzata la transazione SE93.



Programma: Ottenere F4 help di un campo in base al valore di un altro campo

Ottenere F4 help di un campo in base al valore di un altro campo 

Questo programma mostra come accedere o aggiornare il valore di un campo nel caso in cui si prema F4 help da un altro campo.
In questo programma, che ha 2 campi nella schemrata di selezione, si considerano due SCENARI.
SCENARIO 1: Si inserisce un valore nel campo SOCIETA' e premendo F4 help nel campo Org. Commerciale vengono visualizzati i valori possibili dell'Organizzazione Commerciale associati alla società selezionata precedentemente, e settato il valore nel campo Organizzazione Commerciale mediante il FM : F4IF_INT_TABLE_VALUE_REQUEST
SCENARIO 1: Se nel campo società è presente un valore, e premendo F4 help nel campo Org. Commerciale che visualizza  anche un valore diverso  della sosietà, viene settato questo nuovo valore nel campo società mediante il FM DYNP_VALUES_UPDATE.

*&---------------------------------------------------------------------*
*& Report  Z_VALUES_F4HELP_CHANGE
*&---------------------------------------------------------------------*

REPORT z_values_f4help_change.

DATA: BEGIN OF gt_vkorg OCCURS 0, "f4 values for user
        bukrs LIKE tvko-bukrs,
        vkorg LIKE tvko-vkorg,
      END OF gt_vkorg.

PARAMETERS: p_bukrs TYPE tvko-bukrs, "Società
            p_vkorg TYPE tvko-vkorg. "Org. commerciale


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vkorg.
  PERFORM get_sales.

START-OF-SELECTION.

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  GET_SALES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_sales.
* DATO CHE IN QUESTO EVENTO, IL CAMPO p_bukrs
* NON E' ACCESSIBILE, QUINDI ANCHE SE VALORIZZATO
* NON SI RIESCE A VEDERE IL SUO VALORE, PER OVVIARE
* A QUESTO PROBLEMA E' NECESSARIO USARE IL FM
* DYNP_VALUES_READ.

  DATA: lt_dynpfields       TYPE STANDARD TABLE OF dynpread,
        ls_dynpfields       TYPE                   dynpread,
        lt_return           TYPE STANDARD TABLE OF ddshretval,
        ls_return           TYPE                   ddshretval,
        lt_where_tab(50)    TYPE                   c OCCURS 1 WITH HEADER LINE,
        ls_where_clause(50) TYPE                   c,
        gs_vkorg            LIKE LINE OF           gt_vkorg.

  CLEAR: gt_vkorg, lt_dynpfields,
         ls_dynpfields, lt_return,
         ls_return, lt_where_tab,
         ls_where_clause, gs_vkorg.
  REFRESH: gt_vkorg, lt_dynpfields,
           lt_return, lt_where_tab.

  ls_dynpfields-fieldname = 'P_BUKRS'.
  APPEND ls_dynpfields TO lt_dynpfields.

  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname               = sy-repid
      dynumb               = sy-dynnr
    TABLES
      dynpfields           = lt_dynpfields
    EXCEPTIONS
      invalid_abapworkarea = 1
      invalid_dynprofield  = 2
      invalid_dynproname   = 3
      invalid_dynpronummer = 4
      invalid_request      = 5
      no_fielddescription  = 6
      invalid_parameter    = 7
      undefind_error       = 8
      double_conversion    = 9
      stepl_not_found      = 10
      OTHERS               = 11.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

  CLEAR: ls_dynpfields.
  READ TABLE lt_dynpfields
        INTO ls_dynpfields
        WITH KEY fieldname = 'P_BUKRS'.
  IF sy-subrc = 0.
    p_bukrs = ls_dynpfields-fieldvalue.
  ENDIF.

* Creo la WHERE DINAMICA
* Se la SOCIETA' E' VALORIZZATA, VISUALIZZO L'ORGANIZZAZIONE
* COMMERCIALE ASSOCIATA, ALTRIMENTI VISUALIZZO TUTTE LE ORGANIZZAZIONI
  IF p_bukrs IS NOT INITIAL.
    CONCATENATE ' bukrs EQ  ' '''' p_bukrs '''' INTO ls_where_clause.
  ELSE.
    CONCATENATE ' bukrs NE  ' ''''  '''' INTO ls_where_clause.
  ENDIF.

  APPEND ls_where_clause TO lt_where_tab.

  SELECT bukrs vkorg
    FROM tvko
    INTO TABLE gt_vkorg
    WHERE (lt_where_tab).


  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'VKORG'
      window_title    = 'Codice Org. commerciale'
      value_org       = 'S'
    TABLES
      value_tab       = gt_vkorg
      return_tab      = lt_return
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  .
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ELSE.
    CLEAR: ls_return.
    READ TABLE lt_return
          INTO ls_return INDEX 1.

    p_vkorg = ls_return-fieldval.
* SE LA SOCIETA' NON E' VALORIZZATA, E L'ORGANIZZAZIONE E'
* VALORIZZATA, SETTO IL VALORE LETTO ANCHE PER LA SOCIETA'
    IF p_bukrs IS INITIAL AND
       p_vkorg IS NOT INITIAL.

      READ TABLE gt_vkorg INTO gs_vkorg
      WITH KEY vkorg = p_vkorg.

      IF sy-subrc = 0.
        p_bukrs = gs_vkorg-bukrs.

* PER VISUALIZZARE SULLA DYNPRO IL CAMPO BUKRS
* USARE IL FM DYNP_VALUES_UPDATE

        CLEAR: ls_dynpfields, lt_dynpfields.
        REFRESH: lt_dynpfields.

        ls_dynpfields-fieldname = 'P_BUKRS'.
        ls_dynpfields-fieldvalue = p_bukrs.
        APPEND ls_dynpfields TO lt_dynpfields.

        CALL FUNCTION 'DYNP_VALUES_UPDATE'
          EXPORTING
            dyname               = sy-repid
            dynumb               = sy-dynnr
          TABLES
            dynpfields           = lt_dynpfields
          EXCEPTIONS
            invalid_abapworkarea = 1
            invalid_dynprofield  = 2
            invalid_dynproname   = 3
            invalid_dynpronummer = 4
            invalid_request      = 5
            no_fielddescription  = 6
            undefind_error       = 7
            OTHERS               = 8.

        IF sy-subrc <> 0.
* Implement suitable error handling here
        ENDIF.

      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    " GET_SALES



mercoledì 23 dicembre 2015

Programma: Visualizzare Dinamicamente i dati delle Tabelle Standard usando i concetti dei Field Symbols.

Visualizzare Dinamicamente i dati delle Tabelle Standard usando i concetti dei Field Symbols.

Come parametri di selezione, inseriamo il nome della tabella da visualizzare e il numero di record da visualizzare.
Dichiariamo un Field Symbols di tipo Tabella Standard.
Creiamo una tabella interna che a Run Time, viene popolata con i dati selezionati dalla tabella inserita come parametro di input.
Successivamente viene creato un Field Catalog per visualizzare i Dati.

*&---------------------------------------------------------------------*
*& Report  Z_VIEW_TABLE_DINAMIC
*&---------------------------------------------------------------------*

REPORT z_view_table_dinamic NO STANDARD PAGE HEADING.

TYPE-POOLS : slis.

*"Parameters elements..................................................
PARAMETERS : p_table TYPE tabname OBLIGATORY,       " Table Name
             p_no    TYPE i .                       " No of Records to be displayed

DATA:
  w_dref TYPE REF TO data,          " w_dref reference variable
  t_line TYPE        c LENGTH 20.          " w_line to hold a line

DATA :
  t_fcat TYPE slis_t_fieldcat_alv.

FIELD-SYMBOLS: <t_itab> TYPE STANDARD TABLE.

START-OF-SELECTION.
  SELECT SINGLE
         tabname                       " Table Name
    FROM dd02l
    INTO t_line
   WHERE tabname   EQ p_table
     AND as4vers   EQ ' '
     AND as4local  EQ 'A'
     AND tabclass  NE 'INTTAB'
     AND tabclass  NE 'APPEND'.

  IF sy-subrc EQ 0.
    CREATE DATA w_dref TYPE STANDARD TABLE OF (p_table).
    ASSIGN w_dref->* TO <t_itab>.
    IF sy-subrc EQ 0.
      SELECT *                         " All Fields
        FROM (p_table)
        INTO TABLE <t_itab> UP TO p_no ROWS.

      IF sy-subrc EQ 0.
        PERFORM fill_catalog.
        PERFORM display.
      ELSE.
        MESSAGE sy-msgv1 TYPE 'S'.
        EXIT.
      ENDIF.
    ELSE.
      MESSAGE sy-msgv1 TYPE 'S'.
      EXIT.
    ENDIF.
  ELSE.
    MESSAGE sy-msgv1 TYPE 'S'.
    LEAVE LIST-PROCESSING.
  ENDIF.

FORM display .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      it_fieldcat   = t_fcat
    TABLES
      t_outtab      = <t_itab>
    EXCEPTIONS
      program_error = 1
      OTHERS        = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    EXIT.
  ENDIF.
ENDFORM. " DISPLAY

FORM fill_catalog .
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name         = sy-repid
      i_structure_name       = p_table
    CHANGING
      ct_fieldcat            = t_fcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    EXIT.
  ENDIF.
ENDFORM. " FILL_CATALOG 



ABAP - ATC: ABAP Test Cockpit

ATC - ABAP Test Cockpit

Questo è un nuovo strumento di SAP per il controllo di qualità dei programmi ABAP.
ATC è disponibile da EhP2 per SAP NetWeaver 7 patch 12. 
L'ABAP Test Cockpit è direttamente integrato nel workbench ABAP e consente la verifica del codice nell'ambiente di sviluppo.

Esempio semplice di uso dell'ATC 

Consideriamo un programma custom, ed apriamolo dalla transazione SE38.


Ora facciamo l'ATC per questo programma, quindi dal menu selezioniamo Programs->Check->ABAP Test Cockpit
Si otterrebbe la seguente schermata:


Come si può osservare, l'ATC elenca in questo caso 3 errori di priorità 2 e 3 che dovrebbero essere corretti. 
Per maggiori dettagli riguardanti l'errore, fare doppio clic sul messaggio di errore per visualizzare i dettagli.


Esempio di uso dell'ATC per un controllo multiplo dei programmi

Richiamiamo la transazione SE80 e inseriamo il nostro pacchetto che ha alcuni programmi custom. In questo caso selezioniamo il pacchetto ZFLOTTA.
Facciamo doppio clic su uno dei nomi di programma, che verrà visualizzato sul lato destro.


Selezionare dal Menu Programs->Check->ABAP Test Cockpit with...   


Si ottiene la seguente schermata:


Ora aggiungiamo un altro programma alla lista, quindi dalla menu ad albero di sinistra selezionare il nome di un altro programma (in questo caso ZF15_AA_FB01), drag and drop (trascinarlo e rilasciarlo) sul lato destro:


Premendo il pulsante Execute Checks, si ottiene un rapporto che mostra il nome dell'errore e il programma a cui appartiene. 


Ora torniamo alla schermata precedente,  selezioniamo il check box "Report Findings Exempted in Code by Pragma or Pseudo Comment". Premiamo di nuovo il pulsante Execute Checks.


Si ottiene il seguente rapporto, dove possiamo osservare che sono stati aggiunti altri errori alla lista .


Per una statistica degli errori, premere il pulsante Statistics View.
Gli errori saranno visualizzati nel seguente modo:

Per tornare alla schermata precedente, premere sul pulsante "X" evidenziato.

IMPOSTAZIONI (SETTINGS) dell'ATC 

Le impostazioni di base che si dovrebbero fare per la configurazione ABAP Test Cockpit son o le seguenti:
Richiamare la transazione ATC, dal menu ad albero selezionare ATC Administration -> Setup -> Configure ATC.



Fare doppio click su "Configure ATC" e succesivamente premere il pulsante di Modifica.
Selezionare il Flag "Yes" per "Do you Want to Enable ATC Exemptions in the System?", il flag "For Any Results" per "For Which Kind of Results?", "Inform on errors (priority 1 and 2) per "Behavior on Release". Premere il pulsante di Salvataggio.

 
Un altro settaggio è il seguente, dal menu ad albero selezionare ATC Administration -> Exemptions -> Maintain Approvers (Mantenere approvazioni per esenzioni). 
Qui, si setta l'elenco dei revisori che sono autorizzati ad approvare l'ATC.

Fare doppio click su "Maintain Approvers".
Quando si esegue questa operazione, si ottiene il messaggio "L'elenco dei revisori può essere mantenuta solo nel sistema master". Dobbiamo mantenere il Sistema Master nella prima impostazione "Configura ATC".


Selezioniamo di nuovo l'impostazione "Configura ATC" per mantenere il sistema master. E settiamo il sistema locale (EH7 è l'id sistema di login).
 
Selezioniamo di nuovo l'impostazione "Maintain Approvers" ed inserire l'utenza dei revisori.

Queste sono le impostazioni minime che devono essere settate per ATC.