I have found a working solution for sending email with attachment using APEX application. But first, few items have to take note :-
- User can insert any attachment into the form
- The attachment will be save into my own table within the Oracle database.
User can insert any attachment
This will be require an item named ‘File Browse…’. Simply add the item into the page. I assume at this point, you already know how to it. Lets name it as [P1_ATTACHMENT]
Take a look at the [Settings] tab when u edit this item page. The storage type setting can be either two : 1.Table WWV_FLOW_FILES and 2.BLOB column specified in Item Source attribute
I will choose option No.1. Why I did not choose option No.2? As I had mentioned that the attachment will be save into my own table?
I am not expert, perhaps you can correct me if I am wrong, but I think that insert a attachment files into table will require some additional coding when we want to execute it in APEX environment.
One more reason is, I already has define one table to fetch row in the [Processes] in [After Header] section. So by adding another one more table (attachment table) it will make APEX get confused. Anyway, I have tried it. It does not work.
The attachment will be save into my own table within the Oracle database.
Next step is to save the file attachment to be save in my own attachment table. Lets name my table as ATTACHMENT_FILES.
CREATE TABLE ATTACHMENT_FILES
MIMETYPE VARCHAR2(255 BYTE),
FILENAME VARCHAR2(255 BYTE),
CHARSET VARCHAR2(128 BYTE),
UPLOADED_BY VARCHAR2(10 BYTE),
Since I already have my table ready, I will now need to create one process to copy the file from WWV_FLOW_FILES into ATTACHMENT_FILES.
This process must be create at point [Processing > Processes] on [Page Processing]
- Right click on [Processes] > Create
- Select [PL/SQL] and Next
- Give a name to identify the procesess and click Next (lets name it as ‘CopyFile’)
- On the [Enter PL/SQL Page Process], paste below code;
insert into ATTACHMENT_FILES( id, blob_content, mimetype, filename, last_update, doc_size )
select :P1_YOUR_ID, blob_content, mime_type, filename, created_on, doc_size from wwv_flow_files where name = :P1_ATTACHMENT;
delete from wwv_flow_files where name = :P1_ATTACHMENT;
So by now, you got the idea already right? First, we let the attachment to be saved into WWV_FLOW_FILES. Then we copied it over to our own table and delete the original data from WWV_FLOW_FILES to avoid consume space and storage.
To avoid any complex coding in PL/SQL, I believe this method is faster. It depends on your needs.
Hurmm..I will talk about sending email as Part 2 later on.
Update : This is the Part 2.