调用方式:

链接:可以在一个数据块中创建专门的 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. ABP领域层知识回顾之---实体

    标题:重温ABP领域层 1. 前言  最近一段时间一直在看<ABP的开发指南>(基于DDD的经典分层架构思想).因为之前一段时间刚看完<领域驱动设计:软件核心复杂性应对之道>, ...

  2. ●UVA 1608 Non-boring sequences

    题链: https://vjudge.net/problem/UVA-1608#author=chenchonghan题解: 分治 如果一个区间[l,r]里面在p位置出现了一个只出现一次的元素,(如果 ...

  3. USACO 2017 February Gold

    那天打cf前无聊练手 T1.Why Did the Cow Cross the Road 题目大意:N*N的矩阵,从左上角走到右下角,走一步消耗T,每走3步消耗当前所在位置上的权值,求最小消耗 思路: ...

  4. bzoj3825 NOI2017 游戏

    题目背景 狂野飙车是小 L 最喜欢的游戏.与其他业余玩家不同的是,小 L 在玩游戏之余,还精于研究游戏的设计,因此他有着与众不同的游戏策略. 题目描述 小 L 计划进行nn 场游戏,每场游戏使用一张地 ...

  5. [Codeforces Round #431]简要题解

    来自FallDream的博客,未经允许, 请勿转载,谢谢. 好久没写cf题解了zzz 代码比较丑不贴了,cf上都可以看 Div2A. 给你一个长度为n(n<=100)的序列 判断是否可以分成奇数 ...

  6. bzoj 3673&3674: 可持久化并查集 by zky

    Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...

  7. SpringCloud学习之zuul

    一.为什么要有网关 我们先看一个图,如果按照consumer and server(最初的调用方式),如下所示 这样我们要面临如下问题: 1. 用户面临着一对N的问题既用户必须知道每个服务.随着服务的 ...

  8. SpringBoot学习之基础篇

    在前面的博文中,已经演示过springboot与Mybatis集成的实例,本篇再来探讨一下SpringBoot的基础.  一.关于SpringBoot SpringBoot可以基于Spring轻松创建 ...

  9. 两个文件比较之comm命令

    comm命令可用于两个文件之间的比较.它有很多不错的选项可用来调整输出,以便我们执行交集.求差(difference)以及差集操作. 交集:打印出两个文件所共有的行. 求差:打印出指定文件所包含的 ...

  10. 分区工具PQ

    http://www.disktool.cn/jiaocheng/resize-partition.html