One of our customers came up with a bit of a challenging requirement. Upon emailing a report to their clients, they need to attach documents connected to that record instance along with the mail. To attach a file in the event mail, you need to either have it as a binary object or the file must exist in the application server.
Requirement in detail:
Customer wants to attach documents connected to inquired supplier tab to the Order Quotation email which can send from IFS.
This functionality uses the application defined event PDF_REPORT_CREATED to send the email. By default, the archived report PDF can attached as an attachment. In order to attach additional attachments to the Email, either you need to add the object as a binary object or need to give the path where the document exist in the disk of application server machine.
My proposed solution was to downloads the file(s) to the application server and then appends the file downloaded file paths in the event action. Luckily there are set of standard methods available which were develop for a different purpose, to move files between repositories, but it served my requirement very well.
I’ve used the FILE_PATH_FOR_BATCH_TRANSFER in Document Basic – Document default values as the file download location since then this can be configured from the application.
Given below is the event action SQL for the proposed solution
-- Author : Damith Jinasena (firstname.lastname@example.org) -- Purpose : Attach documents connected to InquirySupplier LU into the -- mail sent to customer who inquires for the quotation -- App Version : IFS Applications 8 SP2 DECLARE keyref_ VARCHAR2(4000); CURSOR get_attachments IS SELECT a1.doc_class, a1.doc_no, a1.doc_sheet, a1.doc_rev, a1.doc_type, a1.file_no, a1.FILE_EXTENTION FROM IFSAPP.DOC_REFERENCE_OBJ_EXT_DETAILS a1 WHERE (a1.LU_NAME = 'InquirySupplier' AND a1.KEY_REF = keyref_); --Download path, this can be any folder location in Application Server. But I've used parameter FILE_PATH_FOR_BATCH_TRANSFER in Document BasicDocument default values. --remember to add trailing "" when defining the path download_path_ VARCHAR2(4000) := DOCMAN_DEFAULT_API.Get_Default_Value_('BatchTransferHandler', 'FILE_PATH_FOR_BATCH_TRANSFER'); error_msg_ VARCHAR2(4000); attachment_name_ varchar2(4000); attachments_ varchar2(4000); BEGIN keyref_ := 'INQUIRY_NO=' || '&PDF_PARAMETER_3' || '^VENDOR_NO=' || '&PDF_PARAMETER_2' || '^'; FOR rec_ IN get_attachments LOOP attachment_name_ := download_path_ || 'attachment-' || rec_.doc_class || '_' || rec_.doc_no || '.' || rec_.FILE_EXTENTION; error_msg_ := NULL; -- Download files from DOCMAN into folder in Applicaiton Server Batch_Transfer_Handler_Api.Download_From_Db(error_msg_, rec_.doc_class, rec_.doc_no, rec_.doc_sheet, rec_.doc_rev, rec_.doc_type, rec_.file_no, attachment_name_); IF (error_msg_ IS NOT NULL) THEN --check with view access Batch_Transfer_Handler_Api.Download_From_Db(error_msg_, rec_.doc_class, rec_.doc_no, rec_.doc_sheet, rec_.doc_rev, 'VIEW', rec_.file_no, attachment_name_); END IF; --append attachment names with ";" attachments_ := attachments_ || attachment_name_ || ';'; END LOOP; --Attach doduments to the mail and finally include the report PDF file and send mail Command_SYS.Mail( from_user_name_ => '&USER_MAIL_ADDRESS', to_user_name_ => '&PDF_PARAMETER_1', text_ => '&MAIL_TEXT', attach_=> attachments_ || '&PDF_FILE', subject_ => '&MAIL_SUBJECT'); END;
It worked pretty well and could get all the attachments in the mail.