版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
OracleERPOracleERP最佳實(shí)踐E-BUSINESSSUITEORACLE核心應(yīng)用技術(shù)OAF開發(fā)參考Author:CreationDate:LastUpdated:DocumentVersion:Approvals:<Approver1><Approver2>
趙振坤April26,2013April25,2022<DocumentReferenceNumber>1.0CopyNumber DocumentControlChangeRecordDateDateAuthorVersion ChangeReferenceReviewersNameNamePositionDistributionCopyNo. NameCopyNo. NameLocation1234NoteToHolders:Ifyoureceiveanelectroniccopyofthisdocumentandprintitout,pleasewriteyournameontheequivalentofthecoverpage,fordocumentcontrolpurposes.Ifyoureceiveahardcopyofthisdocument,pleasewriteyournameonthefrontcover,fordocumentcontrolpurposes.ContentsDocumentControl ii深入淺出OAF–入門篇 4OAF簡(jiǎn)介 4環(huán)境搭建 7HelloWorld 10一個(gè)簡(jiǎn)單的查詢 19應(yīng)用發(fā)布 28編碼規(guī)范 30深入淺出OAF-基礎(chǔ)篇 32實(shí)現(xiàn)增刪改 32數(shù)據(jù)校驗(yàn) 54常用布局 57常用組件 69常用JAVA代碼 81使用CSS和JS 83深入淺出OAF-中級(jí)篇 84純代碼添加組件 84PPR的使用 84OAF和Form相互調(diào)用 87OAF個(gè)性化 89深入淺出OAF–高級(jí)篇 95探究MVC 95實(shí)體對(duì)象 99視圖對(duì)象 104BC4J對(duì)象緩存 108解析OAF頁面元數(shù)據(jù)結(jié)構(gòu) 111Reference 116OpenandClosedIssuesforthisDeliverable. 117OpenIssues 117ClosedIssues 117深入淺出OAF入門篇OAF簡(jiǎn)介概述OracleApplicationFramework(OAFramework是Oracle提供的基于HTML應(yīng)用的開發(fā)和發(fā)布平臺(tái)OAFramework由一系列的中間層服務(wù)和OracleJDeveloper的擴(kuò)展(OracleApplicationsExtensionOAExtension組成OAF使用OracleBusinessComponentsforJAVA(BC4J)框架作為其模型部分,來實(shí)現(xiàn)業(yè)務(wù)邏輯和數(shù)據(jù)操作。OAF使用元數(shù)據(jù)庫支持的(整個(gè)頁面由XML來定義,定義存儲(chǔ)于Oracle數(shù)據(jù)庫中)UIX框架作為其視圖部分,將BC4J中的數(shù)據(jù)展示給用戶。OAF頁面是通過JDeveloper工具定義XML結(jié)構(gòu),一般情況下不需要編程實(shí)現(xiàn)。特征良好的用戶體驗(yàn)例如頁面局部刷新、翻頁、LOV(值列表)選擇、統(tǒng)一的CSS風(fēng)格。企業(yè)級(jí)可靠性息(例如用戶信息)會(huì)被中間層緩存,從而實(shí)現(xiàn)快速響應(yīng)。提高開發(fā)者效率OAF基于Model-View-Controller(MVC)的架構(gòu)設(shè)計(jì),使用OAF設(shè)計(jì)的用戶界面以符合業(yè)界標(biāo)準(zhǔn)的XML格式存在,借助OAF開發(fā)人員可以方便擴(kuò)展OracleE-BusinessSuite。開放標(biāo)準(zhǔn)OAF基于J2EE,很多特征都符合業(yè)界標(biāo)準(zhǔn)(例如:XML,HTML,Java,JSP,SQL、WebServices)??蚣芙Y(jié)構(gòu)OAFramework是基于工業(yè)標(biāo)準(zhǔn)J2EEMVC設(shè)計(jì)模式的OAFramework模型通過BC4J(OracleBusinessComponentsforJava)視圖鏈接對(duì)象、應(yīng)用模塊對(duì)象、事務(wù)對(duì)象等。OAFramework視圖通過UIX(UIXML)實(shí)現(xiàn),以XML來描述頁面。OAFramework控制器通過Java類來實(shí)現(xiàn),簡(jiǎn)單的頁面流程直接使用控制器對(duì)象實(shí)現(xiàn),實(shí)現(xiàn)對(duì)Request/Response邏輯處理;而復(fù)雜的則使用OracleWorkflow來實(shí)現(xiàn)。版本查看EBS中有關(guān)OAF組件版本的方法如下登錄進(jìn)去EBS環(huán)境在頁面左下角,有“關(guān)于此頁”的鏈接,點(diǎn)擊進(jìn)入,(檔3.4.1)點(diǎn)擊“技術(shù)組件”,就會(huì)看到有關(guān)OAF組件版本的基本信息。第一個(gè)便是OAF本信息,它決定了開發(fā)工具的版本。OAF與ADF在開發(fā)OAF開始前,明確一個(gè)問題。有些部分同學(xué)會(huì)搞不懂OAF、ADF有什么聯(lián)系?ADF:ApplicationDeveloperFramework可以任何Java環(huán)境中運(yùn)行,屬于Oracle中間件。OAF:OracleApplicationFramework.只能在EBS環(huán)境中運(yùn)行,屬于OracleEBS。兩者都是基于MVC原理的框架二者本質(zhì)上并沒有什么區(qū)別。我覺得兩者關(guān)系有點(diǎn)類似于OracleForm與OracleEBS-Form。當(dāng)然ADF的技術(shù)范圍比較廣。學(xué)習(xí)基礎(chǔ)SQL、PL/SQL呵呵,不解釋。JAVA基礎(chǔ)OAF技術(shù)采用的是JAVA開發(fā)語言,所以在您學(xué)習(xí)OAF之前,必須先掌握J(rèn)AVA發(fā)語言的基礎(chǔ)知識(shí)J2EEMVC基礎(chǔ)(非必須)MVC代表的是ModuleView代表的是ControlOAF是基于工業(yè)標(biāo)準(zhǔn)J2EEMVC設(shè)計(jì)模式的,如果有J2EEMVC的基礎(chǔ),學(xué)習(xí)起來會(huì)很好理解OAF的結(jié)構(gòu)和對(duì)象。XML基礎(chǔ)(非必須)OAF中大量使用XML來完成配置,包括頁面結(jié)構(gòu)、lov、AMserver、VO、EO等等,但是XML結(jié)構(gòu)非常簡(jiǎn)單,OAF中也不用手動(dòng)編寫,看懂即可。環(huán)境搭建安裝JDeveloper下載p9879989_R12_GENERIC.zip(可以從metalink下載,EBSJDeveloper開發(fā)工具)將p9879989_R12_GENERIC.zip解壓到一個(gè)目錄下,如D:\(注意:解壓的目錄不能含有空格、中文等)jdevbin中是jdeveloper10gwithOAExtension的程序文件和OAF的類庫jdevdoc中存放Javadoc手冊(cè)和OAF培訓(xùn)文檔jdevhome存放OAF用戶文件和虛擬的OAF環(huán)境在Windows系統(tǒng)的環(huán)境變量中配置JDEV_USER_HOME為:D:\p9879989_R12_GENERIC\jdevhome\jdev\JDeveloper的執(zhí)行程序?yàn)閖devbin\jdev\bin\jdevw.exe,可將其建立桌面快捷方式初次打開JDeveloper,會(huì)有“是否從之前版本移植”的提示,選否打開之后,如果是win7系統(tǒng),會(huì)發(fā)現(xiàn)win7置文件jdevbin\jdev\bin\jdev.conf,將“AddVMOption-Dsun.java2d.noddraw=true”注釋打開即可。獲取了DBC文件登陸應(yīng)用層的$FND_SECURE目錄,下載*.dbc文件至jdevhome\jdev\dbc_files\secure打開dbc文件,找到APPS_JDBC_URL,可看到含有很多“\”,把所以的“\”都去掉(注:該操作只針對(duì)APPS_JDBC_URL屬性)配置數(shù)據(jù)庫連接打開JDeveloperApplications和Connections,Applications是項(xiàng)目目錄,Connections是數(shù)據(jù)庫目錄,進(jìn)入Connections右鍵Database>CreateDataConnection,可以為此Connection起個(gè)名字,我用默認(rèn)的DBConnection1,ConnectionType選默認(rèn)值Oracle(JDBC),下一步輸入鏈接數(shù)據(jù)庫的用戶名和密碼(一般情況用戶名選apps),Role為Normal,選擇DeployPassword,可記住密碼輸入連接數(shù)據(jù)庫的信息進(jìn)行測(cè)試,返回success則說明連接成功HelloWorld創(chuàng)建OAProject在JDeveloper左側(cè)導(dǎo)航欄進(jìn)入Applications右鍵Applications>NewOAWorkspace,為Application起個(gè)名字,其他默認(rèn)隨之會(huì)跳出新建OAProject的對(duì)話框,為Project起個(gè)名字,下一步勾選UseRepositoryforDesignTime,Connection選擇剛剛創(chuàng)建的DBConnection1,下一步DBCFileName選擇\jdevhome\jdev\dbc_files\secure目錄下的dbc文件,UserName和Password是登錄EBS使用的用戶名和密碼,ApplicationShortName和ResponsibilityKey是EBS環(huán)境定義職責(zé)時(shí)的應(yīng)用產(chǎn)品簡(jiǎn)稱和責(zé)任關(guān)鍵字,下一步,完成。設(shè)置項(xiàng)目選中剛創(chuàng)建的項(xiàng)目,Tools>ProjectPropertise,進(jìn)入設(shè)置界面在左側(cè),打開OracleApplications,下邊有三個(gè)子目錄,DatabaseConnections和RuntimeConnections已在上一步創(chuàng)建項(xiàng)目時(shí)進(jìn)行了設(shè)置,打開RunOption,一般OAOADeveloperModeandOADiagnostic,確定創(chuàng)建頁面至此,進(jìn)入OAF真正的主題右鍵項(xiàng)目,選New,選擇OAComponent>Page,確定Name輸入:HelloWorldPG,Package輸入:mycompany.oracle.apps.cux.hello.webui,一般Package輸入格式為:<company_name>.oracle.apps.<application_shortname>.<optional_modulename>.webui,其中應(yīng)用簡(jiǎn)稱依據(jù)項(xiàng)目而定,如ar、ap、eam,這里用cux代替點(diǎn)擊HelloWorldPG.xml,下邊出現(xiàn)Structure導(dǎo)航,這是該頁面的結(jié)構(gòu),可以看到含有一個(gè)region1,單擊,JDeveloper右側(cè)出現(xiàn)PropertyInspector導(dǎo)航,這是它對(duì)應(yīng)的屬性,可以進(jìn)行修改右鍵hello,點(diǎn)擊NewApplicationModulePackage輸入mycompany.oracle.apps.cux.hello.server,Name輸入HelloAM,下一步,保持默認(rèn)值,到完成修改region1屬性屬性WindowTitleTitleAM
值HelloWorldHellomycompany.oracle.apps.cux.hello.server.HelloAM
說明瀏覽器窗口名稱頁面標(biāo)題右鍵HelloWorldPG,run,運(yùn)行頁面可看到運(yùn)行結(jié)果至此,初步運(yùn)行成功!幾個(gè)問題關(guān)于dbc文件,從服務(wù)器下載后,需要進(jìn)行修改,已在1.2.2果運(yùn)行時(shí)瀏覽器報(bào)“找不到服務(wù)器”這樣的錯(cuò)誤,應(yīng)查看dbc文件,看DB_HOST和DB_PORT是否正確,能否ping通,以及APPS_JDBC_URL是否正確。運(yùn)行時(shí)出現(xiàn)“URL參數(shù),它將被忽略”錯(cuò)誤,頁面回到EBS主頁,如下圖JDeveloper中,Tools>EmbeddedOC4JServerPreferences,左側(cè)選擇Startup,選擇DefaultLocalIPAddress,重新運(yùn)行JDeveloperJDeveloper>PreferencesWebrandProxy,手動(dòng)設(shè)置瀏覽器位置即可添加item我們要在頁面添加一個(gè)輸入框和一個(gè)按鈕,方法是在HelloWorldPG的regin1加兩個(gè)item,分別設(shè)置屬性屬性IDItemPrompt
值 說明HelloNamemessageTextInputPleaseInputyourname:屬性值說明IDItemStyleGoBtnsubmitButton提交按鈕PromptGO按鈕顯示運(yùn)行HelloWorldPG,可以看到運(yùn)行結(jié)果,但是點(diǎn)擊GO,沒有任何反應(yīng)添加CO右鍵region1,點(diǎn)擊SetNewControllerPackageName輸入mycompany.oracle.apps.cux.hello.webui,ClassName輸入HelloWorldCO,一般來說,CO和Page名字設(shè)置相同,后綴固定,為CO、PG,之后還有EO、VO等等??梢钥吹絁Developer生成了一個(gè)HelloWorldCO的java文件,這個(gè)類似于web里的servelet,CO里默認(rèn)有兩個(gè)方法,processRequest和processFormRequest,processRequest在頁面加載時(shí)自動(dòng)調(diào)用,processFormRequest是在頁面提交時(shí)調(diào)用。我們?cè)趐rocessFormRequest方法里加上如下代碼(注:不要去掉super方法)if(pageContext.getParameter("GoBtn")!=null){//檢測(cè)GO按鈕被點(diǎn)擊StringuserNamepageContext.getParameter("HelloName");//獲得nameStringmessage="Hello,"+userName+"!";System.out.println(message);//輸出}再次運(yùn)行HelloWorldPG,輸入一個(gè)name,點(diǎn)擊GO,在JDeveloper后臺(tái)可看到輸出,如下圖至此,HelloWorld結(jié)束,相信大家對(duì)OAF有了初步了解。一個(gè)簡(jiǎn)單的查詢創(chuàng)建組件創(chuàng)建AM,名字為SearchAM,路徑為mycompany.oracle.apps.cux.search.server創(chuàng)建VO(ViewObject),名字為EmployeeVO,路徑為mycompany.oracle.apps.cux.search.server5步,SQLStatement,輸入如下SQLSELECTppf.person_id,ppf.date_of_birth,ppf.full_nameFROMper_people_fppfWHERESYSDATEBETWEENppf.effective_start_dateANDppf.effective_end_date然后下一步,選擇數(shù)據(jù)庫連接DBConnection1,確定,然后下一步到結(jié)束。雙擊AMAMEmployeeVO加入到SearchAM中,點(diǎn)擊確定。創(chuàng)建PG,名字為SimpleSearchPG,路徑為mycompany.oracle.apps.cux.search.webui修改SimpleSearchPG中的region1屬性屬性IDWindowTitleTitleAM
值 說明PageLayoutRN簡(jiǎn)單查詢員工mycompany.oracle.apps.cux.search.server.SearchAM基于結(jié)果的查詢?cè)赑ageLayoutRN下創(chuàng)建Region,修改屬性屬性 值 說明IDRegion
QueryRNqueryConstructionModeIncludeSimpleIncludeViewsPanelIncludeAdvancedPanel
resultsBasedSearchTrueTrueTrue
簡(jiǎn)單搜索高級(jí)搜索接下來創(chuàng)建員工列表Region右鍵QueryRN,NewRegionUsingWizard,AM選擇mycompany.oracle.apps.cux.search.server.SearchAMAvailableViewObjects列表中選擇視圖對(duì)象實(shí)例EmployeeVO,下一步,在RegionProperties頁中設(shè)置RegionID的值為ResultsTable,RegionStyle的值為table,ViewAttributesAvailableViewAttributes列表中的所有屬性到SelectedViewAttributes列表中下一步,在RegionItems頁中,設(shè)置如下的屬性值IDPersonIdDateOfBirthEmployeeNumberFullName下一步,完成。
PromptPersonIdBirthdayNumberName
StylemessageStyledTextmessageStyledTextmessageStyledTextmessageStyledText
DataTypeNUMBERDATEVARCHAR2VARCHAR23)修改ResultsTable屬性屬性ID值ResultsTable說明RegionStyletableAMDefinitionAdditional
必須為空,如果有值則刪除員工列表RecordsWidth
10100%
每頁顯示數(shù)量分別修改PersonId、EmployeeNumber屬性值屬性IDSearchAllowedSelectiveCriteria
值PersonIdTrueTrue
說明可搜索何條件,這個(gè)屬性IDSearchAllowedSelectiveCriteria
值 說明TrueTrue運(yùn)行,并且可以從數(shù)據(jù)庫查出正確數(shù)據(jù),表明成功。使用自動(dòng)客戶化查詢條件LOV種簡(jiǎn)單的查詢已不能滿足,接下來我們使用“自動(dòng)客戶化查詢條件”模式。首先修改QueryRN屬性,調(diào)整為“自動(dòng)客戶化查詢”模式屬性 值 說明IDIDQueryRNRegionStylequeryConstructionModeautoCustomizationCriteria自動(dòng)客戶化查詢IncludeSimplePanelTrueIncludeViewsPanelFalseIncludeAdvancedPanelFalse增加一個(gè)簡(jiǎn)單的查詢區(qū)域右鍵QueryRN,New>simpleSearchPanel,一個(gè)header區(qū)域(region2)和messageComponentLayout區(qū)域(region1)自動(dòng)創(chuàng)建改變r(jià)egion2的ID為SimpleSearchHdr改變r(jià)egion1的ID為EmployeeSimpleSearch創(chuàng)建PersonId查詢項(xiàng)目屬性值說明IDSearchPersonIdRegionStyle屬性值說明IDSearchPersonIdRegionStylemessageTextInput文本輸入DataTypeNUMBER與數(shù)據(jù)庫一致PromptPersonId創(chuàng)建EmployeeNumber查詢項(xiàng)目屬性值說明IDSearchEmployeeNumberRegionStyle屬性值說明IDSearchEmployeeNumberRegionStylemessageTextInput文本輸入DataTypeVARCHAR2與數(shù)據(jù)庫一致PromptEmployeeNumber建立查詢條件和查詢結(jié)果表之間的映射右鍵QueryComponents文件夾,NewsimpleSearchMappings,選擇simpleSearchMappings下的默認(rèn)映射,并設(shè)置其屬性為下列值:屬性屬性值說明IDSearchResultItem
PersonIdMapSearchPersonIdPersonId右鍵simpleSearchMappings,New>queryCriteriaMap,并設(shè)置屬性屬性IDSearchResultItem
值 說明EmployeeNumberMapSearchEmployeeNumberEmployeeNumber運(yùn)行SimpleSearchPG頁面添加LOV接下來,為PersonId添加LOV。在LOV中,PersonId的值來自fnd_user表的employee_id字段首先創(chuàng)建LOV所需的VO。名字為EmployeeIdVO,路徑為mycompany.oracle.apps.cux.search.lov.server,其它保持默認(rèn)值,一直下一步,到第5步,SQLStatement,輸入如下SQLSELECTfu.user_name,fu.employee_idFROMfnd_userfuWHEREfu.employee_idISNOTNULL雙擊AMEmployeeIDVO加入到SearchAM中,點(diǎn)擊確定。新建一個(gè)Region,作為L(zhǎng)OV的彈出頁面名字為EmployeeIdRN,路徑為mycompany.oracle.apps.cux.search.lov.webui,Style為listOfValues。新建后,設(shè)置EmployeeIdRN的屬性。屬性IDScopeAdvancedAllowed
值 說明EmployeeIdRNPublicTrue右鍵EmployeeIdRN,New>tableUsingWizardAM選SearchAM,VO選EmployeeIdVO下一步,在RegionProperties頁中設(shè)置RegionID的值為EmployeeIdVO,RegionStyle的值為table,ViewAttributesAvailableViewAttributes列表中的所有屬性到SelectedViewAttributes列表中下一步,在RegionItems頁中,設(shè)置如下的屬性值IDUserNameEmployeeId
PromptUserNameEmployee
Style DataTypemessageStyledText messageStyledText NUMBERUserName和EmployeeIdSearchAllowedSelectiveSearchCriteriaTrueLOV的設(shè)置SearchPersonId能夠使用LOV屬性值說明ID屬性值說明IDSearchPersonIdItemStylemessageLovInputExternalLOV/mycompany/oracle/apps/cueIdRNDisableValidationFalse值校驗(yàn)此時(shí)在SearchPersonId下有個(gè)lovMappings,這是lov取到值后映射到界面的設(shè)置,在它下可添加lovMap,默認(rèn)已經(jīng)有一個(gè),設(shè)置其屬性屬性屬性值說明IDPersonIdLovMapLOVRegionItemEmployeeIdLOV的值ReturnItemSearchPersonId返回到的itemCriteriaItemSearchPersonId運(yùn)行SimpleSearchPG頁面(注:瀏覽器可能會(huì)阻止彈出頁面,會(huì)有提示,允許彈出即可)應(yīng)用發(fā)布上傳進(jìn)入jdevhome\jdev\myclasses\mycompany\oracle\apps目錄。將整個(gè)cux目錄上傳到EBS應(yīng)用層的$JAVA_TOP\mycompany\oracle\apps手動(dòng)創(chuàng)建。編譯需要編譯的是頁面,有兩個(gè),SimpleSearchPG和EmployeeIdRN,編譯命令如下:javaoracle.jrad.tools.xml.importer.XMLImporter$JAVA_TOP/mycompany/oracle/apps/cux/search/webui/SimpleSearchPG.xml-rootdir$JAVA_TOP-usernameapps-passwordapps -dbconnectiono)(PORT=1521)))(CONNECT_DATA=(SID=VIS)))"javaoracle.jrad.tools.xml.importer.XMLImporter$JAVA_TOP/mycompany/oracle/apps/cux/search/lov/webui/EmployeeIdRN.xml-rootdir$JAVA_TOP-usernameapps-passwordapps -dbconnectiono)(PORT=1521)))(CONNECT_DATA=(SID=VIS)))"導(dǎo)入成功即可看到:掛菜單進(jìn)入EBS環(huán)境,應(yīng)用開發(fā)員>應(yīng)用產(chǎn)品>功能,添加功能類型HTML
值 說明CUXEMPCUX_員工查詢SSWAjsp函數(shù)OA.jsp?page=/mycompany/oracle/apps/cux/search/webui/SimpleSearchPG進(jìn)入:應(yīng)用開發(fā)員>應(yīng)用產(chǎn)品>菜單,新建菜單CUX_OAF,添加功能CUX_員工查詢,保存。將CUX_OAF作為子菜單添加到CUX_客戶化開發(fā)的主菜單即可。重啟oacore因?yàn)镺AF的運(yùn)行機(jī)制是應(yīng)用啟動(dòng)時(shí),會(huì)把所需的OAF界面、classjs等web元素全部加載到緩存中,所以O(shè)AF不像FORM那樣,編譯后即可顯示結(jié)果。關(guān)閉服務(wù)器cd$ADMIN_SCRIPTS_HOMEadoacorectl.shstop開啟服務(wù)器cd$ADMIN_SCRIPTS_HOMEadoacorectl.shstart查看結(jié)果正確運(yùn)行,發(fā)布成功!編碼規(guī)范OAF編碼規(guī)范OAF開發(fā)所有包和命名規(guī)則(類、方法和UI組件)都應(yīng)遵循了OAF文件標(biāo)準(zhǔn)。主要有:OracleBrowserLook-and-Feel(BLAF)UI準(zhǔn)則這是Oracle公司為基于瀏覽器應(yīng)用所設(shè)計(jì)的UI標(biāo)準(zhǔn)OracleApplicationsJava編碼標(biāo)準(zhǔn)在Oracle產(chǎn)品中編寫Java代碼的標(biāo)準(zhǔn)和準(zhǔn)則OAF模型編碼標(biāo)準(zhǔn)使用在MVC應(yīng)用中的OAF模型編碼標(biāo)準(zhǔn)OAF視圖編碼標(biāo)準(zhǔn)使用在MVC應(yīng)用中的OAF視圖編碼標(biāo)準(zhǔn)OAF控制器編碼標(biāo)準(zhǔn)使用在MVC應(yīng)用中的OAF控制器編碼標(biāo)準(zhǔn)JSR227SpecificationJava投票通過的Java規(guī)范。JCP官方主頁:/en/home/index。Oracle號(hào)稱或者是JSR227JSR227到底規(guī)范了什么呢?呵呵!原來JSR227是Oracle發(fā)起的。很有意思的是IBMBEA投了反對(duì)票(BEA還未被Oracle收購!)。深入淺出OAF基礎(chǔ)篇實(shí)現(xiàn)增刪改創(chuàng)建客戶化表創(chuàng)建兩張客戶化表,部門和員工,為頭行結(jié)構(gòu)。部門表CREATETABLECUX.CUX_OAF_TEST_DEPARTMENT(DEPARTMENT_IDNUMBERNOTNULL,DEPARTMENT_NUMBERVARCHAR2(100)NOTNULL,DEPARTMENT_NAMEVARCHAR2(100)NOTNULL,DEPARTMENT_DESCVARCHAR2(240),CREATION_DATEDATEDEFAULTSYSDATENOTNULL,CREATED_BYNUMBERDEFAULT-1NOTNULL,LAST_UPDATED_BYNUMBERDEFAULT-1NOTNULL,LAST_UPDATE_DATEDATEDEFAULTSYSDATENOTNULL,LAST_UPDATE_LOGINNUMBER,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));ALTERTABLECUX.CUX_OAF_TEST_DEPARTMENTADDCONSTRAINTCUX_OAF_TEST_DEPARTMENT_PKPRIMARYKEY(DEPARTMENT_ID);CREATEUNIQUEINDEXCUX.CUX_OAF_TEST_DEPARTMENT_U1ONCUX.CUX_OAF_TEST_DEPARTMENT(DEPARTMENT_NUMBER)TABLESPACECUXIDX;CREATESEQUENCECUX.CUX_OAF_TEST_DEPARTMENT_SSTARTWITH10001;CREATESYNONYMAPPS.CUX_OAF_TEST_DEPARTMENT_SFORCUX.CUX_OAF_TEST_DEPARTMENT_S;CREATESYNONYMAPPS.CUX_OAF_TEST_DEPARTMENTFORCUX.CUX_OAF_TEST_DEPARTMENT;員工表CREATETABLECUX.CUX_OAF_TEST_EMPLOYEE(EMPLOYEE_IDNUMBERNOTNULL,EMPLOYEE_NUMBERVARCHAR2(100)NOTNULL,EMPLOYEE_NAMEVARCHAR2(100)NOTNULL,EMPLOYEE_DESCVARCHAR2(240),EFFECTIVE_DATE_FROMDATENOTNULL,EFFECTIVE_DATE_TODATE,DEPARTMENT_IDNUMBERNOTNULL,CREATION_DATEDATEDEFAULTSYSDATENOTNULL,CREATED_BYNUMBERDEFAULT-1NOTNULL,LAST_UPDATED_BYNUMBERDEFAULT-1NOTNULL,LAST_UPDATE_DATEDATEDEFAULTSYSDATENOTNULL,LAST_UPDATE_LOGINNUMBER,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));ALTERTABLECUX.CUX_OAF_TEST_EMPLOYEEADDCONSTRAINTCUX_OAF_TEST_EMPLOYEE_PKPRIMARYKEY(EMPLOYEE_ID);CREATEUNIQUEINDEXCUX.CUX_OAF_TEST_EMPLOYEE_U1ONCUX.CUX_OAF_TEST_EMPLOYEE(EMPLOYEE_NUMBER)TABLESPACECUXIDX;CREATESEQUENCECUX.CUX_OAF_TEST_EMPLOYEE_SSTARTWITH10001;CREATESYNONYMAPPS.CUX_OAF_TEST_EMPLOYEE_SFORCUX.CUX_OAF_TEST_EMPLOYEE_S;CREATESYNONYMAPPS.CUX_OAF_TEST_EMPLOYEEFORCUX.CUX_OAF_TEST_EMPLOYEE;插入這里以新建部門為例,并實(shí)現(xiàn)部門和員工的關(guān)聯(lián),從而可新建員工。創(chuàng)建AM。名稱為TestAM,路徑為mycompany.oracle.apps.cux.test.server。創(chuàng)建EOtest,NewEntityObjectDepartmentEO,路徑為mycompany.oracle.apps.cux.test.schema.server,SchemaObject為CUX.CUX_OAF_TEST_DEPARTMENT下一步,點(diǎn)擊NewfromTable,一般會(huì)勾選所有字段,確定。一直下一步,到第4步,勾選CreateMethod,ValidationMethod和RemoveMethod。下一步到完成。使EO在創(chuàng)建時(shí),其ID自動(dòng)獲取sequence的值點(diǎn)擊DepartmentEO,雙擊DepartmentEOImpl.java找到方法publicvoidcreate(AttributeListattributeList),在super.create(attributeList);后加入:this.setDepartmentId(this.getOADBTransaction().getSequenceValue("CUX_OAF_TEST_DEPARTMENT_S"));創(chuàng)建VOmycompany.oracle.apps.cux.test.server,這里的VOEO擇剛剛創(chuàng)建的DepartmentEO下一步,選擇所有屬性一路下一步,到完成。將DepartmentVO加入到TestAM中,確定。創(chuàng)建PG。名稱為CreateOrUpdateDepartmentPG,路徑為mycompany.oracle.apps.cux.test.webui。從名稱可以看出,這個(gè)頁面進(jìn)行部門的添加和修改??煽吹絼?chuàng)建了頁面,點(diǎn)擊region1,對(duì)其屬性進(jìn)行修改屬性AMWindowTitleTitle
值 說明mycompany.oracle.apps.cux.test.server.TestAM添加/修改部門Oracle-CUX部門管理右鍵region1,New—Region,并設(shè)置如下屬性屬性值說明IDRegionStyleDeptRNmessageComponentLayout網(wǎng)格組件Width60%寬度Rows1行Columns2列在DeptRN下添加三個(gè)item,并設(shè)置屬性,使其關(guān)聯(lián)VO屬性IDItemStyleRequiredMaximumPromptViewInstance
值messageTextInputyes100部門編號(hào)DepartmentVO
說明必輸與數(shù)據(jù)庫一致VO的名稱ViewAttributeViewAttributeDepartmentNumberVO的字段屬性屬性值說明IDDepartmentDescItemStylemessageTextInputMaximumLength240與數(shù)據(jù)庫一致Prompt部門描述ViewInstanceDepartmentVOVO的名稱ViewAttributeDepartmentDescVO的字段屬性屬性值說明IDDepartmentNameItemStylemessageTextInputRequiredyes必輸MaximumLength100與數(shù)據(jù)庫一致Prompt部門名稱ViewInstanceDepartmentVOVO的名稱ViewAttributeDepartmentNameVO的字段這樣,就添加了三個(gè)輸入框。然后,我們添加一個(gè)頁面button屬性值說明IDPageBtnRNRegionStyle屬性值說明IDPageBtnRNRegionStylepageButtonBar屬性值說明IDDepartmentNameItemStyle屬性值說明IDDepartmentNameItemStylesubmitButtonPrompt 保存運(yùn)行頁面CreateOrUpdateDepartmentPG,看一下效果右鍵region1,SetNewController,路徑為mycompany.oracle.apps.cux.test.webuiCreateOrUpdateDepartmentCO,可看到region1多了控制器屬性,并生成了對(duì)應(yīng)的java文件編輯CreateOrUpdateDepartmentCO方法,是的在進(jìn)入頁面的時(shí)候,VO創(chuàng)建一行數(shù)據(jù),點(diǎn)擊保存時(shí),將其保存到數(shù)據(jù)庫改變processRequest方法,此方法在頁面進(jìn)入時(shí)調(diào)用在cessRequest(pageContext,webBean);后添加代碼://獲得AMOAApplicationModuleam=pageContext.getApplicationModule(webBean);//反射方式新建一行if(!pageContext.isFormSubmission()){am.invokeMethod("deptNewRow");}改變processFormRequest方法,此方法在頁面提交時(shí)調(diào)用在cessFormRequest(pageContext,webBean);后添加代碼:OAApplicationModuleam=pageContext.getApplicationModule(webBean);if(pageContext.getParameter("SaveBtn")!=null){am.invokeMethod("save");}點(diǎn)擊TestAM,雙擊打開TestAMImpl添加方法deptNewRow和save,都為publicpublicvoiddeptNewRow(){DepartmentVOImplvo=getDepartmentVO();if(!vo.isPreparedForExecution()){vo.setMaxFetchSize(0);vo.executeQuery();}Rowrow=vo.createRow();vo.insertRow(row);row.setNewRowState(Row.STATUS_INITIALIZED);}publicvoidsave(){this.getTransaction().commit();DepartmentVOImplvo=getDepartmentVO();ObjectdeptNum=vo.first().getAttribute("DepartmentNumber");//拋出消息MessageToken[]tokens={newMessageToken("DEPTNUMBER",deptNum.toString())};thrownewOAException("CUX","CUX_DEPT_SAVE_SUCCESS",tokens,OAException.CONFIRMATION,null);}添加一條消息CUX_DEPT_SAVE_SUCCESS&DEPTNUMBER保存成功!“&DEPTNUMBER”是占位符,前后應(yīng)有空格,是可以替換的變量。測(cè)試點(diǎn)擊保存,保存成功,后臺(tái)查表頭行關(guān)聯(lián)已經(jīng)實(shí)現(xiàn)了部門的插入,部門下面的員工可以與部門進(jìn)行關(guān)聯(lián),實(shí)現(xiàn)類似Form行結(jié)構(gòu)首先創(chuàng)建員工EO,方法同創(chuàng)建部門EO,這里就省略啦。注意修改create方法。然后創(chuàng)建員工VO,方法同創(chuàng)建部門VO,這里也省略啦。注意命名規(guī)范。先別急著將EmployeeVO加入到TestAMVL,然后通過VL將EmployeeVO加入到TestAM。右鍵test下的server,NewViewLink,路徑為mycompany.oracle.apps.cux.test.serverDeptEmpVL,下一步,選擇對(duì)應(yīng)關(guān)系1對(duì)多,左側(cè)選擇DepartmentVO下的DepartmentId,右側(cè)選擇EmployeeVO下的DepartmentId,然后點(diǎn)擊Add,如圖然后下一步到完成。雙擊EmployeeVOviaDeptEmpVLDepartmentVO,將其加入到AM中如果右側(cè)不選中DepartmentVO,會(huì)彈出提示框,說EmployeeVOviaDeptEmpVL只能加入到DepartmentVO下,選Yes即可。這樣,EmployeeVO就通過DeptEmpVL加入到了AM中。接下來,我們?cè)谥暗腃reateOrUpdateDepartmentPG頁面,添加操作Employee的Region,一個(gè)部門對(duì)應(yīng)多個(gè)員工,所以要?jiǎng)?chuàng)建的Region應(yīng)該是支持多行數(shù)據(jù)的,我們使用table。在region1下創(chuàng)建一個(gè)region,并設(shè)置屬性屬性IDRegionText
值 說明EmpRNHeader員工信息右鍵EmpRN,New,RegionUsingWizard在彈出的對(duì)話框里,跳過引導(dǎo)項(xiàng),AM選擇TestAM,VO選擇EmployeeVO下一步,RegionStyle選擇table,下一步,屬性選擇EmployNumber,EmployName,EmployDesc,EffectiveDateFrom,EffectiveDateTo下一步,設(shè)置這五個(gè)字段的Prompt效期從,有效期至下一步,完成??煽吹絼?chuàng)建了一個(gè)table類型的region,其下包含五個(gè)item,并且其Prompt、MaximumLength、ViewInstance、ViewAttribute等屬性已設(shè)置好。設(shè)置員工編號(hào),員工姓名,有效期從的屬性Required為也yes,與數(shù)據(jù)庫保持一致。運(yùn)行頁面覺得table寬度不夠,可以設(shè)置一下,建議使用百分比添加一個(gè)按鈕,作用是添加一行員工在EmpRN下添加一個(gè)RN,ID為EmpBtnRN,RegionStyle為flowLayout在EmpBtnRN下添加一個(gè)item,設(shè)置屬性屬性IDItemPrompt
值 說明AddEmpsubmitButton添加員工在CreateOrUpdateDepartmentCO的processFormRequest方法里添加對(duì)AddEmp按鈕的監(jiān)聽elseif(pageContext.getParameter("AddEmp")!=null){am.invokeMethod("addEmp");}在testAMImpl里,添加方法addEmppublicvoidaddEmp()EmployeeVOImplvo=getEmployeeVO();Rowrow=vo.createRow();vo.insertRowAtRangeIndex(vo.getRowCountInRange(),row);row.setNewRowState(Row.STATUS_INITIALIZED);}測(cè)試頁面,運(yùn)行CreateOrUpdateDepartmentPG部門表員工表刪除我們?cè)诿總€(gè)員工信息的最后添加一個(gè)刪除圖標(biāo),點(diǎn)擊可以刪除該行記錄在EmployeeVO下添加一個(gè)item,設(shè)置屬性屬性IDItemStylePromptImageURIActionEventParameters
值DeleteEmpImgimage刪除deleteicon_enabled.giffireActiondeleteEmpEmpId O.EmployeeId}
說明參數(shù)Submit true 注意:不是commit在CreateOrUpdateDepartmentCO的processFormRequest方法里添加代碼,用來監(jiān)聽deleteEmp事件elseif("deleteEmp".equals(pageContext.getParameter(EVENT_PARAM))){StringempId=pageContext.getParameter("EmpId");am.invokeMethod("deleteEmp",newString[]{empId});}在testAMImpl里添加方法deleteEmppublicvoiddeleteEmp(StringempId)EmployeeVOImplvo=getEmployeeVO();Rowrow;intRowCount=vo.getRowCount();for(inti=0;i<RowCount;i++){row=vo.getRowAtRangeIndex(i);Stringid=row.getAttribute("EmployeeId").toString();if(id.equals(empId)){row.remove();break;}}}測(cè)試頁面,先添加兩行,保存查看數(shù)據(jù)庫刪除一行,保存查看數(shù)據(jù)庫,只有一條數(shù)據(jù),說明刪除成功查詢擴(kuò)展頁面DepartmentQueryPG和DepartmentQueryVO下面對(duì)次查詢進(jìn)行一些擴(kuò)展。一些情況的查詢需要代碼輔助,比如范圍查詢,查詢包含某一員工的部門等等。DateTypeDate,如下圖此時(shí)使用單純的queryCriteriaMap已經(jīng)不能滿足要求,這需要在點(diǎn)擊“搜索”時(shí),對(duì)VO增加限制,首先為該頁面添加一個(gè)CO,取名DepartmentQueryCO,在processFormRequest方法后添加“搜索”按鈕的捕捉事件。OAQueryBeanqueryRN=(OAQueryBean)webBean.findIndexedChildRecursive("QueryRN");System.out.println(queryRN.getCurrentSearchPanel())//當(dāng)前搜索面板System.out.println(queryRN.getGoButtonName());//搜索按鈕名稱if(SEARCH.equals(queryRN.getCurrentSearchPanel())&&pageContext.getParameter("customizeSubmitButton")!=null){System.out.println("eee");}這是先做個(gè)測(cè)試,確定捕捉到了“搜索”按鈕,而且屏蔽其他的提交事件。VO首先修改DepartmentQueryCO的processFormRequest方法OAApplicationModuleam=pageContext.getApplicationModule(webBean);OAQueryBeanqueryRN=(OAQueryBean)webBean.findIndexedChildRecursive("QueryRN");if(SEARCH.equals(queryRN.getCurrentSearchPanel())&&pageContext.getParameter("customizeSubmitButton")!=null){OAMessageDateFieldBeancreationDateFrom=(OAMessageDateFieldBean)webBean.findChildRecursive("CreationDateFrom");OAMessageDateFieldBeancreationDateTo=(OAMessageDateFieldBean)webBean.findChildRecursive("CreationDateTo");Objectfrom=creationDateFrom.getValue(pageContext);Objectto=creationDateTo.getValue(pageContext);am.invokeMethod("QueryCreationDate",newString[]{from==null?null:from.toString().substring(0,10),to==null?null:to.toString().substring(0,10)});}然后在TestAMImpl里添加方法QueryCreationDatepublicvoidQueryCreationDate(Stringfrom,Stringto){StringfromDate=from==null?"trunc(creation_date)":"to_date('"+from+"','yyyy-mm-dd')";StringtoDate=to==null?"trunc(creation_date)":"to_date('"+to+"','yyyy-mm-dd')";StringwhereClause="trunc(creation_date)between"+fromDate+"and"+toDate;DepartmentQueryVOImplvo=getDepartmentQueryVO();vo.setWhereClause(null);vo.setWhereClause(whereClause);vo.executeQuery();}測(cè)試,成功如果有業(yè)務(wù)需求是SearchDeptNum和SearchDeptName至少輸入一個(gè),一個(gè)屬性就可以辦到。設(shè)置SearchDeptNum和SearchDeptName的屬性SelectiveSearchCriteria為True,測(cè)試,二者都不輸入,就可以看到拋出錯(cuò)誤查詢界面添加按鈕,創(chuàng)建部門,點(diǎn)擊按鈕實(shí)現(xiàn)頁面調(diào)整到CreateOrUpdateDepartmentPG頁面,并創(chuàng)建一行數(shù)據(jù)。右鍵部門table,New,tableActions,創(chuàng)建一個(gè)Region在其下創(chuàng)建一個(gè)item,并設(shè)置屬性屬性IDItemPrompt
值 說明CreateDepartmentsubmitButton創(chuàng)建部門運(yùn)行頁面,預(yù)覽一下然后,在CO里編寫其監(jiān)聽事件elseif(pageContext.getParameter("CreateDepartment")!=null){pageContext.forwardImmediately("OA.jsp?page=/mycompany/oracle/apps/cux/test/webui/CreateOrUpdateDepartmentPG",null,OAWebBeanConstants.KEEP_MENU_CONTEXT,null,null,true,OAWebBeanConstants.ADD_BREAD_CRUMB_NO);}測(cè)試,頁面進(jìn)行了調(diào)整,輸入一個(gè)數(shù)據(jù),保存成功添加鏈接,進(jìn)入修改界面在部門的table下,添加一個(gè)item,并設(shè)置屬性屬性IDItemStylePromptImageURIActionEventParameters
值UpdateDeptImgimage修改updateicon_enabled.giffireActionupdateDeptDeptId ${oa.DepartmentmentId}
說明參數(shù)Submit預(yù)覽一下效果
true 注意:不是commit然后在CO里添加監(jiān)聽事件elseif("updateDept".equals(pageContext.getParameter(EVENT_PARAM)))StringdeptId=pageContext.getParameter("DeptId");HashMapmap=newHashMap();map.put("operation","update");map.put("deptId",deptId);pageContext.forwardImmediately("OA.jsp?page=/mycompany/oracle/apps/cux/test/webui/CreateOrUpdateDepartmentPG",null,OAWebBeanConstants.KEEP_MENU_CONTEXT,null,map,true,OAWebBeanConstants.ADD_BREAD_CRUMB_NO);}CreateOrUpdateDepartmentPG頁面初始化的時(shí)候,需要判斷,修改CreateOrUpdateDepartmentCO的processRequest方法OAApplicationModuleam=pageContext.getApplicationModule(webBean);Stringoperation=pageContext.getParameter("operation");StringdeptId=pageContext.getParameter("deptId");if(!pageContext.isFormSubmission()){if("update".equals(operation)&&deptId!=null){am.invokeMethod("deptQuery",newString[]{deptId});}else{am.invokeMethod("deptNewRow");}}然后,在TestAMImpl里,添加方法deptQuerypublicvoiddeptQuery(StringdeptId){DepartmentVOImplvo=getDepartmentVO();vo.setWhereClause("DEPARTMENT_ID=:1");vo.setWhereClauseParam(0,deptId);vo.executeQuery();}測(cè)試,點(diǎn)擊更新頁面跳轉(zhuǎn),并且數(shù)據(jù)已加載出來修改用到了Oracle提供的PPR技術(shù),在本文檔3.2會(huì)有介紹。數(shù)據(jù)校驗(yàn)Oracle內(nèi)置校驗(yàn)Web客戶端校驗(yàn)等等,這些如果輸入有誤,頁面會(huì)直接彈出警告,如在點(diǎn)擊按鈕保存時(shí),就會(huì)先進(jìn)行頁面校驗(yàn),如果想取消該校驗(yàn),設(shè)置屬性DisableClientSideValidation為False即可服務(wù)器端校驗(yàn)這里主要是EO的校驗(yàn),EO的類型,是否必輸?shù)鹊?,在保存和更新前進(jìn)行校驗(yàn)我們這里把部門名稱的頁面字段設(shè)置為非必輸,然后不輸人任何值,進(jìn)行保存拋出異常在開發(fā)的過程中,難免會(huì)有一些數(shù)據(jù)庫的變動(dòng),比如某個(gè)字段之前是必輸,EO經(jīng)創(chuàng)建好,由于業(yè)務(wù)需要,該字段變?yōu)榉潜剌?,但是此時(shí)EO沒變,還是必輸,這就造成了錯(cuò)誤,解決辦法是,可以讓EO與數(shù)據(jù)庫進(jìn)行同步,右鍵EO這樣就可以啦如果想取消該校驗(yàn),設(shè)置屬性DisableServerSideValidation為False即可手動(dòng)校驗(yàn)Oracle自己的校驗(yàn)。CO都是從OAControllerImplprocessFormRequestprocessFormData,加入自己的校驗(yàn)。所以在CreateOrUpdateDepartmentCO添加方法publicvoidprocessFormData(OAPageContextpageContext,OAWebBeanwebBean){cessFormData(pageContext,webBean);}我們自己創(chuàng)造一個(gè)業(yè)務(wù)需求,比如部門編號(hào)至少4單if(pageContext.getParameter("SaveBtn")!=null){OAMessageTextInputBeandeptNumBean=(OAMessageTextInputBean)webBean.findChildRecursive("DepartmentNumber");ObjectdeptNum=deptNumBean.getValue(pageContext);if(deptNum.toString().length()<4){thrownewOAException("CUX","CUX_DEPTNUM_MIN_LENGTH",null,OAException.CONFIRMATION,null);}}添加一條消息CUX_DEPTNUM_MIN_LENGTH4位!”測(cè)試,成功常用布局請(qǐng)參考文檔,文件位置是jdevdoc\index.htmflowLayout和stackLayout別不大。二者的區(qū)別在底層,所用的數(shù)據(jù)結(jié)構(gòu)不一樣,一個(gè)是數(shù)組,一個(gè)是堆棧。messageComponentLayout這個(gè)布局使用比較多,通常我們布局頁面的時(shí)候,會(huì)遇到諸如“m行n格布局,這時(shí)候可以使用此布局。此布局局限在規(guī)范的表格布局,暫不支持合并單元格。它在放置組件的時(shí)候,是豎著排列的,這個(gè)和我們正常的思維有點(diǎn)不一致。我做一個(gè)3行2列的例子布局效果header和hideShowHeader先看一下header效果,text屬性為“header測(cè)試”這個(gè)布局用來對(duì)界面進(jìn)行分塊,使界面美觀、清晰。而hideShowHeader可以折疊和展開,首先在VO里添加一個(gè)自定義屬性,取名HideShowFlag,類型為Boolean(true/false)修改hideShowHeaderChildViewInstance和ChildViewAttribute測(cè)試,成功table和tableLayouttable布局比較簡(jiǎn)單,也很常用,常見于多個(gè)數(shù)據(jù)的顯示,之前已使用,這里不多說table下其實(shí)還可以有table,即所謂的tableintable,比如一個(gè)部門下有多個(gè)員工,在搜索出部門的同時(shí),也要同時(shí)看到員工,如下圖我們有兩個(gè)VO,部門VO和員工VO,并且新建了VL,連接兩個(gè)VO右鍵查詢界面的DepartmentQueryVO,New,detail會(huì)出現(xiàn)detail和一個(gè)region,修改region為flowLayout,利用向?qū)г谄湎绿砑訂T工table,VO使用EmployeeVO1,所有item為messageStyledTexttableEmployeeVO,設(shè)置屬性ViewLinkInstance的值為DeptqueryEmpVL1單擊查詢界面的DepartmentQueryVO,設(shè)置屬性DetailViewAttribute屬性為HideShowFlag,DepartmentQueryVO中如果沒有該屬性,添加一個(gè),類型為Boolean測(cè)試,成功tableLayout則是可以針對(duì)每行,每個(gè)單元格進(jìn)行編輯的布局,每個(gè)tableLayout下可以新建rowLayout,每個(gè)rowLayout下可以新建cellFormat,cellFormat可以進(jìn)行合并單元格,設(shè)置顯示的對(duì)其方式等等屬性,比較靈活。query這是查詢控件,使用方法已在本文檔1.4.2和1.4.3進(jìn)行了介紹。switcher情況就需要使用switcher來進(jìn)行切換雙擊DepartmentQueryVO,左側(cè)選擇SQLStatement,修改SQL語句在sql里添加一個(gè)查詢字段decode(t.created_by,fnd_global.USER_ID,'UpdateDeptImg','DisUpdateDeptImg')can_update_dept點(diǎn)擊應(yīng)用,可看到DepartmentQueryVO里多了字段CanUpdateDept右鍵查詢界面的DepartmentQueryVO,New,switcher修改switcher屬性屬性IDRegionStylePromptViewInstanceViewAttribute
值 說明CanUpdateDeptswitcher更新DepartmentQueryVOCanUpdateDept新建switcher時(shí),會(huì)自動(dòng)在其下新建一個(gè)case,將查詢界面DepartmentQueryVO下的UpdateDeptImg拖拽到switcher下的case下面拖拽后在剛剛創(chuàng)建的switcher下新建一個(gè)case在case下新建一個(gè)item,并更改屬性屬性IDItemStyleImage
值 說明DisUpdateDeptImgimageupdateicon_disabled.gif運(yùn)行查詢界面,測(cè)試,成功pageButtonbarCreateOrUpdateDepartmentPG界面已經(jīng)使用過,沒有特別的地方,其下一般添加button或submitButton,特點(diǎn)是界面上下都會(huì)顯示,自動(dòng)靠右。subTabLayout在數(shù)據(jù)量較大或者需要進(jìn)行分類顯示時(shí),經(jīng)常使用tab新建一個(gè)region,RegionStyle選subTabLayout在其下新建三個(gè)region,每個(gè)region下新建一個(gè)item右鍵剛剛創(chuàng)建的subTabLayout,New,subTabs在subTabBar1下新建三個(gè)link,ID設(shè)置為link1、link2,link3,Text設(shè)置為tab1、tab2、tab3,三個(gè)link與之前新建的三個(gè)Region相對(duì)應(yīng)測(cè)試,成功shuttle這個(gè)組件只看名字比較迷茫,不知道什么東東,先來看看界面首先保證該組件所在page的form屬性為true創(chuàng)建一個(gè)region,設(shè)置一些必要的屬性,如id等,主要設(shè)置:Region的類型設(shè)置為shuttleIndexedChildren屬性為trueAvailableHeader屬性為空SelectedHeader屬性為空OrderingAllowed屬性為trueshuttleleading設(shè)置一些必要屬性,如id等,主要設(shè)置:Multi-SelectAllowed屬性為truePicklistViewInstance屬性為VOPicklistDisplayAttribute屬性為VO要顯示的屬性PicklistValueAttribute屬性為VO要返回的屬性shuttletrailingleadingVO,也可以不用。區(qū)別在于初始化時(shí)會(huì)不會(huì)顯示內(nèi)容。運(yùn)行除此以外,還可以新建leadingFooter和trailingFooterleading和trailing下邊顯示CO控制OADefaultShuttleBeanshuttle=(OADefaultShuttleBean)webBean.findChildRecursive("UserList");String[]trailingItems=shuttle.getTrailingListOptionValue
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版房屋買賣合同續(xù)約委托書范本3篇
- 2025年推土機(jī)租賃項(xiàng)目環(huán)境保護(hù)與修復(fù)合同3篇
- 二零二五年度民爆物品裝卸作業(yè)安全設(shè)施升級(jí)改造合同4篇
- 詞匯對(duì)話課程設(shè)計(jì)案例
- 年度彩色噴涂紙市場(chǎng)分析及競(jìng)爭(zhēng)策略分析報(bào)告
- 2025個(gè)人藝術(shù)品租賃交易合同4篇
- 南京eps施工方案
- 2025年度石油采礦權(quán)抵押融資協(xié)議范本3篇
- 2025年度個(gè)人教育培訓(xùn)課程及支付協(xié)議4篇
- 2025年版?zhèn)€人市政工程勞務(wù)合同范本4篇
- 第1本書出體旅程journeys out of the body精教版2003版
- 臺(tái)資企業(yè)A股上市相關(guān)資料
- 電 梯 工 程 預(yù) 算 書
- 羅盤超高清圖
- 參會(huì)嘉賓簽到表
- 機(jī)械車間員工績(jī)效考核表
- 2.48低危胸痛患者后繼治療評(píng)估流程圖
- 人力資源管理之績(jī)效考核 一、什么是績(jī)效 所謂績(jī)效簡(jiǎn)單的講就是對(duì)
- 山東省醫(yī)院目錄
- 云南地方本科高校部分基礎(chǔ)研究
- 廢品管理流程圖
評(píng)論
0/150
提交評(píng)論