Form技巧:如果在輸入Item之後,可以自動執行GO_BLOCK等內建函式
很多時候,我們想實現這樣子的操作效果:
當向一個特定的Item輸入資料之後,自動觸發一系列的動作,例如GO_BLOCK,然後Loop這個Block,向這個Block維護一定的值(或者檢查值)。這樣子可以很大程度方便User操作(因為是自動操作的)。
但是,眾所周知,如果在WHEN-VALIDATE-ITEM等觸發器用GO_BLOCK等導航的內建函式,會報錯:FRM-40737存在非法的受限過程。因為驗證的觸發器是不可以導航到別的記錄的(大部分觸發器都不可以)。
這裡發現一個觸發器可以達到這個效果:KEY-NEXT-ITEM。
這個觸發器KEY-NEXT-ITEM是當用戶向對應的Item輸入資料,然後點Tab
但是,用這個觸發器的程式猿會發現,如果使用者錄入資料的導航方式不是:向特定的Item輸入值之後,用鍵盤Tab(或者Enter)導航到下一個Item;而是用滑鼠直接點選,那是觸發不了KEY-NEXT-ITEM事件,從而導致程式有隱含的bug!
怎麼辦?這裡給出一個解決方案,雖然不是最好的,但是卻是可以用的:對於這個Item,禁用滑鼠導航的操作方式!
如何禁用?其原理:利用當用戶點Tab按鍵的時候,觸發器的順序是:先觸發KEY-NEXT-ITEM
實現步驟:
1 增加一個引數::PARAMETER.CURRENT_KEY_MODE。目的是為了區分使用者的錄入之後,導航的方式。
2 在WHEN-VALIDATE-ITEM觸發器直接寫下面的程式碼:
Begin
---當有變更,而且CURRENT_KEY_MODE(輸入之後的導航型別)不是KEY-NEXT-ITEM的時候,必須用tab按鍵或者enter導航!
FND_MESSAGE.DEBUG('WHEN-VALIDATE-ITEM1');
IF :MDS_CONTROL.SCHEDULE_DATE IS NOT NULL AND NVL(:PARAMETER.CURRENT_KEY_MODE,'WHEN-VALIDATE-ITEM') <> 'KEY-NEXT-ITEM' THEN
FND_MESSAGE.SET_STRING('請注意:該欄位輸入之後,請按Tab按鍵或者Enter按鍵導航!');
FND_MESSAGE.HINT;
RAISE FORM_TRIGGER_FAILURE;---禁止使用者用滑鼠點選導航!
END IF;
FND_MESSAGE.DEBUG('WHEN-VALIDATE-ITEM2');
End;
3 然後在KEY-NEXT-ITEM增加程式碼:
Declare
l_cur_record Number;
Begin
FND_MESSAGE.DEBUG('KEY-NEXT-ITEM1');
If :MDS_CONTROL.SCHEDULE_DATE Is Not Null Then
:PARAMETER.CURRENT_KEY_MODE := 'KEY-NEXT-ITEM';
Go_Block('XYG_MANUFACTURE_NEED');
l_cur_record := :SYSTEM.cursor_record;
First_Record;
Loop
If Nvl(:XYG_MANUFACTURE_NEED.CHK,'N')='Y' AND NVL(:XYG_MANUFACTURE_NEED.SCHEDULE_DATE,SYSDATE) <> :MDS_CONTROL.SCHEDULE_DATE
AND NVL(:XYG_MANUFACTURE_NEED.PROCESS_STATUS,'N') = 'Y' ---沒稽核的不可以預排
Then
:XYG_MANUFACTURE_NEED.SCHEDULE_DATE := :MDS_CONTROL.SCHEDULE_DATE;
---2011-10-19 samt add
:XYG_MANUFACTURE_NEED.SCHEDULE_USER_ID := FND_GLOBAL.USER_ID;
:XYG_MANUFACTURE_NEED.SCHEDULE_USER :=SUBSTRB( XYG_PUB_COMMON_PKG.GET_FND_FULL_NAME(FND_GLOBAL.USER_ID,SYSDATE,0),1,240) ;--FND_GLOBAL.USER_NAME;
End If;
Exit When :SYSTEM.LAST_RECORD='TRUE';
Next_Record;
End Loop;
--:MDS_CONTROL.SCHEDULE_DATE := NULL; ---清空
Go_record(l_cur_record);
:PARAMETER.CURRENT_KEY_MODE := 'WHEN-VALIDATE-ITEM';
End If;
FND_MESSAGE.DEBUG('KEY-NEXT-ITEM2');
End;
----2014.9.26更新:
有個問題:
form header block中的一個item值發生變化,自動刪除 line block中的值,這個你一般怎麼做的?一個辦法是: 先增加一個對應要核對頭Item是否發生變化的判斷Item,可以叫ITEM_COPY之類的,非資料塊的。
在Key-commit的時候,再判斷這個頭的ITEM_COPY是否<>ITEM,如果是,則自動刪除行的內容。
因為KEY-COMMIT是可以實現GO_BLOCK,清除BLOCK等動作。
另外,在使用者試圖進入到行BLOCK的時候,如果頭的ITEM_COPY是否<>ITEM,則提醒使用者:這個ITEM的值發生變化了,請儲存。
就可以實現這個效果了。 另外一個辦法: 還是增加一個ITEM_COPY(比對是否有做修改嘛,這個是必須的),然後在被修改的ITEM的WHEN-VALIDATE-ITEM觸發器裡面,判斷是否值被修改(ITEM_COPY<>ITEM),如果是,則自動在資料庫DELETE記錄,並且標識一個有自動做了DELETE記錄的標識(可以用PARAMETER做,要考慮多個頭的資料行的切換的問題。)
然後當用戶點到行Block的時候,系統判斷上面的(是否有自動做了DELETE記錄的標識),如果是=Y,則自動重新整理行的BLOCK即可。
這樣子的話,就可以完全防呆了,反正有做了修改,DB資料庫一定會刪除記錄。只不過對於使用者來說重新整理動作晚了一點而已。 其實可以給個提示 當刪掉行資料之後,直接提示:
您已經修改了這個值,系統已經在後臺將行記錄清空。請滑鼠點到行塊以確認資料。
最後的辦法: 這個辦法是我這個帖子說的辦法,但是不是很建議,因為這個辦法閹割了使用者用滑鼠操作畫面的操作模式。
相關推薦
Form技巧:如果在輸入Item之後,可以自動執行GO_BLOCK等內建函式
很多時候,我們想實現這樣子的操作效果: 當向一個特定的Item輸入資料之後,自動觸發一系列的動作,例如GO_BLOCK,然後Loop這個Block,向這個Block維護一定的值(或者檢查值)。這樣子可以很大程度方便User操作(因為是自動操作的)。 但是,眾所周知,如果在W
Julia: “.juliarc.jl” 的妙用:設定IDE啟動時,自動執行某檔案或某行命令
此文先感謝JuliaLangQQ群一個朋友的幫助! 比如在用Juno時,需要匯入一些檔案的路徑,作為工作目錄。這些檔案其實,不需要在Juno啟動時,進行人工啟動,完全可以設定為自動模式。也即順帶在啟動julia.exe後,也自動執行一下某些命令或一些檔案,這
從命令列輸入5個整數,放入一整型陣列,然後列印輸出。要求: 如果輸入資料不為整數,要捕獲輸入不匹配異常,顯示“請輸入整數”;如果輸入資料多餘5個,捕獲陣列越界異常,顯示“請輸入5個整數”。 無論是否發
從命令列輸入5個整數,放入一整型陣列,然後列印輸出。要求: 如果輸入資料不為整數,要捕獲輸入不匹配異常,顯示“請輸入整數”;如果輸入資料多餘5個,捕獲陣列越界異常,顯示“請輸入5個整數”。無論是否發生異常,都輸出“感謝使用本程式!” import java.util.*;
異常:安裝完Hadoop之後,命令列輸入hadoop卻找不到命令的解決方法
大多數原因是沒有配置環境變數解決方法 1. vim /etc/profile 2. 把這三條加到proflie檔案的最後export JAVA_HOME=XXXX(在安裝了jdk的前提下,echo $JAVA_HOME可以檢視得到)export HADOOP_HOME=XXX
給一個不多於5位的正整數,要求:一、求它是幾位數,二、逆序打印出各位數字。 【注意: 如果輸入的大於了5位數要求使用者重新輸入】
給一個不多於5位的正整數,要求:一、求它是幾位數,二、逆序打印出各位數字。【注意: 如果輸入的大於了5位數要求使用者重新輸入】def weishu(num): n=1 while True: num//=10 if(num==0
2、使用地址表實現如下功能:根據輸入的數字1-7,分別顯示相應的英文星期名,如果輸入其他字元,則重新輸入。
Data segment x dw -1 y dw 720 z dw 0 v dw 1000 Sum1 dw ? Sum2 dw ? Data
闌夕-王堅:說服馬雲之後,還要說服人類
位置 新經濟 國家 工程 吸塵 經濟 李彥宏 無線 信任 據說質問CTO不會寫代碼,最早出自2012年馬雲發在阿裏內網的一張任命王堅為集團CTO的公告貼底下,那是阿裏史上最具爭議的一次人事動作,回帖裏的「不會寫代碼」、「項目一敗塗地」、「當時我就震驚了」排成隊列,齊刷刷的送
draft.js:內容清空之後,游標的位置會錯亂
如果編輯器在沒有失焦的情況下(比如, 使用快捷鍵), 清空編輯框內容 , 替換一個空的editorState, 這時候再輸入內容,游標會出現跑到文字前面去, 以及各種游標錯亂的情況 解決問題的關鍵在於 切換內容的時候,讓編輯器失去焦點 切換完成後,再重新focus
練習十五:要求:獲取輸入的內容,並利用條件運算付的巢狀方式完成該題目
題目:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示 1 inputscort = input("學生的成績:") 2 if inputscort.isdigit(): 3 inputscort = int(inputscort) 4
Nodejs:npm run build之後,dist\index.html頁面在火狐中可以正常顯示登入頁面並登入成功,在Chrome中可以正常顯示登入頁面,登入失敗
問題描述:Nodejs:npm run build之後,dist\index.html頁面在火狐中可以正常顯示登入頁面並登入成功,在Chrome中可以正常顯示登入頁面,登入失敗 解決方法:將打包後的dist\index.html放到http伺服器上執行就可以登入了。 總結:
Nodejs:npm run build之後,distindex.html頁面在火狐中可以正常顯示登錄頁面並登錄成功,在Chrome中可以正常顯示登錄頁面,登錄失敗
服務 index set npm 解決方法 本地 流程 html csdn 問題描述:Nodejs:npm run build之後,dist\index.html頁面在火狐中可以正常顯示登錄頁面並登錄成功,在Chrome中可以正常顯示登錄頁面,登錄失敗 解決方法:將打包
Excel辦公技巧:Excel表格許可權設定,這方法厲害
excel中如何做到只能輸入,不能修改。根據小編理解應該是有條件的不能修改,萬一第1次就輸入錯了呢?下面小編就給同學們做一個“稽核”後就無法再修改的示例。 一、效果演示 1、你在表格中輸入了銷售記錄 2、負責“稽核”的同事開啟你的表格,檢查無誤後在E列選擇了“已稽核”。 3、你還可以再新增
實現功能:點選選項之後,篩選出對應的產品
實現功能:點選選項之後,篩選出對應的產品 1.注意替換後臺提供的url 2.beforeSend: function(){ $("#xunhuan2").html(""); }, 實現在傳送前,清空內容 3.html
python字典:使用者輸入keys值,對應輸出相應的values值
莫斯文電碼 A .- B … C -.-. D -… E . F …-. G --. H … I … J .— K -.- L .-… M – N -. O — P .–. Q --.- R .-. S … T - U …- V …- W .– X -…- Y
c語言:根據輸入的分數,判斷其所在的等級,使用switch語句
#include<stdio.h> int main() { int score; char grade; printf("請輸入分數:"); scanf("%d",&score); int i; i=score/10; while(sco
小技巧:cin輸入字串的總結
cin輸入字串的總結: 遇空字元(包括空格、回車、TAB)表示一個輸入的結束,連續的空字元會被忽略。 1、測試空格作為結束 程式程式碼如下: #include "iostream" using namespace std; int main(){ char str
Pycharm技巧:一鍵加引號,快速加引號,批量加引號
Pycharm 一鍵加引號,快速加引號,批量加引號,自定義加引號 最近因為工作需要寫了點指令碼,有時候在爬取的時候需要將瀏覽器中的Hearders 複製到Pycharm中使用, 但是複製過來的格式不是需要的鍵值格式,挨個手動敲鍵盤太累,畢竟咱們寫指令碼就是為了解放雙手(手動滑稽): 解決方式
Qt實用技巧:Qt併發伺服器通訊,受同一時刻最大執行緒數限制(筆者本本同一時刻600多)
需求 預言專案需要寫個qt伺服器,終端與qt伺服器完成socket通訊,因存在多個裝置,單個傳輸檔案大小比較大,所以做多執行緒併發。實現原理 客戶端:固定client的執行緒數量,單個執行緒按照設定的間隔不斷髮送資料給伺服器,並接收伺服器的執行緒指
給定一個字串:要求輸入英文語句,輸出英文語句中每個單詞在字串中出現的次數。
def geshu(src): n=0; str1 = src.split(); len1=len(str1); for s in str1: n = 0; for i in range(len1):
Python爬蟲模擬登入(三):手動輸入驗證碼,登入
拿到了引數password,還差一個驗證碼;imgurl表示驗證碼圖片地址;接收圖片並顯示;等待輸入驗證碼後提交post; imgbuf = s.get(imgurl).content #