專利名稱:一種多源數(shù)據(jù)引入數(shù)據(jù)模板的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種多源數(shù)據(jù)引入數(shù)據(jù)模板的方法和裝置,屬于計(jì)算 機(jī)信息處理技術(shù)領(lǐng)域。
背景技術(shù):
數(shù)據(jù)模板生成方法總體上可以分為兩種類型。 一種是靜態(tài)數(shù)據(jù)。 這類數(shù)據(jù)模板的布局樣式和數(shù)據(jù)都是靜態(tài)的,在利用生成工具設(shè)計(jì)數(shù) 據(jù)模板時(shí),直接將數(shù)據(jù)填入數(shù)據(jù)模板,得到的就禾最終的結(jié)果。另一 種是動(dòng)態(tài)數(shù)據(jù)。這類數(shù)據(jù)模板布局樣式和數(shù)據(jù)都是動(dòng)態(tài)的,在利用生 成工具設(shè)計(jì)數(shù)據(jù)模板時(shí),填入的是數(shù)據(jù)引用,得到的是中間結(jié)果,運(yùn)
行時(shí)需要?jiǎng)討B(tài)地從數(shù)據(jù)庫(kù)等不同類型數(shù)據(jù)源中獲取數(shù)據(jù),并將組織好 的數(shù)據(jù)自動(dòng)填入數(shù)據(jù)模板,得到最終結(jié)果。
在動(dòng)態(tài)數(shù)據(jù)模板生成方法中,主要基于兩種模型基于條帶模型 和基于網(wǎng)格模型?;跅l帶模型的數(shù)據(jù)模板生成方法,又稱作控件模 型(由基本控件堆砌而成),脫胎于西式數(shù)據(jù)模板,這種模型在處理一 些布局不規(guī)則、樣式復(fù)雜、引用計(jì)算關(guān)系復(fù)雜、非線性的具有中國(guó)特 色的數(shù)據(jù)模板時(shí)會(huì)遇到較多的問(wèn)題?;诰W(wǎng)格模型的數(shù)據(jù)模板生成方 法是對(duì)條帶模型的改進(jìn),結(jié)合了中式數(shù)據(jù)模板的一些特點(diǎn),在多數(shù)據(jù) 來(lái)源、不規(guī)則的網(wǎng)格布局、列方向擴(kuò)展等方面都挺出了很好的解決方 案。
本發(fā)明主要針對(duì)基于網(wǎng)格模型的動(dòng)態(tài)數(shù)據(jù)模板。
對(duì)于復(fù)雜的中式數(shù)據(jù)模板來(lái)說(shuō),很多情況下數(shù)據(jù)來(lái)自于多個(gè)數(shù)據(jù) 源(以下簡(jiǎn)稱多源數(shù)據(jù)),無(wú)法簡(jiǎn)單的使用單一的數(shù)據(jù)模型(例如交叉 模型)來(lái)解決。也就是說(shuō),從一個(gè)局部區(qū)域來(lái)看數(shù)據(jù)模板是規(guī)則的, 可以歸納為某一種數(shù)據(jù)模型來(lái)處理,但是從整體來(lái)看數(shù)據(jù)模板是不規(guī) 則的,用任何一種單一數(shù)據(jù)模型都無(wú)法處理。簡(jiǎn)稱為局部規(guī)則、整 體不規(guī)則。
處理這類問(wèn)題,傳統(tǒng)方法有二種 1.在主數(shù)據(jù)模板中引入子數(shù)據(jù)模板。 ' 將某 一 個(gè)規(guī)則的區(qū)域當(dāng)做單獨(dú)的數(shù)據(jù)模板來(lái)設(shè)計(jì),設(shè)計(jì)完成后將子 數(shù)據(jù)模板嵌入主數(shù)據(jù)模板的某個(gè)單元格(指行列網(wǎng)格線交叉形成的最 小單位矩形區(qū)域)或矩形區(qū)域。但是由于子數(shù)據(jù)模板和主數(shù)據(jù)模板高 度獨(dú)立,子數(shù)據(jù)模板的填充數(shù)據(jù)是運(yùn)行時(shí)從數(shù)據(jù)源中動(dòng)態(tài)獲得,具有 不確定性,會(huì)導(dǎo)致數(shù)據(jù)模板之間丟失原先存在的數(shù)據(jù)關(guān)聯(lián)性和布局關(guān)聯(lián)。 '
數(shù)據(jù)關(guān)聯(lián)性,指的是兩個(gè)數(shù)據(jù)模板之間具有一定的邏輯關(guān)系,兩者
的數(shù)據(jù)需要保持某種一致性。例如,數(shù)據(jù)模板A展示某公司的人事數(shù) 據(jù),而數(shù)據(jù)模板B展示該公司的財(cái)務(wù)數(shù)據(jù),要求具有對(duì)應(yīng)關(guān)系的人事 和財(cái)務(wù)數(shù)據(jù)必須在一行上。在傳統(tǒng)的數(shù)據(jù)模板引入方法中,如果數(shù)據(jù) 源中保存了 12個(gè)人的人事和財(cái)務(wù)信息,數(shù)據(jù)模板A按工號(hào)排序獲取人 事數(shù)據(jù),數(shù)據(jù)模板B按銀行卡號(hào)排序獲取財(cái)務(wù)數(shù)據(jù),當(dāng)兩個(gè)數(shù)據(jù)模板 組合到一起之后,人事數(shù)據(jù)和財(cái)務(wù)數(shù)據(jù)的對(duì)應(yīng)關(guān)系就亂了。
布局關(guān)聯(lián),指的是兩個(gè)數(shù)據(jù)模板的位置關(guān)系需要保持某種 一致性。 例如數(shù)據(jù)模板設(shè)計(jì)時(shí),數(shù)據(jù)模板A和數(shù)據(jù)模板B都是5行,在填充數(shù) 據(jù)擴(kuò)展完成之后,要求數(shù)據(jù)模板A和數(shù)據(jù)模板B的行數(shù)還是保持一致。 在傳統(tǒng)的數(shù)據(jù)模板引入方法中,如果數(shù)據(jù)模板A從數(shù)據(jù)源中獲取了 12 條數(shù)據(jù),數(shù)據(jù)模板B從數(shù)據(jù)源中獲取了 6條數(shù)據(jù),這樣數(shù)據(jù)模板B的 下方就會(huì)出現(xiàn)6行的空白區(qū)域,破壞了數(shù)據(jù)模板整體布局的一致性。
此外,傳統(tǒng)的多源數(shù)據(jù)引入方法還會(huì)導(dǎo)致原有的樣式遭到破壞,例 如網(wǎng)格線不對(duì)齊、行列數(shù)不一致等。甚至可能影響導(dǎo)出等數(shù)據(jù)模板的 再利用功能,例如網(wǎng)格線對(duì)不齊的數(shù)據(jù)模板很難導(dǎo)出到Excel。
2.將焦點(diǎn)聚焦到單元格(指行列網(wǎng)格線交叉形成的最小每形區(qū)域)。
打碎數(shù)據(jù)模型的概念,將數(shù)據(jù)模型的屬性轉(zhuǎn)移到單元格上,通過(guò) 單元格的設(shè)置來(lái)完成整個(gè)數(shù)據(jù)模板的設(shè)計(jì)。這種方法雖然靈活性較高, 但是降低了數(shù)據(jù)模板抽象程度,關(guān)注點(diǎn)太過(guò)于細(xì)節(jié)化,使數(shù)據(jù)模板設(shè) 計(jì)繁瑣化,即使一個(gè)簡(jiǎn)單的數(shù)據(jù)模板也需要設(shè)計(jì)大量的單元格屬性, 增加了數(shù)據(jù)模板設(shè)計(jì)的工作量,并且這種方法增加了數(shù)據(jù)源與數(shù)據(jù)模 板擴(kuò)展算法之間的耦合度。此外,這種方法仍然有破壞原有數(shù)據(jù)模板 布局的可能。
發(fā)明內(nèi)容
本發(fā)明的目的就是針對(duì)上述的不足,提供了 一種新型的多源數(shù)據(jù)引 入數(shù)據(jù)模板的方法,以處理局部規(guī)則、整體不規(guī)則的數(shù)據(jù)模板。'針對(duì) 傳統(tǒng)處理方法的缺陷,本發(fā)明解決多源數(shù)據(jù)的引入對(duì)數(shù)據(jù)模板整體布 局的破壞問(wèn)題,實(shí)現(xiàn)數(shù)據(jù)模板間的布局對(duì)齊和數(shù)據(jù)關(guān)聯(lián)性,提高數(shù)據(jù) 模板的靈活性和可擴(kuò)展性。 '
本發(fā)明提供的多源數(shù)據(jù)引入數(shù)據(jù)模板的方法基于復(fù)合型數(shù)據(jù)模板 實(shí)現(xiàn)。復(fù)合型數(shù)據(jù)模板包括若干個(gè)子數(shù)據(jù)模板,每個(gè)子數(shù)據(jù)模板可歸納為某種單一數(shù)據(jù)模型,每個(gè)子數(shù)據(jù)模板的數(shù)據(jù)來(lái)自于不同的數(shù)據(jù)源。 與傳統(tǒng)的多源數(shù)據(jù)引入方法不同的是,復(fù)合型數(shù)據(jù)模板中所有的子數(shù) 據(jù)模板都是平等的地位,沒(méi)有主次之分。復(fù)合型數(shù)據(jù)模板本身相當(dāng)于 一張空白的網(wǎng)格畫(huà)布,每個(gè)子數(shù)據(jù)模板都在這張畫(huà)布的某個(gè)特定矩形 區(qū)域內(nèi)繪制,復(fù)合型數(shù)據(jù)模板只需要保存子數(shù)據(jù)模板之間的位置關(guān)系 即可。
本發(fā)明引入職責(zé)鏈模式處理子數(shù)據(jù)模板之間的數(shù)據(jù)關(guān)聯(lián)性,職責(zé)
鏈模式是一種對(duì)象行為模式[G0F95]。在職責(zé)鏈模式里,很多對(duì)象由每 一個(gè)對(duì)象對(duì)其下家的引用而連接起來(lái)形成一條鏈。職責(zé)鏈可能是一條 直線、 一個(gè)環(huán)或者一個(gè)樹(shù)結(jié)構(gòu)的一部分。請(qǐng)求在這個(gè)鏈上傳遞,直到 鏈上的某一個(gè)對(duì)象決定處理此請(qǐng)求。發(fā)出這個(gè)請(qǐng)求的客戶端并不知道 鏈上的哪一個(gè)對(duì)象最終處理這個(gè)請(qǐng)求,這使得系統(tǒng)可以在不影響客戶 端的情況下動(dòng)態(tài)地重新組織鏈和分配職責(zé)。
職責(zé)鏈模式本身并不創(chuàng)建出職責(zé)鏈,需要由復(fù)合型數(shù)據(jù)模板處理 器來(lái)創(chuàng)建。復(fù)合型數(shù)據(jù)模板內(nèi)的所有子數(shù)據(jù)模板的處理器,都看作是 職責(zé)鏈上的一個(gè)對(duì)象節(jié)點(diǎn),由復(fù)合型數(shù)據(jù)模板處理器按一定的次序組 裝成一條職責(zé)鏈。每個(gè)對(duì)象節(jié)點(diǎn)的職責(zé),除了要處理子數(shù)據(jù)模板本身 的擴(kuò)展算法,還要處理與其他子數(shù)據(jù)模板的數(shù)據(jù)關(guān)聯(lián)關(guān)系。
本發(fā)明提供的多源數(shù)據(jù)引入數(shù)據(jù)模板的方法,包括如下步驟 1 )復(fù)合型數(shù)據(jù)模板處理器創(chuàng)建子數(shù)據(jù)模板職責(zé)鏈,即提供擴(kuò)展機(jī) 制,可以通過(guò)靈活的配置來(lái)動(dòng)態(tài)地重新組織鏈和分配職責(zé);
2) 復(fù)合型數(shù)據(jù)模板處理器從數(shù)據(jù)源獲取原始數(shù)據(jù),復(fù)合型數(shù)據(jù)模 板處理器只在一開(kāi)始與源數(shù)據(jù)交互一次,在處理器生成數(shù)據(jù)模板的過(guò) 程中不再與源數(shù)據(jù)交互; '
3) 復(fù)合型數(shù)據(jù)模板處理器根據(jù)子數(shù)據(jù)模板N的數(shù)據(jù)關(guān)聯(lián) (l<=N<=Max, Max為子數(shù)據(jù)模板個(gè)數(shù))處理原始數(shù)據(jù),生成子數(shù)據(jù)模
板N實(shí)際的業(yè)務(wù)數(shù)據(jù),設(shè)置數(shù)據(jù)關(guān)聯(lián)屬性后,這兩個(gè)子數(shù)據(jù)模板的擴(kuò) 展區(qū)域內(nèi)的匹配記錄將相對(duì)各自擴(kuò)展區(qū)域的起點(diǎn)產(chǎn)生相同的位置偏 移。子數(shù)據(jù)模板數(shù)據(jù)關(guān)聯(lián)后,可以設(shè)置基于整個(gè)連接結(jié)果集的字段排 序、分組設(shè)置,這時(shí)各個(gè)子數(shù)據(jù)模板內(nèi)的排序、分組設(shè)置不再生效;
4) 復(fù)合型數(shù)據(jù)模板處理器將業(yè)務(wù)數(shù)據(jù)傳入子數(shù)據(jù)模板N對(duì)應(yīng)的單 一數(shù)據(jù)模型處理器,由于傳入子數(shù)據(jù)模板處理器的數(shù)據(jù)是處理過(guò)數(shù)據(jù) 關(guān)聯(lián)之后的業(yè)務(wù)數(shù)據(jù),對(duì)子數(shù)據(jù)模板處理器本身來(lái)說(shuō),不用關(guān)心與其 他子數(shù)據(jù)模板的數(shù)據(jù)關(guān)聯(lián)關(guān)系,所以不會(huì)對(duì)子數(shù)據(jù)模板處理器本身的算法造成任何影響。
一旦某一個(gè)子數(shù)據(jù)模板的擴(kuò)展算法發(fā)生問(wèn)題,可
以很方便的使用本發(fā)明提供的擴(kuò)展機(jī)制來(lái)替換;
5) 單一數(shù)據(jù)模型處理器來(lái)填充數(shù)據(jù),擴(kuò)展生成子數(shù)據(jù)模板'N;
6) 循環(huán)步驟3) -5)步,按取責(zé)鏈的順序依次處理每一個(gè)子數(shù)據(jù) 模板,直到最后一個(gè)子數(shù)據(jù)模板處理完(N〉Max);
7) 復(fù)合型數(shù)據(jù)模板處理器對(duì)所有子數(shù)據(jù)模板童新排序,由于子數(shù) 據(jù)模板處理器并不關(guān)心復(fù)合型數(shù)據(jù)模板的布局,而擴(kuò)展后的子數(shù)據(jù)模 板與擴(kuò)展前相比,位置和大小都發(fā)生了變化,所以需要重新對(duì)復(fù)合型 數(shù)據(jù)模板中的所有子數(shù)據(jù)模板排序,以便于處理數(shù)據(jù)模板的布局,即 子數(shù)據(jù)模板之間的位置關(guān)系。排序的基本原則是取子數(shù)據(jù)模板左上
角單元格坐標(biāo);先比較行值,行值較小的排在前邊;對(duì)于行值相同的, 比較列值,列值較小的排在前邊。有一種特例對(duì)于有列方向擴(kuò)展的 子數(shù)據(jù)模板Tl,如果子數(shù)據(jù)模板T2在Tl的右邊,即使T2的行號(hào)較 小,也需要將Tl排在T2的前面;
然后按排序后的順序?qū)⑺凶訑?shù)據(jù)模板填充到復(fù)合型數(shù)據(jù)模板 中,并依次處理子數(shù)據(jù)模板的布局關(guān)聯(lián),調(diào)整子數(shù)據(jù)模板的位置和大 小。子數(shù)據(jù)模板設(shè)置高度對(duì)齊后,實(shí)際填充數(shù)據(jù)完成擴(kuò)展后兩個(gè)子數(shù) 據(jù)模板的下邊界位于同一行上,對(duì)于寬度對(duì)齊與此類似,實(shí)際填充數(shù) 據(jù)完成擴(kuò)展后,擴(kuò)展后子數(shù)據(jù)模板的右邊界位于同 一 列上。
上述步驟1)中所述的職責(zé)鏈上的每個(gè)節(jié)點(diǎn)的職責(zé)為處理子數(shù) 據(jù)模板本身的擴(kuò)展算法和處理與其他子數(shù)據(jù)模板的數(shù)據(jù)關(guān)聯(lián)關(guān)系。
上述步驟2)中的數(shù)據(jù)源包括數(shù)據(jù)庫(kù)、Java對(duì)象、文本文件、XML 文件以及自定義數(shù)據(jù)等等。
上述步驟3)中所述子數(shù)據(jù)模板數(shù)據(jù)關(guān)聯(lián)包括如下方式內(nèi)連接 (只顯示關(guān)聯(lián)匹配數(shù)據(jù))、左外連接(完整顯示左表數(shù)據(jù)、右表不匹配 數(shù)據(jù)以空或指定符號(hào)代替)、右外連接(完整顯示右表數(shù)據(jù)、左表不匹 配數(shù)據(jù)以空或指定符號(hào)代替)、全外連接(完整顯示左表、右表數(shù)據(jù), 不匹配數(shù)據(jù)以空或指定符號(hào)代替)。
上述步驟7)中所迷子數(shù)據(jù)模板布局關(guān)聯(lián)是通過(guò)設(shè)置子數(shù)據(jù)模板 對(duì)齊屬性實(shí)現(xiàn)的,子數(shù)據(jù)模板對(duì)齊包括高度對(duì)齊和寬度對(duì)齊。
上述步驟7)中按排序后的順序處理每個(gè)子數(shù)據(jù)模板的布局關(guān)聯(lián), 調(diào)整子數(shù)據(jù)模板的大小是通過(guò)如下步驟實(shí)現(xiàn)的通過(guò)子數(shù)據(jù)模板對(duì)齊 設(shè)置擴(kuò)展"真空"區(qū)域的填充方式,包括擴(kuò)展區(qū)域單元格填充、末行/ 列合并、起始格合并、等分行/列合并,其中,擴(kuò)展區(qū)域單元格填充是以子數(shù)據(jù)模板擴(kuò)展區(qū)域的單元格形式填充
新擴(kuò)充的擴(kuò)展"真空"區(qū)域,直至與另一子數(shù)據(jù)模板對(duì)齊;
末行/列合并是將最后擴(kuò)展的行/列演變?yōu)楹喜卧襁M(jìn)而向下/
右進(jìn)行合并處理;
起始格合并是將所有擴(kuò)展"真空"區(qū)域合并為一個(gè)大的合并單元
格;
等分行/列合并是將新區(qū)域等分為幾段,然后分別合并。 實(shí)現(xiàn)上述方法的多源數(shù)據(jù)引入數(shù)據(jù)模板德裝置,包括
一復(fù)合型數(shù)據(jù)模板,包括至少兩個(gè)單一數(shù)據(jù)也型的子數(shù)據(jù)模板,
所有子數(shù)據(jù)模板地位平等,且來(lái)自同一或不同的數(shù)據(jù)源;
一復(fù)合型數(shù)據(jù)模板處理器,用于職責(zé)鏈的創(chuàng)建、組裝和消息傳遞, 并負(fù)責(zé)把若干個(gè)子數(shù)據(jù)模板組裝成一個(gè)復(fù)合型數(shù)據(jù)模板。
本發(fā)明提供的多源數(shù)據(jù)引入數(shù)據(jù)模板的方法,具有如下優(yōu)點(diǎn)
1. 復(fù)合型數(shù)據(jù)模板的優(yōu)點(diǎn)
1 )由于每個(gè)子數(shù)據(jù)模板都是基于復(fù)合型數(shù)據(jù)模板提供的網(wǎng)格畫(huà) 布,所以不會(huì)出現(xiàn)網(wǎng)格線對(duì)不齊等布局問(wèn)題。
2) 每個(gè)子數(shù)據(jù)模板只在其本身所屬矩形區(qū)域內(nèi)繪制,各子數(shù)據(jù)模 板之間相對(duì)獨(dú)立,可以采用合適的單一數(shù)據(jù)模型算法。
3) 復(fù)合型數(shù)據(jù)模板內(nèi)保存了子數(shù)據(jù)模板之間的位置關(guān)系,可以方 便的處理子數(shù)據(jù)模板之間的布局關(guān)聯(lián),保持?jǐn)?shù)據(jù)模板整體布局的 一致 性。
2. 引入職責(zé)鏈模式的優(yōu)點(diǎn)
1) 由于職責(zé)鏈上的對(duì)象節(jié)點(diǎn)之間是松耦合的,所以在解決了子數(shù) 據(jù)模板的數(shù)據(jù)關(guān)聯(lián)性問(wèn)題的同時(shí),子數(shù)據(jù)模板之間仍然是相對(duì)獨(dú)立的, 并沒(méi)有增加其耦合度。
2) 由于可以動(dòng)態(tài)地重新組織鏈和分配職責(zé),數(shù)據(jù)模板的靈活性和 可擴(kuò)展性大大提高。即使是數(shù)據(jù)模板生成工具暫未實(shí)現(xiàn)的數(shù)據(jù)模板模 型,也可以通過(guò)靈活的配置來(lái)引入其他的解決方案,而不影響數(shù)據(jù)模 板生成工具本身。 .
3) 數(shù)據(jù)只作為輸入?yún)?shù),在生成數(shù)據(jù)模板的過(guò)程中不再與數(shù)據(jù)源 交互,實(shí)現(xiàn)了數(shù)據(jù)源與業(yè)務(wù)邏輯的解耦。
即引入多源數(shù)據(jù)后不會(huì)影響復(fù)合型數(shù)據(jù)模板整體布局,不會(huì)影響 子數(shù)據(jù)模板之間的數(shù)據(jù)關(guān)聯(lián)性,復(fù)合型數(shù)據(jù)模板樣式不因擴(kuò)展而破壞, 例如網(wǎng)格線對(duì)齊等,且可擴(kuò)展性強(qiáng),可以靈活配置子數(shù)據(jù)模板的處理邏輯層的解耦。 .
圖l是本發(fā)明實(shí)施例中復(fù)合報(bào)表設(shè)計(jì)流程圖; 圖2是本發(fā)明實(shí)施例中引入子報(bào)表的流程圖; 圖3是本發(fā)明實(shí)施例中擴(kuò)展導(dǎo)致真空區(qū)域的示意圖; 圖4是本發(fā)明實(shí)施例中復(fù)合報(bào)表設(shè)計(jì)狀態(tài)參考圖; 圖5是本發(fā)明實(shí)施例中傳統(tǒng)方法效果圖; 圖6是本發(fā)明實(shí)施例中擴(kuò)展區(qū)域單元格填充效果圖; 圖7是本發(fā)明實(shí)施例中末行/列合并效果圖; 圖8是本發(fā)明實(shí)施例中起始格合并效果圖; 圖9是本發(fā)明實(shí)施例中等分行/列合并效果'圖。
具體實(shí)施例方式
報(bào)表是數(shù)據(jù)模板的 一種實(shí)例,下面以報(bào)表為例子對(duì)本發(fā)明的實(shí)施 方式進(jìn)行進(jìn)一步解釋、說(shuō)明。其中,復(fù)合報(bào)表即為復(fù)合型數(shù)據(jù)模板的 實(shí)例。
一種多源數(shù)據(jù)引入數(shù)據(jù)模板的方法,即一種子報(bào)表引入方法。一 般來(lái)說(shuō)需要首先對(duì)復(fù)合報(bào)表進(jìn)行設(shè)計(jì),.這是容易實(shí)現(xiàn)的。
如圖l所示,為復(fù)合報(bào)表設(shè)計(jì)的流程圖。該流程開(kāi)始于步驟101, 選擇復(fù)合報(bào)表模型,創(chuàng)建空白報(bào)表;報(bào)表模型是預(yù)先抽象好的,'用戶 可以直接選擇,并且在報(bào)表設(shè)計(jì)階段也可以更改。
然后進(jìn)入步驟102,根據(jù)報(bào)表局部規(guī)則性,建立多個(gè)子報(bào)表,即 在一個(gè)報(bào)表中根據(jù)局部規(guī)則性建立多個(gè)子報(bào)表,每個(gè)子報(bào)表屬于某種 單一報(bào)表模型。
在建立子報(bào)表后,再進(jìn)入步驟103,建立數(shù)據(jù)集,將相應(yīng)數(shù)據(jù)集 綁定到子報(bào)表中;數(shù)據(jù)集可以是多個(gè),并且能夠來(lái)自不同的數(shù)據(jù)源, 包括但不僅限于數(shù)據(jù)庫(kù)、Java對(duì)象、文本文件、XML文件以及自定義 數(shù)據(jù)等。數(shù)據(jù)集的字段除從數(shù)據(jù)源直接獲得外,并且能夠通過(guò)其他字 段計(jì)算獲得(稱為計(jì)算字段),以及自動(dòng)生成獲得(稱為追加字段,比 如序號(hào)生成,以及字段拼接等)。 .
在步驟104中檢查是否還有其他未創(chuàng)建子報(bào)表,如果為是,則回 到步驟102;如果為否,則進(jìn)入下一步驟。
所謂綁定就是將數(shù)據(jù)集的字段設(shè)置到子報(bào)表所屬的擴(kuò)展區(qū)域中, 擴(kuò)展區(qū)域由子報(bào)表內(nèi)的連續(xù)單元格組成,每個(gè)單元格和某一個(gè)字段建 立——對(duì)應(yīng)的關(guān)系。同時(shí)設(shè)置擴(kuò)展區(qū)域的擴(kuò)展屬性,包括擴(kuò)展方向、
9擴(kuò)展次數(shù)等。能夠設(shè)置向下(行方向)、向右(列方向)擴(kuò)展或交x (行 列方向同時(shí))擴(kuò)展,以及最少擴(kuò)展次數(shù)、最大擴(kuò)展次數(shù)等。
步驟104檢查結(jié)果為是,進(jìn)入步驟105,根據(jù)子報(bào)表間數(shù)據(jù)的業(yè) 務(wù)關(guān)聯(lián)關(guān)系,設(shè)置子報(bào)表數(shù)據(jù)關(guān)聯(lián);根據(jù)子報(bào)表間數(shù)據(jù)的業(yè)務(wù)關(guān)聯(lián)關(guān) 系,設(shè)置兩個(gè)子報(bào)表間的數(shù)據(jù)關(guān)聯(lián)。子報(bào)表數(shù)據(jù)關(guān)聯(lián)的匹配類似SQL 的內(nèi)外連接,這種關(guān)聯(lián)分為內(nèi)連接(只顯示關(guān)聯(lián)匹配數(shù)據(jù))、左外連接 (完整顯示左表數(shù)據(jù)、右表不匹配數(shù)據(jù)以空或指定符號(hào)代替)、右外連 接(完整顯示右表數(shù)據(jù)、左表不匹配數(shù)據(jù)以空或指定符號(hào)代替)、全外 連接(完整顯示左表、右表數(shù)據(jù),不匹配數(shù)據(jù)以空或指定符號(hào)代替)4 種方式。子報(bào)表間通過(guò)連接字段建立關(guān)聯(lián)。 一個(gè)子報(bào)表可以與多個(gè)子 報(bào)表建立數(shù)據(jù)關(guān)聯(lián),并且連接字段不必強(qiáng)制綁定到報(bào)表中。
設(shè)置完成數(shù)據(jù)關(guān)聯(lián)后,再設(shè)置子報(bào)表布局關(guān)聯(lián);即為保證報(bào)表整 體布局的完整性,可以設(shè)置子報(bào)表對(duì)齊屬性。該屬性能夠保證子報(bào)表 數(shù)據(jù)集在填充數(shù)據(jù)形成實(shí)際報(bào)表后,仍然能夠保,相互間設(shè)置的對(duì)齊 關(guān)系,避免出現(xiàn)因?yàn)閿U(kuò)展而導(dǎo)致的報(bào)表"真空"區(qū)域。子報(bào)表對(duì)齊包 括高度對(duì)齊、寬度對(duì)齊2種方式。子表起始位置位于不同列上的子 報(bào)表能夠設(shè)置高度對(duì)齊屬性,不同行上的子報(bào)表能夠設(shè)置寬度對(duì)齊屬 性。同一子報(bào)表能夠同時(shí)和不同的兩個(gè)子報(bào)表分別設(shè)置高度對(duì)齊、寬 度對(duì)齊屬性。
完成上述步驟后,進(jìn)入步驟106,將結(jié)果保存到報(bào)表模板,即完 成了復(fù)合報(bào)表的設(shè)計(jì)。
完成復(fù)合報(bào)表的設(shè)計(jì)后,即進(jìn)入本發(fā)明的引入子報(bào)表的步驟,具 體來(lái)說(shuō)如圖2所示,包括
本流程開(kāi)始于步驟200,讀取報(bào)表模板并初始化。
然后進(jìn)入步驟201,處理表頭,即標(biāo)題區(qū)域。'
然后進(jìn)入步驟202,初始化復(fù)合報(bào)表處理器,并創(chuàng)建子報(bào)表職責(zé) 鏈,即提供擴(kuò)展機(jī)制,可以通過(guò)靈活的配置來(lái)動(dòng)態(tài)地重新組織鏈和分 配職責(zé)。
完成上述步驟后進(jìn)入步驟203,從數(shù)據(jù)源獲取原始數(shù)據(jù),傳入復(fù) 合報(bào)表處理器,復(fù)合報(bào)表處理器只在一開(kāi)始與源數(shù)據(jù)交互一次,在處 理器生成報(bào)表的過(guò)程中不再與源數(shù)據(jù)交互。
然后進(jìn)入步驟204,按職責(zé)鏈順序處理每個(gè)子報(bào)表。 再進(jìn)入步驟205,根據(jù)子報(bào)表N的數(shù)據(jù)關(guān)聯(lián)(K=N<=Max, Max為 子報(bào)表個(gè)數(shù))處理原始數(shù)據(jù),生成子報(bào)表N實(shí)際的業(yè)務(wù)數(shù)據(jù)。設(shè)置數(shù)據(jù)關(guān)聯(lián)屬性后,這兩個(gè)子報(bào)表的擴(kuò)展區(qū)域內(nèi)的匹配記錄將相對(duì)各自擴(kuò) 展區(qū)域的起點(diǎn)產(chǎn)生相同的位置偏移。子報(bào)表數(shù)據(jù)關(guān)聯(lián)后,可以設(shè)置基 于整個(gè)連接結(jié)果集的字段排序、分組設(shè)置,這時(shí)各個(gè)子報(bào)表內(nèi)的排序、 分組設(shè)置不再生效。
例如,子報(bào)表A展示某公司的人事數(shù)據(jù),而子報(bào)表B展示該公司 的財(cái)務(wù)數(shù)據(jù),在傳統(tǒng)的子報(bào)表引入方法中,子報(bào)表A按工號(hào)排序獲取 人事數(shù)據(jù),子報(bào)表B按銀行卡號(hào)排序獲取財(cái)務(wù)數(shù)據(jù),這樣人事數(shù)據(jù)和 財(cái)務(wù)數(shù)據(jù)的對(duì)應(yīng)關(guān)系就亂了。如果子報(bào)表A和子報(bào)表B之間設(shè)置了數(shù) 據(jù)關(guān)聯(lián),以工號(hào)為關(guān)聯(lián)字段的全外連接,并按照工號(hào)排序。那么,子 報(bào)表A和子報(bào)表B都按照工號(hào)排序,同一個(gè)人的人事和財(cái)務(wù)信息都在 同一行上,對(duì)于只在一個(gè)子報(bào)表中存在的信息,則另一個(gè)報(bào)表中以空 行顯示。
然后開(kāi)始步驟206,將業(yè)務(wù)數(shù)據(jù)傳入子報(bào)表N的處理器。由于傳 入子報(bào)表處理器的數(shù)據(jù)是處理過(guò)數(shù)據(jù)關(guān)聯(lián)之后的業(yè)務(wù)數(shù)據(jù),對(duì)于報(bào)表 處理器本身來(lái)說(shuō),不用關(guān)心與其他子報(bào)表的數(shù)據(jù)關(guān)聯(lián)關(guān)系,所以不會(huì) 對(duì)子報(bào)表處理器本身的算法造成任何影響。 一旦某一個(gè)子報(bào)表的擴(kuò)展 算法發(fā)生問(wèn)題,可以很方便的使用本發(fā)明提供的擴(kuò).展機(jī)制來(lái)替換。
然后進(jìn)入步驟207,填充數(shù)據(jù),擴(kuò)展生成子報(bào)表N。
然后進(jìn)入步驟208,由于需要循環(huán)直到最后一個(gè)子報(bào)表處理完 (N〉Max),故如果沒(méi)有完成整個(gè)循環(huán)則回到步驟204;如果循環(huán)結(jié)束, 則進(jìn)入下一步驟。
步驟208循環(huán)完成后進(jìn)入步驟209,對(duì)所有子報(bào)表重新排序。由 于子報(bào)表處理器并不關(guān)心復(fù)合報(bào)表的布局,而擴(kuò)展后的子報(bào)表與擴(kuò)展 前相比,位置和大小都發(fā)生了變化,所以需要重新對(duì)復(fù)合報(bào)表中的所 有子報(bào)表排序,以便于處理報(bào)表的布局,即子報(bào)表之間的位置關(guān)系。 排序的基本原則是馭子報(bào)表左上角單元格坐標(biāo);先比較行值,行值 較小的排在前邊;對(duì)于行值相同的,比較列值,列值較小的排在前邊。 有一種特例對(duì)于有列方向擴(kuò)展的子報(bào)表Tl,如果子報(bào)表T2在T1的 右邊,即使T2的行號(hào)較小,也需要將Tl排在T2的前面。
然后進(jìn)入步驟2010,按排序后的順序?qū)⑺凶訄?bào)表填充到復(fù)合報(bào) 表中,調(diào)整子報(bào)表位置。 ,
再開(kāi)始步驟2011、 2012,按排序后的順序處理每個(gè)子報(bào)表的布局 關(guān)聯(lián),調(diào)整子報(bào)表的大小。子報(bào)表設(shè)置高度對(duì)齊后,實(shí)際填充數(shù)據(jù)完 成擴(kuò)展后兩個(gè)子報(bào)表的下邊界位于同一行上,對(duì)于寬度對(duì)齊與此類似,實(shí)際填充數(shù)據(jù)完成擴(kuò)展后,擴(kuò)展后子報(bào)表的右邊界位于同 一 列上。
例如,如圖3所示,起始位置位于同一行的兩個(gè)子報(bào)表, 一個(gè)擴(kuò) 展了 6行, 一個(gè)擴(kuò)展了 12行。如果是傳統(tǒng)的子報(bào)表引入方法,沒(méi)有子 表對(duì)齊屬性,將會(huì)在擴(kuò)展了 6行的子報(bào)表下方出現(xiàn)6行的擴(kuò)展"真空" 區(qū)域,這部分區(qū)域沒(méi)有任何設(shè)置,將破壞報(bào)表的整體布局。
子報(bào)表對(duì)齊能夠設(shè)置擴(kuò)展"真空"區(qū)域的填充方式,包括擴(kuò)展 區(qū)域單元格填充、末行/列合并、起始格合并、等分行/列合并4種方 式。如圖4所示,是一種報(bào)表設(shè)計(jì)狀態(tài),報(bào)表設(shè)計(jì)時(shí)設(shè)置了子報(bào)表之 間的"高度對(duì)齊,,,并在后續(xù)描述了四種擴(kuò)展"真寫(xiě)"區(qū)域的填充方式 與傳統(tǒng)方式的對(duì)比,圖5為傳統(tǒng)方法效果圖。
如圖6所示,擴(kuò)展區(qū)域單元格填充就是以子報(bào)表擴(kuò)展區(qū)域的單元 格形式填充新擴(kuò)充的擴(kuò)展"真空"區(qū)域,直至與另一子報(bào)表對(duì)齊。
如圖7所示,末行/列合并則是將最后擴(kuò)展的行/列演變?yōu)楹喜?元格進(jìn)而向下/右進(jìn)行合并處理。
如圖8所示,起始格合并就是將所有擴(kuò)展"真空"區(qū)域合并為一 個(gè)大的合并單元格。
如圖9所示,等分行/列合并是將新區(qū)域等分為幾段,然后分別合并。
然后進(jìn)入步驟1013,由于需要使之循環(huán)直到最后一個(gè)子報(bào)表處理 完(N〉Max)。故4企查循環(huán)是否完成,如果沒(méi)有,則'回到步驟2012;如 果循環(huán)結(jié)束,則進(jìn)入下一步驟。
步驟2013的檢查結(jié)果為循環(huán)結(jié)束后,開(kāi)始布置2014處理表尾, 完成整個(gè)程序。
權(quán)利要求
1.一種多源數(shù)據(jù)引入數(shù)據(jù)模板的方法,其特征在于包括如下步驟1)復(fù)合型數(shù)據(jù)模板處理器創(chuàng)建子數(shù)據(jù)模板職責(zé)鏈;2)復(fù)合型數(shù)據(jù)模板處理器從數(shù)據(jù)源獲取原始數(shù)據(jù);3)復(fù)合型數(shù)據(jù)模板處理器根據(jù)子數(shù)據(jù)模板N的數(shù)據(jù)關(guān)聯(lián)(1<=N<=Max,Max為子數(shù)據(jù)模板個(gè)數(shù))處理原始數(shù)據(jù),生成子數(shù)據(jù)模板N實(shí)際的業(yè)務(wù)數(shù)據(jù);4)將業(yè)務(wù)數(shù)據(jù)傳入子數(shù)據(jù)模板N對(duì)應(yīng)的單一數(shù)據(jù)模型處理器;5)單一數(shù)據(jù)模型處理器來(lái)填充數(shù)據(jù),擴(kuò)展生成子數(shù)據(jù)模板N;6)循環(huán)步驟3)-5)步,按職責(zé)鏈的順序依次處理每一個(gè)子數(shù)據(jù)模板,直到最后一個(gè)子數(shù)據(jù)模板處理完(N>Max);7)復(fù)合型數(shù)據(jù)模板處理器對(duì)所有子數(shù)據(jù)模板重新排序,按排序后的順序?qū)⑺凶訑?shù)據(jù)模板填充到復(fù)合型數(shù)據(jù)模板中,并依次處理子數(shù)據(jù)模板的布局關(guān)聯(lián),調(diào)整子數(shù)據(jù)模板的位置和大小。
2. 根據(jù)權(quán)利要求1所述的多源數(shù)據(jù)引入數(shù)據(jù)模板的方法,其特征 在于上述步驟1)中所述的職責(zé)鏈上的每個(gè)節(jié)點(diǎn)的職責(zé)為處理子 數(shù)據(jù)模板本身的擴(kuò)展算法和處理與其他子數(shù)據(jù)模板的數(shù)據(jù)關(guān)聯(lián)關(guān)系。
3. 根據(jù)權(quán)利要求1所述的多源數(shù)據(jù)引入數(shù)據(jù)模板的方法,其特 征在于上述步驟3)中所述子數(shù)據(jù)模板數(shù)據(jù)關(guān)聯(lián)包括如下方式內(nèi) 連接(只顯示關(guān)聯(lián)匹配數(shù)據(jù))、左外連接(完整顯示左表數(shù)據(jù)、右表不 匹配數(shù)據(jù)以空或指定符號(hào)代替)、右外連接(完整顯示右表數(shù)據(jù)、.左表 不匹配數(shù)據(jù)以空或指定符號(hào)代替)、全外連接(完整顯示左表、右表數(shù) 據(jù),不匹配數(shù)據(jù)以空或指定符號(hào)代替)。
4. 根據(jù)權(quán)利要求1所述的多源數(shù)據(jù)引入數(shù)據(jù)模板的方法,其特征 在于上述步驟7)中所述子數(shù)據(jù)模板布局關(guān)聯(lián)是通過(guò)設(shè)置子數(shù)據(jù)模 板對(duì)齊屬性實(shí)現(xiàn)的,子數(shù)據(jù)模板對(duì)齊包括高度對(duì)齊和寬度對(duì)齊。
5. 根據(jù)權(quán)利要求4所述的多源數(shù)據(jù)引入數(shù)據(jù)模板的方法,其特征 在于上述步驟7)中按排序后的順序處理每個(gè)子數(shù)據(jù)模板的布局關(guān) 聯(lián),調(diào)整子數(shù)據(jù)模板的大小是通過(guò)如下步驟實(shí)現(xiàn)的通過(guò)子數(shù)據(jù)模板 對(duì)齊設(shè)置擴(kuò)展"真空"區(qū)域的填充方式,包括擴(kuò)展區(qū)域單元格填充、 末行/列合并、起始格合并、等分行/列合并,其中,擴(kuò)展區(qū)域單元格填充是以子數(shù)據(jù)模板擴(kuò)展區(qū)域的單元格形式填充 新擴(kuò)充的擴(kuò)展"真空"區(qū)域,直至與另一子數(shù)據(jù)模板對(duì)齊;末行/列合并是將最后擴(kuò)展的行/列演變?yōu)楹喜卧襁M(jìn)而向下/ 右進(jìn)行合并處理; '起始格合并是將所有擴(kuò)展"真空,,區(qū)域合并為一個(gè)大的合并單元格;等分行/列合并是將新區(qū)域等分為幾段,然后分別合并。
6.實(shí)現(xiàn)權(quán)利要求i所述方法的多源數(shù)據(jù)引入數(shù)據(jù)模板德裝置,其特征在于包括 '一復(fù)合型數(shù)據(jù)模板,包括至少兩個(gè)單 一 數(shù)據(jù)模型的子數(shù)據(jù)模板, 所有子數(shù)據(jù)模板地位平等,且來(lái)自同一或不同的數(shù)據(jù)源;一復(fù)合型數(shù)據(jù)模板處理器,用于職責(zé)鏈的創(chuàng)建、組裝和消息傳遞, 并負(fù)責(zé)把若干個(gè)子數(shù)據(jù)模板組裝成一個(gè)復(fù)合型數(shù)據(jù)模板。
全文摘要
一種多源數(shù)據(jù)引入數(shù)據(jù)模板的方法和裝置,屬于計(jì)算機(jī)信息處理技術(shù)領(lǐng)域,基于復(fù)合型數(shù)據(jù)模板實(shí)現(xiàn)的,包括一復(fù)合型數(shù)據(jù)模板和一復(fù)合型數(shù)據(jù)模板處理器。本發(fā)明提供的多源數(shù)據(jù)引入數(shù)據(jù)模板的方法針對(duì)傳統(tǒng)處理方法的缺陷,解決了多源數(shù)據(jù)的引入對(duì)數(shù)據(jù)模板整體布局的破壞問(wèn)題,實(shí)現(xiàn)了子數(shù)據(jù)模板間的布局對(duì)齊和數(shù)據(jù)關(guān)聯(lián)性,提高了數(shù)據(jù)模板的靈活性和可擴(kuò)展性。
文檔編號(hào)G06F17/30GK101615188SQ20091001686
公開(kāi)日2009年12月30日 申請(qǐng)日期2009年7月22日 優(yōu)先權(quán)日2009年7月22日
發(fā)明者璐 喬, 劉宗福, 治 李, 溫尚卓, 帥 車(chē), 馬蓮蓮 申請(qǐng)人:山東中創(chuàng)軟件工程股份有限公司;山東中創(chuàng)軟件商用中間件股份有限公司