luni, 7 septembrie 2009

In ce limbaj a fost dezvoltat SAP?

Daca va intrebati ce limbaj sta in spatele SAP-ului aflati ca este vorba de un limbaj dezvoltat de cei de la SAP special pentru aplicatiile de tip business asemanator limbajului COBOL.
Numele sau ABAP (Advanced Business Application Programming) a fost o alaturare potrivita de cuvinte care sugereaza in primul rand specificul acestui limbaj si faptul ca provine dintr-o prima generatie de programe ce au inclus conceptul de Logical Database.
Ca sa ne dam seama la nivel structural unde s-ar pozitiona si care este rolul acestor programe trebuie sa avem in vedere arhitectura sistemului SAP prezentata in postul anterior si anume:
daca nivelul bazei de date contine in general date acestea trebuie preluate prin intermediul unei aplicatii si furnizate utilizatorului spre a se folosi de ele, ca urmare programele ABAP ruleaza la nivelul de aplicatie(application layer) si au rolul de a extrage datele de la nivelul bazei de date si de a le aduce la nivelul de prezentare(interfetei cu utilizatorul).
Pentru a va face o idee despre cum arata codul sursa al unui program va exemplific urmatorul cod sursa ce verifica o lista de documente intr-un fisier si adauga un x in fata documentului in momentul in care il gaseste:
************************************************************************
*Program name : XXXXXXXXX *
*Analyst name : XXXXXXXXX *
* Programmer's name : XXXXXXXXXXXXXX *
*Created on : XX/XX/XXXX *
* Function description : XXXXXXXXXXXXXXXX*
* Requested by : XXXXXXXXX *
************************************************************************
* Modification 001 : *
* Done by : *
* Requested by : *
* Date : *
*----------------------------------------------------------------------*

REPORT XXXXXXX MESSAGE-ID 00.

*--------------------------TABLES---------------------------------------
TABLES: likp.

*--------------------SELECTION-SCREEN-----------------------------------
SELECTION-SCREEN BEGIN OF BLOCK bl1.
PARAMETERS: p_ddname TYPE zsdsn-ddname OBLIGATORY.
SELECT-OPTIONS: s_vbeln FOR likp-vbeln OBLIGATORY.
SELECTION-SCREEN END OF BLOCK bl1.

*----------------------------TYPES--------------------------------------
TYPES: BEGIN OF ty_dsname,
dsname TYPE zsdsn-dsname,
END OF ty_dsname.

TYPES: BEGIN OF ty_vbeln,
vbeln TYPE likp-vbeln,
END OF ty_vbeln.

*----------------------------DATA--------------------------------------
DATA: it_dsname TYPE TABLE OF ty_dsname,
it_vbeln TYPE TABLE OF ty_vbeln,
it_vbeln2 TYPE TABLE OF ty_vbeln.

DATA: wa_dsname TYPE ty_dsname,
wa_vbeln TYPE ty_vbeln.

DATA: BEGIN OF it_input OCCURS 0,
line(225) TYPE c,
END OF it_input.

DATA: lv_vbeln(10),
gv_modified(1),
gv_file_mod(1),
lv_tabix TYPE sy-tabix,
va_index LIKE sy-tabix.

*----------------------START-OF-SELECTION------------------------------
START-OF-SELECTION.

SELECT dsname INTO TABLE it_dsname
FROM zsdsn
WHERE ddname = p_ddname.

READ TABLE it_dsname INTO wa_dsname INDEX 1.

*--- open dataset to read it
call method zcl_xxxxx_base=>open_dataset_text_mode
exporting
iv_filename = WA_DSNAME-DSNAME
iv_for = zcl_xxxxx_base=>for_INPUT
exceptions
cannot_open = 8.

IF sy-subrc NE 0.
MESSAGE i001 WITH text-001.
ELSE.
DO.
READ DATASET wa_dsname-dsname INTO it_input-line.
IF sy-subrc = 0.
APPEND it_input.
ELSE.
EXIT.
ENDIF.
ENDDO.

CLEAR gv_modified.

CLOSE DATASET wa_dsname-dsname.

LOOP AT s_vbeln.
CLEAR gv_modified.

READ TABLE it_input WITH KEY line(10) = s_vbeln-low.
CLEAR lv_tabix.
IF sy-subrc = 0.
CONCATENATE 'X' it_input-line INTO it_input-line.
gv_modified = 'X'.
gv_file_mod = 'X'.
lv_tabix = sy-tabix.
ENDIF.

READ TABLE it_input WITH KEY line(1) = 'X'
line+1(10) = s_vbeln-low.

IF sy-subrc <> 0 AND gv_modified <> 'X'.
READ TABLE it_input WITH KEY line(1) = 'x'
line+1(10) = s_vbeln-low.
IF sy-subrc <> 0.
wa_vbeln-vbeln = s_vbeln-low.
APPEND wa_vbeln TO it_vbeln.
ENDIF.
ENDIF.

IF NOT lv_tabix IS INITIAL.
MODIFY it_input INDEX lv_tabix TRANSPORTING line.
ENDIF.
ENDLOOP.


*---if modifications were made
IF gv_file_mod = 'X'.

*---open dataset to modify it
call method zcl_xxxxx_base=>open_dataset_text_mode
exporting
iv_filename = WA_DSNAME-DSNAME
iv_for = zcl_xxxxx_base=>for_OUTPUT
exceptions
cannot_open = 8.

LOOP AT it_input.
TRANSFER it_input-line TO wa_dsname-dsname.
ENDLOOP.

CLOSE DATASET wa_dsname-dsname.

ENDIF.


CLEAR wa_vbeln.

*---print the deliveries that were not found

IF it_vbeln IS INITIAL. " all deliveries were found
WRITE text-003.
ELSE.
WRITE: text-002.
LOOP AT it_vbeln INTO wa_vbeln.
WRITE: / wa_vbeln-vbeln.
ENDLOOP.
ENDIF.

ENDIF.

0 comentarii:

Trimiteți un comentariu