Create SR with Attachment using WSDL
Anybody knows how to create a SR on CRMOD, with an Attachment consuming WSDL?
Dear Dmitry Rassakhatsky
Can you please elaborate what you are trying to achive using BAPI_DOCUMENT_CREATE02 and SAP XI.
We would be in better position to suggest solution.
Also most of us will not be able to understand Technical ABAP so request you to provide detail scenario.
With Warm Regards
Mangesh Pande
Similar Messages
-
Create PO with attachement using BAPI_POEC_CREATE
I'm using bapi BAPI_POEC_CREATE to create a PO in SRM but i also need to add an attachment.
The bapi has parameter I_PO_ATTACH but i need an URL for the attachment, what do i need to do in order to upload the attachment and get the URL?
Thank you in advance.
Regards,
Pedro.anyone?
-
HOW TO SEND A HEBREW EMAIL WITH ATTACHMENT USING DEMO_MAIL
Hello All,
This is Not a question , just attaching something I've implemented and might be interesting for few of us,
This package I'm attaching allows to send Hebrew Language email + attaching files to it.
This package is based on demo_mail package (combined here but you can search at google for more example information if needed).
My Package is supplied as is , for any specific information regarding it , please contact me directly at : [email protected] or POST here.
* Please also note , that this package allow file to be attach via URL (meaning you will have to define a link to this file, if you would like to implement a link to a local file , e.g : c:\temp\myfile , you will have to customize the package your self with database directories option etc ...)
First I will attach an example of how to use it :
==================================
begin
demo_mail_heb.send_html_mail_attach(p_sender => '[email protected]',
p_recipients => '[email protected]',
p_subject => 'שלום וברכה עולם',
p_data => '<hr><b>בוקר טוב</b><hr>',
p_file_name => 'but_choose_file.gif',
p_file_mime_type => 'application/pdf',
p_file_URL => 'http://10.172.246.160:7777/i/but_choose_file.gif');
end;
Second Here is the Package (please note you will have to modify few settings in order to enable it , such as mail server address ..etc)
======================================================================================
CREATE OR REPLACE PACKAGE demo_mail_heb IS
----------------------- Customizable Section -----------------------
-- Customize the SMTP host, port and your domain name below.
smtp_host VARCHAR2(256) := 'mail.oracle.com';
smtp_port PLS_INTEGER := 25;
smtp_domain VARCHAR2(256) := 'oracle.com';
-- Customize the signature that will appear in the email's MIME header.
-- Useful for versioning.
MAILER_ID CONSTANT VARCHAR2(256) := 'Mailer by Oracle UTL_SMTP';
--------------------- End Customizable Section ---------------------
-- A unique string that demarcates boundaries of parts in a multi-part email
-- The string should not appear inside the body of any part of the email.
-- Customize this if needed or generate this randomly dynamically.
BOUNDARY CONSTANT VARCHAR2(256) := '-----7D81B75CCC90D2974F7A1CBD';
FIRST_BOUNDARY CONSTANT VARCHAR2(256) := '--' || BOUNDARY || utl_tcp.CRLF;
LAST_BOUNDARY CONSTANT VARCHAR2(256) := '--' || BOUNDARY || '--' ||
utl_tcp.CRLF;
-- A MIME type that denotes multi-part email (MIME) messages.
MULTIPART_MIME_TYPE CONSTANT VARCHAR2(256) := 'multipart/mixed; boundary="'||
BOUNDARY || '"';
MAX_BASE64_LINE_WIDTH CONSTANT PLS_INTEGER := 76 / 4 * 3;
-- Sent clear Html Email
procedure send_html_mail (p_sender in varchar2 default null,
p_recipients in varchar2 default null,
p_subject in varchar2 default null,
p_data in varchar2 default null,
p_mime_type in varchar2 default 'text/html; charset=windows-1255');
-- Sent Html Email with Attachment
procedure send_html_mail_attach (p_sender in varchar2 default null,
p_recipients in varchar2 default null,
p_subject in varchar2 default null,
p_data in varchar2 default '<b>áå÷ø èåá òåìí - áãé÷ä</b',
p_mime_type in varchar2 default demo_mail_heb.MULTIPART_MIME_TYPE,
p_file_name in varchar2 default 'but_choose_file.gif',
p_file_mime_type in varchar2 default 'application/pdf',
p_file_URL in varchar2 default 'http://10.172.246.160:7777/i/but_choose_file.gif');
-- A simple email API for sending email in plain text in a single call.
-- The format of an email address is one of these:
-- someone@some-domain
-- "Someone at some domain" <someone@some-domain>
-- Someone at some domain <someone@some-domain>
-- The recipients is a list of email addresses separated by
-- either a "," or a ";"
PROCEDURE mail(sender IN VARCHAR2,
recipients IN VARCHAR2,
subject IN VARCHAR2,
message IN VARCHAR2);
-- Extended email API to send email in HTML or plain text with no size limit.
-- First, begin the email by begin_mail(). Then, call write_text() repeatedly
-- to send email in ASCII piece-by-piece. Or, call write_mb_text() to send
-- email in non-ASCII or multi-byte character set. End the email with
-- end_mail().
FUNCTION begin_mail(sender IN VARCHAR2,
recipients IN VARCHAR2,
subject IN VARCHAR2,
mime_type IN VARCHAR2 DEFAULT 'text/plain',
priority IN PLS_INTEGER DEFAULT NULL)
RETURN utl_smtp.connection;
-- Write email body in ASCII
PROCEDURE write_text(conn IN OUT NOCOPY utl_smtp.connection,
message IN VARCHAR2);
-- Write email body in non-ASCII (including multi-byte). The email body
-- will be sent in the database character set.
PROCEDURE write_mb_text(conn IN OUT NOCOPY utl_smtp.connection,
message IN VARCHAR2);
-- Write email body in binary
PROCEDURE write_raw(conn IN OUT NOCOPY utl_smtp.connection,
message IN RAW);
-- APIs to send email with attachments. Attachments are sent by sending
-- emails in "multipart/mixed" MIME format. Specify that MIME format when
-- beginning an email with begin_mail().
-- Send a single text attachment.
PROCEDURE attach_text(conn IN OUT NOCOPY utl_smtp.connection,
data IN VARCHAR2,
mime_type IN VARCHAR2 DEFAULT 'text/plain',
inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL,
last IN BOOLEAN DEFAULT FALSE);
-- Send a binary attachment. The attachment will be encoded in Base-64
-- encoding format.
PROCEDURE attach_base64(conn IN OUT NOCOPY utl_smtp.connection,
data IN RAW,
mime_type IN VARCHAR2 DEFAULT 'application/octet',
inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL,
last IN BOOLEAN DEFAULT FALSE);
-- Send an attachment with no size limit. First, begin the attachment
-- with begin_attachment(). Then, call write_text repeatedly to send
-- the attachment piece-by-piece. If the attachment is text-based but
-- in non-ASCII or multi-byte character set, use write_mb_text() instead.
-- To send binary attachment, the binary content should first be
-- encoded in Base-64 encoding format using the demo package for 8i,
-- or the native one in 9i. End the attachment with end_attachment.
PROCEDURE begin_attachment(conn IN OUT NOCOPY utl_smtp.connection,
mime_type IN VARCHAR2 DEFAULT 'text/plain',
inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL,
transfer_enc IN VARCHAR2 DEFAULT NULL);
-- End the attachment.
PROCEDURE end_attachment(conn IN OUT NOCOPY utl_smtp.connection,
last IN BOOLEAN DEFAULT FALSE);
-- End the email.
PROCEDURE end_mail(conn IN OUT NOCOPY utl_smtp.connection);
-- Extended email API to send multiple emails in a session for better
-- performance. First, begin an email session with begin_session.
-- Then, begin each email with a session by calling begin_mail_in_session
-- instead of begin_mail. End the email with end_mail_in_session instead
-- of end_mail. End the email session by end_session.
FUNCTION begin_session RETURN utl_smtp.connection;
-- Begin an email in a session.
PROCEDURE begin_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection,
sender IN VARCHAR2,
recipients IN VARCHAR2,
subject IN VARCHAR2,
-- mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=windows-1255',
mime_type IN VARCHAR2 DEFAULT 'text/plain',
priority IN PLS_INTEGER DEFAULT NULL);
-- End an email in a session.
PROCEDURE end_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection);
-- End an email session.
PROCEDURE end_session(conn IN OUT NOCOPY utl_smtp.connection);
END;
CREATE OR REPLACE PACKAGE BODY demo_mail_heb IS
-- Sent clear Html Email
procedure send_html_mail (p_sender in varchar2 default null,
p_recipients in varchar2 default null,
p_subject in varchar2 default null,
p_data in varchar2 default null,
p_mime_type in varchar2 default 'text/html; charset=windows-1255')
Is
conn utl_smtp.connection;
BEGIN
conn := demo_mail_heb.begin_mail(
sender => p_sender,
recipients => p_recipients,
subject => p_subject,
mime_type => p_mime_type);
demo_mail_heb.write_text(
conn => conn,
message => p_data);
demo_mail_heb.end_mail( conn => conn );
END;
-- Sent Html Email with Attachment
procedure send_html_mail_attach (p_sender in varchar2 default null,
p_recipients in varchar2 default null,
p_subject in varchar2 default null,
p_data in varchar2 default '<b>áå÷ø èåá òåìí - áãé÷ä</b',
p_mime_type in varchar2 default demo_mail_heb.MULTIPART_MIME_TYPE,
p_file_name in varchar2 default 'but_choose_file.gif',
p_file_mime_type in varchar2 default 'application/pdf',
p_file_URL in varchar2 default 'http://10.172.246.160:7777/i/but_choose_file.gif')
is
conn utl_smtp.connection;
req utl_http.req;
resp utl_http.resp;
data RAW(200);
begin
conn := demo_mail_heb.begin_mail(
sender => p_sender,
recipients => p_recipients,
subject => p_subject,
mime_type => p_mime_type);
demo_mail_heb.attach_text(
conn => conn,
data => p_data,
mime_type => 'text/html');
demo_mail_heb.begin_attachment(
conn => conn,
mime_type => p_file_mime_type,
inline => TRUE,
filename => p_file_name,
transfer_enc => 'base64');
-- In writing Base-64 encoded text following the MIME format below,
-- the MIME format requires that a long piece of data must be splitted
-- into multiple lines and each line of encoded data cannot exceed
-- 80 characters, including the new-line characters. Also, when
-- splitting the original data into pieces, the length of each chunk
-- of data before encoding must be a multiple of 3, except for the
-- last chunk. The constant demo_mail_heb.MAX_BASE64_LINE_WIDTH
-- (76 / 4 * 3 = 57) is the maximum length (in bytes) of each chunk
-- of data before encoding.
Utl_Http.set_proxy('www-proxy.us.oracle.com', 'oracle.com');
req := utl_http.begin_request(p_file_URL);
resp := utl_http.get_response(req);
BEGIN
LOOP
utl_http.read_raw(resp, data, demo_mail_heb.MAX_BASE64_LINE_WIDTH);
demo_mail_heb.write_raw(
conn => conn,
message => utl_encode.base64_encode(data));
END LOOP;
EXCEPTION
WHEN utl_http.end_of_body THEN
utl_http.end_response(resp);
END;
demo_mail_heb.end_attachment( conn => conn );
demo_mail_heb.end_mail( conn => conn );
end;
-- Return the next email address in the list of email addresses, separated
-- by either a "," or a ";". The format of mailbox may be in one of these:
-- someone@some-domain
-- "Someone at some domain" <someone@some-domain>
-- Someone at some domain <someone@some-domain>
FUNCTION get_address(addr_list IN OUT VARCHAR2) RETURN VARCHAR2 IS
addr VARCHAR2(256);
i pls_integer;
FUNCTION lookup_unquoted_char(str IN VARCHAR2,
chrs IN VARCHAR2) RETURN pls_integer AS
c VARCHAR2(5);
i pls_integer;
len pls_integer;
inside_quote BOOLEAN;
BEGIN
inside_quote := false;
i := 1;
len := length(str);
WHILE (i <= len) LOOP
c := substr(str, i, 1);
IF (inside_quote) THEN
IF (c = '"') THEN
inside_quote := false;
ELSIF (c = '\') THEN
i := i + 1; -- Skip the quote character
END IF;
GOTO next_char;
END IF;
IF (c = '"') THEN
inside_quote := true;
GOTO next_char;
END IF;
IF (instr(chrs, c) >= 1) THEN
RETURN i;
END IF;
<<next_char>>
i := i + 1;
END LOOP;
RETURN 0;
END;
BEGIN
addr_list := ltrim(addr_list);
i := lookup_unquoted_char(addr_list, ',;');
IF (i >= 1) THEN
addr := substr(addr_list, 1, i - 1);
addr_list := substr(addr_list, i + 1);
ELSE
addr := addr_list;
addr_list := '';
END IF;
i := lookup_unquoted_char(addr, '<');
IF (i >= 1) THEN
addr := substr(addr, i + 1);
i := instr(addr, '>');
IF (i >= 1) THEN
addr := substr(addr, 1, i - 1);
END IF;
END IF;
RETURN addr;
END;
-- Write a MIME header
PROCEDURE write_mime_header(conn IN OUT NOCOPY utl_smtp.connection,
name IN VARCHAR2,
value IN VARCHAR2) IS
BEGIN
-- utl_smtp.write_data(conn, name || ': ' || value || utl_tcp.CRLF);
utl_smtp.write_raw_data(conn, UTL_RAW.CAST_TO_RAW(name || ': ' ||value || utl_tcp.CRLF));
END;
-- Mark a message-part boundary. Set <last> to TRUE for the last boundary.
PROCEDURE write_boundary(conn IN OUT NOCOPY utl_smtp.connection,
last IN BOOLEAN DEFAULT FALSE) AS
BEGIN
IF (last) THEN
utl_smtp.write_data(conn, LAST_BOUNDARY);
ELSE
utl_smtp.write_data(conn, FIRST_BOUNDARY);
END IF;
END;
PROCEDURE mail(sender IN VARCHAR2,
recipients IN VARCHAR2,
subject IN VARCHAR2,
message IN VARCHAR2) IS
conn utl_smtp.connection;
BEGIN
conn := begin_mail(sender, recipients, subject);
write_text(conn, message);
end_mail(conn);
END;
FUNCTION begin_mail(sender IN VARCHAR2,
recipients IN VARCHAR2,
subject IN VARCHAR2,
mime_type IN VARCHAR2 DEFAULT 'text/plain',
priority IN PLS_INTEGER DEFAULT NULL)
RETURN utl_smtp.connection IS
conn utl_smtp.connection;
BEGIN
conn := begin_session;
begin_mail_in_session(conn, sender, recipients, subject, mime_type,
priority);
RETURN conn;
END;
PROCEDURE write_text(conn IN OUT NOCOPY utl_smtp.connection,
message IN VARCHAR2) IS
BEGIN
utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(CONVERT(message,'IW8ISO8859P8')));
END;
PROCEDURE write_mb_text(conn IN OUT NOCOPY utl_smtp.connection,
message IN VARCHAR2) IS
BEGIN
utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(message));
END;
PROCEDURE write_raw(conn IN OUT NOCOPY utl_smtp.connection,
message IN RAW) IS
BEGIN
utl_smtp.write_raw_data(conn, message);
END;
PROCEDURE attach_text(conn IN OUT NOCOPY utl_smtp.connection,
data IN VARCHAR2,
mime_type IN VARCHAR2 DEFAULT 'text/plain',
inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL,
last IN BOOLEAN DEFAULT FALSE) IS
BEGIN
begin_attachment(conn, mime_type, inline, filename);
write_text(conn, data);
end_attachment(conn, last);
END;
PROCEDURE attach_base64(conn IN OUT NOCOPY utl_smtp.connection,
data IN RAW,
mime_type IN VARCHAR2 DEFAULT 'application/octet',
inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL,
last IN BOOLEAN DEFAULT FALSE) IS
i PLS_INTEGER;
len PLS_INTEGER;
BEGIN
begin_attachment(conn, mime_type, inline, filename, 'base64');
-- Split the Base64-encoded attachment into multiple lines
i := 1;
len := utl_raw.length(data);
WHILE (i < len) LOOP
IF (i + MAX_BASE64_LINE_WIDTH < len) THEN
utl_smtp.write_raw_data(conn,
utl_encode.base64_encode(utl_raw.substr(data, i,
MAX_BASE64_LINE_WIDTH)));
ELSE
utl_smtp.write_raw_data(conn,
utl_encode.base64_encode(utl_raw.substr(data, i)));
END IF;
utl_smtp.write_data(conn, utl_tcp.CRLF);
i := i + MAX_BASE64_LINE_WIDTH;
END LOOP;
end_attachment(conn, last);
END;
PROCEDURE begin_attachment(conn IN OUT NOCOPY utl_smtp.connection,
mime_type IN VARCHAR2 DEFAULT 'text/plain',
inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL,
transfer_enc IN VARCHAR2 DEFAULT NULL) IS
BEGIN
write_boundary(conn);
write_mime_header(conn, 'Content-Type', mime_type);
IF (filename IS NOT NULL) THEN
IF (inline) THEN
write_mime_header(conn, 'Content-Disposition',
'inline; filename="'||filename||'"');
ELSE
write_mime_header(conn, 'Content-Disposition',
'attachment; filename="'||filename||'"');
END IF;
END IF;
IF (transfer_enc IS NOT NULL) THEN
write_mime_header(conn, 'Content-Transfer-Encoding', transfer_enc);
END IF;
utl_smtp.write_data(conn, utl_tcp.CRLF);
END;
PROCEDURE end_attachment(conn IN OUT NOCOPY utl_smtp.connection,
last IN BOOLEAN DEFAULT FALSE) IS
BEGIN
utl_smtp.write_data(conn, utl_tcp.CRLF);
IF (last) THEN
write_boundary(conn, last);
END IF;
END;
PROCEDURE end_mail(conn IN OUT NOCOPY utl_smtp.connection) IS
BEGIN
end_mail_in_session(conn);
end_session(conn);
END;
FUNCTION begin_session RETURN utl_smtp.connection IS
conn utl_smtp.connection;
BEGIN
-- open SMTP connection
conn := utl_smtp.open_connection(smtp_host, smtp_port);
utl_smtp.helo(conn, smtp_domain);
RETURN conn;
END;
PROCEDURE begin_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection,
sender IN VARCHAR2,
recipients IN VARCHAR2,
subject IN VARCHAR2,
mime_type IN VARCHAR2 DEFAULT 'text/plain',
-- mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=windows-1255',
priority IN PLS_INTEGER DEFAULT NULL) IS
my_recipients VARCHAR2(32767) := recipients;
my_sender VARCHAR2(32767) := sender;
BEGIN
-- Specify sender's address (our server allows bogus address
-- as long as it is a full email address ([email protected]).
utl_smtp.mail(conn, get_address(my_sender));
-- Specify recipient(s) of the email.
WHILE (my_recipients IS NOT NULL) LOOP
utl_smtp.rcpt(conn, get_address(my_recipients));
END LOOP;
-- Start body of email
utl_smtp.open_data(conn);
-- Set "From" MIME header
write_mime_header(conn, 'From', sender);
-- Set "To" MIME header
write_mime_header(conn, 'To', recipients);
-- Set "Subject" MIME header
write_mime_header(conn, 'Subject', subject);
-- Set "Content-Type" MIME header
write_mime_header(conn, 'Content-Type', mime_type);
-- Set "X-Mailer" MIME header
write_mime_header(conn, 'X-Mailer', MAILER_ID);
-- Set priority:
-- High Normal Low
-- 1 2 3 4 5
IF (priority IS NOT NULL) THEN
write_mime_header(conn, 'X-Priority', priority);
END IF;
-- Send an empty line to denotes end of MIME headers and
-- beginning of message body.
utl_smtp.write_data(conn, utl_tcp.CRLF);
IF (mime_type LIKE 'multipart/mixed%') THEN
write_text(conn, 'This is a multi-part message in MIME format.' ||
utl_tcp.crlf);
END IF;
END;
PROCEDURE end_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection) IS
BEGIN
utl_smtp.close_data(conn);
END;
PROCEDURE end_session(conn IN OUT NOCOPY utl_smtp.connection) IS
BEGIN
utl_smtp.quit(conn);
END;
END;Hello All,
Small modification - use this package and not the above
HERE IS A WORKING CODE FOR SENDING HEBREW MESSAGES (INCLUDING SUBJECT IN UTF-8 APPEAR IN ALL EMAIL CLIENTS I HAVE CHECKED) + ATTACHMENTS
Code attached below is supplied as is with no support. anyhow if help is needed , please contact me via [email protected]
============================================================================
CREATE OR REPLACE PACKAGE demo_mail_heb IS
----------------------- Customizable Section -----------------------
-- Customize the SMTP host, port and your domain name below.
smtp_host VARCHAR2(256) := pst_ajax.getParameter('EMAIL_SMTP_HOST');
smtp_port PLS_INTEGER := pst_ajax.getParameter('EMAIL_SMTP_PORT');
smtp_domain VARCHAR2(256) := pst_ajax.getParameter('EMAIL_SMTP_DOMAIN');
-- Customize the signature that will appear in the email's MIME header.
-- Useful for versioning.
MAILER_ID CONSTANT VARCHAR2(256) := 'Mailer by Oracle UTL_SMTP';
--------------------- End Customizable Section ---------------------
-- A unique string that demarcates boundaries of parts in a multi-part email
-- The string should not appear inside the body of any part of the email.
-- Customize this if needed or generate this randomly dynamically.
BOUNDARY CONSTANT VARCHAR2(256) := '-----7D81B75CCC90D2974F7A1CBD';
FIRST_BOUNDARY CONSTANT VARCHAR2(256) := '--' || BOUNDARY || utl_tcp.CRLF;
LAST_BOUNDARY CONSTANT VARCHAR2(256) := '--' || BOUNDARY || '--' ||
utl_tcp.CRLF;
-- A MIME type that denotes multi-part email (MIME) messages.
MULTIPART_MIME_TYPE CONSTANT VARCHAR2(256) := 'multipart/mixed; boundary="'||
BOUNDARY || '"';
MAX_BASE64_LINE_WIDTH CONSTANT PLS_INTEGER := 76 / 4 * 3;
-- Sent clear Html Email
procedure send_html_mail (p_sender in varchar2 default null,
p_recipients in varchar2 default null,
p_subject in varchar2 default null,
p_data in varchar2 default null,
p_mime_type in varchar2 default 'text/html; charset=windows-1255');
-- Sent Html Email with Attachment
procedure send_html_mail_attach (p_sender in varchar2 default null,
p_recipients in varchar2 default null,
p_subject in varchar2 default null,
p_data in varchar2 default '<b>áå÷ø èåá òåìí - áãé÷ä</b',
p_mime_type in varchar2 default 'text/html; charset=windows-1255',
p_file_name in varchar2 default 'but_choose_file.gif',
p_file_mime_type in varchar2 default 'application/pdf',
p_file_URL in varchar2 default 'http://10.172.246.160:7777/i/but_choose_file.gif');
-- A simple email API for sending email in plain text in a single call.
-- The format of an email address is one of these:
-- someone@some-domain
-- "Someone at some domain" <someone@some-domain>
-- Someone at some domain <someone@some-domain>
-- The recipients is a list of email addresses separated by
-- either a "," or a ";"
PROCEDURE mail(sender IN VARCHAR2,
recipients IN VARCHAR2,
subject IN VARCHAR2,
message IN VARCHAR2);
-- Extended email API to send email in HTML or plain text with no size limit.
-- First, begin the email by begin_mail(). Then, call write_text() repeatedly
-- to send email in ASCII piece-by-piece. Or, call write_mb_text() to send
-- email in non-ASCII or multi-byte character set. End the email with
-- end_mail().
FUNCTION begin_mail(sender IN VARCHAR2,
recipients IN VARCHAR2,
subject IN VARCHAR2,
mime_type IN VARCHAR2 DEFAULT 'text/plain',
priority IN PLS_INTEGER DEFAULT NULL)
RETURN utl_smtp.connection;
-- Write email body in ASCII
PROCEDURE write_text(conn IN OUT NOCOPY utl_smtp.connection,
message IN VARCHAR2);
-- Write email body in non-ASCII (including multi-byte). The email body
-- will be sent in the database character set.
PROCEDURE write_mb_text(conn IN OUT NOCOPY utl_smtp.connection,
message IN VARCHAR2);
-- Write email body in binary
PROCEDURE write_raw(conn IN OUT NOCOPY utl_smtp.connection,
message IN RAW);
-- APIs to send email with attachments. Attachments are sent by sending
-- emails in "multipart/mixed" MIME format. Specify that MIME format when
-- beginning an email with begin_mail().
-- Send a single text attachment.
PROCEDURE attach_text(conn IN OUT NOCOPY utl_smtp.connection,
data IN VARCHAR2,
mime_type IN VARCHAR2 DEFAULT 'text/plain',
inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL,
last IN BOOLEAN DEFAULT FALSE);
-- Send a binary attachment. The attachment will be encoded in Base-64
-- encoding format.
PROCEDURE attach_base64(conn IN OUT NOCOPY utl_smtp.connection,
data IN RAW,
mime_type IN VARCHAR2 DEFAULT 'application/octet',
inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL,
last IN BOOLEAN DEFAULT FALSE);
-- Send an attachment with no size limit. First, begin the attachment
-- with begin_attachment(). Then, call write_text repeatedly to send
-- the attachment piece-by-piece. If the attachment is text-based but
-- in non-ASCII or multi-byte character set, use write_mb_text() instead.
-- To send binary attachment, the binary content should first be
-- encoded in Base-64 encoding format using the demo package for 8i,
-- or the native one in 9i. End the attachment with end_attachment.
PROCEDURE begin_attachment(conn IN OUT NOCOPY utl_smtp.connection,
mime_type IN VARCHAR2 DEFAULT 'text/plain',
inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL,
transfer_enc IN VARCHAR2 DEFAULT NULL);
-- End the attachment.
PROCEDURE end_attachment(conn IN OUT NOCOPY utl_smtp.connection,
last IN BOOLEAN DEFAULT FALSE);
-- End the email.
PROCEDURE end_mail(conn IN OUT NOCOPY utl_smtp.connection);
-- Extended email API to send multiple emails in a session for better
-- performance. First, begin an email session with begin_session.
-- Then, begin each email with a session by calling begin_mail_in_session
-- instead of begin_mail. End the email with end_mail_in_session instead
-- of end_mail. End the email session by end_session.
FUNCTION begin_session RETURN utl_smtp.connection;
-- Handling the Email Subject Line
function mimeheader_encode(
p_str varchar2
, p_charset varchar2 := 'UTF-8') return varchar2;
-- Begin an email in a session.
PROCEDURE begin_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection,
sender IN VARCHAR2,
recipients IN VARCHAR2,
subject IN VARCHAR2,
-- mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=windows-1255',
mime_type IN VARCHAR2 DEFAULT 'text/plain',
priority IN PLS_INTEGER DEFAULT NULL);
-- End an email in a session.
PROCEDURE end_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection);
-- End an email session.
PROCEDURE end_session(conn IN OUT NOCOPY utl_smtp.connection);
END;
CREATE OR REPLACE PACKAGE BODY demo_mail_heb IS
-- Sent clear Html Email
procedure send_html_mail (p_sender in varchar2 default null,
p_recipients in varchar2 default null,
p_subject in varchar2 default null,
p_data in varchar2 default null,
p_mime_type in varchar2 default 'text/html; charset=windows-1255')
Is
conn utl_smtp.connection;
BEGIN
conn := demo_mail_heb.begin_mail(
sender => p_sender,
recipients => p_recipients,
subject => p_subject,
mime_type => 'text/html; charset=UTF-8');--p_mime_type);
demo_mail_heb.write_text(
conn => conn,
message => p_data);
demo_mail_heb.end_mail( conn => conn );
END;
-- Sent Html Email with Attachment
procedure send_html_mail_attach (p_sender in varchar2 default null,
p_recipients in varchar2 default null,
p_subject in varchar2 default null,
p_data in varchar2 default '<b>áå÷ø èåá òåìí - áãé÷ä</b',
p_mime_type in varchar2 default 'text/html; charset=windows-1255',
p_file_name in varchar2 default 'but_choose_file.gif',
p_file_mime_type in varchar2 default 'application/pdf',
p_file_URL in varchar2 default 'http://10.172.246.160:7777/i/but_choose_file.gif')
is
conn utl_smtp.connection;
req utl_http.req;
resp utl_http.resp;
data RAW(200);
v_mime_type varchar2(32767):=demo_mail.MULTIPART_MIME_TYPE;
begin
conn := demo_mail_heb.begin_mail(
sender => p_sender,
recipients => p_recipients,
subject => p_subject,
mime_type => v_mime_type);
demo_mail_heb.attach_text(
conn => conn,
data => p_data,
mime_type => 'text/html');
demo_mail_heb.begin_attachment(
conn => conn,
mime_type => p_file_mime_type,
inline => TRUE,
filename => p_file_name,
transfer_enc => 'base64');
-- In writing Base-64 encoded text following the MIME format below,
-- the MIME format requires that a long piece of data must be splitted
-- into multiple lines and each line of encoded data cannot exceed
-- 80 characters, including the new-line characters. Also, when
-- splitting the original data into pieces, the length of each chunk
-- of data before encoding must be a multiple of 3, except for the
-- last chunk. The constant demo_mail_heb.MAX_BASE64_LINE_WIDTH
-- (76 / 4 * 3 = 57) is the maximum length (in bytes) of each chunk
-- of data before encoding.
req := utl_http.begin_request(p_file_URL);
resp := utl_http.get_response(req);
BEGIN
LOOP
utl_http.read_raw(resp, data, demo_mail_heb.MAX_BASE64_LINE_WIDTH);
demo_mail_heb.write_raw(
conn => conn,
message => utl_encode.base64_encode(data));
END LOOP;
EXCEPTION
WHEN utl_http.end_of_body THEN
utl_http.end_response(resp);
END;
demo_mail_heb.end_attachment( conn => conn );
demo_mail_heb.end_mail( conn => conn );
end;
-- Return the next email address in the list of email addresses, separated
-- by either a "," or a ";". The format of mailbox may be in one of these:
-- someone@some-domain
-- "Someone at some domain" <someone@some-domain>
-- Someone at some domain <someone@some-domain>
FUNCTION get_address(addr_list IN OUT VARCHAR2) RETURN VARCHAR2 IS
addr VARCHAR2(256);
i pls_integer;
FUNCTION lookup_unquoted_char(str IN VARCHAR2,
chrs IN VARCHAR2) RETURN pls_integer AS
c VARCHAR2(5);
i pls_integer;
len pls_integer;
inside_quote BOOLEAN;
BEGIN
inside_quote := false;
i := 1;
len := length(str);
WHILE (i <= len) LOOP
c := substr(str, i, 1);
IF (inside_quote) THEN
IF (c = '"') THEN
inside_quote := false;
ELSIF (c = '\') THEN
i := i + 1; -- Skip the quote character
END IF;
GOTO next_char;
END IF;
IF (c = '"') THEN
inside_quote := true;
GOTO next_char;
END IF;
IF (instr(chrs, c) >= 1) THEN
RETURN i;
END IF;
<<next_char>>
i := i + 1;
END LOOP;
RETURN 0;
END;
BEGIN
addr_list := ltrim(addr_list);
i := lookup_unquoted_char(addr_list, ',;');
IF (i >= 1) THEN
addr := substr(addr_list, 1, i - 1);
addr_list := substr(addr_list, i + 1);
ELSE
addr := addr_list;
addr_list := '';
END IF;
i := lookup_unquoted_char(addr, '<');
IF (i >= 1) THEN
addr := substr(addr, i + 1);
i := instr(addr, '>');
IF (i >= 1) THEN
addr := substr(addr, 1, i - 1);
END IF;
END IF;
RETURN addr;
END;
-- Write a MIME header
PROCEDURE write_mime_header(conn IN OUT NOCOPY utl_smtp.connection,
name IN VARCHAR2,
value IN VARCHAR2) IS
BEGIN
-- utl_smtp.write_data(conn, name || ': ' || value || utl_tcp.CRLF);
utl_smtp.write_raw_data(conn, UTL_RAW.CAST_TO_RAW(name || ': ' ||value || utl_tcp.CRLF));
END;
-- Mark a message-part boundary. Set <last> to TRUE for the last boundary.
PROCEDURE write_boundary(conn IN OUT NOCOPY utl_smtp.connection,
last IN BOOLEAN DEFAULT FALSE) AS
BEGIN
IF (last) THEN
utl_smtp.write_data(conn, LAST_BOUNDARY);
ELSE
utl_smtp.write_data(conn, FIRST_BOUNDARY);
END IF;
END;
PROCEDURE mail(sender IN VARCHAR2,
recipients IN VARCHAR2,
subject IN VARCHAR2,
message IN VARCHAR2) IS
conn utl_smtp.connection;
BEGIN
conn := begin_mail(sender, recipients, subject);
write_text(conn, message);
end_mail(conn);
END;
FUNCTION begin_mail(sender IN VARCHAR2,
recipients IN VARCHAR2,
subject IN VARCHAR2,
mime_type IN VARCHAR2 DEFAULT 'text/plain',
priority IN PLS_INTEGER DEFAULT NULL)
RETURN utl_smtp.connection IS
conn utl_smtp.connection;
BEGIN
conn := begin_session;
begin_mail_in_session(conn, sender, recipients, subject, mime_type,
priority);
RETURN conn;
END;
PROCEDURE write_text(conn IN OUT NOCOPY utl_smtp.connection,
message IN VARCHAR2) IS
BEGIN
utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(CONVERT(message,'IW8ISO8859P8')));
-- utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(message));
END;
PROCEDURE write_mb_text(conn IN OUT NOCOPY utl_smtp.connection,
message IN VARCHAR2) IS
BEGIN
utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(message));
END;
PROCEDURE write_raw(conn IN OUT NOCOPY utl_smtp.connection,
message IN RAW) IS
BEGIN
utl_smtp.write_raw_data(conn, message);
END;
PROCEDURE attach_text(conn IN OUT NOCOPY utl_smtp.connection,
data IN VARCHAR2,
mime_type IN VARCHAR2 DEFAULT 'text/plain',
inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL,
last IN BOOLEAN DEFAULT FALSE) IS
BEGIN
begin_attachment(conn, mime_type, inline, filename);
write_text(conn, data);
end_attachment(conn, last);
END;
PROCEDURE attach_base64(conn IN OUT NOCOPY utl_smtp.connection,
data IN RAW,
mime_type IN VARCHAR2 DEFAULT 'application/octet',
inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL,
last IN BOOLEAN DEFAULT FALSE) IS
i PLS_INTEGER;
len PLS_INTEGER;
BEGIN
begin_attachment(conn, mime_type, inline, filename, 'base64');
-- Split the Base64-encoded attachment into multiple lines
i := 1;
len := utl_raw.length(data);
WHILE (i < len) LOOP
IF (i + MAX_BASE64_LINE_WIDTH < len) THEN
utl_smtp.write_raw_data(conn,
utl_encode.base64_encode(utl_raw.substr(data, i,
MAX_BASE64_LINE_WIDTH)));
ELSE
utl_smtp.write_raw_data(conn,
utl_encode.base64_encode(utl_raw.substr(data, i)));
END IF;
utl_smtp.write_data(conn, utl_tcp.CRLF);
i := i + MAX_BASE64_LINE_WIDTH;
END LOOP;
end_attachment(conn, last);
END;
PROCEDURE begin_attachment(conn IN OUT NOCOPY utl_smtp.connection,
mime_type IN VARCHAR2 DEFAULT 'text/plain',
inline IN BOOLEAN DEFAULT TRUE,
filename IN VARCHAR2 DEFAULT NULL,
transfer_enc IN VARCHAR2 DEFAULT NULL) IS
BEGIN
write_boundary(conn);
write_mime_header(conn, 'Content-Type', mime_type);
IF (filename IS NOT NULL) THEN
IF (inline) THEN
write_mime_header(conn, 'Content-Disposition',
'inline; filename="'||filename||'"');
ELSE
write_mime_header(conn, 'Content-Disposition',
'attachment; filename="'||filename||'"');
END IF;
END IF;
IF (transfer_enc IS NOT NULL) THEN
write_mime_header(conn, 'Content-Transfer-Encoding', transfer_enc);
END IF;
utl_smtp.write_data(conn, utl_tcp.CRLF);
END;
PROCEDURE end_attachment(conn IN OUT NOCOPY utl_smtp.connection,
last IN BOOLEAN DEFAULT FALSE) IS
BEGIN
utl_smtp.write_data(conn, utl_tcp.CRLF);
IF (last) THEN
write_boundary(conn, last);
END IF;
END;
PROCEDURE end_mail(conn IN OUT NOCOPY utl_smtp.connection) IS
BEGIN
end_mail_in_session(conn);
end_session(conn);
END;
FUNCTION begin_session RETURN utl_smtp.connection IS
conn utl_smtp.connection;
BEGIN
-- open SMTP connection
conn := utl_smtp.open_connection(smtp_host, smtp_port);
utl_smtp.helo(conn, smtp_domain);
RETURN conn;
END;
-- Handling the Email Subject Line
function mimeheader_encode(
p_str varchar2
, p_charset varchar2 := 'UTF-8') return varchar2 is
l_str varchar2(2000);
begin
l_str:=utl_raw.cast_to_varchar2(utl_encode.quoted_printable_encode(utl_raw.cast_to_raw(p_str)));
l_str:=replace(l_str,'='||chr(13)||chr(10),''); --unfold the data
l_str:=replace(l_str,'?','=3f'); --quote question marks
l_str:=replace(l_str,' ','=20'); --quote spaces
l_str:='=?'||p_charset||'?Q?'||l_str||'?='; -- add prefix and suffix
return l_str;
end;
PROCEDURE begin_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection,
sender IN VARCHAR2,
recipients IN VARCHAR2,
subject IN VARCHAR2,
mime_type IN VARCHAR2 DEFAULT 'text/plain',
-- mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=windows-1255',
priority IN PLS_INTEGER DEFAULT NULL) IS
my_recipients VARCHAR2(32767) := recipients;
my_sender VARCHAR2(32767) := sender;
BEGIN
-- Specify sender's address (our server allows bogus address
-- as long as it is a full email address ([email protected]).
utl_smtp.mail(conn, get_address(my_sender));
-- Specify recipient(s) of the email.
WHILE (my_recipients IS NOT NULL) LOOP
utl_smtp.rcpt(conn, get_address(my_recipients));
END LOOP;
-- Start body of email
utl_smtp.open_data(conn);
-- Set "From" MIME header
write_mime_header(conn, 'From', sender);
-- Set "To" MIME header
write_mime_header(conn, 'To', recipients);
-- Set "Content-Type" MIME header
write_mime_header(conn, 'Content-Type', mime_type);
-- write_mime_header(conn, 'Content-Type', 'text/html; charset=UTF-8');
-- Set "Subject" MIME header
-- write_mime_header(conn, 'Subject', subject);
-- write_mime_header(conn, 'Subject', CONVERT(subject,'IW8ISO8859P8'));
write_mime_header(conn, 'Subject',mimeheader_encode(p_str => subject,p_charset => 'UTF-8'));
-- write_mime_header(conn, 'Subject',CONVERT(subject,'IW8MSWIN1255'));
-- Set "X-Mailer" MIME header
write_mime_header(conn, 'X-Mailer', MAILER_ID);
-- Set priority:
-- High Normal Low
-- 1 2 3 4 5
IF (priority IS NOT NULL) THEN
write_mime_header(conn, 'X-Priority', priority);
END IF;
-- Send an empty line to denotes end of MIME headers and
-- beginning of message body.
utl_smtp.write_data(conn, utl_tcp.CRLF);
IF (mime_type LIKE 'multipart/mixed%') THEN
write_text(conn, 'This is a multi-part message in MIME format.' ||
utl_tcp.crlf);
END IF;
END;
PROCEDURE end_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection) IS
BEGIN
utl_smtp.close_data(conn);
END;
PROCEDURE end_session(conn IN OUT NOCOPY utl_smtp.connection) IS
BEGIN
utl_smtp.quit(conn);
END;
END; -
Create an URL attachment using FM SGOS_URL_CREATE_DIALOG
Hi all,
i hope there is someone that can help me.
My problem is: i've to create an URL attachment to an MM document in ME33K using a custom ABAP report.
In my report i use FM SGOS_URL_CREATE_DIALOG but when i call ME33K and display the document i don't find the URL attachement.
I know that if the attachment is created i'd find a new redcord in table SRGBTBREL, is ok?
Regards,
Alex.
PS: my report is:
REPORT z_attach_url .
TABLES: ekko.
PARAMETERS: p_contr like ekko-ebeln.
PARAMETERS: title TYPE sood-objdes.
DATA: document_id TYPE borident-objkey.
data: is_object TYPE borident occurs 0 with header line.
is_object-objkey = p_contr.
is_object-objtype = 'BUS2014'.
append is_object.
CALL FUNCTION 'SGOS_URL_CREATE_DIALOG'
EXPORTING
is_object = is_object
ip_title = title
IMPORTING
ep_url = document_id.Hi Chris,
Thanks for your advice. It's for our own sites, so we can accept the overhead.
The animation is simply fade in image, fade out image, fade in text message, fade out text message, fade in next image, etc.
So, when you say "they are instead wrapped inside a single custom component", I understand it conceptually but need a few details:
1. Does this mean I first create the custom component (before doing anything else)?
2. At what point to I import/load my Photoshop file with all of the layers?
Jim -
Create Web Service System using WSDL URL
Hi,
Please help me create a Web Service System.
Following is the test result when I perform Connection Test after creating a system
Test Connection with Connector
Test Details:
The test consists of the following steps:
1. Retrieve the default alias of the system
2. Check the connection to the backend application using the connector defined in this system object
Results
Retrieval of default alias successful
Connection failed. Make sure that Single Sign-On is configured correctly
Thanks,
AtulLet me reiterate my problem.
I created the System as following
Creating System's Object:
1) Go to System Administration
2) Go to System Configuration
3) Go to Portal Content on Object Based Navigation Area (Right Side Panel)
Note: For avoiding confusion it is recommended to create a folder in which we are creating System Object.
4) Right Click on Portal Content, select New -> System (from Template)
5) This action will display a new view on right side, now choose Web Service System using WSDL URL radio button from the existing templates. Click Next
6) Give the System Name i.e. System_WS and System Id (which are mandatory fields) incase you want to give any brief notes about the system then give it in Description field. Click Finish.
8) Choose Open the object for editing Click OK.
9) Now to create a Web Service System, we need WSDL URL.
10) There are lots of freely available WSDL files on internet, search for any such WSDL file.
11) In the Properties area of system give the appropriate WSDL URL
12) Choose System alias, from display menu and give alias as System_WS.
This alias name will be the name of Web Service System.
I used the following url
http://soap.amazon.com/schemas2/AmazonWebServices.wsdl
After the system is created,
1) Right click on the created system> open > object
2) Drop down for Display options is changed to Connection Tests from what it shows as object
3) Check the check box for the test name Connection Test for Connectors
4) Result shows that the connection failed. The error message was posted in my first question.
Thanks,
Atul -
SWA: Web Services call with attachment using 10.1.3 preview?
Has anyone managed to figure out how to invoke a web service with an attachment (using SWA, SOAP with Attachments) with the new 10.1.3 preview release?
Or are there any samples/documents that can point me in the right direction on how to do this?
Thanks!
....AndrzejFinally got 10.1.3 installed, and sure enough, there is an example for the use of SWA (SOAP with Attachments), both as client and as server.
But the notes say it won't run with Oracle Lite DB. Makes me wonder why?
Kinda sucks, since that is what we're using for our proof of concept. <sigh> -
Email with Attachment using Oracle HTML db code
Sending E-mail using HTMLDB_MAIL.SEND command successfully executed, but i need to send mail message with file Attachment using ORACLE Apex Processes.
Can anyone know the procedure to send e-mail with Attachment file.Help me to Proceed.
Thanks in Advance.Hi,
Search the forum using 'attachment' and you will find the solution to your problem.
Keep Smiling,
Bob R -
Problem with attachment using SO_NEW_DOCUMENT_ATT_SEND_API1
Hi,
I'm using function module SO_NEW_DOCUMENT_ATT_SEND_API1 to send emails from SAP (to Outlook - but the problem can already be observed when checking the email attachment in transaction SOST) with attachments.
My attachment is a tab delimited file (so that I can open with MS Excel) with a line size of approx. 1600 characters. I mean, concatenating all fields of the output table into a 1600 character field, separated by tabstops (cl_abap_char_utilities=>horizontal_tab)
I am using function module SCMS_STRING_TO_FTEXT to convert the internal table that I want to send to the line size as accepted by function module SO_NEW_DOCUMENT_ATT_SEND_API1, tables parameter contents_bin. Due to function module SCMS_STRING_TO_FTEXT this happens line by line, using a string variable. I make sure to remove any exess blanks that appear in the process due to not completey filled character fields. And for all rows bar the first the string is prefixed with (cl_abap_char_utilities=>cr_lf). I believe that's required so that SAP knows to put the lines back together. So far so good.
When checking the email's attachment via SOST (and the same happens in Outlook) there are extra blanks in certain fields. Like:
Annual Base
92,928. 00
or
Email
First L ast
In debugging it appears that these excess spaces (sometimes 1, sometimes several) appear where the 1600 character data line is split into the 255 character pieces in 'contents_bin'. But then it happens quite randomly and cannot be observed in all data rows.
Is there a better way of splitting my internal table into 255 character chunks so that what is one field will never get split up into two rows. For the above example, the two fields would show like this in contents_bin
.... 92,928.
00
and
First_L
ast
Or where else lies the problem?
Thanks in advance!
PhilippRon,
Thank you for the suggestion. Just tried but issue remains exactly the same. The function module you have suggested builds the table in the same way.
But, after a few more rounds of debugging and scratching my head it occured to me that my problem is self inflicted. I was using the condense statement in an attempt to get rid of the trailing blanks at the end of a row causing the last column to be filled with lots of spaces at the end. But it wasn't working anyway and I have since inserted a dummy column at the end to take all those trailing blanks. What this condense statement did though was creating trailing blanks in some of those rows with 255 characters fixed length and those trailing blanks then showed up as additional blanks in some columns in the attachment that the emailing function module created by putting those lines back to it's original length of close to 1600 characters.
Problem solved!
Regards,
Philipp -
Error in creating Web service reference using WSDL
Hi Experts,
I'm using apex 4.1, Oracle 11g
ERROR MESSAGE: The WSDL document was unretrievable because either the URL you supplied was invalid, your environment requires a valid proxy server address for HTTP requests and you have not defined one for this application, or a wallet needs to be configured for this instance of Application Express for HTTPS requests
I know this is a famous issue apex devs faced. I'm having the same problem now. I went through many forums and websites and came to a conclusion that this is something to do with
ACL.
This is wat i'm trying.
1) I have Apex and my web service running on the same server. (We don't use proxy server to connect to W'service)
2) This is the path of the WDSL document i gave - 127.0.0.1/EPRWS/DashboardService.asmx?WSDL
3) I created a default Oracle Wallet by giving no other information other than user name password.
4) i gave the default wallet's user name, password in apex app.
5) The only data that I inserted into ACL table as follows,
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml',
'ACL that lets power users to connect to everywhere',
'FLOWS_030000', TRUE, 'connect');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
END;
begin
dbms_network_acl_admin.add_privilege (
acl => 'power_users.xml',
principal => 'FLOWS_030000',
is_grant => TRUE,
privilege => 'connect'
END;
I guess the data inserted into ACL tables as given above to give user privilege is not accurate. Could someone explain me how to properly populate the ACL tables and what exactly needs to be inserted into both ACL tables ? And Should we give anyother information when we create a wallet to fix the able issue ?
Thanks in advance
Kurubaran.Thanks Role for your reply. As you said i used "APEX_040100". Following script did the magic and now i can call the service. :)
BEGIN
DBMS_NETWORK_ACL_ADMIN.create_acl (
acl => 'power_users.xml',
DESCRIPTION => 'A test of the ACL functionality',
principal => 'APEX_040100',
is_grant => TRUE,
privilege => 'connect',
start_date => SYSTIMESTAMP,
end_date => NULL);
DBMS_NETWORK_ACL_ADMIN.assign_acl (
ACL => 'power_users.xml',
HOST => '*',
LOWER_PORT => NULL,
upper_port => NULL);
DBMS_NETWORK_ACL_ADMIN.add_privilege (
acl => 'power_users.xml',
PRINCIPAL => 'APEX_040100',
is_grant => TRUE,
privilege => 'connect',
position => NULL,
start_date => NULL,
END_DATE => NULL);
COMMIT;
END;
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
acl => 'proxy_rule.xml',
DESCRIPTION => 'A test of the ACL functionality',
principal => 'APEX_040000',
is_grant => TRUE,
privilege => 'connect',
start_date => SYSTIMESTAMP,
end_date => NULL);
DBMS_NETWORK_ACL_ADMIN.assign_acl (
ACL => 'proxy_rule.xml',
HOST => '*',
LOWER_PORT => '80',
upper_port => '80');
DBMS_NETWORK_ACL_ADMIN.add_privilege (
ACL => 'proxy_rule.xml',
PRINCIPAL => 'APEX_040000',
is_grant => TRUE,
privilege => 'connect',
position => NULL,
start_date => NULL,
END_DATE => NULL);
DBMS_NETWORK_ACL_ADMIN.add_privilege (
acl => 'proxy_rule.xml',
PRINCIPAL => 'APEX_040100',
is_grant => TRUE,
privilege => 'connect',
position => NULL,
START_DATE => NULL,
END_DATE => NULL);
COMMIT;
END;
/ -
How to include body of the mail along with attachment using the below FM
Hi All,
I am using the FM 'SO_NEW_DOCUMENT_ATT_SEND_API1' to generate an e-mail with excel file as attachment. Can you please let me know how to include body of the e-mail along with this attachment.
Thanks & Regards
Gowthamihi,
see this code
TABLES: apqi. "Queue info definition
TYPES DECLARATION
*& Global Types
TYPE-POOLS: slis, "Type for alv list
sx. "SAP connect
TYPE-POOLS: list.
*& Types
TYPES: BEGIN OF s_itab_apqi.
INCLUDE STRUCTURE apqi.
TYPES: END OF s_itab_apqi.
INTERNAL TABLE / WORK AREA DECLARATION *
*& For email attachment
DATA: it_message TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
WITH HEADER LINE.
DATA: it_attach TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
WITH HEADER LINE.
DATA: it_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
it_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE ,
it_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE ,
it_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE ,
it_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE .
DATA: v_cnt TYPE i ,
v_sent_all(1) TYPE c ,
v_doc_data LIKE sodocchgi1 ,
gd_error TYPE sy-subrc ,
gd_reciever TYPE sy-subrc .
DATA: p_email TYPE somlreci1-receiver
VALUE 'mail id here of the reciever'.
*& Variable for attachment name
DATA: v_attach(12).
*& Internal table to get data from apqi table
table here
DATA: ws_line TYPE slis_listheader.
DATA: it_list_top_of_page TYPE slis_t_listheader.
CONSTANTS : v_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
VARIABLE DECLARATION
DATA: v_colpos TYPE i.
DATA: v_transcnt(10) TYPE c,
v_transcnte(10) TYPE c,
v_transcntf(10) TYPE c,
v_msgcnt(10) TYPE c,
v_qid(20) TYPE c.
DATA v_tot_rec(3) TYPE n.
DATA :v_date(10) TYPE c,
v_time(8) TYPE c .
DATA: v_fromdate(10) .
DATA: v_todate(10) .
SELCTION SCREEN
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-015.
PARAMETERS:
SELECTION-SCREEN END OF BLOCK blk1.
AT SELCTION SCREEN
AT SELECTION-SCREEN.
IF p_dfrom IS INITIAL AND
NOT p_dato IS INITIAL.
MESSAGE e000(zp) WITH text-020.
ENDIF.
START OF SELECTION
START-OF-SELECTION.
*& To get data from APQI table into internal table
PERFORM populate_itab.
**To Populate table with details to be entered into .xls file
PERFORM build_xls_data_table.
END OF SELECTION
END-OF-SELECTION.
*& To display ALV list when IT_APQI is not initial
IF NOT it_apqi[] IS INITIAL.
*&-- Send an Notification email
PERFORM send_email .
*&--To populate fields for ALV
PERFORM build_fieldcat .
PERFORM build_eventcat .
PERFORM e04_comment_build USING it_list_top_of_page[].
PERFORM build_layout .
PERFORM build_sortcat .
PERFORM start_list_viewer.
ELSE.
*&-- If no record exists in IT_APQI internal table then message is displayed
MESSAGE s000(zp) WITH text-021.
ENDIF.
FORMS **********************************
populate itab here -
*& Form BUILD_FIELDCAT
FORM build_fieldcat .
ENDFORM. " BUILD_FIELDCAT
*& Form BUILD_EVENTCAT
FORM build_eventcat .
DATA: v_header(25) .
CONCATENATE 'ZPIPY016' p_dfrom p_dato INTO v_header.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = it_eventcat[]
EXCEPTIONS
list_type_wrong = 1
OTHERS = 2.
READ TABLE it_eventcat WITH KEY name = slis_ev_top_of_page
INTO wa_eventcat.
IF sy-subrc = 0.
MOVE v_formname_top_of_page TO wa_eventcat-form.
APPEND wa_eventcat TO it_eventcat.
ENDIF.
ENDFORM. " BUILD_EVENTCAT
*& Form BUILD_LAYOUT
FORM build_layout .
ws_layout-no_keyfix = 'X'.
ws_layout-group_buttons = 'X'.
ws_layout-colwidth_optimize = 'X'.
ENDFORM. " BUILD_LAYOUT
*& Form BUILD_SORTCAT
FORM build_sortcat .
CLEAR wa_sortcat.
CLEAR v_colpos.
ENDFORM. " BUILD_SORTCAT
*& Form START_LIST_VIEWER
FORM start_list_viewer .
DATA: ws_pgm LIKE sy-repid.
*& To Display ALV list
ws_pgm = sy-repid.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = ws_pgm
is_layout = ws_layout
it_fieldcat = it_fieldcat
it_sort = it_sortcat
i_save = 'A'
it_events = it_eventcat
TABLES
t_outtab = it_apqi
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " START_LIST_VIEWER
*& Form BUILD_XLS_DATA_TABLE
FORM build_xls_data_table .
CLASS cl_abap_char_utilities DEFINITION LOAD.
CONSTANTS: con_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,
con_cret TYPE c VALUE cl_abap_char_utilities=>cr_lf.
*& To populate it_attach table to be send as email.
CONCATENATE 'Error of transaction SM35' ' '
INTO it_attach SEPARATED BY con_tab.
CONCATENATE con_cret it_attach INTO it_attach.
APPEND it_attach.
*& To gettotal number of error records
DESCRIBE TABLE it_apqi LINES v_tot_rec .
CONCATENATE 'Number of Errors = ' v_tot_rec
INTO it_attach SEPARATED BY con_tab.
CONCATENATE con_cret it_attach INTO it_attach.
APPEND it_attach.
CONCATENATE text-001
text-002
text-003
text-004
text-005
text-006
text-007
text-008
text-009
text-010
text-011
text-012
INTO it_attach SEPARATED BY con_tab.
CONCATENATE con_cret it_attach INTO it_attach.
APPEND it_attach.
*& To populate it_attach from it_apqi
LOOP AT it_apqi INTO wa_apqi.
*& To get the date format in DD/MM/YYYY
WRITE wa_apqi-credate TO v_date DD/MM/YYYY.
*& To get time format in hh:mm:ss.
v_time = wa_apqi-cretime.
CONCATENATE v_time(2) ':' v_time2(2) ':' v_time4(2) INTO v_time.
v_transcnt = wa_apqi-transcnt.
v_transcnte = wa_apqi-transcnte.
v_transcntf = wa_apqi-transcntf.
v_msgcnt = wa_apqi-msgcnt.
v_qid = wa_apqi-qid.
CONCATENATE wa_apqi-groupid wa_apqi-creator
wa_apqi-qstate v_date
v_time wa_apqi-progid
wa_apqi-userid v_transcnt
v_transcnte v_transcntf
v_msgcnt v_qid
INTO it_attach SEPARATED BY con_tab.
CONCATENATE con_cret it_attach INTO it_attach.
APPEND it_attach .
CLEAR it_attach .
CLEAR: v_transcnt ,
v_transcnte,
v_transcntf,
v_msgcnt ,
v_qid ,
v_date ,
v_time .
ENDLOOP.
ENDFORM . " BUILD_XLS_DATA_TABLE
*& Form POPULATE_EMAIL_MESSAGE_BODY
FORM populate_email_message_body .
REFRESH it_message.
it_message = 'message here'.
APPEND it_message.
CLEAR it_message.
ENDFORM. " POPULATE_EMAIL_MESSAGE_BODY
*& Form SEND_FILE_AS_EMAIL_ATTACHMENT
FORM send_file_as_email_attachment TABLES pit_message
pit_attach
USING p_email
p_mtitle
p_format
p_filename
p_attdescription
p_sender_address
p_sender_addres_type
CHANGING p_error
p_reciever.
DATA: ld_error TYPE sy-subrc,
ld_reciever TYPE sy-subrc,
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_receiver LIKE sy-subrc.
ld_email = p_email .
ld_mtitle = p_mtitle .
ld_format = p_format .
ld_attdescription = p_attdescription.
ld_attfilename = p_filename .
ld_sender_address = p_sender_address.
ld_sender_address_type = p_sender_addres_type.
Fill the document data.
v_doc_data-doc_size = 1.
Populate the subject/generic message attributes
v_doc_data-obj_langu = sy-langu.
v_doc_data-obj_name = 'SAPRPT'.
v_doc_data-obj_descr = ld_mtitle .
v_doc_data-sensitivty = 'F'.
Fill the document data and get size of attachment
CLEAR v_doc_data.
READ TABLE it_attach INDEX v_cnt.
v_doc_data-doc_size =
( v_cnt - 1 ) * 255 + STRLEN( it_attach ).
v_doc_data-obj_langu = sy-langu.
v_doc_data-obj_name = 'SAPRPT'.
v_doc_data-obj_descr = ld_mtitle.
v_doc_data-sensitivty = 'F'.
CLEAR it_attachment.
REFRESH it_attachment.
it_attachment[] = pit_attach[].
Describe the body of the message
CLEAR it_packing_list.
REFRESH it_packing_list.
it_packing_list-transf_bin = space.
it_packing_list-head_start = 1.
it_packing_list-head_num = 0.
it_packing_list-body_start = 1.
DESCRIBE TABLE it_message LINES it_packing_list-body_num.
it_packing_list-doc_type = 'RAW'.
APPEND it_packing_list.
Create attachment notification
it_packing_list-transf_bin = 'X'.
it_packing_list-head_start = 1.
it_packing_list-head_num = 1.
it_packing_list-body_start = 1.
DESCRIBE TABLE it_attachment LINES it_packing_list-body_num.
it_packing_list-doc_type = ld_format.
it_packing_list-obj_descr = ld_attdescription.
it_packing_list-obj_name = ld_attfilename.
it_packing_list-doc_size = it_packing_list-body_num * 255.
APPEND it_packing_list.
Add the recipients email address
CLEAR it_receivers.
REFRESH it_receivers.
it_receivers-receiver = ld_email.
it_receivers-rec_type = 'U'.
it_receivers-com_type = 'INT'.
it_receivers-notif_del = 'X'.
it_receivers-notif_ndel = 'X'.
APPEND it_receivers.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = v_doc_data
put_in_outbox = 'X'
sender_address = ld_sender_address
sender_address_type = ld_sender_address_type
commit_work = 'X'
IMPORTING
sent_to_all = v_sent_all
TABLES
packing_list = it_packing_list
contents_bin = it_attachment
contents_txt = it_message
receivers = it_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.
Populate zerror return code
ld_error = sy-subrc.
Populate zreceiver return code
LOOP AT it_receivers.
ld_receiver = it_receivers-retrn_code.
ENDLOOP.
ENDFORM. " SEND_FILE_AS_EMAIL_ATTACHMENT
*& Form SEND_EMAIL
FORM send_email .
Populate message body text
PERFORM populate_email_message_body.
PERFORM send_file_as_email_attachment
TABLES it_message
it_attach
USING p_email
'Error Sessions from SM35'
'XLS'
'filename'
v_attach
CHANGING gd_error
gd_reciever.
ENDFORM. " SEND_EMAIL
*& Form E04_COMMENT_BUILD
text
-->E04_LT_TOP_OF_PAGE text
FORM e04_comment_build USING lt_top_of_page TYPE slis_t_listheader.
CLEAR: v_fromdate,
v_todate.
WRITE p_dfrom TO v_fromdate DD/MM/YYYY.
WRITE p_dato TO v_todate DD/MM/YYYY.
*& To write header in ALV list
*& Program name
CLEAR ws_line.
ws_line-typ = 'H'.
ws_line-info = text-016.
APPEND ws_line TO lt_top_of_page.
CLEAR ws_line.
ws_line-typ = 'S'.
ws_line-key = text-018.
ws_line-info = v_tot_rec.
APPEND ws_line TO lt_top_of_page.
*& Date from
CLEAR ws_line.
ws_line-typ = 'S'.
ws_line-key = text-050.
ws_line-info = v_fromdate.
APPEND ws_line TO lt_top_of_page.
*& Date to
CLEAR ws_line.
ws_line-typ = 'S'.
ws_line-key = text-051.
ws_line-info = v_todate.
APPEND ws_line TO lt_top_of_page.
ENDFORM. "E04_COMMENT_BUILD
FORM TOP_OF_PAGE *
FORM top_of_page.
*& To write Heading in Top of page
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_list_top_of_page.
ENDFORM. "TOP_OF_PAGE
thanks -
Hi all,
I have a requirement to
1. Upload all PO with BAPI - BAPI_PO_CREATE1 WITH attachments.
I have already used the BAPI to create the Po's. Now Attachment part is left.
Anyone having suggestions please reply.
Thanks
Varunhi,
check this .....very useful
http://michaelxuhan.spaces.live.com/blog/cns!C6A105EFC55AE48F!233.entry
hd_dat-objdes = header_mail.
CALL FUNCTION 'SO_ATTACHMENT_INSERT'
EXPORTING
object_id = object_id
attach_type = attach_type
object_hd_change = hd_dat
owner = sy-uname
TABLES
objcont = l_objcont
objhead = l_objhead
EXCEPTIONS
active_user_not_exist = 35
communication_failure = 71
object_type_not_exist = 17
operation_no_authorization = 21
owner_not_exist = 22
parameter_error = 23
substitute_not_active = 31
substitute_not_defined = 32
system_failure = 72
x_error = 1000.
IF sy-subrc > 0.
ENDIF.
/people/rammanohar.tiwari/blog/2006/03/25/generic-object-services-gos--in-background--part-ii
check this blog -
Error while creating document with attachment.
Hi,
I am getting an error "An error occured while creating the original attribute for PDF"
I tried with out file attachment, it works as you know it is simple....
I tried with various types of attachments like .TXT and .WRD (changed both wsapplication and docfile parameters), however i get the same error. I tried both from presentation and application server (by providing pf_ftp_dest = 'SAPFTPA' pf_http_dest = 'SAPHTTPA' )
Any idea on how to solve this?
All i need is create a DMS document with a PDF attachment from application server. Are there any other ways to solve this issue?
ws_docdata-documenttype = 'ARE'.
ws_docdata-description = 'BAPI DMS'.
ws_docdata-statusextern = 'CR'.
ws_file-storagecategory = 'DMS_C1_ST'.
ws_file-wsapplication = 'PDF'.
ws_file-description = 'Job output'.
ws_file-docfile = 'C:\CAD Integ BAPIS_46.pdf'.
append ws_file to it_files.
CALL FUNCTION 'BAPI_DOCUMENT_CREATE2'
EXPORTING
documentdata = ws_docdata
IMPORTING
return = v_ret
TABLES
documentfiles = it_files .
BREAK-POINT.
IF v_ret-type CA 'EA'.
ROLLBACK WORK.
WRITE : v_Ret-message.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = '5'.
ENDIF.
Thanks
PavanHi,
I found that it is due to document type = 'ARE'. I changed hte document type to one of hte standard type 'TST'. It works for presentation server, but does not work for application server. Any ideas? Any help is appreciated with points.
ws_docdata-documenttype = 'TST'.
ws_docdata-description = 'BAPI DMS'.
ws_docdata-statusextern = 'CT'.
ws_docdata-documentnumber = 'ZNG-10000000017'.
ws_file-storagecategory = 'DMS_C1_ST'.
ws_file-wsapplication = 'PDF'.
ws_file-description = 'Job output'.
ws_file-docfile = p_file.
append ws_file to it_files.
CALL FUNCTION 'BAPI_DOCUMENT_CREATE2'
EXPORTING
documentdata = ws_docdata
pf_ftp_dest = 'SAPFTPA'
pf_http_dest = 'SAPHTTPA'
IMPORTING
documentnumber = v_docnum
documentpart = v_docpart
documentversion = v_docver
return = v_ret
TABLES
documentfiles = it_files .
IF v_ret-type CA 'EA'.
ROLLBACK WORK.
WRITE : v_Ret-message.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = '5'.
ENDIF.
Thanks
Pavan -
Creating PDF with IMAGE using CFDOCUMENT TAG
Hi Guys,
I m facing problem while creating the PDF using CFDOCUMENT
tag.
Actually my clients want the IMAGEs in PDF document.
Problem is most of the images in JPG format and while I am
going to attach images in PDF document it takes lots of time for
creating PDF. In most of time it cause timeout.
I have try to convert images JPG to PNG, yes I some what
better performance than JPG format but still it is work for 20 - 25
images. In my case I want to attach normally 50-100 images in PDF
(sometimes it is more 200).
PLZ, Help me.. F1...F1...F1
thanks in advance
Pritesh
Coldfusion ProgrammerI am having a similar and more serious problem. It takes a
long time to execute, but even attaching a small image balloons the
pdf to 6MB plus. After a few images it gets up to 20MB. These are
100k jpeg files being attached. The resulting PDF is too large to
email or process effectively. Does anyone know how to reduce
size/processing? -
XI message with Attachment using Http Adapter
Hi ,
We are using XI/PI 7.0 with Sp09 and Sender Application is SRM and Receiver is Ariba MarketPlace.
We are trying to Send PO with Attachments like Word, PDF etc from SRM to Ariba using Https adapter and from SRM we are using ABAP Proxy. When I did the testing with out any special config, I was able to send the attachments (I can see word doc as part of the payload-attachment) to XI from SRM but this attachment is not going through https adapter from XI to Ariba?
I have read some posts on this but I could not find the answer for my situation. One of the solution is that we can use SOAP adapter but we don't want to use Soap for some reasons.
Please give your thoughts.
Thanks in Advance.
-Laxman> Thanks for your replies, I am little confused, based
> on your references http can't support attachments.
That is true.
> Also sap help link says Http adapter doesn't support
> attachments and XI adapter also doesn't support.
That is not true. XI adapter (in fact we do not talk of an adapter) supports attachments.
> It means Proxy also shouldn't support because proxy is
> nothing but XI adapter.
This is true, ABAP or Java Proxy are like XI adapter. Therefore it supports attachments.
> But When I send PO with attachments from SRM using
> Proxy connection I was able to pass through XI. So
> how proxy was able to send the attachments and this
> is contradicts to the help documentation.
The online help is wrong.
> We don't want to use SOAP because we are already
> using https adapter and this scenario is in
> production also if we go with SOAP then we have to
> re-import the digital certificate in Java Engine for
> SSL. Attachments are the new enhancement only.
I do not see another solution besides using SOAP adapter in so-called non-SOAP mode. Yes you have to reimport the certificates to J2EE stack.
Regards
Stefan -
Create Bom with alternative using CSAP_MAT_BOM_MAINTAIN
Hi all,
I am trying to create a new alternative BOM and thought I had to use the function CSAP_MAT_BOM_MAINTAIN. Creating new BOMs with CSAP_MAT_BOM_CREATE works as well as maintaining them with CSAP_MAT_BOM_MAINTAIN, but I fail in creating a new alternative BOM. In the function
CS_DI_HEADER_OBJECT_CHECK (called within the maintain-function ) it says (close to the failure )
"*Anlegen von Alternativen über CSAP nicht erlaubt"
"creation of alternative using csap not allowed" ....
Well, sounds like I am using the wrong function, but which should I use instead ???
Thanx in advance,
KarstenHi,
Use : CS_BI_BOM_CREATE_BATCH_INPUT1 To Create a new BOM or New Alt. BOM.
Use : CS_BC_BOM_CHANGE_BATCH_INPUT to maintain the BOM.
Maybe you are looking for
-
This is a repost to correctly ID this as a Spaces issue. I am using a MacBook Pro with a second monitor in extended desktop. I put iMovie in full screen and when I put it back, it disappeared off of both desktops. I can see it in Spaces and I can use
-
New Macbook Pro won't work with Snow Airport
I am trying to connect my new Macbook pro with an old airport snow. The macbook can see the airport's network, but everytime I try and connect to it there's an error. I can connect to the airport via the ethernet, but if I try to use the assistant fo
-
Currently in China... fantastic country...amazing cold spell... snow 3m thick in places... Europe appears the same... still a working off line version of maps would be very useful... I have an E71 phone with maps 2 and the chat seems to be I'm better
-
Dear All, My client is selling his finished Goods through another Party. They are taking materials from the our client and keeping in their godown. When ever an order comes they will deliver the materials and invoice it in the name of Our client. Ple
-
Degradation in image sharpness in LR 2.7 64
I am running LR 2.7 64 bit on Windows and experiencing an odd behavior regarding degradation of image sharpness over increased access. For example, I will transfer images from a shoot and begin my first pass review process. That process looks at a nu