博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Form_通过FND_FNDFLUPL标准功能上传CSV控件(案例)
阅读量:7286 次
发布时间:2019-06-30

本文共 4773 字,大约阅读时间需要 15 分钟。

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. 上传资料

1 DECLARE 3     access_id NUMBER; 5     l_server_url VARCHAR2(100); 7     l_parameters VARCHAR2(100); 9     button_choice INTEGER;11     l_file_id VARCHAR2(100); 13     l_gfm_id INTEGER; 15 BEGIN 17     access_id := fnd_gfm.authorize(NULL);19     fnd_profile.get('APPS_WEB_AGENT', l_server_url);21     l_parameters := 'access_id=' || access_id || ' l_server_url=' || l_server_url; 23     fnd_function.EXECUTE(function_name => 'FND_FNDFLUPL', 25                          open_flag => 'Y', 27                          session_flag => 'Y', 29                          other_params => l_parameters); 31 -- Display a modal message for user to indicate file upload 33 -- is completed. 35     fnd_message.set_name('FND', 'ATCHMT-FILE-UPLOAD-COMPLETE');37     button_choice := fnd_message.question(button1 => 'YES',39                                           button2 => NULL, 41                                           button3 => 'NO',43                                           default_btn => 1, 45                                           cancel_btn => 3,46                                           icon => 'question');48 49     IF (button_choice = 3) THEN51         NULL; 53     ELSIF (button_choice = 1) THEN 55         l_file_id := '';57         l_gfm_id := fnd_gfm.get_file_id(access_id); 59         :main.gfm_id := fnd_gfm.get_file_id(access_id); 61         IF l_gfm_id IS NOT NULL THEN63             SELECT DECODE(INSTR(file_name, '/'),0,file_name,SUBSTR(file_name, INSTR(file_name, '/') + 1)) 65                  INTO l_file_id 67                 FROM fnd_lobs 69               WHERE file_id = l_gfm_id; 71             IF l_file_id IS NOT NULL THEN 73                 :main.filename := l_file_id;75                 SELECT cux_ce_stmt_s.NEXTVAL INTO :main.working_id FROM DUAL; 77             END IF; 79         END IF; 81     END IF; 83 END IF;

 

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

1 DECLARE 3     c_data CLOB; 5     l_data BLOB; 7     l_dest_offset INTEGER := 1; 9     l_scr_offset INTEGER := 1;11     l_lang_context INTEGER := DBMS_LOB.default_lang_ctx; 13     l_warn INTEGER;15     n_offset INTEGER;17     n_clob_size INTEGER; 19     n_pos INTEGER;21     v_buf VARCHAR2(4000);23 BEGIN25     DBMS_LOB.createtemporary(c_data, FALSE, DBMS_LOB.SESSION); 27     SELECT file_data INTO l_data FROM fnd_lobs WHERE file_id = 1501905;29     DBMS_LOB.converttoclob(dest_lob => c_data, 31                            src_blob => l_data, 33                            amount => DBMS_LOB.lobmaxsize, 35                            dest_offset => l_dest_offset, 37                            src_offset => l_scr_offset,39                            blob_csid => NLS_CHARSET_ID('UTF8'), 41                            lang_context => l_lang_context,43                            warning => l_warn); 45     n_offset := 1;47     LOOP 49         n_pos := DBMS_LOB.INSTR(lob_loc => c_data, 51                                 pattern => CHR(10), 53                                 offset => n_offset,55                                 nth => 1);57         IF NVL(n_pos, 0) = 0 THEN 59         n_pos := n_clob_size + 1; 61     END IF; 63     v_buf := DBMS_LOB.SUBSTR(lob_loc => c_data, 65                              amount => n_pos - n_offset, 67                              offset => n_offset); 69      n_offset := n_pos + 1; 71     EXIT WHEN n_pos > n_clob_size; 73 END LOOP; 75     IF dbms_lob.istemporary(l_data) > 0 THEN 77         dbms_lob.freetemporary(l_data); 79     END IF; 81     IF dbms_lob.istemporary(c_data) > 0 THEN 83         dbms_lob.freetemporary(c_data); 85     END IF; 87 END IF;

 

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

1 DECLARE  3     v_buf VARCHAR2(1000);  5     v_field VARCHAR2(1000); 7     n_delimiter_pos INTEGER;  9 BEGIN 11     v_buf := 'Return Authorization Reference,Adjustment Type,Vendor Number,Site Code- Pay To,Site Code- Ship To,Part Number,Quantity,Subinventory';13     LOOP15         v_field := NULL;17         n_delimiter_pos := INSTR(v_buf, ',');19         IF n_delimiter_pos > 0 THEN 21             v_field := LTRIM(RTRIM(SUBSTR(v_buf, 1, n_delimiter_pos - 1))); 23             v_buf := SUBSTR(v_buf, n_delimiter_pos + 1); 25         ELSIF LTRIM(RTRIM(v_buf)) IS NOT NULL THEN 27             v_field := LTRIM(RTRIM(v_buf)); 29             v_buf := NULL; 31         END IF;33         IF (v_buf IS NULL) THEN35             EXIT;37         END IF; 39     END LOOP; 41 END;

 

Thanks and Regards

转载于:https://www.cnblogs.com/eastsea/p/3776622.html

你可能感兴趣的文章
中兴智能视觉大数据报道:人工智能相当火爆,或将下一个风口
查看>>
OCP 12c最新考试原题及答案(071-3)
查看>>
xdebug+phpstorm(windows)
查看>>
Spring Boot整合Hibernate操作
查看>>
阿里云移动端播放器高级功能---直播时移
查看>>
主动式部署陷阱
查看>>
webx2.0-RundataService学习总结
查看>>
SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
查看>>
云计算培训论云计算下的网络安全及措施
查看>>
users表空间在线损坏(不通过RMAN恢复)
查看>>
我在51cto第一篇博客
查看>>
TCP三次握手 和四次挥手
查看>>
基于本地配置文件的vsftpd
查看>>
MFC 对话框添加背景图片
查看>>
javascript中的void运算符语法及使用介绍
查看>>
《从零开始学Swift》学习笔记(Day 18)——有几个分支语句?
查看>>
类-Class
查看>>
T-SQL 优化
查看>>
System Center2012综述
查看>>
zabbix proxy搭建及应用proxy监控腾讯CVM服务器
查看>>