OralceERP開發(fā)心得整理.doc_第1頁
OralceERP開發(fā)心得整理.doc_第2頁
OralceERP開發(fā)心得整理.doc_第3頁
OralceERP開發(fā)心得整理.doc_第4頁
OralceERP開發(fā)心得整理.doc_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

此文檔收集于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系網(wǎng)站刪除理性的浪漫 轉(zhuǎn)帖Oralce開發(fā)心得整理關(guān)鍵詞: Oralce開發(fā) 以下是個(gè)人整理的一些問題,希望能夠拋磚引玉,首先是Form - 實(shí)在對(duì)象如表格、Sequence、索引等建在本應(yīng)用對(duì)應(yīng)的用戶表空間中,其他對(duì)象如視圖、別名創(chuàng)建在Apps下,常見錯(cuò)誤是新手把表建在APPS下,以后又來建別名,這個(gè)時(shí)候刪除別名時(shí)會(huì)報(bào)對(duì)象不存在,而建別名的時(shí)候又報(bào)對(duì)象已存在 如果把腳本保存在文件里面,注意一個(gè)塊比如一個(gè)創(chuàng)建視圖的語句不要有空行,否則會(huì)出現(xiàn)如下情況:把語句拷貝到SQL Window能正常運(yùn)行,用執(zhí)行文件卻報(bào)錯(cuò) 如果要執(zhí)行execute_query,注意要go_block到適當(dāng)?shù)腂lock,但是go_block是個(gè)受限過程,并不一定都能成功 Master-detail關(guān)系 block both are database block each block has one item based on database displayed 在PL/SQL Develop中沒有環(huán)境變量,所以如果要查詢多組織的View,需要先執(zhí)行設(shè)置環(huán)境變量函數(shù) BEGIN fnd_client_info.set_org_context(83); END; GLOBAL變量對(duì)于所有form有效(可能是同一個(gè)應(yīng)用,這個(gè)尚未驗(yàn)證),而不僅僅是你所開發(fā)的form 變量比如Global和Parameter的初始化應(yīng)該在pre-form里面,在when-new-form-instance里面初始化不行,因?yàn)閣hen-new-form-instance是在進(jìn)入第一個(gè)導(dǎo)航塊的第一個(gè)item之后才促發(fā)的 沒有屬性指名Block的記錄數(shù),不過可以通過GET_BLOCK_PROPERTY(QUERY_HITS) 取得查詢到的記錄數(shù) hide_view并沒有真正hide一個(gè)畫布,只是放到最下層,所以如果上層的畫布沒有完全覆蓋下層畫布,下層的畫布很可能用戶還看得到;show_view則是把畫布放在最上層 lov驗(yàn)證的時(shí)候是驗(yàn)證第一個(gè)可見的列,并且會(huì)把其他的返回值返回給各個(gè)Item,而不是僅僅驗(yàn)證而已 lov的查詢一般是針對(duì)第一列,但是如果我們把%放在最前面,則可以查詢所有列 用Execute_query執(zhí)行查詢的時(shí)候,會(huì)把Copy Value From Item里面的那個(gè)Item的值自動(dòng)作為查詢條件。當(dāng)創(chuàng)建記錄的時(shí)候也會(huì)直接用該值初始化,而且不改變記錄的狀態(tài)。在更新記錄的時(shí)候不知道會(huì)不會(huì)Copy過來尚未驗(yàn)證。Get_Item_property的時(shí)候用ENFORCE_KEY屬性,但不能Set。該屬性在Master-detail設(shè)置的時(shí)候自動(dòng)創(chuàng)建,刪除的時(shí)候自動(dòng)刪除。如果不希望Copy Value From Item影響查詢結(jié)果,可以在Pre-Query里面把Item的值設(shè)為null。 app_query.reset(block_name);如果第一次調(diào)用,會(huì)把當(dāng)前的DEFAULT_WHERE,然后什么都不做,以后再來調(diào)用的時(shí)候則會(huì)把第一次設(shè)置的DEFAULT_WHERE用set_block_property(SAA_HEADERS,DEFAULT_WHERE,.)設(shè)置回來,具體請(qǐng)參考app_core庫 When-create-record的時(shí)候給Item賦值不改變記錄狀態(tài) Sequence,如果我們?cè)贗tem的Initial Value里面賦值,那么假如用戶Focus To新記錄,又回到老記錄,如此反復(fù),Sequence會(huì)不斷變大的 SQL Order BY的時(shí)候null值排在最后,這個(gè)一般不符合實(shí)際要求,可以這樣解決ORDER BY nvl(Geography_Code,chr(0)解決 Trigger順序1 pre-commit 塊1的pre-insert,on-insert,post-insert 塊2的pre-insert,on-insert,post-insert . post-forms-commit Trigger順序2 when-list-changed在前,Validation item在后,因?yàn)閂alidation item是在要離開這個(gè)item的時(shí)候才促發(fā)的 Trigger順序3 pre-form/when-create-record/pre-block/when-new-forms-instance/when-validate-record/on-insert/post-forms-此內(nèi)容被huajhua于2005-03-02,21:18:06編輯過FORM開發(fā)心得整理(續(xù)) - 當(dāng)定位到主塊的一個(gè)記錄,會(huì)促發(fā)子塊的when-clear-record事件和when-create-record事件,問題是如果主塊的是新記錄(未保存),在子塊的when-create-record里面取主塊的任何東西,居然是主塊的上一次獲得焦點(diǎn)的記錄的東西;連用取塊的當(dāng)前記錄也是上一次獲得焦點(diǎn)的記錄 Trigger順序4 post-changed在when-validate-item之前 所有的when-validate事件是當(dāng)forms自己驗(yàn)證通過之后才促發(fā)的 禁用Clear功能可以通過在Form的key-clrblk里面調(diào)用app_exception.disabled,其實(shí)只是用Bell覆蓋默認(rèn)的執(zhí)行 直接放在TAB Page上的Item,和放在堆疊畫布上的Item在設(shè)計(jì)時(shí)是無法“所見即所得”,所以建議把所有的Item根據(jù)需要放在不同的堆疊畫布上再堆到TAB Page上 FORM開發(fā)心得整理(續(xù)) - 偽列Rownum在排序之前就已經(jīng)決定,如果想得到排序后的Rownum,應(yīng)當(dāng)在嵌套一個(gè)Select語句;另外Where語句中的rownum只能用或者或者= 在SQL中用Over的時(shí)候,如果整個(gè)語句沒有Order by語句,最后的結(jié)果還是會(huì)排序的,規(guī)則是先按Over里面的Partition排序,在按Over里面的Order by排序。原因可能和分析函數(shù)的處理順序有關(guān)(8ifunctions.pdf有詳細(xì)介紹):先查詢到數(shù)據(jù)(Join/Where/Group By/Having),再運(yùn)算分析函數(shù)(先分區(qū),然后排序,再算Slide Windows,最后計(jì)算),最后是Order By。另外,一個(gè)疑問:我測試到的一個(gè)結(jié)果Group By好像無法影響Partition,可是按照8ifunctions.pdf的說法,應(yīng)該先執(zhí)行Group By的,是不是因?yàn)镚roup By只是在第一階段的處理時(shí)作用在集合函數(shù)上,之后進(jìn)入第二階段的處理就沒用了。 -此內(nèi)容被huajhua于2004-05-09,16:00:43編輯過FORM開發(fā)心得整理(續(xù)) - 實(shí)際執(zhí)行的Where條件,是我們?cè)O(shè)置DEFAULT_WHERE,再加上通過賦過值的Item。注意APP_FIND.query_range已經(jīng)重載過,我們調(diào)用的時(shí)候可以不區(qū)分query_number_range或者query_date_range;觀察其代碼,發(fā)現(xiàn)也是通過給Item賦值來影響查詢的,只不過是賦值的時(shí)候,可能是加上 # between,# =或# = to_dat的錯(cuò)誤,所以記得把字段長度加長,比如1000;總的來說,碰到From to的要小心長度。 FORM開發(fā)心得整理(續(xù)) - 當(dāng)修改子類的時(shí)候,會(huì)自動(dòng)更改很多屬性,特別是Required,一定要注意 當(dāng)對(duì)塊進(jìn)行刷新時(shí),會(huì)修改很多Item的屬性,別以為你設(shè)置過了,Oracle就會(huì)記住。我碰到的情況是Insert Allowed等被自動(dòng)改掉了!即使我的子類設(shè)置為Text_Item_Display_Only 兩個(gè)變量,如果都為Null,判斷還是不相等,所以必須用 a1 is null and a2 is null。所以在On-lock里面的if條件,我們可以把所以不可以為空的字段都寫成允許為空的形式。 一般來說,系統(tǒng)變量是很好用的。然而有時(shí)候并非如此,比如Current_Record,get_block_property(blockname,Current_Record)的結(jié)果并非總是一樣的,后者更加保險(xiǎn)!特別是剛打開Form的時(shí)候,在WHEN-NEW-RECORD-INSTANCE里面,前者是0,后者是1 FORM開發(fā)心得整理(續(xù)) - 表示一個(gè)單引號(hào),表示兩個(gè)單引號(hào)。應(yīng)該是這樣理解,一個(gè)單引號(hào)表示轉(zhuǎn)義字符,首尾兩個(gè)單引號(hào)里面的內(nèi)容表示字符串。 重啟Application cd $APPLCSF cd scripts cd PROD ./adstpall.sh apps/apps ./adstrtal.sh apps/apps Trigger順序5 post-query,只有在界面可見的記錄才會(huì)促發(fā),記錄從不可見變?yōu)榭梢姇r(shí)促發(fā),促發(fā)過的記錄不再促發(fā); 保存的時(shí)候會(huì)引發(fā)Post Item/Record/Block事件,因?yàn)橐狽avigate到Form 數(shù)據(jù)庫org_id初始值to_number(decode(substrb(userenv(CLIENT_INFO),1,1), ,null,substrb(userenv(CLIENT_INFO),1,10) 給非數(shù)據(jù)庫Item賦值, new記錄會(huì)變成insert(所以就不能F11了) query/changed記錄不變 new塊會(huì)變成query query/changed塊不變 FORM開發(fā)心得整理(續(xù)) - 對(duì)On-lock的理解,由于先入為主的緣故,開始一直很苦惱,為什么If里面只用了一個(gè)Return,F(xiàn)orm怎么知道要鎖否?后來才知道On類型的數(shù)據(jù)庫觸發(fā)器是替換型的,On-lock也不例外,所以只要On-lock不Raise什么東西出來,F(xiàn)orm就認(rèn)為是鎖成功了,至于實(shí)際的鎖,我們有SelectFor Update來完成,至于If判斷只是進(jìn)行更加嚴(yán)格的判定。 對(duì)Find的理解,開始也很納悶,為什么在Pre-query里面直接給Item賦值就可,不用自己拼語句,現(xiàn)在也逐漸發(fā)現(xiàn)里面大有文章。回想F11,這個(gè)時(shí)候的block其實(shí)是處于Enter-query狀態(tài),輸入的東西Form會(huì)自動(dòng)拼成Where語句(當(dāng)然還要加上原來的default where,如果有Copy from item,也要加上),對(duì)于每個(gè)Item上輸入的值,一般是用 = ,如果有,就解析為like,如果有#,則把后邊的表達(dá)式(比如between,甚至是子查詢)直接作為條件;而當(dāng)form內(nèi)部執(zhí)行堆棧Navigate到Pre-query時(shí),block也是處于Enter-query狀態(tài),道理和F11一樣,我們只管按業(yè)務(wù)查詢要求對(duì)Item賦值,剩下的就交給Form去處理了;需要注意的是當(dāng)處于enter-query狀態(tài)的block,是使用query length屬性來限制輸入的數(shù)據(jù)長度,而不是通常的maximum lengh,只不過query length默認(rèn)是0,即等于maximum lengh,所以會(huì)出現(xiàn)當(dāng)用app_find.query_range時(shí)長度不夠的情況。 6iReport開發(fā)整理 - 向系統(tǒng)注冊(cè)報(bào)表的時(shí)候,參數(shù)是無法根據(jù)順序自動(dòng)對(duì)應(yīng),需要我 們指定Token,即報(bào)表的參數(shù)名稱;而對(duì)于Procudure是可以根據(jù) 位置自動(dòng)對(duì)應(yīng)的,即使定義的參數(shù)名稱和Procedure參數(shù)名稱不 一樣。這個(gè)可以這樣理解,Procudure的參數(shù)是明確的,參數(shù)有 多少個(gè)、順序如何是由Procedure明確定義的;而對(duì)于報(bào)表來說 ,參數(shù)非常多,如果傳了某個(gè)參數(shù),就用該參數(shù),否則Report用 本身的默認(rèn)值,沒有順序和個(gè)數(shù)的強(qiáng)制要求;另外procedure有 且只有兩個(gè)out put(return_code說明:0/success,1/warning ,2/error)參數(shù),其他的in參數(shù)可以自動(dòng)根據(jù)順序?qū)?yīng) 定義executable,相當(dāng)于開發(fā)人員告訴系統(tǒng)管理員有這個(gè)功能可 以用,這個(gè)和定義form是一樣的;注意report名字不用rtf后綴 ,procedure的格式為“包名.procedure”;上傳到服務(wù)器的報(bào)表 后綴要小寫,不然會(huì)報(bào)找不到文件 輸出到log用fnd_file.put_line(fnd_file.log,msg),輸出到 out put用fnd_file.put_line(fnd_file.output,msg) 定義Program的時(shí)候,日期值集要用fnd_standard_date;對(duì)應(yīng)的 ,在Procedure和Report里面用Varchar2,然后自己轉(zhuǎn)換,示例 代碼如下l_end_date := trunc(to_date( p_end_date,YYYY/MM/DD HH24:MI:SS) + 1 - 1/(24 * 3600 );對(duì)于數(shù)據(jù)庫中的日期字段,尤其是Transaction Date,不要用 trunc,這樣會(huì)導(dǎo)致無法使用該日期的索引,一般是對(duì)參數(shù)進(jìn)行 必要的處理,如上述的加1天減1秒 定義Table類型的值集的時(shí)候,有三個(gè)字段其中value和Id都為值 ,Id的優(yōu)先級(jí)高于Value,但一般我們只定義Value 關(guān)聯(lián)子集定義的語法為where field_name = $FLEX$. value_set_name;當(dāng)然要求兩個(gè)子集都在參數(shù)里面 注意父Field不要緊貼Child Group的循環(huán)框,否則該父Field會(huì) 顯示在Child Group的循環(huán)框內(nèi)部。我在字符模式下做Summary域 ,它緊靠Child Group的最下面邊框,最后該Summary域就顯示在 Child Group里面,覆蓋Child Group的內(nèi)容。如果出現(xiàn)錯(cuò)位情況 ,可以加一個(gè)框套住Father域 1 inch = 72 points;設(shè)計(jì)字符模式的報(bào)表,假如設(shè)置了width 為x,Character Mode Report Width為y,那么,x * 72 / y最 好為整數(shù),這只是我個(gè)人的感覺。比如A4橫向,x為11,y為132 ;Height的設(shè)置也需要符合這個(gè)要求。 為方便字符模式報(bào)表元素真正對(duì)齊到網(wǎng)格snap to grid,可以在 rulers中把grid spacing、number of snap points per grid spacing都設(shè)為1,這個(gè)很重要,可以省去我們無謂的對(duì)齊工作量 。不管怎么設(shè),必須在開始設(shè)計(jì)layout之前設(shè)置;如果在設(shè)計(jì) layout之后更改,會(huì)造成已經(jīng)做好的Field沒有對(duì)齊到網(wǎng)格。 報(bào)表里面好像沒有環(huán)境變量,需要建一個(gè)用戶參數(shù) P_CONC_REQUEST_ID/Number/20,在Before Report觸發(fā)器里加 SRW.USER_EXIT(FND SRWINIT);,在After Report觸發(fā)器里加 SRW.USER_EXIT(FND SRWEXIT); Application開發(fā)整理 - Profile:一個(gè)Profile其實(shí)就是一個(gè)參數(shù),在開發(fā)員職責(zé)里面定義,注意這個(gè)時(shí)候選擇的Application僅僅是方便管理,對(duì)以后的使用沒有限制;一個(gè)Profile的具體值需要在系統(tǒng)管理員職責(zé)里面定義,可以分別在四個(gè)層次上定義,即Site/Application/Responsibility/User,具體來說可以給任意一個(gè)Site或任意一個(gè)Application或任意一個(gè)Resp或任意一個(gè)User定義這個(gè)Profile的值,可以四個(gè)層次都定義,也可以定義某幾個(gè)層次;對(duì)于一個(gè)Session來說,一個(gè)Profile到底取什么值是和上面的定義有關(guān)系的,即后面的覆蓋前面的,如果它定義了的話。我們可以通過fnd_profile.value(Profile_Name)來取得當(dāng)前會(huì)話的Profile值,對(duì)于庫存組織mfg_organization_id,一些顧問可能沒有去設(shè)置它,我們需要通過其他方式取得。 在用fnd_request.submit_request的時(shí)候,第五個(gè)參數(shù)用false,不要被參數(shù)名稱誤導(dǎo);這個(gè)函數(shù)有105個(gè)參數(shù),前面五個(gè)定義請(qǐng)求本身,后面100個(gè)是傳遞給請(qǐng)求的具體參數(shù),都是Char類型,我們需要轉(zhuǎn)換,默認(rèn)值是chr(0),代表這個(gè)參數(shù)不用傳遞給調(diào)用的請(qǐng)求;在Package里面調(diào)用只需要傳遞需要的參數(shù)個(gè)數(shù),因?yàn)樗心J(rèn)值指示結(jié)束;在form里面則不行,要寫滿105個(gè),而且我們參數(shù)結(jié)束之后要用一個(gè)chr(0)來表示結(jié)束 用submit_request的時(shí)候,其實(shí)最終還是向fnd_concurrent_request(另外我們定義的request是保存在fnd_concurrent_program里面的)里面插入一行數(shù)據(jù),如果不提交的話,該請(qǐng)求是不會(huì)真正開始運(yùn)行的,所以我們一般在submit_request之后來個(gè)Commit,否則的話如果使用wait_for_request的話會(huì)無限期等待下去;在Form里面需要注意的是,必須使塊基于數(shù)據(jù)庫,不然沒得Commit。假如在一個(gè)請(qǐng)求內(nèi)部使用了submit_request,特別注意的是需要檢查Concurrent Manager的Process數(shù)至少為2,否則上述兩個(gè)請(qǐng)求會(huì)處于死鎖狀態(tài) 數(shù)據(jù)庫表中的Org_Id或者Organization_Id對(duì)初學(xué)者來說往往搞不清楚是哪個(gè)層次的組織,一般來說前者是OU,后者是庫存組織,然而這也不一定,有一個(gè)簡易的方法是,只要我們碰到Item,比如在訂單中,那么一般是指庫存組織 _all,基表,保存多組織數(shù)據(jù),里面有一個(gè)Org_Id字段,一般不直接出現(xiàn)在我們的DML中 去掉_all的視圖,根據(jù)用戶環(huán)境過濾掉組織,相當(dāng)于普通的基表,我們直接使用它,就當(dāng)它是基表 _v,視圖,給Form用 _kfv,啟用關(guān)鍵性彈性域的時(shí)候動(dòng)態(tài)生成的視圖,包含Concact過的字段組合 _dfv,啟用描述性彈性域的時(shí)候動(dòng)態(tài)生成的視圖,我們?nèi)椥杂蜃佣蔚拿枋龅臅r(shí)候,需要用用戶出口函數(shù)。 _tl,基表,有l(wèi)anguage字段,us肯定有,其他的看安裝 _vl,視圖,根據(jù)環(huán)境設(shè)置過濾語種,所以做報(bào)表用_vl _s,序列號(hào) _API,Package,保證向后兼容 _PKG,Package,Program _SV,Package,供Form調(diào)用 rowid,偽列,指明記錄物理位置,文件號(hào)+塊號(hào)等,具體的我也不清楚 rownum,偽列,指明符合條件的記錄的記錄號(hào),需要注意的是這個(gè)記錄號(hào)在Order By之前就已經(jīng)決定,如果想用Order By之后的記錄號(hào),只能再套一層Select level,偽列,指明樹狀結(jié)構(gòu)記錄的層次,以下示例代碼可作為Form Tree的數(shù)據(jù)源 select 1 state, level, CUSTOMER_NAME,null,CUSTOMER_ID from da_customers a start with PARENT_CUSTOMER_ID = -1 connect by prior CUSTOMER_ID = PARENT_CUSTOMER_ID who,五個(gè)記錄創(chuàng)建及修改歷史的字段,可以通過OA的Help/Record History菜單查看 文件系統(tǒng)File system的層次一般是$APPL_TOP/$MODULE_TOP such as $GL_TOP,$AU_TOP/Version/forms,reports,sql,./EN,ZHS,.五個(gè)層次,在URL中有一個(gè)語言參數(shù),它的值是根據(jù)用戶當(dāng)前的NLS_LANG設(shè)置來的;假如指明是中文,那么Form Server會(huì)到ZHS下取文件,在任何其他語言對(duì)應(yīng)的目錄下找不到文件的話,系統(tǒng)都會(huì)到EN目錄下取,假如還取不到,這個(gè)時(shí)候才報(bào)錯(cuò)。AU指Application Utility,我們編寫的Form源文件一般放在$AU_TOP/Version/forms/LANG下,而PLL源文件一般放在$AU_TOP/Version/resource下,但編譯的時(shí)候前者要放到對(duì)應(yīng)應(yīng)用的對(duì)應(yīng)語言的目錄下,而后者還是在源目錄;對(duì)于Report,則直接放在對(duì)應(yīng)應(yīng)用的對(duì)應(yīng)語言下,不需要編譯 一個(gè)用戶對(duì)應(yīng)一個(gè)或多個(gè)responsibility,一個(gè)responsibility對(duì)應(yīng)一個(gè)或多個(gè)menu,一個(gè)底層menu對(duì)應(yīng)一個(gè)function,一個(gè)function對(duì)應(yīng)一個(gè)form或者一個(gè)報(bào)表或者一個(gè)程序;一個(gè)responsibility對(duì)應(yīng)一個(gè)請(qǐng)求組,一個(gè)請(qǐng)求組對(duì)應(yīng)一個(gè)或多個(gè)報(bào)表和程序,這個(gè)應(yīng)該放過來說,在定義報(bào)表的時(shí)候可以選擇哪個(gè)請(qǐng)求組;一個(gè)responsibility對(duì)應(yīng)一個(gè)Application,這個(gè)不要和該responsibility擁有的菜單混淆,菜單沒有限制 Workflow開發(fā)整理 - 根據(jù)Server安裝指南一般可以完成Workflow Server的配置。按我的經(jīng)驗(yàn),有幾個(gè)地方需要注意 1、可以直接使用8i的http,不用安裝IAS,根據(jù)Server安裝指南配置httpd.conf的別名即可;http服務(wù)起不來的可能情況2、 httpd.conf語法錯(cuò)誤,這個(gè)沒什么好說的 之前的服務(wù)沒有正常結(jié)束,一般重新啟動(dòng)計(jì)算機(jī)即可;或者殺掉java進(jìn)程,如果有的話 新安裝了Oracle其它產(chǎn)品,導(dǎo)致路徑引用錯(cuò)誤;我的解決辦法是把新安裝軟件在環(huán)境變量Path中添加的路徑移到最后 如果要看httpd為何無法啟動(dòng),查看Log是沒用的;應(yīng)該先運(yùn)行CMD,然后cd到需要的目錄,輸入apache.exe,這個(gè)時(shí)候就會(huì)有錯(cuò)誤出現(xiàn) 2、Notification默認(rèn)的配置是html email,這個(gè)時(shí)候易遇到Notification就報(bào)錯(cuò),因?yàn)槲覀冏约阂话銢]有配置Mail服務(wù)器,所以需要在Global Workflow Preferences里面把Send me electronic mail notifications設(shè)置為Do not send me mail 3、開始我沒有配好Business Event System,在執(zhí)行Aprove等動(dòng)作的時(shí)候老是No Data Found;后來我根據(jù)Error Stack找到wf_xml包,把里面的RemoveNotification的Raise語句注釋掉就可以了。嘿嘿,反正我是自己研究工作流,無所謂了 4、我的系統(tǒng)是XP Home SP1,沒有JVM,無法View Diagram;裝了JDK,不太好用,卸掉裝msjavx86.exe一切正常 剛接觸Workflow Builder會(huì)碰到的幾個(gè)疑問 如何連接各個(gè)Node:用右鍵而不是左鍵連 為何修改不了別人的文件:在Help菜單里面設(shè)置合適的Access Level 為何圖標(biāo)不起作用:在View菜單里面選擇Develop Mode 如何使用Standard的Item:打開Standard或Demo文件,把Stantard這個(gè)Item Type抓過去 Notification根據(jù)什么發(fā):必須在Process里面打開Notification的屬性,Node標(biāo)簽里面有一個(gè)Performer,根據(jù)需要設(shè)置成我們預(yù)定義的某個(gè)Role類型的Attribute即可 Workflow Builder的PL/SQL函數(shù)有什么要求:拷個(gè)Demo的函數(shù),照著寫就可以了,怎么判斷運(yùn)行模式,怎么返回里面都有 其他問題其實(shí)Workflow Builder在保存或者我們選擇Verify的時(shí)候都會(huì)提示,只要認(rèn)真看都能解決 對(duì)各個(gè)Item的通俗理解 1、Item Type是個(gè)抽象的概念,為方便理解,可以看作是一個(gè)工作流的容器和標(biāo)志 2、Attribute是全局變量,供整個(gè)Item Type里面的元素使用,可以作為Message的附加屬性,Send給用戶看或者存儲(chǔ)用戶的Response內(nèi)容比如Note和Forward To;Attribute另一個(gè)常用的地方是作為Notification的Performer。當(dāng)然我們的PL/SQL代碼是離不開Attribute,幾乎任何PL/SQL函數(shù)都需要通過取得Attribute變量-判斷Attribute變量-設(shè)置Attribute變量,決定程序如何走,返回什么值 3、Message,就是一個(gè)消息,內(nèi)容在Body里面定義,用&引用Message自己的Attribute;對(duì)我們程序有用的的是Message的Attribute,一般和上面的全局變量Attribute對(duì)應(yīng),Send類型的Attribute將取當(dāng)時(shí)的全局變量Attribute的值發(fā)給用戶看,Response類型Attribute將把用戶輸入的內(nèi)容返回給全局變量Attribute供我們的程序作下一步判斷使用 4、Lookup Types,基礎(chǔ)字典列表,就像我們的部門字典表,銷售方式字典表一樣,不過它是靜態(tài)的;根據(jù)需要設(shè)置,一般用來標(biāo)志工作流各類Item的返回值,和我們的PL/SQL函數(shù)返回值一一對(duì)應(yīng) 5、Function,就是Function,一個(gè)處理,一般對(duì)應(yīng)一個(gè)PL/SQL函數(shù)并定義返回值為某個(gè)Lookup Type 6、Notification,發(fā)送一個(gè)消息,消息內(nèi)容為定義的Message內(nèi)容,消息的接收人是定義的Performer 7、Process,真正的流程,由Notification、Function、子Process組成,開始于一個(gè)Start Function,結(jié)束于一個(gè)或多個(gè)End Function,中間是Notification和Function組成的業(yè)務(wù)流程,在這個(gè)級(jí)別上可以把Notification、Function、子Process看成是一樣的即activity,他們都有返回值,不同的結(jié)果走不同的流程,由此組成一個(gè)符合業(yè)務(wù)需要的圖表 由Engine管理、不需要我們操心的東西 1、消息發(fā)送;我們只管定義,由于可以用HTML寫Message的Body,可以定義得很漂亮 2、流程選擇;我們只管按不同的返回結(jié)果畫圖,Engine會(huì)根據(jù)我們函數(shù)的返回值調(diào)用下一個(gè)activity 3、用戶選擇;我們可以修改wf_roles、wf_users、wf_user_roles這三個(gè)視圖,使之包含我們業(yè)務(wù)系統(tǒng)的用戶即可 開始以為Workflow Builder會(huì)根據(jù)我們的Hierachy定義自動(dòng)執(zhí)行,其實(shí)關(guān)于Hierachy的定義、執(zhí)行的規(guī)則等等都需要我們自己編寫代碼實(shí)現(xiàn),所以Workflow Builder本身其實(shí)還是很簡單,主要還是靠我們的PL/SQL和分析設(shè)計(jì)能力 Discover開發(fā)整理 - Discover比較簡單,會(huì)SQL和用過Excel的人都會(huì)搞;有麻煩的是安裝和配置,我用的是4.1.37 安裝的時(shí)候需要在Default Home,其他Home不行;如果實(shí)在不想裝在Default Home,可以修改注冊(cè)表的兩個(gè)地方 如果先裝6i,后裝Discover,需要備份Bin目錄下的UIW60.DLL,裝完之后把UIW60.DLL拷貝回來;否則Form Builder起不來,需要重新安裝或從別人那里拷貝UIW60.DLL 登錄standard EUL用的是數(shù)據(jù)庫用戶;登錄application EUL用的是Oracle OA用戶,登錄只后要選擇職責(zé),這樣也就選擇了OU,這個(gè)很關(guān)鍵,大部分業(yè)務(wù)視圖都是需要過濾OU的,如果不以application 身分登錄,意味著OA的VIEW我們要重寫,改成基于基表,然后通過其他辦法過濾OU,這個(gè)工作量太大 要以Application用戶登錄,需要在Tools-Option-Connection設(shè)置為Connect to application EUL或者Connect to both standard and application EUL,前者默認(rèn)就以application身份登錄,后者在登錄的時(shí)候會(huì)出現(xiàn)一個(gè)Check Box讓我們選擇;Gareway User Id和Foundation Name不用填,系統(tǒng)默認(rèn)用applsyspub和apps 4.1.37要以application身份登錄,需要安裝Patch,其實(shí)就一個(gè)登錄驗(yàn)證文件fndpu115.dll(URL= /metalink/plsql/ml2_documents.showNOT?p_id=251932.1&p_showHeader=1&p_showHelp=1),拷貝到DISCVR4目錄下;否則報(bào)的錯(cuò)誤讓你無法理解 在Admin里面,如果用登錄的用戶自己創(chuàng)建EUL,可能會(huì)報(bào)“不能給自己Grant或Revoke權(quán)限”,可以換成system用戶登錄,然后建給需要的用戶即可 Business Area可以在Admin里面導(dǎo)入導(dǎo)出,這個(gè)對(duì)發(fā)布很重要;Workbook可以通過命令行導(dǎo)出,但我用下來速度很慢,只好一個(gè)個(gè)手工發(fā)布了 在Admin里面建好Business Area,一定記得在Tools-Security里面把Business Area授權(quán)給相應(yīng)的職責(zé),不然用Desktop登錄之后什么都看不到,當(dāng)然導(dǎo)Workbook也會(huì)報(bào)錯(cuò) Workbook需要授權(quán)其他用戶才可以看到;命令在File菜單里面。但是只有擁有Share權(quán)限的用戶/職責(zé)才可以,這個(gè)需要在Admin里面設(shè)置 創(chuàng)建基于Application的EUL的時(shí)候,我習(xí)慣選擇Public選項(xiàng) Admin中的Folder可以Refresh,這樣可以反映對(duì)應(yīng)VIEW的修改,菜單在File下 注冊(cè)Function的時(shí)候,F(xiàn)unction Name需要大寫,Packge Name也需要大寫,不然它會(huì)報(bào)Invalid Function 有操作上的問題可以參考:Oracle Discoverer Online Manuals,包括Discoverer Installation & Upgrade Guide,Discoverer Administration Guide,Discoverer Plus User Guide,后者有中文版,兩個(gè)小時(shí)可以看完 -此內(nèi)容被huajhua于2004-08-05,18:45:37編輯過最近收到一些問我一些Form界面設(shè)置問題的郵件,以下是我剛學(xué)FORM時(shí)的一些整理,比較簡單,希望有用 - Title、Prompt等單詞第一個(gè)字母大寫,其他小寫,不用下劃線,而字段名是有下劃線的 Scroll Bar的寬度一般是 :.2 FORM First Navigation Data Block :設(shè)成我們做的block 最大 :7.8/5.0 左邊距 :.1,對(duì)于Tabular的form其實(shí)就是Current Record Indicator的X Positon 右邊距 :.144 Data Block Subclass Information :Block Previous Navigation Data Block :自己 Next Navigation Data Block :自己 Scroll Bar Cavas :Tabular格式的設(shè)置成內(nèi)容畫布 Scroll Bar Orientation :Tabular格式的設(shè)置成Vertical Data Block Items Subclass Information :只要用戶看的到的都要設(shè)置,并且設(shè)置完之后不要去修改字體等屬性, ROW_ID設(shè)成ROW_ID,F(xiàn)LAG設(shè)成CHECKBOX,Descriptive FlexField設(shè)成 TEXT_ITEM_DESC_FLEX,其他的基本都是設(shè)成TEXT_ITEM Justification :數(shù)字設(shè)成End,其他的設(shè)成Start,不要用Left和Right Maximum Length :對(duì)于ROW_ID默認(rèn)好像是4,一定要改大一點(diǎn),比如2000,否則Insert的 時(shí)候會(huì)抱錯(cuò) Case Restriction :如果是Code字段,一般要求Upper Initial Value :Sequence字段用:sequence.SEQUENCENAME.NEXTVAL,日期字段如果需要 設(shè)置,可以用$DBDATE$,Check Box根據(jù)需要設(shè)置 Required :根據(jù)需要設(shè)置 Copy Value from Item :一般由Master-Detail自動(dòng)設(shè)置,當(dāng)Detail區(qū)查詢或者創(chuàng)建新記錄時(shí)自動(dòng) 設(shè)置,而且不影響記錄的Status Synchronize with Item :可以用來設(shè)置mirror item,這樣可以在form的多個(gè)地方顯示 Database Item :Current record indicator、DF、其他自己創(chuàng)建的Item一定要設(shè)成No, 并且把Column Name清空 Primary Key :主鍵需要設(shè)成Yes Update Allowed :Code字段一般設(shè)置成No List of Values :日期字段、DF設(shè)成ENABLE_LIST_LAMP,其他的用自己創(chuàng)建的相應(yīng)LOV,該 LOV的屬性設(shè)置成LOV Validate from List :日期字段、DF一般設(shè)成No,其他用到LOV的設(shè)成Yes Canvas :Current record indicator、df、flag設(shè)置到內(nèi)容畫布,其他的設(shè)置到堆 疊畫布 X Positon :Current Record Indicator設(shè)成.1 Width Code :.9 Meaning :1.4 Description :1.5 Date :1.2 Time :.8 Date-time :1.7 Percentage :.7 DF :.2 Current Record Indicator :.1 Drill Down Indicator :.2 Prompt :DF字段可以用的中間可以用空格 Prompt Alignment :Start Prompt Alignment Offset :.055 Canvas Subclass Information :內(nèi)容畫布用CANVAS,堆疊畫布用CANVAS_STACKED Viewport X Position :堆疊畫布設(shè)成.2,內(nèi)容畫布設(shè)成0 Viewport Y Position :堆疊畫布設(shè)成.1,內(nèi)容畫布設(shè)成0 Viewpot Width :堆疊畫布的不要太寬,注意協(xié)調(diào)性,并且剛好容下滾動(dòng)條,如果有 Viewpot Height :堆疊畫布的注意剛好容下滾動(dòng)條,如果有;Physical的Height設(shè)成和這個(gè) 一樣 Window :設(shè)成我們的主窗口;注意,只有把兩個(gè)畫布的Window屬性指定到同一個(gè), 堆疊畫布才會(huì)自動(dòng)堆在內(nèi)容畫布上 Show Horizontal Scroll Bar :堆疊畫布設(shè)成Yes Frame Subclass Informaiton :根據(jù)需要設(shè)置 LOV Subclass Informaiton :LOV Column Mapping Properties Return Item :一般Code需要設(shè)置;手電筒的不用設(shè)置 Display Width Code :.8 Meaning :1.5 Column :注意Code在前面,Meaning在后面 Width :3 Oracle 附件的使用 - Attachements Oracle的附件給我們提供了一個(gè)方便的功能,只要定義定義,不需要任何代碼就可以實(shí)現(xiàn)附件功能,比彈性域還方便(當(dāng)然功能沒有彈性域強(qiáng)) 定義Attachements比較容易,遵循115devg中的Attachements章節(jié)即可完成。 fnd_attached_*系列的表保存我們?cè)陂_發(fā)員職責(zé)里面的附件定義 fnd_documents_*系列的表保存最終用戶的具體的附件業(yè)務(wù)數(shù)據(jù),file類型的附件存儲(chǔ)在fnd_lobs表中 fnd_documents_tl.media_id可以關(guān)聯(lián)到fnd_lobs.file_id、fnd_documents_long_text.media_id、fnd_documents_shot_text.media_id取得相應(yīng)的附件內(nèi)容 定義過程如下 1、定義Entity實(shí)體,其實(shí)就是表,必須的 Table 輸入表名即可 Entity ID 輸入表名即可,如果在同一個(gè)標(biāo)定義多個(gè)實(shí)體,可以用“表名_N”的形式,隨便 Entity Name 輸入一個(gè)比較友好的名字,這個(gè)名字要顯示給用戶看 Prompt 沒什么用 Application 就是我們的應(yīng)用;如果是定義在Oracle標(biāo)準(zhǔn)表上,最好也用我們自己的應(yīng)用名,否則升級(jí)的時(shí)候會(huì)丟失 2、定義Document Categories,其實(shí)就是定義一個(gè)類別或者說一個(gè)標(biāo)志,可以直接用系統(tǒng)的Miscellaneous這個(gè)類別,可選的 Category 輸入任意一個(gè)名字即可 Default Datatype 隨便選一個(gè),最好選會(huì)應(yīng)用這個(gè)Category最常用的類型,比如文件 Effective Date 默認(rèn),不填即可 Assinments按鈕 這里不用管 3、定義Attachement Function,必須的 Type 一個(gè)Form可能關(guān)聯(lián)幾個(gè)Function(進(jìn)一步關(guān)聯(lián)幾個(gè)菜單),如果附件在不同的Function下可能不同,比如Category不同(從而可以過濾附件,這就是所謂的安全性),這里選Function;如果附件不需要區(qū)分Function,這里就選Form Name Form或者Function的名字 User Name 自動(dòng)出來 Session Context 我沒用它 Enabled 打勾 4、點(diǎn)擊Category按鈕,為上面定義的Attachement Function選擇剛才定義的Category,或者選擇Miscellaneous,可以選擇任意個(gè),必須的 *Category的工作原理:Category本身僅僅是一個(gè)標(biāo)志,就像我們部門字典表一樣;一個(gè)Form(或者其Function)會(huì)關(guān)聯(lián)到一個(gè)或多個(gè)Category(就是在這里定義);最終用戶在把一個(gè)附件添加到這個(gè)Form上的一條記錄上時(shí),必定會(huì)指定屬于某個(gè)Category,可選范圍就是這里定義的;到這里Category還沒有顯示出什么作用,也就是如果僅僅一個(gè)地方會(huì)用到這個(gè)附件,Category就沒什么用。如果同一個(gè)實(shí)體的附件會(huì)在其他Form上出現(xiàn),就像115devg文檔所說的,一個(gè)Product的附件可以在Order Line上被顯示出來,假如用戶上傳了一個(gè)圖片作為附件,并分配Category為xxxxx,如果Order Form的Category沒有包含xxxxx,在Order Line上將看不到那個(gè)附件。按我的理解,就這樣。 5、定義Attachement Function Block,定義我們Form上包含附件的數(shù)據(jù)塊,每個(gè)塊都可以定義,必須的 Block Name 輸入塊名,不要告訴我你不知道! Method 一般Base Entity選Allow Change,如果是引用的選Query Only Secured By 這個(gè)可以進(jìn)一步限制安全性,可以不定;這里我不多說,如果不清楚再找我 6、定義Block-Entity關(guān)系,必須的 Entity 選擇上面定義的實(shí)體,一行一個(gè) Display Method 基礎(chǔ)實(shí)體選擇Main Window,引用實(shí)體選擇Related Window Include in Indicator 基礎(chǔ)實(shí)體打勾,引用實(shí)體不選;這個(gè)選項(xiàng)其實(shí)就是用來初始化工具欄上的圖標(biāo),

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論