您好,登錄后才能下訂單哦!
Oracle EBS 開發(fā)中常見問題以及解決辦法,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
EBS Form開發(fā)中經(jīng)常會(huì)遇到一些小問題,以免再次遇到而不記得什么原因。
1.帶有stacked canvas 的Form,比如content canvas A,stacked canvas B,這兩個(gè)canvas在WINDOW M上,當(dāng)光標(biāo)移動(dòng)到A的最后一個(gè)Item(例如z)的時(shí)候,B canvas消失了(可以用Tab鍵移動(dòng)光標(biāo)至它,即顯示)。
Cause: B和A.z發(fā)生的互相遮蓋,即有重疊區(qū)域。
Solution: 將Item間距離拉大一些。
1-1)有時(shí)候還會(huì)發(fā)現(xiàn)某一個(gè)stacked canvas 沒有顯示出來,在樹狀結(jié)構(gòu)中把canvas的排列順序調(diào)整一下(最好把item的順序也調(diào)整一下,因其也會(huì)有影響),content 在前,后面跟stacked A,stacked B。
1-2)一個(gè)content canvas(Main),兩個(gè)stacked canvas(A&B),發(fā)現(xiàn)只顯示了content canvas上的item。
Cause: 由于是在測(cè)試,B上還沒有內(nèi)容,只選擇了view stacked canvas A。癥狀是A的內(nèi)容不顯示,只是用TAB鍵的時(shí)候才會(huì)把A切換出來。造成這個(gè)的原因是B雖然沒有顯示,但是也是存在的,且是較大片空白,蓋住了A。--shit...
1-3)有時(shí)候view--stacked canvas,選中了要顯示的stacked canvas,卻不見其顯示出來,看下stacked canvas的視圖端口高度和寬度是否為0。
2.在Form中使用LOV時(shí),LOV的Record Group 中的語(yǔ)句不要有用'--' Mark掉的東東在里面,如果有的話,'--'后面的所有語(yǔ)句都會(huì)被mark掉,因?yàn)镽ecord Group 的Query語(yǔ)句會(huì)全部被放在一行中。切記
3.Set_item_instance_property() 用來改變一列中的某個(gè)的屬性,如顯示特殊顏色等
4.復(fù)選框背景色及前景色無法顯示成canvas底色、白字。
Solution:將背景色、前景色改成別的顏色,再分別改回automatic、automatic、transparent.
5. 用emp做了一個(gè)Tab Page的測(cè)試Form,在Application中打開Form的時(shí)候報(bào)錯(cuò)
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名替換掉了。
這里切記:只是寫相應(yīng)的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查詢后變?yōu)榛疑瑹o法進(jìn)行新增等操作,關(guān)閉畫面重新打開后,畫面顯示正常,一旦執(zhí)行查詢完畢則變
為灰色。
Solution: 增加on-insert Trigger后正常。
8.Block data source為view,在on-insert Trigger里面有寫一段用來在插入資料后將DB生成的ROWID抓出賦給相應(yīng)block的ROW_ID項(xiàng)。
測(cè)試運(yùn)行Form,在保存時(shí)報(bào)錯(cuò):on-insert 拋出no-data-found的異常。將抓ROWID的語(yǔ)句拿掉,測(cè)試正常,查看DB中rowid生成也正
常,之后看了一下Form. block的ROW_ID項(xiàng),杯具,不知道長(zhǎng)度怎么變成4了…
9.有時(shí)候在post-query里面對(duì)某個(gè)要顯示的非數(shù)據(jù)庫(kù)item賦值,這樣會(huì)造成在鼠標(biāo)切換到另一條記錄時(shí)以及查詢完畢沒有做任何改動(dòng)卻被
提示是否要保存修改。
Solution:POST-QUERY里面寫set_record_property(:system.trigger_record,:system.trigger_block, STATUS,QUERY_STATUS);
10.SET_ITEM_PROPERTY用來設(shè)置某個(gè)ITEM的某個(gè)屬性,可以說是設(shè)置Block中某個(gè)Item整體的某個(gè)屬性,有時(shí)候要設(shè)置某條記錄中的Item屬性(如當(dāng)前記錄),這樣可以使用SET_ITEM_INSTANCE_PROPERTY.
11.Block 的insert_allowed屬性設(shè)置為Y,在when-new-block-instance里面用set_block_property設(shè)置insert_allowed為false,這樣新增記錄的按鈕會(huì)亮,但不能新增記錄。
Block 的delete_allowed屬性設(shè)置為Y,DML data source type設(shè)置為無,這樣刪除按鈕會(huì)亮,但不能刪除記錄,點(diǎn)刪除按鈕時(shí)下面會(huì)提示需要ON-LOCK trigger。
12.如果在post-query中用select into為某個(gè)item賦值,此item的database item屬性需設(shè)置為No,否則在ctrl+f11查詢后后會(huì)有提示框
frm-41050: You cannot update this record.
13.編譯時(shí)報(bào)錯(cuò):錯(cuò)誤0發(fā)生在第0行,第0列
Compilation unit analysis terminated
procedure等的spec和body參數(shù)不一致的時(shí)候,編譯會(huì)報(bào)這個(gè)錯(cuò)誤。
14.用Button中代碼控制修改DB數(shù)據(jù),但數(shù)據(jù)并沒有在Form畫面顯示,按下Button時(shí)會(huì)提示FRM-40401: No changes to save
Solution:在update等及commit之前寫:System.Message_Level := 25;
15. 有時(shí)候想要在Button按過之后使其變?yōu)榛疑?,不可以在when-button-pressed中寫 set_item_property(blk.itm,enabled,property_false);改變自身的狀態(tài),只能改變其它,可行的情況下可 以在這里使某個(gè)block執(zhí)行execute_query,然后在post_query中利用條件將這個(gè)按鈕變灰。
16. 經(jīng)常有id欄位在insert 記錄的時(shí)候自動(dòng)塞sequence的值,這種情況最好在per-insert中把sequence.nexval賦值給block.item,而不要在 insert語(yǔ)句中直接寫insert into xx(id,...) values(sequence.nextval,...),因?yàn)檫@樣寫時(shí),block.item依然是無值的,需在insert完成后從DB中取出相應(yīng) ID值賦值給block.item,否則易有問題,例如其下還有detail block由id串過去,則在detail block中作記錄保存時(shí)會(huì)報(bào)錯(cuò)說ID不能為空(已經(jīng)設(shè)置不空)或ID塞進(jìn)了空值。
17. Current Record Visual Attribute Group,可以用來使當(dāng)前記錄顯示不同顏色
18. query_find類型的Form,關(guān)閉result window時(shí),如果光標(biāo)在Window的最后一個(gè)block(多block時(shí)),則每點(diǎn)一次關(guān)閉,光標(biāo)會(huì)往前走一個(gè)block,一直到第一個(gè)block時(shí)再點(diǎn)關(guān)閉才會(huì)關(guān)閉window.
為了不改動(dòng)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);
而把每個(gè)result block的 "previous navigation block"都改成了query_find block。
19. 可利用APP_EXCEPTION.DISABLED;來失效KEY-按鈕
如在KEY-CLRREC Trigger中寫APP_EXCEPTION.DISABLED;則畫面上的擦除按鈕雖亮卻失效。
20. 想要顯示Stacked canvas時(shí),用View――Stacked canvas,列表框中卻沒有想要顯示的Stacked canvas供選擇,是因?yàn)橄胍@示的Stacked canvas的Window和Content canvas的Window不同。
21.注意,如果在已經(jīng)建立好的數(shù)據(jù)塊上重新使用數(shù)據(jù)塊向?qū)В缭黾訖谖唬ū热鐢?shù)據(jù)塊的源為某個(gè)table,現(xiàn)在需要增加一個(gè)列在table及block中,此時(shí)table增加列后,在block上重新使用數(shù)據(jù)塊向?qū)⑿聇able調(diào)出新item),會(huì)使得當(dāng)前已經(jīng)建立的base table item的屬性發(fā)生還原!此時(shí)如果已經(jīng)設(shè)置了很多非默認(rèn)屬性,最好手動(dòng)增加item。
22.Stacked canvas的水平滾動(dòng)條位置是由canvas本身的view port的下邊界決定,將其view port下界設(shè)置為比canvas最下面的記錄多出一個(gè)滾動(dòng)條的高度的位置。
View port的寬度決定了stacked canvas 在content canvas上的視界寬度。
有時(shí)會(huì)發(fā)現(xiàn)水平滾動(dòng)條拉到最左端時(shí),stacked canvas右邊界卻在垂直滾動(dòng)條的左邊很遠(yuǎn)的距離,這是stacked canvas的canvas太寬造成的,應(yīng)設(shè)置為靠緊最右邊Item。
Stacked canvas 的垂直滾動(dòng)條一般放在content canvas上(即一般設(shè)置為block顯示垂直滾動(dòng)條,并顯示于content canvas,stacked canvas顯示水平滾動(dòng)條,顯示于stacked canvas)。
23.Tools 等菜單項(xiàng),例在form級(jí)增加special1(special xx....) trigger,里面可以寫這個(gè)菜單項(xiàng)要執(zhí)行的代碼,初始化此菜單項(xiàng)可以在when-new-form-instance中用類似 APP_SPECIAL.INSTANTIATE('SPECIAL1','生成明細(xì)數(shù)據(jù)', 'POBKORD', TRUE);來實(shí)現(xiàn)。
24.LIST條目,Elements in List增加以后,沒法刪除掉,只得刪掉這個(gè)Item重新建一個(gè),如果Elements in List多的話,會(huì)很麻煩,要一個(gè)一個(gè)重新寫。
Solution:使用Shift+Ctrl+小于號(hào)(Shift+Ctrl+<)快捷鍵可以刪除掉多余的Elements
25.按鈕按過之后灰,可以按后go_block,go_item,到其它Block,然后在when-new-record-instance里面寫使control block的按鈕失效,當(dāng)然也可以在其它trigger里面寫,看情形。
26.獨(dú)立安裝oralce form. developer組件,oralce exclusive show lov button in oralce form. developer.
解決方法:
forms\java\oracle\forms\registry\Registry.dat
修改app.ui.lovButtons=true(默認(rèn)是false)
注:個(gè)人沒測(cè)試過,不知效果。
27.FRM-40654 Record has been updated by another user.Re-query to see change.
不知道為什么出這個(gè)錯(cuò)誤,新寫的Form,Base View,沒什么another user在用,后自己寫了個(gè)on-lock就沒再出現(xiàn)這。
28. 限制在新增記錄的時(shí)候必須第一個(gè)輸入某欄位,直接把這個(gè)Item設(shè)為First navigate item即可,即在block中位置排在最上面,或者排在它上面的item 的keyboard navigable屬性全部設(shè)置為No,然后在when-validate-item中判斷,如果這個(gè)Item為空則raise form_trigger_failure。
29.狀態(tài)欄提示信息。如果發(fā)現(xiàn)在保 存記錄等情形下應(yīng)該在Window底部顯示的如"FRM-40400:Transaction complete:1 records applied and saved."沒有顯示,應(yīng)該是Form. Module的Console Window屬性被設(shè)為了Null。改為隨便設(shè)一個(gè)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 <Null>.
30.QUERY_FIND類型,F(xiàn)ind block的query allowed設(shè)為NO,發(fā)現(xiàn)光標(biāo)在Result block時(shí),手電筒不可用,如果下面還有別的blcok,光標(biāo)點(diǎn)過去,手電筒亮了,再點(diǎn)回Result block,手電筒可用。
Solution:把Find block的query allowed設(shè)為YES。(I Just wanna say "shit!")
31.Master-Detail類型的兩個(gè)Block,發(fā)現(xiàn)Master沒有值的時(shí)候,在Detail Block上執(zhí)行CTRL+F11竟然把所有記錄都查出來了。
Solution:Relations的屬性Prevent Masterless Operations設(shè)置為Yes
32.Lov 的Filter Before Display如果設(shè)置為Y,且這個(gè)lov使用的record group的SQL中用了別名,就會(huì)有問題,會(huì)報(bào)frm-40502。因?yàn)镕ilter Before Display設(shè)置為Y的話,它會(huì)以 where 原列名 like %% 去篩選。可以嘗試在原SQL外嵌套一層select。
33.Block 的Query Data Source Type為FROM clause query時(shí),報(bào)FRM-30100: Block must have at least one primary key item.----把DML Data Target Type設(shè)置為None maybe有效。
34.錄入數(shù)據(jù)時(shí),選擇日期--確定,系統(tǒng)詢問是否保存記錄。
原 因:數(shù)據(jù)塊1 trigger:WHEN-NEW-BLOCK-INSTANCE中有寫execute_query;因此錄入時(shí),光標(biāo)從當(dāng)前塊(數(shù)據(jù)塊1)跳到數(shù)據(jù) 塊:CALENDAR-接著又回到當(dāng)前塊(數(shù)據(jù)塊1),觸發(fā)數(shù)據(jù)塊1的WHEN-NEW-BLOCK-INSTANCE,執(zhí)行 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. 在注冊(cè)表中HKEY_LOCAL_MACHINE\SOFTWARE\Oracle下新建字符串值ORACLE_APPLICATIONS,值設(shè)定為 TRUE,重新打開Form. Builder可以看到 所有引用的對(duì)象后面都會(huì)帶一個(gè)圖標(biāo),以方便區(qū)分哪些對(duì)象是引用的,哪些對(duì)象是屬于自己的。
37.有時(shí)候會(huì)發(fā)現(xiàn)關(guān)閉FORM的時(shí)候(點(diǎn)右上角的叉叉,F(xiàn)4沒發(fā)現(xiàn)這種情況),F(xiàn)orm關(guān)閉了,卻留下一個(gè)紅色的Progress Indicator進(jìn)度條,無法關(guān)閉,請(qǐng)檢查APP_CUSTOM包中的<first window>是否已改為你的第一個(gè)WINDOW的名字。
38.Display item使用Lov,返回Lov的第二個(gè)值到某Database Item(DB中保存此值),且Lov的Record Group SQL中用not exists ()排除掉了已經(jīng)存在于數(shù)據(jù)庫(kù)的值,即每選擇一個(gè)值保存后,就不會(huì)再挑選到此值。
癥狀:Form查詢的時(shí)候,會(huì)彈出Lov讓選擇值
Cause:查詢時(shí),Display item的顯示值是在Post-query中由此記錄的DB item得到并賦予的,由于發(fā)生Validation,而Lov中此時(shí)已無此值。
Solution:在Post-query中賦值后加上
SET_RECORD_PROPERTY(:SYSTEM.TRIGGER_RECORD,:SYSTEM.TRIGGER_BLOCK, STATUS,QUERY_STATUS);
看完上述內(nèi)容,你們掌握Oracle EBS 開發(fā)中常見問題以及解決辦法的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。