FORM中调用JAVA组件

时间:2022-12-18 14:03:21

调用方式:

链接:可以在一个数据块中创建专门的 Bean Area项,使用 Implementation Class 特性链接到J a v a B e a n,使用W h e n - C u s t o m - I t e m - E v e n t触发器来处理在Bean Area中发生的事件。

定制:通过编写实现I Vi e w接口的J a v a B e a n,可以用J a v a B e a n来替代具体的控件 (复选框、列表项、控制按钮、单选按钮组和文本项 ) ,既可以直接地替换,也可以用扩展的V B e a n替代或者是一种其他的 Oracle JavaBean类如V B u t t o n进行替换。

实现步骤:

1) 打开将要显示控件的画布,单击Bean Area工具,拖画出将显示这个控件的一个矩形区域。

2)  编写扩充 V B e a n类的一个包装类,例如像 V C a l e n d a r (一个日历 b e a n )。把J a v a和类文件放到在应用服务器上的虚拟目录 / c o d e b a s e / 中,确保表单在运行时能够对它进行访问。这个包装类提供一些特定的方法, F o r m s小应用程序调用这些方法来设置特性和获得鼠标事件。它还注册了表单能够识别的一些特殊事件。

3)  导航定位到在 Object Navigator 中的 Bean Area 项上,双击该项以显示它的 P r o p e r t yP a l e t t e。将Implementation Class 属性改为该包装类的名字。使用完全限定名字,包括整个软件包的名字,例如“ o r a c l e . f o r m s”

4)  编写一个事件捕获过程并将它存储到一个程序库中。把这个程序库附加到使用J a v a B e a n 的表单上。这个过程从系统变量 C U S TO M _ I T E M _ E V E N T _ PA R A M E T E R S获取参数,从系统变量 C U S TO M _ I T E M _ E V E N T获取事件的消息。程序代码与下列内容相似

procedure eventtrap is
vbean item;
vbeanparamlist paramlist;
vparamtype number;
vevent varchar2(30);
begin
vbeanparamlist := get_parameter_list (:system.custom_item_event_paramters);
vevent := find_item('CONTROL.CALENDAR');--gets the CALENDAR bean item the control block
--process the supported events registrred through the wrapper java class
end eventtrap;

提示 可以在应用程序的程序单元部分编写这个过程。但是,当考虑可重用组件时,把该过程包装到可以在其他应用程序中重用的一个程序包中是一个好方法。或许想要有与J a v a B e a n的集合相对应的一个库,这样,当使用一个b e a n时附加上这个程序库,同时事件捕获过程处于就绪和等待状态。

5)  从这个Bean Area项的一个W h e n - C u s t o m - I t e m - E v e n t触发器中调用这个事件捕获过程:在P L / S Q L代码中使用 S e t _ C u s t o m _ I t e m _ P r o p e r t y内部过程可以设置 J a v a B e a n对象中的属性,需要给出 Bean Area 项的名字,属性的名字 ( 检查 B e a n 文档 ) 和属性的值。值可以是V
A R C H A R 2、I N T或B O O L E A N。开发一个标准的表单控件的定制版本,只需要替换在上述处理步骤中的 Bean Area 控件。例如在一个文本项中,把 Implementation Class 属性指定为置换的 J a v a B e a n 的名字,并且为这个文本项增加一个 W h e n - C u s t o m - I t e m - E v e n t触发器。

实例在form中调用画板更改form界面颜色

配置好后在触发器中调用程序

PROCEDURE pickcolor(pvctarget IN VARCHAR2) IS
vcoldcolor VARCHAR2(12 CHAR);
vcnewcolor VARCHAR2(12 CHAR);
hcanvas canvas := find_canvas('CV_CUSTOMER');--按钮所在的画布
hcolorpicker item := find_item('CONTROL.COLORPICKER');--按钮所在块和名称
vnpos1 NUMBER;
vnpos2 NUMBER;
BEGIN
-- First get the current Color for this target
vcoldcolor := get_canvas_property(hcanvas, background_color);
vnpos1 := instr(vcoldcolor, 'g', 1);
vnpos2 := instr(vcoldcolor, 'b', vnpos1 + 1);
vcoldcolor := substr(vcoldcolor, 2, vnpos1 - 2) || ' ' ||
substr(vcoldcolor, vnpos1 + 1, vnpos2 - vnpos1 - 1) || ' ' ||
substr(vcoldcolor, vnpos2 + 1, length(vcoldcolor) - vnpos2);
-- now display the picker with that color as an initial value
vcnewcolor := fbean.invoke_char(hcolorpicker,
1,
'showColorPicker',
'"Select
color for ' || pvctarget || '","' ||
vcoldcolor || '"');
-- finally if vcColor is not null reset the Canvas property
IF (vcnewcolor IS NOT NULL) THEN
vnpos1 := instr(vcnewcolor, ' ', 1);
vnpos2 := instr(vcnewcolor, ' ', vnpos1 + 1);
vcnewcolor := 'r' || substr(vcnewcolor, 1, vnpos1 - 1) || 'g' ||
substr(vcnewcolor, vnpos1 + 1, vnpos2 - vnpos1 - 1) || 'b' ||
substr(vcnewcolor,
vnpos2 + 1,
length(vcnewcolor) - vnpos2);
set_canvas_property(hcanvas, background_color, vcnewcolor);
END IF;
END;

附网上有个例子不错

以FORM中JAVA的应用为例,这里以实现图表来抛砖引玉(将10g demo中的graphic迁移到EBS应用中来)

一步:

    将formsGraphic.jar文件上传到/OA_JAVA/oracle/apps/fnd/jar/ 文件路径下

其中/OA_JAVA/是个虚拟路径,其对应的实际路径为

Alias /OA_JAVA/ "/u0/oracle/prodcomn/java/"

<Location /OA_JAVA/>

  Order allow,deny

  Allow from all

</Location>   具体的配置可参考如下文件

   /u0/oracle/prodora/iAS/Apache/Apache/conf/apps.conf

二步:

   修改FORMS60_WEB_CONFIG_FILE

       /u0/oracle/prodcomn/html/bin/appsweb.cfg的文件就是配置formweb的文件

增加EBS的加载jar类文件

修改内容如下:

archive=/OA_JAVA/oracle/apps/fnd/jar/fndforms.jar,/OA_JAVA/oracle/apps/fnd/jar/fndformsi18n.jar,/OA_JAVA/oracle/apps/fnd/jar/fndewt.jar,/OA_JAVA/oracle/apps/fnd/jar/fndswing.jar,/OA_JAVA/oracle/apps/fnd/jar/fndbalishare.jar,/OA_JAVA/oracle/apps/fnd/jar/fndaol.jar,/OA_JAVA/oracle/apps/fnd/jar/fndctx.jar,/OA_JAVA/oracle/apps/fnd/jar/FormsGraph.jar

这样,在启动jinit的时候会自动增加此JAR文件。

三步:

    将写好的FMB上传到服务器相应的目录,编译,然后注册相应的FORM,FUNC及MENU,挂在系统上。

四步:

   此时在EBS中打开此相关的功能,可能会发生功能打不开,然后系统无响应的现象,造成此现象的原因是因为EBS本身带的JINIT的版本过低,无法找到FormsGraphic.jar类文件需要的可用CLASS,这时候需要修改/u0/oracle/prodcomn/html/bin/appsweb.cfg的文件配置,将jinit的配置参数修改成版本更高的,具体修改内容可参考如下

;jinit_ver_name=Version=1,1,8,19

;jinit_mimetype=application/x-jinit-applet;version=1.1.8.19

;jinit_classid=clsid:5e2a3510-4371-11d6-b64c-00c04faedb18

jinit_ver_name=Version=1,3,1,17

jinit_mimetype=application/x-jinit-applet;version=1.3.1.17

jinit_classid=clsid:CAFECAFE-0013-0001-0017-ABCDEFABCDEF

注意此配置的范例只适用于jinit1.3.1.17的版本,若其他版本,可根据情况来调整,建议在本地(非ebs环境)配置好图表显示的环境,在将配置的jinit进行替换,同时需要将相应的jinit安装文件安装在本地环境下.

通过这个例子可以发现在GRAPHIC上,9ids or 10gds中都已经放弃了GRAPHIC BULID(6I)的开发,而转向JAVA方向,另外在REPORTBUILD(9IDS,10GDS)中以引入GRAPHIC的图表功能,只是没有JAVA功能强大而已,另外有测试过这个DEMO的人应该可以发现此DEMO其实是带有轻量级的挖掘功能




FORM中调用JAVA组件的更多相关文章

  1. Oracle数据库中调用Java类开发存储过程、函数的方法

    Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...

  2. VC中调用COM组件的方法(转载)

    原文参考:http://hi.baidu.com/mingyueye/item/53ebecd44da76917d80e4449 总结一下在VC中调用COM组件的方法 准备及条件: COM服务器为进程 ...

  3. vc中调用Com组件的方法详解

    vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口:   IGetRes--方法Hello(),   IGet ...

  4. 在JS中调用JAVA变量

    在JS中调用JAVA变量可以,方法是:var JS变量名 = “<%=JAVA变量名 %>”<%中间写java代码,跟在JSP中一样%>在JAVA中 ,无法调用JS变量

  5. kettle中调用java类

    kettle中调用java类 有时须要在kettle调用java类,如:验证.查询或自己定义加密等.有时甚至连主要的数据訪问都不那么简单,如获取一个存储文件或使用一个数据库连接,某些数据源可能封装在应 ...

  6. 在scala中调用java代码

      详细代码请见https://github.com/lujinhong/scalademo 在scala中调用java代替非常非常简单,直接调用即可 (一)一个简单示例 1.创建一个java类 pa ...

  7. PySpark 的背后原理--在Driver端,通过Py4j实现在Python中调用Java的方法&period;pyspark&period;executor 端一个Executor上同时运行多少个Task,就会有多少个对应的pyspark&period;worker进程。

    PySpark 的背后原理 Spark主要是由Scala语言开发,为了方便和其他系统集成而不引入scala相关依赖,部分实现使用Java语言开发,例如External Shuffle Service等 ...

  8. React Hooks中父组件中调用子组件方法

    React Hooks中父组件中调用子组件方法 使用到的hooks-- useImperativeHandle,useRef /* child子组件 */ // https://reactjs.org ...

  9. vue 父组件中调用子组件函数

    2019/06/06 在父组件中调用子组件的方法:  1.给子组件定义一个ref属性.eg:ref="childItem"  2.在子组件的methods中声明一个函数.eg: u ...

随机推荐

  1. C&num;做有模和非模式化窗体 传值例程

    有模窗体:指的是一定要在第二个窗体上操作之后 才能去操作前者窗体 :例如,如果一个对话框,在可以切换到其它窗体或对话框之前要求先单击"确定"或"取消",则它就是 ...

  2. TMemo&period;Text 回车键会变成&num;&dollar;D&num;&dollar;A,而非&num;13&num;10

    mmoComplain: TMemo;//cxmComplain.Text 会造成回车键 转换成十六进制的字符串 #$D#$A,而非#13#10 //cxmComplain.Text范例:'风发的是' ...

  3. sqlserver 时间转换

    sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(), 时间一, ) 结果:-- :/*时间一般 ...

  4. ubuntu 新建zend framework 项目

    1. sudo apt-get install zend-framework /usr/share/php/libzend-framework-php 2. 配置include_path /etc/p ...

  5. python数据类型以及模块的含义

    print(sys.path) #打印环境变量 print(sys.argv) #打印相对路径 print(sys.argv[1]) #打印对应的参数 1.在python最上有时候会导入os模块,表示 ...

  6. Hive-ORC文件存储格式

    ORC文件格式是从Hive-0.11版本开始的.关于ORC文件格式的官方文档,以及基于官方文档的翻译内容这里就不赘述了,有兴趣的可以仔细研究了解一下.本文接下来根据论文<Major Techni ...

  7. 从C过渡到C&plus;&plus;的几个知识点(结构体、引用、重载运算符)

    一.结构体和类(class) 下面一个使用结构体类型的例子 #include <iostream> using namespace std; struct Point{ // 声明Poin ...

  8. JAVA中通过Jaxp操作XML文件基础

    Java中有多种方式操作XML文件,目前讲一讲以SUN公司提供的DocumentBuilderFactory工厂类对象操作XML. 使用XML基本操作就是需要CRUD(增删改查),那么首先通过一个查询 ...

  9. C&num;对象内部属性排序测试

    构建对象: class SortGrid { int indexI; int indexJ; public SortGrid(int x, int y) { indexI = x; indexJ = ...

  10. CentOS6安装各种大数据软件 第四章:Hadoop分布式集群配置

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...