深入淺出Oracle EBS之OAF學(xué)習(xí)筆記-Oracle EBS技術(shù)文檔_第1頁(yè)
深入淺出Oracle EBS之OAF學(xué)習(xí)筆記-Oracle EBS技術(shù)文檔_第2頁(yè)
深入淺出Oracle EBS之OAF學(xué)習(xí)筆記-Oracle EBS技術(shù)文檔_第3頁(yè)
深入淺出Oracle EBS之OAF學(xué)習(xí)筆記-Oracle EBS技術(shù)文檔_第4頁(yè)
深入淺出Oracle EBS之OAF學(xué)習(xí)筆記-Oracle EBS技術(shù)文檔_第5頁(yè)
已閱讀5頁(yè),還剩73頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

DocRef:REFDocRefNumber<DocumentReferenceNumber>REFDocTitleOracleERP最佳技術(shù)實(shí)踐REFLastDateApril10,2007STYLEREFHD2專題理解與討論IfSection2>1“DateAuthorVersionChangeReferenceCREATEDATE\@"d-MMM-yy"10-Apr-07Jianhua.HuangDraft1aNoPreviousDocumentReviewersNamePositionDistributionCopyNo.NameLocationLibraryMasterProjectLibraryProjectManagerNoteToHolders:Ifyoureceiveanelectroniccopyofthisdocumentandprintitout,pleasewriteyournameontheequivalentofthecoverpage,fordocumentcontrolpurposes.Ifyoureceiveahardcopyofthisdocument,pleasewriteyournameonthefrontcover,fordocumentcontrolpurposes.ContentsTOC\o"2-3"DocumentControl ii1. 開發(fā)配置 21.1. 了解EBS服務(wù)器目錄 21.2. 簡(jiǎn)單了解JServ 21.3. 版本檢查和下載 31.4. SettingUpYourDevelopmentEnvironment 41.5. 額外設(shè)置 62. 完整的例子:HelloWorld 82.1. 開發(fā)設(shè)置 82.2. 開發(fā)步驟 82.3. 發(fā)布到EBS 113. 完整的項(xiàng)目實(shí)例:增、刪、改、查、LOV、Button、Sequence 143.1. 需求概述 143.2. 開發(fā)設(shè)置 153.3. 基礎(chǔ):創(chuàng)建項(xiàng)目框架 153.4. 基礎(chǔ):創(chuàng)建所需M對(duì)象 163.5. 基礎(chǔ):創(chuàng)建V對(duì)象之LovRegion 183.6. 查:創(chuàng)建V對(duì)象之SearchPage 203.7. 查:如何實(shí)現(xiàn)ExecuteQuery 223.8. 查:修改M對(duì)象 233.9. 查:創(chuàng)建C對(duì)象 233.10. 增:創(chuàng)建V對(duì)象之CreatePage 243.11. 增:修改M對(duì)象 263.12. 增:創(chuàng)建C對(duì)象 273.13. 增:修改查詢V對(duì)象 283.14. 增:修改查詢C對(duì)象 283.15. 增:如何實(shí)現(xiàn)Seqence 293.16. 改:修改M對(duì)象 293.17. 改:創(chuàng)建V對(duì)象 303.18. 改:創(chuàng)建C對(duì)象 303.19. 改:修改查詢V對(duì)象 313.20. 改:修改查詢C對(duì)象 323.21. 刪:修改M對(duì)象 323.22. 刪:修改查詢V對(duì)象 333.23. 刪:修改查詢C對(duì)象 343.24. 發(fā)布到EBS 344. 常用代碼塊備忘 354.1. 消息處理 354.2. 發(fā)布 354.3. BC4J處理流程 365. 專題理解與討論 375.1. 問題記錄 376. OpenandClosedIssuesforthisDeliverable 38OpenIssues 38ClosedIssues 38PAGE10開發(fā)配置了解EBS服務(wù)器目錄$JAVA_TOPJSP中可以引用標(biāo)準(zhǔn)Java類庫(kù),也可以引用其他Java類庫(kù),客戶化開發(fā)的類庫(kù)統(tǒng)一放在$JAVA_TOP下,按目錄組織。OAF開發(fā)的文件都放在這里。$OA_HTML$OA_HTML是所有EBSWeb文件所在目錄,最常見的是HTML文件、圖片文件、JSP文件、Applet對(duì)應(yīng)的Jar文件。我們開發(fā)的jsp等相關(guān)文件要用ftp上傳到這里;通常我們會(huì)再創(chuàng)建一個(gè)客戶化文件夾,比如cux,方便文件管理。如何具體確定$OA_HTML?用applmgr用戶(如gappdev)Telnet登錄應(yīng)用服務(wù)器,執(zhí)行echo$OA_HTML可以看到具體目錄位置,方便在ftp中定位。$COMMON_TOP/_pages/_oa__html第一次運(yùn)行,Jserv自動(dòng)將JSP轉(zhuǎn)成Servlet,然后Cache到內(nèi)存。首先是轉(zhuǎn)成Java源文件,然后編譯成Class文件,都放在$COMMON_TOP/_pages/_oa__html下,當(dāng)然如果jsp放在$OA_HTML的子目錄下,這里也有子目錄。一個(gè)執(zhí)行過的jsp文件會(huì)對(duì)應(yīng)這里的一個(gè)java文件和一個(gè)class文件,有時(shí)候查錯(cuò)會(huì)把這里的java文件拿下來看,因?yàn)槿绻麍?bào)錯(cuò),出錯(cuò)行指的是java文件的行,而不是jsp文件的行。$OA_MEDIA$OA_MEDIA通常存放圖片。簡(jiǎn)單了解JServLog文件N:$IAS_ORACLE_HOME/Apache/Jserv/logs通常文件名是mod_jserv.log,如果遇到錯(cuò)誤,可以查看這里的log文件。調(diào)整autoreload.classes、developer_mode和debug_mode參數(shù)N:$IAS_ORACLE_HOME/Apache/Jserv/etc/pertiesdeveloper_mode指示JSP運(yùn)行期是否自動(dòng)重編譯任何在上次執(zhí)行后被修改了的jsp文件,原理是檢查JSP源文件的時(shí)間標(biāo)志。開發(fā)環(huán)境設(shè)為“true”,否則要重啟Apache才能使新上載的jsp文件生效;該功能會(huì)大大降低性能。autoreload.classes指示是否自動(dòng)載入servlet的class文件,不是指jsp中import的class。debug_mode用來顯示調(diào)試信息,比如Java堆棧記錄。開發(fā)環(huán)境也建議設(shè)為“true”。正式環(huán)境這幾個(gè)參數(shù)應(yīng)該被設(shè)為“false”。設(shè)完重啟Apache生效。版本檢查和下載常見的同類工具Dreamweaver:做Web開發(fā)(HTML/CSS/ASP/PHP/JSP)非常方便,我常用它來生成HTML代碼和CSS代碼JCreator:做簡(jiǎn)單的Java開發(fā)Eclipse:流行的Java開發(fā)工具JBuilder:Borland公司出品的IDEJDeveloper:Oracle公司出品的IDE工具選擇開發(fā)JSP推薦直接使用Jdeveloper的OAF擴(kuò)展版本;開發(fā)OAF,則必定使用Jdeveloper的OAF擴(kuò)展版本。EBS版本與開發(fā)工具下載安裝 http://<host_name>:<port_number>/OA_HTML/OAInfo.jsp可以查看當(dāng)前EBS的OAF版本,如:8069/OA_HTML/OAInfo.jsp。下載的補(bǔ)丁需要與EBS當(dāng)前OAF相關(guān)補(bǔ)丁對(duì)應(yīng):EBSPatchLevelOAFVersionJDeveloperARUSeg11i.FWK.H(3262919)11.5.10.K4045639,我用472567011i.ATG_PF.H(3438354)4045639ATGPFCU1(4017300)4141787ATGPFCU2(4125550)457351711i.ATG_PF.HRUP3(4334965)472567011i.ATG_PF.H.RUP4(4676589)545551411i.ATG_PF.HRUP5(5473858)目前是5455514….….此外,3262919補(bǔ)丁之后,系統(tǒng)中有職責(zé)OAFrameworkInstallTest、OAFrameworkToolBoxTutorial(Metalink說看看能否創(chuàng)建、查詢供應(yīng)商),如果它們的功能能正常使用,說明此EBS可使用OAF開發(fā)了。從Metalink下載相應(yīng)JdeveloperPatch,解壓即可,位置任意,但目錄名不能有空格和中文;不需要安裝,也不需要原版本的Jdeveloper。假定解壓到D:\Software\Oracle\JDev9iOAExtension,后面的章節(jié)將以這個(gè)目錄為基礎(chǔ)。目錄描述Segjdevdoc\javadoc\fwkOAFramework的Java文檔jdevdoc\javadoc\aoljAOL/J的Java文檔jdevdoc\javadoc\bc4jBC4J的Java文檔jdevdoc\javadoc\uixUIX的Java文檔jdevdoc\toolboxOAFrameworkToolBox指南/實(shí)驗(yàn)文檔jdevdoc\devguideOAFramework的開發(fā)員手冊(cè)jdevbin\擴(kuò)展的Oracle9iJDeveloper可執(zhí)行和OAFramework類庫(kù)jdevhome\OAFrameworkToolBox指南的源文件和開發(fā)工作區(qū)SettingUpYourDevelopmentEnvironment本節(jié)內(nèi)容參考自Developer’sGuide第一章同名章節(jié)。設(shè)置Windows環(huán)境變量JDEV_USER_HOMEN:我的電腦/右鍵/屬性/高級(jí)/環(huán)境變量/用戶變量的新建變量名:JDEV_USER_HOME變量值:隨意,比如D:\Software\Oracle\JDev9iOAExtension\jdevhome\jdev下載DBC文件從服務(wù)器cd$FND_SECURE,下載<DB_Host_Name>_<SID>.dbc到本地<JDEV_USER_HOME>\dbc_files\secure下。D:\OAF_R12_GENERIC開發(fā)工具\(yùn)jdevhome\jdev\dbc_files\secure為JDeveloper主程序jdevw.exe創(chuàng)建快捷方式為了方便快速啟動(dòng),為jdevbin\jdev\bin\jdevw.exe創(chuàng)建快捷方式到桌面創(chuàng)建EBS用戶并分配職責(zé)創(chuàng)建EBS用戶如HUAJHUA,并分配如下兩個(gè)職責(zé):OAFrameworkToolBoxTutorialOAFrameworkToolBoxTutorialLabs創(chuàng)建數(shù)據(jù)庫(kù)連接選擇Connections/Database/NewConnection:然后按照DBC文件的內(nèi)容創(chuàng)建連接,如GTDEV。打開主程序jdevw.exe,并打開Workspacetoolbox.jwsN:File/Open打開<JDEV_USER_HOME>\myprojects\toolbox.jws選擇項(xiàng)目Tutorial.jpr的屬性/RuntimeConnection,選擇前面下載的DBC文件,輸入用戶名、密碼、職責(zé)應(yīng)用簡(jiǎn)稱、職責(zé)代碼選擇項(xiàng)目Tutorial.jpr下的Tutorial.jpx,右鍵/EditTutorial,在Connection中選擇上面創(chuàng)建的連接對(duì)項(xiàng)目LabSolutions.jpr做同樣設(shè)置。Tips:上面2、3兩步可以設(shè)置到DefaultProjectSettings,這樣新建的項(xiàng)目將不需要重新設(shè)置了!測(cè)試右鍵toolbox.jws,選擇Rebuildtoolbox.jws,0Error即可,不用管Warning運(yùn)行test_fwktutorial.jsp選擇HelloWorld測(cè)試通過即可(需要IE安全設(shè)置允許Javascrip)額外設(shè)置設(shè)置默認(rèn)字符集N:Tools/Preferences/Environment要根據(jù)EBS字符集修改;這里我改成GB2312。我們新建的jsp頁(yè)面,頭部的charset將默認(rèn)取這個(gè)值,如<%@pagecontentType="text/html;charset=GB2312"%>。設(shè)置默認(rèn)Project屬性:調(diào)式信息N:Project/DefaultProjectSettings…/Common/OracleApplications/RunOptions添加OADiagnostic、OADeveloperMode設(shè)置默認(rèn)Project屬性:ForgiveDuplicateDirectiveAttributesN:Project/DefaultProjectSettings…/Configurations/Development/Compiler/JSP如果JSP頁(yè)面包含另外一個(gè)JSP頁(yè)面,這兩個(gè)頁(yè)面中都Import了某個(gè)相同的類,則Build該JSP頁(yè)面會(huì)報(bào)“Error(XXX):錯(cuò)誤,屬性定義了兩次:language”。解決辦法是選中ForgiveDuplicateDirectiveAttributes(HelpsJSP1.1Compatability)。完整的例子:HelloWorld本章節(jié)參考自Developer’sGuide,所以僅記錄關(guān)鍵內(nèi)容。開發(fā)設(shè)置即“開發(fā)配置”章節(jié)之“版本檢查和下載”、“SettingUpYourDevelopmentEnvironment”、“額外設(shè)置”。開發(fā)步驟創(chuàng)建基于OA的項(xiàng)目:HelloWorld參考下表完成:參數(shù)值Seg默認(rèn)目錄<JDEV_USER_HOME>\myprojectsWorkspaceHelloWorldOAWorkspace.jwsProjectHelloWorldOAProject.jprDefaultPackagehand.oracle.apps.cux.helloDBCFile<JDEV_USER_HOME>\dbc_files\secure\gthf_gtdev.dbc用戶/密碼HUAJHUA/111111應(yīng)用/職責(zé)簡(jiǎn)稱AK/FWK_TBX_TUTORIALDatabaseConnectionGTDEV檢查Project運(yùn)行屬性:調(diào)式信息添加OADiagnostic、OADeveloperMode。如果默認(rèn)的項(xiàng)目屬性已經(jīng)設(shè)置,這里就不用設(shè)置了。創(chuàng)建OAComponentsPage參考下表完成:參數(shù)值SegNameHelloWorldPGPackagehand.oracle.apps.cux.hello.webui修改最高層區(qū)域參考下表完成:參數(shù)值SegIDPageLayoutRNRegionStylepageLayoutAMDefinitionoracle.apps.fnd.framework.server.OAApplicationModuleWindowTitleHelloWorldWindowTitleTitleHelloWorldPageHeaderAutoFooterTrueFormTrue創(chuàng)建主內(nèi)容區(qū)域N:右鍵PageLayoutRN/New/Region參考下表完成:參數(shù)值SegIDMainRNRegionStylemessageComponentLayout創(chuàng)建文本框N:右鍵MainRN/New/messageTextInput參考下表完成:參數(shù)值SegIDHelloNameItemStylemessageTextInputPromptYourNameLength20MaximumLength50創(chuàng)建按鈕容器N:右鍵MainRN/New/messageLayout參考下表完成:參數(shù)值SegIDButtonLayout創(chuàng)建按鈕N:右鍵ButtonLayout/New/Item參考下表完成:參數(shù)值SegIDGoItemStylesubmitButtonAttributeSet/oracle/apps/fnd/attributesets/Buttons/Go創(chuàng)建控制器N:右鍵MainRN/New/SetNewController...參考下表完成:參數(shù)值SegPackagehand.oracle.apps.cux.hello.webuiClassNameHelloWorldMainCO實(shí)際上是創(chuàng)建類java類HelloWorldMainCO。修改代碼:添加引用類importoracle.apps.fnd.framework.OAException;修改方法processFormRequest()publicvoidprocessFormRequest(OAPageContextpageContext,OAWebBeanwebBean)

{

if(pageContext.getParameter("Go")!=null)

{

StringuserContent=pageContext.getParameter("HelloName");

Stringmessage="Hello,"+userContent+"!";

thrownewOAException(message,OAException.INFORMATION);

}

}右鍵HelloWorldMainCO.java或其代碼內(nèi)任何區(qū)域,Rebuild。在本地Jdeveloper自帶的OC4J服務(wù)器中運(yùn)行N:右鍵HelloWorldPG.xml,運(yùn)行發(fā)布到EBS了解文件類型和目錄結(jié)構(gòu)OAF項(xiàng)目的文件類型比較多,有些文件僅用于組織開發(fā)內(nèi)容,有些文件則是開發(fā)和運(yùn)行共同需要的,如XML、JavaClass。此外,開發(fā)和運(yùn)行都有特定的目錄結(jié)構(gòu)規(guī)約,發(fā)布比Form要復(fù)雜些??偟膩碚fXML文件是屬性定義文件,Java文件是OAF代碼,jws和jpr是項(xiàng)目管理文件,jpx則是當(dāng)我們客戶化標(biāo)準(zhǔn)功能時(shí)使用的替換文件。發(fā)布目錄大約如下:編譯、上傳右鍵HelloWorldOAWorkspace.jws或HelloWorldOAProject.jpr,Rebuild將<JDEV_USER_HOME>\myclasses\hand上傳到服務(wù)器$JAVA_TOP/hand修改目錄屬性,cd$JAVA_TOP后運(yùn)行:chmod-R775hand把頁(yè)面定義導(dǎo)入到MDS中實(shí)際上是用oracle.jrad.tools.xml.importer.XMLImporter將webui目錄下的xml文件內(nèi)容上傳到數(shù)據(jù)庫(kù)中??梢栽诜?wù)器上做,也可以在本地做;服務(wù)器上的JDK、XDK可能版本過低,容易出現(xiàn)問題,所以通常在本地做。jdevw.exe所在目錄的import.bat,已經(jīng)自動(dòng)設(shè)置了需要的環(huán)境變量,可以用來上傳,使用實(shí)例:cdD:\Software\Oracle\JDev9iOAExtension\jdevbin\jdev\binimportD:\Software\Oracle\JDev9iOAExtension\jdevhome\jdev\myprojects\hand\oracle\apps\cux\hello\webui\HelloWorldPG.xml-rootdirD:\Software\Oracle\JDev9iOAExtension\jdevhome\jdev\myprojects-usernameapps-passwordapps2007-dbconnection"(description=(address_list=(address=(protocol=tcp)(host=)(port=1590)))(connect_data=(sid=gtdev)))"Tips:XMLImporter需要在命令行下運(yùn)行,使用比較復(fù)雜,可以考慮創(chuàng)建一個(gè)簡(jiǎn)單的專門用于發(fā)布的Project,發(fā)布時(shí)修改下幾個(gè)參數(shù),運(yùn)行項(xiàng)目即可。漢的美的升級(jí)項(xiàng)目就是這么做的。Java文件如下:importoracle.jrad.tools.xml.importer.XMLImporter;

publicclassCUXXMLImporter

{

publicstaticvoidmain(String[]args)

{

XMLImporterxmlimp=newXMLImporter();

Stringarg[]=newString[9];

arg[0]="D:\\Software\\Oracle\\JDev9iOAExtension\\jdevhome\\jdev\\myprojects\\hand\\oracle\\apps\\cux\\hello\\webui\\HelloWorldPG.xml";

arg[1]="-rootdir";

arg[2]="D:\\Software\\Oracle\\JDev9iOAExtension\\jdevhome\\jdev\\myprojects";

arg[3]="-username";

arg[4]="apps";

arg[5]="-password";

arg[6]="apps2007";

arg[7]="-dbconnection";

arg[8]="(description=(address_list=(address=(protocol=tcp)(host=)(port=1590)))(connect_data=(sid=gtdev)))";

xmlimp.doImport(arg);

}

}要使該類能正常運(yùn)行,如果是普通項(xiàng)目,項(xiàng)目屬性Libraries中加入MDSRuntime、OADeveloperLibaries、OracleXMLParserV2、OracleJDBC:驗(yàn)證導(dǎo)入用如下SQL驗(yàn)證:BEGIN

jdr_utils.printdocument('/hand/oracle/apps/cux/hello/webui/HelloWorldPG');

END;應(yīng)該輸出XML內(nèi)容,而不是“Error:Couldnotfinddocument….”重啟Apache如果是更新,則需要重啟Apache。定義應(yīng)用對(duì)象可以參考OAFrameworkToolBoxTutorial職責(zé)的菜單定義,關(guān)鍵是Function定義,HTMLCall中指向xml文件所在路徑。實(shí)例如下:參數(shù)值FunctionCUX_OAF_HELLOTypeSSWAjspfunctionHtmlCallOA.jsp?page=/hand/oracle/apps/cux/hello/webui/HelloWorldPG菜單和職責(zé)定義這里不再詳細(xì)說明。完整的項(xiàng)目實(shí)例:增、刪、改、查、LOV、Button、Sequence需求概述完成下表數(shù)據(jù)的維護(hù)OAF的實(shí)體表,必須要有5個(gè)Who字段,主表SQL:--Createtable

createtableCUX.CUX_MFG_SYSTEM_CHECKS

(

SYSTEM_CHECK_IDNUMBERnotnull,

ORGANIZATION_IDNUMBERnotnull,--LOV

CHECK_TYPE_CODEVARCHAR2(30)notnull,--LOV

CHECK_FLAGVARCHAR2(1)default'Y'notnull,--CheckBox

DATEF_ROMDATEnotnull,--LOV

DATE_TODATEnotnull,--LOV

NOTIFY_ROLE1VARCHAR2(320),--LOV

NOTIFY_ROLE2VARCHAR2(320),--lOV

NOTIFY_ROLE3VARCHAR2(320),--LOV

CREATION_DATEDATEdefaultSYSDATEnotnull,

CREATED_BYNUMBERdefault-1notnull,

LAST_UPDATED_BYNUMBERdefault-1notnull,

LAST_UPDATE_DATEDATEdefaultSYSDATEnotnull,

LAST_UPDATE_LOGINNUMBER,

PROGRAM_APPLICATION_IDNUMBER,

PROGRAM_IDNUMBER,

PROGRAM_UPDATE_DATEDATE,

REQUEST_IDNUMBER,

ATTRIBUTE_CATEGORYVARCHAR2(30),

ATTRIBUTE1VARCHAR2(240),

ATTRIBUTE2VARCHAR2(240),

ATTRIBUTE3VARCHAR2(240),

ATTRIBUTE4VARCHAR2(240),

ATTRIBUTE5VARCHAR2(240),

ATTRIBUTE6VARCHAR2(240),

ATTRIBUTE7VARCHAR2(240),

ATTRIBUTE8VARCHAR2(240),

ATTRIBUTE9VARCHAR2(240),

ATTRIBUTE10VARCHAR2(240),

ATTRIBUTE11VARCHAR2(240),

ATTRIBUTE12VARCHAR2(240),

ATTRIBUTE13VARCHAR2(240),

ATTRIBUTE14VARCHAR2(240),

ATTRIBUTE15VARCHAR2(240)

);

--Create/Recreateindexes

createuniqueindexCUX.CUX_MFG_SYSTEM_CHECKS_U1onCUX.CUX_MFG_SYSTEM_CHECKS(SYSTEM_CHECK_ID)

tablespaceCUXX;

createuniqueindexCUX.CUX_MFG_SYSTEM_CHECKS_U2onCUX.CUX_MFG_SYSTEM_CHECKS(ORGANIZATION_ID,CHECK_TYPE_CODE)

tablespaceCUXX;

--

CREATESEQUENCECUX.cux_mfg_system_checks_s;

--Createsynonym

DROPSYNONYMcux_mfg_system_checks;

CREATESYNONYMcux_mfg_system_checksFORCUX.cux_mfg_system_checks;

DROPSYNONYMcux_mfg_system_checks_s;

CREATESYNONYMcux_mfg_system_checks_sFORCUX.cux_mfg_system_checks_s;LovORGANIZATION_ID來自如下SQL:SELECTanization_id,anization_code,org.NAMEorganization_name

FROMmtl_parametersmtp,hr_all_organization_units_vlorg,org_accessoa

WHEREanization_id=anization_id

ANDanization_id=anization_id

ANDoa.responsibility_id=fnd_profile.VALUE('RESP_ID')CHECK_TYPE_CODE來自如下SQL:SELECTlov.lookup_codecheck_type_code,lov.meaningcheck_type_meaning

FROMfnd_lookup_values_vllov

WHERElov.lookup_type='GITI_MFG_CHECK_TYPE'NOTIFY_ROLE1..3來自如下SQL:SELECTwfr.NAME,wfr.display_name,wfr.description,wfr.email_address

FROMwf_roleswfr

WHEREwfr.orig_systemIN('FND_USR','PER')開發(fā)設(shè)置即“開發(fā)配置”章節(jié)之“版本檢查和下載”、“SettingUpYourDevelopmentEnvironment”、“額外設(shè)置”?;A(chǔ):創(chuàng)建項(xiàng)目框架創(chuàng)建基于OA的項(xiàng)目:HelloWorld參考下表完成:參數(shù)值Seg默認(rèn)目錄<JDEV_USER_HOME>\myprojectsWorkspaceGITICUXMFG.jwsProjectGITICUXMFG.jprDefaultPackagehand.oracle.apps.cux.mfgDBCFile<JDEV_USER_HOME>\dbc_files\secure\gthf_gtdev.dbc用戶/密碼HUAJHUA/111111應(yīng)用/職責(zé)簡(jiǎn)稱AK/FWK_TBX_TUTORIALDatabaseConnectionGTDEV檢查Project運(yùn)行屬性:調(diào)式信息添加OADiagnostic、OADeveloperMode。如果默認(rèn)的項(xiàng)目屬性已經(jīng)設(shè)置,這里就不用設(shè)置了。創(chuàng)建BC4JPackageBC4J包需要遵循如下格式要求:對(duì)象類型Seg實(shí)體對(duì)象<mycompany>.oracle.apps.<appshortname>.[<modulename>].schema.server視圖對(duì)象<mycompany>.oracle.apps.<appshortname>.<modulename>.serverlov視圖對(duì)象<mycompany>.oracle.apps.<appshortname>.<modulename>.lov.serverpoplist視圖對(duì)象<mycompany>.oracle.apps.<appshortname>.<modulename>.poplist.server頁(yè)面<mycompany>.oracle.apps.<appshortname>.<modulename>.webui.XxxxPG控制器<mycompany>.oracle.apps.<appshortname>.<modulename>.webui.XxxxCO所以我們創(chuàng)建如下BusinessComponentPackage:對(duì)象類型Seg實(shí)體對(duì)象hand.oracle.apps.cux.mfg.schema.server視圖對(duì)象hand.oracle.apps.cux.mfg.serverlov視圖對(duì)象hand.oracle.apps.cux.mfg.lov.serverpoplist視圖對(duì)象hand.oracle.apps.cux.mfg.poplist.server基礎(chǔ):創(chuàng)建所需M對(duì)象開發(fā)之前,應(yīng)當(dāng)先規(guī)劃M對(duì)象。這里我們將創(chuàng)建1個(gè)EO、1個(gè)基于EO+SQL的VO用于增刪改查、3個(gè)基于SQL用于LOV的VO、1個(gè)用于管理LOV的AM、一個(gè)用于管理程序頁(yè)面的AM。創(chuàng)建EntityObjects:SystemChecksEO在hand.oracle.apps.cux.mfg.schema.server下創(chuàng)建。Name: SystemChecksEO

SchemaObject: CUX_MFG_SYSTEM_CHECKS設(shè)置SystemCheckId為PrimaryKey;設(shè)置SystemCheckId、OrganizationId、CheckTypeCode的Updateable為WhileNew;設(shè)置OrganizationId、CheckTypeCode為Unique。在產(chǎn)生Java畫面,選中EntityObjectClass下的所有復(fù)選框。創(chuàng)建ViewObjects:SystemChecksVO該VO用來完成增加和修改。在hand.oracle.apps.cux.mfg.server下創(chuàng)建。Name: SystemChecksVOEntityObject,選SystemChecksEO,并選所有字段。向?qū)ЫY(jié)束后,在SystemChecksVO的Query屬性中,啟用“Expert”模式,添加表和條件,注意新加的字段放最后:SELECTSystemChecksEO.SYSTEM_CHECK_ID,

SystemChecksEO.ORGANIZATION_ID,

SystemChecksEO.CHECK_TYPE_CODE,

SystemChecksEO.CHECK_FLAG,

SystemChecksEO.DATEF_ROM,

SystemChecksEO.DATE_TO,

SystemChecksEO.NOTIFY_ROLE1,

SystemChecksEO.NOTIFY_ROLE2,

SystemChecksEO.NOTIFY_ROLE3,

SystemChecksEO.CREATION_DATE,

SystemChecksEO.CREATED_BY,

SystemChecksEO.LAST_UPDATED_BY,

SystemChecksEO.LAST_UPDATE_DATE,

SystemChecksEO.LAST_UPDATE_LOGIN,

SystemChecksEO.PROGRAM_APPLICATION_ID,

SystemChecksEO.PROGRAM_ID,

SystemChecksEO.PROGRAM_UPDATE_DATE,

SystemChecksEO.REQUEST_ID,

SystemChecksEO.ATTRIBUTE_CATEGORY,

SystemChecksEO.ATTRIBUTE1,

SystemChecksEO.ATTRIBUTE2,

SystemChecksEO.ATTRIBUTE3,

SystemChecksEO.ATTRIBUTE4,

SystemChecksEO.ATTRIBUTE5,

SystemChecksEO.ATTRIBUTE6,

SystemChecksEO.ATTRIBUTE7,

SystemChecksEO.ATTRIBUTE8,

SystemChecksEO.ATTRIBUTE9,

SystemChecksEO.ATTRIBUTE10,

SystemChecksEO.ATTRIBUTE11,

SystemChecksEO.ATTRIBUTE12,

SystemChecksEO.ATTRIBUTE13,

SystemChecksEO.ATTRIBUTE14,

SystemChecksEO.ATTRIBUTE15,

org.NAMEorganization_name,

lov.meaningcheck_type_name,

wf1.display_namenotify_role_name_1,

wf2.display_namenotify_role_name_2,

wf3.display_namenotify_role_name_3,

anization_code

FROMCUX_MFG_SYSTEM_CHECKSSystemChecksEO,

mtl_parametersmtp,

hr_all_organization_units_vlorg,

org_accessoa,

fnd_lookup_values_vllov,

(SELECTwfr.NAME,wfr.display_name

FROMwf_roleswfr

WHEREwfr.orig_systemIN('FND_USR','PER'))wf1,

(SELECTwfr.NAME,wfr.display_name

FROMwf_roleswfr

WHEREwfr.orig_systemIN('FND_USR','PER'))wf2,

(SELECTwfr.NAME,wfr.display_name

FROMwf_roleswfr

WHEREwfr.orig_systemIN('FND_USR','PER'))wf3

WHERESystemChecksEO.organization_id=anization_id

ANDanization_id=anization_id

ANDanization_id=anization_id

ANDoa.responsibility_id=fnd_profile.VALUE('RESP_ID')

ANDoa.resp_application_id=fnd_profile.VALUE('RESP_APPL_ID')

ANDSystemChecksEO.check_type_code=lov.lookup_code

ANDlov.lookup_type='GITI_MFG_CHECK_TYPE'

ANDSystemChecksEO.notify_role1=wf1.NAME(+)

ANDSystemChecksEO.notify_role2=wf2.NAME(+)

ANDSystemChecksEO.notify_role3=wf3.NAME(+)創(chuàng)建ViewObjects:OrgAccessLOVVO該VO用于LOV。在hand.oracle.apps.cux.mfg.lov.server下創(chuàng)建。Name: OrgAccessLOVVO一直Next,直接輸入SQL:SELECTanization_id,anization_code,org.NAMEorganization_name

FROMmtl_parametersmtp,hr_all_organization_units_vlorg,org_accessoa

WHEREanization_id=anization_id

ANDanization_id=anization_id

ANDoa.responsibility_id=fnd_profile.VALUE('RESP_ID')創(chuàng)建ViewObjects:CheckTypeLOVVO該VO用于LOV。在hand.oracle.apps.cux.mfg.lov.server下創(chuàng)建。Name: CheckTypeLOVVO一直Next,直接輸入SQL:SELECTlov.lookup_codecheck_type_code,lov.meaningcheck_type_meaning

FROMfnd_lookup_values_vllov

WHERElov.lookup_type='GITI_MFG_CHECK_TYPE'創(chuàng)建ViewObjects:NotifyRoleLOVVO該VO用于LOV。在hand.oracle.apps.cux.mfg.lov.server下創(chuàng)建。Name: NotifyRoleLOVVO一直Next,直接輸入SQL:SELECTwfr.NAME,wfr.display_name,wfr.description,wfr.email_address

FROMwf_roleswfr

WHEREwfr.orig_systemIN('FND_USR','PER')創(chuàng)建ApplicationModule:SystemChecksAM在hand.oracle.apps.cux.mfg.server下創(chuàng)建。Name: SystemChecksAM在數(shù)據(jù)模型畫面,把SystemChecksVO加進(jìn)來兩次,可以看到兩個(gè)實(shí)例SystemChecksVO1、SystemChecksVO2,前者用于增加和修改,后者用于查詢和刪除。向?qū)戤呏?,編輯該AM,加入如下Property:Name: RETENTION_LEVEL

Value: MANAGE_STATE創(chuàng)建ApplicationModule:LovAM該AM用于管理Lov。在hand.oracle.apps.cux.mfg.lov.server下創(chuàng)建。Name: LovAM在數(shù)據(jù)模型畫面,把OrgAccessLOVVO、CheckTypeLOVVO、NotifyRoleLOVVO加進(jìn)來。向?qū)戤呏螅庉嬙揂M,加入如下Property:Name: RETENTION_LEVEL

Value: MANAGE_STATE基礎(chǔ):創(chuàng)建V對(duì)象之LovRegion創(chuàng)建LovOAComponents:OrgAccessLovRN新建OAComponents/RegionName: OrgAccessLovRN

Package: hand.oracle.apps.cux.mfg.lov.webui

Style: listOfValues向?qū)瓿珊罄^續(xù)設(shè)置如下屬性Scope: Public

AMDefinition: hand.oracle.apps.cux.mfg.lov.server.LovAM

AdvSearchAllowed: True新建table選中OrgAccessLovRN,新建tableUsingWizard,選擇LovAM下的OrgAccessLOVVO1,Resion名字為L(zhǎng)ovTable,選出所有字段,根據(jù)實(shí)際需要修改Prompt。向?qū)瓿珊罄^續(xù)設(shè)置如下屬性,所有Item都可以設(shè)。SearchAllowed: True創(chuàng)建LovOAComponents:CheckTypeLovRN新建OAComponents/RegionName: CheckTypeLovRN

Package: hand.oracle.apps.cux.mfg.lov.webui

Style: listOfValues向?qū)瓿珊罄^續(xù)設(shè)置如下屬性Scope: Public

AMDefinition: hand.oracle.apps.cux.mfg.lov.server.LovAM

AdvSearchAllowed: True新建table選中OrgAccessLovRN,新建tableUsingWizard,選擇LovAM下的CheckTypeLOVVO1,Resion名字為L(zhǎng)ovTable,選出所有字段,根據(jù)實(shí)際需要修改Prompt。向?qū)瓿珊罄^續(xù)設(shè)置如下屬性,所有Item都可以設(shè)。SearchAllowed: True創(chuàng)建LovOAComponents:NotifyRoleLovRN新建OAComponents/RegionName: NotifyRoleLovRN

Package: hand.oracle.apps.cux.mfg.lov.webui

Style: listOfValues向?qū)瓿珊罄^續(xù)設(shè)置如下屬性Scope: Public

AMDefinition: hand.oracle.apps.cux.mfg.lov.server.LovAM

AdvSearchAllowed: True新建table選中OrgAccessLovRN,新建tableUsingWizard,選擇LovAM下的NotifyRoleLOVVO1,Resion名字為L(zhǎng)ovTable,選出所有字段,根據(jù)實(shí)際需要修改Prompt。向?qū)瓿珊罄^續(xù)設(shè)置如下屬性,所有Item都可以設(shè)。SearchAllowed: True查:創(chuàng)建V對(duì)象之SearchPage創(chuàng)建頂層頁(yè)面:SystemChecksSearchPG新建OAComponents/PageName: SystemChecksSearchPG

Package: hand.oracle.apps.cux.mfg.webui向?qū)瓿珊罄^續(xù)設(shè)置如下屬性Scope: PageLayoutRN

AMDefinition: hand.oracle.apps.cux.mfg.server.SystemChecksAM

WindowsTitle: MFGSystemChecks

Titile: SystemChecks(可選)關(guān)于Logo可以考慮修改下默認(rèn)的公司Logo圖片;也可以考慮在公司Logo下加一個(gè)產(chǎn)品Logo——ProductBranding:ID: ProdBrand

ImageURI: /OA_MEDIA/GITILOGO.gif

AdditionalText: MFGLogo(可選)頁(yè)面級(jí)消息可以考慮加一個(gè)頁(yè)面級(jí)別的消息,該消息需要來源AOLMessage,以支持多語(yǔ)言。至此,可以右鍵SystemChecksSearchPG運(yùn)行。創(chuàng)建查詢區(qū)域:QueryRN在PageLayoutRN下新建RegionID: QueryRN

RegionStyle: Query

ConstructionMode: resultsBasedSearch

IncludeSimplePanel: True

IncludeViewsPanel: True

IncludeAdvancedPanel:True在QueryRN下新建RegionUsingWizard選擇SystemChecksVO2,RegionID設(shè)置為ResultsTable,Style選擇Table,字段選擇有意義:組織代碼、組織名稱、檢查名稱、是否檢查、開始日期、結(jié)束日期、通知者1..3。根據(jù)需要修改Prompt,Style則要全部改為messageStyledText!向?qū)ЫY(jié)束后針對(duì)ResultsTable的屬性設(shè)置如下。AdditionalText: ResultsTable

Width: 100%

UserPersonalization: True而對(duì)ResultsTable下的Item,主要關(guān)注如下幾個(gè)屬性。SearchAllowed: 是否允許查詢,建議設(shè)置必要的字段為True即可

SortAllowed: 是否允許排序,建議設(shè)置必要的字段為True即可

InitialSortSequence: 對(duì)于允許排序的字段,可設(shè)置初始排序方法

SelectiveSearchCriteria:查詢是否不允許空查詢,數(shù)據(jù)量大才需要設(shè)置為True

UserPersonalization: 建議都設(shè)置為True至此,可以右鍵SystemChecksSearchPG運(yùn)行,可以執(zhí)行查詢了。Tips:可以把CheckFlag類型改為MessageCheckBox,設(shè)置方法同F(xiàn)orms,不過別忘了把ReadOnly屬性設(shè)下。自己實(shí)現(xiàn)查詢上面的查詢區(qū)域,是自動(dòng)出來的(SearchAllowed=True的字段),但比較簡(jiǎn)單,沒有LOV,所以僅適用簡(jiǎn)單查詢,要完成復(fù)雜查詢,需要繼續(xù)做些開發(fā)。修改QueryRNConstructionMode: autoCustomizationCriteria

IncludeViewsPanel: False

IncludeAdvancedPanel: False在QueryRN下建simpleSearchPanel把默認(rèn)生成的HeaderRegion2改為SimpleSearchHdr,Text屬性改為Search。把默認(rèn)生成的messageComponentLayoutRegion1改為CustomSimpleSearch。在CustomSimpleSearch下創(chuàng)建需要的查詢字段,類似在Forms中創(chuàng)建查詢塊建三個(gè)字段:SerachOrgCode、SerachOrgName、SerachCheckName。類型都是messageTextInput,設(shè)置CSSClass屬性為OraFieldText,其他屬性如SelectiveSearchCriteria、DataType、MaximumLength、Prompt、Length根據(jù)需要設(shè)置。在queryComponents下創(chuàng)建simpleSearchMappings,然后創(chuàng)建查詢字段映射ID: OrgCodeMap

SearchItem: SearchOrgCode

ResultsItem: OrganizationCodeID: OrgNameMap

SearchItem: SearchOrgName

ResultsItem: OrganizationNameID: CheckNameMap

SearchItem: SearchCheckName

ResultsItem: CheckTypeName至此,可以右鍵SystemChecksSearchPG運(yùn)行,效果和自動(dòng)產(chǎn)生的查詢一樣!給查詢加LovLov的使用和Forms中類似,需要設(shè)置在哪個(gè)字段啟用Lov,需要設(shè)置Return字段。升級(jí)SerachOrgName為L(zhǎng)ov字段Style: messageLovInput

ExternalLOV:/hand/oracle/apps/cux/mfg/lov/webui/OrgAccessLovRN并創(chuàng)建如下LovMapping:ID: lovMap1

LovRegionItem: OrganizationCode

ReturnItem: SerachOrgCode

CriteriaItem: SerachOrgCodeID: lovMap2

LovRegionItem: OrganizationName

ReturnItem: SerachOrgName

CriteriaItem: SerachOrgName注:CriteriaItem用來提前自動(dòng)過濾Lov的內(nèi)容!升級(jí)SerachCheckName為L(zhǎng)ov字段Style: messageLovInput

ExternalLOV:/hand/oracle/apps/cux/mfg/lov/webui/CheckTypeLovRN并創(chuàng)建如下LovMapping:ID: lovMap3

LovRegionItem: CheckTypeMeaning

ReturnItem: SerachCheckName

CriteriaItem: SerachCheckName至此,可以右鍵SystemChecksSearchPG運(yùn)行,查詢字段可以出來Lov了。查:如何實(shí)現(xiàn)ExecuteQuery對(duì)于數(shù)據(jù)量不大的查詢或者報(bào)表,希望一打開頁(yè)面就執(zhí)行查詢。根據(jù)MVC的關(guān)系,用戶通過V(Page及其Layout)——UI界面與系統(tǒng)交互,系統(tǒng)通過CO控制頁(yè)面響應(yīng)和頁(yè)面流轉(zhuǎn),適當(dāng)時(shí)候調(diào)用M完成邏輯處理,M(AM、EO、CO)負(fù)責(zé)和數(shù)據(jù)庫(kù)打交道。按照OAF規(guī)范,需要在VO中實(shí)現(xiàn)查詢,AM中編寫調(diào)用VO的方法,CO中調(diào)用AM的方法。查:修改M對(duì)象(因?yàn)闆]有參數(shù),可選)修改VO的Java類在SystemChecksVOImpl.java中加入方法:publicvoidinitQuery()

{

executeQuery();

}修改AM的Java類在SystemChecksAMImpl.java中加入方法,去調(diào)用VO:publicvoidinitQuery()

{

SystemChecksVOImplvo=getSystemChecksVO2();

if(vo==null)

{

//Handleerrorhere

}

vo.initQuery();

}查:創(chuàng)建C對(duì)象創(chuàng)建控制器:SystemChecksSearchCO給PageLayoutRN或ResultTable創(chuàng)建控制器,相當(dāng)于Form中創(chuàng)建觸發(fā)器。PackageName: hand.oracle.apps.cux.mfg.webui

ClassName: SystemChecksSearchCO簡(jiǎn)單理解,自動(dòng)生成的Java代碼中,processRequest是在瀏覽器初次打開頁(yè)面時(shí)調(diào)用,而processFormRequest除此之外,每次用戶點(diǎn)擊提交按鈕時(shí)還會(huì)再調(diào)用。所以我們應(yīng)當(dāng)在processRequest中執(zhí)行查詢。先引用包:importoracle.apps.fnd.framework.OAApplicationModule;再在processRequest最后添加:OAApplicationModuleam=pageContext.getApplicationModule(webBean);

am.invokeMethod("initQuery");至此常規(guī)的查詢功能已完全實(shí)現(xiàn)。運(yùn)行效果如下:增:創(chuàng)建V對(duì)象之CreatePage創(chuàng)建頂層頁(yè)面:SystemChecksCreatePG新建OAComponents/PageName: SystemChecksCreatePG

Package: hand.oracle.apps.cux.mfg.webui向?qū)瓿珊罄^續(xù)設(shè)置如下屬性ID: PageLayoutRN

AMDefinition: hand.oracle.apps.cux.mfg.server.SystemChecksAM

WindowsTitle: MFGSystemChecks

Titile: SystemChecks

WarnAboutChanges: True(可選)關(guān)于Logo可以從SearchPage拷貝過來。創(chuàng)建按鈕區(qū)域和按鈕:PageButtons在PageLayoutRN下新建RegionID: PageButtons

RegionStyle: pageButtonBar在PageButtons下新建兩個(gè)按鈕,一個(gè)Cancel,一個(gè)ApplyID: Cancel

ItemStyle: submitButton

AttributeSet: /oracle/apps/fnd/attributesets/Buttons/Cancel

DisableServerSideValidation: True

DisableClientSideValidation: TrueID: Apply

ItemStyle: submitButton

AttributeSet: /oracle/apps/fnd/attributesets/Buttons/Apply創(chuàng)建新建區(qū)域:MainRN在PageLayoutRN下新建RegionUsingWizard,VO選擇SystemChecksVO1ID: MainRN

RegionStyle: defaultSingleColumn選擇除Who、請(qǐng)求、彈性域外的所有Item,各字段Prompt根據(jù)需要修改。向?qū)ЫY(jié)束后,將RegionStyle更改為messageComponentLayout。在MainRN下新建messageLayout,ID為FormValueRN然后把那些需要使用Lov返回但本身不顯示的字段,這里是OrganizationId、CheckTypeCode、NotifyRole1、NotifyRole2、NotifyRole3,全部拉到這下面,再把ItemStyle設(shè)置為formValue。設(shè)置各個(gè)字段的屬性先說通常設(shè)置:Required: 根據(jù)需要設(shè)置

SearchAllowed: 是否允許查詢,建議設(shè)置必要的字段為True即可

SortAllowed: 是否允許排序,建議設(shè)置必要的字段為True即可

InitialSortSequence: 對(duì)于允許排序的字段,可設(shè)置初始排序方法

SelectiveSearchCriteria:查詢是否不允許空查詢,數(shù)據(jù)量大才需要設(shè)置為True

UserPersonalization: 建議都設(shè)置為True再說關(guān)鍵屬性:ItemStyle: 想包含在UI中又不顯示則用formValue,其他都可顧名思義

ViewInstance: 類似Form中的Block_Name,非數(shù)據(jù)庫(kù)字段放空

ViewAttribute: 類似Form中的Item_Name,非數(shù)據(jù)庫(kù)字段放空

CSSClass: 顯示的字段,只讀用OraDataText,其他用OraFieldText

Tiptype: 日期字段用dateFormat,其他根據(jù)需要設(shè)置在MainRN下新建非數(shù)據(jù)庫(kù)字段,并將它們?cè)O(shè)置為L(zhǎng)ov本例需要建立5個(gè)字段,并給它們?cè)O(shè)置Lov及Lov的Mapping。在PageLayoutRN下創(chuàng)建一個(gè)提示區(qū)pageStatusID: RequiredKey

Extends: /oracle/apps/fnd/framework/webui/OAReqFieldDescRG

Width: 100%至此,運(yùn)行效果如下:要實(shí)際完成新增記錄,還得寫點(diǎn)代碼。增:修改M對(duì)象修改AM的Java類在SystemChecksAMImpl.java,先引用包:importoracle.jbo.Row;

importoracle.jbo.Transaction;

importoracle.apps.fnd.framework.OAViewObject;再加入3個(gè)方法,1個(gè)是用來初始化1個(gè)空行,1個(gè)用來提交,1個(gè)用來回滾:/***************************************************************************

*Createsanewrow.

****************************************************************************

*/

publicvoidcreateSystemCheck()

{

OAViewObjectvo=(OAViewObject)getSystemChecksVO1();

/*

if(!vo.isPreparedForExecution())

{

vo.executeQuery();

}

*/

vo.setMaxFetchSize(0);

vo.clearCache();

Rowrow=vo.createRow();

vo.insertRow(row);

row.setNewRowState(Row.STATUS_INITIALIZED);

}

/****************************************************************************

*Commitsthetransaction.

*****************************************************************************

*/

publicvoidapply()

{

getTransaction().commit();

}

/****************************************************************************

*Executesarollbackincludingthedatabaseandthemiddletier.

*********

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論