我在Oracle商店工作.有一个工具集由大约1000个Oracle Forms(使用6i的早期90版软件中的Forms构建器)和后端的Oracle 10g组成.它每月为大约500名独特的人提供服务,在工作日的任何时间都有200个并发连接.
显然,这是需要解决的问题,以摆脱Forms运行时并转移到基于Web的解决方案.需要从Windows,Linux,各种UNIX,VMS和Solaris访问这些工具.
有哪些选择可以迁移到?它不仅需要对迁移是可行的,而且需要由支持该工具集的大约8名工程师完成开发(其中许多人宁愿保持这种工具集并且不对其进行现代化).
Oracle提供了一些解决方案,可以将Oracle Forms转换为糟糕的Java Applet(这是一个非常糟糕的临时解决方案).
我选择的解决方案一直在迁移到Ruby on Rails(我是Rails的大力支持者),但这将涉及到其他开发人员的学习曲线(我们会用任何解决方案).此外,另一个困难是将一些非常复杂的表单转换为HTML表单.
有没有人解决过这样的解决方案?是否有任何Oracle以外的人提供的软件包?
任何特定的Java Web框架?
GWT,jQuery UI,ExtJS或任何其他JavaScript UI框架是否能提供所需的丰富用户体验?
.NET是一个考虑但是最后的手段(主要是因为许可证成本,除了我们为Oracle许可证支付的费用之外,预算中没有空间).
假设我BOOLEAN
在Oracle表单中的PL/SQL块中有一个变量:
DECLARE
is_viewable BOOLEAN;
BEGIN
is_viewable := ...;
IF NOT is_viewable THEN
raise_my_error(); // pseudo-code
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
在使用调试器多次单步执行此代码后,我确定raise_my_error()
永远不会被调用.澄清:
raise_my_error()
如果没有被调用is_viewable = TRUE
raise_my_error()
如果没有被调用is_viewable = FALSE
初步测试表明,此行为仅限于在Oracle Forms中运行的PL/SQL代码,而不是直接在数据库中运行的PL/SQL代码(尽管我可能错了).
我可以通过明确地比较is_viewable
来解决这个问题FALSE
:
IF is_viewable = FALSE THEN
raise_my_error();
END IF;
Run Code Online (Sandbox Code Playgroud)
我仍然很好奇为什么NOT is_viewable
永远不会评估TRUE
.
更新:我的调试器似乎没有显示正确的值,并且此问题不再有效.抱歉这个混乱.
我使用DLL注入和一些jni技巧成功地在运行的Oracle Forms应用程序中注入了我自己的Java代码.(Windows 7,32位,Oracle Forms 11,JRE Java 8)
我能够遍历组件树,并在一些基本的Java对象(例如来自类的对象)中查询和设置值 oracle.forms.ui.VTextField
当我试图模拟用户点击时,我陷入了困境 oracle.apps.fnd.ui.Button
我尝试了两件事:
simulatePush
方法AbstractButton
activate
方法PushButton
(这两个类在类层次结构中Button
)
结果相同:1.首先,它工作正常:当按钮是"搜索"按钮时,搜索完成并显示结果.然后,它立刻打破了应用程序,弹出一个说法FRM-92100 Your connection to the Server was interrupted
.
从那里,应用程序挂起.
更新: 似乎导致与服务器断开连接的错误是:
java.lang.SecurityException:此KeyboardFocusManager未安装在当前线程的上下文中java.awt.KeyboardFocusManager.checkCurrentKFMSecurity(未知源)位于java.awt.KeyboardFocusManager.processSynchronousLightweightTransfer上的java.awt.KeyboardFocusManager.getGlobalFocusOwner(未知源)中(未知来源)来自)java.awt.Component.requestFocusHelper的java.awt.Component.requestFocusHelper(未知来源)的sun.awt.windows.WComponentPeer.processSynchronousLightweightTransfer(本地方法)at sun.awt.windows.WComponentPeer.requestFocus(未知来源) oracle.forms.hand处理器上oracle.forms.handler.UICommon.updateFocus(未知来源)位于oracle.forms.hand处理器上的java.awt.Component.requestFocus(未知源)处的(未知源)位于oracle.forms.hand.handler.Ja上的oracle.forms.hand.hand上的oracle.forms.hand.hand上的oracle.forms.hand.hand.Ter上的oracle.forms.hand.hand.Th上的oracle.forms.handler.Ja上的未知来源(未知来源).UICommon.setFVP(未知来源)rce)at oracle.forms.engine.Uuomom.onUpdate(Unknown Source)at oracle.forms.engine.Runform.onUpdateHandler(Unknown Source)at oracle.forms.engine.Runform.processMessage(Unknown Source)at oracle.forms.engine oracle.forms.engine.Runform.onMessage(未知来源)位于oracle.forms.engine.Runform.processEventEnd(未知来源)的oracle.forms.engine.Runform.onMessage(未知来源)的.runform.processSet(未知来源) at oracle.ewt.lwAWT.LWComponent.redispatchEvent(Unknown Source)at oracle.ewt.lwAWT.LWComponent.processEvent(Unknown Source)at oracle.ewt.button.PushButton.activate(Unknown Source)at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native方法)at sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源),位于CustomAWT.run上的java.lang.reflect.Method.invoke(未知来源)(CustomAWT.java) :34)在java.awt.EventQueue.dispatchEventImpl(未知Sou)的java.awt.event.InvocationEvent.dispatch(未知来源)rce)java.awt.EventQueue.access $ 400(未知来源)java.awt.EventQueue $ 2.run(未知来源)java.awt.EventQueue $ 2.run(未知来源)java.security.AccessController.doPrivileged(原始方法)java.security.AccessControlContext $ 1.doIntersectionPrivilege(未知来源)java.awt.EventDispatchEvent(未知来源)java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源)java.awt.EventDispatchThread.pumpEventsForFilter(未知) java.awt.EventDispatchThread.run上的java.awt.EventDispatchThread.pumpEvents(未知来源)java.awt.EventDispatchThread.run(未知来源)java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源)
我的代码在这里:CustomAWT.run(CustomAWT.java:34)
并且被调用invokeLater
.问题可能是:在调用oracle.ewt.button.PushButton.activate
方法时,我不在正确的EDT中.
使用Java控制台中的"列出线程",我得到了:
Dump thread list …
Run Code Online (Sandbox Code Playgroud) java java-native-interface oracleforms event-dispatch-thread
有没有人能够让运行JInitator的Oracle Forms在Internet Explorer 8中借用呢?我已经尝试删除所有加载项,各种版本的Java,使用通配符将域添加到受信任的站点,并使用兼容模式无济于事.我希望让我们的甲骨文家伙能够实现Internet Explorer 6的习惯.这与Oracle电子商务有关.
我正在寻找工具集建议来自动测试Oracle Forms应用程序,测试(理想情况下)是由Cucumber驱动的.
我认为这在基于Oracle Forms的应用程序中是正常/不可避免的,但无论如何我都会拼出来; 从最终用户的角度来看,应用程序的工作方式是:
理想情况下,有一个工具集可以记录用户与Oracle Forms应用程序的交互,我们可以在我们的Cucumber场景中插入步骤,例如
...When I type 'Bob Smith' into the 'Username' field
And I hit the 'Submit' button...
,然后让库代码安装在幕后以驱动Oracle Forms用户界面这个级别.
我们还需要能够检查各种按钮/字段/在适当的时间显示的内容,以及其他正常的功能测试内容......
关于可能让我们构建这个幕后库代码的工具的任何建议?
我正在使用Oracle Forms.我有一个名为的字段SOLD_TO_CUST_PARTY_NAME
.如果我检测到字段值的变化,我必须执行一个过程.我尝试使用when_validate,但即使您只是单击该字段并移动到另一个字段也会执行(无论您是否更改值,都会发生验证).无论如何我只能在字段被修改时检查:old
和/ :new
或类似的东西来执行一个进程?
编辑:
不能使用个性化.它必须完成pl/sql
.
从6i升级到Oracle 11g融合中间件.如何将记录组从表单传递到报表?我们使用的是DATA_PARAMETER,但据我所知,这不再是一种选择.
我想检索包含oracle表单和菜单的特定文件夹中的所有文件列表以及报告和一些txt文件...
您是否知道如何以ORACLE形式检索这些数据,并自动将它们插入到我的数据块中?
我使用oracle form 6.0.
我有2个表:具有主键product_id的product和具有引用product表的product_id的product_id的Review;我为他们创建了表单主详细信息,但是在执行时我到达页面底部:
FRM-40505: ORACLE 错误:无法执行查询
当按 ctrl+shift+e 时我得到:
SELECT ROWID, REVIEW_ID, LIKE, DISLIKE, FIRST_NAME, LAST_NAME, PRODUCT_ID
FROM U1.REVIEW WHERE (PRODUCT_ID=:1)
ORA-00936: missing expression
Run Code Online (Sandbox Code Playgroud)
怎么解决这个问题?怎么了?先感谢您
oracleforms ×10
oracle ×7
java ×3
plsql ×3
automation ×1
boolean ×1
cucumber ×1
migration ×1
oracle-apex ×1
oracle10g ×1
oracle11g ×1
sql ×1