基本框架_應(yīng)用指南_第1頁
基本框架_應(yīng)用指南_第2頁
基本框架_應(yīng)用指南_第3頁
基本框架_應(yīng)用指南_第4頁
基本框架_應(yīng)用指南_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、DO070 HAND_PLSQL_框架_應(yīng)用指南作者:創(chuàng)建日期:最近更新:控制號(hào):版本:Hand11-Jul-2111-Jul-211審批:全富漢得拷貝號(hào) 文檔控制變更審閱分發(fā)拷貝號(hào)地點(diǎn)1111職位日期作者版本變更參考07-Oct-051No previous09-Mar-072從Form&PLSQL 中分離PLSQL 出來目錄文檔控制ii概述4業(yè)務(wù)表模板4并發(fā)程序模板11代碼調(diào)試13概述本文檔詳細(xì)描述了在 客戶化項(xiàng)目開發(fā)中SQL/PLSQL 的一些規(guī)范和開發(fā)指南,用于指導(dǎo)開發(fā)員遵守開發(fā)標(biāo)準(zhǔn)、使用開發(fā)模板、快速進(jìn)入開發(fā)角色。本文內(nèi)容包括:1、 對(duì)業(yè)務(wù)表API 模板2、 并發(fā)程序的模板3、 如何

2、調(diào)試代碼使用框架和不使用框架相比,在剛開始使用的時(shí)候,會(huì)覺得更麻煩。但是就不麻煩了。了也問題是:為什么要使用框架? 要深刻的理解這個(gè)問題,先看兩個(gè)故事。這個(gè)故事在當(dāng)前目錄的Story 目錄下??赐赀@兩個(gè)故事,可以理解了,如果Oracle 的代碼沒有Debug 功能。如何去分析解決問題? 那將是不可設(shè)想的。公司的客戶越來越多,客戶化開發(fā)也越來越多。隨之而來的是可能產(chǎn)生的問題也越來越多。的 Hotline 所接到的問題中,有很大一部分是客戶化開發(fā)的問題。而解決這些問題的人,一般都不是當(dāng)初開發(fā)的人。而是在hotline 工作的人。可想而知,的代碼沒有Debug 功能,沒有Debug 的。以后出了問題

3、,讓他們?cè)趺床椋炕谝陨显?,建議的代碼都要使用的開發(fā)框架,因?yàn)檫@個(gè)框架是一個(gè)具備Debug 功能的框架。和Oracle 的Debug 框架是一致的。寫出來的代碼風(fēng)格跟Oracle 是一致的。三個(gè) Package 介紹1、 HAND_DEBUG.pck2、 HAND_API.pck3、 HAND_CONC_UTL.pck這三個(gè)package 都不大,熟讀以后有助于使用其中的Api.業(yè)務(wù)表模板對(duì)于業(yè)務(wù)表,必須提供公開函數(shù)來所示:,外部程序直接操作表,一般規(guī)則如下圖Database Table1、Table API 實(shí)現(xiàn)表基本操作:Insert、Lock、Update、Delete。2、Priva

4、te API 調(diào)用Table API 來操作表,該層實(shí)現(xiàn)驗(yàn)證表的字段,同時(shí)通過調(diào)用其它API 提供的Public API 來實(shí)現(xiàn)表的業(yè)務(wù)邏輯。3、Public API 是公開的API,供外部程序調(diào)用,該層只做對(duì)傳入?yún)?shù)作簡(jiǎn)單驗(yàn)證;然后調(diào)用 Private API。4、對(duì)于所有的驗(yàn)證,提供對(duì)立的Valiate API5、對(duì)于簡(jiǎn)單的業(yè)務(wù)表,如基礎(chǔ)數(shù)據(jù),該數(shù)據(jù)只在Form 中API。,可以只建立Table6、各程序包名規(guī)則:Table API:表名 + _PKG (table api)Private API:表名 + _PVT (private api)Public API:表名 + _PUB(pu

5、blic api)Valiate API:表名+ _UTL (validate api)對(duì)于多個(gè)API 間相用圖例:Database Table1Database Table2Table API 2Table API 1Private API 2Private API 1Public API 2Public API 1Table APIValidate APIPrivate APIPublic API以下介紹各API 的模板和使用方法Table API該程序包一般包括以下幾個(gè)過程:insert_row、lock_row、update_row、delete_row包頭定義:包體如下:PROCED

6、URE insert_row(x_row_id in out varchar2, x_primary_key in out number, p_field1 in )ISCURSOR CIECT ROWID FROM WHERE = p_primary_key; BEGININSERTO (field1, field2, ) VALUES (p_field1, p_field2, );OPEN c;FETCH cO x_row_id; IF (c%NOTFOUND) THEN CLOSE c;RAISE NO_DATA_FOUND; END IF;CLOSE c;END insert_row;

7、PROCEDURE lock_row(p_primary_key in number,PROCEDURE insert_row(x_row_id in out varchar2, x_primary_key in out number, p_field1 in ); PROCEDURE lock_row(p_primary_key in number, p_field1 in ); PROCEDURE update_row(p_primary_key in number, p_field1 in ); PROCEDURE delete_row(p_primary_key in number);

8、對(duì)于表中含有object_ver_number,其過程 lock_row 可簡(jiǎn)化為PROCEDURE lock_row(p_primary_key in number, p_object_ver_number in number );p_field1 in )ISCURSOR c1IECT field1,field2, from where = p_primary_key FOR UPDATE OF NOWAIT;tlinfo c1%ROWTYPE; BEGINOPEN c1;FETCH c1O tlinfo;IF (c1%NOTFOUND) THEN CLOSE c1;fnd_message

9、.set_name(FND, FORM_RECORD_DELETED); app_exception.raise_exception;END IF; CLOSE c1;IF (tlinfo.field1 = p_field1 or (tlinfo.field1 is null and p_field1 is null) AND (tlinfo.field2 = p_field2 or (tlinfo.field2 is null and p_field2 is null)THENNULL; ELSEfnd_message.set_name(FND, FORM_RECORD_CHANGED);

10、app_exception.raise_exception;END IF;END lock_row;PROCEDURE update_row(p_primary_key in number, p_field1 in )IS BEGINUPDATE SETfield1= p_field1,field1= p_field1,WHERE = p_primary_key;IF (SQL%NOTFOUND) THEN RAISE NO_DATA_FOUND; END IF;END update_row;PROCEDURE delete_row(p_primary_key in number)IS BEG

11、INDELETE FROM WHERE = p_primary_key;IF (SQL%NOTFOUND) THEN RAISE NO_DATA_FOUND; END IF;END delete_row;對(duì)于表中含有object_ver_number,其過程 lock_row 可簡(jiǎn)化為PROCEDURE lock_row(Private API / Public API 的過程模板為風(fēng)格、簡(jiǎn)化程序、提供的例外處理和調(diào)試功能,該程序包中的API 使用以下模板1、 為調(diào)試輸出信息2、 調(diào)用其他API。PROCEDURE create_temp( p_api_verIN NUMBER,p_init_

12、msg_listIN VARCHAR2 DEFAULT fnd_api.g_false, mitIN VARCHAR2 DEFAULT fnd_api.g_false,x_return_susOUT NOCOPY VARCHAR2,x_msg_countOUT NOCOPY NUMBER,x_msg_dataOUT NOCOPY VARCHAR2p_field1IN NUMB API 開始:x_temp_idOUT NOCO 1、 log:api enteringISl_api_nameCONSTANT VARCHAR 2、 創(chuàng)建保存點(diǎn)l_api_verCONSTANT NUMBER:=3、

13、檢查 api 版本4、 初始化消息列表BEGIN- start activity to create sa- and initialize message lis , includeo enter apix_return_sp_pkg_name p_api_name= l_p_api_type= g_api_type, p_init_msg_list =l_api_verp_api_ver= p_api_ver);- check if activity started sucsfullyIF (x_return_sus = fnd_api.g_ret_sts_unexp_error) THEN

14、 RAISE fnd_api.g_exc_unexpected_error;ELSIF (x_return_sus = fnd_api.g_ret_sts_error) TH 用戶代碼區(qū):p_primary_key in number, p_object_ver_number in number )CURSOR c1IECT object_ver_number from where = p_primary_key FOR UPDATE OF NOWAIT;tlinfo c1%ROWTYPE; BEGINOPEN c1;FETCH c1O tlinfo;IF (c1%NOTFOUND) THEN

15、 CLOSE c1;fnd_message.set_name(FND, FORM_RECORD_DELETED); app_exception.raise_exception;END IF; CLOSE c1;IF (tlinfo.object_ver_number = p_object_ver_number) THENNULL; ELSEfnd_message.set_name(FND, FORM_RECORD_CHANGED); app_exception.raise_exception;END IF;END lock_row;RAISE fnd_api.g_exc_error;END I

16、F;- API body- logging parameters/*IF l debug = Y THEN XH_debug.log(p_: END IF;*/| p_,2);- Prev crea- Insert the row/* BEGIN- set primary key fromler.sequenceselect temp_s.nextvalHand plsql template pkg.insp temp field1 p field2p_object_ver_number p_creation_datep created byp last udpate date p last

17、updated by=,);p_last_udpate_loginEXCEPTIONWHEN NO DATA FOUND THENx return sus := fnd api.g ret sts unexp error; HAND API.set message( p app name = CUX,p_msg_name = XH_TABLE_HANDLER_ERROR RAISE fnd api.g exc unexpected error;);END;*/-t creaogic (call othublic api)- API end body- end activity, include

18、 debug message hto exit apiHAND_API.end_activity( p_pkg_namep_api_namemit x_msg_count x_msg_dataEXCEPTION= g_pkg_name,= l_api_name,=mit,= x_msg_count,=x_msg_data );WHEN fnd_api.g_exc_error THENx_return_sus := HAND_API.handle_exceptions(p_pkg_name p_api_name p_api_type p_exc_name x_msg_count x_msg_da

19、taWHEN fnd_api.g_exc_unexpected_error THENx_return_sus := HAND_API.handle_exceptions(p_pkg_name p_api_name p_api_type p_exc_name x_msg_count x_msg_dataWHEN OTHERS THENx_return_sus := HAND_API.handle_exceptions(p_pkg_name p_api_name p_api_type p_exc_name x_msg_count x_msg_dataEND create_temp;=g_pkg_n

20、ame, l_api_name, g_api_type,HAND_API.g_exc_name_error, x_msg_count,x_msg_data);=g_pkg_name, l_api_name, g_api_type,HAND_API.g_exc_name_unexp, x_msg_count,x_msg_data);=g_pkg_name, l_api_name, g_api_type,HAND_API.g_exc_name_others, x_msg_count,x_msg_data);1、過程必要的參數(shù)其中:MIT:對(duì)于無數(shù)據(jù)更新操作可以不要,對(duì)于這類的 API,需要將 g_

21、api_type 設(shè)置為NULL,且調(diào)用 HAND_API.end_activity 不要傳遞mit 參數(shù)。驗(yàn)證 API所有的驗(yàn)證API 只返回驗(yàn)證的結(jié)果狀態(tài),驗(yàn)證的錯(cuò)誤信息直接加入消息隊(duì)列。當(dāng)驗(yàn)證不通過時(shí),使用HAND_API.set_message 將驗(yàn)證錯(cuò)誤信息加入到消息隊(duì)列。驗(yàn)證API 可以不處理例外,而由調(diào)用者處理。以下提供兩種處理方式,一個(gè)不帶例外處理,一個(gè)帶例外處理。不帶例外處理:帶例外處理:PROCEDURE validate_currency_code1( p_currency_codeIN VARCHAR2,x_return_susOUT NOCOPY VARCHAR2)P

22、ROCEDURE validate_currency_code( p_currency_codeIN VARCHAR2,x_return_susOUT NOCOPY VARCHAR2)ISCURSOR c_currencies IECT 1FROM fnd_currenciesWHERE currency_code = p_currency_code;l_dummyVARCHAR2(1); BEGINx_return_sus := fnd_api.g_ret_sts_sucs;OPEN c_currencies;FETCH c_currenciesO l_dummy;IF c_currenci

23、es%NOTFOUND THEN x_return_sus := fnd_api.g_ret_sts_error;HAND_API.set_message( p_app_name= CUX,p_msg_name= XH_INVALID_CURRENCY_CODE, p_token1= P_CURRENCY_CODE, p_token1_value = p_currency_code);END IF;CLOSE c_currencies;END validate_currency_code;參數(shù)名類型數(shù)據(jù)類型描述P_API_VERINNUMBERAPI 版本號(hào),用于檢查API 版本P_INIT_

24、MSG_LISTINVARCHAR2是否初始化消息隊(duì)列MITINVARCHAR2是否自動(dòng)提交更改X_RETURN_SUSOUTVARCHAR2返回API 執(zhí)行狀態(tài)S成功E 錯(cuò)誤U 例外X_MSG_COUNTOUTVARCHAR2返回錯(cuò)誤消息的個(gè)數(shù)X_MSG_DATAOUTVARCHAR2返回第一個(gè)錯(cuò)誤信息的內(nèi)容并發(fā)程序模板并發(fā)程序的過程第 1,2 個(gè)參數(shù)是固定的:CREATE OR REPLACE PACKAGE BODY XH_CONC_TEMPLATE_PUB AS/*=Copyright (C) Xieheng Co.,. s=參數(shù)名類型數(shù)據(jù)類型描述ERRBUFOUTVARCHAR2并發(fā)

25、程序返回錯(cuò)誤信息RETCODEOUTVARCHAR2并發(fā)程序返回狀態(tài)成功警告錯(cuò)誤ISCURSOR c_currencies IECT 1FROM fnd_currenciesWHERE currency_code = p_currency_code;l_api_nameCONSTANT VARCHAR2(30) := VALIDATE_CURRENCY_CODE1;l_dummyVARCHAR2(1); BEGINx_return_s us := fnd_api.g_ret_sts_suc s;OPEN c_currencies;FETCH c_currencies O l_dummy; IF

26、 c_currencies%NOTFOUND THEN CLOSE c_currencies;HAND_API.set_message( p_app_name = CUX,p_msg_name= XH_INVALID_CURRENCY_CODE, p_token1= P_CURRENCY_CODE, p_token1_value = p_currency_code);RAISE fnd_api.g_exc_error;例外處理:END IF;1、 自動(dòng)回滾事務(wù)CLOSE c_currencies;2、 獲取錯(cuò)誤信息EXCEPTION3、 錯(cuò)誤信息寫入日志W(wǎng)HEN fnd_api.g_exc_e

27、rror Tx_return_sus := fnd_api.g_ret_sts_error;WHEN fnd_api.g_exc_unexp_error THEN x_return_sus := fnd_api.g_ret_sts_unexp_error;WHEN OTHERS THENIF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THENfnd_msg_pub.add_exc_msg( g_pkg_name, l_api_name ); END IF;x_return_sus := fnd_api.g_re

28、t_sts_unexp_error; END validate_currency_code1;* =*PROGRAM NAME:DESCRIPTION:HISTORY:1.00 2005-09-26Creation* =*/G_PKG_NAMECONSTANT VARCHAR2(30):= XH_CONC_TEMPLATE_PUB;PROCEDURE main( errbufOUT VARCHAR2,retcodeOUT VARCHAR2,p_parameter1 p_parameter2IN VARCHAR2, IN VARCHAR2)ISl_return_sus l_msg_count l

29、_msg_dataVARCHAR2(30); NUMBER; VARCHAR2(2000);并發(fā)程序開始1、 將傳入?yún)?shù)寫入日志BEGINretcode := 0;- concurrent header log Hand_conc_utl.log_header;2、程序開始時(shí)間- convert parameter daype, such as varchar2 to date- l_date := fnd_conc_date.string_to_date(p_parameter1);用戶代碼區(qū)1、 Pros_request API 使- conc body- call pro用 PUB AP

30、I 的模板s api2、 用戶的代碼在pros_request(pros_request 實(shí)現(xiàn)p_init_msg_list= fnd_api.g_true,mit= fnd_api.g_false,x_return_sus = l_return_sus,x_msg_count x_msg_data p_p_= l_msg_count,= l_msg_data,= p_parameter1= p_parameter2);IF l_return_sus = fnd_api.g_ret_sts_error THEN RAISE fnd_api.g_exc_error;ELSIF l_return_su

溫馨提示

  • 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)論