oracle ebs和java_Oracle EBS Form Builder使用Java beans创建窗体
最近有个项目,需要研究一下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创建窗体相关推荐
- Oracle Form Builder
Oracle Form Builder 是Oracle的一个开发工具,可以针对Oracle公司的E-Business Suit的ERP系统开发的.对应的还有reports builder. Oracl ...
- 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 ...
- 浅谈 Orbeon form builder 的权限控制
特定的 Form Builder 权限通过 WEB-INF/resources/config/form-builder-permissions.xml 进行配置. 如果您希望多个类别的 Form Bu ...
- 适用于2019的最佳WordPress Form Builder插件
如果您拥有WordPress网站,则表格对于创建令人满意的用户体验和提高转换率必不可少. 您需要表格让客户轻松与您联系,回答简单的调查问题,留下反馈和推荐等. 但是,您无需具有编码经验即可创建表单. ...
- form builder画布跟着鼠标滚轮上下跳动
form builder画布跟着鼠标滚轮上下跳动 有可能是因为垂直滚动条遮挡住了堆叠画布. 可以在block级触发器中,增加自定义触发器FOLDER_RETURN_ACTION IF:global.f ...
- form builder学习总结整理
目录 目录 froms builder学习笔记总结: 一 form Builder基础知识点 (和必备知识) 1.1 form Builder的基本对象和功能 1.2 form对象之间的层次关系 1 ...
- oracle存储过程 调用java_Oracle存储过程调用Java方法
存储过程中调用Java程序段 软件环境: 1.操作系统:Windows 2000 Server 2.数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版 3.安装路径:C:\OR ...
- java连接数据库 oracle,Oracle数据库之一分钟教你学会用java连接Oracle数据库
本文主要向大家介绍了Oracle数据库之一分钟教你学会用java连接Oracle数据库,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. package java_jdbc; // ...
- 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 ...
最新文章
- 体验最火的敏捷——SCRUM(厦门,2014.1.4)
- xp系统目前禁用索引服务器,WinXP系统中可以被禁用的服务对照表
- VMware和NVIDIA推出新一代混合云架构
- 0x02是什么意思_学习STM32时为什么要学习汇编?
- 汉字转html实体符号js_js转html实体
- win7计算机找不到脚本文件夹,解决win7开机提示“windows script host 无法找到脚本文件”的方法...
- ios授权登录过程中一直提示“没有安装qq”
- web字体设置成平方字体_Web字体正确完成
- Vue自学之路8-vue模版语法(事件绑定)
- 2022年热传递与热物理国际研讨会(HTT 2022)
- esp32 支持 sd卡 micropython 文件系统_ESP32教程:MicroPython支持-esp文件
- 2020 EBC徒步功课做好 好好工作心态,Android并发原理解析
- 4.顺序栈和循环队列的基本运算
- python 正数变成负数_初一数学上册第一章有理数1.1正数和负数基础知识概括及同步练习题含解析...
- 疑为灵异现象不可思议的透明液晶揭秘
- idea从插件市场或者外部插件库导入插件的方式
- SAP.CATT 批处理/批量操作的基本应用
- 前端页面几种常见的布局方式
- java程序设计第三版课后答案张思民
- Matlab:实现Samtec SMA边缘发射表面安装射频连接器(附完整源码)
热门文章
- 验证码研究入门必读(验证码是什么,有什么用,分类,设计,破解,未来发展)
- 电脑提示计算机缺失程序怎么办,电脑安装扫描仪驱动程序,提示文件丢失怎么办?这样解决...
- 重学 Java 设计模式:实战组合模式(营销差异化人群发券,决策树引擎搭建场景)
- 通过Kali Linux暴力破解WiFi密码
- 工作后,同学关系渐渐疏远了,心里莫名有些失落,怎么办?
- dell蓝牙图标消失,不能用
- mysql 不用斯芬克斯 全局模糊匹配 查询
- Java 将表格数据导入word文档中
- PMP 项目管理 考前专题(04)考试 答题原则与套路总结
- 使用a标签时不用href=““调转页面