**ABAP** (**A**dvanced **B**usiness **A**pplication **P**rogramming) adalah bahasa pengaturcaraan tahap tinggi yang dicipta oleh syarikat pengaturcaraan JermanSAP. Ia kini diletakkan, seiring dengan Java yang baru diperkenalkan, sebagai bahasa untuk memprogram SAP Web Application Server, sebahagian dari pelantar NetWeavernya bagi membina applikasi perniagaan. Sintaxnya agak serupa dengan COBOL.

Sejarah
-------

ABAP adalah salah satu daripada bahasa generasi keempat applikasi khusus yang pertama kali dimajukan pada 1980-an. Ia pada asalnya bahasa lapuran bagi SAP R/2, pelantar yang membolehkan koperasi besar bagi membina applikasi perniagaan kerangka utama bagi pengurusan material dan kewangan dan pengurusan perakaunan. ABAP dahulunya ringkasan bagi ***A**llgemeiner **B**erichts***a**ufbereitungs**p**rozessor*, istilah Jerman yang bererti "pemprosesor penyedia lapuran generik", tetapi kemudiannya dinamakan semula sebagai **A**dvanced **B**usiness **A**pplication **P**rogramming. ABAP adalah salah satu bahasa pertama dilengkapi dengan konsep* Pangkalan Data Logik *(LDBs), yang memberikan ringkasan tahap tinggi dari aras pangkalan data asas.*

Bahasa pengaturcaraan ABAP pada asalnya digunakan oleh pembangun SAP bagi membangunkan pelantar SAP R/3. Ia juga bertujuan bagi kegunaan pelanggan SAP bagi meningkatkan aturcara penggunaan SAP – pelanggan boleh menambah lapuran dan antara muka khas, dan meningkatkan pengalaman pengguna, dengan pengaturcaraan ABAP. 4GL ini agak mudah dipelajari bagi pengaturcaraan tetapi terlalu rumit bagi pengguna biasa. Kemahiran pengaturcaraan tahap tinggi masih diperlukan bagi menghasilkan aturcara ABAP.

ABAP kekal sebagai bahasa bagi mencipta aturcara bagi pelayan-pelanggan sistem R/3, yang pertama dibebaskan SAP pada tahun 1992. Ketika hardware komputer berubah sepanjang 1990-an, semakin banyak aturcara pengunaan SAP ditulis menggunakan ABAP. Menjelang 2001, kesemua kecuali fungsi asas ditulis dalam ABAP. Pada 1999, SAP membebaskan tambahan berorentasikan-objek kepada ABAP dan digelar ABAP Objects, bersama R/3 keluaran 4.6.

Pelantar pembangunan SAP terkini, NetWeaver, menyokong kedua ABAP dan bahasa pengaturcaraan Java.

Kefahaman Asas
--------------

Anggaplah anda sebagai pengurus organisasi jualan besar di Syarikat XYZ. Setiap pagi Isnin "laporan tempahan jualan" 100 muka dihantar kemeja anda. Laporan ini menyennarai tempahan jualan individual yang dicipta oleh jabatan anda bagi minggu lepas. Laporan disenaraikan secara nombor dan mengandungi maklumat umum, termasuk juga maklumat perincian mengenai tempahan termasuk: pihak pembeli, tarikh tempahan, tarikh penghantaran, wakil jualan yang bertanggungjawab, benda ditempah, dan jumlah tempahan.

Sebagai manager anda berminat dengan kedua-dua maklumat umum atau ringkasan mengenai tempahan jualan, termasuk maklumat perincian mengenai tempahan tertentu. Anda mungkin mahukan laopran disusun menurut pelbagai kriteria seperti kawasan jualan atau wakil jualan. Tambahan lagi, anda mungkin mahu melihat perincian tempahan seperti benda ditempah dan jumlah tempahan, atau mungkin maklumat alamat pelanggan. Laporan yang mengandungi kesemua ini menjadi amat panjang dan mungkin menyukar dan mengelirukan untuk menelitinya. Bagi memudahkan masaalh ini anda mungkin mahu gambaran maklumat tahap tinggi dan ingin anda dapat *berinteraksi* dengan laporan, menyusunnya menurut kritiria yang diingini atau mengecilkan skopnya agar anda hanya diberikan gambaran mengenai perincian data yang anda inginkan sahaja.

ABAP mencadangkan ciri-ciri laporan interaktif sebagai penyelesaian kepada masalah yang digambarkan di atas. Sebagai pengaturcara ABAP anda mampu mereka laporan yang meminta atau *mendapatkan* jawapan dari pengguna, membenarkan pengguna untuk "berinteraksi" dengan laporan (dengan menggunakan tetikus dan kekunci fungsi).

Sebagai Pengurus Jualan bagi Syarikat XYZ anda kini mampu melaksanakan laporan interaktif yang memberikan anda dengan senarai maklumat tahap tinggi dan laporan jualan menurut jumlah. Anda kemudian mampu "berinteraksi" dengan laporan samaada untuk menyusunnya atau mendapatkan perincian maklumat.

Laporan Interaksi ini pada awalnya memberikan Laporan Asas, yang mengandungi maklumat tahap tinggi yang diperlukan pengguna, kemudian dengan interaksi-pengguna memaparkan Senarai Perincian, yang mengandungi maklumat diminta-pengguna. Interaksi-pengguna akan memulakan *ABAP/4 Events* yang akan memanggil kod atau blok pemprosesan yang menurut kejadian kata kunci.

Dimana aturcara ABAP dilaksanakan?
----------------------------------

Aturcara ABAP diproses pada pelayan aturcara penggunaan. Rekabentuk dialog pengguna dan dialog pangkalan data dengan itu adalah penting ketika menulis aturcara penggunaan.

### Tahap Pangkalan Data

Mengandungi pelayan memuatkan enjin pangkalan data dan proses berkait. Titik paling kritikal dalam tata rajah Pelayan keseluruhan dengan ruang simpanan yang besar.

### Tahap Penggunaan (*Application Layer*)

Pelayan melaksanakan perkhidmatan SAP contoh. proses latar,proses kemaskini, proses dialog dll.
Pelayan berganda boleh digunakan prestasi terbaik melalui perkongsian beban (*load sharing*).
Pelayan memerlukan kurang ruang penyimpanan dan lebih kuasa pemprosessan.

### Tahap Persembahan

Melaksana aturcara bahagian hadapan SAP
Tanggungjawab bagi memaparkan antara muka pengguna SAP, menghantar output kepada pengguna dan menerima input pengguna untuk dihantar kepada tahap penggunaan (*application layer*).
Pelantar - Unix, OS/2, Windows

Jenis aturcara ABAP :
---------------------

Dalam ABAP, terdapat dua jenis aturcara:

#### Aturcara lapur

**Aturcara Lapur** menurut model pengaturcaraan ayang agak mudah di mana pengguna secara optimal memasukkan set tatarajah (contoh. pilihan pada subset data) dan aturcara kemudian menggunakan tatarajah input pengguna bagi menghasilkan lapuran dalam bentuk senarat interaksi. Output dari aturcara lapur adalah secara interaksi kerana ia bukannya paparan pasif; sebaliknya ia membolehkan pengguna, melalui bahasa pembinaan ABAP, bagi mendapatkan pandangan lebih perincian berkenaan data khas melalui fungsi lebih perincian (*drill-down*), atau bagi melaksanakan pemprosesanlanjut melalui perintah menu. Istilah 'laporan' adalah agak mengelirukan dari segi ia juga boleh bagi mencipta lapuran yang *mengubah* data dalam pangkalan data asas dan bukannya sekadar membacanya.

#### Aturcara di Talian

**Aturcara di talian** (juga dikenali sebagai himpunan modul) tidak menghasilkan senarai. Aturcara ini mengatur pola lebih rumit interaksi pengguna melalui himpunan beberapa skrin. Istilah "skrin" merujuk kepada imej fizikal, sebenar yang dilihat pengguna. Setiap skrin mempunyai "aliran logik"; ini merujuk kepada kod ABAP yang dipanggil skrin, contoh. logik yang memulakan skrin, bertindak balas kepada permintaan pengguna dan mengawal aturan antara skrin himpunan modul. Setiap skrin mempunyai Aliran Logiknya sendiri, yang dibahagikan kepada seksyen "PBO" (Process Before Output) dan "PAI" (Process After Input). Dalam dokumentasi SAP, istilah "dynpro" (dynamic program) merujuk kepada gabungan skrin dan Aliran Logik.

Aturcara di talian tidak dipanggil secara langsung menurut namanya, tetapi dikaitkan dengan kod transaksi. Pengguna kemudian boleh memanggilnya melalui menu transaksi, bergantung kepada peranan, khas.

```
REPORT  Zexmaple_report.
tables :vbrk,vbrp,kna1.
TYPE-POOLS : slis.
data:begin of itab_final occurs 0,
    VKBUR like vbrp-VKBUR,
     vbeln like vbrk-vbeln,
     kunag like vbrk-kunag,
     fkdat like vbrk-fkdat,
     netwr like vbrk-netwr,
     mwsbk like vbrk-mwsbk,
     fkimg like vbrp-fkimg,
     total like vbrk-netwr,
     name1 like kna1-name1,
end of itab_final.

data:begin of itab occurs 0,
     VKBUR like vbrp-VKBUR,
     vbeln like vbrk-vbeln,
     kunag like vbrk-kunag,
     fkdat like vbrk-fkdat,
     netwr like vbrk-netwr,
     mwsbk like vbrk-mwsbk,
     fkimg  like vbrp-fkimg,
    end of itab.

data: begin of itab_name occurs 0,
       name1 like kna1-name1,
       erdat like kna1-erdat,
       end of itab_name.
DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      GD_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GD_REPID     LIKE SY-REPID.

DATA : W_BUDAT LIKE EKBE-BUDAT.

datA:T TYPE T.
select-options: vbeln for vbrk-vbeln.
select-options: fkdat for vbrk-fkdat.
select-options: kunag for vbrk-kunag.

select
        vbrk~vbeln
        vbrk~fkdat
        vbrk~netwr
        vbrk~mwsbk
        vbrk~kunag
        vbrp~fkimg
        vbrp~vkbur

         INTO CORRESPONDING FIELDS OF TABLE itab

                FROM VBRK INNER JOIN  VBRP ON VBRK~VBELN = VBRP~VBELN

                      WHERE  VBRK~FKDAT IN FKDAT AND VBRK~KUNAG IN KUNAG AND VBRK~VBELN IN VBELN.

select name1
       erdat
             from kna1 into table itab_name
                                            for all entries in itab
                                                                      where erdat = itab-fkdat.

*---------------------------------------------------------------------------------------------------------*
loop at itab.
  itab_final = itab.

  read table itab_name with key erdat =  itab-fkdat.
  itab_final-name1 = itab_name-name1.
  itab_final-total = itab-netwr + itab-mwsbk.

  append itab_final.
  clear itab_final.

```

```
*-----------------------------------------------------------------------
* set an exclusive lock at level object-type & object-id
*-----------------------------------------------------------------------
  IF NOT lf_bapi_error = true.
    IF ( NOT istourhd-doc_type IS INITIAL ) AND
       ( NOT istourhd-doc_id IS INITIAL )

      CALL FUNCTION 'ENQUEUE_/DSD/E_HH_RAREF'
           EXPORTING
                obj_typ        = istourhd-doc_type
                obj_id         = istourhd-doc_id
           EXCEPTIONS
                foreign_lock   = 1
                system_failure = 2
                OTHERS         = 3.
      IF sy-subrc <> 0.
*       terminate processing...
        lf_bapi_error = true.—
*       ...and add message to return table
        PERFORM set_msg_to_bapiret2
             USING    sy-msgid gc_abort sy-msgno
                      sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
                      gc_istourhd gc_enqueue_refdoc space
             CHANGING lt_return.
      ENDIF.
    ENDIF.
  ENDIF.    "bapi error

```

* SAP Help Portal
* ABAP in the SAP Developer Network
* SAP TutorialsABAP Objects
* ABAP transaction codes Diarkibkan 2007-05-15 di Wayback Machine
* SAP ABAP Materials

```
REPORT  Zexmaple_report.
tables :vbrk,vbrp,kna1.
TYPE-POOLS : slis.
data:begin of itab_final occurs 0,
    VKBUR like vbrp-VKBUR,
     vbeln like vbrk-vbeln,
     kunag like vbrk-kunag,
     fkdat like vbrk-fkdat,
     netwr like vbrk-netwr,
     mwsbk like vbrk-mwsbk,
     fkimg like vbrp-fkimg,
     total like vbrk-netwr,
     name1 like kna1-name1,
end of itab_final.

data:begin of itab occurs 0,
     VKBUR like vbrp-VKBUR,
     vbeln like vbrk-vbeln,
     kunag like vbrk-kunag,
     fkdat like vbrk-fkdat,
     netwr like vbrk-netwr,
     mwsbk like vbrk-mwsbk,
     fkimg  like vbrp-fkimg,
    end of itab.

data: begin of itab_name occurs 0,
       name1 like kna1-name1,
       erdat like kna1-erdat,
       end of itab_name.
DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      GD_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GD_REPID     LIKE SY-REPID.

DATA : W_BUDAT LIKE EKBE-BUDAT.

datA:T TYPE T.
select-options: vbeln for vbrk-vbeln.
select-options: fkdat for vbrk-fkdat.
select-options: kunag for vbrk-kunag.

select
        vbrk~vbeln
        vbrk~fkdat
        vbrk~netwr
        vbrk~mwsbk
        vbrk~kunag
        vbrp~fkimg
        vbrp~vkbur

         INTO CORRESPONDING FIELDS OF TABLE itab

                FROM VBRK INNER JOIN  VBRP ON VBRK~VBELN = VBRP~VBELN

                      WHERE  VBRK~FKDAT IN FKDAT AND VBRK~KUNAG IN KUNAG AND VBRK~VBELN IN VBELN.

select name1
       erdat
             from kna1 into table itab_name
                                            for all entries in itab
                                                                      where erdat = itab-fkdat.

*---------------------------------------------------------------------------------------------------------*
loop at itab.
  itab_final = itab.

  read table itab_name with key erdat =  itab-fkdat.
  itab_final-name1 = itab_name-name1.
  itab_final-total = itab-netwr + itab-mwsbk.

  append itab_final.
  clear itab_final.

```

```
*-----------------------------------------------------------------------
* set an exclusive lock at level object-type & object-id
*-----------------------------------------------------------------------
  IF NOT lf_bapi_error = true.
    IF ( NOT istourhd-doc_type IS INITIAL ) AND
       ( NOT istourhd-doc_id IS INITIAL )

      CALL FUNCTION 'ENQUEUE_/DSD/E_HH_RAREF'
           EXPORTING
                obj_typ        = istourhd-doc_type
                obj_id         = istourhd-doc_id
           EXCEPTIONS
                foreign_lock   = 1
                system_failure = 2
                OTHERS         = 3.
      IF sy-subrc <> 0.
*       terminate processing...
        lf_bapi_error = true.—
*       ...and add message to return table
        PERFORM set_msg_to_bapiret2
             USING    sy-msgid gc_abort sy-msgno
                      sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
                      gc_istourhd gc_enqueue_refdoc space
             CHANGING lt_return.
      ENDIF.
    ENDIF.
  ENDIF.    "bapi error

```

* SAP Help Portal
* ABAP in the SAP Developer Network
* SAP TutorialsABAP Objects
* ABAP transaction codes Diarkibkan 2007-05-15 di Wayback Machine
* SAP ABAP Materials

ABAP Workbench
--------------

ABAP Workbench mengandungi perkakasan berlainan bagi menyunting objek Repository. Perkakasan ini memberikan anda dengan bantuan meluas yang merangkumi keseluruhan kitaran pembangunan perisian.
Perkakasan terpenting bagi mencipta atau menyunting objek Repository adalah:
  
**ABAP Editor** bagi menulis dan menyunting kod aturcara
  
**ABAP Dictionary** bagi memproses takrifan jadual pangkalan data dan mengambil jenis sejagat
  
**Menu Painter** bagi mereka antara muka pengguna (menu bar, standard toolbar, application toolbar, function key assignment)
  
**Screen Painter** bagi mereka skrin (aturcara dinamik) bagi dailog pengguna
  
**Function Builder** bagi modul fungsi memapar dan memproses (routin dengan takrifan antara muka yang terdapat diseluruh sistem)
  
**Class Builder** bagi memapar dan memproses kelas Objek ABAP

Kamus ABAP
----------

Menguatkuasa integriti data
Mengurus definasi data tanpa ulangan
Berkait rapat dengan ABAP/4 Development Workbench yang lain.
Menguatkuasa integriti data adalah proses memastikan data yang masuk kedalam sistem adalah logik, penuh, dan konsisten. Apabila aturan integriti data ditakrifkan dalam Kamus ABAP/4, sistem secara automatik menghalang kemasukkan data tidak sah. Mengtakrifkan aturan integriti data pada tahap kamus bererti ia hanya perlu ditakrifkan sekali sahaja, dan bukannya pada setiap aturcara yang mencapai data tersebut.
  
The following are examples of data lacking integrity:
  
A date field with a month value of 13
  
An order assigned to a customer number that doesn’t exist
  
An order not assigned to a customer
  
 Mengurus takrifan data tanpa ulangan merupakan proses menyambung maklumat yang sama kepada takrifan data yang sama. Sebagai contoh, pangkalan data pelanggan kemungkinannya mengandungi nombor ID pelanggan di beberapa tempat. Kamus ABAP memberikan keupayaan mengtakrif ciri-ciri nombor ID pelanggan hanya pada satu tempat. Tarifan pusat itu kemudiannya boleh digunakan bagi setiap ulangan nombor ID pelanggan.
  
The ABAP Dictionary’s integration with the rest of the development environment enables ABAP programs to automatically recognize the names and characteristics of dictionary objects.   
 Additionally, the system provides easy navigation between development objects and dictionary definitions. For example, as a programmer, you can double-click on the name of a dictionary object in your program code, and the system will take you directly to the definition of that object in the ABAP/4 Dictionary.
  
When a dictionary object is changed, a program that references the changed object will automatically reference the new version the next time the program runs. Because ABAP is interpreted, it is not necessary to recompile programs that reference changed dictionary objects.

Defining data objects
---------------------

There are various statements that you can use to define data objects.

The **TABLES** statement always refers to the global type of a flat structure that is defined in the ABAP Dictionary. The structure type for the data object in the program is taken from the Dictionary. The data object name is identical to the name of the structure type. They are normally used as an interface to the screen.
  

The **DATA** statement is usually used to define local data objects. The data object type is specified using the **TYPE** addition.
  

The **PARAMETERS** statement defines not only an elementary data object, but also an input field on the standard selection screen that is processed at the start of the program.
When you activate a program, an internal load version is generated. A selection screen is generated from the PARAMETERS statement. When the program starts, memory areas are made available for the data objects.
You can find further information on data objects in the unit entitled ABAP Statements and Data Declarations, or in the keyword documentation.
  

The **SELECT** statement ensures that data is read from the database. In order to read a record from a database table, the following information must be passed to the database:
From which database table is the data read? (FROM clause)
How many lines are read? The **SINGLE** addition shows that only one line is read.
Which line is read? The **WHERE** clause shows which columns of the database table have which values.
  

For a **SELECT SINGLE**, the condition must be formulated so that one line is specified unambiguously.
  

Dialog programs are used for both reading from and writing to the database.

---

>

Contoh(Lapuran ABAP )
---------------------

```
REPORT  Zexmaple_report.
tables :vbrk,vbrp,kna1.
TYPE-POOLS : slis.
data:begin of itab_final occurs 0,
    VKBUR like vbrp-VKBUR,
     vbeln like vbrk-vbeln,
     kunag like vbrk-kunag,
     fkdat like vbrk-fkdat,
     netwr like vbrk-netwr,
     mwsbk like vbrk-mwsbk,
     fkimg like vbrp-fkimg,
     total like vbrk-netwr,
     name1 like kna1-name1,
end of itab_final.

data:begin of itab occurs 0,
     VKBUR like vbrp-VKBUR,
     vbeln like vbrk-vbeln,
     kunag like vbrk-kunag,
     fkdat like vbrk-fkdat,
     netwr like vbrk-netwr,
     mwsbk like vbrk-mwsbk,
     fkimg  like vbrp-fkimg,
    end of itab.

data: begin of itab_name occurs 0,
       name1 like kna1-name1,
       erdat like kna1-erdat,
       end of itab_name.
DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      GD_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GD_REPID     LIKE SY-REPID.

DATA : W_BUDAT LIKE EKBE-BUDAT.

datA:T TYPE T.
select-options: vbeln for vbrk-vbeln.
select-options: fkdat for vbrk-fkdat.
select-options: kunag for vbrk-kunag.

select
        vbrk~vbeln
        vbrk~fkdat
        vbrk~netwr
        vbrk~mwsbk
        vbrk~kunag
        vbrp~fkimg
        vbrp~vkbur

         INTO CORRESPONDING FIELDS OF TABLE itab

                FROM VBRK INNER JOIN  VBRP ON VBRK~VBELN = VBRP~VBELN

                      WHERE  VBRK~FKDAT IN FKDAT AND VBRK~KUNAG IN KUNAG AND VBRK~VBELN IN VBELN.

select name1
       erdat
             from kna1 into table itab_name
                                            for all entries in itab
                                                                      where erdat = itab-fkdat.

*---------------------------------------------------------------------------------------------------------*
loop at itab.
  itab_final = itab.

  read table itab_name with key erdat =  itab-fkdat.
  itab_final-name1 = itab_name-name1.
  itab_final-total = itab-netwr + itab-mwsbk.

  append itab_final.
  clear itab_final.

```

Contoh
------

From SAP NetWeaver:

```
*-----------------------------------------------------------------------
* set an exclusive lock at level object-type & object-id
*-----------------------------------------------------------------------
  IF NOT lf_bapi_error = true.
    IF ( NOT istourhd-doc_type IS INITIAL ) AND
       ( NOT istourhd-doc_id IS INITIAL )

      CALL FUNCTION 'ENQUEUE_/DSD/E_HH_RAREF'
           EXPORTING
                obj_typ        = istourhd-doc_type
                obj_id         = istourhd-doc_id
           EXCEPTIONS
                foreign_lock   = 1
                system_failure = 2
                OTHERS         = 3.
      IF sy-subrc <> 0.
*       terminate processing...
        lf_bapi_error = true.—
*       ...and add message to return table
        PERFORM set_msg_to_bapiret2
             USING    sy-msgid gc_abort sy-msgno
                      sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
                      gc_istourhd gc_enqueue_refdoc space
             CHANGING lt_return.
      ENDIF.
    ENDIF.
  ENDIF.    "bapi error

```

Pautan luar
-----------

* SAP Help Portal
* ABAP in the SAP Developer Network
* SAP TutorialsABAP Objects
* ABAP transaction codes Diarkibkan 2007-05-15 di Wayback Machine
* SAP ABAP Materials

|
|  |