SAP-ABAP-OOP Tablo Mail Gönderimi

Merhaba,

SAP Abap ile mail gönderimine ilişkin bir çok fonksiyon bulunmakta. Ancak bazı durumlarda mail içeriğine oluşturduğumuz bir tablonun, tablo görünümü olarak mail göndermek istediğimizde farklı bir fonksiyon kullanmamız gerekmektedir. Mail içeriğinde temel bir HTML bilgisi ile tablo yapısının oluşturabilir ve tabloya istediğimiz verileri doldurarak  SO_NEW_DOCUMENT_SEND_API1 fonksyionu aracılığı ile istediğimiz adrese mail olarak gönderebiliriz.

Bu uygulamayı bir OOP tabanlı bir örnekle aşağıdaki şekilde daha net açıklayacağım.

İlk olarak projeyi gerçekleştireceğimiz paket içerisinde bulunan CLASS LIBRARY’e yeni bir sınıf oluşturuyoruz.

ZDEMO_CL_MAIL isimli sınıf için aşağıdaki şekilde parametreleri belirliyoruz. ilk parametre olarak belirlediğimiz IT_TABLE, göndereceğimiz tabloyu ifade ediyor. Ancak Type kısmında belirttiğimiz ZDEMO_TY_TABLE Tablo Tipini ifade etmektedir.

CLASS ZDEMO_CL_MAIL DEFINITION
  PUBLIC
  CREATE PUBLIC .

  PUBLIC SECTION.

    CLASS-METHODS SEND_MAIL
      IMPORTING
        VALUE(IT_TABLE)      TYPE ZDEMO_TY_TABLE
        VALUE(I_MAIL_ADRESS) TYPE AD_SMTPADR
      EXPORTING
        VALUE(E_RESULT)      TYPE XFELD .


  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

ZDEMO_T_TABLE tablosundan Tablo Tipi oluşturarak ZDEMO_TY_TABLE ismini veriyoruz.

Tablo tipini ve sınıfımızı tanımladıktan sonra bu sınıfa ait metodun yazılmasına başlayabiliriz. Aşağıda ki kod içerisinde ki yorumlarda mail yapısının açıklamaları yorum kısımlarında belirtilmiştir.

 

 METHOD SEND_MAIL.

    DATA: LS_MAILSUBJECT     TYPE SODOCCHGI1.
    DATA: LS_MAILRECIPIENTS  TYPE SOMLREC90 .
    DATA: LT_MAILRECIPIENTS  TYPE TABLE OF SOMLREC90 .
    DATA: LS_MAILTXT         TYPE SOLI .
    DATA: LT_MAILTXT         TYPE TABLE OF SOLI .

    "Mailin iletileceği mail adreslerini doldur
    LS_MAILRECIPIENTS-REC_TYPE  = 'U'.
    LS_MAILRECIPIENTS-RECEIVER = I_MAIL_ADRESS.
    APPEND LS_MAILRECIPIENTS TO LT_MAILRECIPIENTS .
    CLEAR LS_MAILRECIPIENTS .

    " Mail Konu kısmını doldur
    LS_MAILSUBJECT-OBJ_NAME = 'Eksik Puantaj Bildirimi'.
    LS_MAILSUBJECT-OBJ_LANGU = SY-LANGU.
    LS_MAILSUBJECT-OBJ_DESCR = 'Eksik Puantaj Bildirimi'.

    " Mail içeriğini oluştur
    LS_MAILTXT = '<p>Merhaba,</p><br/>'.
    APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
    LS_MAILTXT = '<p>Aşağıdaki Tabloda Gerekli Bilgiler'.
    APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
    LS_MAILTXT = 'Bulunmaktadır...</p><br/>'.
    APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
    LS_MAILTXT = '<br/>'.
    APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
    LS_MAILTXT = '<HTML><BODY>'.
    APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
    LS_MAILTXT =  '<style>table, th, td { border: 1px solid black;'.
    APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
    LS_MAILTXT = 'border-collapse: collapse;}th,'.
    APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
    LS_MAILTXT = 'td { padding: 5px; text-align: left; }</style>'.
    APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.

    " Tablonun kolon başlıklarını belirle
    LS_MAILTXT = '<TABLE><TR>'.
    APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
    LS_MAILTXT = '<TH>Malzeme No</TH>'.
    APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
    LS_MAILTXT = '<TH>Üretim Yeri</TH></TR>'.
    APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.



    " Verileri Tablodaki kolonlara doldur
    FIELD-SYMBOLS : <WA_TABLE> TYPE ZDEMO_TABLE.
    LOOP AT IT_TABLE ASSIGNING <WA_TABLE>.
      LS_MAILTXT = '<TR>'.
      APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
      LS_MAILTXT = '<TD>'.
      APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
      LS_MAILTXT = <WA_TABLE>-MATNR.
      APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
      LS_MAILTXT = '</TD>'.
      APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
      LS_MAILTXT = '<TD>'.
      APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
      LS_MAILTXT = <WA_TABLE>-WERKS.
      APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
      LS_MAILTXT = '</TD>'.
      APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
    ENDLOOP.

    LS_MAILTXT = '</TABLE>'.
    APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
    LS_MAILTXT = '<br/> Teşekkürler'.
    APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.
    LS_MAILTXT = '</BODY></HTML>'.
    APPEND LS_MAILTXT TO LT_MAILTXT. CLEAR LS_MAILTXT.


    " Mail içeriğini gönder
    CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
      EXPORTING
        DOCUMENT_DATA              = LS_MAILSUBJECT
        DOCUMENT_TYPE              = 'HTM'
      TABLES
        OBJECT_CONTENT             = LT_MAILTXT
        RECEIVERS                  = LT_MAILRECIPIENTS
      EXCEPTIONS
        TOO_MANY_RECEIVERS         = 1
        DOCUMENT_NOT_SENT          = 2
        DOCUMENT_TYPE_NOT_EXIST    = 3
        OPERATION_NO_AUTHORIZATION = 4
        PARAMETER_ERROR            = 5
        X_ERROR                    = 6
        ENQUEUE_ERROR              = 7
        OTHERS                     = 8.
    IF SY-SUBRC EQ 0.
      COMMIT WORK.

      "*  Mail gönderim işlemini onayla
      SUBMIT RSCONN01 WITH MODE = 'INT' AND RETURN.

      E_RESULT = 'S'.
    ELSE.
      E_RESULT = 'E'.
    ENDIF.
  ENDMETHOD.

oluşturduğumuz bu sınıf ile ZDEMO_TY_TABLE tablo tipine ait her türlü internal tabloyu mail olarak gönderebilecek yapıyı sağlamış bulunuyoruz. Şimdi bu yapıyı bir program içerisinde kullanarak istediğimiz verileri bu sınıf aracılığı ile mail gönderimini sağlayacağız.

 

REPORT Z_TABLE_MAIL.

DATA : LT_DEMO_DATA TYPE TABLE OF ZDEMO_TABLE.
DATA : LV_MAIL_RESULT TYPE XFELD.

SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_DEMO_DATA FROM ZDEMO_TABLE.

IF SY-SUBRC IS INITIAL.
  ZDEMO_CL_MAIL=>SEND_MAIL(
    EXPORTING
      IT_TABLE      = LT_DEMO_DATA
      I_MAIL_ADRESS = 'example@example.com'
    IMPORTING
      E_RESULT      = LV_MAIL_RESULT ).

  IF LV_MAIL_RESULT EQ 'S'.
    WRITE : 'Mail Success'.
  ELSE.
    WRITE : 'Mail Error'.
  ENDIF.
ENDIF.

Yukarıda görüleceği üzere ZDEMO_TABLE tablosu içerisindeki tüm veriyi bir internal table üzerinde toplayarak oluşturduğumuz mail sınıfındaki ilgili metoda parametre olarak verdik. Ayrıca göndermek istediğimiz mail adresinide parametre olarak tanımladık.

Mail gönderim işlemi eğer başarılı olursa geri dönüş parametresi olarak ‘S’ karakteri dönecek ve ekrana Mail Success yazısı bastırılacak. Dönüş parametresinden ‘E’ değeri dönerse ekrana Mail Error yazısı bastırılacaktır.

programı çalıştırdığımızda alacağımız sonuca SOST Transaction’u üzerinden baktığımızda aşağıdaki gibi olacaktır.


Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s