本文主要針對(duì)用例之間的調(diào)度,和定時(shí)運(yùn)行用例這兩個(gè)方向進(jìn)行了介紹,其中用例之間的調(diào)度在RobotFramework平臺(tái)上直接可以實(shí)現(xiàn),對(duì)定時(shí)運(yùn)行用例,我們進(jìn)行了Robot平臺(tái)的二次開發(fā)。
1、前一個(gè)用例的執(zhí)行結(jié)果是后一個(gè)用例的執(zhí)行條件,在python編譯環(huán)境下定義兩個(gè)函數(shù)。
在RobotFramework里添加該資源庫(kù)文件,定義一個(gè)全局變量${turn},新建兩個(gè)用例test1和test3,Robot平臺(tái)提供了關(guān)鍵詞Run Keyword if,可以實(shí)現(xiàn)兩個(gè)用例之間的調(diào)度關(guān)系,如果函數(shù)(在Robot稱為關(guān)鍵字)check返回的是True則執(zhí)行函數(shù)Add,否則不會(huì)執(zhí)行函數(shù)Add。
2、前一個(gè)用例的執(zhí)行結(jié)果是后一個(gè)測(cè)試用例的輸入值,定義一個(gè)全局變量${sum},將函數(shù)Add的執(zhí)行結(jié)果傳給函數(shù)Fun。
【RobotFramework二次開發(fā)】 關(guān)于定時(shí)運(yùn)行用例,對(duì)Robot平臺(tái)進(jìn)行了二次開發(fā),在Robot平臺(tái)的菜單欄里添加一個(gè)Tasks菜單項(xiàng),點(diǎn)擊下拉菜單Schedule彈出設(shè)置界面。
1、該Task Schedule Dialog 可以設(shè)計(jì)定時(shí)運(yùn)行用例,有兩種觸發(fā)方式,Single和Cycle(CI Trigger方式目前沒有實(shí)現(xiàn)),其中Cycle可以設(shè)置間隔時(shí)間,單位為hour、day、week;
2、打開Task Schedule Dialog時(shí),自動(dòng)將Robot平臺(tái)設(shè)計(jì)的用例樹放在界面的綠色區(qū)域,可以選擇單個(gè)用例或多個(gè)用例,輸入Task Name(也就是Robot平臺(tái)的tag),選定觸發(fā)方式(Single或Cycle),點(diǎn)擊Add按鈕添加任務(wù);
4、鼠標(biāo)點(diǎn)擊一個(gè)任務(wù)時(shí),在綠色區(qū)域的用例樹中,被設(shè)置的用例會(huì)自動(dòng)打勾顯示。
5、點(diǎn)擊Start按鈕將按設(shè)置時(shí)間依次運(yùn)行各用例,如圖6所示,如果用例是保存在文件夾D:python_testSofttest,,任務(wù)的運(yùn)行報(bào)告自動(dòng)保存在當(dāng)前目錄的OutputDirN下,如果是Cycle方式會(huì)再建一層文件夾(文件夾名為任務(wù)運(yùn)行時(shí)間)。
關(guān)注點(diǎn):Task Schedule Dialog里的Task Name就是Robot平臺(tái)的tag,執(zhí)行的過程先判斷設(shè)定時(shí)間,如果滿足條件,將Output Directory目錄下的含有該tag的所有用例都運(yùn)行一次。用例執(zhí)行順序和最初在Robot平臺(tái)設(shè)計(jì)的用例順序一致。
6、Robot平臺(tái)的二次開發(fā)使用方法:將FrameTask.py,mainframe.py,TaskSchedule.py,TestTree.py放在C:Python26Libsite-packagesrobotideui,覆蓋所有文件,再打開Robot就可以看到菜單項(xiàng)。
網(wǎng)站二次開發(fā)合同
甲方:
乙方:
甲方在此委托乙方進(jìn)行
網(wǎng)站的二次開發(fā)。為明確雙方責(zé)任,經(jīng)友好協(xié)商,雙方達(dá)成以下協(xié)議:
第一條:項(xiàng)目的內(nèi)容、價(jià)款、開發(fā)進(jìn)度、交付方式。
第二條:甲方的權(quán)利和義務(wù)
1.提供專人與乙方聯(lián)絡(luò)。
2.提供所有需要放到網(wǎng)上的資料交給乙方,并保證資料的合法性。
3.乙方在完成合同規(guī)定的義務(wù)后,甲方按照附錄一的要求,及時(shí)支付費(fèi)用。
4.甲方將在著作權(quán)法的范圍內(nèi)使用本合同標(biāo)的及相關(guān)作品、程序、文件源碼,不得將其復(fù)制、傳播、出售或許可給其它第三方。
5.甲方對(duì)本合同標(biāo)的中的網(wǎng)頁、圖像享有排版的版權(quán)。
6.版權(quán)所有歸甲方(包括原文件、程序、文字、動(dòng)畫文件、有聲文件、及相關(guān)作品)第三條:乙方的權(quán)利和義務(wù)
1.提供專人與甲方聯(lián)絡(luò)。
2.按附錄一的要求,使用甲方資料,進(jìn)行網(wǎng)站的二次開發(fā)。
3.在附錄一要求的期限內(nèi),完成網(wǎng)站的二次開發(fā),并通知甲方進(jìn)行驗(yàn)收。
4.在驗(yàn)收期內(nèi)甲方要求下,對(duì)不合格地方進(jìn)行修改。
5.乙方未經(jīng)甲方同意不得向第三方拷貝或泄露網(wǎng)站程序。6.乙方負(fù)責(zé)維護(hù)甲方網(wǎng)站運(yùn)營(yíng)期間數(shù)據(jù)的安全。
7.在附錄一要求進(jìn)行網(wǎng)站更新的情況下,在接到甲方要求網(wǎng)站更新的傳真2日內(nèi),按照要求對(duì)網(wǎng)站進(jìn)行更新;
8.在附錄一要求進(jìn)行培訓(xùn)的情況下,對(duì)甲方1-3名技術(shù)人員進(jìn)行培訓(xùn)。第四條:驗(yàn)收
1.驗(yàn)收標(biāo)準(zhǔn)有以下幾條:
a.甲方可以通過任何上網(wǎng)的計(jì)算機(jī)訪問這個(gè)網(wǎng)站。
b.主頁無文字拼寫及圖片(以甲方提供的材料為準(zhǔn))錯(cuò)誤。
c.網(wǎng)絡(luò)程序正常運(yùn)行。
2.驗(yàn)收期為5天時(shí)間。
第五條 違約責(zé)任
1.任何一方有證據(jù)表明對(duì)方已經(jīng)、正在或?qū)⒁`約,可以中止履行本合同,但應(yīng)及時(shí)通知對(duì)方。若對(duì)方繼續(xù)不履行、履行不當(dāng)或者違反本合同,該方可以解除本合同并要求對(duì)方賠償損失。
2.因不可抗力而無法承擔(dān)責(zé)任的一方,應(yīng)在不可抗力發(fā)生的3 天內(nèi),及時(shí)通知另一方。
3.一方因不可抗力確實(shí)無法承擔(dān)責(zé)任,而造成損失的,不付賠償責(zé)任。本合同所稱不可抗力是指不能預(yù)見、不能克服并不能避免且對(duì)一方當(dāng)事人造成重大影響的客觀事件,包括但不限于自然災(zāi)害如洪水、地震、火災(zāi)和風(fēng)暴等以及社會(huì)事件如戰(zhàn)爭(zhēng)、**、政府行為等。
第六條 保密條款
雙方應(yīng)嚴(yán)格保守在合作過程中所了解的對(duì)方的商業(yè)及技術(shù)機(jī)密,否則應(yīng)對(duì)因此造成的損失承擔(dān)賠償。
第七條 以上條款如有未盡事疑,經(jīng)甲、乙雙方協(xié)商后加以補(bǔ)充:
補(bǔ)充內(nèi)容: 乙方需提供使用文檔,并根據(jù)使用文檔對(duì)甲方技術(shù)人員提供相關(guān)培訓(xùn)等支持。并在交付后有免費(fèi)代碼維護(hù)義務(wù),并在雙方合作共贏的基礎(chǔ)上提供更多技術(shù)支持(比如有償?shù)墓δ荛_發(fā)等項(xiàng)目)。
第八條 其它
1.如果本合同任何條款根據(jù)現(xiàn)行法律被確定為無效或無法實(shí)施,本合同的其他所有條款將繼續(xù)有效。此種情況下,雙方將以有效的約定替換該約定,且該有效約定應(yīng)盡可能接近原約定和本合同相應(yīng)的精神和宗旨。
2.附錄一規(guī)定的有效期滿,乙方未完成附錄一任務(wù),超出期限每天扣兩百,超出期限后放棄該任務(wù),按網(wǎng)站的費(fèi)用雙倍賠償。
3.如乙方在期限內(nèi)放棄該任務(wù),按網(wǎng)站的費(fèi)用雙倍賠償。3.本合同經(jīng)雙方授權(quán)代表簽字并蓋章,自簽訂日起生效。
4.本合同一式兩份,雙方當(dāng)事人各執(zhí)一份,具有同等法律效力。
甲方(蓋章):
乙方(蓋章)代表:
代表:
1.1 信息源選擇及規(guī)范制定
Nutch通過制定相應(yīng)的URL規(guī)則來達(dá)到對(duì)限定的URL進(jìn)行爬取,即過濾信息。默認(rèn)情況下可以在相關(guān)的配置文件中進(jìn)行配置,它用正則表達(dá)式來規(guī)范URL。當(dāng)然,還可以自己編寫相應(yīng)的插件等來實(shí)現(xiàn)所制定的URL規(guī)范。
1.2 信息預(yù)處理
這里的信息預(yù)處理是指將Nutch爬蟲所下載下來的內(nèi)容轉(zhuǎn)變?yōu)镹utch索引器所能調(diào)用的文本。信息預(yù)處理過程主要涉及到如下內(nèi)容:
(1)格式識(shí)別并抽取文本。一般情況下,Nutch爬蟲下載下來的文檔是HTML,但是網(wǎng)絡(luò)上還存在諸多類型的其他文本:txt、doc、pdf、xls、rtf等等,甚至還有多媒體的文檔格式。在進(jìn)行索引之前,必然從這些下載下來的文件中抽取出文本信息,針對(duì)不同的格式文檔抽取方式也不同。Nutch默認(rèn)對(duì)HTML、TXT能直接處理,而其他的有些已經(jīng)實(shí)現(xiàn)但并沒有加載。目前有很多開源軟件可以抽取文本信息,如word文檔的poi、pdf文檔的pdf-reader等等。在二次開發(fā)時(shí),需要對(duì)相應(yīng)的文檔格式進(jìn)行編寫抽取文本工具。
(2)信息過濾。這里的信息過濾是指從抽取的文本中濾去那些不希望使其存在的文本內(nèi)容,這個(gè)過程也不一定是獨(dú)立的,可能會(huì)與上一個(gè)過程存在相交之處。舉個(gè)實(shí)例,比如針對(duì)某一個(gè)網(wǎng)站的某一部分網(wǎng)頁中的部分區(qū)域不希望被索引,那么可以編寫一個(gè)相關(guān)的插件來實(shí)現(xiàn)對(duì)這個(gè)網(wǎng)站的這類網(wǎng)頁進(jìn)行過濾,去除這一區(qū)域內(nèi)的內(nèi)容。
(3)編碼格式的轉(zhuǎn)換。網(wǎng)絡(luò)上的信息編碼格式五花八門,并不是特別規(guī)范。一般情況下,Nutch處理后都能實(shí)現(xiàn)編碼的統(tǒng)一,但是有些信息卻不能很好地被默認(rèn)程序轉(zhuǎn)換,這時(shí)候就應(yīng)當(dāng)對(duì)Nutch進(jìn)行擴(kuò)展,以實(shí)現(xiàn)編碼的轉(zhuǎn)換。
1.3 索引本土化構(gòu)建
以過信息預(yù)處理后的信息可以直接為Nutch索引。在索引過程中,需要考慮的因素也有很多。一是中文類語言的分詞問題。這一點(diǎn)在前面實(shí)驗(yàn)中已有詳細(xì)的分析并做了一些總結(jié)。二是信息的進(jìn)一步處理,這一過程是在尋找最能表達(dá)原文語義的語詞集合。另外還有一些其他相關(guān)技術(shù)如詞干提取、停止詞、本體等等。這個(gè)過程是相當(dāng)重要的一個(gè)過程,直接決定了查詢服務(wù)的效果。
1.4 排序規(guī)則制定
排序規(guī)則的制定并不僅僅影響到查詢結(jié)果,可以說它貫穿在了整個(gè)搜索引擎的工作過程中。因?yàn)槟苡绊懪判蛞?guī)則的因素有很多,比如說與用戶需求的相關(guān)性、系統(tǒng)業(yè)務(wù)需求等,具體的有如語詞在文獻(xiàn)中的詞頻、在整個(gè)文獻(xiàn)空間的詞頻、語詞位置等,甚至是信息時(shí)間都會(huì)影響到排序。因此在二次開發(fā)時(shí),需要根據(jù)需求,針對(duì)性地制定排序規(guī)則,并把它反映在系統(tǒng)中。
1.5 查詢系統(tǒng)及用戶界面
Nutch的查詢系統(tǒng)是發(fā)布在Tomcat下的,它提供了一種類似于google的查詢界面,并且支持多語言。在實(shí)際的二次開發(fā)中,并不一定支持多種語言,可針對(duì)某一種語言進(jìn)行改寫。另外還可以對(duì)查詢過程進(jìn)行二次改發(fā),改變它的查詢方式、添加分頁、增加summery等。對(duì)于用戶接口界面,則根據(jù)實(shí)際情況改寫即可。
UAP報(bào)表二次開發(fā)手冊(cè)
v.871 1.數(shù)據(jù)源定義
報(bào)表數(shù)據(jù)源可分為實(shí)體關(guān)系查詢,SQL腳本查詢和自定義查詢?nèi)齻€(gè)類型,如下圖所示:
圖1.1 其中數(shù)據(jù)源名稱和數(shù)據(jù)源描述是為了標(biāo)識(shí)數(shù)據(jù)源以及說明數(shù)據(jù)源的功能。
1.1查看或修改現(xiàn)有數(shù)據(jù)源
“查看或修改現(xiàn)有數(shù)據(jù)源”是指對(duì)原先已經(jīng)創(chuàng)建的數(shù)據(jù)源進(jìn)行修改(系統(tǒng)預(yù)置的數(shù)據(jù)源不允許修改),或者可以在新建報(bào)表時(shí)選擇已存在的數(shù)據(jù)源,如下圖:
圖1.2 選“下一步”:
圖1.3 則列所有已存在的數(shù)據(jù)源,選擇其中一個(gè),按“下一步”:
圖1.4 功能列表是數(shù)據(jù)引擎內(nèi)部使用機(jī)制,直接選“下一步”:
圖1.5 這個(gè)是設(shè)置報(bào)表數(shù)據(jù)源的最后一個(gè)步驟,由于選定的數(shù)據(jù)源為自定義查詢類型,所以第一個(gè)頁簽為自定義查詢組件的相關(guān)信息(關(guān)于自定義查詢組件的具體情況,請(qǐng)查閱本手冊(cè)1.3單元);第二個(gè)頁簽如下圖:
圖1.6 查詢結(jié)果列是指該數(shù)據(jù)查詢結(jié)果的具體情況,包括列名稱,列的數(shù)據(jù)類型,列的區(qū)域語言描述。這些信息將構(gòu)成報(bào)表格式設(shè)計(jì)時(shí)的數(shù)據(jù)源信息(關(guān)于這部分內(nèi)容的詳細(xì)情況請(qǐng)參閱UAP報(bào)表設(shè)計(jì)時(shí)幫助文檔)。
另一個(gè)頁簽為“過濾條件設(shè)置”,如下圖:
圖1.7 具體包括過濾條件名稱,過濾條件的區(qū)域語言描述,這個(gè)將在過濾條件的數(shù)據(jù)源下拉列表中出現(xiàn),這些信息將用來設(shè)置從過濾控件讀去用戶輸入條件值來對(duì)查詢的結(jié)果進(jìn)行過濾(具體情況清參閱本手冊(cè)2.2單元)。
之后,選擇“完成”即結(jié)束數(shù)據(jù)源定義而進(jìn)入報(bào)表格式定義。
1.2實(shí)體關(guān)系查詢
在圖1.1步驟中選定“實(shí)體關(guān)系查詢”,點(diǎn)擊“下一步”則進(jìn)入實(shí)體關(guān)系查詢類型的數(shù)據(jù)源定義:
圖1.8 這里必須要添加至少一個(gè)關(guān)聯(lián)實(shí)體,點(diǎn)擊“添加”,則可選擇系統(tǒng)已經(jīng)定義好的實(shí)體:
圖1.9
選定實(shí)體,然后點(diǎn)擊“確定”:
圖1.10 點(diǎn)擊“下一步”(如果選擇了多個(gè)實(shí)體,則還需要定義實(shí)體之間的關(guān)系。關(guān)于如何定義一個(gè)實(shí)體以及如何定義實(shí)體之間的關(guān)系,請(qǐng)參閱數(shù)據(jù)引擎的相關(guān)文檔):
圖1.11 接著必須添加結(jié)果列,即圖1.6中的“查詢結(jié)果列”。點(diǎn)擊“添加”:
圖1.12 這里彈出的列表為選定的單個(gè)實(shí)體或多個(gè)實(shí)體能查詢到的所有的結(jié)果列的信息。選定需要的查詢結(jié)果列后,點(diǎn)擊“確定”:
圖1.13 這個(gè)步驟中,“行數(shù)據(jù)權(quán)限”可以用來限制用戶查詢某些具體行數(shù)據(jù)的權(quán)限(行數(shù)據(jù)權(quán)限的設(shè)置以及其他高級(jí)功能的使用方法請(qǐng)查閱數(shù)據(jù)引擎相關(guān)文檔)。
1.3 SQL腳本查詢
在圖1.1步驟中選定“SQL腳本查詢”,點(diǎn)擊“下一步”則進(jìn)入SQL腳本查詢類型的數(shù)據(jù)源定義:
圖1.14 SQL腳本查詢類型又分為SQL腳本和存儲(chǔ)過程兩個(gè)類別,可通過第一個(gè)頁簽的左上端的下拉列表中選擇相應(yīng)的類別(具體如何定義兩種類別請(qǐng)查閱數(shù)據(jù)引擎相關(guān)文檔)。其他三個(gè)頁簽中,“查詢結(jié)果列”和“過濾條件設(shè)置”已經(jīng)在前面的單元中說明,此處不在詳述。其中,這種數(shù)據(jù)源類型有一個(gè)“查詢參數(shù)設(shè)置”頁簽,如下圖:
圖1.15 如果腳本類型中選擇的是“存儲(chǔ)過程”,則此處可以使用“刷新”按鈕來獲取存儲(chǔ)過程所需要的參數(shù);而SQL腳本類型則需要手動(dòng)填寫參數(shù)的信息。需要注意的是,參數(shù)的名稱必須與存儲(chǔ)過程或SQL腳本的名稱完全一致。運(yùn)行時(shí)查詢參數(shù)的具體值來源是通過過濾條件獲得的,因此查詢參數(shù)需要和過濾條件綁定在一起(綁定方法請(qǐng)參閱本手冊(cè)2.2單元)。
1.4 自定義查詢
自定義查詢是指提供一個(gè)COM組件(通常為VB6.0組件)或.NET組件(通常為C#組件)來提供獲取數(shù)據(jù)的方法(SQL腳本,存儲(chǔ)過程或數(shù)據(jù)庫(kù)臨時(shí)表)。關(guān)于自定義查詢組件的建立方法請(qǐng)參閱本手冊(cè)3.2單元。
在圖1.1步驟中選定“自定義查詢”,點(diǎn)擊“下一步”則進(jìn)入自定義查詢類型的數(shù)據(jù)源定義:
圖1.16 其中數(shù)據(jù)服務(wù)信息指的是自定義組件的相關(guān)信息,關(guān)于自定義查詢組件的建立方法請(qǐng)參閱本手冊(cè)3.2單元。
2.報(bào)表過濾條件
2.1 過濾條件設(shè)計(jì)
除了UAP本身單獨(dú)提供了過濾條件的設(shè)計(jì)工具,報(bào)表本身也提供了專門為報(bào)表設(shè)計(jì)過濾條件的快捷方式。以下是報(bào)表設(shè)計(jì)過濾條件的入口:
圖 2.1
圖 2.2 點(diǎn)擊“標(biāo)準(zhǔn)條件”進(jìn)入過濾條件設(shè)計(jì)器:
圖 2.3
界面說明:
是否支持高級(jí)條件:選此項(xiàng)后,在運(yùn)行時(shí)過濾窗口中會(huì)出現(xiàn)“高級(jí)條件”頁簽,用于用戶自由選擇過濾條件的組合。
規(guī)則組件:此項(xiàng)定義由過濾控件回調(diào)的規(guī)則組件類。
是否取消二次開發(fā):此復(fù)選項(xiàng)只有在以“U870”項(xiàng)目進(jìn)入U(xiǎn)AP時(shí)才會(huì)顯示,如果被選中,那么以其它項(xiàng)目進(jìn)入U(xiǎn)AP的過濾設(shè)計(jì)器不能新增和刪除過濾條件。
此處可新增或修改一個(gè)過濾條件。雙擊某個(gè)已存在的過濾條件,則進(jìn)入這個(gè)條件的修改界面:
圖 2.4 界面說明:
語種:設(shè)置過濾條件項(xiàng)顯示的語種。
中文簡(jiǎn)體名稱:過濾條件項(xiàng)的鍵值,唯一標(biāo)識(shí)此過濾條件項(xiàng),不能重復(fù)??梢砸宰帜浮?shù)字或漢字來命名。
標(biāo)題:在運(yùn)行時(shí)過濾窗口中顯示的文字,支持多語種設(shè)置。編輯類型:過濾條件項(xiàng)的類型,分別為文本框、參照、日期、數(shù)字、枚舉、SQL語句、自定義。
參照ID:當(dāng)編輯類型選擇參照類型后,必須選定一個(gè)參照ID。比較符:過濾條件項(xiàng)比較符號(hào)。
小數(shù)位數(shù):當(dāng)編輯類型為數(shù)字類型時(shí),此選項(xiàng)可以設(shè)置小數(shù)位數(shù)。分組:為過濾條件選定一個(gè)分組,在運(yùn)行時(shí)將按照分組來顯示過濾條件項(xiàng)。
數(shù)據(jù)源:為過濾條件項(xiàng)選定數(shù)據(jù)源,可以下拉選擇或直接手工輸入。順序號(hào):指定過濾條件項(xiàng)在運(yùn)行時(shí)顯示的位置,如果不輸入,將自動(dòng)產(chǎn)生。
是否常用條件:如果選中,將在運(yùn)行時(shí)顯示在“常用”頁簽中。是否必輸:如果選中,在運(yùn)行時(shí)必須輸入值,否則會(huì)出現(xiàn)提示信息。是否區(qū)間條件:如果選中,在運(yùn)行時(shí)將顯示為兩個(gè)輸入框組合而成的形式,表示從值1到值2的意思。在運(yùn)行時(shí),用戶選擇或輸入的不是單值,而表示一個(gè)取值范圍。
是否多選:如果選中,表示此過濾條件項(xiàng)可以選擇多個(gè)值。
允許用戶修改比較符:如果選中,用戶在運(yùn)行時(shí)可以通過濾設(shè)功能改變比較符。
作為或條件:如果選中,在運(yùn)行時(shí)將以“或”條件來組合到過濾條件生成的SQL語句中,默認(rèn)是以“與”條件組合的。
參照返回字段:當(dāng)編輯類型為參照類型時(shí),此選項(xiàng)表示參照返回的是哪個(gè)字段的值。編碼對(duì)應(yīng)參照中的主鍵字段,名稱對(duì)應(yīng)參照中的描述字段。也可以手工輸入要返回的字段名,一定要與參照中的字段名一致。
默認(rèn)值、到:設(shè)置過濾條件項(xiàng)的默認(rèn)值,將在運(yùn)行時(shí)自動(dòng)顯示。如果為區(qū)間條件,可以設(shè)置“到”默認(rèn)值。
修改界面的第二個(gè)頁簽是過濾條件項(xiàng)窗口枚舉:
圖 2.5
界面說明:
枚舉(aa_enum):指在U861中使用的枚舉型,此類型是在AA_Enum數(shù)據(jù)表中定義的。枚舉類型,枚舉類型名稱,是EnumType字段值。默認(rèn)顯示,在運(yùn)行時(shí)當(dāng)用戶點(diǎn)擊下拉按鈕后顯示的可供選擇的項(xiàng),注意是以“,”分隔的EnumCode字段的值。
枚舉類型:指明在Meta庫(kù)中的MetaEnumDef表中的枚舉,對(duì)應(yīng)MetaID字段。
枚舉串:如果沒有在數(shù)據(jù)庫(kù)中預(yù)制枚舉類型,也可以通過此項(xiàng)輸入一個(gè)枚舉串。格式為“0{#}1{##}A{#}B”,在“{##}”前的為返回值,之后的則為顯示值,并且在返回值與顯示值中分別以“{#}”分隔。
只能定義以上三種枚舉中的一種,否則會(huì)出現(xiàn)提示信息。修改界面的第三個(gè)頁簽是過濾條件項(xiàng)窗口SQL語句:
圖 2.6
界面說明:
SQL文本框:在SQL文本框中輸入SQL語句,可以不用加別名。
標(biāo)題:在運(yùn)行時(shí)中顯示的列標(biāo)題,標(biāo)題數(shù)量與上面的SQL的字段對(duì)應(yīng),并用“,”分隔,例如“標(biāo)題1,標(biāo)題2”。
返回字段:用此字段的值構(gòu)成過濾控件返回調(diào)用者的過濾SQL語句。顯示字段:顯示在運(yùn)行時(shí)過濾窗口中的值。
在U870中,SQL語句類型的過濾條件主要為兼容以前版本,所以如果在U870中新建過濾條件時(shí),請(qǐng)不要選用SQL語句類型,而改用參照類型。修改界面的第四個(gè)頁簽是過濾條件項(xiàng)窗口SQL語句:
圖 2.7
屬性說明:
參照樣式:當(dāng)編輯類型選擇為參照類型時(shí),可以指定參照的樣式,分別為彈出式和下拉式,默認(rèn)為彈出式。
關(guān)于過濾最后值得特別指出的是,過濾條件之間可控制相互關(guān)系,例如兩個(gè)過濾條件都有參照,則可控制其中一個(gè)過濾條件的參照取值范圍由另一個(gè)過濾條件的取值來決定。此外還存在其他相關(guān)控制行為,這些功能都是通過規(guī)則組件來實(shí)現(xiàn)的。關(guān)于規(guī)則組件的詳細(xì)實(shí)現(xiàn),請(qǐng)參閱過濾條件的相關(guān)文檔。
2.2 過濾條件與數(shù)據(jù)源的關(guān)系
此處主要說明如何把過濾條件跟數(shù)據(jù)源關(guān)聯(lián)起來,以達(dá)到由用戶輸入來實(shí)現(xiàn)查詢不同數(shù)據(jù)的目的。
對(duì)于實(shí)體關(guān)系類型的數(shù)據(jù)源,只要在過濾條件的基本屬性頁中選擇數(shù)據(jù)源的相應(yīng)列就能實(shí)現(xiàn),如下圖:
圖 2.8 用戶就可以在查詢報(bào)表時(shí)進(jìn)行過濾:
圖 2.9
對(duì)于SQL腳本類型的數(shù)據(jù)源,無論是簡(jiǎn)單的sql腳本類型還是存儲(chǔ)過程,都是通過將其參數(shù)與過濾條件進(jìn)行綁定來實(shí)現(xiàn)的。如下圖:
圖 2.10 假如sql腳本或存儲(chǔ)過程中有兩個(gè)參數(shù)分別為:@planid和@filterstring,則必須要在“查詢參數(shù)設(shè)置”頁簽中分別為每一個(gè)參數(shù)設(shè)置其相關(guān)信息。然后再設(shè)計(jì)過濾條件:
圖 2.11 此處需要注意的是,“中文簡(jiǎn)體名稱”必須以這樣的規(guī)則命名:“查詢參數(shù)設(shè)置”的參數(shù)為@pram,則“中文簡(jiǎn)體名稱”為parm,兩者之間相差一個(gè)符號(hào)“@”。
需要指出的是雖然SQL腳本可以通過參數(shù)來綁定過濾條件,但是過濾條件綁定到參數(shù)的同時(shí),還必須為此過濾條件指定一個(gè)數(shù)據(jù)源查詢結(jié)果列,查詢時(shí)輸入的過濾條件對(duì)該返回結(jié)果列同樣起作用。
對(duì)于自定義的數(shù)據(jù)源的過濾條件綁定與實(shí)體關(guān)系得數(shù)據(jù)源相似,但是設(shè)計(jì)者需要在自定義組件中自己處理由用戶輸入信息構(gòu)成的sql串來實(shí)現(xiàn)對(duì)查詢結(jié)果的過濾。
3.報(bào)表系統(tǒng)API 3.1 自定義報(bào)表查詢?nèi)肟?/p>
所謂自定義報(bào)表查詢?nèi)肟谥傅氖怯肬AP設(shè)計(jì)了一張自定義報(bào)表,除了默認(rèn)的查詢?nèi)肟冢洪T戶->視圖->我的報(bào)表->自定義報(bào)表,另外為此報(bào)表設(shè)置單獨(dú)的菜單節(jié)點(diǎn)來進(jìn)行查詢。只要在此節(jié)點(diǎn)的點(diǎn)擊事件處理函數(shù)中調(diào)用報(bào)表系統(tǒng)的以下接口就可實(shí)現(xiàn):
A.Public Function OpenReport(_ sReportID As String, _ objU8Login As Object, _ Optional subid As String = “", _ Optional rawfilter As Object = Nothing)As Boolean
B.Public Function OpenReportNoneFilterUI(_
sReportID As String, _ objU8Login As Object, _ Optional subid As String = ”", _ Optional rawfilter As Object = Nothing)As Boolean
接口功能及使用說明:
這兩個(gè)接口是對(duì)象ReportService.clsReportManager中的函數(shù);需要引用組件: ReportService.dll UFIDA.U8.UAP.Services.ReportFilterService.tlb 這兩個(gè)接口的功能是打開一張報(bào)表,兩個(gè)接口的差異在于前者在打開報(bào)表之前會(huì)先顯示過濾界面,而后者不會(huì)(例如在使用聯(lián)查報(bào)表的時(shí)候有時(shí)不需要進(jìn)行過濾)。此接口在業(yè)務(wù)組在其需要打開一張報(bào)表時(shí)調(diào)用。
參數(shù)介紹: sReportID:
報(bào)表的ID,即將要打開的報(bào)表標(biāo)識(shí)。objU8Login:
U8的Login對(duì)象,注意:這個(gè)對(duì)象必須是COM封裝的Login。subid: 報(bào)表所屬的子產(chǎn)品號(hào),這個(gè)參數(shù)是可選的。注意:當(dāng)指定了此參數(shù),接口會(huì)在隨后的處理中按照subid[__]sReportID的規(guī)則拼接成真正的報(bào)表ID。rawfilter:
可選過濾條件對(duì)象(UFGeneralFilter.FltSrv或自定義的過濾條件對(duì)象),此對(duì)象中必須是ISelfFilter(見第四個(gè)接口)的一個(gè)實(shí)現(xiàn)。這個(gè)參數(shù)通常報(bào)表的自定義行為(如聯(lián)查)時(shí),需要有過濾的情形時(shí)會(huì)使用到。
至于怎么在U8中設(shè)置自己的菜單節(jié)點(diǎn),請(qǐng)參閱U8門戶相關(guān)文檔。
3.2 自定義數(shù)據(jù)源組件
報(bào)表的自定義數(shù)據(jù)源是指單獨(dú)寫一個(gè)組件來提供報(bào)表數(shù)據(jù),這種數(shù)據(jù)源實(shí)現(xiàn)方法的優(yōu)點(diǎn)強(qiáng)大的數(shù)據(jù)處理能力,這是其他類型的數(shù)據(jù)源所不具備的。實(shí)現(xiàn)方法為: 組件中必須實(shí)現(xiàn)以下接口: public interface IGetSql { void GetSql(IFilterArgs e);}
接口功能及使用說明:
此接口為報(bào)表提供自定義數(shù)據(jù)源。組件的提供方式為首先提供一個(gè)實(shí)現(xiàn)IGetSql的組件(COM組件只需有一個(gè)聲明相同的GetSql函數(shù)的類即可),之后將其綁定到報(bào)表的數(shù)據(jù)源(具體方法是請(qǐng)參考本接口示例)。組件的工作方式為報(bào)表系統(tǒng)會(huì)在展現(xiàn)報(bào)表的過程中實(shí)例化一個(gè)此種類型的對(duì)象,通過調(diào)用GetSql函數(shù)來獲取數(shù)據(jù)源。
參數(shù)介紹:
IFilterArgs參數(shù)是UFIDA.U8.UAP.Services.ReportFilterService.tlb中的類型,在報(bào)表系統(tǒng)調(diào)用自定義數(shù)據(jù)源組件的時(shí)通過此參數(shù)將組件需要的環(huán)境信息傳入,而自定義數(shù)據(jù)源組件則將其處理結(jié)果通過此參數(shù)返回給報(bào)表系統(tǒng)。
IFilterArgs中包含的常用接口: IFilterArgs.login: U8的Login對(duì)象
IFilterArgs.RawFilter: 過濾對(duì)象
IFilterArgs.DataSource.Type:
組件數(shù)據(jù)源返回類型,其值與對(duì)應(yīng)類型為 0:SQL腳本 1:存儲(chǔ)過程 2:臨時(shí)表 其默認(rèn)值為2 IFilterArgs.DataSource.Sql: SQL腳本或臨時(shí)表名稱
IFilterArgs.DataSource.StoreProcName: 存儲(chǔ)過程名稱 示例:
(1)以下提供一個(gè)名為CustomDataSample的vb6.0的dll,此組件中定義一個(gè)名為customData.cls類,其代碼如下(IFilterArgs的):
Public Sub GetSql(e As IFilterArgs)e.DataSource.sql = “select * from AA_Bank” e.DataSource.Type = 0 End Sub
構(gòu)造好組件之后,需要將組件綁定到報(bào)表的數(shù)據(jù)源,綁定方法如下:
假設(shè)組件名稱為:DataEngine.dll,而實(shí)現(xiàn)IGetSql的類型名稱為:Engine VB6.0組件的綁定方法:(注意:COM需要注冊(cè),不要求具體存放目錄,一般推薦存放目錄為:..U8SOFTufcomsql)
圖 2.12
C#組件的綁定方法:(注意:.NET組件不需要注冊(cè),但存放目錄必須是:..U8SOFTUAP)
圖 2.12
3.3 自定義行為組件
自定義行為是指在報(bào)表查詢結(jié)束后,設(shè)計(jì)者提供額外的功能來進(jìn)行相關(guān)處理,比如聯(lián)查功能等。方法是實(shí)現(xiàn)以下接口:
public interface IExecute { void Execute(IActionArgs e);}
接口功能及使用說明:
此接口用來完成報(bào)表自定義行為的業(yè)務(wù)操作。組件的提供方式與IGetSql接口類似,不同的是其綁定到報(bào)表系統(tǒng)的過程(示例將詳細(xì)說明)。組件的工作方式為在自定義行為綁定到報(bào)表系統(tǒng)之后,報(bào)表展現(xiàn)界面的右鍵菜單中將相應(yīng)的子菜單,觸發(fā)此子菜單后報(bào)表系統(tǒng)將實(shí)例化此組件實(shí)現(xiàn)IExecute類型的一個(gè)對(duì)象,并調(diào)用此對(duì)象上的Execute方法。
參數(shù)介紹:
IActionArgs是在進(jìn)行自定義行為的時(shí)候數(shù)據(jù)交互的媒介,IActionArgs中的常用參數(shù): IActionArgs.ReportID: 當(dāng)前操作的報(bào)表ID IActionArgs.Login: U8的Login對(duì)象
IActionArgs.RelateData: 當(dāng)前報(bào)表的相關(guān)數(shù)據(jù)對(duì)象,通過此對(duì)象中的接口GetData可獲得相關(guān)的數(shù)據(jù)
IActionArgs.CurrentColumnName:觸發(fā)自定義行為時(shí)報(bào)表所處的焦點(diǎn)行名稱
IActionArgs.FltArgs: IFilterArgs對(duì)象
自定義行為綁定到報(bào)表系統(tǒng)例子:(假設(shè)組件名為ExcuteSample,類型名為clsExc,定義方法參考IGetSql的示例)
圖 2.13
在報(bào)表設(shè)計(jì)界面點(diǎn)擊”自定義行為”的按鈕,將打開自定義行為的定義界面:
圖 2.14
點(diǎn)擊”新增”:
圖 2.15
設(shè)定ActionClass為”ExcuteSample.clsExc”, Caption為”自定義例子”,點(diǎn)擊”確定”即完成綁定操作。
保存之后打開報(bào)表,其右鍵菜單”其他”的子菜單中便出現(xiàn)定義的新菜單,圖 2.16
點(diǎn)擊此子菜單,便會(huì)調(diào)用類型clsExc中的Execute方法。3.4 自定義過濾
自定義過濾是指設(shè)計(jì)者可以自行構(gòu)造一個(gè)過濾組件來實(shí)現(xiàn)報(bào)表的過濾,而不使用U8自身的過濾控件。實(shí)現(xiàn)方法是組建中實(shí)現(xiàn)以下接口:
public interface ISelfFilter { void ShowFilter(IFilterArgs e);}
接口功能及使用說明:
為報(bào)表提供自定義的過濾條件界面。組件提供方式與前述相關(guān)組件類似。組件的工作方式為將實(shí)現(xiàn)ISelfFilter的類型的一個(gè)實(shí)例作為OpenReport或OpenReportNoneFilterUI的第四個(gè)參數(shù)傳入,則在進(jìn)行報(bào)表展現(xiàn)之前,報(bào)表系統(tǒng)將會(huì)調(diào)用此實(shí)例的ShowFilter方法,自定義過濾的結(jié)果使用e參數(shù)返回報(bào)表系統(tǒng)。
參數(shù)介紹:
IFilterArgs參數(shù)請(qǐng)參考IGetSql說明。
自定義過濾組件綁定到報(bào)表的方法例子(假設(shè)要綁定的組件名為CustomFilter,實(shí)現(xiàn)ISelfFilter的類型為clsFilter):
在UAP中”報(bào)表定義”窗體的工具欄的”查詢條件”按鈕中選擇”自定義條件”,或在”報(bào)表定義”窗體的右鍵菜單的”查詢條件”菜單中選擇”自定義條件”,如圖:
圖 2.17
圖 2.18
之后再打開的定義窗體中輸入組件信息,如:
圖 2.19
點(diǎn)擊”確定”即可完成綁定操作。