您的位置:首页 > 其它

Form_通过FND_FNDFLUPL标准功能上传CSV控件(案例)

2014-06-08 19:20 856 查看
2014-06-08 Created By BaoXinjian



一、总结


1. 上传资料

(1).通过调用function<FND_FNDFLUPL>,打开上传文件页面;

(2).从表fnd_lob_access和fnd_lobs中取出文件名放在form画面上;

2. 对dbms_lob中的二进制文件进行处理

(1).通过dbms_lob.converttoclob将二进制文件转换成字符文件;

(2).通过dbms_lob.instr和dbms_lob.substr在字符文件获取字符串记录;

3. 对获取资料放入到临时表,并显示在画面上

(1).通过instr和substr获字符串记录中的字段;

(2).并将字段赋值到集合或表中;



二、步骤


1. 上传资料

DECLARE
access_id NUMBER;
l_server_url VARCHAR2(100);
l_parameters VARCHAR2(100);
button_choice INTEGER;
l_file_id VARCHAR2(100);
l_gfm_id INTEGER;
BEGIN
access_id := fnd_gfm.authorize(NULL);
fnd_profile.get('APPS_WEB_AGENT', l_server_url);
l_parameters := 'access_id=' || access_id || ' l_server_url=' || l_server_url;
fnd_function.EXECUTE(function_name => 'FND_FNDFLUPL',
open_flag => 'Y',
session_flag => 'Y',
other_params => l_parameters);
-- Display a modal message for user to indicate file upload
-- is completed.
fnd_message.set_name('FND', 'ATCHMT-FILE-UPLOAD-COMPLETE');
button_choice := fnd_message.question(button1 => 'YES',
button2 => NULL,
button3 => 'NO',
default_btn => 1,
cancel_btn => 3,
icon => 'question');

IF (button_choice = 3) THEN
NULL;
ELSIF (button_choice = 1) THEN
l_file_id := '';
l_gfm_id := fnd_gfm.get_file_id(access_id);
:main.gfm_id := fnd_gfm.get_file_id(access_id);
IF l_gfm_id IS NOT NULL THEN
SELECT DECODE(INSTR(file_name, '/'),0,file_name,SUBSTR(file_name, INSTR(file_name, '/') + 1))
INTO l_file_id
FROM fnd_lobs
WHERE file_id = l_gfm_id;
IF l_file_id IS NOT NULL THEN
:main.filename := l_file_id;
SELECT cux_ce_stmt_s.NEXTVAL INTO :main.working_id FROM DUAL;
END IF;
END IF;
END IF;
END IF;


2. 对dbms_lob中的二进制文件进行处

DECLARE
c_data CLOB;
l_data BLOB;
l_dest_offset INTEGER := 1;
l_scr_offset INTEGER := 1;
l_lang_context INTEGER := DBMS_LOB.default_lang_ctx;
l_warn INTEGER;
n_offset INTEGER;
n_clob_size INTEGER;
n_pos INTEGER;
v_buf VARCHAR2(4000);
BEGIN
DBMS_LOB.createtemporary(c_data, FALSE, DBMS_LOB.SESSION);
SELECT file_data INTO l_data FROM fnd_lobs WHERE file_id = 1501905;
DBMS_LOB.converttoclob(dest_lob => c_data,
src_blob => l_data,
amount => DBMS_LOB.lobmaxsize,
dest_offset => l_dest_offset,
src_offset => l_scr_offset,
blob_csid => NLS_CHARSET_ID('UTF8'),
lang_context => l_lang_context,
warning => l_warn);
n_offset := 1;
LOOP
n_pos := DBMS_LOB.INSTR(lob_loc => c_data,
pattern => CHR(10),
offset => n_offset,
nth => 1);
IF NVL(n_pos, 0) = 0 THEN
n_pos := n_clob_size + 1;
END IF;
v_buf := DBMS_LOB.SUBSTR(lob_loc => c_data,
amount => n_pos - n_offset,
offset => n_offset);
n_offset := n_pos + 1;
EXIT WHEN n_pos > n_clob_size;
END LOOP;
IF dbms_lob.istemporary(l_data) > 0 THEN
dbms_lob.freetemporary(l_data);
END IF;
IF dbms_lob.istemporary(c_data) > 0 THEN
dbms_lob.freetemporary(c_data);
END IF;
END IF;


3. 对获取资料放入到临时表,并显示在画面上

DECLARE
v_buf VARCHAR2(1000);
v_field VARCHAR2(1000);
n_delimiter_pos INTEGER;
BEGIN
v_buf := 'Return Authorization Reference,Adjustment Type,Vendor Number,Site Code- Pay To,Site Code- Ship To,Part Number,Quantity,Subinventory';
LOOP
v_field := NULL;
n_delimiter_pos := INSTR(v_buf, ',');
IF n_delimiter_pos > 0 THEN
v_field := LTRIM(RTRIM(SUBSTR(v_buf, 1, n_delimiter_pos - 1)));
v_buf := SUBSTR(v_buf, n_delimiter_pos + 1);
ELSIF LTRIM(RTRIM(v_buf)) IS NOT NULL THEN
v_field := LTRIM(RTRIM(v_buf));
v_buf := NULL;
END IF;
IF (v_buf IS NULL) THEN
EXIT;
END IF;
END LOOP;
END;


Thanks and Regards

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐