CREATE OR REPLACE PROCEDURE XX_PER_ARREAR_FILE_UPLOAD
(P_EMP_NO VARCHAR2)
IS
l_rowid ROWID;
l_attached_document_id NUMBER;
l_document_id NUMBER;
l_media_id NUMBER;
l_category_id NUMBER;
l_pk1_value fnd_attached_documents.pk1_value%TYPE ;
----<Primary Key information that uniquely identifies the product (such as the product_ID)>;
l_description fnd_documents_tl.description%TYPE := 'Arrear Attachment';
l_filename VARCHAR2 (240) := p_emp_no||'.xls';
--l_file_path VARCHAR2 (240) := 'test';
---'SALE_INVOICE_PATH'; --Server Directory Path for upload files
l_seq_num NUMBER;
l_blob_data BLOB;
l_blob BLOB;
l_bfile BFILE;
l_byte NUMBER;
l_fnd_user_id NUMBER;
l_short_datatype_id NUMBER;
x_blob BLOB;
fils BFILE;
blob_length INTEGER;
l_entity_name VARCHAR2 (100) := 'PERSON_ID';
l_oracle_directory varchar2(100):= 'ECX_UTL_LOG_DIR_OBJ';
l_content_type varchar2(100):= 'application/vnd.ms-excel';
--application/vnd.ms-excel--application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
--- <entity_name>;
l_category_name VARCHAR2 (100) := 'Miscellaneous';--XX_ARREAR_FILE_UPLOAD';
--<category_name>;
l_message varchar2(2000);
BEGIN
bEGIN
select DISTINCT PERSON_ID INTO l_pk1_value from per_all_people_f
where employee_number =P_EMP_NO;
END;
insert into XX_PER_ARREAR_UPLOAD_STG (person_id) values(l_pk1_value);
--fnd_global.apps_initialize (<userid>, <applid>,<appluserid>);
SELECT fnd_documents_s.NEXTVAL
INTO l_document_id
FROM DUAL;
SELECT fnd_attached_documents_s.NEXTVAL
INTO l_attached_document_id
FROM DUAL;
SELECT NVL (MAX (seq_num), 0) + 10
INTO l_seq_num
FROM fnd_attached_documents
WHERE pk1_value = l_pk1_value AND entity_name = l_entity_name;
-- Select User_id
SELECT user_id
INTO l_fnd_user_id
FROM apps.fnd_user
WHERE user_name = 'TECHHARDS'; -- <user_name>;
-- Get Data type id for Short Text types of attachments
SELECT datatype_id
INTO l_short_datatype_id
FROM apps.fnd_document_datatypes
WHERE NAME = 'FILE';
-- Select Category id for Attachments
--FATEMP
SELECT category_id
INTO l_category_id
FROM apps.fnd_document_categories_vl
WHERE user_name = l_category_name;
-- Select nexvalues of document id, attached document id and
-- l_media_id
SELECT apps.fnd_documents_s.NEXTVAL, apps.fnd_attached_documents_s.NEXTVAL
--apps.fnd_documents_long_text_s.NEXTVAL
INTO l_document_id, l_attached_document_id
--l_media_id
FROM DUAL;
SELECT MAX (file_id) + 1
INTO l_media_id
FROM fnd_lobs;
fils := BFILENAME (l_oracle_directory, l_filename);
--dbms_output.put_line('fils:'||fils);
-- Obtain the size of the blob file
DBMS_LOB.fileopen (fils, DBMS_LOB.file_readonly);
blob_length := DBMS_LOB.getlength (fils);
DBMS_LOB.fileclose (fils);
-- Insert a new record into the table containing the
-- filename you have specified and a LOB LOCATOR.
-- Return the LOB LOCATOR and assign it to x_blob.
INSERT INTO fnd_lobs
(file_id, file_name, file_content_type, upload_date,
expiration_date, program_name, program_tag, file_data,
LANGUAGE, oracle_charset, file_format
)
VALUES (l_media_id, l_filename, /*'text/plain',*/ l_content_type,
--'application/pdf',--
SYSDATE,
NULL, 'FNDATTCH', NULL, EMPTY_BLOB ()
,'US', /*'UTF8'*/
/* 'AR8MSWIN1256' */ 'WE8MSWIN1252',--'AR8ISO8859P6',
'binary'
/*'text'*/
)
RETURNING file_data
INTO x_blob;
-- Load the file into the database as a BLOB
DBMS_LOB.OPEN (fils, DBMS_LOB.lob_readonly);
DBMS_LOB.OPEN (x_blob, DBMS_LOB.lob_readwrite);
DBMS_LOB.loadfromfile (x_blob, fils, blob_length);
-- Close handles to blob and file
DBMS_LOB.CLOSE (x_blob);
DBMS_LOB.CLOSE (fils);
DBMS_OUTPUT.put_line ('FND_LOBS File Id Created is ' || l_media_id);
COMMIT;
-- This package allows user to share file across multiple orgs or restrict to single org
fnd_documents_pkg.insert_row
(x_rowid => l_rowid,
x_document_id => l_document_id,
x_creation_date => SYSDATE,
x_created_by => l_fnd_user_id,
-- fnd_profile.value('USER_ID')
x_last_update_date => SYSDATE,
x_last_updated_by => l_fnd_user_id,
-- fnd_profile.value('USER_ID')
x_last_update_login => -1,
x_datatype_id => l_short_datatype_id, -- FILE
x_security_id => NULL,
--<security ID defined in your Attchments, Usaully SOB ID/ORG_ID..>,
x_publish_flag => /*'N'*/ 'Y',
--This flag allow the file to share across multiple organization
x_category_id => l_category_id,
x_security_type => /*1*/ 4,
x_usage_type => /*'S'*/ 'O',
x_language => 'US',
x_description => l_filename,
x_file_name => l_filename,
x_media_id => l_media_id
);
COMMIT;
fnd_attached_documents_pkg.insert_row
(x_rowid => l_rowid,
x_attached_document_id => l_attached_document_id,
x_document_id => l_document_id,
x_creation_date => SYSDATE,
x_created_by => l_fnd_user_id,
--fnd_profile.VALUE('USER_ID'),
x_last_update_date => SYSDATE,
x_last_updated_by => l_fnd_user_id,
--fnd_profile.VALUE('USER_ID'),
x_last_update_login => -1,
x_seq_num => l_seq_num,
x_entity_name => l_entity_name,
x_column1 => NULL,
x_pk1_value => l_pk1_value,
x_pk2_value => NULL,
x_pk3_value => NULL,
x_pk4_value => NULL,
x_pk5_value => NULL,
x_automatically_added_flag => 'N',
x_datatype_id => 6,
x_category_id => l_category_id,
x_security_type => /*1*/ 4,
x_security_id => NULL,
--<security ID defined in your Attchmentsssss, SOB ID/ORG_ID..>,
x_publish_flag => 'Y',
x_language => 'US',
x_description => l_filename, --l_description,
x_file_name => l_filename,
x_media_id => l_media_id
);
update XX_PER_ARREAR_UPLOAD_STG
set media_id = l_media_id,
file_name = l_filename,
message='SUCCESSFUL'
where person_id =l_pk1_value;
COMMIT;
DBMS_OUTPUT.put_line ('MEDIA ID CREATED IS ' || l_media_id);
Exception when others then
l_message := SQLERRM;
update XX_PER_ARREAR_UPLOAD_STG
set media_id = l_media_id,
file_name = l_filename,message = l_message
where person_id =l_pk1_value;
END;
# OAF , # OAF Personalization , # Add Attachment Link through Personalization , # Oracle Apps , # EBS