|
1 前言 【KCOM 商業(yè)工程】是一個(gè)采用“基于設(shè)計(jì)的全自動(dòng)化軟件工廠”開發(fā)模式的軟件工具平臺(tái)。 采用【KCOM 商業(yè)工程】軟件工具平臺(tái)開發(fā)應(yīng)用軟件,會(huì)具有前所未有的高效率、高質(zhì)量、高適應(yīng)性。本篇將闡述如何使用“基于設(shè)計(jì)的全自動(dòng)化軟件工廠”開發(fā)模式開發(fā)復(fù)雜管理軟件。 1.1 有沒(méi)有軟件業(yè)的摩爾定律 從第一臺(tái)計(jì)算機(jī)產(chǎn)生開始,硬件技術(shù)和軟件技術(shù)幾乎同時(shí)開始它們的發(fā)展歷程。但是半個(gè)世紀(jì)以來(lái)硬件技術(shù)的發(fā)展速度要遠(yuǎn)遠(yuǎn)高于軟件技術(shù)的發(fā)展,從電子管到晶體管,從集成電路到超大規(guī)模集成電路,運(yùn)算速度從每秒幾千次到每秒幾十萬(wàn)億次。相比之下軟件技術(shù)就遠(yuǎn)遠(yuǎn)跟不上硬件技術(shù)的發(fā)展。著名的摩爾定律歸納了硬件技術(shù)的發(fā)展速度,那么軟件技術(shù)有沒(méi)有相應(yīng)的定律呢,幾十年來(lái),軟件業(yè)界人士一直沒(méi)有停止過(guò)這方面的思考。 近二十年前,美國(guó)著名的圖靈獎(jiǎng)獲得者布魯克斯博士曾在他的《沒(méi)有銀彈:軟件工程的根本和次要問(wèn)題》論文中將能給軟件產(chǎn)業(yè)帶來(lái)本質(zhì)上突變的技術(shù)稱為“銀彈”,并且宣稱,“沒(méi)有單純的技術(shù)或者管理上的進(jìn)步能夠獨(dú)立承諾在十年當(dāng)中大幅度地提高軟件的生產(chǎn)率、可靠性和解決性”。這個(gè)論斷在這二十年里一直沒(méi)有被打破。 1.2 基于組裝的人工軟件工廠 軟件開發(fā)一直以來(lái)都受到以下幾個(gè)方面的困擾:開發(fā)進(jìn)度緩慢、開發(fā)費(fèi)用超支、維護(hù)成本增長(zhǎng)過(guò)快、不恰當(dāng)?shù)墓δ茉O(shè)計(jì)、拙劣的性能、不斷膨脹的bug和代碼量、不兼容、重復(fù)開發(fā)等等。這些問(wèn)題在最嚴(yán)重的情況下就會(huì)導(dǎo)致所謂的“軟件危機(jī)”??上驳氖牵擅嫦?qū)ο蠹夹g(shù)發(fā)展而來(lái)的組件技術(shù)以及基于組件技術(shù)的軟件開發(fā)的工廠模式,有望解決以上的問(wèn)題。 軟件工廠是一個(gè)按照流水線的工作方式、遵循一定的生產(chǎn)質(zhì)量規(guī)范,批量、高效地生產(chǎn)標(biāo)準(zhǔn)化的軟件產(chǎn)品組件,并對(duì)其進(jìn)行組裝從而批量完成產(chǎn)品的機(jī)構(gòu)。 組件的組裝產(chǎn)生了軟件工廠的概念。為了構(gòu)造新應(yīng)用程序,軟件開發(fā)人員找出適當(dāng)?shù)慕M件,將這些組件加入到正生產(chǎn)中的應(yīng)用程序,同時(shí)對(duì)應(yīng)用程序進(jìn)行測(cè)試并保證應(yīng)用程序的組裝工作按照預(yù)定的規(guī)劃正常進(jìn)行。軟件開發(fā)人員所起的作用和車間流水線工人別無(wú)二至,只是開發(fā)軟件的“流水線”上跑的是應(yīng)用程序產(chǎn)品。 軟件工廠的出現(xiàn)使得軟件開發(fā)商可以通過(guò)可重復(fù)的開發(fā)過(guò)程快速生產(chǎn)出高效率、低成本、高質(zhì)量的企業(yè)級(jí)軟件。 到目前為止,“軟件工廠”這一概念基本上還停留在“基于組裝的人工軟件工廠”階段,也就是說(shuō),由軟件開發(fā)人員人工組裝軟件組件來(lái)構(gòu)造應(yīng)用軟件系統(tǒng)。在這一階段,整體的軟件開發(fā)效率還很大程度上依賴于軟件開發(fā)人員的組裝效率,軟件開發(fā)并沒(méi)有質(zhì)的飛越。 1.3 企業(yè)級(jí)應(yīng)用軟件開發(fā) 近年來(lái),企業(yè)級(jí)應(yīng)用軟件系統(tǒng)遇到了很大挑戰(zhàn)。 首先,企業(yè)級(jí)應(yīng)用軟件系統(tǒng)所要處理的環(huán)境更為復(fù)雜,功能要更為全面、細(xì)致?,F(xiàn)在經(jīng)濟(jì)全球化和競(jìng)爭(zhēng)越來(lái)越激烈,社會(huì)中不穩(wěn)定與干擾因素也處處可見、時(shí)時(shí)發(fā)生,這導(dǎo)致在研發(fā)企業(yè)的應(yīng)用軟件系統(tǒng)時(shí),需要考慮的因素越來(lái)越多,也越來(lái)越難以控制。 其次,企業(yè)需求的變化越來(lái)越快。這是現(xiàn)在企業(yè)級(jí)應(yīng)用軟件系統(tǒng)研制過(guò)程中遇到的最大問(wèn)題。由于競(jìng)爭(zhēng)的殘酷,企業(yè)的管理與業(yè)務(wù)經(jīng)常變化,可能是今天剛制定了一套業(yè)務(wù)流程,明天就要推倒重來(lái)。這就意味著,企業(yè)級(jí)應(yīng)用軟件系統(tǒng)必須要能適應(yīng)、且是快速適應(yīng)企業(yè)需求的變化。 提升競(jìng)爭(zhēng)力的最佳武器,它們最后,企業(yè)的要求越來(lái)越苛刻。由于IT系統(tǒng)越來(lái)越成為企業(yè)對(duì)系統(tǒng)的功能要求越來(lái)越高,不僅要處理日常的工作,還要具有分析、預(yù)測(cè)和決策等各種功能。只要能想到的,企業(yè)都希望IT系統(tǒng)幫它實(shí)現(xiàn)。另一方面,IT系統(tǒng)在企業(yè)的日常管理與業(yè)務(wù)中的地位越來(lái)越重要,它甚至已成為企業(yè)的關(guān)鍵業(yè)務(wù)系統(tǒng)。對(duì)于這樣的系統(tǒng),企業(yè)要求不能有絲毫的差錯(cuò),不能有一刻的停頓,不能有任何的意外,否則的話它們會(huì)為此而遭受巨大損失。因此,企業(yè)對(duì)系統(tǒng)的快速交付性、安全性、可靠性、穩(wěn)定性提出了極高的要求。 這樣的復(fù)雜的企業(yè)級(jí)的應(yīng)用軟件開發(fā)不是僅僅靠軟件組件的簡(jiǎn)單組裝就可以完成的,而且也不是人工組裝就能適應(yīng)的。 “基于組裝的人工軟件工廠”開發(fā)模式在復(fù)雜的企業(yè)應(yīng)用軟件系統(tǒng)開發(fā)面前是束手無(wú)策的。 1.4 基于設(shè)計(jì)的全自動(dòng)化軟件工廠 軟件業(yè)的發(fā)展再現(xiàn)了制造業(yè)的發(fā)展過(guò)程,軟件業(yè)與制造業(yè)具有很大程度上的相似性。制造業(yè)提供硬件產(chǎn)品和服務(wù),它的工序包括市場(chǎng)調(diào)查、產(chǎn)品定義、產(chǎn)品設(shè)計(jì)、產(chǎn)品加工;軟件業(yè)提供軟件產(chǎn)品和實(shí)施服務(wù),同樣需要經(jīng)歷業(yè)務(wù)調(diào)查、需求定義、軟件設(shè)計(jì)、軟件開發(fā)等。從本質(zhì)、流程上說(shuō),軟件業(yè)也是制造業(yè),其發(fā)展的必然歸宿是生產(chǎn)的自動(dòng)化和裝配的柔性化。 在很多人的直觀印象中,汽車是工人在生產(chǎn)線上一個(gè)個(gè)零件組裝起來(lái)的、高樓大廈是建筑工人一磚一瓦蓋起來(lái)的,因此軟件系統(tǒng)也應(yīng)該是程序開發(fā)人員一個(gè)個(gè)組件組裝起來(lái)的。這種印象其實(shí)是錯(cuò)誤的,事實(shí)是,真正起關(guān)鍵作用的是汽車設(shè)計(jì)圖紙、建筑設(shè)計(jì)圖紙,因此軟件系統(tǒng)應(yīng)該是設(shè)計(jì)出來(lái)的。 理想的軟件開發(fā)模式應(yīng)該是“基于設(shè)計(jì)的全自動(dòng)化的軟件工廠”開發(fā)模式,在這種模式下,軟件開發(fā)的主要工作是進(jìn)行軟件設(shè)計(jì),應(yīng)用軟件系統(tǒng)由“全自動(dòng)化的軟件工廠”加工而成。 【KCOM 商業(yè)工程】軟件工具平臺(tái)真正實(shí)現(xiàn)了“基于設(shè)計(jì)的全自動(dòng)化的軟件工廠”開發(fā)模式,它提供諸多的設(shè)計(jì)工具用于軟件設(shè)計(jì),提供了【管理軟件工廠】 用于將軟件設(shè)計(jì)圖加工成最終的、可交付的應(yīng)用軟件系統(tǒng),而這一加工過(guò)程僅僅需要幾十分鐘的時(shí)間。 2 應(yīng)用軟件開發(fā)過(guò)程 在【KCOM 商業(yè)工程】軟件工具平臺(tái)上開發(fā)企業(yè)級(jí)應(yīng)用軟件系統(tǒng)的一般過(guò)程包括‘需求分析’、‘系統(tǒng)設(shè)計(jì)’、‘軟件加工’、‘發(fā)布運(yùn)行’。 2.1 需求分析 需求分析是企業(yè)級(jí)應(yīng)用軟件系統(tǒng)開發(fā)的前提。要開發(fā)一個(gè)企業(yè)級(jí)應(yīng)用軟件系統(tǒng),首先需要對(duì)企業(yè)應(yīng)用需求有詳細(xì)的了解,然后進(jìn)行仔細(xì)的分析。 2.2 系統(tǒng)設(shè)計(jì) 【KCOM 商業(yè)工程】軟件工具平臺(tái)提供了一系列的軟件設(shè)計(jì)工具,包括:‘業(yè)務(wù)過(guò)程’、‘組織機(jī)構(gòu)’、‘?dāng)?shù)據(jù)模型’等等。利用這些軟件設(shè)計(jì)工具提供的功能,畫出應(yīng)用軟件系統(tǒng)的設(shè)計(jì)圖,完整地定義圖形元素的屬性及相互關(guān)系,最后將軟件設(shè)計(jì)資料提交給【管理軟件工廠】。有關(guān)各軟件設(shè)計(jì)工具的功能和使用方法,請(qǐng)參考相應(yīng)的篇章。 2.3 軟件加工 在“基于組裝的人工軟件工廠”的應(yīng)用開發(fā)模式下,這一環(huán)節(jié)是需要有軟件編程人員通過(guò)組裝組件、編寫代碼來(lái)完成的;而在“基于設(shè)計(jì)的全自動(dòng)化軟件工廠”的應(yīng)用開發(fā)模式下,這一環(huán)節(jié)是通過(guò)【管理軟件工廠】由軟件工具自動(dòng)組裝、編程來(lái)完成的。這兩種模式在開發(fā)效率上有量級(jí)上的差距。 【管理軟件工廠】讀入前一階段的軟件設(shè)計(jì)資料,通過(guò)一個(gè)類似高級(jí)語(yǔ)言編譯器編譯過(guò)程的加工過(guò)程,將軟件設(shè)計(jì)資料自動(dòng)轉(zhuǎn)化為由KCOM組件代碼來(lái)表達(dá)的應(yīng)用軟件系統(tǒng)。 2.4 發(fā)布運(yùn)行 【管理軟件工廠】加工而成的應(yīng)用軟件系統(tǒng)是可以直接運(yùn)行的。在軟件的實(shí)際運(yùn)行過(guò)程中,經(jīng)常會(huì)發(fā)現(xiàn)許多需求分析不充分、系統(tǒng)設(shè)計(jì)不合理的成份。在這種情況下,盡可以返回到需求分析、系統(tǒng)設(shè)計(jì)階段,添加新的需求、完善原有設(shè)計(jì),然后再次通過(guò)【管理軟件工廠】進(jìn)行加工。經(jīng)過(guò)多次迭代開發(fā),應(yīng)用軟件系統(tǒng)逐步完善,最終達(dá)到可以交付發(fā)布運(yùn)行的狀態(tài)。這樣的往復(fù)迭代過(guò)程在“基于設(shè)計(jì)的全自動(dòng)化軟件工廠”的應(yīng)用開發(fā)模式下是可以隨時(shí)進(jìn)行的;而在“基于組裝的人工軟件工廠”的應(yīng)用開發(fā)模式下,任何形式的迭代都會(huì)是對(duì)項(xiàng)目進(jìn)度、項(xiàng)目費(fèi)用的巨大挑戰(zhàn)。 3 管理軟件工廠 【KCOM 商業(yè)工程】軟件工具平臺(tái)里提供了一個(gè)類似高級(jí)語(yǔ)言編譯器的【管理軟件工廠】,用于將應(yīng)用系統(tǒng)設(shè)計(jì)圖加工編譯成可運(yùn)行的組件代碼。 由【KCOM 商業(yè)工程】開發(fā)的應(yīng)用系統(tǒng)一般包含基礎(chǔ)數(shù)據(jù)頁(yè)面、單據(jù)頁(yè)面、報(bào)表頁(yè)面、數(shù)據(jù)分析頁(yè)面、參數(shù)頁(yè)面。有關(guān)報(bào)表頁(yè)面和數(shù)據(jù)分析頁(yè)面的設(shè)計(jì)開發(fā),請(qǐng)參考【商業(yè)智能】篇。 3.1 軟件加工 【管理軟件工廠】的加工過(guò)程與高級(jí)語(yǔ)言的編譯過(guò)程類似: , 裝載工程文件。在【KCOM 商業(yè)工程】里打開工程文件,如“分銷管理系統(tǒng).BPJ”,裝 載各設(shè)計(jì)圖。 , 啟動(dòng)【管理軟件工廠】。點(diǎn)擊‘標(biāo)準(zhǔn)工具欄’上的‘管理軟件工廠’按鈕,啟動(dòng)【管 理軟件工廠】。 , 按下‘加工’按鈕,【管理軟件工廠】就開始加工,最后輸出可運(yùn)行的應(yīng)用軟件系統(tǒng)。 , 在開始加工前,可以按下‘取消’按鈕,關(guān)閉【管理軟件工廠】,并生成一個(gè)空白的KCOM 組件。 , 開始加工后,‘取消’按鈕變成‘停止’按鈕。 , 在加工過(guò)程中,可以按下‘停止’按鈕,中止加工過(guò)程,并輸出包含已加工模塊的程序 組件。 , 加工完成以后,將輸出一個(gè)可運(yùn)行的KCOM組件,保存以后,即可以瀏覽運(yùn)行。 , ‘加工’和‘全部加工’按鈕功能的差別類似于高級(jí)語(yǔ)言編譯器的‘編譯’和‘全部編 譯’的差別。第一次加工時(shí),【管理軟件工廠】會(huì)加工全部的設(shè)計(jì)內(nèi)容;當(dāng)修改了某些 設(shè)計(jì)內(nèi)容后,第二次加工時(shí),將只需要加工已修改的部分,這樣,第二次加工過(guò)程很快 就能完成?!考庸ぁc第一次‘加工’相同。 3.2 基礎(chǔ)數(shù)據(jù) 基礎(chǔ)數(shù)據(jù)頁(yè)面提供基礎(chǔ)資料的錄入、修改、查詢、刪除等功能。在【KCOM 商業(yè)工程】里設(shè)計(jì)基礎(chǔ)數(shù)據(jù)模塊是非常簡(jiǎn)單的,只需要定義基礎(chǔ)數(shù)據(jù)表,在設(shè)置一些屬性,就可提交【管理軟件工廠】加工成包含所有基本功能的基礎(chǔ)數(shù)據(jù)頁(yè)面。 通常情況下,每個(gè)企業(yè)應(yīng)用軟件都會(huì)包含一個(gè)由基礎(chǔ)數(shù)據(jù)模塊組成的‘模塊組’,‘模塊組’包含基礎(chǔ)數(shù)據(jù)功能模塊的入口按鈕。要設(shè)計(jì)一個(gè)‘模塊組’,只需要添加名為‘基礎(chǔ)數(shù)據(jù)’的‘物理數(shù)據(jù)模型’,該模型內(nèi)包含所有的基礎(chǔ)數(shù)據(jù)表。 3.2.1 定義基礎(chǔ)數(shù)據(jù)表 定義基礎(chǔ)數(shù)據(jù)表和創(chuàng)建一般的數(shù)據(jù)庫(kù)表沒(méi)什么差別,具體的操作方法請(qǐng)參照【數(shù)據(jù)模型】篇。 3.2.1.1 添加表 在物理數(shù)據(jù)模型里添加表,修改表的名稱為基礎(chǔ)數(shù)據(jù)表的名稱。 3.2.1.2 定義表的屬性 , 在‘?dāng)?shù)目’框里輸入數(shù)字,指定在生成測(cè)試數(shù)據(jù)時(shí),該表的測(cè)試數(shù)據(jù)記錄數(shù)。 , 定義打印方式?;A(chǔ)數(shù)據(jù)表頁(yè)面提供打印功能,可以有三種打印輸出方式:‘KCOM 商 業(yè)工程’、‘Microsoft Excel’、‘Microsoft Word’。 , 定義版面風(fēng)格:‘水平風(fēng)格’、‘垂直風(fēng)格’,缺省風(fēng)格是‘水平風(fēng)格’。版面風(fēng)格指的是 表的欄(字段)輸入框在頁(yè)面中的排版方式:‘水平排列’、‘垂直排列’。 水平風(fēng)格 垂直風(fēng)格 , 定義‘錄入’、‘修改’、‘刪除’屬性,以決定是否該基礎(chǔ)數(shù)據(jù)模塊是否具有‘錄入’、 ‘修改’、‘刪除’功能。 , 選中‘顯示’屬性,這樣在主頁(yè)面上就會(huì)有相應(yīng)的模塊按鈕入口。 3.2.1.3 添加欄(字段) 打開表的屬性對(duì)話框,依次添加全部欄。 3.2.1.4 定義欄的屬性 欄的屬性包括‘一般屬性’、‘檢查約束’。 欄的‘一般屬性’用來(lái)定義了有關(guān)欄的一些基本屬性: , 選擇定義欄(字段)的數(shù)據(jù)類型,包括長(zhǎng)度和精度。 , 定義欄的高度和寬度。欄的高度和寬度決定了在基礎(chǔ)數(shù)據(jù)頁(yè)面中欄輸入框的高度和寬 度。欄的寬度還決定了查詢結(jié)果列表中列的寬度。如果沒(méi)有定義高度,基礎(chǔ)數(shù)據(jù)頁(yè)面將 會(huì)采用缺省的高度;如果沒(méi)有定義寬度,由數(shù)據(jù)類型的長(zhǎng)度來(lái)決定寬度。數(shù)據(jù)類型的長(zhǎng) 度表示該欄(字段)所占用的字節(jié)數(shù),每個(gè)字節(jié)的在頁(yè)面中所占用的缺省寬度是6個(gè)像 素,因此VA30所對(duì)應(yīng)的寬度大致是30*6。要注意的是漢字占用2個(gè)字節(jié),因此VA30 所對(duì)應(yīng)的輸入框大約能顯示15個(gè)漢字。數(shù)據(jù)類型大致可以分為字符串類和數(shù)值類兩大 類,屬于字符串類的數(shù)據(jù)類型,通常都會(huì)指定長(zhǎng)度;屬于數(shù)值類的數(shù)據(jù)類型,通常都不 指定長(zhǎng)度,在計(jì)算寬度時(shí),一般按8個(gè)字節(jié)來(lái)算。 , 如果該欄(字段)是表的記錄的唯一標(biāo)識(shí),那么選上‘主鍵’屬性。 , 如果該表用于代碼表,并且該該欄用于代碼幫助的名稱,那么選上‘主名’屬性?!?/p> 名’欄和‘主鍵’欄一樣必須是唯一的。 , 如果該欄的內(nèi)容不能為空,那么選上‘非空’的屬性。在基礎(chǔ)數(shù)據(jù)錄入頁(yè)面提交數(shù)據(jù)時(shí), 會(huì)檢查欄的內(nèi)容是否為空,如果內(nèi)容為空,會(huì)彈出警告對(duì)話框,提示輸入該欄的內(nèi)容。 , 如果該欄的值是由其它字段計(jì)算而來(lái)的,并且選定的數(shù)據(jù)庫(kù)系統(tǒng)支持計(jì)算字段,那么選 上‘計(jì)算’屬性,并且在右邊的表達(dá)式輸入框中輸入輸入相應(yīng)的計(jì)算表達(dá)式。具有‘計(jì) 算’屬性的欄在基礎(chǔ)數(shù)據(jù)錄入頁(yè)面中沒(méi)有相應(yīng)的輸入框。 , 如果該欄的值是其它表的主鍵欄的值,那么選上‘外鍵’屬性,并且在右邊的‘外鍵表’ 中選擇所對(duì)應(yīng)的外鍵表的名稱。 , 如果該欄要表示的是圖像,那么選上‘圖像’屬性。 , 如果該欄要表示的是文件,那么選上‘文件’屬性。 , 如果要在基礎(chǔ)數(shù)據(jù)查詢頁(yè)面的查詢結(jié)果中顯示該欄的數(shù)據(jù),那么選上‘結(jié)果’屬性。 , 如果想按該欄查詢表的記錄,那么選上‘查詢’屬性。例如,要按‘商品名稱’查詢商 品的信息,那么只需設(shè)置欄‘商品名稱’的‘查詢’屬性?;A(chǔ)數(shù)據(jù)頁(yè)面有兩種風(fēng)格, 一種是帶查詢界面的風(fēng)格,另一種是不帶查詢界面的風(fēng)格。如果基礎(chǔ)數(shù)據(jù)表的任何一欄 具有‘查詢’屬性,那么生成的基礎(chǔ)數(shù)據(jù)頁(yè)面頁(yè)面就具有帶查詢界面的風(fēng)格,否則生成 的基礎(chǔ)數(shù)據(jù)頁(yè)面頁(yè)面就具有不帶查詢界面的風(fēng)格。 欄的‘檢查約束’用來(lái)定義了有關(guān)欄的一些約束屬性: , 如果欄的取值有所限制,那么可以設(shè)置欄的‘最大值’、‘最小值’、‘缺省值’。屬性‘最 大值’、‘最小值’作用在具有數(shù)值類型的欄上,屬性‘缺省值’則對(duì)欄的數(shù)據(jù)類型沒(méi)有 要求。定義了‘最大值’、‘最小值’后,在基礎(chǔ)數(shù)據(jù)錄入頁(yè)面編輯該欄時(shí),會(huì)檢查輸入 的內(nèi)容,確保輸入的數(shù)值落在指定的范圍內(nèi)。定義了‘缺省值’的欄,在裝載基礎(chǔ)數(shù)據(jù) 錄入頁(yè)面時(shí),會(huì)自動(dòng)在欄的輸入框上填上已定義的缺省值。 , 如果要在基礎(chǔ)數(shù)據(jù)錄入頁(yè)面上顯示欄的單位,那么設(shè)置‘單位’屬性。 , 如果要限制基礎(chǔ)數(shù)據(jù)錄入頁(yè)面上欄編輯框內(nèi)只能輸入大寫的字符,那么選上‘大寫’屬 性。 , 如果要限制基礎(chǔ)數(shù)據(jù)錄入頁(yè)面上欄編輯框內(nèi)只能輸入小寫的字符,那么選上‘小寫’屬 性。 , 如果要限制基礎(chǔ)數(shù)據(jù)錄入頁(yè)面上欄編輯框只能顯示,不能錄入,那么選上‘只讀’屬性。 , 基礎(chǔ)數(shù)據(jù)錄入頁(yè)面上欄編輯框有‘可操作’、‘不可操作’兩種狀態(tài),在‘不可操作’的 狀態(tài)下,欄編輯框不能編輯,并且不相應(yīng)鼠標(biāo)、鍵盤等事件。這兩種狀態(tài)通過(guò)‘可操作’ 屬性來(lái)決定。 , 數(shù)據(jù)類型為‘日期型’的欄,可以通過(guò)‘格式’屬性指定日期的輸出格式。 , 如果欄的值只能在某幾個(gè)值中選擇一個(gè),那么需要添加這些可選值。定義了可選值的欄, 在基礎(chǔ)數(shù)據(jù)錄入頁(yè)面上顯示為一個(gè)下拉列表,下拉列表列出已定義的可選值。 3.2.1.5 表元素解讀 從表的圖形元素上可以快速、直觀地解讀出有關(guān)表的許多信息: , 表的圖形元素的上方顯示的是表的名稱。 , 表的圖形元素的下方顯示的是表的鍵名稱。 , 表的圖形元素的中間顯示的是表欄的信息。 , ‘商品名稱’表示表欄的名稱。 , ‘VA30’表示表欄的類型及長(zhǎng)度,意思是類型為文本,長(zhǎng)度為30。又如:‘N5,2’表示 類型為數(shù)字,長(zhǎng)度為5,精度為2。 , 尖括號(hào)內(nèi)表示的是表欄的一些屬性,其中的對(duì)應(yīng)關(guān)系如下: 標(biāo)記 含義 pk 主鍵 pn 主名 fk 外鍵 qr 查詢 rs 結(jié)果 cp 計(jì)算 pt 路徑 id 標(biāo)識(shí) ac 關(guān)聯(lián) 3.2.2 自動(dòng)生成基礎(chǔ)數(shù)據(jù)頁(yè)面 商品’的這樣的頁(yè)定義完基礎(chǔ)數(shù)據(jù)表,就可以通過(guò)【管理軟件工廠】自動(dòng)生成具有‘頁(yè)面_面名稱的基礎(chǔ)數(shù)據(jù)頁(yè)面。 查詢界面 錄入界面 不帶查詢界面的基礎(chǔ)數(shù)據(jù)頁(yè)面 3.3 業(yè)務(wù)單據(jù) 企業(yè)的日常業(yè)務(wù)基本上都是在業(yè)務(wù)單據(jù)上進(jìn)行的,因此業(yè)務(wù)單據(jù)設(shè)計(jì)是系統(tǒng)設(shè)計(jì)中最重要并且也是最復(fù)雜的。 3.3.1 定義單據(jù)表 單據(jù)表一般由一個(gè)主表和一到多個(gè)明細(xì)子表組成。定義單據(jù)表和創(chuàng)建一般的數(shù)據(jù)庫(kù)表沒(méi)什么差別,具體的操作方法請(qǐng)參照【數(shù)據(jù)模型】篇。 3.3.1.1 添加表 假定我們現(xiàn)在要設(shè)計(jì)一張收貨單據(jù),那么可以創(chuàng)建‘收貨單’作為單據(jù)主表,創(chuàng)建‘收貨單明細(xì)’作為明細(xì)子表。 3.3.1.2 定義表的屬性 單據(jù)主表 業(yè)務(wù)單據(jù)的屬性主要取決于單據(jù)主表的屬性。 , 指定相關(guān)聯(lián)的業(yè)務(wù)過(guò)程‘收貨單’。 , 定義版面風(fēng)格:‘水平風(fēng)格’、‘垂直風(fēng)格’,缺省風(fēng)格是‘水平風(fēng)格’。版面風(fēng)格指的是 表的欄(字段)輸入框在頁(yè)面中的排版方式:‘水平排列’、‘垂直排列’。 , 定義是否使用網(wǎng)格顯示明細(xì)子表。 , 定義單據(jù)打印方式:‘KCOM 商業(yè)工程’、‘Microsoft Excel’、‘Microsoft Word’。 , 選中‘顯示’屬性,這樣在主頁(yè)面上就會(huì)有相應(yīng)的模塊按鈕入口。 單據(jù)子表 , 單據(jù)子表的‘顯示’屬性必須設(shè)為‘否’,意思是單據(jù)子表的輸入是依賴于單據(jù)主表, 在主頁(yè)面上沒(méi)有單獨(dú)的入口。 3.3.1.3 添加欄 , 用于業(yè)務(wù)單據(jù)的單據(jù)主表必須包含一個(gè)名稱為‘過(guò)程號(hào)’的欄。 , 單據(jù)子表必須包含一個(gè)指向主表的外鍵欄。 , 添加其它欄的方法和添加基礎(chǔ)數(shù)據(jù)欄相同。 3.3.1.4 定義欄的屬性 , 單據(jù)主表的‘過(guò)程號(hào)’必須是主鍵,并且數(shù)據(jù)類型必須是長(zhǎng)整型。 , 有關(guān)欄的其它屬性的用法請(qǐng)參考‘基礎(chǔ)數(shù)據(jù)欄’的屬性定義。 3.3.2 定義業(yè)務(wù)單據(jù)節(jié)點(diǎn) 與定義基礎(chǔ)數(shù)據(jù)頁(yè)面不同的是,定義業(yè)務(wù)單據(jù)頁(yè)面除了要定義單據(jù)表以外,還需要定義業(yè)務(wù)過(guò)程節(jié)點(diǎn)。每個(gè)業(yè)務(wù)單據(jù)與一個(gè)業(yè)務(wù)過(guò)程的人工業(yè)務(wù)節(jié)點(diǎn)對(duì)應(yīng)。 3.3.2.1 添加業(yè)務(wù)過(guò)程 每個(gè)業(yè)務(wù)單據(jù)都是屬于某個(gè)業(yè)務(wù)過(guò)程的一個(gè)環(huán)節(jié)。要?jiǎng)?chuàng)建業(yè)務(wù)單據(jù),首先要定義業(yè)務(wù)過(guò)程。比如要?jiǎng)?chuàng)建一個(gè)名為‘收貨單’的業(yè)務(wù)單據(jù),就要先創(chuàng)建‘收貨過(guò)程’,盡管該過(guò)程只包含‘收貨單’這一個(gè)業(yè)務(wù)節(jié)點(diǎn)。當(dāng)然,業(yè)務(wù)過(guò)程往往是復(fù)雜的。 收貨過(guò)程 , 定義業(yè)務(wù)過(guò)程屬性。 , 定義開始節(jié)點(diǎn)屬性。在開始節(jié)點(diǎn)的屬性里定義啟動(dòng)該業(yè)務(wù)過(guò)程的類型。 , 定義過(guò)程變量。過(guò)程變量是一種全局變量,它在過(guò)程實(shí)例的全生命期中存在,用以在各 業(yè)務(wù)節(jié)點(diǎn)之間傳遞信息。過(guò)程變量在業(yè)務(wù)過(guò)程的屬性對(duì)話框中定義,在業(yè)務(wù)規(guī)則、過(guò)程 規(guī)則、流向條件中被引用。過(guò)程變量常用于條件表達(dá)式,以決定過(guò)程的流轉(zhuǎn)。 業(yè)務(wù)過(guò)程與單據(jù)主表是相關(guān)聯(lián)的,這種關(guān)聯(lián)在單據(jù)主表的屬性中定義。 3.3.2.2 添加業(yè)務(wù)節(jié)點(diǎn) 之前我們已經(jīng)創(chuàng)建了一個(gè)名為‘收貨單’的單據(jù)主表,現(xiàn)在我們還需要在‘收貨過(guò)程’中添 加一個(gè)與單據(jù)主表同名的業(yè)務(wù)節(jié)點(diǎn)。在業(yè)務(wù)節(jié)點(diǎn)的屬性對(duì)話框中,我們可以定義有關(guān)業(yè)務(wù)單據(jù)的業(yè)務(wù)欄、業(yè)務(wù)變量、業(yè)務(wù)規(guī)則等等。 業(yè)務(wù)單據(jù)節(jié)點(diǎn)名稱需要與單據(jù)主表名稱相同,那是因?yàn)樾枰鶕?jù)名稱來(lái)關(guān)聯(lián)業(yè)務(wù)節(jié)點(diǎn)和單據(jù)主表。 3.3.2.3 定義業(yè)務(wù)節(jié)點(diǎn)一般屬性 業(yè)務(wù)節(jié)點(diǎn)一般屬性包括節(jié)點(diǎn)的名稱、執(zhí)行者、執(zhí)行方式、完成時(shí)間等等。 , 指明業(yè)務(wù)節(jié)點(diǎn)名稱,該名稱必須與單據(jù)主表的名稱相同。 , 設(shè)置‘執(zhí)行者’屬性,指定誰(shuí)來(lái)操作該業(yè)務(wù)單據(jù)。 , 設(shè)置‘完成時(shí)間’、‘延長(zhǎng)時(shí)間’屬性,指明該業(yè)務(wù)單據(jù)的存在期限。比如,設(shè)置‘完成 時(shí)間’的值為1,‘延長(zhǎng)時(shí)間’的值為7,意思就是該業(yè)務(wù)單據(jù)需要在1天內(nèi)完成,超過(guò) 1天的期限,該業(yè)務(wù)單據(jù)就是過(guò)期了,再過(guò)7天時(shí)間,如果該業(yè)務(wù)單據(jù)仍未提交,那么 系統(tǒng)會(huì)自動(dòng)刪除該業(yè)務(wù)單據(jù)。 , 在一些情況下,多個(gè)用戶可以操作同一個(gè)業(yè)務(wù)單據(jù),這時(shí),‘任務(wù)執(zhí)行方式’就決定了 是否允許多個(gè)用戶同時(shí)打開業(yè)務(wù)單據(jù),也就是是否能‘獨(dú)占’業(yè)務(wù)單據(jù)。一旦設(shè)置了‘獨(dú) 占’屬性,那么當(dāng)?shù)谝粋€(gè)用戶正在填寫該業(yè)務(wù)單據(jù)時(shí),其它用戶就不能打開該業(yè)務(wù)單據(jù)。 3.3.2.4 定義業(yè)務(wù)欄 單據(jù)表的欄并不是都能顯示在業(yè)務(wù)單據(jù)頁(yè)面上的。業(yè)務(wù)單據(jù)頁(yè)面上顯示的內(nèi)容是在業(yè)務(wù)節(jié)點(diǎn)的‘業(yè)務(wù)定義’中指定的。 , 在‘業(yè)務(wù)定義’對(duì)話框中首先要指明與業(yè)務(wù)節(jié)點(diǎn)相關(guān)聯(lián)的物理數(shù)據(jù)模型和單據(jù)表。 , 單據(jù)表的欄以列表的形式顯示在‘表欄’中,單據(jù)明細(xì)子表也作為特殊的欄列在‘表欄’ 中。 , 從‘表欄’中選擇欄分別添加到‘查看欄’或‘錄入欄’中,以定義哪些欄在業(yè)務(wù)單據(jù) 頁(yè)面中只能被查看以及哪些欄能編輯。剩下的欄不會(huì)出現(xiàn)在業(yè)務(wù)單據(jù)頁(yè)面上。 , 定義為‘查看欄’或‘錄入欄’的表欄,統(tǒng)稱為‘業(yè)務(wù)欄’。如果明細(xì)子表也被定義為 ‘查看欄’或‘錄入欄’,那么在‘業(yè)務(wù)欄’列出的是明細(xì)子表欄,如:‘收貨單明細(xì). 商品’。 3.3.2.5 定義業(yè)務(wù)變量 業(yè)務(wù)變量是一種全局變量,它在業(yè)務(wù)單據(jù)節(jié)點(diǎn)的全生命期中存在。在填寫一張業(yè)務(wù)單據(jù)時(shí),經(jīng)常不能一次就能填寫完畢并提交業(yè)務(wù),而希望下次繼續(xù)填寫,這種情況下,就需要用業(yè)務(wù)變量來(lái)保存一些中間信息,以便下次操作該業(yè)務(wù)單據(jù)時(shí)不必重新填寫。 3.3.3 業(yè)務(wù)規(guī)則 ‘業(yè)務(wù)規(guī)則’是【KCOM 商業(yè)工程】的核心組成部分之一,也是最復(fù)雜的。 在填寫業(yè)務(wù)單據(jù)時(shí),填寫某些業(yè)務(wù)欄往往會(huì)影響到其它業(yè)務(wù)欄。例如,在‘銷售單明細(xì)子表’中輸入‘?dāng)?shù)量’和‘實(shí)售價(jià)’,‘實(shí)售金額’會(huì)被自動(dòng)計(jì)算并顯示出來(lái)。 在提交一張業(yè)務(wù)單據(jù)時(shí),通常都需要進(jìn)行一些后臺(tái)處理。例如,提交一張‘銷售單’的同時(shí),將會(huì)改變庫(kù)存數(shù)量、記錄商品流水帳。 在傳統(tǒng)的RAD開發(fā)環(huán)境里,以上這些過(guò)程是通過(guò)響應(yīng)事件、在事件函數(shù)里書寫處理代碼來(lái)實(shí)現(xiàn)的。在由【管理軟件工廠】生成的程序組件中,也是采用RAD的方式。實(shí)現(xiàn)一個(gè)完整的企業(yè)應(yīng)用系統(tǒng),需要大量的事件和事件處理代碼,這些代碼和其它代碼混雜在一起,書寫、閱讀、修改非常麻煩。 【KCOM 商業(yè)工程】將業(yè)務(wù)處理歸納成‘業(yè)務(wù)規(guī)則’,并提供簡(jiǎn)便、直觀的業(yè)務(wù)規(guī)則定義工具用于描述‘業(yè)務(wù)規(guī)則’?!竟芾碥浖S】自動(dòng)將‘業(yè)務(wù)規(guī)則’解釋組裝成相應(yīng)的事件和代碼。 每一條業(yè)務(wù)規(guī)則都表述為:當(dāng)某個(gè)事件發(fā)生時(shí),如果滿足某種條件,那么執(zhí)行處理操作。 ‘業(yè)務(wù)規(guī)則’在業(yè)務(wù)過(guò)程節(jié)點(diǎn)的屬性對(duì)話框里定義。 在【KCOM 商業(yè)工程】里,有三種業(yè)務(wù)規(guī)則:作用在業(yè)務(wù)欄上的‘業(yè)務(wù)欄規(guī)則’、作用在業(yè)務(wù)變量上的‘業(yè)務(wù)變量規(guī)則’、作用在業(yè)務(wù)單據(jù)上的‘業(yè)務(wù)規(guī)則’。 3.3.3.1 業(yè)務(wù)欄規(guī)則 對(duì)每個(gè)業(yè)務(wù)欄(可錄入),可以定義相應(yīng)的‘業(yè)務(wù)欄規(guī)則’。每個(gè)業(yè)務(wù)欄在內(nèi)容改變、內(nèi)容提交、開始編輯、結(jié)束編輯時(shí),都可能會(huì)有一些后臺(tái)操作要處理,業(yè)務(wù)欄規(guī)則表示當(dāng)這些事件發(fā)生時(shí),如果滿足一定的條件,那么就做相應(yīng)的處理。 3.3.3.2 業(yè)務(wù)變量規(guī)則 對(duì)每個(gè)業(yè)務(wù)變量,可以定義相應(yīng)的‘業(yè)務(wù)變量規(guī)則’。每個(gè)業(yè)務(wù)變量在內(nèi)容改變時(shí),可能會(huì)有一些后臺(tái)操作要處理,業(yè)務(wù)變量規(guī)則表示當(dāng)這些事件發(fā)生時(shí),如果滿足一定的條件,那么就做相應(yīng)的處理。 3.3.3.3 業(yè)務(wù)規(guī)則 每個(gè)業(yè)務(wù)在開始、激活、結(jié)束時(shí),都可能會(huì)有一些后臺(tái)操作要處理,業(yè)務(wù)規(guī)則表示當(dāng)這些事件發(fā)生時(shí),如果滿足一定的條件,那么就做相應(yīng)的處理。 3.3.3.4 定義業(yè)務(wù)規(guī)則 定義業(yè)務(wù)規(guī)則的過(guò)程是選擇事件、書寫條件表達(dá)式、書寫規(guī)則處理表達(dá)式。 3.3.3.4.1 選擇事件 在規(guī)則定義對(duì)話框中,事件是以下拉列表形式提供選擇的。 ‘業(yè)務(wù)變量規(guī)則’只有一個(gè)事件:‘內(nèi)容改變’。該事件在業(yè)務(wù)變量?jī)?nèi)容改變時(shí)觸發(fā)。 ‘業(yè)務(wù)欄規(guī)則’有四個(gè)事件: , ‘內(nèi)容改變’。該事件在業(yè)務(wù)欄內(nèi)容改變時(shí)觸發(fā)。如果該業(yè)務(wù)欄的內(nèi)容影響到其它業(yè)務(wù) 欄,那么可以響應(yīng)該事件。 , ‘內(nèi)容提交’。該事件在業(yè)務(wù)欄內(nèi)容提交時(shí)觸發(fā)。如果在提交業(yè)務(wù)之前,要校驗(yàn)業(yè)務(wù)欄 的內(nèi)容,那么可以響應(yīng)該事件。 , ‘開始編輯’。該事件在開始編輯業(yè)務(wù)欄內(nèi)容時(shí)觸發(fā)。如果在編輯該業(yè)務(wù)欄之前需要準(zhǔn) 備相關(guān)的數(shù)據(jù),那么可以相應(yīng)該事件。 , ‘結(jié)束編輯’。該事件在結(jié)束業(yè)務(wù)欄內(nèi)容編輯時(shí)觸發(fā)。如果該業(yè)務(wù)欄的內(nèi)容影響到其它 業(yè)務(wù)欄,那么可以響應(yīng)該事件。 ‘業(yè)務(wù)規(guī)則’有三個(gè)事件: , ‘業(yè)務(wù)開始’。該事件在第一次進(jìn)入業(yè)務(wù)單據(jù)時(shí)觸發(fā)。可以響應(yīng)該事件初始化業(yè)務(wù)單據(jù)。 , ‘業(yè)務(wù)激活’。該事件在每次進(jìn)入業(yè)務(wù)單據(jù)時(shí)觸發(fā)??梢皂憫?yīng)該事件將業(yè)務(wù)單據(jù)恢復(fù)到 上次退出的狀態(tài)。 , ‘業(yè)務(wù)結(jié)束’。該事件在業(yè)務(wù)提交時(shí)觸發(fā)??梢皂憫?yīng)該事件進(jìn)行后臺(tái)業(yè)務(wù)處理。 3.3.3.4.2 書寫條件表達(dá)式 業(yè)務(wù)規(guī)則的條件表達(dá)式采用【KCOM Basic】的語(yǔ)法,因此,在表達(dá)式中可以使用【KCOM Basic】的運(yùn)算符、函數(shù)。有關(guān)【KCOM Basic】的運(yùn)算符、函數(shù)的說(shuō)明請(qǐng)參照【KCOM Basic】參考手冊(cè)。 業(yè)務(wù)規(guī)則的條件表達(dá)式可以包含參數(shù),可用的參數(shù)可以是:系統(tǒng)參數(shù)、過(guò)程變量、業(yè)務(wù)變量、業(yè)務(wù)欄等。例如: UCase([銷售單明細(xì).訂單號(hào)])=="TJ" 參數(shù)由前后兩個(gè)方括號(hào)標(biāo)識(shí)。上面的條件表達(dá)式包含一個(gè)業(yè)務(wù)欄參數(shù):[銷售單明細(xì).訂單號(hào)]。 在計(jì)算業(yè)務(wù)規(guī)則條件表達(dá)式的值時(shí),表達(dá)式中的參數(shù)會(huì)替換成真實(shí)的值,然后參與表達(dá)式計(jì)算。 3.3.3.4.3 書寫規(guī)則處理表達(dá)式 三種形式的業(yè)務(wù)規(guī)則處理表達(dá)式都可以包含參數(shù)。在這里,既可以取參數(shù)的值,也可以設(shè)置參數(shù)的值??捎玫膮?shù)可以是:系統(tǒng)參數(shù)、過(guò)程變量、業(yè)務(wù)變量、業(yè)務(wù)欄等。參數(shù)由前后兩個(gè)方括號(hào)標(biāo)識(shí)。 上面的賦值語(yǔ)句中,包含兩個(gè)業(yè)務(wù)欄參數(shù):[單據(jù)號(hào)]、[過(guò)程號(hào)]。參數(shù)[單據(jù)號(hào)]用來(lái)設(shè)置業(yè)務(wù)欄‘單據(jù)號(hào)’的值;參數(shù)[過(guò)程號(hào)]用來(lái)取業(yè)務(wù)欄‘過(guò)程號(hào)’的值。運(yùn)行時(shí),首先將參數(shù)[過(guò)程號(hào)]替換成真實(shí)的值,計(jì)算出賦值號(hào)右邊表達(dá)式的值,然后將值賦給業(yè)務(wù)欄‘單據(jù)號(hào)’。 上面的SQL語(yǔ)句中,也包含業(yè)務(wù)欄參數(shù):[過(guò)程號(hào)]。參數(shù)[過(guò)程號(hào)]用來(lái)取業(yè)務(wù)欄‘過(guò)程號(hào)’的值。運(yùn)行時(shí),首先會(huì)將參數(shù)[過(guò)程號(hào)]替換成真實(shí)的值,然后將替換后的新的SQL語(yǔ)句提交后臺(tái)數(shù)據(jù)庫(kù)系統(tǒng)執(zhí)行。 在SQL語(yǔ)句中也可以為業(yè)務(wù)欄賦值。例如: 務(wù)欄規(guī)則中。 定義了‘業(yè)務(wù)規(guī)則’以后,【管理軟件工廠】將會(huì)自動(dòng)生成響應(yīng)事件的規(guī)則處理代碼。因此,【KCOM 商業(yè)工程】的用戶并不需要關(guān)心應(yīng)用系統(tǒng)如何實(shí)現(xiàn)業(yè)務(wù)規(guī)則,只需要關(guān)心業(yè)務(wù)規(guī)則本身。 3.3.4 單據(jù)流轉(zhuǎn) 企業(yè)的日常業(yè)務(wù)由業(yè)務(wù)單據(jù)來(lái)完成,在不同的業(yè)務(wù)單據(jù)之間往往有信息需要從一個(gè)單據(jù)轉(zhuǎn)到下一個(gè)單據(jù)。 例如,下面是‘分銷管理系統(tǒng)’的發(fā)貨過(guò)程: ‘發(fā)貨單’提交以后,會(huì)觸發(fā)一個(gè)收貨過(guò)程并產(chǎn)生一張‘收貨單’。在‘發(fā)貨單’和‘收貨單’之間有業(yè)務(wù)信息關(guān)聯(lián):‘收貨單’的商品信息來(lái)自于‘發(fā)貨單’的商品信息,等等。為了避免在‘收貨單’重復(fù)輸入,減少操作時(shí)間,我們希望將‘發(fā)貨單’的商品信息自動(dòng)流轉(zhuǎn)到‘收貨單’。 在【KCOM 商業(yè)工程】里定義單據(jù)流轉(zhuǎn)是很簡(jiǎn)單的,方法如下: , 雙擊‘發(fā)貨單’和‘收貨單’之間的‘流向’,彈出‘流向?qū)傩詫?duì)話框’。 , 在‘流向?qū)傩詫?duì)話框’中定義‘業(yè)務(wù)關(guān)系’ ‘業(yè)務(wù)關(guān)系’用于定義‘流向’前后兩個(gè)業(yè)務(wù)節(jié)點(diǎn)之間的數(shù)據(jù)流轉(zhuǎn)。‘源業(yè)務(wù)欄’包括源業(yè)務(wù)節(jié)點(diǎn)的系統(tǒng)參數(shù)、業(yè)務(wù)變量、業(yè)務(wù)欄?!繕?biāo)業(yè)務(wù)欄’包括目標(biāo)業(yè)務(wù)節(jié)點(diǎn)的業(yè)務(wù)變量、業(yè)務(wù)欄。 定義業(yè)務(wù)關(guān)系的方法如下: , 在業(yè)務(wù)關(guān)系列表上選擇‘目標(biāo)業(yè)務(wù)欄’。 , 在‘表達(dá)式’輸入框里編輯關(guān)系表達(dá)式。 , 輸入‘表達(dá)式’的同時(shí)業(yè)務(wù)關(guān)系列表也同步更新。 定義了‘業(yè)務(wù)關(guān)系’以后,【管理軟件工廠】將會(huì)自動(dòng)生成包含相關(guān)處理代碼的程序組件。因此,【KCOM 商業(yè)工程】的用戶并不需要關(guān)心應(yīng)用系統(tǒng)如何實(shí)現(xiàn)單據(jù)流轉(zhuǎn)。 3.3.5 自動(dòng)生成業(yè)務(wù)單據(jù)頁(yè)面 在所有有關(guān)業(yè)務(wù)單據(jù)的設(shè)計(jì)完成以后,就可以通過(guò)【管理軟件工廠】自動(dòng)生成具有‘收貨過(guò) 程_收貨單’的這樣的頁(yè)面名稱的業(yè)務(wù)單據(jù)頁(yè)面。 單據(jù)頁(yè)面有兩種風(fēng)格:‘列表風(fēng)格’、‘網(wǎng)格風(fēng)格’,取決于單據(jù)主表的屬性定義。 網(wǎng)格風(fēng)格 列表風(fēng)格 【管理軟件工廠】除了生成單據(jù)錄入頁(yè)面以外,還自動(dòng)生成單據(jù)查詢頁(yè)面。 3.4 系統(tǒng)參數(shù) 應(yīng)用系統(tǒng)往往需要設(shè)置‘系統(tǒng)參數(shù)’來(lái)適應(yīng)不同的應(yīng)用情況。比如,根據(jù)最終用戶是否配備打印機(jī),可以設(shè)定系統(tǒng)參數(shù)‘是否打印’。系統(tǒng)參數(shù)的值將會(huì)影響到業(yè)務(wù)單據(jù)的功能。 3.4.1 定義系統(tǒng)參數(shù)表 系統(tǒng)參數(shù)用‘系統(tǒng)參數(shù)表’來(lái)表達(dá)與存儲(chǔ)。要定義系統(tǒng)參數(shù),只需要?jiǎng)?chuàng)建‘系統(tǒng)參數(shù)表’,而各系統(tǒng)參數(shù)則定義為表的欄。 ‘系統(tǒng)參數(shù)表’的創(chuàng)建是很簡(jiǎn)單的: , 添加一個(gè)表元素。 , 選中表的屬性‘系統(tǒng)參數(shù)’。 , 定義參數(shù)欄。參數(shù)欄的添加方法和基礎(chǔ)數(shù)據(jù)欄的添加方法相同。 用系統(tǒng)參數(shù) 3.4.2 使 系統(tǒng)參數(shù)主要應(yīng)用在業(yè)務(wù)單據(jù)里。在定義業(yè)務(wù)單據(jù)的業(yè)務(wù)規(guī)則時(shí),可以讀取系統(tǒng)參數(shù)的值,但不能改變系統(tǒng)參數(shù)的值。系統(tǒng)參數(shù)的值是在專門的系統(tǒng)參數(shù)頁(yè)面中設(shè)定的,并保存在數(shù)據(jù)庫(kù)中。 3.4.3 自動(dòng)生成系統(tǒng)參數(shù)頁(yè)面 定義完系統(tǒng)參數(shù)表以后,就可以通過(guò)【管理軟件工廠】自動(dòng)生成具有‘頁(yè)面_系統(tǒng)參數(shù)’的這樣的頁(yè)面名稱的系統(tǒng)參數(shù)頁(yè)面。 3.5 輔助功能 3.5.1 代碼幫助 ‘代碼幫助’是一種輸入輔助工具,用于快速、準(zhǔn)確地從它所提供的代碼列表中選取要輸入的內(nèi)容。‘代碼幫助’的內(nèi)容列表由代碼和名稱組成,稱為‘代碼表’?!a表’主要分為兩種,一種是靜態(tài)的,另一種是動(dòng)態(tài)的。‘靜態(tài)代碼表’的內(nèi)容來(lái)自于數(shù)據(jù)庫(kù)表的記錄,‘動(dòng)態(tài)代碼表’的內(nèi)容來(lái)自于數(shù)據(jù)庫(kù)查詢結(jié)果。 3.5.1.1 定義靜態(tài)代碼表 基礎(chǔ)數(shù)據(jù)表往往也是靜態(tài)代碼表?;A(chǔ)數(shù)據(jù)表要成為靜態(tài)代碼表,必須具有主鍵欄和主名欄。主鍵欄用于代碼表的代碼,主名欄用于代碼表的名稱。 代碼表 3.5.1.2 定義分類靜態(tài) ‘靜態(tài)代碼表’還可以是分類的,稱為‘分類靜態(tài)代碼表’,意思是代碼表的內(nèi)容可以按類別劃分。例如,‘商品規(guī)格’可以按‘商品小類’來(lái)劃分。 定義分類代碼表的步驟如下: , 在‘靜態(tài)代碼表’中定義具有‘路徑’屬性的欄,例如,‘商品規(guī)格’表中,‘商品小類’ 就具有‘路徑’的屬性。 , 在業(yè)務(wù)規(guī)則中指定代碼表類別。例如,在編輯‘收貨單明細(xì)’時(shí),輸入‘商品’信息后, 我們希望‘規(guī)格’的代碼表的內(nèi)容僅限于與所輸入的商品具有相同小類的規(guī)格,那么我 們可以定義一個(gè)業(yè)務(wù)欄規(guī)則,該規(guī)則在開始編輯‘規(guī)格’時(shí)觸發(fā),其內(nèi)容是: 商品] 上面的查詢語(yǔ)句用來(lái)查詢‘商品’所屬的‘小類’,查詢結(jié)果會(huì)暫存在程序變量中,并 且在彈出‘商品規(guī)格’的‘代碼幫助’時(shí)用來(lái)對(duì)‘代碼表’進(jìn)行過(guò)濾,使得‘代碼幫助’ 中只顯示相關(guān)小類的‘商品規(guī)格’。 3.5.1.3 使用靜態(tài)代碼表 指向靜態(tài)代碼表的外鍵欄所對(duì)應(yīng)的錄入頁(yè)面的編輯框,都能在按下Enter鍵或者鼠標(biāo)雙擊下彈出代碼幫助。例如,收貨單明細(xì)的‘商品’就是指向靜態(tài)代碼表‘商品’的外鍵欄,‘代碼幫助’就用于在幾萬(wàn)種商品中快速選中所要輸入的商品。 3.5.1.4 定義動(dòng)態(tài)代碼表 動(dòng)態(tài)代碼表的定義較為復(fù)雜。 , 首先,定義外鍵欄的‘動(dòng)態(tài)代碼表’屬性。例如要定義收貨單明細(xì)的‘商品’使用動(dòng)態(tài) 代碼表,要在‘商品’欄的屬性對(duì)話框中選中‘動(dòng)態(tài)代碼表’屬性。 , 其次,在業(yè)務(wù)規(guī)則中定義查詢語(yǔ)句。例如,下面就是‘商品’的動(dòng)態(tài)代碼表查詢語(yǔ)句: 其中,‘[代碼表.商品.代碼]’和‘[代碼表.商品.名稱]’分別用于指明動(dòng)態(tài)代碼表的代碼和名稱。 3.5.1.5 使用動(dòng)態(tài)代碼表 動(dòng)態(tài)代碼表主要用來(lái)縮小‘代碼幫助’的列表內(nèi)容的數(shù)目,以更快、更準(zhǔn)確地選擇輸入。例如,在輸入‘銷售單’的‘商品’信息時(shí),只需要從當(dāng)前庫(kù)存里有的商品中而不是從全部商 品中選擇輸入,這種情況下就可以使用動(dòng)態(tài)代碼表。 動(dòng)態(tài)代碼表的查詢語(yǔ)句在滿足業(yè)務(wù)規(guī)則條件時(shí)觸發(fā),例如,上一節(jié)的查詢語(yǔ)句在輸入‘帳目’后觸發(fā)查詢,查詢結(jié)果會(huì)象靜態(tài)代碼表一樣存放在本地的文件中。 當(dāng)編輯收貨單明細(xì)的‘商品’時(shí),按下Enter鍵,就會(huì)彈出包含動(dòng)態(tài)代碼表查詢結(jié)果的‘代碼幫助’;鼠標(biāo)雙擊‘商品’輸入框,彈出的是包含靜態(tài)代碼表的‘代碼幫助’。 3.5.2 查詢樹 數(shù)據(jù)條目的顯示往往通過(guò)列表來(lái)顯示,在數(shù)據(jù)條目很多的情況下,會(huì)顯得有點(diǎn)雜亂無(wú)章,因此提供一個(gè)類似Windows的資源管理器的‘查詢樹’就顯得很必要了。 3.5.2.1 定義查詢樹 ‘查詢樹’可以在基礎(chǔ)數(shù)據(jù)表中定義,也可以在視圖中定義。 3.5.2.1.1 在基礎(chǔ)數(shù)據(jù)表中定義 在基礎(chǔ)數(shù)據(jù)表中定義‘查詢樹’,只需要將表的某些欄定義為‘路徑’,那么當(dāng)查詢?cè)摶A(chǔ)數(shù)據(jù)表時(shí),在基礎(chǔ)數(shù)據(jù)查詢頁(yè)面中就會(huì)有‘查詢樹’來(lái)輔助分類查詢。 例如,我們定義了‘商品’這一基礎(chǔ)數(shù)據(jù)表,當(dāng)‘商品’的信息有幾千、幾萬(wàn)條時(shí),就會(huì)不便于瀏覽。我們知道,‘商品’有‘品牌’、‘大類’、‘小類’等屬性,因此,我們希望能按‘品牌’、‘大類’、‘小類’瀏覽‘商品’信息,這時(shí)候就可以使用‘查詢樹’。要定義‘商品’的‘查詢樹’,只需要設(shè)置表欄‘品牌’、‘大類’、‘小類’的‘路徑’屬性。 3.5.2.1.2 在視圖中定義 當(dāng)‘視圖’用于‘輸入選擇對(duì)話框’時(shí),對(duì)話框中的查詢結(jié)果列表往往也需要用‘查詢樹’來(lái)輔助分類查詢。定義視圖的‘查詢樹’和定義‘基礎(chǔ)數(shù)據(jù)表’的‘查詢樹’類似,只需要設(shè)置一些視圖欄的‘路徑’屬性。例如,用于‘輸入選擇對(duì)話框’的視圖‘發(fā)貨單明細(xì)視圖’中的‘品牌’、‘大類’、‘小類’就具有‘路徑’屬性。 3.5.2.2 使用查詢樹 定義了‘路徑’屬性的基礎(chǔ)數(shù)據(jù)查詢頁(yè)面上都有‘查詢樹’。 上圖左邊就是‘查詢’樹,使用方法很象Windows的資源管理器:在‘查詢樹’中選擇某一項(xiàng),如‘針織內(nèi)衣’,在右邊的列表中就會(huì)顯示具有‘雅戈?duì)枴放?、‘針織T恤’大類、‘針織內(nèi)衣’小類的全部商品。 3.5.3 輸入選擇對(duì)話框 ‘輸入選擇對(duì)話框’用來(lái)查詢并批量添加明細(xì)條目。例如,填寫發(fā)貨單時(shí),需要從當(dāng)前庫(kù)存中查詢并選擇要發(fā)出的商品。 3.5.3.1 定義輸入選擇對(duì)話框 輸入選擇對(duì)話框的定義步驟如下: , 定義查詢視圖。創(chuàng)建查詢視圖的方法與一般的視圖創(chuàng)建方法相同。 , 設(shè)置單據(jù)明細(xì)子表的‘視圖’屬性。 需要注意的是: , 查詢視圖的‘顯示’屬性的值必須設(shè)為‘否’,這是因?yàn)椴樵円晥D在主頁(yè)面中并不需要 有單獨(dú)的入口按鈕。 , 查詢視圖的欄的名稱必須與單據(jù)明細(xì)子表的欄的名稱對(duì)應(yīng) 3.5.3.2 使用輸入選擇對(duì)話框 定義了明細(xì)子表查詢視圖的業(yè)務(wù)單據(jù)錄入頁(yè)面,都可以彈出‘輸入選擇對(duì)話框’。 在‘輸入選擇對(duì)話框’中選擇好條目后,關(guān)閉對(duì)話框,所選的內(nèi)容就會(huì)按照查詢視圖欄和明 細(xì)子表欄的對(duì)應(yīng)關(guān)系添加到明細(xì)子表中。 3.6 權(quán)限 權(quán)限是指用戶對(duì)應(yīng)用系統(tǒng)的訪問(wèn)、操作、監(jiān)控的權(quán)力。 用戶的權(quán)限來(lái)源于用戶所屬的角色的權(quán)限。 3.6.1 訪問(wèn)功能模塊的權(quán)限 對(duì)功能模塊,可以設(shè)置‘查看’、‘更改’兩種權(quán)限。 在角色的屬性對(duì)話框中可以定義角色訪問(wèn)功能模塊的權(quán)限。 3.6.2 訪問(wèn)業(yè)務(wù)單據(jù)的權(quán)限 業(yè)務(wù)單據(jù)錄入頁(yè)面的編輯權(quán)限是由業(yè)務(wù)節(jié)點(diǎn)的‘執(zhí)行者’屬性決定的。 當(dāng)某一角色成為業(yè)務(wù)單據(jù)的執(zhí)行者時(shí),該角色的用戶就具有業(yè)務(wù)單據(jù)的編輯權(quán)限。 業(yè)務(wù)單據(jù)查詢頁(yè)面的查詢權(quán)限在角色的屬性對(duì)話框中定義,方法與定義功能模塊權(quán)限相同。 3.6.3 監(jiān)控業(yè)務(wù)過(guò)程的權(quán)限 , 要在瀏覽器端監(jiān)控業(yè)務(wù)過(guò)程,前提是工程的‘過(guò)程監(jiān)控’屬性值為‘真’。 設(shè)置工程的‘過(guò)程監(jiān)控’屬性的方法是:點(diǎn)擊‘標(biāo)準(zhǔn)工具欄’上的‘商業(yè)工程屬性’按鈕,彈出屬性對(duì)話框,選中‘過(guò)程監(jiān)控’屬性。 , 要在瀏覽器端監(jiān)控業(yè)務(wù)過(guò)程,還需要定義哪些業(yè)務(wù)過(guò)程可監(jiān)控,方法是設(shè)置業(yè)務(wù)過(guò)程的 模型屬性‘可查看業(yè)務(wù)過(guò)程’值為‘真’。 , 要在瀏覽器端監(jiān)控業(yè)務(wù)過(guò)程,最后還需要指明那些角色具有監(jiān)控權(quán)限。 屬性‘啟動(dòng)者可加控’決定了該業(yè)務(wù)過(guò)程的啟動(dòng)者是否具有監(jiān)控該業(yè)務(wù)過(guò)程的權(quán)限。 3.6.4 系統(tǒng)管理員 ‘系統(tǒng)管理員’具有對(duì)應(yīng)用系統(tǒng)的最大權(quán)限。 , 定義了‘系統(tǒng)管理員’屬性的角色,不必定義數(shù)據(jù)權(quán)限,就能訪問(wèn)所有的功能模塊。 , ‘系統(tǒng)管理員’可以完全監(jiān)控業(yè)務(wù)過(guò)程,如:‘暫停過(guò)程’、‘終止過(guò)程’、‘刪除過(guò)程’ 等。 ‘系統(tǒng)管理員’在角色的‘一般屬性對(duì)話框’中定義。
信息發(fā)布:廣州名易軟件有限公司 http://m.jetlc.com
|