SlideShare a Scribd company logo
1 of 8
بسم ا ل ا لرحمن ا لرحيم 
Send Mail With Attached Report layout في الملف التيي سوف نقوم بتوضيح كيفية عمل 
خطوات يجب تينفيذها من قاعدة البيانات 
كلتيي :- 
Database التيية علي DIRECTORY أولاً:-:- يجب عمل ال 
DBA وهو يكون به المسار الموجود به الملفات التي يتم اخراجها من تيفعيل التقرير والمسئول عن هذا هو 
---------------------------------------------------------------------- 
CREATE OR REPLACE DIRECTORY 
REQ_OUT AS 
'/oracle/PROD/inst/apps/MBCC_htest/logs/appl/conc/out'; 
---------------------------------------------------------------------- 
ثانياً::-- عمل جدول 
---------------------------------------------------------------------- 
CREATE TABLE APPS.MAIL_BLOB 
(M_ID NUMBER,BLOB BLOB) ; 
------------------------------------------------------------------------ 
ثالثاً:-:- 
-------------------------------------------------------------------------------------------------------- 
CREATE OR REPLACE PROCEDURE APPS.MBCC_send_mail_attch (p_sender IN VARCHAR2, 
p_recipicent IN VARCHAR2, 
p_subject IN VARCHAR2, 
p_message IN VARCHAR2, 
p_filename IN VARCHAR2, 
p_blob BLOB, 
P_VALUE_SET_ID IN NUMBER) 
IS 
l_mailhost VARCHAR2 (64) := ' ;'يتم التغيير حسب عنوان الخادم المسئول عن إرسال الميلت'-- ;' 192.168.1.4 
c UTL_SMTP.connection; 
v_raw RAW (57); 
v_length INTEGER := 0; 
v_buffer_size INTEGER := 57; 
v_offset INTEGER := 1; 
l_boundary VARCHAR2 (32) := SYS_GUID (); 
BEGIN 
c := UTL_SMTP.open_connection (l_mailhost, 25); 
UTL_SMTP.helo (c, l_mailhost); 
UTL_SMTP.mail (c, p_sender); 
------------------------------------------------ 
--UTL_SMTP.rcpt (c, p_recipicent); 
--------------------------------------------- 
FOR I IN (SELECT FV.flex_value mail 
-- FVT.description 
FROM FND_FLEX_VALUES FV 
WHERE (FV.FLEX_VALUE_SET_ID=P_VALUE_SET_ID) 
AND NVL (FV.ENABLED_FLAG, 'Y') = 'Y' 
)loop 
UTL_SMTP.rcpt (c, i.mail ); 
end loop; 
------------------------------------------------- 
UTL_SMTP.open_data (c); 
-- Header
UTL_SMTP.write_data (c, 'From: ' || p_sender || UTL_TCP.crlf); 
----------------------------------------------------------------------------- 
-- UTL_SMTP.write_data (c, 'To: ' || p_recipicent || UTL_TCP.crlf); 
--------------------------------------------------------------------------- 
FOR I IN (SELECT FV.flex_value mail 
-- FVT.description 
FROM FND_FLEX_VALUES FV 
WHERE (FV.FLEX_VALUE_SET_ID=P_VALUE_SET_ID) 
AND NVL (FV.ENABLED_FLAG, 'Y') = 'Y' 
)loop 
UTL_SMTP.write_data (c, 'To: ' || i.mail || UTL_TCP.crlf); 
end loop; 
------------------------------------------------------------------------ 
UTL_SMTP.write_data (c, 'Subject: ' || UTL_ENCODE.MIMEHEADER_ENCODE(p_subject) || UTL_TCP.crlf); 
UTL_SMTP.write_data (c, 'MIME-Version: 1.0' || UTL_TCP.crlf); 
UTL_SMTP.write_data (c, 'Content-Type: multipart/mixed; ' || UTL_TCP.crlf); 
UTL_SMTP.write_data (c, ' boundary= "' || l_boundary || '"' || UTL_TCP.crlf); 
UTL_SMTP.write_data (c, UTL_TCP.crlf); 
-- Body 
UTL_SMTP.write_data (c, '--' || 'Content-Type: text/html;charset=1256' || UTL_TCP.crlf); 
UTL_SMTP.write_data (c, 'Content-Transfer-Encoding: 8bit' || UTL_TCP.crlf); 
UTL_SMTP.write_data (c, UTL_TCP.crlf); 
UTL_SMTP.write_data (c, utl_raw.cast_to_raw(p_message) || UTL_TCP.crlf); 
UTL_SMTP.write_data (c, UTL_TCP.crlf); 
--================================================================== 
-- Attachment 
UTL_SMTP.write_data (c, '--' || l_boundary || UTL_TCP.crlf); 
UTL_SMTP.write_data ( c, 'Content-Type: application/octet-stream' || UTL_TCP.crlf); 
UTL_SMTP.write_data ( c, 'Content-Disposition: attachment; filename="' || p_filename || '"' || UTL_TCP.crlf); 
UTL_SMTP.write_data (c, 'Content-Transfer-Encoding: base64' || UTL_TCP.crlf); 
UTL_SMTP.write_data (c, UTL_TCP.crlf); 
v_length := DBMS_LOB.getlength (p_blob); 
-- <<while_loop>> 
WHILE v_offset < v_length LOOP 
DBMS_LOB.read (p_blob, v_buffer_size, v_offset, v_raw); 
UTL_SMTP.write_raw_data (c, UTL_ENCODE.base64_encode (v_raw)); 
UTL_SMTP.write_data (c, UTL_TCP.crlf); 
v_offset := v_offset + v_buffer_size; 
END LOOP while_loop; 
UTL_SMTP.write_data (c, '--' || l_boundary || '--' || UTL_TCP.crlf); 
UTL_SMTP.write_data (c, UTL_TCP.crlf); 
UTL_SMTP.close_data (c); 
UTL_SMTP.quit (c); 
EXCEPTION 
WHEN UTL_SMTP.transient_error OR UTL_SMTP.permanent_error 
THEN UTL_SMTP.quit (c); 
RAISE; 
WHEN OTHERS THEN 
RAISE; 
END MBCC_send_mail_attch; 
/ 
--------------------------------------------------------
لكل تقرير حيث أن الخطوات السابفة كلها خطوات عامة PROCEDURE رابعاً::-- ومن هنا يتم النففصال بعمل 
والمثال التي هو تقرير به حدود إستعلم واحدة وهي رقم امر البيع 
------------------------------------------------------------------------------------------------------------- 
CREATE OR REPLACE PROCEDURE MBCC_SO_PRINT_COUPONS(Errbuf OUT VARCHAR2, 
Retcode OUT NUMBER, 
P_SO IN VARCHAR2, 
P_Layout_Type IN VARCHAR2 ) 
IS 
v_req_id NUMBER; 
v_phase VARCHAR2(240); 
v_status VARCHAR2(240); 
v_request_phase VARCHAR2(240); 
v_request_status VARCHAR2(240); 
v_finished BOOLEAN; 
v_message VARCHAR2(240); 
f_nam VARCHAR2(100); 
attach BLOB; 
mail_bf BFILE; 
v_recp VARCHAR2(100) ; 
v_set_layout_option boolean; 
BEGIN 
UPDATE MAIL_BLOB SET m_blob = EMPTY_BLOB(); 
--Fnd_global.Apps_initialize(6222, 20560,706); 
v_set_layout_option := fnd_request.add_layout('ONT','XXCBS_SCM_PRINT_COUPONS1','EN','US',P_Layout_Type); 
v_req_id := FND_REQUEST.SUBMIT_REQUEST ('ONT', 'XXCBS_SCM_PRINT_COUPONS1', NULL ,SYSDATE,FALSE, P_SO ); 
COMMIT; 
-- INSERT INTO wip_log VALUES (p_job_id,v_wo, v_req_id,'report submitted'); 
IF v_req_id = 0 THEN 
errbuf := 'Report Not Submited ... ' || fnd_message.get ; 
retcode := 2; 
RETURN; 
END IF; 
DBMS_LOCK.SLEEP (10); 
v_finished := Fnd_Concurrent.Wait_For_Request (request_id => v_req_id, 
interval => 10, 
max_wait => 0, 
phase => v_phase, 
status => v_status, 
dev_phase => v_request_phase, 
dev_status => v_request_status, 
message => v_message); -- v_sub_status := (UPPER(v_request_status) = 
'NORMAL') ; 
DBMS_LOCK.SLEEP (3); 
SELECT 'XXCBS_SCM_PRINT_COUPONS1_'||v_req_id||'_1.'||P_Layout_Type 
--REGEXP_SUBSTR (outfile_name, '[^/]*$') 
INTO f_nam 
FROM FND_CONCURRENT_REQUESTS 
WHERE request_id = v_req_id ; 
mail_bf := BFILENAME ('REQ_OUT', f_nam); 
DBMS_LOB.OPEN ( mail_bf, DBMS_LOB.LOB_READONLY ); 
SELECT m_blob INTO attach FROM MAIL_BLOB WHERE m_id = 1 FOR UPDATE; 
DBMS_LOB.LOADFROMFILE (dest_lob => attach, 
src_lob => mail_bf, 
amount => DBMS_LOB.getLength (mail_bf)); 
COMMIT; 
v_recp := ----- يتم أخذ الكود الخاص بالقائمة التي تم وضع البريد الخاص بالفراد المراد إرسال البريد لهم ---; 1015493 
-- v_recp := 'IT-Misr@mbcc.local' ;
MBCC_send_mail_attch (P_sender => 'Oracle_Application@mbcc.local', 
P_recipicent => v_recp , 
-- P_subject => P_So || ' Printed', 
P_subject => P_So || ' ,'الشايب 
P_message => 'Order Number : ' || P_So || ' ,'الشايب لللل 
-- P_message => 'Order Number : ' || P_So || ' Printed', 
P_filename => P_So ||'.'|| 
CASE WHEN P_Layout_Type='EXCEL' THEN 'xls' 
ELSE P_Layout_Type end, 
P_blob => attach, 
P_VALUE_SET_ID=>v_recp 
); 
DBMS_LOB.FILECLOSE (mail_bf); 
Errbuf := 'COMPLETED All '; 
Retcode := 0; 
EXCEPTION WHEN OTHERS THEN 
Errbuf := SQLERRM ; --'NOT COMPLETED (Last )'; 
Retcode := 2; 
END MBCC_SO_PRINT_COUPONS; 
/ 
----------------------------------------------------------------------------------------
كما هو موضح PDF الخاص بالتقرير إذا كان أكسيل أو Layout كلتيي والتي سوف يتم ربطها بأنواع ال LOV خامساً::-- يتم عمل ال 
ويتم إضافة البيانات التيية:-- بنفس البيانات 
EXCEL 
PDF
أخري وسوف نستخمها لوضع البريد اللكتروني الذي سوف يتم إرسال البريد لهم ونقدر من هنا نشيل ناس ونضيف ناس زي منتا LOV ويتم عمل 
عاوز وبسهولة من غير ما تيرجع للكود تياني 
للبريد المراد الرسال اليه Enable ويتم إضافة البيانات كلتيي:- - وعمل
LOV للتقرير ثم سحب الملف الخارج منة وإرسالة إلي البريد اللكتروني الموجود في ال Run الذي سوف يقوم بعمل Request نقوم الن  بعمل ال 
السابقة
المستخدمة في التقرير LOV الموجودة في التقرير المراد إرسالة ويمكن ايضا استخدام نفس Parameter يتم زيادتها حسب ال Parameter بالنسبة لل 
أهم حاجه الترتيب الموجود في البروسديور 
وال المستعان  
أحب اتوجه بالشكر لكل من م/ عبدالعليم زعزوع والدكتور عمرو سامي علشان  هما الي عملوا الشغل انا بس رتبتوا وكتب الورقتين دول يعني معملتش 
حاجه وربنا ينفعنا بعلمهم 
في مشكلة ل سة فاضلة ا لي ربن ا يكرمو ا ويعرف يحلها ا و يكون عندو ا مقتراحات يبعته ا تاني ل و سمحتم

More Related Content

What's hot

Purchase Order Approval Using Approval Management Engine
Purchase Order Approval Using Approval Management EnginePurchase Order Approval Using Approval Management Engine
Purchase Order Approval Using Approval Management Engine
Ah_Ismail
 

What's hot (20)

Oracle inventory R12 Setup Guide
Oracle inventory R12 Setup GuideOracle inventory R12 Setup Guide
Oracle inventory R12 Setup Guide
 
Personalization to restrict subinventory lov in miscellaneous transaction to ...
Personalization to restrict subinventory lov in miscellaneous transaction to ...Personalization to restrict subinventory lov in miscellaneous transaction to ...
Personalization to restrict subinventory lov in miscellaneous transaction to ...
 
Sales Order needs to be automatically reserved, shipped & invoiced without an...
Sales Order needs to be automatically reserved, shipped & invoiced without an...Sales Order needs to be automatically reserved, shipped & invoiced without an...
Sales Order needs to be automatically reserved, shipped & invoiced without an...
 
Oracle R12.1.3 Costing Overview
Oracle R12.1.3 Costing OverviewOracle R12.1.3 Costing Overview
Oracle R12.1.3 Costing Overview
 
How to create PO with ASN
How to create PO with ASNHow to create PO with ASN
How to create PO with ASN
 
O2 c and p2p cycles
O2 c and p2p cyclesO2 c and p2p cycles
O2 c and p2p cycles
 
How to configure LCM After receiving
How to configure LCM After receivingHow to configure LCM After receiving
How to configure LCM After receiving
 
Inventory in Oracle apps
Inventory in Oracle apps Inventory in Oracle apps
Inventory in Oracle apps
 
R12 Oracle Inventory Management, New Features
R12 Oracle Inventory Management, New FeaturesR12 Oracle Inventory Management, New Features
R12 Oracle Inventory Management, New Features
 
Configuring Parallel Approvers Notification
Configuring Parallel Approvers NotificationConfiguring Parallel Approvers Notification
Configuring Parallel Approvers Notification
 
Ap invoice line level approval - R12
Ap invoice line level approval - R12  Ap invoice line level approval - R12
Ap invoice line level approval - R12
 
Oracle Inventory – Types of Move Orders
Oracle Inventory – Types of Move OrdersOracle Inventory – Types of Move Orders
Oracle Inventory – Types of Move Orders
 
Purchase Order Approval Using Approval Management Engine
Purchase Order Approval Using Approval Management EnginePurchase Order Approval Using Approval Management Engine
Purchase Order Approval Using Approval Management Engine
 
Oracle Order Management (Assign freight cost on shipping transaction)
Oracle Order Management (Assign freight cost on shipping transaction)Oracle Order Management (Assign freight cost on shipping transaction)
Oracle Order Management (Assign freight cost on shipping transaction)
 
Sales order approval process
Sales order approval  processSales order approval  process
Sales order approval process
 
R12.2.4 india localization setup
R12.2.4 india localization setupR12.2.4 india localization setup
R12.2.4 india localization setup
 
Opm costing
Opm costingOpm costing
Opm costing
 
Inventory receiving processes for serial controlled items
Inventory receiving processes for serial controlled itemsInventory receiving processes for serial controlled items
Inventory receiving processes for serial controlled items
 
Oracle applications sla r12 SLA- demos
Oracle applications sla r12   SLA- demosOracle applications sla r12   SLA- demos
Oracle applications sla r12 SLA- demos
 
Oracle E business tax purchasing whitepaper
Oracle E business tax purchasing whitepaperOracle E business tax purchasing whitepaper
Oracle E business tax purchasing whitepaper
 

More from Ahmed Elshayeb

More from Ahmed Elshayeb (20)

Personalization who i can restrict subinventory locator to store one item only
Personalization who i can restrict subinventory locator to store one item onlyPersonalization who i can restrict subinventory locator to store one item only
Personalization who i can restrict subinventory locator to store one item only
 
Oracle Purchasing Internal Requisition
Oracle Purchasing Internal RequisitionOracle Purchasing Internal Requisition
Oracle Purchasing Internal Requisition
 
Personalization select all record from menu for manage buyer work load
Personalization select all record from menu for manage buyer work loadPersonalization select all record from menu for manage buyer work load
Personalization select all record from menu for manage buyer work load
 
Customized security roles
Customized security rolesCustomized security roles
Customized security roles
 
Cascading dependencies
Cascading dependenciesCascading dependencies
Cascading dependencies
 
Select all record from menu for matching item type in ap invoice personalization
Select all record from menu for matching item type in ap invoice personalizationSelect all record from menu for matching item type in ap invoice personalization
Select all record from menu for matching item type in ap invoice personalization
 
Oracle Personalization Restrict Subinventory And Lot Number LOV Dependent On...
Oracle Personalization Restrict Subinventory And Lot Number LOV  Dependent On...Oracle Personalization Restrict Subinventory And Lot Number LOV  Dependent On...
Oracle Personalization Restrict Subinventory And Lot Number LOV Dependent On...
 
Select All Record From Tools Menu On Find Receipts For Matching Form
Select All Record From Tools Menu On Find Receipts For Matching FormSelect All Record From Tools Menu On Find Receipts For Matching Form
Select All Record From Tools Menu On Find Receipts For Matching Form
 
Run report from menu Personalization كيفية تشغيل تقرير أو ما شابة من خلال شا...
Run report from menu  Personalization كيفية تشغيل تقرير أو ما شابة من خلال شا...Run report from menu  Personalization كيفية تشغيل تقرير أو ما شابة من خلال شا...
Run report from menu Personalization كيفية تشغيل تقرير أو ما شابة من خلال شا...
 
How to install a font using xml publisher administrator
How to install a font using xml publisher administratorHow to install a font using xml publisher administrator
How to install a font using xml publisher administrator
 
Personalization to restrict subinventory lov in interorganization transfer كي...
Personalization to restrict subinventory lov in interorganization transfer كي...Personalization to restrict subinventory lov in interorganization transfer كي...
Personalization to restrict subinventory lov in interorganization transfer كي...
 
Personalizations for control deliver to organizations in Purchase Requisition...
Personalizations for control deliver to organizations in Purchase Requisition...Personalizations for control deliver to organizations in Purchase Requisition...
Personalizations for control deliver to organizations in Purchase Requisition...
 
Items Subinventory Assignment كيفية ربط مخزن معين بعدة أصناف بإستخدام API
Items Subinventory Assignment كيفية ربط مخزن معين بعدة أصناف بإستخدام APIItems Subinventory Assignment كيفية ربط مخزن معين بعدة أصناف بإستخدام API
Items Subinventory Assignment كيفية ربط مخزن معين بعدة أصناف بإستخدام API
 
Assign Freight Cost On Shipping Transaction
Assign Freight Cost On Shipping TransactionAssign Freight Cost On Shipping Transaction
Assign Freight Cost On Shipping Transaction
 
Procedure To Store Database Object Size And Number Of Rows In Custom Table
Procedure To Store Database Object Size And Number Of Rows In Custom TableProcedure To Store Database Object Size And Number Of Rows In Custom Table
Procedure To Store Database Object Size And Number Of Rows In Custom Table
 
Personalization to restrict values in customer name and number lov in sales o...
Personalization to restrict values in customer name and number lov in sales o...Personalization to restrict values in customer name and number lov in sales o...
Personalization to restrict values in customer name and number lov in sales o...
 
How to remove disable and cancel shipment functionality in enter purchase or...
How to remove  disable and cancel shipment functionality in enter purchase or...How to remove  disable and cancel shipment functionality in enter purchase or...
How to remove disable and cancel shipment functionality in enter purchase or...
 
Inventory aging report using oracle discoverer desktop
Inventory aging report using oracle discoverer desktopInventory aging report using oracle discoverer desktop
Inventory aging report using oracle discoverer desktop
 
Oracle Web Adi For upload item master
Oracle Web Adi For upload item masterOracle Web Adi For upload item master
Oracle Web Adi For upload item master
 
Customize the login homepage For Oracle EBS R12
Customize the login homepage For Oracle EBS R12Customize the login homepage For Oracle EBS R12
Customize the login homepage For Oracle EBS R12
 

Send mail with attached report layout

  • 1. بسم ا ل ا لرحمن ا لرحيم Send Mail With Attached Report layout في الملف التيي سوف نقوم بتوضيح كيفية عمل خطوات يجب تينفيذها من قاعدة البيانات كلتيي :- Database التيية علي DIRECTORY أولاً:-:- يجب عمل ال DBA وهو يكون به المسار الموجود به الملفات التي يتم اخراجها من تيفعيل التقرير والمسئول عن هذا هو ---------------------------------------------------------------------- CREATE OR REPLACE DIRECTORY REQ_OUT AS '/oracle/PROD/inst/apps/MBCC_htest/logs/appl/conc/out'; ---------------------------------------------------------------------- ثانياً::-- عمل جدول ---------------------------------------------------------------------- CREATE TABLE APPS.MAIL_BLOB (M_ID NUMBER,BLOB BLOB) ; ------------------------------------------------------------------------ ثالثاً:-:- -------------------------------------------------------------------------------------------------------- CREATE OR REPLACE PROCEDURE APPS.MBCC_send_mail_attch (p_sender IN VARCHAR2, p_recipicent IN VARCHAR2, p_subject IN VARCHAR2, p_message IN VARCHAR2, p_filename IN VARCHAR2, p_blob BLOB, P_VALUE_SET_ID IN NUMBER) IS l_mailhost VARCHAR2 (64) := ' ;'يتم التغيير حسب عنوان الخادم المسئول عن إرسال الميلت'-- ;' 192.168.1.4 c UTL_SMTP.connection; v_raw RAW (57); v_length INTEGER := 0; v_buffer_size INTEGER := 57; v_offset INTEGER := 1; l_boundary VARCHAR2 (32) := SYS_GUID (); BEGIN c := UTL_SMTP.open_connection (l_mailhost, 25); UTL_SMTP.helo (c, l_mailhost); UTL_SMTP.mail (c, p_sender); ------------------------------------------------ --UTL_SMTP.rcpt (c, p_recipicent); --------------------------------------------- FOR I IN (SELECT FV.flex_value mail -- FVT.description FROM FND_FLEX_VALUES FV WHERE (FV.FLEX_VALUE_SET_ID=P_VALUE_SET_ID) AND NVL (FV.ENABLED_FLAG, 'Y') = 'Y' )loop UTL_SMTP.rcpt (c, i.mail ); end loop; ------------------------------------------------- UTL_SMTP.open_data (c); -- Header
  • 2. UTL_SMTP.write_data (c, 'From: ' || p_sender || UTL_TCP.crlf); ----------------------------------------------------------------------------- -- UTL_SMTP.write_data (c, 'To: ' || p_recipicent || UTL_TCP.crlf); --------------------------------------------------------------------------- FOR I IN (SELECT FV.flex_value mail -- FVT.description FROM FND_FLEX_VALUES FV WHERE (FV.FLEX_VALUE_SET_ID=P_VALUE_SET_ID) AND NVL (FV.ENABLED_FLAG, 'Y') = 'Y' )loop UTL_SMTP.write_data (c, 'To: ' || i.mail || UTL_TCP.crlf); end loop; ------------------------------------------------------------------------ UTL_SMTP.write_data (c, 'Subject: ' || UTL_ENCODE.MIMEHEADER_ENCODE(p_subject) || UTL_TCP.crlf); UTL_SMTP.write_data (c, 'MIME-Version: 1.0' || UTL_TCP.crlf); UTL_SMTP.write_data (c, 'Content-Type: multipart/mixed; ' || UTL_TCP.crlf); UTL_SMTP.write_data (c, ' boundary= "' || l_boundary || '"' || UTL_TCP.crlf); UTL_SMTP.write_data (c, UTL_TCP.crlf); -- Body UTL_SMTP.write_data (c, '--' || 'Content-Type: text/html;charset=1256' || UTL_TCP.crlf); UTL_SMTP.write_data (c, 'Content-Transfer-Encoding: 8bit' || UTL_TCP.crlf); UTL_SMTP.write_data (c, UTL_TCP.crlf); UTL_SMTP.write_data (c, utl_raw.cast_to_raw(p_message) || UTL_TCP.crlf); UTL_SMTP.write_data (c, UTL_TCP.crlf); --================================================================== -- Attachment UTL_SMTP.write_data (c, '--' || l_boundary || UTL_TCP.crlf); UTL_SMTP.write_data ( c, 'Content-Type: application/octet-stream' || UTL_TCP.crlf); UTL_SMTP.write_data ( c, 'Content-Disposition: attachment; filename="' || p_filename || '"' || UTL_TCP.crlf); UTL_SMTP.write_data (c, 'Content-Transfer-Encoding: base64' || UTL_TCP.crlf); UTL_SMTP.write_data (c, UTL_TCP.crlf); v_length := DBMS_LOB.getlength (p_blob); -- <<while_loop>> WHILE v_offset < v_length LOOP DBMS_LOB.read (p_blob, v_buffer_size, v_offset, v_raw); UTL_SMTP.write_raw_data (c, UTL_ENCODE.base64_encode (v_raw)); UTL_SMTP.write_data (c, UTL_TCP.crlf); v_offset := v_offset + v_buffer_size; END LOOP while_loop; UTL_SMTP.write_data (c, '--' || l_boundary || '--' || UTL_TCP.crlf); UTL_SMTP.write_data (c, UTL_TCP.crlf); UTL_SMTP.close_data (c); UTL_SMTP.quit (c); EXCEPTION WHEN UTL_SMTP.transient_error OR UTL_SMTP.permanent_error THEN UTL_SMTP.quit (c); RAISE; WHEN OTHERS THEN RAISE; END MBCC_send_mail_attch; / --------------------------------------------------------
  • 3. لكل تقرير حيث أن الخطوات السابفة كلها خطوات عامة PROCEDURE رابعاً::-- ومن هنا يتم النففصال بعمل والمثال التي هو تقرير به حدود إستعلم واحدة وهي رقم امر البيع ------------------------------------------------------------------------------------------------------------- CREATE OR REPLACE PROCEDURE MBCC_SO_PRINT_COUPONS(Errbuf OUT VARCHAR2, Retcode OUT NUMBER, P_SO IN VARCHAR2, P_Layout_Type IN VARCHAR2 ) IS v_req_id NUMBER; v_phase VARCHAR2(240); v_status VARCHAR2(240); v_request_phase VARCHAR2(240); v_request_status VARCHAR2(240); v_finished BOOLEAN; v_message VARCHAR2(240); f_nam VARCHAR2(100); attach BLOB; mail_bf BFILE; v_recp VARCHAR2(100) ; v_set_layout_option boolean; BEGIN UPDATE MAIL_BLOB SET m_blob = EMPTY_BLOB(); --Fnd_global.Apps_initialize(6222, 20560,706); v_set_layout_option := fnd_request.add_layout('ONT','XXCBS_SCM_PRINT_COUPONS1','EN','US',P_Layout_Type); v_req_id := FND_REQUEST.SUBMIT_REQUEST ('ONT', 'XXCBS_SCM_PRINT_COUPONS1', NULL ,SYSDATE,FALSE, P_SO ); COMMIT; -- INSERT INTO wip_log VALUES (p_job_id,v_wo, v_req_id,'report submitted'); IF v_req_id = 0 THEN errbuf := 'Report Not Submited ... ' || fnd_message.get ; retcode := 2; RETURN; END IF; DBMS_LOCK.SLEEP (10); v_finished := Fnd_Concurrent.Wait_For_Request (request_id => v_req_id, interval => 10, max_wait => 0, phase => v_phase, status => v_status, dev_phase => v_request_phase, dev_status => v_request_status, message => v_message); -- v_sub_status := (UPPER(v_request_status) = 'NORMAL') ; DBMS_LOCK.SLEEP (3); SELECT 'XXCBS_SCM_PRINT_COUPONS1_'||v_req_id||'_1.'||P_Layout_Type --REGEXP_SUBSTR (outfile_name, '[^/]*$') INTO f_nam FROM FND_CONCURRENT_REQUESTS WHERE request_id = v_req_id ; mail_bf := BFILENAME ('REQ_OUT', f_nam); DBMS_LOB.OPEN ( mail_bf, DBMS_LOB.LOB_READONLY ); SELECT m_blob INTO attach FROM MAIL_BLOB WHERE m_id = 1 FOR UPDATE; DBMS_LOB.LOADFROMFILE (dest_lob => attach, src_lob => mail_bf, amount => DBMS_LOB.getLength (mail_bf)); COMMIT; v_recp := ----- يتم أخذ الكود الخاص بالقائمة التي تم وضع البريد الخاص بالفراد المراد إرسال البريد لهم ---; 1015493 -- v_recp := 'IT-Misr@mbcc.local' ;
  • 4. MBCC_send_mail_attch (P_sender => 'Oracle_Application@mbcc.local', P_recipicent => v_recp , -- P_subject => P_So || ' Printed', P_subject => P_So || ' ,'الشايب P_message => 'Order Number : ' || P_So || ' ,'الشايب لللل -- P_message => 'Order Number : ' || P_So || ' Printed', P_filename => P_So ||'.'|| CASE WHEN P_Layout_Type='EXCEL' THEN 'xls' ELSE P_Layout_Type end, P_blob => attach, P_VALUE_SET_ID=>v_recp ); DBMS_LOB.FILECLOSE (mail_bf); Errbuf := 'COMPLETED All '; Retcode := 0; EXCEPTION WHEN OTHERS THEN Errbuf := SQLERRM ; --'NOT COMPLETED (Last )'; Retcode := 2; END MBCC_SO_PRINT_COUPONS; / ----------------------------------------------------------------------------------------
  • 5. كما هو موضح PDF الخاص بالتقرير إذا كان أكسيل أو Layout كلتيي والتي سوف يتم ربطها بأنواع ال LOV خامساً::-- يتم عمل ال ويتم إضافة البيانات التيية:-- بنفس البيانات EXCEL PDF
  • 6. أخري وسوف نستخمها لوضع البريد اللكتروني الذي سوف يتم إرسال البريد لهم ونقدر من هنا نشيل ناس ونضيف ناس زي منتا LOV ويتم عمل عاوز وبسهولة من غير ما تيرجع للكود تياني للبريد المراد الرسال اليه Enable ويتم إضافة البيانات كلتيي:- - وعمل
  • 7. LOV للتقرير ثم سحب الملف الخارج منة وإرسالة إلي البريد اللكتروني الموجود في ال Run الذي سوف يقوم بعمل Request نقوم الن بعمل ال السابقة
  • 8. المستخدمة في التقرير LOV الموجودة في التقرير المراد إرسالة ويمكن ايضا استخدام نفس Parameter يتم زيادتها حسب ال Parameter بالنسبة لل أهم حاجه الترتيب الموجود في البروسديور وال المستعان أحب اتوجه بالشكر لكل من م/ عبدالعليم زعزوع والدكتور عمرو سامي علشان هما الي عملوا الشغل انا بس رتبتوا وكتب الورقتين دول يعني معملتش حاجه وربنا ينفعنا بعلمهم في مشكلة ل سة فاضلة ا لي ربن ا يكرمو ا ويعرف يحلها ا و يكون عندو ا مقتراحات يبعته ا تاني ل و سمحتم