Oracle之APEX4深入開(kāi)發(fā)指南_第1頁(yè)
Oracle之APEX4深入開(kāi)發(fā)指南_第2頁(yè)
Oracle之APEX4深入開(kāi)發(fā)指南_第3頁(yè)
Oracle之APEX4深入開(kāi)發(fā)指南_第4頁(yè)
Oracle之APEX4深入開(kāi)發(fā)指南_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Oralce之APEX開(kāi)發(fā)指南OracleERPAPEX開(kāi)發(fā)指南Author: 劉俊杰CreationDate: createdate\@"MMMMd,yyyy"April10,2014LastUpdated: savedate\@"MMMMd,yyyy"June3,2014DocumentRef: <DocumentReferenceNumber>Version: 1.0Approvals:<Approver1><Approver2> DocumentControlChangeRecordSECTIONDateAuthorVersionChangeReferenceCREATEDATE\@"d-MMM-yy"10-Apr-13Junjie.liu1.0NoPreviousDocumentReviewersNamePositionDistributionCopyNo.NameLocationNoteToHolders:Ifyoureceiveanelectroniccopyofthisdocumentandprintitout,pleasewriteyournameontheequivalentofthecoverpage,fordocumentcontrolpurposes.Ifyoureceiveahardcopyofthisdocument,pleasewriteyournameonthefrontcover,fordocumentcontrolpurposes.ContentsPAGE10DocumentControl ii1. APEX之系統(tǒng)探究 21.1. APEX簡(jiǎn)介 21.2. 環(huán)境搭建 31.3. APEX賬戶管理 61.4. 待定 82. APEX–開(kāi)發(fā) 92.1. 開(kāi)發(fā)概要 92.2. 頁(yè)面布局、美化 102.3. APEX控件 132.4. Report常用增刪改 162.5. 文件上傳下載 192.6. 使用CSS與JS 252.7. 圖表、報(bào)表 282.8. ApplicationExpressFreePlugins 352.9. APEX部署 373. APEX之調(diào)試、常用技巧、API 394. APEX–EBS集成 404.1. EBS中配置APEX頁(yè)面調(diào)用 405. Reference 436. OpenandClosedIssuesforthisDeliverable 44OpenIssues 44ClosedIssues 44APEX之系統(tǒng)探究APEX簡(jiǎn)介概述OracleApplicationExpress是基于Web瀏覽器的網(wǎng)絡(luò)即時(shí)開(kāi)發(fā)、部署、運(yùn)行。OracleApplicationExpress所有頁(yè)面都是存儲(chǔ)于數(shù)據(jù)庫(kù),類似于EBS的Form個(gè)性化。OracleApplicationExpress具有易用性、靈活性及Web的安全性、集成性、可伸縮。體系結(jié)構(gòu)ApplicationExpress使用用戶計(jì)算機(jī)上的Web瀏覽器通過(guò)Web監(jiān)聽(tīng)程序與Oracle數(shù)據(jù)庫(kù)通信。開(kāi)發(fā),部署或運(yùn)行時(shí)不需要瀏覽器之外的任何其他客戶機(jī)軟件。ApplicationExpress頁(yè)使用瀏覽器中的HTML來(lái)呈現(xiàn)。頁(yè)請(qǐng)求和提交發(fā)送到Oracle數(shù)據(jù)庫(kù)中的ApplicationExpress引擎。運(yùn)行環(huán)境瀏覽器要求Web瀏覽器必須支持Java腳本和HTML4.0和CSS1.0標(biāo)準(zhǔn)。OracleApplicationExpress建議使用以下瀏覽器進(jìn)行開(kāi)發(fā)或查看應(yīng)用程序:微軟InternetExplorer7.0或更高版本MozillaFirefox3.6或更高版本谷歌Chrome4.0或更高版本蘋(píng)果Safari4.0或更高版本數(shù)據(jù)庫(kù)及HTTP服務(wù)器要求OracleDatabase11grelease1or2,自帶pl/sql網(wǎng)關(guān)配置比較簡(jiǎn)單,能夠直接提供HTTP服務(wù)器的功能。OracleDatabase10g,必須使用mod_plsql插件或是OracleApplicationExpress監(jiān)聽(tīng)器來(lái)連接專業(yè)的HTTP服務(wù)器。運(yùn)行機(jī)制ApplicationExpress完全駐留在Oracle的數(shù)據(jù)庫(kù)中,它是由存儲(chǔ)在數(shù)據(jù)表中的數(shù)據(jù)和大量的pl/sql對(duì)象組成.對(duì)于客戶瀏覽器發(fā)送的URL請(qǐng)求解析成pl/sql調(diào)用,數(shù)據(jù)庫(kù)處理pl/sql調(diào)用,并將結(jié)果以HTML形式返回瀏覽器(sys.htp.p)。每個(gè)頁(yè)面的結(jié)果都在新的會(huì)話中,因此當(dāng)ApplicationExpress引擎處理或者呈現(xiàn)一個(gè)頁(yè)面的時(shí)候才會(huì)消耗數(shù)據(jù)庫(kù)資源ApplicationExpress引擎包括:異步會(huì)話狀態(tài)管理認(rèn)證服務(wù)授權(quán)服務(wù)頁(yè)面流控制驗(yàn)證處理頁(yè)面渲染和處理學(xué)習(xí)基礎(chǔ)SQL、PL/SQL基礎(chǔ)(必須)HTML基礎(chǔ)深入開(kāi)發(fā)的時(shí)候?qū)tml,javascript,css還是蠻重要的。環(huán)境搭建環(huán)境準(zhǔn)備操作系統(tǒng)、數(shù)據(jù)庫(kù)、安裝文件我這邊使用的是RedHat4.2.1+Oracle11g+Vmware8.0安裝文件使用最新的Apex_4.2.5.zip可在網(wǎng)上下載安裝方式可以采用嵌入式SQL網(wǎng)關(guān)來(lái)監(jiān)聽(tīng)或使用APEXListener基于Apatch的mod_plsql來(lái)安裝。本文使用嵌入式SQL風(fēng)關(guān)來(lái)安裝。安裝OK后當(dāng)需要關(guān)閉虛擬機(jī)時(shí)把虛擬機(jī)的狀態(tài)置為掛起狀態(tài),這樣下次再打開(kāi)時(shí)就不需要再重新去配置參數(shù)。下面的安裝都是使用系統(tǒng)的DB用戶操作安裝有問(wèn)題可聯(lián)系作者jjl.soft@OracleApplicationExpress安裝stepbystep由于oracle11g自帶Apex3.0,因此在本次安裝的時(shí)候我們首先要卸載掉3.0版本上一步全部運(yùn)行OK后,在apex目錄下執(zhí)行rm–rf*.*創(chuàng)建一個(gè)TableSpace:Apex01,CREATETABLESPACEapex01DATAFILE'/d01/oracle/[SID]/db/apps_st/data/apex01.dbf'SIZE100MAUTOEXTENDONNEXT100MMAXSIZE1000M;把之前下載的Apex4.2.5安裝文件上傳至$ORACLE_HOME下,然后解壓至/apex目錄下開(kāi)始安裝更改Admin用戶,并解鎖APEX_PUBLIC_USER,其中Admin用戶密碼要設(shè)置得比較復(fù)雜,必須包含大寫(xiě)、小寫(xiě)字母+特殊的符號(hào)+數(shù)字ALTERUSERANONYMOUSACCOUNTUNLOCK;上述步驟全部OK后,可選安裝中文語(yǔ)言配置嵌入式pl/sql網(wǎng)關(guān)GrantconnectprivilegestoanyhostfortheAPEX_040200databaseuser更改參數(shù)值以上全部OK后,APEX安裝完成,可通過(guò)http://server:8888/apex/apex_admin來(lái)管理,若出現(xiàn)HTTP404錯(cuò)誤后,請(qǐng)執(zhí)行如下命令,若沒(méi)開(kāi)則把它啟起來(lái)成功后則可訪問(wèn)訪URLhttp://server:8888/apexhttp://server:8888/apex/apex_admin安裝到此,貌似都解決了,打開(kāi)管理員網(wǎng)址,輸入用戶名、密碼:ADMIN/….后發(fā)現(xiàn)無(wú)法通過(guò)登錄授權(quán)認(rèn)證,怎么解決呢?難道密碼不對(duì),于是再次更改ADMIN的密碼,重啟數(shù)據(jù)庫(kù),發(fā)現(xiàn)問(wèn)題依舊,這樣排除了ADMIN密碼不對(duì)的可能,APEX授權(quán)的登錄連接只有APEX_04002,這個(gè)也是沒(méi)有問(wèn)題的,也就是說(shuō)本次的安裝都是OK的,畢竟系統(tǒng)都啟起來(lái)了,這時(shí)候聯(lián)想到是不是這個(gè)授權(quán)驗(yàn)證是否還走的是之前的3.0版本的校驗(yàn),執(zhí)行了如下這段SQL發(fā)現(xiàn)確實(shí)還存在之前3.0版本的遺留用戶,果斷的把這些用戶全部drop掉。后面不小心把APEX_04002也drop了,因此只好又重裝,重裝后一切OK。Dropuser……cascade;APEX賬戶管理APEX賬戶關(guān)系圖ADMINADMIN是OracleApplicationExpress的超級(jí)管理員ADMIN可以創(chuàng)建、刪除、修改WorkSpace及Workspace的管理員

創(chuàng)建一個(gè)WorkSpace名為jjl,Schema為oracleebs的apps,同時(shí)創(chuàng)建該workspace的管理員名為jjl

WorkSpace的Admin,Developer,AppEndUser使用剛創(chuàng)建好的WorkSpace【jjl】以管理員jjl登錄登錄之后為該workspace創(chuàng)建開(kāi)發(fā)用戶與app最終用戶后續(xù)就可以用使用developer登錄workspace【jjl】進(jìn)行開(kāi)發(fā)待定待定APEX–開(kāi)發(fā)開(kāi)發(fā)概要理解WorkSpace、ApplicationWorkSpace:工作空間,一個(gè)WorkSpace對(duì)應(yīng)Oracle數(shù)據(jù)庫(kù)的一個(gè)Schema,形象的理解我們可以認(rèn)為它就是一個(gè)工程,這個(gè)工程里面有很多的子項(xiàng)目Application.在與EBS的集成開(kāi)發(fā)中,我們認(rèn)為每個(gè)Application可以類似于EBS中的一個(gè)Form,該Form里包含多個(gè)窗口.本文有些截圖是基于OracleApplicationExpress4.2.5版本。在APEX中的頁(yè)面布局、各種OBJECT的屬性控制都是可以通過(guò)配置來(lái)解決的,對(duì)于這種聲明式的開(kāi)發(fā)(不需要編譯)它需要的是少量的Coding,主要是偏向于pl/sal編程.OracleApplicationExpress可以創(chuàng)建DatabaseApplications,WebsheetApplications,PackagedApplication本文對(duì)應(yīng)的開(kāi)發(fā)都是DatabaseApplication.Application授權(quán)登錄機(jī)制每個(gè)Application都可以為其設(shè)置安全認(rèn)證,創(chuàng)建Application的時(shí)候會(huì)讓你三選一。后期創(chuàng)建好后我們是可以對(duì)其登錄機(jī)制進(jìn)行修改。具體的APEX自帶的授權(quán)登錄機(jī)制有7種。在目前的開(kāi)發(fā)中我們可以選擇ApplicationExpressAccounts與HTTPHeaderVariable.前者必須輸入APEX用戶名密碼才可登錄,后者Page0Page0是該Application的一個(gè)全局頁(yè),比如某些全局變量,全局常量都可以在該頁(yè)去設(shè)置,為了方便管理我們把不同類型的變量放在不同的區(qū)域,這些區(qū)域是不顯示在界面上的類似于HTML的HIDDEN.待定頁(yè)面布局、美化ApplicationExpress提供了20個(gè)主題。每個(gè)主題由定義應(yīng)用程序外觀的組件模板組成。OracleApplicationExpress4.0提供的這些現(xiàn)代化主題都符合XHTML和CSS標(biāo)準(zhǔn)。XHTML頁(yè)面可移植性更強(qiáng)、呈現(xiàn)時(shí)間更短。在項(xiàng)目上開(kāi)發(fā)的使用的是APEX4.1.1版本,在網(wǎng)頁(yè)布局這塊比較郁悶,創(chuàng)建Region的Column屬性是在某個(gè)Body內(nèi)是全局的,在APEX4.2.5版本中,就變得相當(dāng)?shù)腅asy,可以對(duì)子子….區(qū)域的重新布局,其子子區(qū)域都會(huì)有對(duì)應(yīng)的GridLayout可以配置。頁(yè)面區(qū)域展現(xiàn)APEX的頁(yè)面在選定主題后,其頁(yè)面的布局與CSS基本上已確定,基本上符合DIV+CSS來(lái)布局,然后把某幾個(gè)常用的DIV【Body1、Body2、Body3、Postion1、Position2、Position3、Position4】放開(kāi)給Developer開(kāi)發(fā)使用。其中Body區(qū)域在HTML中是以<TABLE></TABLE>展現(xiàn),Position區(qū)域在HTML中是以<DIV></DIV>展現(xiàn)其中我們常用的區(qū)域?yàn)榧t色標(biāo)記的區(qū)域。實(shí)例創(chuàng)建區(qū)域的布局如圖:如何實(shí)現(xiàn)以上布局呢?在這里首先還是得明白HTML中的基本元素<TABLE><TR><TD></TD></TR></TABLE>及這些元素附帶的一些屬性.上圖相信對(duì)TABLE能一目了然了。那這些HTML的標(biāo)簽是如何對(duì)應(yīng)APEX中的配置呢?請(qǐng)看下圖來(lái)自APEX的GridLayout的配置StartNewGrid:意為著當(dāng)前的Object是否采用新的網(wǎng)格布局,即是否采用一個(gè)新的<TABLE>展現(xiàn),不基于上一個(gè)<TABLE>的布局展現(xiàn)(比如可以重新定義列數(shù),…)StartNewRow:意為著當(dāng)前的Object是否換行顯示,即<TR></TR>展現(xiàn)Column:意為著當(dāng)前的Object是在該<TABLE>的當(dāng)前行的第幾列<TD></TD>展現(xiàn).那么像上面布局圖中的Search3的區(qū)域布局配置為:Newsearch1的區(qū)域布局配置為:Newsearch3的區(qū)域布局配置為:同理要實(shí)現(xiàn)更復(fù)雜的布局基于上述原則也是實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單的。配配就OK了標(biāo)題待定APEX控件APEX作為一個(gè)強(qiáng)大的快速開(kāi)發(fā)工具,當(dāng)然少不了一些常用的控件,下拉框Commbox,值列表Lov,文本框Text,日歷DataPick,報(bào)表Report,…。這些控件的基本使用可參考我們知道控件都是可以有很多屬性、事件、校驗(yàn)、DynamicAction。其中DynamicAction是可以做很多操作的,比較重要的是執(zhí)行pl/sql時(shí)類似于Ajax的無(wú)刷新控件屬性:FormElementWidth:控件的寬度Horizontal/VerticalAlignment:控件的顯示位置還有Label顯示位置。ValueRequired:是否必輸入。ConditionType:控件顯示的條件,只有滿足了才顯示。ReadOnlyConditionType,:控件只讀的條件,只有滿足了才只讀。Defaultvalue:設(shè)置控件的默認(rèn)值。FormatMask:控件值的格式掩碼事件:事件定義也是有屬性可配置的:ConditionType:執(zhí)行事件的前提條件TrueActions:事件發(fā)生后,對(duì)應(yīng)控件的校驗(yàn)條件為真時(shí)執(zhí)行的動(dòng)作。FalseActions:事件發(fā)生后,對(duì)應(yīng)控件的校驗(yàn)條件為假時(shí)執(zhí)行的動(dòng)作。WHENCondition:事件發(fā)生后,執(zhí)行相應(yīng)的動(dòng)作的判斷條件。校驗(yàn)屬性:WhenButtonPressed:觸發(fā)校驗(yàn)的ButtonConditionType:觸發(fā)校驗(yàn)的前提條件ConditionExpression:校驗(yàn)表達(dá)式Validation:執(zhí)行相應(yīng)的校驗(yàn)Errormessagedisplaylocation:錯(cuò)誤信息顯示方式AssociatedItem:錯(cuò)誤信息關(guān)聯(lián)到指定的Object下面做個(gè)具體的實(shí)例使用這些屬性、事件、校驗(yàn)點(diǎn)擊Button:Search2Btn時(shí)校驗(yàn)X_Text1值是否為空,滿足校驗(yàn)的前提條件是jjl_test表中存在記錄user_id=’123’;當(dāng)頁(yè)面加載完,DatePick:Datainit值賦值為當(dāng)前日期當(dāng)X_text2值不為空時(shí),Region:newsearch2隱藏,否則顯示最終效果圖:StepByStep操作創(chuàng)建一個(gè)頁(yè)面命名為Page2Pl/sqlapps登錄創(chuàng)建table:jjl_test(user_idvarchar2(50),resp_idvarchar2(50),resp_appl_idvarchar2(50),login_namevarchar2(50),login_countnumber,login_datedate);insertintojjl_testvalues(‘123’,’’,’’,’’,’’);在Page2中創(chuàng)建六個(gè)htmlregion,對(duì)應(yīng)的ParentRegionn選擇PageTemplateBody(1)Search1,search2,search3屬于同一個(gè)TABLE,屬性Column依次為1,2,2.屬性StartNewGrid依次為Yes,No,No.屬性StartNewRow依次為Yes,No,Yes.NewSearch1,newsearch2,newsearch3屬于同一個(gè)TABLE,屬性Column依次為1,2,3.屬性StartNewGrid依次為Yes,No,No.屬性StartNewRow依次為Yes,No,No.在search1中創(chuàng)建TextField:P1_X_TEXT,P2_X_TEXT,search2中創(chuàng)建Button:SEARCH2_BTN,search3中創(chuàng)建DatePick:DATA,newsearch2中創(chuàng)建子區(qū)域:newsearch_subpage1,new_search3_subpage2,new_search3_subpage3,屬于同一個(gè)TABLE,屬性Column依次為1,2,1.屬性StartNewGrid依次為Yes,No,No.屬性StartNewRow依次為Yes,No,YesP1_X_TEXT鼠標(biāo)右鍵創(chuàng)建相應(yīng)的Validation:Name:X_TEXT1ISNOTNULLWhenButtonPressed:SEARCH2_BTN.ConditionType:Exists(SQLqueryreturnsatleastonerow)ConditionExpression1:select1fromjjl_testjtwherejt.user_id=’123’;ValidationType:FunctionReturningBooleanValidatoinExpression:beginif:P1_X_TEXTisnotnullthenreturntrue;endif;returnfalse;end;Errormessage:X_TEXT1can’tbenull;P2_X_TEXT鼠標(biāo)右鍵創(chuàng)建相應(yīng)的DynamicActions:Name:Dynamic_action1;ConditonType:Always;WhenEvent:ChangeWhenSelectionType:Item(s)WhenItem(s):P2_X_TEXTWhenCondition:isnotnullTrueActions:HideRegion(newsearch2)FalseActions:ShowRegion(newsearch2);創(chuàng)建PageLoad型的DynamicActionName:page_load_set_date;ConditionType:DynamicActoinNotconditionalWhenEvent:PageLoadWhenConditionNoConditionTrueActions:SetValueSetValue/Settings/SetType:SQLStatementSetValue/Settings/SQLStatement:selectsysdatefromdual;SetValue/AffectedElements/SelectionType:Item(s)SetValue/AffectedElements/Item(s):DATAReport常用增刪改通常在APEX中對(duì)于記錄的增刪改是通過(guò)鏈接到新的頁(yè)面去實(shí)現(xiàn)單條數(shù)據(jù)的更改。本節(jié)主要介紹如何在一個(gè)TabularForm中不鏈接實(shí)現(xiàn)多行數(shù)據(jù)的增刪改和客戶化邏輯。APEX的TablularForm開(kāi)發(fā)類似于EBSForm開(kāi)發(fā),也是基于視圖去開(kāi)發(fā)。下面實(shí)例開(kāi)發(fā)一個(gè)Form,當(dāng)更改用戶的class_name與login_name時(shí),更新用戶的login_name,然后在另一張表校驗(yàn)class_name是否存在,若不存在報(bào)錯(cuò),若存在則把當(dāng)前勾選的記錄插入另一張表jjl_test3數(shù)據(jù)庫(kù)中先創(chuàng)建APEX頁(yè)面的TabularForm的View,同時(shí)創(chuàng)建一個(gè)APEX頁(yè)面并創(chuàng)建TabularFormcreatetablejjl_class(class_idnumber,class_namevarchar2(50));createorreplaceviewjjl_class_test2asSELECTjt.user_id,jt.resp_id,jt.resp_appl_id,jt.login_name,jc.class_nameFROMjjl_test2jt,jjl_classjcWHEREjc.class_id=jt.class_id;配置頁(yè)面TabularForm數(shù)據(jù)源創(chuàng)建一個(gè)RegionButton:ApplyChange為ApplyChange創(chuàng)建Process:運(yùn)行效果如圖:當(dāng)class_name不存在于jjl_class表中時(shí)當(dāng)輸入的classname存在時(shí),運(yùn)行的效果與結(jié)果如圖:把BBB更改為DDD點(diǎn)擊ApplyChange后文件上傳下載真是麻雀雖小,五臟俱全,上傳下載在Apex里的實(shí)現(xiàn)是非常easy.下面的例子實(shí)現(xiàn)文件上至數(shù)據(jù)庫(kù)--Createtable1、createtableJJL_FILE(idNUMBER,file_nmaeVARCHAR2(50),file_memetypeVARCHAR2(50),file_blobBLOB,file_commentsVARCHAR2(200),file_charsetVARCHAR2(20),last_update_dateDATE)2、創(chuàng)建Page:updownloadfile,在該page中創(chuàng)建html區(qū)域:uploadfile由于數(shù)據(jù)文件是上傳至數(shù)據(jù)庫(kù)表,需要在頁(yè)面上傳文件之前,可以在加載完head后去表里FetchRowfromjjl_file,然后在頁(yè)面上創(chuàng)建相應(yīng)的hidden項(xiàng)與表jjl_file中相字段相應(yīng)。就像在pl/sql中要往表里插一行記錄時(shí),可以先定義該表的Rowtype類型的變量,然后再做賦值與Commit;創(chuàng)建相應(yīng)的regionitem,type:hidden分別為p_file_id,p_file_name,p_file_charset,p_file_memetype創(chuàng)建processes:fetchrowfromjjl_file;上圖中的tablename要大寫(xiě).雙擊之前hidden項(xiàng),配置每項(xiàng)的Source屬性,保持與jjl_file的列名一致。如P_FILE_ID對(duì)應(yīng)JJL_FILE中的ID。4、在區(qū)域uploadfile中創(chuàng)建FileBrowse項(xiàng),具體配置如下:以上都對(duì)應(yīng)數(shù)據(jù)庫(kù)中的表jjl_file相應(yīng)的字段。5、創(chuàng)建區(qū)域button:uploadfile6、為regionitem:FILE_BLOB創(chuàng)建Validation:點(diǎn)擊UPLOAD_FILE按鈕時(shí)驗(yàn)證FILE_BLOB不能為空.7、SubmitPage后執(zhí)行如下Processes:ProcessRowofJJL_FILE,配置如下圖運(yùn)行效果如圖:上傳APEX技術(shù)開(kāi)發(fā)文檔.doc7.5MPl/sql中查看保存結(jié)果:下載文件的實(shí)例:創(chuàng)建一個(gè)interactivereport名為downlaodfile,配置其Sourceo:SELECTjf.id,jf.file_nmae,jf.file_memetype,jf.last_update_date,dbms_lob.getlength(jf.file_blob)file_size,dbms_lob.getlength(jf.file_blob)downloadFROMjjl_filejf創(chuàng)建OK后雙擊report:downloadfile,配置列download為blob如圖:運(yùn)行效果如圖:下面做一個(gè)頁(yè)面Report數(shù)據(jù)的下載鏈接ClassicReport的下載鏈接配置在Report的Attribute里做如下配置運(yùn)行效果如圖:InteractiiveReport的下載鏈接配置URL:/f?p=<app_id>:<page_id>:<session_id>:<format>app_idistheapplicationid

page_idisthepageid

session_idisthesessionid<format>:CSVorHTMLD創(chuàng)建Interactivereportregion下的一個(gè)DisplayOnly項(xiàng),Settings配置如下:運(yùn)行效果如圖:Waitfor使用CSS與JS在做相對(duì)比較復(fù)雜或比較個(gè)性化的APEX頁(yè)面時(shí)還是需要用到一些JavaScript腳本和CSS。下面做一個(gè)用JavaScript給Report表格中列賦值.效果如圖:創(chuàng)建Report,構(gòu)建相應(yīng)的列的HTML標(biāo)簽設(shè)置每列的顯示方式創(chuàng)建page_item_button為page_item_button創(chuàng)建DynamicAction執(zhí)行SetValue動(dòng)作SetValue/Settings/SetType:JavascriptExpressionSetValue/Settings/JavascriptExpression:再做一個(gè)使用CSS來(lái)控制頁(yè)面中元素的顯示,由于之前項(xiàng)目上有些Report需要顯示很多列,導(dǎo)致把頁(yè)面拉得很寬,而在APEX4.1.1版本中沒(méi)有相應(yīng)的CSS模板,因此需要自己來(lái)控制Report的顯示。如上圖給Region加滾動(dòng)條,并為滾動(dòng)條賦上相應(yīng)的顏色、控制滾動(dòng)條的顯示形狀。開(kāi)發(fā)步驟:首先在Page頁(yè)面HTMLHeaderandBodyAttribute屬性中定義CSS<styletype="text/css">.css1{width:752px;height:380px;-ms-overflow-x:scroll;-ms-scrollbar-3dlight-color:rgb(235,235,228);-ms-scrollbar-shadow-color:rgb(179,221,247);-ms-scrollbar-highlight-color:rgb(179,221,247);-ms-scrollbar-darkshadow-color:rgb(235,235,228);-ms-scrollbar-arrow-color:rgb(0,0,0);-ms-scrollbar-track-color:rgb(244,244,240);ms-scrollbar-face-color:rgb(179,221,247);}</style>在Page頁(yè)屬性JavaScript:ExcuteWhenPageLoadsdocument.getElementById("t20BreadCrumbsLeft").className="css1";Coding截圖當(dāng)然上述只是一個(gè)很簡(jiǎn)單的例子來(lái)介紹如何去使用CSS控制APEX對(duì)象.在APEX4.2.5版本中已經(jīng)有帶滾動(dòng)條的模板可選擇了,但依然還是有缺陷,ReportheaderRow不能固定,它會(huì)隨滾動(dòng)條向下滾動(dòng)而被覆蓋圖表、報(bào)表ApplicationExpress3.0之后支持HTML5Chart與FlashChart,支持2D/3D的柱狀圖、水平條形圖、餅圖和圓環(huán)圖、折線圖、K線圖、計(jì)量表、甘特圖。(這幾個(gè)圖表插件BuyfromAnyChart)下面實(shí)例stepbystep發(fā)柱狀和餅圖。準(zhǔn)備工作:創(chuàng)建一個(gè)Application,在新的Application中創(chuàng)建一個(gè)頁(yè)面Page1在新的Page1中創(chuàng)建一個(gè)HTML區(qū)域命名為newsearch1(序列號(hào)50)。Pl/sql登錄往table:jjl_test里插入值:在區(qū)域newsearch1中右鍵選擇CreateSubRegion,彈出的頁(yè)面中選擇Chart,點(diǎn)擊Next,選擇ChartType:Column/3DColumn,ChartRendering:HTML5Chart定義需要?jiǎng)?chuàng)建的Chart:DisplayAttributes,如圖上圖中的ColorScheme:是Chart的顯示顏色主題,也可支持自設(shè)顏色。ShowGrid:Y-axis設(shè)置Y軸顯示網(wǎng)絡(luò)Showints:設(shè)置當(dāng)鼠標(biāo)移動(dòng)到柱狀圖上時(shí)是否顯示提示信息。ShowLabels:設(shè)置Chart的柱狀條下是否顯示名稱ShowValues:設(shè)置是否顯示柱狀條的值點(diǎn)擊Next設(shè)置Source,即該Chart的數(shù)據(jù)源。數(shù)據(jù)源的SQL有兩種寫(xiě)法,第一種是直接賦SQL。SELECTNULLurl,to_char(jt.login_date,'MONRRRR')label,SUM(decode(jt.login_name,'admin',jt.login_count,0))"admin",SUM(decode(jt.login_name,'developer',jt.login_count,0))"developer",SUM(decode(jt.login_name,'enduser',jt.login_count,0))"enduser",SUM(decode(jt.login_name,'superadmin',jt.login_count,0))"superadmin"FROMjjl_testjtGROUPBYto_char(jt.login_date,'MONRRRR')配置圖表的Source的SQL,第一列為URL,即點(diǎn)擊柱狀條的一個(gè)鏈接,第二列為2)里的ShowLabels的Label值.后面的SQL例為2)里的ShowValues的Value第二種寫(xiě)一個(gè)pl/sql表達(dá)式CREATEorREPLACEfunctionlogin_data_fnl_qryVARCHAR2(32767);BEGINl_qry:='SELECTnull,to_char(jt.login_date,'MONRRRR')label';--Loopthroughthelogin_nameandaddasum(decode...)columnwithcolumnaliasFORr1IN(SELECTDISTINCTlogin_nameFROMjjl_test)LOOPl_qry:=l_qry||'sum(decode(jt.login_name,'''||r1.login_nmae||''',jt.login_count,0))'||r1.login_nmae||',';ENDLOOP;--Trimofftrailingcommal_qry:=rtrim(l_qry,',');--Appendtherestofthequeryl_qry:=l_qry||'FROMjjl_testjtGROUPBYto_char(jt.login_date,'''||'MONRRRR'||''')';RETURNl_qry;ENDlogin_data_fn;運(yùn)行效果圖:當(dāng)配置Source為某一個(gè)月的時(shí)候,運(yùn)行效果如下圖:當(dāng)在第一個(gè)3D柱狀圖表中再配置一個(gè)Source:運(yùn)行效果如圖:同理餅圖制作也如上述一致,只是配置ChartType為Pie/3DPie,配置Source的時(shí)候SQL賦值為:運(yùn)行效果圖PDF、Word、Excel報(bào)表開(kāi)發(fā)與EBS的報(bào)表開(kāi)發(fā)一樣,也是基于xml+layout,簡(jiǎn)單的舉個(gè)例子即可創(chuàng)建xmlData創(chuàng)建layout,Xml綁定布局文件rtf在page中創(chuàng)建button:PrintAction:DownloadPrintableReportQueryReportQuery:testquery運(yùn)行效果如圖:ApplicationExpressFreePluginsLOVApex中的Lov是很簡(jiǎn)陋的,無(wú)法與EBSForm中的LOV媲美,不支持顯示多列,不支持返回多列值,下圖中的User即為一個(gè)LOV。這樣的LOV在實(shí)際業(yè)務(wù)中很難滿足客戶的需求.Skillbuilders提供了開(kāi)源的免費(fèi)Super_lov插件.比較強(qiáng)大,能很好的解決上述需求。支持LOVTitle支持LOV即時(shí)輸入驗(yàn)證支持LOV顯示多例支持LOV返回多例下面就實(shí)現(xiàn)上述的一個(gè)User的LOV。1、網(wǎng)上下載apex_super_lov插件,導(dǎo)入至Application2、在Regionsearch1中創(chuàng)建一個(gè)PageItem選擇Plug-ins3、點(diǎn)擊下一步選擇剛導(dǎo)入的super_lov,做如下配置Listofvaluesdesfinition:定義LOV的數(shù)據(jù)Enterable:Enterable-RestrictredtoLov支持輸入并做即時(shí)校驗(yàn),若輸入的數(shù)據(jù)不存在則跳出Lov對(duì)話框ItemDisplay&ReturnColumns:1,2即為當(dāng)前控件NewUser設(shè)置點(diǎn)擊LOV后的顯示列值與返回例值SearchableColumns:1,2支持對(duì)哪些列進(jìn)行數(shù)據(jù)查詢Hiddencolumns:可以對(duì)某些列做隱藏MapFromColumns&MapToItems用來(lái)設(shè)置其它列返回給界面上的Object項(xiàng).效果圖:SeclectListReportAPEX部署ApplicationExpress程序不需要編譯、依賴Oracle數(shù)據(jù)庫(kù)的即時(shí)運(yùn)行。對(duì)于開(kāi)發(fā)員來(lái)說(shuō)程序的部署在系統(tǒng)上線之前的UAT過(guò)程是很常見(jiàn)的。由于它所有的對(duì)象都是存在于數(shù)據(jù)庫(kù),因此就像導(dǎo)數(shù)據(jù)庫(kù)對(duì)象一樣,可以把它導(dǎo)出為一個(gè)SQL文件。當(dāng)然這里是對(duì)一個(gè)Application做導(dǎo)入做出。如圖:導(dǎo)入Application至WorkSpace:點(diǎn)擊上圖的導(dǎo)入選擇需要導(dǎo)入的SQL文件,然后stepbystepAPEX之調(diào)試、常用技巧、APIAPI發(fā)送郵件:APEX_MAIL.SEND(p_to=>'jjl.soft@',p_from=>'DO_NOT_REPLY@REQS',p_subj=>''||l_who||'HasCovered'||l_job||'at'||l_client||CHR(10),p_body=>‘justfortest’);COMMIT;apex_mail.push_queue();PL/SQL中執(zhí)行頁(yè)面的跳轉(zhuǎn)控制begin...codewhichcanraiseanexception...owa_util.redirect_url('');apex_application.stop_apex_engine;exceptionwhenapex_application.e_stop_apex_enginethenraise;--raiseagai

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論