千家信息网

Oracle EBS 开发中常见问题以及解决办法

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,Oracle EBS 开发中常见问题以及解决办法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。EBS Form开发中经常会遇到一些小问题
千家信息网最后更新 2024年11月18日Oracle EBS 开发中常见问题以及解决办法

Oracle EBS 开发中常见问题以及解决办法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

EBS Form开发中经常会遇到一些小问题,以免再次遇到而不记得什么原因。

1.带有stacked canvas 的Form,比如content canvas A,stacked canvas B,这两个canvas在WINDOW M上,当光标移动到A的最后一个Item(例如z)的时候,B canvas消失了(可以用Tab键移动光标至它,即显示)。

Cause: B和A.z发生的互相遮盖,即有重叠区域。

Solution: 将Item间距离拉大一些。

1-1)有时候还会发现某一个stacked canvas 没有显示出来,在树状结构中把canvas的排列顺序调整一下(最好把item的顺序也调整一下,因其也会有影响),content 在前,后面跟stacked A,stacked B。

1-2)一个content canvas(Main),两个stacked canvas(A&B),发现只显示了content canvas上的item。

Cause: 由于是在测试,B上还没有内容,只选择了view stacked canvas A。症状是A的内容不显示,只是用TAB键的时候才会把A切换出来。造成这个的原因是B虽然没有显示,但是也是存在的,且是较大片空白,盖住了A。--shit...

1-3)有时候view--stacked canvas,选中了要显示的stacked canvas,却不见其显示出来,看下stacked canvas的视图端口高度和宽度是否为0。

2.在Form中使用LOV时,LOV的Record Group 中的语句不要有用'--' Mark掉的东东在里面,如果有的话,'--'后面的所有语句都会被mark掉,因为Record Group 的Query语句会全部被放在一行中。切记

3.Set_item_instance_property() 用来改变一列中的某个的属性,如显示特殊颜色等

4.复选框背景色及前景色无法显示成canvas底色、白字。
Solution:将背景色、前景色改成别的颜色,再分别改回automatic、automatic、transparent.

5. 用emp做了一个Tab Page的测试Form,在Application中打开Form的时候报错

developer error: set_window_position called with invalid relation:EMP

Solution:原来是PRE-FORM. Trigger 中的app_window.set_window_position('EMP', 'FIRST_WINDOW');写成了

app_window.set_window_position('EMP', 'EMP');将'FIRST_WINDOW'用WINDOW名替换掉了。

这里切记:只是写相应的BLOCKNAME。

6. FRM-30100:Block must have at least one primary key item.

Block:B_XXXX

Form.:F_XXXX

FRM-30085: Unable to adjust form. for output

Solution:将Block的DML Data Target Name 改为None。

7.

基于view的block,在CRTL+F11查询后变为灰色,无法进行新增等操作,关闭画面重新打开后,画面显示正常,一旦执行查询完毕则变

为灰色。

Solution: 增加on-insert Trigger后正常。

8.Block data source为view,在on-insert Trigger里面有写一段用来在插入资料后将DB生成的ROWID抓出赋给相应block的ROW_ID项。

测试运行Form,在保存时报错:on-insert 抛出no-data-found的异常。将抓ROWID的语句拿掉,测试正常,查看DB中rowid生成也正

常,之后看了一下Form. block的ROW_ID项,杯具,不知道长度怎么变成4了…

9.有时候在post-query里面对某个要显示的非数据库item赋值,这样会造成在鼠标切换到另一条记录时以及查询完毕没有做任何改动却被

提示是否要保存修改。
Solution:POST-QUERY里面写set_record_property(:system.trigger_record,:system.trigger_block, STATUS,QUERY_STATUS);

10.SET_ITEM_PROPERTY用来设置某个ITEM的某个属性,可以说是设置Block中某个Item整体的某个属性,有时候要设置某条记录中的Item属性(如当前记录),这样可以使用SET_ITEM_INSTANCE_PROPERTY.

11.Block 的insert_allowed属性设置为Y,在when-new-block-instance里面用set_block_property设置insert_allowed为false,这样新增记录的按钮会亮,但不能新增记录。
Block 的delete_allowed属性设置为Y,DML data source type设置为无,这样删除按钮会亮,但不能删除记录,点删除按钮时下面会提示需要ON-LOCK trigger。

12.如果在post-query中用select into为某个item赋值,此item的database item属性需设置为No,否则在ctrl+f11查询后后会有提示框
frm-41050: You cannot update this record.

13.编译时报错:错误0发生在第0行,第0列
Compilation unit analysis terminated
procedure等的spec和body参数不一致的时候,编译会报这个错误。

14.用Button中代码控制修改DB数据,但数据并没有在Form画面显示,按下Button时会提示FRM-40401: No changes to save
Solution:在update等及commit之前写:System.Message_Level := 25;

15. 有时候想要在Button按过之后使其变为灰色,不可以在when-button-pressed中写 set_item_property(blk.itm,enabled,property_false);改变自身的状态,只能改变其它,可行的情况下可 以在这里使某个block执行execute_query,然后在post_query中利用条件将这个按钮变灰。

16. 经常有id栏位在insert 记录的时候自动塞sequence的值,这种情况最好在per-insert中把sequence.nexval赋值给block.item,而不要在 insert语句中直接写insert into xx(id,...) values(sequence.nextval,...),因为这样写时,block.item依然是无值的,需在insert完成后从DB中取出相应 ID值赋值给block.item,否则易有问题,例如其下还有detail block由id串过去,则在detail block中作记录保存时会报错说ID不能为空(已经设置不空)或ID塞进了空值。

17. Current Record Visual Attribute Group,可以用来使当前记录显示不同颜色

18. query_find类型的Form,关闭result window时,如果光标在Window的最后一个block(多block时),则每点一次关闭,光标会往前走一个block,一直到第一个block时再点关闭才会关闭window.

为了不改动app_custom里面的

if (wnd = get_view_property(get_item_property(:SYSTEM.CURSOR_ITEM,

ITEM_CANVAS), WINDOW_NAME)) then

do_key('PREVIOUS_BLOCK');

end if;

hide_window(wnd);

而把每个result block的 "previous navigation block"都改成了query_find block。

19. 可利用APP_EXCEPTION.DISABLED;来失效KEY-按钮

如在KEY-CLRREC Trigger中写APP_EXCEPTION.DISABLED;则画面上的擦除按钮虽亮却失效。

20. 想要显示Stacked canvas时,用View――Stacked canvas,列表框中却没有想要显示的Stacked canvas供选择,是因为想要显示的Stacked canvas的Window和Content canvas的Window不同。

21.注意,如果在已经建立好的数据块上重新使用数据块向导,例如增加栏位(比如数据块的源为某个table,现在需要增加一个列在table及block中,此时table增加列后,在block上重新使用数据块向导刷新table调出新item),会使得当前已经建立的base table item的属性发生还原!此时如果已经设置了很多非默认属性,最好手动增加item。

22.Stacked canvas的水平滚动条位置是由canvas本身的view port的下边界决定,将其view port下界设置为比canvas最下面的记录多出一个滚动条的高度的位置。
View port的宽度决定了stacked canvas 在content canvas上的视界宽度。
有时会发现水平滚动条拉到最左端时,stacked canvas右边界却在垂直滚动条的左边很远的距离,这是stacked canvas的canvas太宽造成的,应设置为靠紧最右边Item。
Stacked canvas 的垂直滚动条一般放在content canvas上(即一般设置为block显示垂直滚动条,并显示于content canvas,stacked canvas显示水平滚动条,显示于stacked canvas)。

23.Tools 等菜单项,例在form级增加special1(special xx....) trigger,里面可以写这个菜单项要执行的代码,初始化此菜单项可以在when-new-form-instance中用类似 APP_SPECIAL.INSTANTIATE('SPECIAL1','生成明细数据', 'POBKORD', TRUE);来实现。

24.LIST条目,Elements in List增加以后,没法删除掉,只得删掉这个Item重新建一个,如果Elements in List多的话,会很麻烦,要一个一个重新写。
Solution:使用Shift+Ctrl+小于号(Shift+Ctrl+<)快捷键可以删除掉多余的Elements

25.按钮按过之后灰,可以按后go_block,go_item,到其它Block,然后在when-new-record-instance里面写使control block的按钮失效,当然也可以在其它trigger里面写,看情形。
26.独立安装oralce form. developer组件,oralce exclusive show lov button in oralce form. developer.

解决方法:

forms\java\oracle\forms\registry\Registry.dat

修改app.ui.lovButtons=true(默认是false)

注:个人没测试过,不知效果。

27.FRM-40654 Record has been updated by another user.Re-query to see change.

不知道为什么出这个错误,新写的Form,Base View,没什么another user在用,后自己写了个on-lock就没再出现这。

28. 限制在新增记录的时候必须第一个输入某栏位,直接把这个Item设为First navigate item即可,即在block中位置排在最上面,或者排在它上面的item 的keyboard navigable属性全部设置为No,然后在when-validate-item中判断,如果这个Item为空则raise form_trigger_failure。

29.状态栏提示信息。如果发现在保 存记录等情形下应该在Window底部显示的如"FRM-40400:Transaction complete:1 records applied and saved."没有显示,应该是Form. Module的Console Window属性被设为了Null。改为随便设一个Window即可。

附属性说明:

Console Window property

Specifies the name of the window that should display the Form. Builder console. The console includes the status line and message line, and is displayed at the bottom of the window.

On Microsoft Windows, the console is always displayed on the MDI application window, rather than on any particular window in the form; however, you must still set this property to the name of a form. window to indicate that you want the console to be displayed.

If you do not want a form. to have a console, set this property to .

30.QUERY_FIND类型,Find block的query allowed设为NO,发现光标在Result block时,手电筒不可用,如果下面还有别的blcok,光标点过去,手电筒亮了,再点回Result block,手电筒可用。

Solution:把Find block的query allowed设为YES。(I Just wanna say "shit!")

31.Master-Detail类型的两个Block,发现Master没有值的时候,在Detail Block上执行CTRL+F11竟然把所有记录都查出来了。

Solution:Relations的属性Prevent Masterless Operations设置为Yes

32.Lov 的Filter Before Display如果设置为Y,且这个lov使用的record group的SQL中用了别名,就会有问题,会报frm-40502。因为Filter Before Display设置为Y的话,它会以 where 原列名 like %% 去筛选。可以尝试在原SQL外嵌套一层select。

33.Block 的Query Data Source Type为FROM clause query时,报FRM-30100: Block must have at least one primary key item.----把DML Data Target Type设置为None maybe有效。

34.录入数据时,选择日期--确定,系统询问是否保存记录。

原 因:数据块1 trigger:WHEN-NEW-BLOCK-INSTANCE中有写execute_query;因此录入时,光标从当前块(数据块1)跳到数据 块:CALENDAR-接着又回到当前块(数据块1),触发数据块1的WHEN-NEW-BLOCK-INSTANCE,执行 execute_query;

35.Form中的Procedure中可以以下方式来写

BEGIN
IF event = 'INIT' THEN
...

ELSIF event=xxxxx THEN

...
ELSE
app_exception.invalid_argument(procname => p_procedure_name,
argument => p_argument,
VALUE => p_value);
END IF;
END;

36. 在注册表中HKEY_LOCAL_MACHINE\SOFTWARE\Oracle下新建字符串值ORACLE_APPLICATIONS,值设定为 TRUE,重新打开Form. Builder可以看到 所有引用的对象后面都会带一个图标,以方便区分哪些对象是引用的,哪些对象是属于自己的。

37.有时候会发现关闭FORM的时候(点右上角的叉叉,F4没发现这种情况),Form关闭了,却留下一个红色的Progress Indicator进度条,无法关闭,请检查APP_CUSTOM包中的是否已改为你的第一个WINDOW的名字。

38.Display item使用Lov,返回Lov的第二个值到某Database Item(DB中保存此值),且Lov的Record Group SQL中用not exists ()排除掉了已经存在于数据库的值,即每选择一个值保存后,就不会再挑选到此值。

症状:Form查询的时候,会弹出Lov让选择值

Cause:查询时,Display item的显示值是在Post-query中由此记录的DB item得到并赋予的,由于发生Validation,而Lov中此时已无此值。

Solution:在Post-query中赋值后加上

SET_RECORD_PROPERTY(:SYSTEM.TRIGGER_RECORD,:SYSTEM.TRIGGER_BLOCK, STATUS,QUERY_STATUS);

看完上述内容,你们掌握Oracle EBS 开发中常见问题以及解决办法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

0