FORM中调用JAVA组件
调用方式:
链接:可以在一个数据块中创建专门的 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其实是带有轻量级的挖掘功能