Header orange

Funzioni utili ABAP

Guida publicata da: Anonymous
Parole chiave: SAP, ABAP, funzioni utili, Function Module.

Ecco una lista di funzioni ABAP utili, assieme ai parametri di input e di output necessari per il loro utilizzo!

-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-

Ricostruzione del testo di un messaggio contenuto in SE91

DATA: msg_log_imp LIKE msg_log,
msg_text_exp LIKE msg_text.

msg_log_imp-msgid = lw_msgid.
msg_log_imp-msgno = lw_msgno.
msg_log_imp-msgty = lw_msgty.
msg_log_imp-msgv1 = lw_msgv1.
msg_log_imp-msgv2 = lw_msgv2.
msg_log_imp-msgv3 = lw_msgv3.
msg_log_imp-msgv4 = lw_msgv4.

CALL FUNCTION 'MESSAGE_TEXTS_READ'
EXPORTING
msg_log_imp = msg_log_imp
IMPORTING
msg_text_exp = msg_text_exp
EXCEPTIONS
OTHERS = 1.


Inserire un messaggio nella BAPIRETURN table

DATA: lt_return TYPE STANDARD TABLE OF bapiret2,
lw_return TYPE bapiret2.

IF 1 = 2. MESSAGE s005(ysd). ENDIF.
CALL FUNCTION 'BALW_BAPIRETURN_GET2'
EXPORTING
type = 'S'
cl = 'YSD'
number = '005'
IMPORTING
return = lw_return.
APPEND lw_return TO lt_return.


Verificare se una variabile di tipo STRING contenga solamente un valore numerico

DATA: lf_string TYPE string,
lf_htype(4) TYPE c.

CALL FUNCTION 'NUMERIC_CHECK'
EXPORTING
string_in = lf_string
IMPORTING
htype = lf_htype.
IF lf_htype NE 'NUMC'.
"errore
EXIT.
ENDIF.

Grazie a Flavio "Fourlogs" per questa segnalazione.

Creazione di un search-help a codice ABAP, con dati provenienti da tabella interna

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_rcvrbs.
PERFORM get_services.

TYPES: BEGIN OF t_servicename,
service TYPE ssrvservice-service,
END OF t_servicename.

DATA: lt_services TYPE ssrv_servicet,
lw_services TYPE LINE OF ssrv_servicet,
lt_servicename TYPE TABLE OF t_servicename,
lw_servicename TYPE t_servicename.

REFRESH: lt_services, lt_servicename.

* Get values for F4 help Channel
CALL FUNCTION 'ZGET_SSRVSERVICE'
CHANGING
t_data = lt_services.

LOOP AT lt_services INTO lw_services.
MOVE lw_services-service TO lw_servicename-service.
APPEND lw_servicename TO lt_servicename.
ENDLOOP.

SORT lt_servicename.
DELETE ADJACENT DUPLICATES FROM lt_servicename.

* Fill itab for F4
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'SERVICES'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_RCVRBS'
value_org = 'S'
TABLES
value_tab = lt_servicename.


Comparazione di due record provenienti da una stessa tabella di dictionary

DATA: BEGIN OF lt_difftab OCCURS 0.
INCLUDE STRUCTURE dfies.
DATA: END OF lt_difftab.
DATA: BEGIN OF lw_new1.
INCLUDE STRUCTURE ZDICTIONARYTABLE.
DATA: END OF lw_new1.
DATA: BEGIN OF lw_old1.
INCLUDE STRUCTURE ZDICTIONARYTABLE.
DATA: END OF lw_old1.

FIELD-SYMBOLS: TYPE ANY,
TYPE ANY.

DATA: lf_length TYPE i,
lf_type,
lf_charout(241).

REFRESH: lt_difftab.
CALL FUNCTION 'CSGU_RECORDS_COMPARE'
EXPORTING
new_record = lw_new1
old_record = lw_old1
tabname = 'ZDICTIONARYTABLE'
TABLES
changed_fields = lt_difftab
EXCEPTIONS
no_change = 1
OTHERS = 2.

LOOP AT lt_difftab.
MOVE lt_difftab-fieldname TO lt_report-fieldname.
MOVE lt_difftab-fieldtext TO lt_report-fielddescr.

ASSIGN COMPONENT lt_difftab-position OF STRUCTURE lw_new1 TO .
CLEAR: lf_length, lf_type, lf_charout.
DESCRIBE FIELD : OUTPUT-LENGTH lf_length TYPE lf_type.
CASE lf_type.
WHEN 'C' OR 'N' OR 'D' OR 'T'.
MOVE TO lt_report-value_new.
WHEN OTHERS.
WRITE TO lf_charout(lf_length) NO-GROUPING.
MOVE lf_charout(lf_length) TO lt_report-value_new.
ENDCASE.

ASSIGN COMPONENT lt_difftab-position OF STRUCTURE lw_old1 TO .
CLEAR: lf_length, lf_type, lf_charout.
DESCRIBE FIELD : OUTPUT-LENGTH lf_length TYPE lf_type.
CASE lf_type.
WHEN 'C' OR 'N' OR 'D' OR 'T'.
MOVE TO lt_report-value_old.
WHEN OTHERS.
WRITE TO lf_charout(lf_length) NO-GROUPING.
MOVE lf_charout(lf_length) TO lt_report-value_old.
ENDCASE.
APPEND lt_report.
CLEAR lt_report.
ENDLOOP.


Salvataggio del contenuto di una tabella interna (gt_record) su file excel nel PC locale

DATA: lf_filename TYPE string.
DATA : BEGIN OF lt_head OCCURS 0, "Tab con intestazione campi in file xls
filed1(20) TYPE c,
END OF lt_head.

lt_head-filed1 = 'CID'.
APPEND lt_head.
CLEAR lt_head.

lt_head-filed1 = 'FIRST NAME'.
APPEND lt_head.
CLEAR lt_head.

lt_head-filed1 = 'LAST NAME'.
APPEND lt_head.
CLEAR lt_head.

CONCATENATE p_folder '\Employee_Data_' p_datum '.xls' INTO lf_filename.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lf_filename
filetype = 'DAT'
write_field_separator = 'X'
TABLES
data_tab = gt_report
fieldnames = lt_head
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.

IF sy-subrc <> 0.
MOVE sy-msgid TO lw_error-msgid.
MOVE sy-msgty TO lw_error-msgty.
MOVE sy-msgno TO lw_error-msgno.
MOVE sy-msgv1 TO lw_error-msgv1.
MOVE sy-msgv2 TO lw_error-msgv2.
MOVE sy-msgv3 TO lw_error-msgv3.
MOVE sy-msgv4 TO lw_error-msgv4.
ENDIF.


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




Funzioni utili per gestione IDOCs

FORM get_idoc_data .

DATA: gw_edidd TYPE edidd,
gw_edidc TYPE edidc,
gw_i_edidc TYPE edidc.

*LETTURA EDIDC
CALL FUNCTION 'EDI_DOCUMENT_OPEN_FOR_PROCESS'
EXPORTING
document_number = gw_i_edidc-docnum
IMPORTING
idoc_control = gw_edidc
EXCEPTIONS
document_foreign_lock = 1
document_not_exist = 2
document_number_invalid = 3
document_is_already_open = 4
OTHERS = 5.

IF sy-subrc <> 0.
EXIT.
ENDIF.

REFRESH gt_edidd.

*LETTURA EDIDD

CALL FUNCTION 'EDI_SEGMENTS_GET_ALL'
EXPORTING
document_number = gw_i_edidc-docnum
TABLES
idoc_containers = gt_edidd
EXCEPTIONS
document_number_invalid = 1
end_of_document = 2
OTHERS = 3.

IF sy-subrc <> 0.
EXIT.
ENDIF.
ENDFORM. " get_idoc_data


*VISUALIZZAZIONE DI UN IDOC, ANALOGA A WE05

DATA: lf_docnum TYPE edi_docnum.

CALL FUNCTION 'EDI_DOCUMENT_TREE_DISPLAY'
EXPORTING
docnum = lf_docnum
EXCEPTIONS
no_idoc_found = 1
OTHERS = 2.


Funzioni utili per gestione CHANGE POINTERS

*ELABORAZIONE DEI CHANGE POINTERS a partire dai CPIDENT
*Dopo aver selezionato i cpident di interesse dalla tabella BDCP2,
*usando il message type di interesse e cpident = ' ', si lancia la funzione:

CHANGE_POINTERS_STATUS_WRITE
*Non necessita di commit supplementare

ADS LINK LARGO 2