2014年1月14日 星期二
[FORM] FRM-40654: Record has been updated. Requery block to see change
FRM-40654: Record has been updated. Requery block to see change
怎查都沒有lock時,一般都是欄位值前後有空白造成的,解決方法很簡單,
找出對應的table,把空白值update掉就好了。
2013年5月10日 星期五
Form Personalization 裡判斷DB原始值
有時候我們需要在Form Personalization 裡,取得某欄位原始值來做判斷時,可以利用:
${ITEM.BLOCK_NAME.ITEM_NAME.DATABASE_VALUE}
範例:
NVL(${ITEM.W_JOBS.START_QUANTITY.DATABASE_VALUE},0) != 0
2009年7月7日 星期二
關於Form中各種commit的說明
1. Commit針對Form操作和代碼進行Commit,若Form上的異動和代碼中的資料異動有衝突,以介面上的為主。
2. Commit_form
針對Form上的資料異動做Commit,對於代碼中的類似update、insert語句也進行提交,如果Form上的資料異動和代碼中的異動有衝突,以介面上的為主。
3. do_key(‘commit_form’)
首先會觸發Form下的KEY-COMMIT這個Trigger。若沒有KEY-COMMIT這個Trigger,則直接提交Form和代碼資料。如果Form上的資料異動和代碼中的資料異動有衝突,以介面上的為主。
4. forms_ddl(‘commit’)
只針對代碼中的update、insert、delete等語句進行Commit,Form上的異動不會提交。資料異動有衝突時,依據Trigger先後順序覆蓋,例如Post-Forms-Commit中的UPDATE就會覆蓋掉介面。
2008年9月23日 星期二
Oracle Forms Trigger 執行順序
出處:https://metalink.oracle.com/
Action Trigger Firing Order Level
------ -------------------- -----
Runform 1. Pre-Logon Form
2. On-Logon Form
3. Post-Logon Form
4. Pre-Form Form
5. When-Create-Record Block
6. Pre-Block Block
7. Pre-Record Block
8. Pre-Text-Item Item
9. When-New-Form-Instance Form
10. When-New-Block-Instance Block
11. When-New-Record-Instance Block
12. When-New-Item-Instance Item
***********
Enter Query 1. Post-Text-Item Item
2. Post-Record Block
3. When-Clear-Block Block
4. When-New-Record-Instance Block
5. When-New-Item-Instance Item
Note: If you define the Key-ENTQRY trigger, this is the only trigger
which fires in an Enter Query situation.
*****************
Execute Query
After Enter Query 1. Pre-Query Block
2. Pre-Select Block
3. On-Select Block
4. When-Clear-Block Block
5. Post-Select Block
6. On-Fetch Block
7. On-Close Form
8. When-Clear-Block Block
Note: If you define the Key-EXEQRY trigger, this is the only trigger
which fires in an Execute Query situation.
*************
Execute Query
Without Enter
Query 1. Post-Text-Item Block
2. Pre-Query Block
3. Pre-Select Block
4. On-Select Block
5. Post-Select Block
6. On-Fetch Block
7. On-Close Form
8. When_Create_Record Block
9. Pre-Record Block
10. Pre-Text-Item Item
11. When-New-Record-Instance Block
12. When-New-Item-Instance Item
****
Exit 1. Post-Text-Item Item
2. Post-Record Block
3. Post-Block Block
4. Post-Form Form
5. On-Rollback Form
6. Pre-Logout Form
7. On-Logout Form
8. Post-Logout Form
**************
Next Field and
Previous field 1. When-New-Item-Instance Item
***************
Next Record and
Previous Record 1. When-New-Record-Instance Block
2. When-New-Item-Instance Item
**************
Next Block and
Previous Block 1. Post-Text-Item Item
2. Post-Record Block
3. Post-Block Block
4. When-Create-Record Block
5. Pre-Block Block
6. Pre-Record Block
7. Pre-Text-Item Block
8. When-New-Block-Instance Block
9. When-New-Record-Instance Block
10. When-New-Item-Instance Form
*******************
Records Are Queried 1. Post-Query Block
2. Post-Change Block
3. Post-Change Item
4. Post-Change Block
5. Post-Change Block
Go back to Post-Query
NOTE: This cycle is repeated for each record retrieved.
**********************
No Records Are Queried 1. When-New-Record-Instance Block
2. When-New-Item-Instance Item
NOTE: To observe this Trigger Firing Order:
a. Enter a query.
b. Enter a nonexistent record.
c. Execute the query.
The two triggers listed above, the Enter Query triggers, and
the Execute Query triggers fire.
*************
Create Record 1. Post-Change Block
2. When-Validate-Item Block
3. Post-Text-Item Block
4. When-Validate-Record Block
5. Post-Record Block
6. Post-Block Block
7. On-Savepoint Form
8. Pre-Commit Form
9. Pre-Insert Block
10. On-Insert Form
11. Post-Insert Block
12. Post-Forms-Commit Form
13. On-Commit Form
14. Post-Database-Commit Form
15. Pre-Block Block
16. Pre-Record Block
17. Pre-Text-Item Block
18. When-New-Item-Instance Form
*************
Update Record 1. When-Database-Record Block
2. Post-Change Block
3. When-Validate-Item Block
4. Post-Text-Item Block
5. When-Validate-Record Block
6. Post-Record Block
7. Post-Block Block
8. On-Savepoint Form
9. Pre-Commit Form
10. Pre-Update Block
11. On-Update Block
12. Post-Update Block
13. Post-Forms-Commit Form
14. On-Commit Form
Here the transaction is complete and one record added.
15. Post-Database-Commit Form
16. Pre-Text-Item Block
17. When-New-Item-Instance Form
NOTE: To observe this Trigger Firing Order:
a. Execute a query.
b. Change a value.
c. Choose Action->Save from the menu.
d. Record the triggers from that point.
*************
Delete Record 1. On-Lock Block
2. When-Remove-Record Block
3. Post-Change Block
4. Post-Change Block
5. Post-Change Block
6. Post-Change Block
7. Post-Change Block
8. Post-Change Block
9. Post-Change Item
10. Post-Query Block
11. Post-Text-Item Block
12. Post-Record Block
13. Pre-Record Block
14. Pre-Text-Item Block
15. When-New-Record-Instance Block
16. When-New-Item-Instance Form
2008年3月26日 星期三
安裝 Oracle Database 10g Express
Oracle Database 10g Express的安裝其實是相當簡便的,幾乎只要一直下一步就可以完成安裝了
接受合約,下一步
因為只有一個產品可以選擇安裝,安裝路徑可以改變,下一步
設定SYS與SYSTEM USER的密碼,下一步
顯示Database一些listener的相關資訊,下一步安裝
完成安裝後,可以到資料庫管理首頁做相關設定
以SYS身份登入
XE的 Web管理頁面還蠻方便,大部分的工作不用再透過其他工具來執行,算是一套不錯的免費資料庫。
對於個人或小企業來說,4GB的資料庫應該很好用了。
2008年3月23日 星期日
好用的免費資料庫: Oracle 資料庫 10g 快捷版
我們在開發軟體時,一般都會選擇MySQL當後端資料庫,不過個人覺得若是想享用頂級的免費資料庫,可以有另一個更好的解決方案。Oracle Database 10g Express
Oracle Database 10g Express(Oracle Database XE)是基於 Oracle Database 10g 第 2 版代碼庫的小型入門級資料庫,它具備以下優點:免費進行開發、部署和分發;下載速度快;並且管理簡單。Oracle XE 是一款優秀的入門級資料庫,可供以下使用者使用:
- 致力於 PHP、Java、.NET、XML 和開放原始程式碼應用程式的開發人員
- 需要免費的入門級資料庫進行培訓和部署的 DBA
- 需要入門級資料庫進行免費分發的獨立軟體廠商 (ISV) 和硬體供應商
- 需要在課程中使用免費資料庫的教育機構和學生
現在,利用 Oracle Database XE,您可以使用強大的基礎架構來開發和部署應用程式,然後在必要時進行升級而不必進行昂貴和複雜的移植。閱讀使用者對 Oracle 資料庫 XE 的評價。
Oracle 資料庫 XE 對安裝到的主機的規模和 CPU 數量不作限制(每台電腦一個資料庫),但 XE 將最多存儲 4GB 的使用者資料,最多使用 1GB 記憶體,並在主機上使用一個 CPU。
2007年11月14日 星期三
中文大寫金額轉換函式
這個FUNCTION 是為了朋友寫的,其中大部分是參考某網友寫的程式(不好意思,忘了網址),有需要的朋友可以參考看看。
CREATE OR REPLACE FUNCTION get_ntd_amt(smallmoney VARCHAR2)
RETURN VARCHAR2 IS
BigWrite VARCHAR2(100); --用於返回大寫的金額
Bignum VARCHAR2(10); --用於存放每一個阿拉伯數字對應的漢字
NTD VARCHAR2(10); --用於存放台幣單位
moneyplace NUMBER; --用於確定台幣的精度,最多只能精確到分
dotplace NUMBER; --確定小數點的位置
moneynum NUMBER; --台幣的位數
err_exception EXCEPTION;
BEGIN
/*用內置函數INSTR確定小數點的位置*/
dotplace:= INSTR(smallmoney,'.');
/*判斷是否超出本函數定義的精度範圍,
如果是則引發自定義異常err_exception*/
IF (LENGTH(smallmoney)>14)
OR((LENGTH(smallmoney)>12)AND(dotplace=0)) THEN
RAISE err_exception;
END IF;
/*確定台幣的精度,如果小數點位置為0則精度只精確到元否則按小數點的 位置來確定台幣的精度*/
IF dotplace=0 THEN
moneyplace:=0;
ELSE
moneyplace:=dotplace-LENGTH(smallmoney);
END IF;
/*確定台幣的精確,如果小數點位置為0則精度只精確到元否則按小數點的 位置來確定台幣的精度*/
/*通過一個FOR循環將smallmoney中的阿拉伯數字逐一去出來,注意該FOR循 環是按照降序循環的*/
BigWrite :='';
FOR moneynum in REVERSE 1..LENGTH(smallmoney) LOOP
/*如果位置在小數點的位置則不做任何動作*/
IF moneynum<>dotplace THEN
/*CASE循環將smallmoney裡對應的阿拉伯數字用中文來表示*/
Bignum := CASE SUBSTR(smallmoney,moneynum,1)
WHEN '1' THEN '壹'
WHEN '2' THEN '貳'
WHEN '3' THEN '參'
WHEN '4' THEN '肆'
WHEN '5' THEN '伍'
WHEN '6' THEN '陸'
WHEN '7' THEN '柒'
WHEN '8' THEN '捌'
WHEN '9' THEN '玖'
WHEN '0' THEN '零'
END;
/*CASE循環來設置smallmoney裡對應的阿拉伯數字的相應的精度*/
NTD := CASE moneyplace
WHEN -2 THEN '分'
WHEN -1 THEN '角'
WHEN 0 THEN '元'
WHEN 1 THEN '拾'
WHEN 2 THEN '佰'
WHEN 3 THEN '仟'
WHEN 4 THEN '萬'
WHEN 5 THEN '拾'
WHEN 6 THEN '佰'
WHEN 7 THEN '仟'
WHEN 8 THEN '億'
WHEN 9 THEN '拾'
WHEN 10 THEN '佰'
WHEN 11 THEN '仟'
END;
moneyplace := moneyplace+1;
--IF BigWrite IS NULL THEN
--BigWrite := Bignum||NTD;
--ELSE
BigWrite := Bignum||NTD||BigWrite;
--END IF;
END IF;
END LOOP;
RETURN BigWrite;
EXCEPTION --異常處理部分
WHEN err_exception THEN
return ('該函數只能轉換長度不大於14位後整數位不大於12位的金額!');
WHEN OTHERS THEN
return ('不是有效的金額!');
END;
2007年10月23日 星期二
FND_MESSAGE 常用的幾種用法
取得一條資料庫中的等待資訊。
2. FND_MESSAGE.SET_STRING (value IN varchar2)
將字串放到消息棧中
3. FND_MESSAGE.SET_TOKEN
用值替換MESSAGE的訊息中的變數
語法:
procedure FND_MESSAGE.SET_TOKEN(token_name IN VARCHAR2,
value IN VARCHAR2,
translate IN boolean default FALSE);
4. FND_MESSAGE.SET_NAME
語法:
procedure FND_MESSAGE.SET_NAME(application_shortname IN varchar2,
message_name IN varchar2);
(從Message Dictionary獲取ERP已定義的訊息:
FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;
FND_MESSAGE.ERROR ;)
-- 在FORM用於Show Message的函數
5. FND_MESSAGE.DEBUG
6. FND_MESSAGE.GET
取得在message中設置好的message訊息。
7. FND_MESSAGE.SHOW
以最基本的方式顯示給用戶,和FND_MESSAGE.DEBUG一樣效果。
8. FND_MESSAGE.HINT
不會彈出對話方塊給用戶,而是顯示在左下腳的狀態欄上面。
9. FND_MESSAGE.ERROR
以Error資訊的方式顯示給用戶
10.FND_MESSAGE.WARN (Function)
以選擇資訊的方式顯示給用戶,可以選擇[Ok]或[Cancel],返回值分別是TRUE和FALSE
範例:
if FND_MESSAGE.warn then
fnd_message.debug('True');
else
fnd_message.debug('False');
end if;
11.FND_MESSAGE.QUESTION (Function)
返回一個被選中的button的number
function QUESTION(BUTTON1 in varchar2 default 'YES',
BUTTON2 in varchar2 default 'NO',
BUTTON3 in varchar2 default 'CANCEL',
DEFAULT_BTN in number default 1,
CANCEL_BTN in number default 3,
ICON in varchar2 default 'question')
return number
範例:
FND_MESSAGE.SET_NAME('FND','ATCHMT-COMMIT BEFORE INVOKING');
IF FND_MESSAGE.QUESTION('YES','CANCEL',NULL,1,2,NULL) = 2 THEN
RAISE FORM_TRIGGER_FAILURE;
END IF;
2007年10月19日 星期五
[Developer] 客製Oracle Form的開發環境設定
為確保開發客製程式的環境一致性,安裝Developer後建議:
1. 安裝 Oracle Developer 6i後更新patch 13以上版本。
2. 從Apps. Server端$AU_TOP/resource 下載所有檔案至本地端,如C:\resources\。
3. 登入編輯程式(regedit)設定 Oracle Home的環境變數如下:
NLS_DATE_FORMAT = DD-MON-RR
FORMS60_PATH = C:\resources
REPORTS60_PATH = C:\resources
Oracle_Applications = TRUE
