Send mail dynamically
Hi,
I've this table:
CREATE TABLE USER_MAIL
USER_NAME VARCHAR2(32 BYTE),
DATA_MODIFY DATE,
MAIL_ADDRESS VARCHAR2(64 BYTE)
INSERT INTO USER_MAIL ( USER_NAME, DATA_MODIFY, MAIL_ADDRESS ) VALUES (
'SMITH', TO_Date( '11/15/2008 12:02:00 AM', 'MM/DD/YYYY HH:MI:SS AM'), '[email protected]');
INSERT INTO USER_MAIL ( USER_NAME, DATA_MODIFY, MAIL_ADDRESS ) VALUES (
'TOM', TO_Date( '10/08/2008 12:03:00 AM', 'MM/DD/YYYY HH:MI:SS AM'), '[email protected]');
INSERT INTO USER_MAIL ( USER_NAME, DATA_MODIFY, MAIL_ADDRESS ) VALUES (
'AFM', TO_Date( '11/10/2008 12:01:00 AM', 'MM/DD/YYYY HH:MI:SS AM'), '[email protected]');
INSERT INTO USER_MAIL ( USER_NAME, DATA_MODIFY, MAIL_ADDRESS ) VALUES (
'SAM', TO_Date( '12/11/2008 12:02:00 AM', 'MM/DD/YYYY HH:MI:SS AM'), '[email protected]');
commit;
SELECT USER_NAME, DATA_MODIFY,MAIL_ADDRESS, (TRUNC(sysdate) - TRUNC(DATA_MODIFY)) DIFF
FROM USER_MAIL;
USER_NAME............DATA_MODIFY..........MAIL_ADDRESS.......DIFF
SMITH............15/11/2008 0.02.00.............[email protected]......27
TOM..............08/10/2008 0.03.00.............[email protected]..65
AFM..............10/11/2008 0.01.00.............[email protected]......32
SAM..............11/12/2008 0.02.00.............[email protected].....1
......................................................................................more 1000 rows
I'd like to create a stored procedure that send mail at user name
when the difference between sysdate and data_modify is > 30 days.
I create correctly the procedure to send mail but I don't know how can I change the recipient when diff is > 30 days.
In my example I must send mail at TOM([email protected]) and AFM ([email protected])
How can I create this stored procedure?
Thanks in advance!
this is my correct procedure that send mail:
CREATE OR REPLACE PROCEDURE send_mail (sender IN varchar2,
recipient IN varchar2,
recipient2 IN varchar2,
oggetto IN varchar2,
messaggio IN varchar2) IS
mailhost varchar2(40) := 'mail.cww.it';
conn utl_smtp.connection;
crlf varchar2(2) := CHR(13)||CHR(10);
messag varchar2(3000);
v_sender varchar2(2000) := sender;
BEGIN
conn := utl_smtp.open_connection (mailhost, 25);
messag := 'DATE: '||to_char(sysdate, 'dd-mon-yy hh24:mi:ss')||crlf||
'FROM: <'||sender||'>'||crlf||
'SUBJECT: '||oggetto||crlf||
'TO: '||recipient||'; '
||recipient2||' '
||crlf||messaggio;
utl_smtp.helo(conn, mailhost);
utl_smtp.mail (conn, v_sender);
utl_smtp.rcpt (conn, recipient);
utl_smtp.rcpt (conn, recipient2);
utl_smtp.data(conn, messag);
utl_smtp.quit(conn);
EXCEPTION when utl_smtp.transient_error or utl_smtp.permanent_error then
utl_smtp.quit(conn);
raise_application_error (-20000,sqlerrm);
END;
How can modify this procedure in my case?
Thanks
Similar Messages
-
How to send mails to "CC" and "BCC" using receiver mail adapter dynamically
Hi,
Due to business requirement PI need to send mails dynamically to u201CCCu201D and u201CBCCu201D using receiver mail adapter.
We have an option to send mails to u201CTou201D dynamically, but are there any option to send mails u201CCCu201D and u201CBCCu201D dynamically.
Please some help to resolve the issue. Thanks
Regards,
Sreeramulu Konjeti.Hi Sreeramulu,
As mentioned by Lucas, you can use the UDF. Inn addition to that, you need to define the Variable Headers under Variable transport binding after enabling the Adapter Specific Message Attributes.
For the Enabling ASMA, follow the below steps and check for the variable attributes.
Select the Advanced tab page.
To save adapter-specific attributes in the message header of the XI message, select Use Adapter-Specific Message Attributes and Variable Transport Binding.
The following attributes in the message header are then available for processing:
○ User: (technical name: TServerLocation)
○ Authentication key: (technical name: TAuthKey)
The following mail header fields are available for processing:
○ From: (technical name: THeaderFROM)
○ To: (technical name: THeaderTO)
○ Cc: (technical name: THeaderCC)
○ Bcc: (technical name: THeaderBCC)
○ Subject: (technical name: THeaderSUBJECT)
○ Reference to the mail that is to be replied to: (technical name: THeaderIN-REPLY-TO)
○ Reply to: (technical name: THeaderREPLY-TO)
○ Mail client program: (technical name: THeaderX-MAILER)
○ Send confirmation of receipt: (technical name: THeaderDISPOSITION-NOTIFICATION-TO)
○ Priority: (technical name: THeaderPRIORITY)
○ Importance of message: (technical name: THeaderIMPORTANCE)
To transfer further header fields, set the relevant indicator for Variable Header. The technical names for the fields are XHeaderName1, XHeaderName2, and XHeaderName3.
The parameters are included in the mail header under the names specified here.
The attribute namespace for the adapter is http://sap.com/xi/XI/System/Mail.
Thanks, -
Dynamic file name of the attachment in sender mail adapter
Hi
I have configured a sender mail adapter which receives some attachments.
Right now the file name of the attachment is hardcoded to "MailAttachment-1" "MailAttachment-2" using the content-description from "AF_Modules/PayloadSwapBean" module.
I want to set it to dynamic ie. instead of "MailAttachment-1"... i want it with real name of the attach.
please suggest a solution w/o the need to develop a custom adapter module.
Thanks!
Regards,
Mariano.Thanks Prateek,
Now, i can see that the name of the original file is into the content type named as text/xml; name"name of the file.xml" when i send the email from outlook.
If i send it from hotmail, this is not happend.
Do you know why happend this?
If i always would have the original name inside the content type, my problem will be solved.
Edited by: Mariano Vidal on Feb 13, 2009 2:26 PM -
Dynamic 'Include Text' syntax not working in Send mail task.
Hi all,
I want to send some dynamic text via send mail task to agents.
I tried creating a standard text in SO10. In send mail task in Descriiption tab added the below syntax to call inculde text.
"INCLUDE ZTEST OBJECT TEXT ID ST LANGUAGE EN". This works and i can see the text in mail in my sap inbox.
Now when I try to add text using a variable as below it simply display the sytax and not the text in ZTEST.
"INCLUDE &VAR1& OBJECT TEXT ID ST LANGUAGE EN" *Where VAR1 = ZTEST.
Please let meknow if i am missing something.
Thanks
Edited by: Sunny80 on Oct 20, 2009 11:02 AM
Edited by: Sunny80 on Oct 20, 2009 11:04 AMHello ,
Please provide the details as how it is resolved so that others can follow.
thanks
srinivas. -
Send mail through dynamic action, but the subject line and content is blank
Hi all,
I'm facing one problem on sending mail throught dynamic action.
Whenever a new employee is hired, the system will trigger a mail to the administrator.
The mail can successfully reach the email address. But the title and the content of the mail are missing. I can receive an email with a PDF attchment. But when I open this PDF file, it's blank inside.
In t-code "SO10", I created a new mail text with name of Z_MAIL, for my mail, insteading of using the SAP standard one.
When I using the SAP standard mail text, it works and I can see the content. But even I copy and paste the exact the content of the standard one to my own new mail text, it will not work.
And I have to use my own customized mail text. So, is there any one knows about this issue? Any more setting I should do? Or is there some tricks?Hi,
I feel that something will be misiing in the coding.Even i faced the same problem earlier.for me it was text file as an attachment ,file was receiving but no data...the problem was i forget to add one option in objpack-head.
R u using the FM - SO_NEW_DOCUMENT_ATT_SEND_API1??
If so pls C the below codes for text file as an attachment.
DATA: objpack LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE.
DATA: objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE.
DATA: objbin LIKE solisti1 OCCURS 10 WITH HEADER LINE.
DATA: objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE.
DATA: reclist LIKE somlreci1 OCCURS 5 WITH HEADER LINE.
DATA: doc_chng LIKE sodocchgi1.
DATA: tab_lines LIKE sy-tabix.
Creating the document to be sent
doc_chng-obj_name = 'MESSAGE'.
doc_chng-obj_descr = 'ZHRI_GARN_EPC_COMM'.
objtxt = 'Program ZHRI_GARN_EPC_COMM has been executed successfully'.
APPEND objtxt.
objtxt = 'Error records passed to BDC session XPHRGARN01'.
APPEND objtxt.
DESCRIBE TABLE objtxt LINES tab_lines.
READ TABLE objtxt INDEX tab_lines.
doc_chng-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objtxt ).
Creating the entry for the compressed document
CLEAR objpack-transf_bin.
objpack-head_start = 1.
objpack-head_num = 0.
objpack-body_start = 1.
objpack-body_num = tab_lines.
objpack-doc_type = 'RAW'.
APPEND objpack.
Entering names in the distribution list
LOOP AT se_tech.
reclist-receiver = se_tech-low.
reclist-rec_type = 'U'.
APPEND reclist.
ENDLOOP.
Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = doc_chng
put_in_outbox = 'X'
commit_work = 'X'
TABLES
packing_list = objpack
object_header = objhead
contents_bin = objbin
contents_txt = objtxt
receivers = reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
operation_no_authorization = 4
OTHERS = 99.
Hope this will help u.
Regards,
Manoj. -
Sending mail of infotype record using dynamic actions
Hi
How can we send mail of info type record using dynamic actions if possible give me one example
Mail to me: [email protected]
Thanks & Regards
santhosh reddyHi..
Already Standard Entries exists for the same.. pls check T588Z -
Sending mails using dynamic actions
Hi
How we can send mails using dynamic actions.
Regards
SanthoshHi,
Sending mails is possible by using the feature M0001. This is to be coded in the dynamic action depending on the requirement with function code "M".
Hope this would help you to explore further. Incase of any specific query you can post back.
Regards
Tharak -
Send mail using Dynamic actions
Hello experts,
How to send a mail using Dynamic Actions??
Requirement : Lets say one employee is hired on 26th Aug, so after 10 days he will be confirmed. so on 8th day need to send a mail to concerned person reminding the confirmation date.
so how do i do that using dynamic actions??
Thanks in advance.
SaurabhHi,
In dynamic actions there is an option for calling sub-routine from any program or subroutine pool. So u can make subroutine for sending mail according to ur requirement. An call on th same from dynamic actions.
if u want sample code for this, pls let me know.
<removed_by_moderator>
Regards,
Ranjith
Edited by: Julius Bussche on Aug 26, 2008 3:25 PM -
Sending mail to multiple dynamic mail ids
Hi Everyone,
I have one query regarding sending mail to multiple table entry mail IDs. This table data I am getting from custom BO method vie multiline container element.
Now my problem is I am getting Multiple mail IDs to workflow container from BO but dont know how to send mails to those IDs and binding required for Send Mail step.
Thanks.Hello,
Please search before posting questions.
Please google 'sap workflow send mail to multiple recipients' and you will find many responses.
Let us know if there are any problems.
regards
Rick Bakker -
Changing layout at runtime, executing background job and sending mail inXLS
Hi
When i execute my program in foregroung by manually changing value of s_job = 'X' in debugging mode it is sending the correct XLS file via mail with all the data , whereas when i execute my program in backgroud mode it sends incomlete XLS file via mail, it has only first 2 records in any layout........can anybody please help in this regard....
program is as follows...
REPORT ZPMACR01_MD_MRP_100.
*& Report : ZPMACR01_MD_MRP_100
TABLES : MARA, MARC, MAKT, MBEW,MARD.
MAIL data declarations
TABLES : adr6 , sscrfields.
DATA: BEGIN OF mbody OCCURS 0,
message(100),
END OF mbody.
DATA: BEGIN OF addresses OCCURS 0,
addresses(100),
END Of addresses.
FIELD-SYMBOLS: <f> type ANY,
<tab> TYPE STANDARD TABLE,
<wa> type ANY.
DATA: count TYPE i value 0,
col_1 TYPE i.
DATA: new_table TYPE REF TO data, "pointer to dynamic table
new_line TYPE REF TO data. "pointer to work area of dynamic table
DATA: s_job TYPE c.
DATA: i_data_out_text TYPE string OCCURS 0 WITH HEADER LINE.
DATA: message TYPE string OCCURS 0 WITH HEADER LINE.
DATA: it_message TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
WITH HEADER LINE.
DATA: BEGIN OF it_attach OCCURS 0,
line(2650) TYPE c,
END OF it_attach.
DATA: t_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
t_hex LIKE solix OCCURS 0 WITH HEADER LINE,
t_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
w_cnt TYPE i,
w_sent_all(1) TYPE c,
w_doc_data LIKE sodocchgi1,
gd_error TYPE sy-subrc,
gd_reciever TYPE sy-subrc.
ALV data declarations
TYPE-POOLS: SLIS.
DATA : IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
IT_FIELDCAT2 TYPE LVC_T_FCAT,
IT_FIELDCAT_FIN TYPE LVC_T_FCAT,
IT_FIELDCAT3 TYPE SLIS_T_FIELDCAT_ALV,
itab1 TYPE SLIS_T_FIELDCAT_ALV,
W_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
W_REPID TYPE SY-REPID,
IT_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: is_fieldcat LIKE LINE OF it_fieldcat.
DATA: is_fieldcat2 LIKE LINE OF it_fieldcat2,
Is_FIELDCAT3 LIKE LINE OF it_fieldcat3.
Data: variant type DISVARIANT,
v_size LIKE sy-tabix.
ALV Data
DATA:
i_sort TYPE slis_t_sortinfo_alv,
v_lvc_title TYPE lvc_title,
v_repid LIKE sy-repid,
c_user_command TYPE slis_formname VALUE 'ALV_USER_COMMAND',
gt_list_top_of_page TYPE slis_t_listheader,
gt_list_end_of_list TYPE slis_t_listheader,
gs_layout TYPE slis_layout_alv,
gt_events TYPE slis_t_event,
gs_events type slis_alv_event,
gt_print TYPE slis_print_alv,
g_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
Selection Parameters
SELECTION-SCREEN BEGIN OF BLOCK B1.
SELECT-OPTIONS : SO_MATNR FOR MARA-MATNR OBLIGATORY.
SELECT-OPTIONS : SO_WERKS FOR MARC-WERKS.
SELECT-OPTIONS : SO_SPRAS FOR MAKT-SPRAS.
SELECT-OPTIONS : SO_BWKEY FOR MBEW-BWKEY.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_email TYPE somlreci1-receiver
default '[email protected]'.
SELECTION-SCREEN END OF BLOCK B2.
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-002.
PARAMETERS : SO_LAY TYPE DISVARIANT-VARIANT DEFAULT '/DEFAULT'.
SELECTION-SCREEN END OF BLOCK B3.
DATA Declarations.
Data : BEGIN OF ITab OCCURS 0,
manr type mara-matnr,
end of ITAB.
data : BEGIN OF IT_TABLE OCCURS 0,
MATNR TYPE MARA-MATNR,
MATKL TYPE MARA-MATKL,
MEINS TYPE MARA-MEINS,
MTART TYPE MARA-MTART,
AHDIS TYPE MARC-AHDIS,
AUSDT TYPE MARC-AUSDT,
AUTRU TYPE MARC-AUTRU,
BESKZ TYPE MARC-BESKZ,
BSTFE TYPE MARC-BSTFE,
BSTMA TYPE MARC-BSTMA,
BSTMI TYPE MARC-BSTMI,
BSTRF TYPE MARC-BSTRF,
BWSCL TYPE MARC-BWSCL,
DIBER TYPE MARC-DIBER,
DISGR TYPE MARC-DISGR,
DISLS TYPE MARC-DISLS,
DISMM TYPE MARC-DISMM,
DISPO TYPE MARC-DISPO,
DISPR TYPE MARC-DISPR,
DZEIT TYPE MARC-DZEIT,
EISBE TYPE MARC-EISBE,
EISLO TYPE MARC-EISLO,
EKGRP TYPE MARC-EKGRP,
FHORI TYPE MARC-FHORI,
FXHOR TYPE MARC-FXHOR,
KAUTB TYPE MARC-KAUTB,
KORDB TYPE MARC-KORDB,
KZAUS TYPE MARC-KZAUS,
LFGJA TYPE MARC-LFGJA,
LFMON TYPE MARC-LFMON,
LGRAD TYPE MARC-LGRAD,
LVORM TYPE MARC-LVORM,
MABST TYPE MARC-MABST,
MINBE TYPE MARC-MINBE,
MMSTA TYPE MARC-MMSTA,
MMSTD TYPE MARC-MMSTD,
MRPPP TYPE MARC-MRPPP,
MTVFP TYPE MARC-MTVFP,
NFMAT TYPE MARC-NFMAT,
PERKZ TYPE MARC-PERKZ,
PLIFZ TYPE MARC-PLIFZ,
PLVAR TYPE MARC-PLVAR,
PSTAT TYPE MARC-PSTAT,
QZGTP TYPE MARC-QZGTP,
RGEKZ TYPE MARC-RGEKZ,
RWPRO TYPE MARC-RWPRO,
SBDKZ TYPE MARC-SBDKZ,
SCHGT TYPE MARC-SCHGT,
SHFLG TYPE MARC-SHFLG,
SHPRO TYPE MARC-SHPRO,
SHZET TYPE MARC-SHZET,
SOBSL TYPE MARC-SOBSL,
STRGR TYPE MARC-STRGR,
TRAME TYPE MARC-TRAME,
UEETK TYPE MARC-UEETK,
UEETO TYPE MARC-UEETO,
UMLMC TYPE MARC-UMLMC,
UNETO TYPE MARC-UNETO,
USEQU TYPE MARC-USEQU,
VINT1 TYPE MARC-VINT1,
VINT2 TYPE MARC-VINT2,
VRBDT TYPE MARC-VRBDT,
VRBFK TYPE MARC-VRBFK,
VRBMT TYPE MARC-VRBMT,
VRBWK TYPE MARC-VRBWK,
VRMOD TYPE MARC-VRMOD,
WEBAZ TYPE MARC-WEBAZ,
WERKS TYPE MARC-WERKS,
WZEIT TYPE MARC-WZEIT,
DISKZ TYPE MARD-DISKZ,
LBSTF TYPE MARD-LBSTF,
LGORT TYPE MARD-LGORT,
LMINB TYPE MARD-LMINB,
LSOBS TYPE MARD-LSOBS,
MAKTX TYPE MAKT-MAKTX,
END OF IT_TABLE.
DATA: BEGIN OF IT_MARD OCCURS 0,
MATNR TYPE MARA-MATNR,
MATKL TYPE MARA-MATKL,
MEINS TYPE MARA-MEINS,
MTART TYPE MARA-MTART,
DISKZ TYPE MARD-DISKZ,
LBSTF TYPE MARD-LBSTF,
LGORT TYPE MARD-LGORT,
LMINB TYPE MARD-LMINB,
LSOBS TYPE MARD-LSOBS,
MAKTX TYPE MAKT-MAKTX,
END OF IT_MARD.
DATA: BEGIN OF IT_MBEW OCCURS 0,
MATNR TYPE MBEW-MATNR,
BKLAS TYPE MBEW-BKLAS,
SALK3 TYPE MBEW-SALK3,
PEINH TYPE MBEW-PEINH,
STPRS TYPE MBEW-STPRS,
VERPR TYPE MBEW-VERPR,
VPRSV TYPE MBEW-VPRSV,
END OF IT_MBEW.
data : BEGIN OF IT_FINAL0 occurs 0,
MATNR LIKE MARA-MATNR,
MATKL LIKE MARA-MATKL,
MEINS LIKE MARA-MEINS,
MTART LIKE MARA-MTART,
AHDIS LIKE MARC-AHDIS,
AUSDT LIKE MARC-AUSDT,
AUTRU LIKE MARC-AUTRU,
BESKZ LIKE MARC-BESKZ,
BSTFE LIKE MARC-BSTFE,
BSTMA LIKE MARC-BSTMA,
BSTMI LIKE MARC-BSTMI,
BSTRF LIKE MARC-BSTRF,
BWSCL LIKE MARC-BWSCL,
DIBER LIKE MARC-DIBER,
DISGR LIKE MARC-DISGR,
DISLS LIKE MARC-DISLS,
DISMM LIKE MARC-DISMM,
DISPO LIKE MARC-DISPO,
DISPR LIKE MARC-DISPR,
DZEIT LIKE MARC-DZEIT,
EISBE LIKE MARC-EISBE,
EISLO LIKE MARC-EISLO,
EKGRP LIKE MARC-EKGRP,
FHORI LIKE MARC-FHORI,
FXHOR LIKE MARC-FXHOR,
KAUTB LIKE MARC-KAUTB,
KORDB LIKE MARC-KORDB,
KZAUS LIKE MARC-KZAUS,
LFGJA LIKE MARC-LFGJA,
LFMON LIKE MARC-LFMON,
LGRAD LIKE MARC-LGRAD,
LVORM LIKE MARC-LVORM,
MABST LIKE MARC-MABST,
MINBE LIKE MARC-MINBE,
MMSTA LIKE MARC-MMSTA,
MMSTD LIKE MARC-MMSTD,
MRPPP LIKE MARC-MRPPP,
MTVFP LIKE MARC-MTVFP,
NFMAT LIKE MARC-NFMAT,
PERKZ LIKE MARC-PERKZ,
PLIFZ LIKE MARC-PLIFZ,
PLVAR LIKE MARC-PLVAR,
PSTAT LIKE MARC-PSTAT,
QZGTP LIKE MARC-QZGTP,
RGEKZ LIKE MARC-RGEKZ,
RWPRO LIKE MARC-RWPRO,
SBDKZ LIKE MARC-SBDKZ,
SCHGT LIKE MARC-SCHGT,
SHFLG LIKE MARC-SHFLG,
SHPRO LIKE MARC-SHPRO,
SHZET LIKE MARC-SHZET,
SOBSL LIKE MARC-SOBSL,
STRGR LIKE MARC-STRGR,
TRAME LIKE MARC-TRAME,
UEETK LIKE MARC-UEETK,
UEETO LIKE MARC-UEETO,
UMLMC LIKE MARC-UMLMC,
UNETO LIKE MARC-UNETO,
USEQU LIKE MARC-USEQU,
VINT1 LIKE MARC-VINT1,
VINT2 LIKE MARC-VINT2,
VRBDT LIKE MARC-VRBDT,
VRBFK LIKE MARC-VRBFK,
VRBMT LIKE MARC-VRBMT,
VRBWK LIKE MARC-VRBWK,
VRMOD LIKE MARC-VRMOD,
WEBAZ LIKE MARC-WEBAZ,
WERKS LIKE MARC-WERKS,
WZEIT LIKE MARC-WZEIT,
DISKZ LIKE MARD-DISKZ,
LBSTF LIKE MARD-LBSTF,
LGORT LIKE MARD-LGORT,
LMINB LIKE MARD-LMINB,
LSOBS LIKE MARD-LSOBS,
MAKTX LIKE MAKT-MAKTX,
END OF IT_FINAL0.
data : BEGIN OF IT_FINAL occurs 0,
MATNR LIKE MARA-MATNR,
MATKL LIKE MARA-MATKL,
MEINS LIKE MARA-MEINS,
MTART LIKE MARA-MTART,
AHDIS LIKE MARC-AHDIS,
AUSDT LIKE MARC-AUSDT,
AUTRU LIKE MARC-AUTRU,
BESKZ LIKE MARC-BESKZ,
BSTFE LIKE MARC-BSTFE,
BSTMA LIKE MARC-BSTMA,
BSTMI LIKE MARC-BSTMI,
BSTRF LIKE MARC-BSTRF,
BWSCL LIKE MARC-BWSCL,
DIBER LIKE MARC-DIBER,
DISGR LIKE MARC-DISGR,
DISLS LIKE MARC-DISLS,
DISMM LIKE MARC-DISMM,
DISPO LIKE MARC-DISPO,
DISPR LIKE MARC-DISPR,
DZEIT LIKE MARC-DZEIT,
EISBE LIKE MARC-EISBE,
EISLO LIKE MARC-EISLO,
EKGRP LIKE MARC-EKGRP,
FHORI LIKE MARC-FHORI,
FXHOR LIKE MARC-FXHOR,
KAUTB LIKE MARC-KAUTB,
KORDB LIKE MARC-KORDB,
KZAUS LIKE MARC-KZAUS,
LFGJA LIKE MARC-LFGJA,
LFMON LIKE MARC-LFMON,
LGRAD LIKE MARC-LGRAD,
LVORM LIKE MARC-LVORM,
MABST LIKE MARC-MABST,
MINBE LIKE MARC-MINBE,
MMSTA LIKE MARC-MMSTA,
MMSTD LIKE MARC-MMSTD,
MRPPP LIKE MARC-MRPPP,
MTVFP LIKE MARC-MTVFP,
NFMAT LIKE MARC-NFMAT,
PERKZ LIKE MARC-PERKZ,
PLIFZ LIKE MARC-PLIFZ,
PLVAR LIKE MARC-PLVAR,
PSTAT LIKE MARC-PSTAT,
QZGTP LIKE MARC-QZGTP,
RGEKZ LIKE MARC-RGEKZ,
RWPRO LIKE MARC-RWPRO,
SBDKZ LIKE MARC-SBDKZ,
SCHGT LIKE MARC-SCHGT,
SHFLG LIKE MARC-SHFLG,
SHPRO LIKE MARC-SHPRO,
SHZET LIKE MARC-SHZET,
SOBSL LIKE MARC-SOBSL,
STRGR LIKE MARC-STRGR,
TRAME LIKE MARC-TRAME,
UEETK LIKE MARC-UEETK,
UEETO LIKE MARC-UEETO,
UMLMC LIKE MARC-UMLMC,
UNETO LIKE MARC-UNETO,
USEQU LIKE MARC-USEQU,
VINT1 LIKE MARC-VINT1,
VINT2 LIKE MARC-VINT2,
VRBDT LIKE MARC-VRBDT,
VRBFK LIKE MARC-VRBFK,
VRBMT LIKE MARC-VRBMT,
VRBWK LIKE MARC-VRBWK,
VRMOD LIKE MARC-VRMOD,
WEBAZ LIKE MARC-WEBAZ,
WERKS LIKE MARC-WERKS,
WZEIT LIKE MARC-WZEIT,
DISKZ LIKE MARD-DISKZ,
LBSTF LIKE MARD-LBSTF,
LGORT LIKE MARD-LGORT,
LMINB LIKE MARD-LMINB,
LSOBS LIKE MARD-LSOBS,
MAKTX LIKE MAKT-MAKTX,
BKLAS LIKE MBEW-BKLAS,
SALK3 LIKE MBEW-SALK3,
PEINH LIKE MBEW-PEINH,
STPRS LIKE MBEW-STPRS,
VERPR LIKE MBEW-VERPR,
VPRSV LIKE MBEW-VPRSV,
ZXPRS LIKE MBEW-STPRS,
END OF IT_FINAL.
data : BEGIN OF IT_display occurs 0,
matnr LIKE MARA-MATNR,
maktx LIKE MAKT-MAKTX,
meins LIKE MARA-MEINS,
werks LIKE MARC-WERKS,
dispo LIKE MARC-DISPO,
dismm LIKE MARC-DISMM,
plifz LIKE MARC-PLIFZ,
webaz LIKE MARC-WEBAZ,
minbe LIKE MARC-MINBE,
shzet LIKE MARC-SHZET,
eisbe LIKE MARC-EISBE,
disls LIKE MARC-DISLS,
bstmi LIKE MARC-BSTMI,
bstma LIKE MARC-BSTMA,
bstfe LIKE MARC-BSTFE,
ZXPRS LIKE MBEW-STPRS,
peinh LIKE MBEW-PEINH,
salk3 LIKE MBEW-SALK3,
end of it_display.
ALV Layout Variant
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_lay.
PERFORM get_alv_layout_values.
SELECTION SCREEN.
AT SELECTION-SCREEN.
IF ( sscrfields-ucomm = 'SJOB' OR
sy-batch = 'X' ).
s_job = 'X'.
ENDIF.
select single matnr into itab from mara where matnr in so_matnr.
if sy-subrc <> 0.
message e001(zpal).
endif.
START-OF-SELECTION.
IF SO_LAY <> ' '.
VARIANT-REPORT = 'ZPMACR01_MD_MRP_100'.
VARIANT-VARIANT = SO_LAY.
else.
VARIANT-VARIANT = '/DEFAULT'.
ENDIF.
INITIALIZATION.
W_REPID = SY-REPID.
START-OF-SELECTION.
IF SO_LAY <> ' '.
VARIANT-REPORT = w_repid.
VARIANT-VARIANT = SO_LAY.
else.
VARIANT-VARIANT = '/DEFAULT'.
ENDIF.
SELECT
MARA~MATNR
MARA~MATKL
MARA~MEINS
MARA~MTART
MARC~AHDIS
MARC~AUSDT
MARC~AUTRU
MARC~BESKZ
MARC~BSTFE
MARC~BSTMA
MARC~BSTMI
MARC~BSTRF
MARC~BWSCL
MARC~DIBER
MARC~DISGR
MARC~DISLS
MARC~DISMM
MARC~DISPO
MARC~DISPR
MARC~DZEIT
MARC~EISBE
MARC~EISLO
MARC~EKGRP
MARC~FHORI
MARC~FXHOR
MARC~KAUTB
MARC~KORDB
MARC~KZAUS
MARC~LFGJA
MARC~LFMON
MARC~LGRAD
MARC~LVORM
MARC~MABST
MARC~MINBE
MARC~MMSTA
MARC~MMSTD
MARC~MRPPP
MARC~MTVFP
MARC~NFMAT
MARC~PERKZ
MARC~PLIFZ
MARC~PLVAR
MARC~PSTAT
MARC~QZGTP
MARC~RGEKZ
MARC~RWPRO
MARC~SBDKZ
MARC~SCHGT
MARC~SHFLG
MARC~SHPRO
MARC~SHZET
MARC~SOBSL
MARC~STRGR
MARC~TRAME
MARC~UEETK
MARC~UEETO
MARC~UMLMC
MARC~UNETO
MARC~USEQU
MARC~VINT1
MARC~VINT2
MARC~VRBDT
MARC~VRBFK
MARC~VRBMT
MARC~VRBWK
MARC~VRMOD
MARC~WEBAZ
MARC~WERKS
MARC~WZEIT
MARD~DISKZ
MARD~LBSTF
MARD~LGORT
MARD~LMINB
MARD~LSOBS
MAKT~MAKTX
INTO TABLE IT_TABLE
FROM MARA INNER JOIN MARC ON MARAMATNR = MARCMATNR
INNER JOIN MAKT ON MARAMATNR = MAKTMATNR
WHERE MARA~MATNR IN SO_MATNR
AND MARC~WERKS IN SO_WERKS
AND MAKT~SPRAS IN SO_SPRAS.
SELECT
MARA~MATNR
MARA~MATKL
MARA~MEINS
MARA~MTART
MARD~DISKZ
MARD~LBSTF
MARD~LGORT
MARD~LMINB
MARD~LSOBS
INTO TABLE IT_mard
FROM MARA INNER JOIN MARD ON MARAMATNR = MARDMATNR
WHERE MARA~MATNR IN SO_MATNR
and mard~werks in SO_WERKS.
SELECT MATNR BKLAS SALK3 PEINH STPRS VERPR VPRSV
INTO TABLE IT_MBEW FROM MBEW FOR ALL ENTRIES IN IT_TABLE WHERE MATNR =
IT_TABLE-MATNR AND BWKEY IN SO_BWKEY.
LOOP AT IT_TABLE.
MOVE-CORRESPONDING IT_TABLE TO IT_FINAL0.
READ TABLE IT_MARD WITH KEY MATNR = IT_TABLE-MATNR.
IF SY-SUBRC = 0 .
MOVE-CORRESPONDING IT_MARD TO IT_FINAL0.
ENDIF.
APPEND IT_FINAL0.
CLEAR IT_FINAL0.
ENDLOOP.
LOOP AT IT_FINAL0.
READ TABLE IT_MBEW WITH KEY MATNR = IT_final0-MATNR.
IF SY-SUBRC = 0 .
MOVE-CORRESPONDING IT_MBEW TO IT_FINAL.
IF IT_MBEW-VPRSV = 'S'.
MOVE IT_MBEW-STPRS TO IT_FINAL-ZXPRS.
ELSE.
MOVE IT_MBEW-VERPR TO IT_FINAL-ZXPRS.
ENDIF.
ENDIF.
MOVE-CORRESPONDING IT_FINAL0 TO IT_FINAL.
APPEND IT_FINAL.
CLEAR IT_FINAL.
ENDLOOP.
Default Layout
LOOP AT IT_FINAL.
Read table it_final with key matnr = SO_matnr.
Move it_final-MATNR to it_display-MATNR.
Move it_final-MAKTX to it_display-MAKTX.
Move it_final-MEINS to it_display-MEINS.
Move it_final-WERKS to it_display-WERKS.
Move it_final-DISPO to it_display-DISPO.
Move it_final-DISMM to it_display-DISMM.
Move it_final-PLIFZ to it_display-PLIFZ.
Move it_final-WEBAZ to it_display-WEBAZ.
Move it_final-MINBE to it_display-MINBE.
Move it_final-SHZET to it_display-SHZET.
Move it_final-EISBE to it_display-EISBE.
Move it_final-DISLS to it_display-DISLS.
Move it_final-BSTMI to it_display-BSTMI.
Move it_final-BSTMA to it_display-BSTMA.
Move it_final-BSTFE to it_display-BSTFE.
MOVE it_final-ZXPRS to it_display-ZXPRS.
Move it_final-PEINH to it_display-PEINH.
Move it_final-SALK3 to it_display-SALK3.
Append it_display.
endloop.
data: v_data type c value ' '.
if it_display is initial.
v_data = ' '.
else.
v_data = 'X'.
endif.
END-OF-SELECTION.
END-OF-SELECTION.
if s_job = 'X'.
perform execute_back.
else.
perform execute_fore.
endif.
FORM execute_fore *
Form execute_fore.
*& Form REUSE_ALV_FIELDCATALOG_MERGE
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = W_REPID
I_INTERNAL_TABNAME = 'IT_FINAL'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = W_REPID
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = IT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*& Form DISPLAY_ALV_REPORT
Display report using ALV grid
*IF SO_LAY <> ' '.
VARIANT-VARIANT = SO_LAY.
*endif.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = W_REPID
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
I_CALLBACK_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_END_OF_LIST = ' '
I_STRUCTURE_NAME =
I_BACKGROUND_ID = ' '
I_GRID_TITLE =
I_GRID_SETTINGS =
IS_LAYOUT = IT_LAYOUT
IT_FIELDCAT = IT_FIELDCAT[]
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = 'X'
IS_VARIANT = VARIANT
IT_EVENTS =
IT_EVENT_EXIT =
IS_PRINT =
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
IT_ALV_GRAPHICS =
IT_ADD_FIELDCAT =
IT_HYPERLINK =
I_HTML_HEIGHT_TOP =
I_HTML_HEIGHT_END =
IT_EXCEPT_QINFO =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = IT_FINAL
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
endform.
FORM execute_back *
FORM execute_back.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = W_REPID
I_INTERNAL_TABNAME = 'IT_FINAL'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = W_REPID
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = IT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER = ' '
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = W_REPID
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'
I_CALLBACK_HTML_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_END_OF_LIST = ' '
I_STRUCTURE_NAME =
I_BACKGROUND_ID = ' '
I_GRID_TITLE =
I_GRID_SETTINGS =
IS_LAYOUT =
IT_FIELDCAT = it_fieldcat[]
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = 'X'
IS_VARIANT = variant
IT_EVENTS = gt_events[]
IT_EVENT_EXIT =
IS_PRINT =
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
I_HTML_HEIGHT_TOP = 0
I_HTML_HEIGHT_END = 0
IT_ALV_GRAPHICS =
IT_HYPERLINK =
IT_ADD_FIELDCAT =
IT_EXCEPT_QINFO =
IR_SALV_FULLSCREEN_ADAPTER =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = it_final
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
*IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*ENDIF.
endform.
form top_of_page.
CALL FUNCTION 'REUSE_ALV_GRID_LAYOUT_INFO_GET'
IMPORTING
ES_LAYOUT =
ET_FIELDCAT = IT_FIELDCAT3[]
ET_SORT =
ET_FILTER =
ES_GRID_SCROLL =
ES_VARIANT = VARIANT
ET_MARKED_COLUMNS =
ET_FILTERED_ENTRIES =
ET_FIELDCAT_BACKEND =
ES_PRINT =
EXCEPTIONS
NO_INFOS = 1
PROGRAM_ERROR = 2
OTHERS = 3
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
clear count.
LOOP AT IT_FIELDCAT3 into is_fieldcat3 where no_out eq space.
*move-corresponding is_fieldcat3 to is_fieldcat2.
move: is_fieldcat3-fieldname to is_fieldcat2-fieldname,
is_fieldcat3-ref_fieldname to is_fieldcat2-ref_field,
is_fieldcat3-ref_tabname to is_fieldcat2-ref_table,
is_fieldcat3-seltext_l to is_fieldcat2-coltext,
is_fieldcat3-no_out to is_fieldcat2-no_out,
is_fieldcat3-col_pos to is_fieldcat2-col_pos.
*move:
is_fieldcat3-row_pos to is_fieldcat2-row_pos,
is_fieldcat3-col_pos to is_fieldcat2-col_pos,
is_fieldcat3-fieldname to is_fieldcat2-fieldname,
is_fieldcat3-tabname to is_fieldcat2-tabname,
is_fieldcat3-outputlen to is_fieldcat2-outputlen,
is_fieldcat3-no_out to is_fieldcat2-no_out,
is_fieldcat3-seltext_l to is_fieldcat2-coltext,
is_fieldcat3-ref_fieldname to is_fieldcat2-ref_field,
is_fieldcat3-ref_tabname to is_fieldcat2-ref_table,
is_fieldcat3-DDIC_OUTPUTLEN to is_fieldcat2-DD_OUTLEN,
is_fieldcat3-datatype to is_fieldcat2-datatype,
is_fieldcat3-inttype to is_fieldcat2-inttype,
is_fieldcat3-INTLEN to is_fieldcat2-INTLEN.
APPEND IS_FIELDCAT2 TO IT_FIELDCAT2.
*count = count + 1.
ENDLOOP.
loop at it_fieldcat2 into is_fieldcat2.
if is_fieldcat2-no_out = 'X'.
delete it_fieldcat2 index sy-tabix.
else.
count = count + 1.
endif.
endloop.
describe table it_fieldcat2 lines count.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fieldcat2[]
IMPORTING
ep_table = new_table.
ASSIGN new_table->* TO <tab>.
CREATE DATA new_line LIKE LINE OF <tab>.
ASSIGN new_line->* TO <wa>.
*-- Perform to build table for attachment data
PERFORM build_xls_data_table.
*-- Perform to populate e-mail message
PERFORM populate_email_message_body.
*-- Perform to send mail
PERFORM send_file_as_email_attachment.
*-- Perform to Instruct mail send program for SAPCONNECT to send email.
PERFORM initiate_mail_execute_program.
ENDFORM.
*& Form build_xls_data_table
form build_xls_data_table.
data: char_var(30) type C,
num_var(10) type n.
CONSTANTS: con_cret TYPE x VALUE '0D', "NEW LINE
tabchar TYPE x VALUE '09'. "tab
loop at it_fieldcat2 into is_fieldcat2.
concatenate it_attach is_fieldcat2-coltext
into it_attach separated by tabchar.
endloop.
CONCATENATE con_cret it_attach INTO it_attach.
APPEND it_attach.
CLEAR it_attach.
field-symbols: <t> type ANY.
LOOP AT it_final.
col_1 = 1.
do count times.
Assign component col_1 of structure <wa> to <f>.
read table it_fieldcat2 into is_fieldcat2 with key col_pos = col_1.
loop at it_fieldcat into is_fieldcat.
if is_fieldcat-fieldname = is_fieldcat2-fieldname.
assign component is_fieldcat-col_pos of structure it_final to <t>.
exit.
endif.
endloop.
<f> = <t>.
clear <t>.
col_1 = col_1 + 1.
enddo.
append <wa> to <tab>.
endloop.
loop at <tab> into <wa>.
col_1 = 1.
do count times.
Assign component col_1 of structure <wa> to <f>.
move <f> to char_var.
concatenate it_attach char_var
into it_attach separated by tabchar.
col_1 = col_1 + 1.
enddo.
CONCATENATE con_cret it_attach INTO it_attach.
APPEND it_attach.
CLEAR it_attach.
endloop.
ENDFORM.
FORM send_file_as_email_attachment.
DATA:
ld_mtitle LIKE sodocchgi1-obj_descr,
ld_email LIKE somlreci1-receiver,
ld_format TYPE so_obj_tp ,
ld_attdescription TYPE so_obj_nam ,
ld_attfilename TYPE so_obj_des ,
ld_sender_address LIKE soextreci1-receiver,
ld_sender_address_type LIKE soextreci1-adr_typ.
ld_email = p_email.
ld_mtitle = text-003.
ld_format = 'XLS'.
ld_attdescription = ' '.
ld_attfilename = 'DATA'.
ld_sender_address = ' '.
ld_sender_address_type = ' '.
Fill the document data.
w_doc_data-doc_size = 1.
Populate the subject/generic message attributes
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle .
w_doc_data-sensitivty = 'F'.
Fill the document data and get size of attachment
CLEAR w_doc_data.
READ TABLE it_attach INDEX w_cnt.
w_doc_data-doc_size =
( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle.
w_doc_data-sensitivty = 'F'.
LOOP AT it_attach.
MOVE it_attach(255) TO t_hex.
APPEND t_hex.
MOVE it_attach+255(255) TO t_hex.
APPEND t_hex.
MOVE it_attach+510(255) TO t_hex.
APPEND t_hex.
MOVE it_attach+765(235) TO t_hex.
APPEND t_hex.
MOVE it_attach+765(255) TO t_hex.
APPEND t_hex.
MOVE it_attach+1020(255) TO t_hex.
APPEND t_hex.
MOVE it_attach+1275(255) TO t_hex.
APPEND t_hex.
MOVE it_attach+1530(255) TO t_hex.
APPEND t_hex.
MOVE it_attach+1785(255) TO t_hex.
APPEND t_hex.
MOVE it_attach+2040(255) TO t_hex.
APPEND t_hex.
MOVE it_attach+2295(255) TO t_hex.
APPEND t_hex.
MOVE it_attach+2550(100) TO t_hex.
APPEND t_hex.
ENDLOOP.
Describe the body of the message
CLEAR t_packing_list.
REFRESH t_packing_list.
t_packing_list-transf_bin = space.
t_packing_list-head_start = 1.
t_packing_list-head_num = 0.
t_packing_list-body_start = 1.
DESCRIBE TABLE it_message LINES t_packing_list-body_num.
t_packing_list-doc_type = 'RAW'.
APPEND t_packing_list.
Create attachment notification
t_packing_list-transf_bin = 'X'.
t_packing_list-head_start = 1.
t_packing_list-head_num = 1.
t_packing_list-body_start = 1.
DESCRIBE TABLE t_hex LINES t_packing_list-body_num.
t_packing_list-doc_type = ld_format.
t_packing_list-obj_descr = ld_attdescription.
t_packing_list-obj_name = ld_attfilename.
t_packing_list-doc_size = t_packing_list-body_num * 255.
APPEND t_packing_list.
Add the recipients email address
CLEAR t_receivers.
REFRESH t_receivers.
t_receivers-receiver = ld_email.
t_receivers-rec_type = 'U'.
t_receivers-com_type = 'INT'.
t_receivers-notif_del = 'X'.
t_receivers-notif_ndel = 'X'.
APPEND t_receivers.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = w_doc_data
put_in_outbox = 'X'
sender_address = ld_sender_address
sender_address_type = ld_sender_address_type
IMPORTING
sent_to_all = w_sent_all
TABLES
packing_list = t_packing_list
contents_txt = it_message
contents_hex = t_hex
receivers = t_receivers
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 <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ld_error = sy-subrc.
LOOP AT t_receivers.
ld_receiver = t_receivers-retrn_code.
ENDLOOP.
ENDFORM. "SEND_FILE_AS_EMAIL_ATTACHMENT
*& Form INITIATE_MAIL_EXECUTE_PROGRAM
Instructs mail send program for SAPCONNECT to send email.
FORM initiate_mail_execute_program.
WAIT UP TO 2 SECONDS.
SUBMIT rsconn01 WITH mode = 'INT'
WITH output = 'X'
AND RETURN.
ENDFORM. " INITIATE_MAIL_EXECUTE_PROGRAM
*& Form POPULATE_EMAIL_MESSAGE_BODY
Populate message body text
FORM populate_email_message_body.
REFRESH it_message.
it_message = text-004.
APPEND it_message.
CONCATENATE SY-DATUM 'to' SY-DATUM INTO it_message SEPARATED BY
space.
APPEND it_message.
ENDFORM. " POPULATE_EMAIL_MESSAGE_BODY
*& Form get_alv_layout_values
FORM get_alv_layout_values.
variant-report = w_repid.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = variant
i_save = 'A'
IMPORTING
es_variant = variant
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
CHECK sy-subrc = 0.
so_lay = variant-variant.
ENDFORM. " get_alv_layout_valuesHi Arpit,
Take a look at the documentation of FM 'SO_DOCUMENT_SEND_API1' for parameter PACKING_LIST. I think you should set t_packing_list-head_num to a different value than 0 for the second attachment.
Regards,
John. -
Rename the attachment of the Sender mail adapter
Hello Everyone,
i have Mail to file scenario. There is an attachment in mail and this file needs to be renamed and dropped in FTP server.
is it possible to read the attachment and then rename it .
How to achieve this solution because i could not find ASMA in sender mail adapter . so could not use Dynamic configuration.
Regards,
Ravi
Edited by: Ravi Maheshwari on Feb 16, 2012 1:50 PMThis blog could help you
http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/6107 -
Sender Mail Adapter ASMA issue - due to limitation of length upto 200 only.
Hi,
I have a scenario where i have to pull the emails from the mail server using sender mail adpater with XIPAYLOAD as message protocol.
Also i am setting the "Set Adapter Setting Messgae Attributes" for retrieving values form header such as SHeaderCC etc..
I use dynamic config in the mapping to get those values.
The Scenario works fine, but when the cc length is more that 200, i am not getting any value in the inbound messgae to mapping.
In SAP help, it says, "The length of the attribute value is defined by the XI message protocol. Values can be a maximum of 200 characters long. If, for example, you assign longer values in the mapping or adapter modules then this can lead to processing errors at runtime or the values are shortened to 200 characters. This shortening can also lead to a processing error. The processing error that occurs depends on the components that access the attributes."
In my case, the cc is empty if the length is more that 200.
Any idea how to tackle this issue? I think even writng the sender adapter module wont solve the issue as the any attribute lenght inthe message ehader cannot be greater than 200.
All ideas are welcome.
Regards,
Manikandan RHi
As you said this error will occur when the mail messages with header attributes containing the values more than 200 chars. By including the adapter module u2013 DynamicConfigurationBean (valuelength) in the configuration part - Advanced you can avoid this error.
Processing Sequence:
AF_Modules/DynamicConfigurationBean
Module Configuration
dc.valueLength 200
Note:
This module will remove the header attributes if the value is > 200.
Regards
Ramg -
Sender mail adapter - attachment name
Hi there
We have configured a sender email adapter to receive text/csv attachments and save them to a file system. What we are having a problem with is reading the attachment name. So we are using Dynamis Configuration to create the file name using the subject line - Which is not ideal. Ideally we would like to use the same name as the origianl attachment but haven't found any way of doing that. We even tried using Content-type in the Variable Header (XHeaderName1) suing variable transport binding but it doesn't show up in the Dynamic Config part of the SOAP message.
Is there any way of reading the name of the file attachment? We are on PI release 7.0.
Any help would be appreciated.
Cheers
SalilHi Vitor
There are 2 scenarios that I can think of -
1. You are saving the email attachment as a file. In that case use step 3 in the earlier reply to get the attachment name and save the file witht that name.
2. You are sending the XML straight to a receiver using HTTP, IDOC, JDBC etc. in which case you would need the attachment name much earlier that step 3. For that I guess you would have to write another adapter module on the sender mail adapter(at Position 3 where position1 = payloadswap bean, 2 = custom module to get the attachment name) and add an xml tag to your incoming message. These adapter modules are really powerful and are like user exits in ABAP. In that case you would have to change the Data Type in the Integration repository to reflect that extra tag. Here is some code from a module we wrote to totally change the structure of the xml coming in. The key thing to remember is this module is that you can read the whole message byte by byte. There might be smarter ways of doing it (like using the SAP XML parser factory class) but since I'm not a Java programmer I stuck to the basics. Here's the code( you could also look at the example given in sap help where they remove (or add I'm not sure) CR(carriage return) from CRLF (CR Line feed).
Created on Aug 8, 2007
To change the template for this generated file go to
Window>Preferences>Java>Code Generation>Code and Comments
package jdbcPackage;
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import com.sap.aii.af.mp.module.*;
import com.sap.aii.af.ra.ms.api.*;
@author Salil.Mehta Soltius NZ Ltd
To change the template for this generated type comment go to
Window>Preferences>Java>Code Generation>Code and Comments
public class jdbcClass implements SessionBean, Module {
private SessionContext myContext;
public void ejbRemove() {
public void ejbActivate() {
public void ejbPassivate() {
public void setSessionContext(SessionContext context) {
myContext = context;
public void ejbCreate() throws CreateException {
public ModuleData process(
ModuleContext moduleContext,
ModuleData inputModuleData)
throws ModuleException {
// put your code here
try {
Message msg = (Message) inputModuleData.getPrincipalData();
XMLPayload payload = msg.getDocument();
String payEnc = payload.getEncoding();
byte[] payByte = payload.getContent();
byte[] payByteOut = new byte[payByte.length];
byte[] payByteTemp = new byte[payByte.length];
int i;
int j;
int actualCount = 0;
char xmlTagFound = ' ';
char endXmlTagFound = ' ';
char tagFound = ' ';
System.arraycopy(payByte, 0, payByteTemp, 0, payByte.length);
// Step 1 - Conversions
// convert "< to <" and "> to >"
// convert " to "
// This will remove any carriage returns and line feeds
// and the <XML* and </XML* tags plus the <row> and </row> tags
for (i = 0; i < payByte.length; i++) {
// convert < to < and > to >
if (payByteTemp<i> == '&') {
if (payByteTemp[i + 1] == 'l') {
if (payByteTemp[i + 2] == 't') {
if (payByteTemp[i + 3] == ';') {
payByteTemp<i> = '<';
payByteTemp[i + 1] = '\n';
payByteTemp[i + 2] = '\n';
payByteTemp[i + 3] = '\n';
if (payByteTemp<i> == '&') {
if (payByteTemp[i + 1] == 'g') {
if (payByteTemp[i + 2] == 't') {
if (payByteTemp[i + 3] == ';') {
payByteTemp<i> = '>';
payByteTemp[i + 1] = '\n';
payByteTemp[i + 2] = '\n';
payByteTemp[i + 3] = '\n';
if (payByteTemp<i> == '&') {
if (payByteTemp[i + 1] == 'q') {
if (payByteTemp[i + 2] == 'u') {
if (payByteTemp[i + 3] == 'o') {
if (payByteTemp[i + 4] == 't') {
if (payByteTemp[i + 5] == ';') {
payByteTemp<i> = '"';
payByteTemp[i + 1] = '\n';
payByteTemp[i + 2] = '\n';
payByteTemp[i + 3] = '\n';
payByteTemp[i + 4] = '\n';
payByteTemp[i + 5] = '\n';
// This will take in the initial xml declaration from the Byte array
// And we also don't want the stuff after the xml declaration till
// we reach the first <row> tag
if (xmlTagFound == ' ') {
if (payByteTemp<i> == '>') {
xmlTagFound = 'X';
payByteOut[actualCount++] = payByteTemp<i>;
if (xmlTagFound == 'X') {
payByteOut[actualCount++] = '\r';
continue;
if (xmlTagFound == 'X') {
if (payByteTemp<i> == '<') {
if (payByteTemp[i + 1] == 'r') {
if (payByteTemp[i + 2] == 'o') {
if (payByteTemp[i + 3] == 'w') {
if (payByteTemp[i + 4] == '>') {
xmlTagFound = 'Y';
} else {
continue;
} else {
continue;
} else {
continue;
} else {
continue;
} else {
continue;
// Carriage return and line feed
if ((payByteTemp<i> == '\r') || (payByteTemp<i> == '\n')) {
continue;
// <XML_*> tag
if (payByteTemp<i> == '<') {
if (payByteTemp[i + 1] == 'X') {
if (payByteTemp[i + 2] == 'M') {
if (payByteTemp[i + 3] == 'L') {
tagFound = 'X';
endXmlTagFound = ' ';
continue;
// </XML_*> tag
if (payByteTemp<i> == '<') {
if (payByteTemp[i + 1] == '/') {
if (payByteTemp[i + 2] == 'X') {
if (payByteTemp[i + 3] == 'M') {
if (payByteTemp[i + 4] == 'L') {
tagFound = 'X';
endXmlTagFound = 'X';
continue;
// <row> tag
if (payByteTemp<i> == '<') {
if (payByteTemp[i + 1] == 'r') {
if (payByteTemp[i + 2] == 'o') {
if (payByteTemp[i + 3] == 'w') {
if (payByteTemp[i + 4] == '>') {
tagFound = 'X';
continue;
// </row> tag
if (payByteTemp<i> == '<') {
if (payByteTemp[i + 1] == '/') {
if (payByteTemp[i + 2] == 'r') {
if (payByteTemp[i + 3] == 'o') {
if (payByteTemp[i + 4] == 'w') {
if (payByteTemp[i + 5] == '>') {
tagFound = 'X';
continue;
if ((payByteTemp<i> == '>') && (tagFound == 'X')) {
tagFound = ' ';
continue;
if (tagFound == ' ') {
if (endXmlTagFound == 'X') {
continue;
payByteOut[actualCount++] = payByteTemp<i>;
byte[] payByteExp = new byte[actualCount];
System.arraycopy(payByteOut, 0, payByteExp, 0, actualCount);
payload.setContent(payByteExp);
msg.setDocument(payload);
inputModuleData.setPrincipalData(msg);
} catch (Exception e) {
ModuleException me = new ModuleException(e);
throw me;
return inputModuleData; -
Problems with sender mail adapter
Hi XI Gurus
We have gone through a lot of blogs and searched a lot on the XI forum on how to configure the sender mail adapter with attachments but we still can't get it working at our site. Here are the issues -
1. When we define our data type in the IR as let's say out_email_dt with namespace "http://www.xyz.com" the mapping fails. In the monitor(SXMB_MONI) the message from the sender mail adapter comes in like this -
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
- <!-- Request Message Mapping
-->
<xim:Mail xmlns:xim="http://sap.com/xi/XI/Mail/30" encoding="quoted-printable">
<Subject>test 10</Subject>
<From>"Test User" <[email protected]></From>
<To>"XI Test Account" <[email protected]></To>
<Content_Type>text/plain;charset="us-ascii"</Content_Type>
<Date>2007-05-08T05:34:38Z</Date>
<Message_ID><[email protected]></Message_ID>
<Content>This is the voice of the Mysterons=0A</Content>
</xim:Mail>
Question 1 - do we have to define our data type as "Mail" under the namespace "http://sap.com/xi/XI/Mail/30".
Question 2 - If you look at the content of the <From>,<To>,<Message_ID> tags you will see that there is content with <> tags which is causing the message mapping to fail. Is there a way of telling XI that they are not xml tags but part of some other tags?
2. Also the PayloadSwapBean doesn't seem to swap the payload to be the attachment.
3. Can we use masks in the PayloadSwapBean for attachment names like "." as we don't know what the file name is going to be as we have multiple partners who will be sending emails to the same address and with different file formats.
Thanks in advance.
SalilHi,
>>>>Question 1 - do we have to define our data type as "Mail" under the namespace "http://sap.com/xi/XI/Mail/30".
do exactly as shown in my blog:
/people/michal.krawczyk2/blog/2005/03/07/mail-adapter-xi--how-to-implement-dynamic-mail-address
>>>>2. Also the PayloadSwapBean doesn't seem to swap the payload to be the attachment.
do similarly as shown in my blog:
/people/michal.krawczyk2/blog/2005/12/18/xi-sender-mail-adapter--payloadswapbean--step-by-step
the everything will work
Regards,
michal
<a href="/people/michal.krawczyk2/blog/2005/06/28/xipi-faq-frequently-asked-questions"><b>XI / PI FAQ - Frequently Asked Questions</b></a> -
SQL Server Reporting Services Subscriptions - Failure sending mail
Hello All,
I am having a problem with using subscriptions to send my reporting services report by email.
Getting the following error:
Failure sending mail: The message could not be sent to the SMTP server. The transport error code was 0x800ccc6d. The server response was 552 Error: message too large
While browsing for other reports in the report manager(reports created by others staffs), i could find that these reports were sent by email successfully.
So not understanding why mine has a problem. logically it could be that the report is too big?
Anybody has a solution or suggestion?
Thanking you in advanceHi LenitaS,
For first question, we can check the item "IncludeLink" to embed the link in the mail. Or, embed the link the manually by putting a link in the "Comment" field. The URL should be a standard URL Access:
http://<reportserver>/reprotserver?/reportpath&rc:format=<format>
For the second question, you are right. We can follow these setps to work around the issue:
1.Create a file shared subscription, save the export to a shared folder.
2.Create a E-Mail delivery subscription, embed the file's path in the mail. We can set the file's path in "Comment" field of the E-Mail delivery. The path should be someone like this:
\\<sharedfolder>\<export report>
In this case, the exported report's name cannot be dynamic.
If there is anything unclear, please feel free to ask.
Thanks,
Jin ChenJin Chen - MSFT
Maybe you are looking for
-
Problem with creating my own class...
Hi all, Purpose with this program: I want to create my own class StringThing which take a string parameter and transform the content toUpperCase(). I have created a simple class StringThing which look like this: class StringThing { public String uppe
-
ORA-31495 error in synchronous change table on "string"."string"
IN ORACLE 9I TABLE COLUMN DATA TYPE VARCHAR2 16 WHEN UPDATE COLUMN VALUE WITH 11 CHARACTERS IT GIVES ERROR ORA-31495 error in synchronous change table on "string"."string" ORA-01401 value too large for column IF I UPDATE COLUMN VALUE UPTO 10 CHARACTE
-
Retrieval of xmltype data into java
Hi Right now we are facing an issue xmltype retrieval from oracle 10g to java. I used xmltype column.getClobval() to get the xml content, but unable to do the parse to get the xml data. So i tried getStringval(), getting the xml content as string for
-
Dear all, our Apple Network consists of one Apple Lion 10.7.2 Server based on an Xserve Xeon Server, some very New iMacs running Lion, some eMacs running MacOS 10.5.8 and 10.4.11 and some old iMacs running 10.4.11. We're using OpenDirectory, Fileshar
-
Why should we associate attribute dimension to base sparse dimension only
hi experts, I have query, please suggest that. Why should we associate attribute dimension to base sparse dimension only ? any reason is there. thanks in advance