调用方式:

链接:可以在一个数据块中创建专门的 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的方法.pyspark.executor 端一个Executor上同时运行多少个Task,就会有多少个对应的pyspark.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. allocator

    allocator: 通常c++内存配置和释放操作是这样的: class Fo{}; Fo *p = new Fo; delete p; new算式主要有三个阶段: 调用::operator new配 ...

  2. Python Django缓存,信号,序列化,文件上传,Ajax登录和csrf_token验证

    本节内容 models操作 Django的缓存 请求方式 序列化 Form 配合Ajax实现登录认证 上传文件 Ajax  csrf_token验证方式 1 models操作 单表查询: curd(增 ...

  3. selenium登录163邮箱

    环境:windows8  python2.7+selenium+chrome 直接上脚本: # coding=utf-8from selenium import webdriverimport tim ...

  4. BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

    这个坑爹的玩意 有几个出现错误的原因 服务器 1.服务器重复启动同一个部署 这个时候要停止然后启动 电脑差的 重启电脑 重启服务器就好了 代码 2.bean工厂不知道哪里关闭 3.bean工厂没有找到 ...

  5. Python 头部 #!/usr/bin/python 和 #!/usr/bin/env 的区别

    这个网址 https://www.cnblogs.com/scofi/p/4867851.html 讲述了Python 头部 #!/usr/bin/python 和 #!/usr/bin/env 的区 ...

  6. Python中的str与unicode处理方法

    Python中的str与unicode处理方法 2015/03/25 · 基础知识 · 3 评论· Python 分享到:42 原文出处: liuaiqi627 的博客    python2.x中处理 ...

  7. Python中and(逻辑与)计算法则

    在程序设计中,and称为逻辑与运算,也称布尔运算:1.and是在布尔上下文中从左到右计算表达式的值:2.0.''.[].().{}.None.False在布尔上下文中为假:其它任何东西都为真:3.如果 ...

  8. 关于基因组注释文件GTF的解释

    GTF文件的全称是gene transfer format,主要是对染色体上的基因进行标注.怎么理解呢,其实所谓的基因名,基因座等,都只是后来人们给一段DNA序列起的名字而已,还原到细胞中就是细胞核里 ...

  9. 利用Filter和拦截器,将用户信息动态传入Request方法

    前言: 在开发当中,经常会验证用户登录状态和获取用户信息.如果每次都手动调用用户信息查询接口,会非常的繁琐,而且代码冗余.为了提高开发效率,因此就有了今天这篇文章. 思路: 用户请求我们的方法会携带一 ...

  10. Git提交代码到远程服务器

    1.下载Git 不用说了,这个是必须的,也是最简单的步骤,地址如下: http://git-scm.com/download 这里会提供三个版本的下载地址,读者可以自行查找. 2.创建代码库 远程的代 ...