前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Form开发之Form与Java

Form开发之Form与Java

作者头像
博文视点Broadview
发布2020-06-11 15:49:27
2K0
发布2020-06-11 15:49:27
举报

小编说:Oracle EBS(E-Business Suite)是甲骨文公司的一套大型ERP应用产品,在这套产品中,大量的功能实现都基于Oracle的Form表单。本文作者将从原理、基础、实战三个方面由浅入深地带领读者学会Form开发。 本文选自《深入浅出Oracle 之Form开发》

  • Form就是Java

虽然我们在设计Form、编写PL/SQL代码的时候,感觉不到Java的影子,但在执行时,其确确实实被转化为Java Applet在Jinitiator这个JVM中运行,我们在块中创建的Item,其实际也对应一个个Java类,看下表中的类列表,应该知道分别对应Form中的哪些Item。

注意:这些类在应用服务器的$ORACLE_HOME/forms/java下面。

  • 关于Implementation Class

在Forms Builder中,Item中有一个“Implementation Class”属性,其用来指定一个Item到底继承自上表的哪个Java类。标准的Item,其Implementation Class都置空,无须明确指定,因为Oracle内置了对应关系。

但如果要在Form中使用非标准的类,比如我们自行扩展的,则必须明确设置Item的“Implementation Class”属性,并且是带包名的全称,如cux.TextReader。

  • Form中的Java类规范

一个类要在Form中使用,其必须符合Oracle Form的设计规范,简单地说,就是要实现oracle.forms.ui.IView接口。上述的VXXX类无一例外都继承了IView。

Oracle还提供了实现IView接口的VBean类,如果用户欲创建的类不需要从其他类继承,则可以直接继承VBean,省略麻烦的IView实现。

注意:如要加深理解或者遇到问题,可反编译VBean类来看个究竟。

  • Form与Java类的交互

在Form开发中,我们已经习惯于按如下步骤来开发一个标准Item。

(1)通过属性面板设置属性。

(2)在代码中调用set_item_property或者get_item_property。

(3)编写Item的触发器。

(4)于是某个事件发生时会触发(3)的代码。

这些人性化的方式,后台是Oralce的自动转换:

(1)初始化Item时,调用setter函数。

(2)调用setter函数、调用getter函数。

(3)初始化Item时,调用addListener添加对应事件的侦听函数——我们写的代码。

(4)Java类Raise事件,并根据定义的Listener调用相应的代码。

对于自定义的类,Oracle仅提供如下两种沟通方式:

Form中仅能调用set_custom_property、get_custom_property两个内置函数;后台Oracle将其转换为调用Class的setter、getter函数。

Java类中可以任意抛出一个事件,包含事件名称和参数;Form中统一通过when-custom-item-event进行处理,事件名称保存在:system.custom_item_event中,参数保存在:system.custom_item_event_parameters中。

注意:参数是什么?是不是类的所有属性及其当前值?读者可以深入思考。

  • Form中使用自定义JavaBean

在Jinitiator中运行的Form,基于Java的安全设计,“标准”功能无法操作客户端,如果有此需求,可通过自定义Java类的方式实现。

要在Form中使用一个自定义的Java类,那么按照上面的分析,结合Applet的安全性,应该这样:

(1)根据需要,编写实现IView的类,或者简单地继承VBean,编写需要的代码。

(2)上传至Forms Server,并包含在CLASS_PATH中。

(3)如果需要操作客户端文件,则需额外完成认证。

(4)Form中创建Item,类型为BeanArea,且Implementation Class需明确设置。

仍然站在普通的Form开发角度来理解,那么该如何开发这个Item?

(1)编写when-custom-item-event,并根据:system.custom_item_event做出不同的处理,如果需要参数,用Form的两个内置函数get_parameter_list、get_parameter_attr从:system.custom_item_event_parameters 中获取。当然编写者需事先知道类会抛出哪些事件,其参数分别是什么。

(2)任何时候,都可以调用set_custom_property、get_custom_property,至于Class中的setter、getter,实际上可以实现任何逻辑,而不是通常所理解的设置属性、获得属性,比如可以通过它们打开本地的文件、读取文件、执行本地命令、设置可见Class的背景等。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博文视点Broadview 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档