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.
Çok teşekkürler elinize sağlık, böyle çalışmalar çok az olduğu için gayet faydalı bir iş yapmışınız süper 🙂
BeğenBeğen