设为首页 收藏本站
查看: 1203|回复: 0

[经验分享] 如何把数据上传到EBS的forms的数据块中

[复制链接]

尚未签到

发表于 2019-2-3 12:28:20 | 显示全部楼层 |阅读模式
  创建一个临时表: XXX_TEMP_FILES
  建表语句是:
  CREATE TABLE XXX_TEMP_FILES (
  FILE_ID NUMBER,
  SEQ NUMBER,
  TEXT VARCHAR2(2000),
  CREATION_DATE DATE
  )
  创建这个表的目的就是要把数据从FND_LOBS这个表的file_data这个字段的数据,通过程序,因为这个表的这个数据是lobs类型的,所以整个文件都放在这个字段里,我们利用这个临时表,把数据文件拆成一行一个纪录.然后每行在根据分个符查分.
  2. 创建上传包: XXX_FILE_IO
  XXX_FILE_IO 包含三个子程序:
  INS_TEMP_FILES:从fnd_lobs 表中取上传的数据,把它按行来拆分,并插入到: XXX_TEMP_FILES 表中
  SEL_TEMP_FILES:从XXX_TEMP_FILES 中把数据去出
  DEL_TEMP_FILES:数据已经上传到Form的界面中,需要删除文件.
  主要语句就是:
  PROCEDURE INS_TEMP_FILES(p_file_id IN NUMBER) IS
  w_integer INTEGER;
  w_blob BLOB;
  w_raw RAW(10);
  w_buff VARCHAR2(30000);
  w_line VARCHAR2(30000);
  w_len INTEGER;
  eofsw BOOLEAN := FALSE;
  offset INTEGER;
  w_b_len NUMBER := 0;
  w_num NUMBER;
  w_seq NUMBER := 0;
  BEGIN
  SELECT file_data INTO w_blob FROM fnd_lobs WHERE file_id = p_file_id;
  offset := 1;
  LOOP
  EXIT WHEN eofsw;
  w_seq := w_seq + 1;
  w_raw := utl_raw.cast_to_raw(chr(10));
  w_num := dbms_lob.instr(w_blob, w_raw, offset, 1);
  w_len := w_num - w_b_len;
  w_b_len := w_num;
  IF w_num = 0
  THEN
  w_len := 20000;
  eofsw := TRUE;
  END IF;
  BEGIN
  DBMS_LOB.READ(w_blob, w_len, offset, w_buff);
  EXCEPTION
  WHEN no_data_found THEN
  EXIT;
  WHEN OTHERS THEN
  RAISE;
  END;
  w_line := utl_raw.cast_to_varchar2(w_buff);
  SELECT REPLACE(w_line, chr(10), NULL) INTO w_line FROM dual;
  SELECT REPLACE(w_line, chr(13), NULL) INTO w_line FROM dual;
  INSERT INTO XXX_TEMP_FILES
  (FILE_ID, SEQ, TEXT, CREATION_DATE)
  VALUES
  (p_file_id, w_seq, w_line, SYSDATE);
  offset := offset + w_len;
  END LOOP;
  END;
  3. 在Form文件中的Program Unit中健一个包.XXX_UPLOAD
  这个文件最好做成PLL,和其他客制化的有用的程序一起打包,上传到form这是一个系统比较有用的通用的程序.
  主要是利用FND_GFM这个通用上传的工具,把文件传到,FND_LOBS中去,然后第二步建好的的包,进行数据拆分:
  p_file_id := NULL;
  access_id := FND_GFM.AUTHORIZE(NULL);
  FND_PROFILE.GET('APPS_WEB_AGENT', l_server_url);
  l_url := rtrim(l_server_url, '/') ||
  '/fnd_file_upload.displayGFMform?access_id=' ||
  to_char(access_id) ||
  chr(38) ||
  'l_server_url=' ||
  l_server_url;
  if (l_url is NULL) then
  raise form_trigger_failure;
  return NULL;
  end if;
  FND_UTILITIES.OPEN_URL(l_url);
  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 = 1 then
  p_file_id := FND_GFM.GET_FILE_ID(access_id);
  XXX_FILE_IO.INS_TEMP_FILES(p_file_id);
  -- pcm_dbms_lob.UPOPEN(p_file_id);
  else
  return NULL;
  end if;
  return p_file_id;
  1. 在Form文件中的Program Unit中健一个程序如: UPLOAD_XXX_XXX(X根据实际需要转换)
  UPLOAD_XXX_XXX 这个文件的需要在实际的应用中作改动,根绝实际的要导入的字段修改程序.主要功能就是从XXX_TEMP_FILES把数据读出,然后根据分割符来,把每个数据对应到form的域中.


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-671292-1-1.html 上篇帖子: EBS查看报表或者账单的职责 下篇帖子: Oracle EBS环境下查找数据源(OAF篇)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表