




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
一旦了解了OracleDeveloper的FormBuilder組件的處理過程,就得到了一種結(jié)構(gòu),可以在這種結(jié)構(gòu)中擴(kuò)展表單應(yīng)用程序的范圍。另外有兩種要用OracleDeveloper研究的問題,可以使你設(shè)計(jì)大規(guī)模完整的應(yīng)用程序的能力更加。這就是窗口和菜單。用FormBuilder的這特性來設(shè)計(jì),只須很少或完全不用編程。在第4章中,實(shí)驗(yàn)?zāi)P偷谋韱沃辉趩蝹€(gè)窗口上呈現(xiàn)單個(gè)畫布。本章講述如何利用多個(gè)畫布把應(yīng)用程序擴(kuò)展到多個(gè)窗口,這些特性為提供建立框、工具條和警報(bào)的能力。在第4章中,應(yīng)用程序的缺省菜單不包括在用戶可以利用的范圍中。用戶可以建立自己定制的菜單,把表單的報(bào)表、圖形或想從表單中調(diào)用的無論什么其他的東西結(jié)合起來。在FormBuilder中制作窗口意味著要作兩個(gè)事情之一:創(chuàng)建窗口的內(nèi)容或創(chuàng)建和管理窗口4OracleDeveloper畫布和窗口在應(yīng)用程序的設(shè)計(jì)中起重要作用?;叵朐诘?章和第4章中用畫布來顯示塊和項(xiàng),在LayoutEditor中編輯畫布,畫布成了建立PropertyPalette上都準(zhǔn)確地涉及一 圖6-1Ledger6-1顯示Ledger應(yīng)用程序的一個(gè)窗口,這個(gè)窗口顯示了基礎(chǔ)畫布的一大半。可以通過窗口看到的這部分畫布叫視圖。窗口有水平滾動(dòng)條和垂直滾動(dòng)條,可以通過滾動(dòng)畫布來視圖。這樣把顯示方式和顯示內(nèi)容之間的工作劃分成獨(dú)立但是相當(dāng)?shù)膬刹糠止ぷ鳎菇⒈韱闻c顯示它們的窗口的大小無關(guān),這樣作加大了視覺范圍但卻縮小了界面。你會(huì)發(fā)現(xiàn)用戶對(duì)于需要不斷滾動(dòng)通過畫布的界面不滿意。好的界面應(yīng)在所有的時(shí)間顯示畫布上的所有域和項(xiàng)。但是,就像生活中的大多數(shù)狀況一樣,與能夠同時(shí)顯示項(xiàng)比較,有的需要。窗口和畫布提供了多方面的適應(yīng)性。為了得到多方面的適應(yīng)性,首先要考慮畫布所使用的類型。某些畫布不只是可以在窗口內(nèi)滾動(dòng),還可以做的事情。有四種類型的畫布:內(nèi)容畫布(Content):包含窗口“內(nèi)容”的畫布,每個(gè)窗口至少有一個(gè)內(nèi)容畫布,而且通常只有一個(gè)。層疊畫布(Stacked):在另一個(gè)畫布上面顯示的畫布,通常包括和基礎(chǔ)的內(nèi)容畫布上的項(xiàng)分開的組內(nèi)的一些項(xiàng)。畫布(abbed):一種內(nèi)容畫布,它把窗口的內(nèi)容分成指定的頁,用戶單擊畫布的標(biāo)簽頁在那個(gè)頁上的項(xiàng)目內(nèi)容。工具條(Toolbar):包含工具圖標(biāo)的畫布。分別在窗口的頂部或左邊上的水平和垂直條上顯示這些圖標(biāo)按鈕。圖6-2圖6-2,,為了建立一個(gè)畫布,首先要?jiǎng)?chuàng)建一個(gè)塊就像在第4章中說明的那樣。rcleevlopr用在ewBlck窗口或ayotiard動(dòng)LayoutEditor得到缺省的內(nèi)容畫布。否則必須在ObjectNavigator中用通常的方法,通過選擇Canvases結(jié)點(diǎn)并單擊Creat工具來創(chuàng)建Type屬性(缺省設(shè)置是Conen)2,,要查看LayoutEditor中的畫布,雙擊這個(gè)對(duì)象的ObjectNavigator圖標(biāo)。第4章講述過如何利用LayoutEditor把項(xiàng)目和樣本文本放到畫布上,這里唯一的區(qū)別是由scratch(擦除)建立畫布,而不是用創(chuàng)建塊時(shí)OracleDeveloper產(chǎn)生的一組項(xiàng)目的畫布去工作??梢栽贠bjectNavigator中創(chuàng)建一個(gè)項(xiàng),然后把這個(gè)項(xiàng)的Canvas屬性設(shè)置為新畫布。也可以在Layout中創(chuàng)建項(xiàng)目,并通過它的PropertyPalette改變這個(gè)項(xiàng)目的屬性??梢詣?chuàng)建第二個(gè)畫布,并通過改變已經(jīng)存在的項(xiàng)目的Canvas屬性把項(xiàng)目從基礎(chǔ)畫布移動(dòng)到它的上面。如果你把這個(gè)屬性設(shè)置為NULL,那么這個(gè)項(xiàng)將不出現(xiàn)在畫布上,這可以定義一個(gè)項(xiàng)目不顯示它的值。可以通過View|ShowCanvas菜單控制畫布背景的顯示。當(dāng)LayoutEditor有效時(shí),可以得到這個(gè)菜單項(xiàng)。如果將這個(gè)菜單項(xiàng)設(shè)置為off,那么將直接在項(xiàng)目下的背景上看到網(wǎng)格。如果把它設(shè)置為on,那么將看到?jīng)]有網(wǎng)格的畫布。其次,如果想重新決定畫布的大小,可以通過Viaw|ShowCanvas菜單項(xiàng),然后Width屬性和Height使用View|Showiew菜單可以視圖。如果在畫布的窗口上顯示畫布,這個(gè)視圖就是LayoutEditor把視圖顯示為帶有手柄的一個(gè)黑色的長方形,可以利用這些手柄來重定缺省窗口的大小,也可以通過改變窗口PropertyPalette上的窗口的Width和Height來改變這個(gè)尺寸。通常,這項(xiàng)工作是把窗口的寬度和高度設(shè)置得和內(nèi)容畫布的Width和Height相同,這樣可以使窗口正好包圍畫布。也可以通過拉動(dòng)這個(gè)長方形,或通過改變畫布的X|YPosition屬性來移動(dòng)視圖,這樣,可以把畫布定位在窗口內(nèi)的某個(gè)位置上而不是在它的左上角。可以利用所有這些特性來放置內(nèi)部項(xiàng)和它們的畫布,在顯示它們的窗口中取得最好的效果。例如,通常希望窗口緊緊地包圍著畫布,而且希望給出的畫布的項(xiàng)目布局盡可能小。如果可能,希望用戶不用滾動(dòng)就可以看到窗口內(nèi)的所有的項(xiàng),使表單使用容易些。為此,重新把畫布的尺寸定為正好包圍項(xiàng)的布局,然后把畫布的idth屬性和Height屬性拷貝為對(duì)應(yīng)的窗口的idth和Height屬性。這樣,就把窗口的尺寸精確地定為畫布的尺寸了。用戶可以通過選擇一個(gè)邊緣并拉動(dòng)它來重定畫布的尺寸,這就是說,可以為了屏幕顯示而調(diào)整窗口和畫布的大小。可以確定一個(gè)初始窗口尺寸,從畫布的一邊滾動(dòng)到另一邊,以適合較小的顯示。而用戶可以用高分辨顯示重定畫布的尺寸,使得可以同時(shí)看見每一樣?xùn)|西。通過選擇畫布并單擊Delete工具,可以刪除ObjectNavigator上的畫布。通過把它們的畫布屬性設(shè)置為NULL,OracleDeveloper可以清除任何與被刪除畫布有關(guān)的項(xiàng)。在顯示窗口時(shí),自動(dòng)顯示窗口的基礎(chǔ)畫布??梢酝ㄟ^觸發(fā)器中的Show_View和可以創(chuàng)建可分離和可重用的項(xiàng)目組,比如按鈕組。通過,可以在不同的畫布上再使用(第10章講述細(xì)節(jié))。可以在多個(gè)動(dòng)態(tài)變?nèi)胱兂龅膬?nèi)容畫布的上面顯示不變化的文本和域。有法,不用創(chuàng)建很多個(gè)項(xiàng)就可以有重復(fù)的元素。上。例如,當(dāng)通過滾動(dòng)檢查其余列時(shí),可以在改變的列中顯示主關(guān)鍵字,使得不管在畫布的什么地方總可以看到主關(guān)鍵字,這個(gè)特殊效果就像電子表格中的多顯示視圖一樣。Stacked(層疊的),把數(shù)據(jù)塊類型設(shè)置為Tabular,并用滾動(dòng)條使它包含5把新表單作 導(dǎo)航到ObjectNavigator中 塊Relation結(jié)點(diǎn)上和 _Ledger|DataBlocks|Relations)并單擊Create工具創(chuàng)建主-從關(guān)系。像在第4章那樣根據(jù)Ledger和 在ObjectNavigator結(jié)點(diǎn)上雙擊,打開LayoutEditor中 iew|Stackedie菜單項(xiàng)。顯示tced/Tabanvaes框(見圖6-3)提示擇要顯示的層疊畫布。這個(gè)框列出所有的層疊畫布并讓你用一種不平常的方法接通和判斷它們。代替用順序的單擊或雙擊操作不斷地T--單擊OK,在LayoutEditor中顯示或 圖6-3Stacked/Tab 除層疊畫布。對(duì)于-Ledger表單,所得到的LayoutEditor顯示出的Ledger塊完全遮住了層疊畫布視圖是畫布的可見部分,雖然內(nèi)容畫布的視圖與窗口的邊界有關(guān),但層疊畫布ObjectNavigator中選擇畫布,查看層疊畫布的邊界,然后顯示LayoutEditor。在層疊畫布的邊界上可以看到控制尺寸的手柄,而且在內(nèi)容畫布的標(biāo)尺變成灰色時(shí),畫布的標(biāo)尺是活動(dòng)的。拖動(dòng)手柄改變視圖的大小以顯示或更少的層疊畫布。定位層疊畫布最容易的方法是在畫布的PropertyPalette在ObjectNavigator中選擇Ledger通過選擇Tools|PropertyPalette菜單項(xiàng)顯示彈出菜單上的PropertyPalette找出Viewportheader和ViewportPosition兩個(gè)屬性。把Y位置設(shè)置為0.8英寸,把層疊視圖放在Name項(xiàng)的下面。圖6-4顯示了在LayoutEditor中的結(jié)果,可以看到利用明暗區(qū)別的注意 不要出現(xiàn)在Phyia屬性上ieportYoition和Canva屬性的ieportYPosition。后者位觀測(cè)孔中的層畫布,不是觀本身。這是讓你第一次示層疊畫布,把動(dòng)畫放置不是左邊頂部其地方??梢栽赼youtEdito中直接拉動(dòng)層疊畫布視圖而不通過它的屬來設(shè)置它有時(shí)候?qū)盈B畫布的邊界不見而且要找到它來拖動(dòng)可能有點(diǎn)可以在畫布背單擊,然后尋找重定尺寸手柄,再單擊定尺寸手柄并保持拉到某處。我通常喜歡拖動(dòng)畫布,直到它接近我希望的地方為止,后通設(shè)置性再確地位它。圖6-4在內(nèi)容畫布內(nèi)顯示的層疊畫布的Layout把ShowHorizontalScrollBar(顯示水平滾動(dòng)條)屬性設(shè)置為YES,使水平滾動(dòng)條有效。于所希望的地方。在我們的例子中,這個(gè)視圖將擴(kuò)大到剛好在第五個(gè)Ledger記錄的最后一行的底部,滾動(dòng)條正好出現(xiàn)在記錄塊的下面。在LayoutEditor中看到的滾動(dòng)條是內(nèi)容畫布的而最后,必須通過LayoutEditor邊界或通過畫布和窗口的PropertyPalettes,確定內(nèi)容畫注意,在圖6-5中有兩個(gè)水平滾動(dòng)條,下面一個(gè)是和窗口有關(guān)的滾動(dòng)條,只有畫布擴(kuò)展超出了窗口時(shí),這個(gè)滾動(dòng)條才出現(xiàn)。在這里是剛超出一點(diǎn)點(diǎn)。上面的滾動(dòng)條和層疊Ledger畫布有關(guān),可以利用它在Amount 注意如果你看不到層疊Ledger畫布,應(yīng)檢查兩樣?xùn)|西。首先,確保 4.畫畫布在一個(gè)或多個(gè)頁中顯示它的項(xiàng)目,頁是一種微型畫布,與文件夾似上,OracleDeveloper就顯示單擊的那一頁。利用畫布可以組為單位來排列項(xiàng)。這就允許顯示某一組而隱藏另外一組,為用戶簡化了顯示??梢岳眠@個(gè)特性建立有許多項(xiàng)目的表單,但可以用這樣一種高級(jí)結(jié)構(gòu)和控制的方法把它們提供給用戶,使表單常容使用不僅此,且畫布對(duì)OracleDeveloper支持的所有圖形接口都是完全可移植的。第4章說明了創(chuàng)建畫布的基本過程,這個(gè)部分講述如何把畫布當(dāng)作層疊畫布來處理。這樣可以把一個(gè)主要內(nèi)容的畫布和一系列從屬內(nèi)容的畫布結(jié)合起來。例如,第4章中的WorkerSkill表單用在一個(gè)頁上的人員和另一頁上的技能,把一個(gè)人和一組能連接在一起。這是一個(gè)缺點(diǎn),在尋找技能時(shí),要把人的內(nèi)容從顯示中除去。反之亦然。理想的情況是,用戶同時(shí)可以看到人員的信息和技能的信息。orkerSkill表單的改型是更通用的HumanResources表單,它用主-從關(guān)系把住所與技能和人員連接起來。這個(gè)表單有三個(gè)數(shù)據(jù)塊,對(duì)應(yīng)于 、Lodging和orkerHasSkills三個(gè)表,畫布在內(nèi)容畫布中有的名字。在布置另外兩個(gè)數(shù)據(jù)塊時(shí),不選擇內(nèi)容畫布或?qū)盈B畫布,而是選擇帶有一個(gè)Lodging頁面和另一個(gè)orkerHasSkills頁面的獨(dú)立的布。一次通過DataBlockWizard時(shí),選擇一個(gè)新的畫布。第二次通過時(shí),選擇第一次通過時(shí)創(chuàng)建的畫布,然后選擇(NewTabPage)。Lodging畫布有表單布局,而Skill頁有表格布局,列出顯示畫布的LayoutEditor并選擇View|Stacked|Views菜單項(xiàng)從Stacked/TabCanvases框的列表中選擇畫布。像前面一樣,選擇調(diào)整在內(nèi)容選擇畫布并拉它向下,或改變它的ViewportYPosition為大約0.25英寸的值或圖6-6帶有層疊畫布的Layout圖6-7運(yùn)行時(shí)的畫布置完畫布以后,下一個(gè)步驟是通過窗口顯示它。以下部分講述創(chuàng)造性地利用畫布的不同種類的視圖,這些視圖是可以創(chuàng)建的。6.1.2用畫布組織表單的內(nèi)容,通過窗口讓用戶看到它。通過在表單中添加畫布和窗口,可以創(chuàng)建易于理解和使用的表單。每個(gè)窗口至少有一個(gè)定義窗口內(nèi)容的內(nèi)容畫布。1.微軟Windows平臺(tái)引入多種文檔接口(MDI)OracleDeveloper通過采用特定的假設(shè)和可利用的條件采用MDI體系結(jié)構(gòu)并把它擴(kuò)展到其他平臺(tái)。MDI應(yīng)用程序有一個(gè)“應(yīng)用程序窗口”(applicationwindow),它擁有應(yīng)用程序中所有其他 注意除了Windows和NT以外,其他平臺(tái)不使用MDI體系結(jié)構(gòu)。Motif和Macintosh文檔窗口( window)是這樣一種窗口,它完全被包含在應(yīng)用程序窗口內(nèi)。如果移動(dòng)文檔窗口超出了應(yīng)用程序窗口,那么移動(dòng)超出這個(gè)窗口的那部分文件將。通常,在應(yīng)用程序窗口顯示區(qū)域的一個(gè)組或堆砌組上顯示文檔窗口。也可以把文檔窗口增加到最大值,占去應(yīng)用程序窗口的整個(gè)顯示區(qū)域,或者把文檔窗口減小成圖標(biāo)。文檔窗口通常顯示應(yīng)用程序的主要內(nèi)容,比如數(shù)據(jù)庫表數(shù)據(jù)和圖形?;蛲ㄟ^某些其他的界面來選擇窗口??梢酝ㄟ^創(chuàng)建一個(gè)小的“父”表單作為運(yùn)行表單來取得這種效果。這個(gè)表單可以有一個(gè)濺開的(Sh)屏幕圖形或一組打開其他表單的1框是一個(gè)窗口,它與應(yīng)用程序窗口無關(guān)。應(yīng)用程序窗口不限制窗口,也可以把窗口移到應(yīng)用程序窗口外面(如果它的屬性允許這樣的話)??蛲ǔ0凶寫?yīng)用程序和用戶交互的域,比如應(yīng)用程序選項(xiàng)或參數(shù)的集合等。窗口分類另法是為模式或無模的。模窗口(modalwindow)要求用戶在用程序的任何其他窗口做任何事情之前響應(yīng)并消除這個(gè)窗口。因?yàn)榭虻闹饕δ苁且玫酵斑M(jìn)行操作所需要的信息,所以框通常是模式的。也可以有無模式框。如果這個(gè)框的信息不是以后處理的部分信息,那么在應(yīng)用程序中做其他事情時(shí),這個(gè)框可以繼續(xù)存在。例如搜索字符串的Find框,就可以是無模式的。無模式窗口(Modelesswindow)是在移動(dòng)到另外一個(gè)窗口時(shí)并不消除第一個(gè)窗口。通常模式窗口有顯著的特性,比如沒有滾動(dòng)條、具有固定的尺寸、不能縮小為圖標(biāo)等。在某些平臺(tái)上,模式還擴(kuò)展到其他的應(yīng)用程序。就是說,在系統(tǒng)中做任何其他事情之前,必須響應(yīng)這個(gè)窗口并消除它,而不只是應(yīng)用程序(系統(tǒng)模式與應(yīng)用程序模式相反)。在OracleDeveloper菜單是表單的菜單。通過指定它們的畫布為表單的HorizontalMDIToolbar屬性和VerticalMDI通過使用內(nèi)部過程Set_Window_Property中的名字FORMS-MDI-WINDOW,可以在觸發(fā)器的編碼中用程序設(shè)置應(yīng)用程序窗口的屬性。2.的窗口,通常的方法是使用ObjectNavigator選擇Windows標(biāo)題并在Create工具上單擊。利用在WindowPropertyPalette上的屬性,幾乎可以確定用窗口做的每一件事。“功能”部分可以建立窗口的基本交互能力。展示在表6-1適應(yīng)于所有的平臺(tái)。表6- Close Resize Minimize Inherit 窗口是否顯示表單菜單,在微軟Windows中無效Move izeAllowed ResizeAllowed為表6- Primary 當(dāng)你打開窗口時(shí),窗口總要顯示它,這是可任意選擇的,但是如果你使用Show-indow來顯示窗口或者如果使用層疊畫布并直接導(dǎo)航到它們那里,就可能是必須的了VerticalToolbar HorizontalToolbarWindow HideonExit 當(dāng)導(dǎo)航離開一個(gè)無模式窗口進(jìn)入下一個(gè)窗口時(shí),是否關(guān)閉和使這個(gè)窗口不活動(dòng),只在Modal是False時(shí)有效 Default缺省Oracle的Iconename、nmzedTte圖標(biāo)文件的名字和當(dāng)用戶最小化窗口時(shí)顯示的標(biāo)題,只有當(dāng)Iconfable為True時(shí)有效。這個(gè)圖標(biāo)文件的路徑和特性取決于平臺(tái),而且使用圖標(biāo)文件要求作額外的工作把應(yīng)用程序停泊到其他平臺(tái)ShowHorizontalScrollBar、ShowVerticalScroll 當(dāng)你導(dǎo)航到在當(dāng)前窗口外面的畫布上的項(xiàng)時(shí),OracleDeveloper自動(dòng)地滾動(dòng)窗口的畫布,也可以使用Set_Canvas_Property內(nèi)部子程序通過觸發(fā)器,或者通過畫布的Canvas屬性上設(shè)置Set_View_Property的X或Y的位置來控制滾動(dòng)。應(yīng)當(dāng)使用OracleDeveloper可以很容易地顯示和關(guān)閉窗口,為通過導(dǎo)航它自動(dòng)控制這個(gè)過程。當(dāng)導(dǎo)航到?jīng)]激活的畫布上的項(xiàng)目時(shí),OracleDeveloper在它有關(guān)的窗口顯示這個(gè)畫布。當(dāng)導(dǎo)航離開這個(gè)畫布進(jìn)入不同窗口的另一個(gè)畫布時(shí),如果把RemoveonExit屬性設(shè)置為TrueOracleDeveloper自動(dòng)關(guān)閉第一個(gè)畫布,否則,這個(gè)窗口只是放到后面一層,但仍然顯示。 有關(guān)模態(tài)窗口的屬性請(qǐng)參看以下部分的內(nèi)容;RemoveonExit(在退出時(shí)除去)屬 Show_Window和Hide_Window程序?qū)Ш?,在觸發(fā)器中打開和關(guān)閉窗口。如果在當(dāng)前活動(dòng)窗口后面有一個(gè)靜止的顯示的窗口要這樣做,那么OracleDeveloper把這個(gè)靜止的窗口提高到窗口堆堆棧頂部并激活它??梢杂脤?dǎo)航或用Show_View和Hide_View,采用同樣的方法顯示或隱藏特殊的畫布。3.創(chuàng)建和關(guān)閉模 把WindowStyle設(shè)置為Dialog()并把Modal設(shè)置為True與它們的塊一起創(chuàng)建內(nèi)容畫布和組成框的項(xiàng),如果需要,把畫布和框聯(lián)系固定尺寸對(duì)大多數(shù)框有利,所以把FixedSize屬性或ResizeAllowed屬性(允許重尺寸)設(shè)置為True,并把窗口的Width和Height屬性設(shè)置為畫布的尺寸,確保窗口顯示整個(gè)畫使框比這個(gè)窗口或比它將要在其上出現(xiàn)的窗口小,這可以使用戶知道應(yīng)用程序的模式狀態(tài)。應(yīng)該把模式框的顯示建立在適當(dāng)?shù)纳?。做這項(xiàng)工作有兩種簡單的方法:第一,可以按照用戶在的畫布導(dǎo)航上的項(xiàng)的次序排列項(xiàng)目導(dǎo)航的次序。也可以不考慮導(dǎo)航的次序,用按鈕觸發(fā)器或菜單命令明確地導(dǎo)航。在任何一種情況下,當(dāng)用戶導(dǎo)航到的項(xiàng)目時(shí),OracleDeveloper自動(dòng)顯示框。Show_Window內(nèi)部子程序,這個(gè)程序顯示窗口OracleDeveloper中的Modal屬性防止用戶用鼠標(biāo)離開框?qū)Ш健K辉试S,但暫停(Suspend)按鍵允許。所以用戶可以利用導(dǎo)航鍵導(dǎo)航出去。當(dāng)用戶這樣做時(shí),OracleDeveloper自動(dòng)地關(guān)閉這個(gè)框。然而這種特性不是用戶在框所期待的。Modal框作為活動(dòng)的窗口應(yīng)該保持在屏幕上,直到用戶用確定的動(dòng)作消除它們?yōu)橹?,通常是通過在OK或Cancel按用框內(nèi)的項(xiàng)把這些塊的PreviousavigationBlock屬性和NextNavigationBlock設(shè)置為這個(gè)塊本身,使導(dǎo)航循環(huán)。如果這樣做,應(yīng)該有單獨(dú)的塊和所有出現(xiàn)在框畫布上的項(xiàng)。Key-Next-然后需要在OK和Cancel按鈕上建立觸發(fā)器,或用任何法指示OracleDeveloper關(guān)閉框。例如,When-Button-Pressed觸發(fā)器導(dǎo)航離開窗口時(shí),OracleDeveloper可以從一個(gè)模式框中打開另一個(gè)模式框。例如,可以有一個(gè)Options按鈕,顯示選項(xiàng)所擴(kuò)展的第二個(gè)框。還可以達(dá)到某些奇特的效果,比如用一個(gè)Extended按鈕,產(chǎn)生工具條是沿著窗口頂部或左邊的一條圖標(biāo)。要?jiǎng)?chuàng)建它,必須首先創(chuàng)建包含按鈕項(xiàng)和樣本圖形的工具條畫布(畫布類型是HorizontalToolbar或erticalToolbar)??蓞⒖辞懊娌糠钟嘘P(guān)創(chuàng)建畫布的內(nèi)容。為畫布指定將要顯示工具條的窗口的Window(窗口)下一步是為窗口對(duì)象的HorizontalToolbar或VerticalToolbar屬性設(shè)置為適當(dāng)?shù)漠嫴嫉淖⒁庠谖④浀腤indows中,也可以通過表單對(duì)象的HorizontalMDIToolbar或VerticalMDIToolbar屬性顯示MDI應(yīng)用程序窗口工具條。OracleDeveloper對(duì)這些工具條忽略工OracleDeveloper使用標(biāo)準(zhǔn)的規(guī)則來顯示它們。要顯示它,只要導(dǎo)航到工具條上的第一項(xiàng)上,而不是原來的工具條上。通常,動(dòng)態(tài)變化的工具條并不好,為這變化使用感到。以用同圖標(biāo)代具(例如,暗淡、灰色十字畫叉,等等)??梢岳眠@個(gè)特性和允許工具條上的工具有效。因?yàn)楣ぞ邨l上的項(xiàng)就是塊上的項(xiàng),必須進(jìn)行一些專門的測(cè)量,確保這些項(xiàng)所起的作用和表單的其他項(xiàng)都不同,特別是有關(guān)導(dǎo)航的作用。通常,把工具條的按鈕項(xiàng)作為單獨(dú)的項(xiàng)比較好。把前一塊的NextNavigationDataBlock屬性設(shè)置為是對(duì)應(yīng)塊而不是工具條塊,把這個(gè)塊從塊導(dǎo)航中取出,可以用Propertyalette去做這件事。對(duì)于每個(gè)項(xiàng),把PropertyPalette中的KeyboardNavigable屬性和MouseNavigate屬性設(shè)置為NO。把這些屬性斷開是防止在工具條上的工具上單擊引起游標(biāo)導(dǎo)航進(jìn)入工具塊。當(dāng)在工具上單擊時(shí),用戶能夠保證停留在他們所在的塊內(nèi)。 如果不用用戶自己的菜單代替標(biāo)準(zhǔn)的OracleDeveloper菜單來運(yùn)行MDI應(yīng)用程序,缺省的菜單工具條包含有和普通菜單項(xiàng)對(duì)應(yīng)的圖標(biāo),比如EnterQuery、NextRecord等。Yes/No注 OracleDeveloper自動(dòng)顯示警報(bào)。通常,消息出現(xiàn)在狀態(tài)條中。如果有多條信息,則用戶只能看見最后一條信息,并丟失臨時(shí)的信息。而OracleDeveloper把臨時(shí)信息作為專門的警報(bào)顯示。通過使用內(nèi)部的Synchonize子程序,在調(diào)用內(nèi)部的essage子程序之后,立即在PL/SOL代碼中顯示這些信息。有時(shí)候可以避免這些情況,比較好的方法是,對(duì)錯(cuò)誤使用明確的對(duì)象去完全代替信息系統(tǒng)。例如,可以為標(biāo)準(zhǔn)的錯(cuò)誤建立一組可再用的象并它裝標(biāo)準(zhǔn)象庫。要?jiǎng)?chuàng)建警報(bào),在對(duì)象導(dǎo)航器上選擇Alerts標(biāo)題,并用通常的方法在Create工具上單擊。有三種警報(bào)。通過警報(bào)屬性設(shè)置板的AlertStyle屬性規(guī)定使用哪種類型:Stop(停止):顯示一個(gè)停止信息圖標(biāo)和信息(見圖6-8)圖6-8StopAlertCaution(警告):顯示一個(gè)感嘆號(hào)圖標(biāo)和信息(見圖6-9)圖6-9CautionAlertNote(注意):顯示一個(gè)信息圖標(biāo)和信息(見圖6-10)圖6-10NoteAlert在Message屬性中輸入要在警報(bào)中顯示的信息??梢暂斎攵噙_(dá)200個(gè)字符(雖然不是所有的用PropertyPalette中的Button1、Button2和Button3標(biāo)明顯示警報(bào)的按鈕。如果不輸入標(biāo)記,那么警報(bào)不顯示按鈕。例如,如果使用缺省的OK和Cancel設(shè)置值,那么就得到帶有“OKCancelButton2的Cancel設(shè)置,那么就得到只有“OK”標(biāo)記的單個(gè)按鈕。至少必須標(biāo)明一個(gè)按鈕。還應(yīng)該指定一個(gè)按鈕作為缺省按鈕。當(dāng)用戶按ENTER鍵時(shí),OracleDeveloper了的按鈕返回編號(hào)ALERT_BUTTON1,ALET_BUTTON2或ALERET_BUTTON3,然后可以測(cè)試返回的編號(hào),并在觸發(fā)器代碼中采取適當(dāng)?shù)膭?dòng)作。例如,下面的代碼用Caution警報(bào)提示1是es,而按鈕2是No。用少量代碼,也可以創(chuàng)建可重用的警報(bào)對(duì)象和警報(bào),來顯示專門的值或?qū)ο?。例如,只用一個(gè)OK按鈕創(chuàng)建單個(gè)指示性的警報(bào)。通過在運(yùn)行時(shí)設(shè)置信息文本,可以再利用這個(gè)對(duì)象,而不必為每個(gè)信息創(chuàng)建一個(gè)單獨(dú)的警報(bào)??梢杂靡韵麓a在庫中建立一個(gè)簡單的程序。還可以建立更復(fù)雜的可重用的函數(shù),使信息接受參數(shù),通過并置參數(shù)創(chuàng)立信息文本,顯示動(dòng)態(tài)信息,并返回適當(dāng)?shù)陌粹o編號(hào)。為了在其他的模塊中再使用,應(yīng)該把這個(gè)函數(shù)放入庫內(nèi)。OracleDeveloper提供了幾個(gè)與塊和塊的項(xiàng)有關(guān)的特殊特性。用這些特點(diǎn)可以顯著地改善表單的使用性能。如果使用列表,那么對(duì)不同的用途,可以用幾種不同的方法構(gòu)造它們。利用單選按鈕可以容易地創(chuàng)建互不相容的選擇項(xiàng),利用計(jì)算域使總和數(shù)的自動(dòng)顯示和表單中的其他計(jì)算工作變得非常容易。使用正確的日期格式掩碼,可以大大減少數(shù)據(jù)庫中與日期和時(shí)間有關(guān)的錯(cuò)誤。最后,可以利用程序的封裝與DataBlockWizard配合,把數(shù)據(jù)塊建立在存貯的程序的基礎(chǔ)上而不是表的基礎(chǔ)上,從而增加一個(gè)面向?qū)ο蠛蛯?duì)系統(tǒng)隱藏?cái)?shù)據(jù)的方法。列表是一個(gè)表單的項(xiàng)目。它在獨(dú)立的位置顯示文本項(xiàng)的列表。理想的情況是通過查看選擇列表并選擇一項(xiàng)讓用戶在幾個(gè)互不相容的選項(xiàng)中選擇。已經(jīng)見過兩種列表—在第4WorkHasSkills表單的下拉列表,和Designer中見過的用來顯示選擇的值的列表(LOV)。Poplist:文本項(xiàng)下拉列表。通過靠近列表框的小箭頭激活它,使列表在項(xiàng)目附近的窗Tlist:在滾動(dòng)列表上顯示所有文本項(xiàng)的列表框,像一個(gè)單獨(dú)的畫布,但在表單的單個(gè)域內(nèi)。Combobox(組合框):下拉列表和文本項(xiàng)的組合??梢岳鑫谋卷?xiàng)的列表,但也可以Listofvalues(LOV)(值的列表):一種框。它顯示正文項(xiàng)并提供用于列表中搜索的這個(gè)框返回所選擇的單個(gè)列表項(xiàng),并把它拷貝到另外的塊項(xiàng)。在FormBuilder中,這LOV提供在一個(gè)值的長列表中尋找一個(gè)項(xiàng)時(shí)使用模型匹配的能力。有關(guān)利用LOV向?qū)樗羞@些列表都以某種方法顯示文本項(xiàng)的列表,但這些字串不需要項(xiàng)目的值。列表在屏幕上看到的之類的東西轉(zhuǎn)換為項(xiàng)上的一個(gè)實(shí)際值,即Forms存貯在數(shù)據(jù)庫內(nèi)的值。由于和值之間的間接關(guān)系,可以用文本顯示那些在域中使用其他數(shù)據(jù)類型的內(nèi)容。也就是說,列表給了這樣的法:在表單中顯示格式精美的有意義的正文,但在數(shù)據(jù)庫中仍然存貯沒有意義的、難以使用的代碼。2代表綠的,3代表紫的,等等。列表用戶顯示的是文本字串“綠的”,而把數(shù)字2放入數(shù)據(jù)庫中,在從數(shù)據(jù)庫查詢記錄時(shí),用“綠的”去置換2,而不顯示“綠的”這個(gè)字串。我建議把所顯示的字符當(dāng)作數(shù)據(jù)庫中的值使用。代碼一般在非常需要磁盤空間并且程序員只需要數(shù)字時(shí)使用?,F(xiàn)在,大多數(shù)的程序開發(fā)者學(xué)會(huì)了讀正文。使用代碼的理由是存在的,但是對(duì)大部分情況來說,是因?yàn)楸仨氁m應(yīng)“以前擁有”的數(shù)據(jù)庫,那些數(shù)據(jù)庫的設(shè)計(jì)沒有使用現(xiàn)代的設(shè)計(jì)方法,沒有對(duì)有數(shù)十億實(shí)例記錄值的非常大的數(shù)據(jù)庫的空間進(jìn)行優(yōu)化。如果可以選擇的話,保證列表的和數(shù)據(jù)庫的值相同,可以使它變簡單。中某些其他條件的要求,那么Oracleeveloper我在這里提出這個(gè)問題呢?這些要求的條件之一是列表項(xiàng)的值要在代碼列表中。如果從數(shù)據(jù)庫中查詢一個(gè)記錄,有一個(gè)不在列表中,那么表單就不顯示這個(gè)記錄,而且不聲不響地把它丟掉。表單假設(shè)正在使用的數(shù)據(jù)庫的值和裝入應(yīng)用程序的確認(rèn)條件是一致的。如果這個(gè)假設(shè)不成立,可能會(huì)引起。應(yīng)該確保數(shù)據(jù)庫和在應(yīng)用程序中建立列表項(xiàng)中OtherValues值,但在應(yīng)用程序列表中卻沒有值。這種可能性不包括LOV框,因?yàn)樗皇橇斜眄?xiàng)而完全是單獨(dú)的一種對(duì)象。列表項(xiàng)的這個(gè)屬性缺省設(shè)置是NULL。如果不把它設(shè)置為某個(gè)值,那么FormsRuntime會(huì)丟掉那些在列表上沒有值的記錄。如果把它設(shè)置為某個(gè)值,那么FormsRuntime將顯示這個(gè)記錄,但是,顯示的是OtherValues屬性的值,而不是數(shù)據(jù)庫的值。列表在FormsRuntime不顯示對(duì)應(yīng)于這個(gè)值的任何字符串。這個(gè)值可以是類似于“Other”那樣的內(nèi)注意Otheralueother”值從數(shù)據(jù)庫中返回,可以設(shè)置Otheralue為NULL何問題,但是如果不能保證返回的值在列表中,那么最好定義這個(gè)屬性,不然表單的性能會(huì)當(dāng)。組合框?yàn)榇_認(rèn)問題創(chuàng)建另一個(gè)機(jī)會(huì)。組合框總的思想是允許用戶在域中自由輸入文本,Developer并不確認(rèn)對(duì)列表所輸入的正文。如果這是所希望的特性,很好。如果不是,那么將需要增加確認(rèn)的編碼?;蚪忉屵`犯約束的數(shù)據(jù)庫錯(cuò)誤,或解釋用戶用某種方式輸入的正文。也可以利用某些內(nèi)部的管理列表項(xiàng)的子程序,把用戶輸入的到列表中去。這要求相當(dāng)高級(jí)的編碼。所以,最好是利用組合框作為建議性的列表,而不用去承擔(dān)編制確認(rèn)程序的工作負(fù)擔(dān)。硬代碼列表(Hard-CodedList)是在FormBuilder中完全規(guī)定的列表。用戶用字串和相應(yīng)的值填滿一個(gè)框,這些值便成為用戶的應(yīng)用程序的一部分。這種方法的優(yōu)點(diǎn)是簡單和快捷,可以非常迅速地創(chuàng)建這些列表,而且在打開應(yīng)用程序時(shí)這個(gè)列表是在存貯器中,所以運(yùn)行得非常好。缺點(diǎn)是如果不重新編制應(yīng)用程序就不能改變這些列表。對(duì)那些簡單的不改變的列表可以使用硬代碼列表:顯示這個(gè)項(xiàng)的PropertyPalette設(shè)置項(xiàng)的TypeProperty為List進(jìn)入PropertyPalette的Function部分,把ListStyle屬性設(shè)置為列表的三種類型之一:boBox。雙擊列表屬性中的Elements將看到ListElements框如圖6-11所示如果想要使值為NULL,則讓Value的單元利用DOWN-ARROW(下箭頭)鍵或鼠標(biāo)移動(dòng)到列表的新,利用CTRL-K鍵查看可以在這個(gè)框中使用的功能鍵列表。利用CTRL-<鍵來刪除當(dāng)前所選擇的列表項(xiàng)(記按SHIFT鍵以完成后,單擊框上的OK如果希望能夠處理那些不在列表中的值
圖6-11ListElements那么在OtherValues如果運(yùn)行表單,當(dāng)顯示列表的內(nèi)容時(shí),將在列表中看到在框中輸入的字串,可以選擇列表中的任何項(xiàng)。注 動(dòng)態(tài)列表是在運(yùn)行時(shí)填入的列表。有兩種方法創(chuàng)建動(dòng)態(tài)列表。最普通的方法是根據(jù)數(shù)據(jù)庫表立表列用創(chuàng),用SELEC語言填寫的記錄組對(duì)象得到列表的和值,然后根據(jù)記錄組填充列表。另法需要利用內(nèi)部函數(shù)Add_List_Element添加值。后面將較詳細(xì)講述第二種方法。首先讓我們考慮根據(jù)表建立列表。OtherValues屬性的List框內(nèi)輸入和值(參看前面的“有效的列表”部分)遺憾的是,這個(gè)值不能是NULL值。如對(duì)硬列的素用NULL值,那么在準(zhǔn)備從創(chuàng)建的動(dòng)列表,就能利用Clear_List清除它,而會(huì)得到一個(gè)錯(cuò)誤,且列的載其明在本1中出現(xiàn)的問題,即不希望在下拉列表中出現(xiàn)空白行。這個(gè)列表不允許刪除NULL元素,也就不需要把它加進(jìn)去產(chǎn)生不希望的空白行。這就意味著,必須為缺省值從數(shù)據(jù)庫中選擇一個(gè)值。例如,在Ledger表單的 列表中使用“GeneralStre這個(gè)值作為缺省列表元素。當(dāng)從表加載這個(gè)列表時(shí),這個(gè)值將,但Otheralues屬性中將仍然有這個(gè)值。于是這個(gè)值出現(xiàn)在從數(shù)據(jù)庫加載的列表以及在硬代碼的版本中。這個(gè)要求的之一是,不能重新使用目標(biāo)庫中的標(biāo)準(zhǔn)列表SmartClass。必須采用定義列表元素和Otheralues屬性的方法來規(guī)定列表項(xiàng)和它的數(shù)據(jù)庫值。這也意味著如果選擇的值在數(shù)據(jù)庫中被改變了,將必須在硬代碼的列表的Elements屬性中改變它。這是很遺憾的,但必須這樣做。OtherValues屬性,就可以用通常的方法為表單創(chuàng)建一個(gè)記錄組對(duì)象。在Designer用單選按鈕選擇查詢,并在文本框中輸入一個(gè)查詢。這個(gè)查詢選擇與和值對(duì)應(yīng)的數(shù)據(jù),并且按它們排序。如果值是一個(gè)數(shù)字或日期,那么利用o_Chat函數(shù)把這個(gè)值轉(zhuǎn)換成字符串。利用ORERBY子句按照所希望在顯示列表中呈現(xiàn)的次序進(jìn)行排序。 在ORDERBY子句中使用數(shù)字1可以按照排序而忽略存在有兩個(gè)數(shù)據(jù)列使用這個(gè)查詢利用Ledger表中的Action的唯一值產(chǎn)生一個(gè)和值均相同的記錄組。利GROUPBY子句得到這些唯一的值。GROUPBY也按照將這些值排序,但是無論如何加ORDERBY子句是一個(gè)很好的編碼方法,使得在以后需要改變GROUPBY時(shí)不致于。注意如果對(duì)同一個(gè)列表調(diào)用這個(gè)程序若干次,只需要清除這個(gè)列表。如果不清除這個(gè)列表,那么只是把已經(jīng)不在表單上的值加到列表單上去。還要仔細(xì)檢查從Populate_性、ListElement屬性和OtherValue屬性之間關(guān)系的注釋?,F(xiàn)在,需要選擇一個(gè)觸發(fā)器來建立這個(gè)列表??梢栽谕ㄟ^When-New-Form-Instance觸發(fā)器打開表單時(shí)建立這個(gè)列表,或者可以等待到準(zhǔn)備顯示這個(gè)列表時(shí)為止,也許在這個(gè)列表出現(xiàn)的塊的When-New-Block-Instance觸發(fā)器中。關(guān)于這一點(diǎn),可以有相當(dāng)大的創(chuàng)造性使得在加載表單時(shí)節(jié)省一些處理時(shí)間?,F(xiàn)在在觸發(fā)器中輸入以下代碼:改出現(xiàn)在列表中的一組值,那么需要再一次運(yùn)行建立列表的代碼,重新設(shè)置列表,讓它包含這些新的值。遺憾的是,這要求完成所有現(xiàn)有的使列表項(xiàng)出現(xiàn)在列表中的塊的Clear_BlockClar_om通常,如果希望用戶在一系列可能的值中作選擇,那么應(yīng)該提供一個(gè)供選擇的列表。單選按鈕提供了這樣一種列表的方法。單選按鈕組是一些無線電按鈕的集合。無線電按鈕是帶有圓圈的小按鈕(準(zhǔn)確的格式取決于圖形用戶接口平臺(tái)),當(dāng)用戶圖6-12單擊其中一個(gè)按鈕時(shí),OracleDeveloper離開當(dāng)前的按鈕而選擇被選中的按鈕。因此,每次只則彈起另一個(gè)按鈕(或現(xiàn)代無線電的電子按鈕)。在圖6-12中,在每一種情況下只有一個(gè)選擇是當(dāng)有相對(duì)小數(shù)目的相互不相容的選擇時(shí),通常這些選擇是兩個(gè)或三個(gè)不隨時(shí)間變化的選擇,使用單選按鈕。在上例情況中,有四種可能的動(dòng)作類型是非常穩(wěn)定的。常是更可取的接口。因?yàn)橛脩艨梢詳U(kuò)展它而不改變應(yīng)用程序的代碼。如果列表是靜態(tài)的而不是動(dòng)態(tài)的,或者,如果值實(shí)際上不隨時(shí)間變化,那么單選按鈕組在顯示和容易單選按鈕組是對(duì)應(yīng)于數(shù)據(jù)庫表中的列的塊項(xiàng),單選按鈕對(duì)應(yīng)于列的可能值。單選按鈕在單個(gè)單選按鈕組的項(xiàng)目下在一起。當(dāng)用戶在按鈕上單擊時(shí),這個(gè)按鈕對(duì)象的alue屬性就變成了這個(gè)單選按鈕組的值。這個(gè)邏輯使這些對(duì)象所具有的一組屬性互相有牽連,即影響所有按鈕的任何屬性都是按鈕組的屬性。比如缺省值與數(shù)據(jù)庫有關(guān)的屬性、導(dǎo)航的屬性就是如此。只影響單個(gè)按鈕的屬性是按鈕的屬性,比如按鈕值、按鈕的和按鈕的物理位置等。要在OracleDeveloper中設(shè)Defaultalue屬性設(shè)置為按鈕的值(Bought”)。注意efaultale以看見這個(gè)塊,在導(dǎo)航到它上面以前,實(shí)際上也并沒有在這個(gè)塊上創(chuàng)建記錄。在實(shí)際為了要建立單獨(dú)的按鈕,以通常的方法利用Create工具創(chuàng)建,然后改變Label屬性和RadioButtonValue屬性,Label是OracleDeveloper作為提示而顯示的文本,RadioButtonValue是當(dāng)用戶單擊按鈕時(shí),OracleDeveloper賦予單選按鈕的實(shí)際值。至于列表,如果用一個(gè)與任何單選按鈕值不對(duì)應(yīng)的值從數(shù)據(jù)庫中取回一行,那么就會(huì)發(fā)OracleDeveloperOtheralue屬性工作起來就像有同樣名字的列表項(xiàng)的屬性一樣,它讓你為了顯示的目的把和按鈕不對(duì)應(yīng)的值變換為一個(gè)按鈕值。根據(jù)用戶界面設(shè)計(jì)的類型,通常用某種可視化方法區(qū)分單選按鈕組比較好。前面的例子利用樣板圖形的長方形包圍著四個(gè)單選按鈕,把它們和畫布上其他的塊項(xiàng)分開。在這種情況下,長方形的Beveled屬性設(shè)置為Loered,可以顯現(xiàn)出三維的效果。創(chuàng)建表單的一個(gè)共同任務(wù)是創(chuàng)建表示某個(gè)計(jì)算值的項(xiàng)。例如,可以把幾個(gè)數(shù)據(jù)庫的項(xiàng)組合成單獨(dú)的連接起來的字符串,而這些項(xiàng)在基礎(chǔ)表中不是一一對(duì)應(yīng)的。在Ledger表單中,可以用ty(數(shù)量)乘Rat(價(jià)格)的計(jì)算域來代替數(shù)據(jù)庫的Amount(總計(jì))域。另外一個(gè)普通的例子是當(dāng)創(chuàng)建otal域時(shí),在另一個(gè)塊中計(jì)算記錄總數(shù)。在OracleDeveloper以前的版本中,通過利用各種觸發(fā)器來計(jì)算這些值,并通過把值賦予When-Validate-Item和Post-Query觸發(fā)器達(dá)到這些效果。例如,要計(jì)算Amount(總數(shù)),就把BaseTableItem屬性設(shè)置為False,通過改變項(xiàng)的類型使項(xiàng)成為顯示項(xiàng),然后對(duì)ty(數(shù)量)和Rate(價(jià)格)創(chuàng)建When-Validate-Item觸發(fā)器,這個(gè)處理插入和更新了兩個(gè)數(shù)據(jù)庫的項(xiàng)。還應(yīng)該用同樣的代碼在Ledger塊創(chuàng)建一個(gè)利用Calculation屬性組,可以非常容易地創(chuàng)建計(jì)算域。通過設(shè)置項(xiàng)屬性DatabaseItem為NO,創(chuàng)建一個(gè)不在基礎(chǔ)表中的顯示項(xiàng)。不創(chuàng)建觸發(fā)器,而是設(shè)置Calculation組的屬性。把CalculationMode(計(jì)算模式)設(shè)置為Formula()產(chǎn)生計(jì)算特性,然后輸入,就像前面見到的輸入PL/SOL代碼那樣:在OracleDeveloper中進(jìn)行總計(jì)統(tǒng)計(jì)是很容易的。在想要總計(jì)的塊中創(chuàng)建總計(jì)項(xiàng),必須把這個(gè)塊的AdvancedDatabase組的puteSummaries(預(yù)先計(jì)算累加)屬性設(shè)置為e,這就告訴OracleDeveloper,在做查詢以前先計(jì)算總和。因?yàn)橥ǔ_@個(gè)塊會(huì)顯示多個(gè)記錄,然而總計(jì)時(shí)并不想對(duì)每個(gè)記錄顯示一個(gè)總計(jì),所以把要顯示的總計(jì)項(xiàng)的屬性數(shù)目設(shè)置為1(通常它)。注意把uryllRecordsinRcordsgroup查詢錄中所有記錄設(shè)置為e是把 puteSummaries(預(yù)計(jì)計(jì)算總和)設(shè)置為es,可以達(dá)到同樣的效果。與其分別計(jì)算總和,不如Oracleeveloper查詢所有的記錄不是在需要時(shí)提取它們。這就可以從存貯器中的記錄來計(jì)算總和。對(duì)于有大的結(jié)果集的塊,這可能會(huì)引起一些存貯器問題。預(yù)先計(jì)算也會(huì)慢來,但不像ueryAllRecords(查詢所有的記錄)么嚴(yán)。用域的性測(cè)試行實(shí),決使用種方。CalculationMode(計(jì)算模式)設(shè)置為Summary(求和),決定了項(xiàng)的求和計(jì)算。把SummaryFunction設(shè)置為Sum,告訴OracleDeveloper要添加記錄的值??梢岳萌魏螛?biāo)準(zhǔn)的總計(jì)功能,比如Count、Average、Min、Max、Stddev或Variance。SummarizedBlock和SummarizedItem下拉列表分別顯示所有的塊和所選擇的塊中的所有的項(xiàng)。例如,要?jiǎng)?chuàng)建一個(gè)Total(總計(jì))總計(jì)Ledger塊的Amount(數(shù)量)項(xiàng),就把SummaryFunction(總計(jì)功能)Sum求和),對(duì)LedgerSummarizedBlock),而對(duì)Amount(數(shù)目項(xiàng)求和(SummarizedHem)。OracleDeveloper自動(dòng)地在畫布的獨(dú)立的域中顯示對(duì)塊的總計(jì),并處理對(duì)和計(jì)算機(jī)打交道的大多數(shù)人現(xiàn)在必定認(rèn)識(shí)到了“200年”問題。當(dāng)時(shí)鐘在199年的最后一天的夜里敲響時(shí),所有兩位數(shù)字的年域?qū)⒆優(yōu)椤?0混沌的(Chaos)。這本書現(xiàn)在還是“溫順的”(Compliant)!在以后你仍然可以這個(gè)問題是講得過分了,但是的確要注意日期域和時(shí)間域。為了確保沒有2000年的問題,應(yīng)該把年號(hào)規(guī)定和顯示為四位數(shù)字值。對(duì)于OracleDeveloperYYYY”似可能相當(dāng)嚴(yán)重,除非你記住了有關(guān) 生活中最主要的事實(shí)是,時(shí)間和日期是Siamese孿生子,它們不能夠擺脫地連在一起。對(duì)OracleDeveloper的項(xiàng)和域,PL/SOL變量和Oracle的列,日期類型DAE是共同的,并包括有日期和時(shí)間兩部分。大多數(shù)問題發(fā)生在企圖單獨(dú)處理日期和時(shí)間的時(shí)候。例如,有可能想用單獨(dú)的可輸入日期和時(shí)間的域呈現(xiàn)給用戶,讓他們?cè)O(shè)置或查看時(shí)間。如果不在 Pre-InsertPre-Update、Pre-Delete和Post-Query觸發(fā)器中進(jìn)行PL/SOL編碼,利用o_Char和o_Date轉(zhuǎn)換功能組合和分開日期元素,就不能這么做。為了避免不必要的壓力,在OracleDeveloper中,日期項(xiàng)使用格式掩碼,例如“MM/DD/YYYY“HH:MI,而不要為了“可用性”而將它們分開。 OracleDeveloperForms為了和前面版本的表單兼容,也有DATETIME和TIME數(shù)據(jù)類型。不要使用這些數(shù)據(jù)類型,因?yàn)檗D(zhuǎn)換為OracleDATE可能產(chǎn)生意外的結(jié)果。使用Oracleeveloper的格式掩碼并不影響實(shí)際日期和時(shí)間的正確性,它會(huì)總是保持相同。在屏幕上看到的并不是進(jìn)入數(shù)據(jù)庫得到的,因此,對(duì)于這個(gè)問題沒有任何事情要做。例如,在一個(gè)表單的日期項(xiàng)中沒有看到時(shí)間,這并不意味著沒有時(shí)間或時(shí)間是00:00,雖然這可能是由缺省得到的結(jié)果??梢杂肞L/SOL代碼設(shè)置特定的時(shí)間:這個(gè)代碼指定,通過Ledge.ActionDate12點(diǎn),而不是半夜的12點(diǎn)。表6-3顯示了和年份有關(guān)的OracleDeveloper格式掩碼,可以組合成日期-時(shí)間格式掩碼。表6-4顯示了可以在OracleDeveloper格式掩碼中使用的和時(shí)間有關(guān)的各種元素。表6- 四位數(shù)字的年份,與YYYY 帶有數(shù)字的年份和一個(gè)負(fù)號(hào)的B.C. 一位數(shù)字的年份(不推薦 兩位數(shù)字的年份(不推薦 三位數(shù)字的年份(不推薦 四位數(shù)字的年份(推薦表6- 一天中的小時(shí)用12小時(shí)格式(1- 一天中的小時(shí)用12小時(shí)格式(1- 一天中的小時(shí)用24小時(shí)格式(0- 小時(shí)的分鐘 分鐘的秒(0~59) 自午夜后的秒數(shù)表6- D 一周的數(shù)字日期(1~7,1為星期天,除非當(dāng)前的NLS語言把它定義為別的東西,比如星期一) 一個(gè)月中的日期 一年中的日期(1 公司使用這種格式,所以不要使用它 數(shù)字格式的月份 三個(gè)字母的月份名(JAN、FEB,等等 可以把大多數(shù)標(biāo)點(diǎn)符號(hào)放在格式掩碼的位置,而OracleDeveloper在顯示字符串中重新創(chuàng)建它??梢园言陔p引號(hào)內(nèi)的任何文本串嵌入掩碼來顯示它。例如,掩碼“MONTHDD“YYYYAPRIL18,1999注意固定長度的MONTH(月份),表征碼元素使月份名字中產(chǎn)生了額外的空格,可以利用在字串行前加FM,消除前面的空格“FMMONTHDDYYYY”,則字符串顯示為:“APRIL18,1999MONTH”或“Month定界符是在日期中分開年、月、日的標(biāo)點(diǎn)符號(hào),通常是破折號(hào)或斜線,例如18-APR-1999或4/18/1999。當(dāng)把它們作為格式掩碼的一部分時(shí),用戶可能會(huì)輸入不同的標(biāo)點(diǎn)符號(hào)(4.18.1999),掩碼則會(huì)適當(dāng)?shù)剞D(zhuǎn)換它們。為了強(qiáng)制使用特定的標(biāo)點(diǎn)符號(hào)和強(qiáng)制用戶提供日期或時(shí)間中的數(shù)字和字符,可以使用FX前綴。例如格式掩碼FXDD-MON-YYYYHH:MM就是強(qiáng)01-JAN-199912:00,包括前面的0可以同時(shí)使用FX和FM前綴,使FX只用于限定符。例如,F(xiàn)MFXDD-MON-YYYY將允許EXECUTE給出一個(gè)有趣的方法可以給對(duì)象授予廣泛的:程序封裝。任意接近用戶、角色和的方法的缺限是基于服務(wù)器的,這些的應(yīng)用忽略了用來會(huì)話的機(jī)構(gòu)。就是說,當(dāng)通過應(yīng)用程序時(shí),可以得到修改數(shù)據(jù)的,就像通過SQL*PLus或另外一個(gè)程序時(shí)得到的一樣。如果某些或全部的確認(rèn)進(jìn)程只以O(shè)racleDeveloper的代碼存在,那么由于缺少確認(rèn),在通過其他的程序時(shí)可能會(huì)引起數(shù)據(jù)庫問題。如果依賴于應(yīng)用程序?qū)拥陌踩裕敲磫栴}可能更嚴(yán)重,因?yàn)榉?wù)器并不實(shí)施這種安全性測(cè)量。如果真想要在高度安全環(huán)境下限制用戶的能力,可以把所允許的特性封裝在存貯的程序中,然后在程序中給角色或用戶授予EXECUTE(執(zhí)行)。用戶并不需要基礎(chǔ)對(duì)象的來執(zhí)行這個(gè)程序,只需要?jiǎng)?chuàng)建這個(gè)程序本身的那些。這樣,通過運(yùn)行程序的應(yīng)用程序的用戶,就可以做他需要做的事情。但是通過SQL*PLus的用戶不能用SQL直接做這些事情(。OracleDeveloper有能力使用存貯在作為數(shù)據(jù)源的數(shù)據(jù)塊中的程序。首先,考慮數(shù)據(jù)塊和這五件最基本的事情就是OracleDeveloper在數(shù)據(jù)庫中做的大部分的事情。如果為每一件事情都建立一個(gè)存貯的程序,然后把它們和數(shù)據(jù)塊連接,那么就可以享受到對(duì)OracleDeveloper應(yīng)用程序的所有程序封裝的優(yōu)點(diǎn)。任何人用這些程序上的EXECUTE(執(zhí)行)來運(yùn)行應(yīng)用程序,都將會(huì)看到應(yīng)用程序的運(yùn)行就像是使用標(biāo)準(zhǔn)的數(shù)據(jù)塊一樣。而沒有這些的任何人將不能在應(yīng)用程序中做任何事情。還有,如果把廣泛的表查找作為數(shù)據(jù)庫確認(rèn)的順序的一部分的話,那么把所有這些移到服務(wù)器作為存貯程序的一部分,可以改善性能。OracleDeveloper應(yīng)用程序的數(shù)據(jù)塊基礎(chǔ)的每一個(gè)表,建立一個(gè)專門的程序包。例如,對(duì)Skill表,可以定義這個(gè)程序包,將它連接到擁有這個(gè)程序包是抽象數(shù)據(jù)類型的一個(gè)例子—由一組特性伴隨的一組數(shù)據(jù)結(jié)構(gòu),這些特性對(duì)這組數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作。它類似面向?qū)ο蟮念悾鼪]有繼承性。注意要了解PL/SQL的意思,需要參考與PL/SQL有關(guān)的第11章和第12章。這些章節(jié)討論在程序包技術(shù)條件中看到的各種元素。第12章還包含關(guān)于結(jié)構(gòu)的細(xì)節(jié)和與OraclePL/SQLOracleDeveloper期注意raeeeloperquey-byexmle機(jī)制。你必須通過把變量傳遞到選擇程序,自己建立查詢。在剛給出的例子中,兩個(gè)WEE你想在這個(gè)值的輸入中做一個(gè)LIE表達(dá)式。你可以做得比這復(fù)雜得多,但這種技術(shù)超編譯作為程序包擁有者的程序包(例如Talbot)給需要調(diào)用這個(gè)程序包的程序的每一個(gè)角色授予在這個(gè)程序包上的EXECUTE(例作為DBA用戶或作為有CREATEPUBLICSYNONYM的用戶,并為這個(gè)程序注意必須為能通過用程裝程的用予EECTE創(chuàng)建共同義詞,除非你把擁有者的用戶名編碼作為程序名的一部分,例如像LBT.SKILLACKAGE、SELECURSOR。通常,這并不被認(rèn)為是好的編碼方法,因?yàn)樗褢?yīng)用程從Tools|DataBlockWizard中啟動(dòng)DataBlockWizard(見圖6-13)圖6-13DataBlockWizard在第一個(gè)框中,選擇StoredProcedure單選按鈕,而不要選擇Table按鈕。這就告訴下一個(gè)框詢問查詢程序,輸入程序包名和游標(biāo)程序名。例如“SKILLPACKAGE.用>或>>按鈕來調(diào)整數(shù)據(jù)塊所需要的列。注意,位于框底部的變量列表顯示的是程序的變量。不要改變這些變量。注意確信你把程序包的名字加到了程序名字上,否則DataBlockWizard將找不到這個(gè) 以做的事情(見圖6-14)圖6-14單擊Refresh在下面的三個(gè)框中重復(fù)更新、刪除和鎖定這三個(gè)步驟(分別是UPDATEROWS,DELETEROWS和LOCKROWS)-從關(guān)系定義框。這個(gè)窗口讓你在新的塊和先前定義的其他塊之間定義任何主-從關(guān)系。像往常一樣,現(xiàn)在可以前進(jìn)到LayoutWizard利用程序封裝,可以有限制地封裝在PL/SQL程序中的明確定義的動(dòng)作特性,不容許廣FormBuilder的菜單系統(tǒng)讓你執(zhí)行運(yùn)行時(shí)系統(tǒng)的不同的功能,比如Next_Record,Enter_Query或Previous_Item。這些命令的大多數(shù)直接與按鍵對(duì)應(yīng),而且大多數(shù)有等效的內(nèi)部程序,可以利用OracleDeveloper顯示缺省的菜單,或者可以建立自己定制的菜單以增加或改變命令。FormBuilder系統(tǒng)有一個(gè)內(nèi)部令菜單,在執(zhí)行表單應(yīng)用程序時(shí),如果不定義菜單,么系統(tǒng)顯示缺省菜單,如圖6-15中的菜單。如果是在MDI環(huán)境下,比如在Windows95或NT下圖6-15FormsRuntime在OracleDeveloper中看見的缺省菜單是在代碼中生成的,而且不能修改它。如果想加一些命令到缺省的菜單項(xiàng)上來改制一個(gè)菜單,那么就拷貝MENUDEF.MMBOracleDeveloper提供它作為樣板,而不是從暫存區(qū)開始。注意提供自己菜單模塊的一種結(jié)果是菜單工具條。像前面的“創(chuàng)建工具條”部分討論的那樣,這個(gè)工具條提供一些標(biāo)準(zhǔn)的操作,比如EnterQuery和NextRecord等。你不能通過定制的菜單來顯示這個(gè)缺省的工具條。必須利用菜單的Horizontal Toolbar屬性的Visible值來建立自己的工具條。菜單:主菜單、個(gè)別的菜單(比如Action或Record)和子菜單(從菜單項(xiàng)彈出的分級(jí)菜單)PL/SQL代碼或命令文本,個(gè)別菜每個(gè)菜單和菜單項(xiàng)都有一個(gè)名字,用這個(gè)名字可以在菜單模塊中唯一地識(shí)別它。另外,單個(gè)在單符在。第一,任何個(gè)別菜單或子菜單不應(yīng)有多于九個(gè)的菜單項(xiàng)。如果菜單比較短,則比較容易使用。如果需要,可以利用子菜單把幾個(gè)菜單項(xiàng)收集入組。第二,如果要使用子菜單,努力爭取只在主菜單的個(gè)別菜單的下一層上使用它們。嵌套子菜單的層次越深,找命令就越。例如在Query菜單中用Report子菜單,它有個(gè)菜單項(xiàng),LedgerSummary和MailingLabels。這就意味著系統(tǒng)中菜單級(jí)不大于三,用戶可以容易地找到這些菜單命令(見圖6-16)。第三,不要考慮根據(jù)應(yīng)用程序當(dāng)前狀態(tài)變化的動(dòng)態(tài)菜單。這樣不會(huì)將用戶弄得莫名其妙。菜單應(yīng)該是穩(wěn)定和不變化的。(變成灰色)。例如,如果顯示一個(gè)特殊的無模式窗口,這個(gè)窗口使用一些命令,但不使用其他的東西,那么不用于它的或不適用整個(gè)應(yīng)用程序的菜單項(xiàng)。可以采用Disable_Item內(nèi)子程序來做這項(xiàng)工作,這個(gè)子程序要給定菜單名和項(xiàng)名:這個(gè)例子Block|Previous菜單項(xiàng)。要允許這個(gè)項(xiàng),使用Enable_Item,采用同樣的圖6-16注意通過使用Set__Item_Property內(nèi)部子程序或通過分別在Enable_Item和如果想顯示菜單工具條,那么菜單項(xiàng)的次序就確定了工具條上圖標(biāo)的次序。因此,必須平衡菜單的次序和工具條的次序。另一方面,可以顯示你自己的工具條,把它作為應(yīng)用程序中的單獨(dú)的畫布。如果有某些理由使你不能堅(jiān)持這些原則,那么應(yīng)該考慮用不同種類令接口來簡化菜單。例如,建立一組控制框,通過按鈕來執(zhí)行命令,或建立一些框,采用輸入選擇作為選項(xiàng)而不是提供每一條命令作為菜單上的單個(gè)命令。不用列出作為菜單項(xiàng)的所有報(bào)表,可以有單個(gè)的菜單項(xiàng),如Query|RunReport,有一個(gè)框用一系列單選按鈕或復(fù)選框來選擇運(yùn)行報(bào)表。甚至可以從表示命令結(jié)構(gòu)的圖形顯示中得到好處。發(fā)揮創(chuàng)造性,使你的應(yīng)用程序更容易使用。下拉菜單:采用在單獨(dú)的菜單名字上單擊方式的菜單,這是缺省的類型,本書使用這種菜單。全屏幕(Full-screen)菜單:占據(jù)了字符模式的整個(gè)屏幕的菜單,通過選擇項(xiàng)與顯示新屏幕來定位命令。這些菜單只在字符模式和塊模式的應(yīng)用程序中工作。菜單條類型(Bar-style)菜單:這是這樣一種菜單,當(dāng)在它的上面單擊時(shí),用單獨(dú)的菜單項(xiàng)代替主菜單。這種菜單只占據(jù)菜單條的空間,而且決不擴(kuò)展到應(yīng)用程序的內(nèi)容區(qū)域,這種類型對(duì)于字符模式的應(yīng)用程序比GUI更好。在菜單可以使用以前,必須把菜單文件編譯為MMX文件。在試圖運(yùn)行使用這個(gè)文件的任何表單之前,利用FormDesigner(表單設(shè)計(jì)程序)中的File|Administration|CompileFileMMX文件。在進(jìn)行某些修改以后,還必須重新編譯這個(gè)MMX文件,因?yàn)樵谶\(yùn)行表單時(shí),不會(huì)注意對(duì)開發(fā)者來說,在運(yùn)行表單之前忘記編譯菜單是非常普遍的。每當(dāng)在菜單上工作時(shí),應(yīng)該養(yǎng)成習(xí)慣,利用與File|Administration| pileFile對(duì)應(yīng)的按鈕,比Editor讓你直接看到正在建立的菜單系統(tǒng)。必須了解它的幾個(gè)特性,才能充分編輯菜單和菜單項(xiàng)。在每個(gè)菜單左上角的小是選擇。用在這些上單擊的方式來選擇菜單對(duì)象,也可以通過單擊并把它拖到新的位置來移動(dòng)菜單。CTRL-dragging是拷貝菜單而不是移動(dòng)它。在任何菜單項(xiàng)上單擊即選擇了這個(gè)項(xiàng)。像在表單中那樣通過選擇 Tools|propertypalette項(xiàng)或通過在ObjectNavigator上的對(duì)象的圖標(biāo)上雙擊,就可以看到在對(duì)象的PropertyPalette上的任何對(duì)象的屬性。在Editor的菜單上雙擊,則可以編輯它的可以用Delete工具刪除一個(gè)被選擇的對(duì)象。編輯器工具條上的兩個(gè)專門的工具,可以用它添加菜單菜單。用CreateDown工具可以在所選擇的菜單項(xiàng)下加一個(gè)菜單項(xiàng)到菜單中。用CreateRight工具可以在選擇的菜單項(xiàng)右邊創(chuàng)建一個(gè)子菜單。這些工具對(duì)應(yīng)于|CreateDown和|CreateRight菜單項(xiàng)??梢杂猛ǔ5姆椒ǜ淖僌bjectavigator或PropertyPalette中的菜單項(xiàng)的名字。改變項(xiàng)的名字并不改變項(xiàng)的,反之亦然。如果改變名字,在編輯器看來,菜單是同樣的,因?yàn)椴]有改變。在項(xiàng)上雙擊或在Propertyalette中用Label屬性來改變。像大多數(shù)這些原則的那樣去做,但是許多用戶界面的設(shè)計(jì)卻失敗了。只有當(dāng)顯示一個(gè)框要求的信息執(zhí)行命令時(shí)才應(yīng)該這么做。例如對(duì)子菜單或?qū)νㄟ^菜單項(xiàng)用菜單項(xiàng)的CommandType(命令類型)屬性來指定那些通過選擇項(xiàng)目來執(zhí)行令的種類。表6- Null 不做任何事情,可以使用這個(gè)值創(chuàng)建分隔符項(xiàng),或使一個(gè)項(xiàng)為空,直到準(zhǔn)備要它某些事情為止 Plus、CurrentForms、Macro 利用在圓點(diǎn)分開語法_name.item_name中的菜單名和項(xiàng)名來PL/SQL中的菜單項(xiàng),可以利用這個(gè)語法把命令連接到菜單項(xiàng)、初始化項(xiàng)、改變啟動(dòng)代碼,或使能/菜單項(xiàng),利用語法main_.item_mane來主菜單上的項(xiàng),比如Block或Query。CommandText注 如果要執(zhí)行一個(gè)簡單、標(biāo)準(zhǔn)的與某種按鈕對(duì)應(yīng)令,那么使用DO_Key內(nèi)如果要使用OracleDeveloperServer,那么可以利用內(nèi)部子程序Web.show_ 行報(bào)表并在Web瀏覽器中顯示它。如果使用一個(gè)大的應(yīng)用程序,那么可以用內(nèi)部程序Run_Product運(yùn)行Oracle產(chǎn)品。例如Le
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 五金機(jī)械店鋪收租合同范本
- 辦公合租協(xié)議合同范本
- 農(nóng)村包租合同范本
- 出售大棚棉被合同范本
- 2025年社交大數(shù)據(jù)項(xiàng)目合作計(jì)劃書
- 農(nóng)村園子出售合同范本
- 合作經(jīng)營開店合同范例
- 合同范本橫線去掉
- 司機(jī)服務(wù)合同范本
- 醫(yī)院物業(yè)疫情防控合同范本
- 20以內(nèi)的加法口算練習(xí)題4000題 284
- 單位工程施工進(jìn)度計(jì)劃橫道圖表
- Nikon尼康D3100中文說明書
- 2023年廣西職業(yè)院校技能大賽高職組《Python程序開發(fā)》賽項(xiàng)競賽樣題
- LY/T 3141-2024文物建筑木構(gòu)件檢測(cè)方法
- 08J907 潔凈廠房建筑構(gòu)造
- 財(cái)務(wù)管理學(xué)(第10版)課件 第1章 總論
- 2024年南京旅游職業(yè)學(xué)院單招職業(yè)適應(yīng)性測(cè)試題庫附答案
- MOOC 職業(yè)生涯開發(fā)與管理-南京郵電大學(xué) 中國大學(xué)慕課答案
- 春節(jié)的那些事作文6篇
- DB32T3610.3-2019道路運(yùn)輸車輛主動(dòng)安全智能防控系統(tǒng)技術(shù)規(guī)范第3部分:通訊協(xié)議
評(píng)論
0/150
提交評(píng)論