调用方式:

链接:可以在一个数据块中创建专门的 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. STL注意比较函数

    可重复插入?: set<int ,less_equal<int> >s; s.insert(10); s.insert(10); 第二次调用insert,集合回去确认10是否已 ...

  2. 【bzoj4444 scoi2015】国旗计划

    题目描述 A 国正在开展一项伟大的计划 —— 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了 NN 名优秀的边防 ...

  3. springmvc上传文件方法及注意事项

    本文基于注解的配置,敬请留意  基于注解整合 一.springmvc为我们提供两种上传方式配置: org.springframework.web.multipart.commons.CommonsMu ...

  4. SpringBoot学习之基础篇

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

  5. VS2012中C++,#include无法打开自己所写的头文件(.h)

    最近刚开始学cocos2d-x,创建项目之后,自己按照<cocos2d-x 3.x 游戏开发>的教程写代码 先写了一个头文件  MyHelloWorldScene.h 然后在  AppDe ...

  6. python的运算符与表达式

    Python运算符与表达式 1. 运算符分类 运算符主要分5种: 1. 算术运算符 2. 比较运算符 3. 位运算符 4. 逻辑运算符 5. 成员运算符 6. 身份运算符 7. 赋值运算符 1. 算术 ...

  7. Mianbot:基于向量匹配的情境式聊天机器人

    Mianbot是采用样板与检索式模型搭建的聊天机器人,目前有两种产生回覆的方式,专案仍在开发中:) 其一(左图)是以词向量进行短语分类,针对分类的目标模组实现特征抽取与记忆回覆功能,以进行多轮对话,匹 ...

  8. 用IO创建并格式化分区

    转载:http://raylinn.iteye.com/blog/570274 BOOL Result; // used to read bad DeviceIoControl calls DWORD ...

  9. python函数调用之自我调用与C++比较

    C++下的函数自我自我调用 第一种方法 #include <iostream> using namespace std; int rel_do(){ int a; cout<< ...

  10. WebApplicationContext类的作用

    WebApplicationContext是实现ApplicationContext接口的子类.是专门为WEB应用准备的.作用: 1.它允许从相对于Web根目录的路径中加载配置文件完成初始化工作.从W ...