Bu makalede ABAP-OO metot parametreleri üzerinde duracağız. Metotları ve parametrelerini nasıl yöneteceğimizle ilgili program yazacağız. Temel seviyede bir kodlama olacak daha anlaşılır ve basit olması adına.

Amaç

Sınıfların metodlarına ihtiyaç duyulan durumlarda ilgili parametreleri ve değerleri gönderip geri dönüşleri almak veya ilgili parametrelere bağlı işlemler gerçekleştirmek.


Senaryo

Müşteri yaratma programı geliştirip ilgili anaverileri ekrana yazdıracağız. Sınıfın içerisinde belirlediğim metodların gerçek hayattaki senaryolara karşı düşündüğümüzde daha farklı yöntemler de izleyip yapabiliriz. Ancak örneğimizin basit ve anlaşılır olması adına aşağıdaki yöntemle yaptım.


ABAP Kodu

[ABAP]
************************************************************************
* ABAP Development
*
* Author : Barış Arslan
* Description : Method parameters
************************************************************************

CLASS lcl_customer DEFINITION.
  PUBLIC SECTION.
    ” IMPORT parametresi içeren metot
    METHODS set_name IMPORTING VALUE(iv_name) TYPE char40.

    ” RETURN parametresi içeren metot
    METHODS get_name RETURNING VALUE(rv_name) TYPE char40.

    ” EXPORT parametresi içeren metot
    METHODS get_creation_date EXPORTING VALUE(ev_created_at) TYPE sy-datum.

    ” CHANGING parametresi içeren metot
    METHODS change_account CHANGING VALUE(cv_account) TYPE char10.

  PRIVATE SECTION.
    ” PRIVATE section içerisinde tanımlandığı için
    ” direk olarak dışarıdan erişim sağlanamaz.
    DATA v_name TYPE char40.
ENDCLASS.

CLASS lcl_customer IMPLEMENTATION.
  METHOD set_name.
    ” Müşterinin adını belirlemek için bir IMPORT parametresinden
    ” müşterinin adını alıyoruz. Dışarıdan çağırılan bir metot.
    ” Gelen müşteri adını, sınıfımızın kendi içerisine yazıyoruz.

    me->v_name = iv_name.
  ENDMETHOD.

  METHOD get_name.
    ” Müşteri sınıfımızın içerisindeki isim bilgisini
    ” RETURN parametresiyle birlikte dönüyoruz.
    ” Dışarıdan müşterinin adına erişilmek istendiği zaman
    ” bu metot üzerinden isim bilgisi elde edilebilir.

    rv_name = me->v_name.
  ENDMETHOD.

  METHOD get_creation_date.
    ” Müşterinin yaratılma tarihine erişilmek istenirse
    ” bu metot üzerinden elde edilebilir. RETURN parametresine
    ” sahip bir metot gibi EXPORT parametresiyle sonuç dönecektir.

    ” Örnek amaçlı hard-code bir tarih yazıyorum şu anlık.

    ev_created_at = ‘20160101’.
  ENDMETHOD.

  METHOD change_account.
    ” Dışardaki bir hesabın müşteri verisine göre değiştirilmesi
    ” gibi bir talebe bu metot cevap verecektir. Dışarıdan metoda
    ” verilen CHANGING parametresi içerisindeki hesap numarası alanı
    ” bu metot içerisinde değiştirilecektir ve yeni haliyle programa dönecektir.

    cv_account = ‘1002005201’.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  DATA : go_customer   TYPE REF TO lcl_customer
       , lv_created_at TYPE        sy-datum
       .

  DATA : lv_account TYPE char10 VALUE ‘6007010000’.

  CREATE OBJECT go_customer.

  ” Müşterinin adını yazdırmaya çalışıyoruz.
  ” Ancak şu an müşteri nesnemiz boş olduğu için
  ” herhangi bir isim görünmeyecek.
  WRITE : ‘1. Adım: ‘, go_customer->get_name( ).

  ” Müşterinin adını belirliyoruz
  go_customer->set_name( iv_name = ‘Mercedes’ ).

  ” Müşterinin adını yeniden yazdırıyoruz
  WRITE : / ‘2. Adım: ‘, go_customer->get_name( ).

  ” Müşterinin oluşturulma tarihini nesnenin içinden alıyoruz
  ” Bu işlemden sonra müşterinin oluşturulma tarihini objenin içerisinden kendi programımızdaki
  ” değişkene almış olacağız. Müşteri sınıfının içerisindeki bilgiyi kendi lokalimize alıyoruz.
  go_customer->get_creation_date(
    IMPORTING
      ev_created_at = lv_created_at
  ).

  ” Kendi kod akışımıza aldığımız müşteri yaratılma tarihini yazdırıyoruz.
  WRITE : / ‘3. Adım: ‘, lv_created_at.

  ” Elimizde önceden tanımlı bir şekilde gelen hesap numarası bilgisini yazdırıyoruz.
  WRITE : / ‘4. Adım: ‘, lv_account.

  ” Müşteri hesap numarasını değiştiriyoruz.
  go_customer->change_account(
    CHANGING
      cv_account = lv_account
  ).

  ” Bu adımda elimizdeki hesap numarası değişmiş olacak. DEBUG ile kontrol edebilirsiniz.
  ” Müşteri nesnesinin içerisinde değişikliğe uğramış hesap numarasını yazdırıyoruz.
  WRITE : / ‘5. Adım: ‘, lv_account.
[/ABAP]


Programın Çıktısı

ABAP-OO Parameters
ABAP-OO Parameters


Notlar

Her metodun tek bir tane RETURN parametresi olabilir. Ancak birden fazla EXPORT parametresi olabilir. Yaptığımız örnekte “Müşteri Yaratılma Tarihini” EXPORT parametresi kullanarak yapmıştık ancak RETURN ile de yapabilirdik tek bir değer olduğu için. Bu örnekte EXPORT ile yapmamızın sebebi EXPORT parametresinin kullanımını görmek adınadır.