最近有个项目,需要研究一下Oracle的E-Business Sutie(EBS),对于以前没接触此套件的我来说,简直太痛苦了。在网上找了一堆资料,试着进行Form二次开发,也遇到各类奇葩问题。目前遇到最大的一个问题是,如何在本地 Form Builder中进行窗体构建,并调用后台的JavaBean和窗体进行交互?网上也有不少的解决方案,但是都存在一些差异,试了很多次,终于实现了我预期的效果。

为了防止以后再遇到类似的问题,先做一个记录,以备后查。

1、环境搭建说明

服务器:Oracle EBS服务端(包括Oracle数据库)部署在RedHat5

客户端:XP系统上安装Oracle Development Suite(其中有Form Builder 10g )

2、JavaBean编写和编译

在Forms Builder中,Item中有个属性叫"Implementation Class",这个用来指定一个Item到底继承自上表的哪个Java类。标准的Item,其Implementation Class都放空,无须我们明确指定,因为Oracle内置了对应关系。但如果要在Forms 中使用非标准的Class,比如我们自行扩展的,则必须明确指出Item的"Implementation Class",并且是带包名的全称,如oracle.forms.fd.JavaHost。一个类要在Forms中使用,其必须符合Oracle Forms的设计规范,简单说,就是要实现oracle.forms.ui.IView接口。Oracle还提供了实现IView接口的VBean类,如果欲创建的类不需要从其他类继承,则可以直接extends VBean,省了实现IView的麻烦。

1 packageoracle.forms.fd;2

3 importjava.io.BufferedReader;4 importjava.io.IOException;5 importjava.io.InputStreamReader;6 importjava.util.StringTokenizer;7 importoracle.forms.handler.IHandler;8 importoracle.forms.ui.VBean;9 importoracle.forms.properties.ID;10 importoracle.forms.ui.CustomEvent;11

12 //Form整合JavaBean要实现IView接口,13 //若创建的类不需要继承其他类,则可以直接extends VBean

14 public class JavaHost extendsVBean15 {16 private static final ID SetProg = ID.registerProperty("SET_PROG");17 private static final ID MSGSTND = ID.registerProperty("MSGSTND");18 private static final ID MSGERROR = ID.registerProperty("MSGERROR");19 private static final ID MSGTEXT = ID.registerProperty("MSGTEXT");20 privateIHandler m_handler;21 Process p = null;22

23 publicJavaHost()24 {25 }26

27 public voidinit(IHandler handler)28 {29 m_handler =handler;30 super.init(handler);31 }32

33 /*************************34 * Set some properties *35 ************************/

36 public booleansetProperty(ID property, Object value)37 {38 /*

39 * Start the process *40 */

41 if (property ==SetProg)42 {43 String s= value.toString(), s2="";44 String[] sTabParams = null;45 int iNbParams = 0, iPos=-1;46 iPos = s.indexOf(",") ;47 if(iPos > -1)48 {49 StringTokenizer st = new StringTokenizer(s,",");50 //get the total number of parameters

51 while(st.hasMoreTokens())52 {53 s2 =st.nextToken() ;54 iNbParams++;55 }56 sTabParams = newString[iNbParams];57 st = new StringTokenizer(s,",");58 for( int i=0; i

61 try{62 if(iPos > -1) p =Runtime.getRuntime().exec(sTabParams);63 else p =Runtime.getRuntime().exec(s);64

65 newThread()66 {67 public voidrun()68 {69 try

70 {71 BufferedReader br = new BufferedReader(newInputStreamReader(p.getInputStream()));72 String line = null;73 try{74 while((line = br.readLine()) != null)75 {76 //Send standard output to Forms

77 SendProperties(MSGSTND,line);78 }79 }80 finally

81 {82 br.close();83 }84 }85 catch(IOException ioe)86 {87 ioe.printStackTrace();88 SendProperties(MSGERROR,ioe.getMessage());89 }90 }91 }.start();92 //Error output

93 newThread()94 {95 public voidrun()96 {97 try

98 {99 BufferedReader br = new BufferedReader(newInputStreamReader(p.getErrorStream()));100 String line = null;101 try

102 {103 while((line = br.readLine()) != null)104 {105 //Send error output to Forms

106 SendProperties(MSGERROR,line);107 }108 }109 finally

110 {111 br.close();112 }113 }114 catch(IOException ioe)115 {116 ioe.printStackTrace();117 SendProperties(MSGERROR,ioe.getMessage());118 }119 }120 }.start();121 }122 catch(IOException ioe) { ioe.printStackTrace(); SendProperties(MSGERROR,ioe.getMessage());}123

124 return true;125 }126 else

127 {128 return super.setProperty(property, value);129 }130 }131

132 //send standard/error output back to Forms

133 private voidSendProperties(ID id, String sMessage)134 {135 try{136 CustomEvent ce = newCustomEvent(m_handler, id);137 m_handler.setProperty( MSGTEXT, sMessage );138 dispatchCustomEvent(ce);139 }140 catch(Exception e)141 {142 e.printStackTrace();143 }144 }145

146 }

JavaHost Code

用java1.3的版本编译此JavaHost.java,打包成javahost.jar放于客户端xp 系统的C:\DevSuiteHome_1\forms\java位置(我的安装在C盘),其实服务器上也有一个此目录

3、formsweb.cfg配置

服务器和客户端都存在这样的配置文件,如果在本地进行窗体调试,必须配置本地的formsweb.cfg(网上很多都并未提出是服务器端还是客户端,我折腾了很久)。在C:\DevSuiteHome_1\forms\server文件下打开formsweb.cfg,将javahost.jar追加到archive_jini上,如archive_jini=frmall_jinit.jar,javahost.jar(注意是逗号分隔,不是分号)

4、Form创建和配置

在Form Builder创建JAVA_HOST.fmb的窗体,在Form上添加一个Bean区域控件,它的实施类为oracle.forms.fd.JavaHost。

5、运行窗体(单击运行表单按钮)

单据FormBuilder上的运行表单按钮,稍等一会(其实也挺慢的...),会出现下面的界面:

在Command文本框中输入 cmd /c dir /b c:\*.jpg ,然后单击Execute按钮运行命令。如果调用JavaBean成功的话,会搜索本地C盘下的.jpg文件,并列出到Result中,如下图:

本次测试正确。发布到服务器还需要对服务器相关文件进行配置。客户端的路径问题,可搜索注册表("_PATH") 来查看FORMS_PATH和ORACLE_HOME的路径情况。

6、关于FormBuilder导入pll库和java包的若干说明

有的时候你的窗体需要用到其他的库文件,默认不在FormBuilder的搜索路径中,必须手动进行引入。例如我碰到一个fnd_message.debug未声明的错误,网上说是要导入一个FNDSQF.pll库,但是都没说如何导入。最后摸索出来是这样的,首先需要把服务器forms(包含很多系统和开发的窗体,如果待开发的窗体需要调用这些,必须要拷贝到开发环境下)和resource(FNDSQF.pll库就在此目录下)文件夹拷贝到本地。

导入pll库的方法如下图:

如果需要导入java类,可以首先编辑注册表项目FORMS_BUILDER_CLASSPATH,在此项目后追加待导入库的完整路径,如下图:

然后就可以在FormBuilder看见javahost.jar中的java类:oracle.forms.fd.javahost

另外就是在运行Form时,首先必须确保开启本地Start OC4J Instance,如下图:

另外就是把窗体上传到服务器端后,注意编译的路径和菜单使用的路径(和挂接的模块有关系,不同的模块在不同的文件夹下)是不同的,否则会报无法加载XXX.fmx的情况。

编译命令:frmcmp_batch module=/u01/oracle/VIS/apps/apps_st/appl/ozf/12.0.0/forms/ZHS/FRM_WM_JAVABEAN.fmb userid=apps/apps@VIS output_file=/u01/oracle/VIS/apps/apps_st/appl/ozf/12.0.0/forms/ZHS/FRM_WM_JAVABEAN.fmx

服务器常用的路径:

/u01/oracle/VIS/apps/apps_st/appl/au/12.0.0/resource

/u01/oracle/VIS/apps/apps_st/comn/java/classes

/u01/oracle/VIS/apps/apps_st/appl/ozf/12.0.0/forms/ZHS

/u01/oracle/VIS/apps/tech_st/10.1.2/forms/server

/u01/oracle/VIS/apps/tech_st/10.1.2/forms/java

oracle ebs和java_Oracle EBS Form Builder使用Java beans创建窗体相关推荐

  1. Oracle Form Builder

    Oracle Form Builder 是Oracle的一个开发工具,可以针对Oracle公司的E-Business Suit的ERP系统开发的.对应的还有reports builder. Oracl ...

  2. aws ebs分类_AWS EBS – Amazon Elastic Block Storage

    aws ebs分类 An EC2 machine instance in the AWS cloud requires persistent block storage. Amazon EBS – E ...

  3. 浅谈 Orbeon form builder 的权限控制

    特定的 Form Builder 权限通过 WEB-INF/resources/config/form-builder-permissions.xml 进行配置. 如果您希望多个类别的 Form Bu ...

  4. 适用于2019的最佳WordPress Form Builder插件

    如果您拥有WordPress网站,则表格对于创建令人满意的用户体验和提高转换率必不可少. 您需要表格让客户轻松与您联系,回答简单的调查问题,留下反馈和推荐等. 但是,您无需具有编码经验即可创建表单. ...

  5. form builder画布跟着鼠标滚轮上下跳动

    form builder画布跟着鼠标滚轮上下跳动 有可能是因为垂直滚动条遮挡住了堆叠画布. 可以在block级触发器中,增加自定义触发器FOLDER_RETURN_ACTION IF:global.f ...

  6. form builder学习总结整理

    目录 目录 froms builder学习笔记总结: 一  form Builder基础知识点 (和必备知识) 1.1 form Builder的基本对象和功能 1.2 form对象之间的层次关系 1 ...

  7. oracle存储过程 调用java_Oracle存储过程调用Java方法

    存储过程中调用Java程序段 软件环境: 1.操作系统:Windows 2000 Server 2.数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版 3.安装路径:C:\OR ...

  8. java连接数据库 oracle,Oracle数据库之一分钟教你学会用java连接Oracle数据库

    本文主要向大家介绍了Oracle数据库之一分钟教你学会用java连接Oracle数据库,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. package java_jdbc; // ...

  9. oracle 传递table,将对象类型表从java传递到oracle 8i(Pass table of object type from java to oracle 8i)...

    将对象类型表从java传递到oracle 8i(Pass table of object type from java to oracle 8i) 我需要将一个对象列表(如值表)从java传递给ora ...

最新文章

  1. 体验最火的敏捷——SCRUM(厦门,2014.1.4)
  2. xp系统目前禁用索引服务器,WinXP系统中可以被禁用的服务对照表
  3. VMware和NVIDIA推出新一代混合云架构
  4. 0x02是什么意思_学习STM32时为什么要学习汇编?
  5. 汉字转html实体符号js_js转html实体
  6. win7计算机找不到脚本文件夹,解决win7开机提示“windows script host 无法找到脚本文件”的方法...
  7. ios授权登录过程中一直提示“没有安装qq”
  8. web字体设置成平方字体_Web字体正确完成
  9. Vue自学之路8-vue模版语法(事件绑定)
  10. 2022年热传递与热物理国际研讨会(HTT 2022)
  11. esp32 支持 sd卡 micropython 文件系统_ESP32教程:MicroPython支持-esp文件
  12. 2020 EBC徒步功课做好 好好工作心态,Android并发原理解析
  13. 4.顺序栈和循环队列的基本运算
  14. python 正数变成负数_初一数学上册第一章有理数1.1正数和负数基础知识概括及同步练习题含解析...
  15. 疑为灵异现象不可思议的透明液晶揭秘
  16. idea从插件市场或者外部插件库导入插件的方式
  17. SAP.CATT 批处理/批量操作的基本应用
  18. 前端页面几种常见的布局方式
  19. java程序设计第三版课后答案张思民
  20. Matlab:实现Samtec SMA边缘发射表面安装射频连接器(附完整源码)

热门文章

  1. 验证码研究入门必读(验证码是什么,有什么用,分类,设计,破解,未来发展)
  2. 电脑提示计算机缺失程序怎么办,电脑安装扫描仪驱动程序,提示文件丢失怎么办?这样解决...
  3. 重学 Java 设计模式:实战组合模式(营销差异化人群发券,决策树引擎搭建场景)
  4. 通过Kali Linux暴力破解WiFi密码
  5. 工作后,同学关系渐渐疏远了,心里莫名有些失落,怎么办?
  6. dell蓝牙图标消失,不能用
  7. mysql 不用斯芬克斯 全局模糊匹配 查询
  8. Java 将表格数据导入word文档中
  9. PMP 项目管理 考前专题(04)考试 答题原则与套路总结
  10. 使用a标签时不用href=““调转页面