Creazione classe globale per scrittura di un file di log
Creiamo
la Classe Globale ZSAPCC_BATCHLOG
Richiamiamo
la transazione SE80, selezioniamo Repository Browser, dal menu a tendina
selezioniamo “Classe/Interface” ed
inseriamo il nome della classe in questo caso ZSAPCC_BATCHLOG e premiamo INVIO.
Nella
popup successiva, selezioniamo “Classe” e premiamo OK.
Nella
popup successiva, inseriamo la descrizione “Classe Globale gestione Log di
elaborazione”, selezioniamo “Creaz.Istanze” = Pubblico
Premere
il pulsante “SALVARE.
Dal
menu di sx, fare doppio click sulla classe creata, poi selezionare il tab “Attributi”
per definire gli attributi usati dalla classe.
Selezioniamo
il tab “Metodi” per definire i metodi dalla
classe
Per
creare il metodo “Costructor” premere il pulsante “Costruttore”.
In
questo caso non definiamo né parametri né
codice sorgente.
Creiamo
il metodo DESTRUCTOR, senza premere pulsanti.
Creiamo
il metodo WRITE, che serve per scrivere le singole righe nel file di LOG.
Per
questo metodo, specifichiamo anche dei parametri, quindi premiamo il pulsante
PARAMETRI.
Successivamente,
premere il pulsante “Testo Sorgente” ed inserire il seguente codice:
METHOD write.
* Ogni chiamata al metodo Write() genera una riga
* nel file di log che ha come prefisso data (YYYYMMDDHHMMSS).
* I metodi Begin() e End() richiamano a loro volta il metodo Write()
* per scrivere sul file di log.
*Il metodo Write() accetta in input, oltre al messaggio,
*la tipologia di evento tra Information, Warning ed Error.
DATA: v_riga TYPE string.
IF type = 'W' AND v_type = 'I'.
v_type = type.
ENDIF.
IF type = 'E'.
v_type = type.
ENDIF.
IF type NA v_msgty.
CONCATENATE type v_msgty INTO v_msgty.
ENDIF.
OPEN DATASET v_file FOR APPENDING IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc = 0.
*concateno il tipo messaggio e il testo dell'informazione sul file LOG.
CONCATENATE type data ora text INTO v_riga SEPARATED BY space.
TRANSFER v_riga TO v_file.
* commit work.
CLOSE DATASET v_file.
ELSE.
MESSAGE s368(00) WITH 'FILE DOES NOT EXIST'.
ENDIF.
ENDMETHOD.
Creiamo
il metodo LOGICAL_FILE, che serve per ricavare il nome del file logico.
Per
questo metodo, specifichiamo anche dei parametri, quindi premiamo il pulsante
PARAMETRI.
Successivamente,
premere il pulsante “Testo Sorgente” ed inserire il seguente codice:
METHOD logical_file.
DATA: path_a TYPE string,
v_file_fx TYPE filename-fileintern.
v_file_1 = 'ZFILELOG'.
MOVE v_file_1 TO v_file_fx.
CALL FUNCTION 'FILE_GET_NAME'
EXPORTING
* CLIENT = SY-MANDT
logical_filename = v_file_fx
* OPERATING_SYSTEM = SY-OPSYS
parameter_1 = sy-host
parameter_2 = ambito
* PARAMETER_3 = ' '
* USE_PRESENTATION_SERVER = ' '
* WITH_FILE_EXTENSION = ' '
* USE_BUFFER = ' '
* ELEMINATE_BLANKS = 'X'
IMPORTING
* EMERGENCY_FLAG =
* FILE_FORMAT =
file_name = path
* EXCEPTIONS
* FILE_NOT_FOUND = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION '/SAPDMC/LSM_PATH_FILE_SPLIT'
EXPORTING
pathfile = path
IMPORTING
pathname = path_a
filename = nome_filelog.
path = path_a.
ENDMETHOD.
Creiamo
il metodo BEGIN, che serve per creare il file di log.
Per
questo metodo, specifichiamo anche dei parametri, quindi premiamo il pulsante
PARAMETRI.
Successivamente,
premere il pulsante “Testo Sorgente” ed inserire il seguente codice:
METHOD begin.
*Ogni chiamata al metodo Begin() genera un nuovo file nel formato nome programma + idexecution + data (YYYYMMDDHHMMSS).
DATA: v_nomeprog LIKE sy-repid,
v_nomejob TYPE tbtcjob-jobname,
t_job TYPE STANDARD TABLE OF tbtcjob INITIAL SIZE 1,
t_job1 TYPE tbtcjob,
path TYPE string,
nome_file TYPE string.
*****************Inizio del programma********************************
*1. ricavo le informazioni che mi servono per costruire il nome file.
v_nomeprog = sy-cprog.
IF sy-batch = 'X'.
CALL FUNCTION 'BP_FIND_JOBS_WITH_PROGRAM'
EXPORTING
abap_program_name = v_nomeprog
TABLES
joblist = t_job
EXCEPTIONS
no_jobs_found = 1
program_specification_missing = 2
invalid_dialog_type = 3
job_find_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
* Inserimento gestione errore chiamata function -> Inizio 06/03/2016
WRITE : / 'METHOD begin'.
WRITE : / 'Errore su chiamata BP_FIND_JOBS_WITH_PROGRAM: ', sy-subrc.
WRITE : / 'Parametro abap_program_name: ', v_nomeprog.
* Inserimento gestione errore chiamata function -> Fine 06/03/2016
ENDIF.
LOOP AT t_job INTO t_job1.
IF sy-subrc = 0 AND sy-tabix = 1.
MOVE t_job1-jobcount TO v_nomejob.
ELSE.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
*Concateno il nome del file.
*nome programma + idexecution + data (YYYYMMDDHHMMSS).
IF v_nomejob = ' '.
MOVE '' TO v_nomejob.
ENDIF.
*Ricavo il nome del file logico:
CALL METHOD me->logical_file
EXPORTING
v_file = v_file_1
ambito = ambito
IMPORTING
path = path
nome_filelog = nome_file.
CONCATENATE path v_nomeprog v_nomejob sy-datum sy-uzeit '.log' INTO v_file.
OPEN DATASET v_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc = 0.
COMMIT WORK.
*Close Dataset.
CLOSE DATASET v_file.
COMMIT WORK.
v_text = 'Creazione file di log' .
v_type = 'I'.
CALL METHOD me->write
EXPORTING
type = v_type
text = v_text
v_file = v_file
data = sy-datum
ora = sy-uzeit.
ENDIF.
ENDMETHOD.
Creiamo
il metodo END, che serve per chiudere il file di log.
Per
questo metodo, specifichiamo anche dei parametri, quindi premiamo il pulsante
PARAMETRI.
Successivamente,
premere il pulsante “Testo Sorgente” ed inserire il seguente codice:
METHOD end.
*Scrittura ultimo record del file.
CALL METHOD me->write
EXPORTING
type = 'I' "v_evento
text = v_text
v_file = v_file
data = sy-datum
ora = sy-uzeit.
CALL METHOD me->write
EXPORTING
type = 'I' "v_evento
text = 'Messaggio generato automaticamente dalla procedura ZSAPCC_BATCHLOG.'
v_file = v_file
data = sy-datum
ora = sy-uzeit.
* segnalazione di termine elaborazione (Tracker 10324)
ULINE.
WRITE : / 'Esecuzione terminata. Log disponibile in ',
v_file.
ULINE.
ENDMETHOD.
IMPORTANTE: inserire il nome logico del file (ZFILELOG)che abbiamo inserito nel metodo LOGICAL_FILE, all’interno
della tabella PATH (Defin. dei
percorsi file fisici in base alla sintassi) Per inserire il record, richiamare
la transazione FILE
Premere
il pulsante “Nuovi Inserimenti”, inserire il percorso logico ZFILELOG e la descrizione e premere
INVIO. Selezionarlo e premere sulla cartella a sx “Attribuzione percorso logico”,
premere il pulsante “Nuovi Inserimenti”
Inserire
i seguenti valori e premere invio
IMPORTANTE: inserire il nome logico del file (ZFILELOG)che abbiamo inserito nel metodo LOGICAL_FILE, all’interno
della tabella FILENAMECI (Nomi file
indipend. dalla piattaf. e validi in tutti i mand.) Per inserire il record
usare SM30 e utilizzare la view V_FILENACI
Creare
il seguente programma custom ZPROVA_LOG testare la classe globale ZSAPCC_BATCHLOG
creata.
REPORT zprova_log.
DATA: v_zsapcc_batchlog1 TYPE REF TO zsapcc_batchlog,
v_file TYPE string VALUE 'ZINTERLOG'.
CONSTANTS: c_ambito TYPE char20 VALUE 'CCI'. "comunicazione internet
START-OF-SELECTION.
PERFORM begin_log.
PERFORM write_log USING 'I' 'Inizio Programma'.
PERFORM close_log.
FORM begin_log .
* definizione del file LOGICO in cui scrivere il log e della classe
* che gestisce lo stesso
CREATE OBJECT v_zsapcc_batchlog1.
* creazione e apertura del file di log
CALL METHOD v_zsapcc_batchlog1->begin
EXPORTING
ambito = c_ambito
IMPORTING
v_file = v_file
CHANGING
v_file_1 = v_file.
ENDFORM.
FORM write_log USING type testo.
GET TIME.
CALL METHOD v_zsapcc_batchlog1->write
EXPORTING
type = type
text = testo
v_file = v_file
data = sy-datum
ora = sy-uzeit.
ENDFORM. " WRITE_LOG
FORM close_log .
DATA: lv_testo TYPE string.
lv_testo = 'Fine elaborazione'.
GET TIME.
CALL METHOD v_zsapcc_batchlog1->end
EXPORTING
v_file = v_file
ambito = c_ambito
v_text = lv_testo.
ENDFORM. " CLOSE_LOG
SE MI CONTATTATE IN PRIVATO, PAGATE LA META' DEL PREZZO DI AMAZON, E POTETE SCEGLIERE IL FORMATO WORD o PDF.
>>> RECENSIONI DEI LIBRI su Amazon Kindle <<<