版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 UAP 6.1 語義模型技術(shù)紅皮書UAP 6.1語義模型技術(shù)紅皮書 產(chǎn)業(yè)鏈開發(fā)部 編著目錄第一章前言41.1概念51.2定位5第二章結(jié)構(gòu)62.1應(yīng)用模型72.2語義模型72.2.1定義形態(tài)72.2.2執(zhí)行流程92.2.3數(shù)據(jù)形態(tài)102.3語義提供者102.3.1接口112.3.2擴(kuò)展142.4函數(shù)172.4.1函數(shù)解析172.4.2函數(shù)擴(kuò)展172.5參數(shù)202.5.1參數(shù)定義202.5.2參數(shù)引用202.5.3參數(shù)設(shè)置202.5.4參照依賴212.5.5自定義參照212.6宏變量222.7描述器232.8數(shù)據(jù)加工242.8.1概念242.8.2定位242.8.3執(zhí)行原理252.8.4使用25
2、2.8.5常見問題272.9物化策略272.10復(fù)合語義模型272.10.1設(shè)計(jì)向?qū)Х绞?82.10.2語義腳本方式292.11語義上下文312.12腳本規(guī)則312.12.1實(shí)現(xiàn)規(guī)則類322.12.2配置文件注冊322.12.3操作使用33第三章語義模型管理353.1對象管理363.1.1目錄管理363.1.2語義模型管理373.1.3監(jiān)控373.1.4權(quán)限383.1.5全局變量配置383.2環(huán)境配置393.3導(dǎo)入導(dǎo)出413.3.1導(dǎo)出邏輯413.3.2導(dǎo)入邏輯43第四章功能擴(kuò)展474.1擴(kuò)展語義提供者484.2擴(kuò)展業(yè)務(wù)函數(shù)484.3使用數(shù)據(jù)加工484.4自定義執(zhí)行策略484.5業(yè)務(wù)規(guī)則擴(kuò)展4
3、94.6元定義驅(qū)動(dòng)擴(kuò)展494.6.1接口504.6.2實(shí)現(xiàn)504.6.3配置文件504.6.4使用51第五章范例525.1腳本中引用參數(shù)范例53第六章附錄576.1入門586.2語義模型API636.3語義函數(shù)656.4其他函數(shù)656.5腳本引擎666.6針對查詢引擎的改進(jìn)676.7性能監(jiān)控676.8多語言支持68第一章 前言UAP 技術(shù)紅皮書系列 第70 / 51頁本章內(nèi)容概要:l 概念l 定位1.1 概念SMART,即Semantic Modeling for Analysis Report Toolkit , 分析報(bào)表語義建模工
4、具。1.2 定位語義模型把面向技術(shù)的數(shù)據(jù),組織成面向業(yè)務(wù)的數(shù)據(jù),供業(yè)務(wù)人員查詢分析使用。第二章 結(jié)構(gòu)本章內(nèi)容概要:l 應(yīng)用模型l 語義模型l 語義提供者l 函數(shù)l 參數(shù)l 宏變量l 描述器l 數(shù)據(jù)加工l 物化策略l 復(fù)合語義模型l 語義上下文l 腳本規(guī)則2.1 應(yīng)用模型上圖為語義模型應(yīng)用結(jié)構(gòu)圖。語義模型通過語義提供者,可以將多個(gè)數(shù)據(jù)源的數(shù)據(jù)進(jìn)行整合。2.2 語義模型2.2.1 定義形態(tài)下圖展示了語義模型的內(nèi)部結(jié)構(gòu):語義模型主要由以下幾部分構(gòu)成:n 元數(shù)據(jù)元數(shù)據(jù)是指描述數(shù)據(jù)的數(shù)據(jù),是為了外界使用數(shù)據(jù)而對數(shù)據(jù)本身含義的闡述。拿我們最常見的二維數(shù)據(jù)(行列結(jié)構(gòu))舉例來說,如果只有這些行列結(jié)構(gòu)的數(shù)據(jù),對
5、我們來說這將毫無意義。因?yàn)槲覀儫o法知道哪一列的數(shù)據(jù)代表什么含義,無法知道如何操作這些數(shù)據(jù),更別提由這些數(shù)據(jù)分析出有用的信息。反過來,如果針對這些數(shù)據(jù)指定了元數(shù)據(jù),我們就可以了解哪一列代表的業(yè)務(wù)含義,并且知道該列的數(shù)據(jù)類型、長度、精度 等。這樣,我們就能對這些數(shù)據(jù)進(jìn)行加工處理,分析提取出有價(jià)值的信息。同理,語義模型的元數(shù)據(jù)是對執(zhí)行語義模型后獲取的二維數(shù)據(jù)的描述。元數(shù)據(jù)針對結(jié)果數(shù)據(jù)的每一列都提供了下列信息:數(shù)據(jù)類型、字段顯示名、字段名、備注、長度、精度 等。有了這些信息,我們就能知道在業(yè)務(wù)應(yīng)用中該如何使用語義模型。n 語義提供者語義提供者,表述了一類取數(shù)方式,或者說如何提供數(shù)據(jù)的方式。在語義模型中
6、,語義提供者負(fù)責(zé)把一類業(yè)務(wù)取數(shù)過程以語義腳本的形式描述出來。為了能更好的理解這個(gè)概念,我們可以打這樣一個(gè)比方:NC元數(shù)據(jù)、數(shù)據(jù)倉庫、報(bào)表數(shù)據(jù)、總賬數(shù)據(jù) 等 這些可提供數(shù)據(jù)的對象好比“數(shù)據(jù)水源”,而語義提供者好比“水泵”,語義模型好比“抽水機(jī)”。每種“數(shù)據(jù)水源”只支持特定的“水泵”來抽取數(shù)據(jù)。我們有了一種語義提供者“水泵”,就能抽取其對應(yīng)的“數(shù)據(jù)水源”里的數(shù)據(jù)。語義模型中能指定多個(gè)語義提供者,就相當(dāng)于“抽水機(jī)”掛接了多個(gè)“水泵”,我們就能從多個(gè)不同類型的“數(shù)據(jù)水源”來抽取數(shù)據(jù)。語義提供者負(fù)責(zé)抽取數(shù)據(jù),同時(shí)對外提供元數(shù)據(jù)來描述這些數(shù)據(jù)。語義提供者的元數(shù)據(jù)一般是在語義模型內(nèi)部使用。更多細(xì)節(jié)以及語義提
7、供者的擴(kuò)展說明參見章節(jié)語義提供者。n 描述器描述器是指對數(shù)據(jù)操作的描述,例如:過濾、排序、分頁、匯總 等。在語義模型中,描述器表述了對語義提供者抽取的數(shù)據(jù)的加工處理過程。更多細(xì)節(jié)參見章節(jié)描述器。n 首選項(xiàng)語義模型中的首選項(xiàng)包括三類數(shù)據(jù):參數(shù)、宏變量、配置項(xiàng)。下面將分別介紹:u 參數(shù)參數(shù)是模型中代表動(dòng)態(tài)信息的元素,用于響應(yīng)用戶的輸入。參數(shù)給用戶提供了控制模型執(zhí)行過程的機(jī)會(huì)。更多細(xì)節(jié)參見章節(jié)參數(shù)。u 宏變量宏變量與參數(shù)類似,區(qū)別是,參數(shù)在模型執(zhí)行時(shí)需要用戶輸入值;而宏變量不需要與用戶交互,系統(tǒng)后臺(tái)會(huì)根據(jù)上下文計(jì)算該值。更多細(xì)節(jié)參見章節(jié)宏變量。u 配置項(xiàng)配置項(xiàng)用于控制語義模型的執(zhí)行方式。2.2.2
8、執(zhí)行流程語義模型的執(zhí)行流程如下圖所示:語義模型執(zhí)行過程可分為以下步驟:n 第一步:語義模型腳本化語義模型中的對象結(jié)構(gòu)將轉(zhuǎn)變?yōu)樽址问降恼Z義腳本。n 第二步:腳本對象化通過腳本引擎把語義腳本解析為腳本模型,即把字符串形式的腳本 對象化。n 第三步:腳本模型翻譯為SQL基于腳本模型,處理其中的語義函數(shù),把腳本模型翻譯為標(biāo)準(zhǔn)SQL語句。運(yùn)行態(tài)描述器會(huì)在這一步被處理。n 第四步:執(zhí)行sql,把結(jié)果集封裝為DataSet,返回DataSet。由于運(yùn)行態(tài)描述器的存在,每次執(zhí)行語義模型時(shí)獲取的最終sql都是不同的,但是,語義模型本身對應(yīng)的腳本模型是相同的?;谛阅芸紤],我們可以把語義模型對應(yīng)的腳本模型緩存
9、起來。這樣一來,只有第一次執(zhí)行語義模型時(shí),我們需要完整執(zhí)行上述四個(gè)步驟,接下來的每次執(zhí)行,我們只需取得該緩存的腳本模型,再做第三、四步的處理即可。2.2.3 數(shù)據(jù)形態(tài)語義模型提供的數(shù)據(jù)可以以兩種形態(tài)存在:數(shù)據(jù)集DataSet、數(shù)據(jù)表DbTable。從數(shù)據(jù)流轉(zhuǎn)的角度來說,語義模型代表了一種取數(shù)管道,數(shù)據(jù)可以從管道中抽取出來。數(shù)據(jù)集DataSet代表了內(nèi)存中的數(shù)據(jù),或者說,數(shù)據(jù)在內(nèi)存中以數(shù)據(jù)集DataSet為載體。數(shù)據(jù)表DbTable代表了數(shù)據(jù)庫中的數(shù)據(jù),或者說,數(shù)據(jù)在數(shù)據(jù)庫中以數(shù)據(jù)表DbTable為載體。語義模型、數(shù)據(jù)集、數(shù)據(jù)表 這三者之間還存在互相轉(zhuǎn)換的關(guān)系,下圖形象的展示了這點(diǎn):數(shù)據(jù)從語義模
10、型這種數(shù)據(jù)管道中加載到內(nèi)存,就以數(shù)據(jù)集的形式存在;如果把數(shù)據(jù)集中的當(dāng)前數(shù)據(jù)持久化到數(shù)據(jù)庫中,數(shù)據(jù)就以數(shù)據(jù)表的形式存在;把數(shù)據(jù)從數(shù)據(jù)庫中加載到內(nèi)存中,就完成了數(shù)據(jù)表到數(shù)據(jù)集的轉(zhuǎn)換;數(shù)據(jù)表可以以語義提供者的形式構(gòu)成語義模型,完成數(shù)據(jù)從數(shù)據(jù)表到語義模型的流轉(zhuǎn);并且,語義模型經(jīng)由視圖化執(zhí)行,最終的結(jié)果集將以數(shù)據(jù)表的形式呈現(xiàn)。數(shù)據(jù)在不同形態(tài)間流轉(zhuǎn)時(shí),改變的是數(shù)據(jù)載體,不變的數(shù)據(jù)本身的結(jié)構(gòu),即元數(shù)據(jù)。2.3 語義提供者語義提供者,表述了一類取數(shù)方式,或者說如何提供數(shù)據(jù)的方式。在語義模型中,語義提供者負(fù)責(zé)把一類業(yè)務(wù)取數(shù)過程以語義腳本的形式描述出來。2.3.1 接口接口方法方法說明String getCode
11、()獲取編碼。該編碼用于標(biāo)示語義提供者M(jìn)etaData getMetaData()獲取元數(shù)據(jù)。元數(shù)據(jù)中包含了該提供者提供的數(shù)據(jù)的描述信息,例如:字段名、字段數(shù)據(jù)類型、字段精度 等String getTitle()獲取標(biāo)題,即該提供者的顯示名稱MetaData provideMetaData(SmartContext context)構(gòu)造元數(shù)據(jù)。入?yún)?shù)context是提供者構(gòu)造元數(shù)據(jù)時(shí)的執(zhí)行環(huán)境。此方法通常在設(shè)計(jì)態(tài)使用,用于重新構(gòu)造元數(shù)據(jù)。String provideScript(SmartContext context)構(gòu)造語義腳本。入?yún)?shù)context是提供者構(gòu)造腳本時(shí)的執(zhí)行環(huán)境。此方法
12、通常在運(yùn)行態(tài)使用,用于把業(yè)務(wù)取數(shù)過程轉(zhuǎn)換為語義腳本。void setCode(String code)設(shè)置編碼void setMetaData(MetaData metaData)設(shè)置元數(shù)據(jù)。此方法通常在設(shè)計(jì)態(tài)使用,一般是先調(diào)用provideMetaData(context)構(gòu)造元數(shù)據(jù),然后調(diào)用此方法來把元數(shù)據(jù)保存在語義提供者。void setTitle(String title)設(shè)置標(biāo)題,即顯示名語義提供者包括NC元數(shù)據(jù)、DW元數(shù)據(jù)、以及語義腳本和業(yè)務(wù)代碼擴(kuò)展提供者(提供總帳、HR、供應(yīng)鏈、報(bào)表等業(yè)務(wù)數(shù)據(jù)擴(kuò)展)。其整個(gè)體系結(jié)構(gòu)可由下圖表示:其中,Provider是語義提供者的接口;Seman
13、ticProvider是基礎(chǔ)擴(kuò)展抽象類,對能把取數(shù)過程以腳本形式描述的語義提供者可繼承此類;SemanticDataProvider是語義數(shù)據(jù)擴(kuò)展抽象類,對不能以腳本形式描述取數(shù)過程,只能提供二維數(shù)據(jù)的提供者,可繼承此類。SemanticSqlProvider適用于提供者在運(yùn)行時(shí)根據(jù)執(zhí)行環(huán)境context返回不同取數(shù)sql,其與SqlProvider的區(qū)別在于:u SqlProvider的sql結(jié)構(gòu)在定義態(tài)已經(jīng)確定;u SemanticSqlProvider是在運(yùn)行時(shí),經(jīng)過一系列業(yè)務(wù)處理,返回最終取數(shù)sql。上述圖中,藍(lán)色代表具體實(shí)現(xiàn)類。通過以上的介紹我們可以得知,Provider定義了語義提
14、供者的接口規(guī)范,SemanticProvider、SemanticDataProvider、SemanticSqlProvider則是我們具體實(shí)現(xiàn)提供者時(shí)要繼承的抽象類?,F(xiàn)對這四個(gè)類的主要接口做重點(diǎn)介紹。n Provider接口方法方法說明String getCode()獲取編碼。該編碼用于標(biāo)示語義提供者M(jìn)etaData getMetaData()獲取元數(shù)據(jù)。元數(shù)據(jù)中包含了該提供者提供的數(shù)據(jù)的描述信息,例如:字段名、字段數(shù)據(jù)類型、字段精度 等String getTitle()獲取標(biāo)題,即該提供者的顯示名稱MetaData provideMetaData(SmartContext context
15、)構(gòu)造元數(shù)據(jù)。入?yún)?shù)context是提供者構(gòu)造元數(shù)據(jù)時(shí)的執(zhí)行環(huán)境。此方法通常在設(shè)計(jì)態(tài)使用,用于重新構(gòu)造元數(shù)據(jù)。String provideScript(SmartContext context)構(gòu)造語義腳本。入?yún)?shù)context是提供者構(gòu)造腳本時(shí)的執(zhí)行環(huán)境。此方法通常在運(yùn)行態(tài)使用,用于把業(yè)務(wù)取數(shù)過程轉(zhuǎn)換為語義腳本。void setCode(String code)設(shè)置編碼void setMetaData(MetaData metaData)設(shè)置元數(shù)據(jù)。此方法通常在設(shè)計(jì)態(tài)使用,一般是先調(diào)用provideMetaData(context)構(gòu)造元數(shù)據(jù),然后調(diào)用此方法來把元數(shù)據(jù)保存在語義提供者。v
16、oid setTitle(String title)設(shè)置標(biāo)題,即顯示名n SemanticProvider接口方法方法說明MetaData provideMetaData(SmartContext context)同Provider對于繼承此類的提供者,必須實(shí)現(xiàn)此方法。String provideScript(SmartContext context)同Provider對于繼承此類的提供者,必須實(shí)現(xiàn)此方法。n SemanticDataProvider接口方法方法說明DataSet provideData(SmartContext context)提供二維數(shù)據(jù)。入?yún)ontext提供執(zhí)行環(huán)境;返
17、回結(jié)果數(shù)據(jù)以DataSet形式展現(xiàn)。DataSet主要包含兩部分:二維數(shù)據(jù)數(shù)組、元數(shù)據(jù)。對于繼承此類的提供者,必須實(shí)現(xiàn)此方法。n SemanticSqlProvider接口方法方法說明String provideSql (SmartContext context)提供sql。入?yún)ontext提供執(zhí)行環(huán)境;返回結(jié)果數(shù)據(jù)以sql形式展現(xiàn)。對于繼承此類的提供者,必須實(shí)現(xiàn)此方法。2.3.2 擴(kuò)展前面介紹了語義提供者的整個(gè)體系結(jié)構(gòu),現(xiàn)在我們拿一個(gè)具體例子來講解如何實(shí)現(xiàn)一個(gè)語義提供者。我們以比較簡單的“數(shù)據(jù)表”這類取數(shù)方式來做示例。擴(kuò)展語義提供者可分為以下三步: 實(shí)現(xiàn)語義提供者類由前文介紹
18、,我們知道實(shí)現(xiàn)一個(gè)提供者有三種方式:n 繼承SemanticProvider:能把取數(shù)過程以腳本形式描述的語義提供者可繼承此類我們現(xiàn)以數(shù)據(jù)表提供者為例來講解如何以此種方式實(shí)現(xiàn)語義提供者。數(shù)據(jù)表提供者對應(yīng)的實(shí)現(xiàn)類為:DbTableProvider,該類繼承于SemanticProvider,實(shí)現(xiàn)了接口provideMetaData(SmartContext context) , provideScript(SmartContext context)。數(shù)據(jù)表提供者,是把NC元數(shù)據(jù)底層數(shù)據(jù)模型中的一張表作為操作對象,從中抽取數(shù)據(jù)。其在語義模型中的操作是這樣的:在上級“模塊”目錄上選中模塊“平臺(tái)”,展
19、開后在子節(jié)點(diǎn)上選中“sm_user”這張表。在數(shù)據(jù)表提供者DbTableProvider中,我們只需要存儲(chǔ)一條信息:表名。這些信息可以看做取數(shù)過程的業(yè)務(wù)描述,接下來我們做的就是把這些業(yè)務(wù)描述轉(zhuǎn)換為以語義模型中的概念來進(jìn)行描述。實(shí)現(xiàn)provideMetaData(SmartContext context)接口:有了表名信息,我們就可以把其列信息拿到,列Column解析為字段Field,每列對應(yīng)一個(gè)字段,多個(gè)列對應(yīng)的多個(gè)字段就組合為元數(shù)據(jù)MetaData。實(shí)現(xiàn)provideScript(SmartContext context)接口:數(shù)據(jù)表提供者比較簡單,直接返回表名即可。到此,我們的數(shù)據(jù)表語義提
20、供者類就實(shí)現(xiàn)完畢。n 繼承SemanticDataProvider:不能以腳本形式描述取數(shù)過程,只能提供二維數(shù)據(jù)的提供者,可繼承此類例如,供應(yīng)鏈中有些查詢并不能直接通過一條sql就能查出,中間可能經(jīng)過一系列復(fù)雜的代碼運(yùn)算邏輯來構(gòu)造這個(gè)結(jié)果數(shù)據(jù),這時(shí)我們就可以繼承SemanticDataProvider來實(shí)現(xiàn)語義提供者。繼承此類只需要實(shí)現(xiàn)provideData(SmartContext context)接口:在該方法中,我們編寫運(yùn)算邏輯,構(gòu)造最終的結(jié)果數(shù)據(jù)DataSet,返回之即可。在此我們有必要介紹下DataSet的結(jié)構(gòu)。DataSet主要包含兩部分:元數(shù)據(jù)MetaData,數(shù)據(jù)容器Objec
21、t(即二維數(shù)組)。Object即是最終的結(jié)果數(shù)據(jù),MetaData是對數(shù)據(jù)的描述信息,包含對應(yīng)字段信息:字段名、數(shù)據(jù)類型、數(shù)據(jù)精度 等。n 繼承SemanticSqlProvider:應(yīng)用方式與SemanticDataProvider類似,不同在于,SemanticDataProvider最終返回二維數(shù)據(jù),而SemanticSqlProvider返回sql語句。 實(shí)現(xiàn)語義提供者設(shè)計(jì)向?qū)ь愑辛苏Z義提供者類,我們還需要一個(gè)設(shè)計(jì)器來設(shè)計(jì)語義提供者。每個(gè)設(shè)計(jì)器都需要實(shí)現(xiàn)接口IProviderDesignWizard。該接口只有一個(gè)方法:/* * param parent 父窗口。為Pro
22、viderStepPanel,藉此可獲得SmartModelWizardShareObject(向?qū)P停驅(qū)Ч蚕頂?shù)據(jù)) * param provider 待修改的語義提供者 * param context 上下文 * return 設(shè)計(jì)完成后的語義提供者 */public Provider design(Container parent, Provider provider, SmartContext context);當(dāng)設(shè)計(jì)語義提供者時(shí),會(huì)調(diào)用此方法,調(diào)用完成返回提供者實(shí)例。數(shù)據(jù)表提供者設(shè)計(jì)向?qū)ь悶镈bTableProviderDesigner。其界面效果如下圖所示:其具體處理流程為:
23、調(diào)用design()方法,打開一如上圖所示對話框,用戶選中表后,點(diǎn)“確定”按鈕,構(gòu)造一個(gè)DbTableProvider實(shí)例,返回之。 配置文件注冊編寫完語義提供者類、設(shè)計(jì)向?qū)ь悾覀冞€需在配置文件中注冊該種語義提供者,以便在語義模型能加載到。所謂注冊,即在配置文件中增加相應(yīng)配置項(xiàng)。為方便各模塊擴(kuò)展語義提供者,在開發(fā)環(huán)境下,配置文件存放位置為各模塊resources下的smart目錄:$NC_Project/resources/smart/smart_$模塊號.xml。如總帳項(xiàng)目擴(kuò)展配置文件路徑為:gl/resources/smart/smart_gl.xml 這樣在安裝盤中,各模
24、塊擴(kuò)的擴(kuò)展配置文件將都在NC_HOME/resources/smart/目錄中。具體配置信息如下。每個(gè)語義提供者注冊項(xiàng)包含五種屬性:名稱、圖標(biāo)路徑、類型、語義提供者類名、設(shè)計(jì)向?qū)ь惷F涓袷綖椋?lt;nc.vo.smart.config.ProviderConfig> <title></title> <icon></icon><type></type> <providerClzName></providerClzName> <designWizardClzName></de
25、signWizardClzName></nc.vo.smart.config.ProviderConfig> 其中,type類型是用于區(qū)分預(yù)置的語義提供者和用戶自定義的語義提供者,其有效值有: preset、custom。分別對應(yīng)系統(tǒng)預(yù)置、用戶自定義兩種類別。一般用戶在自己擴(kuò)展實(shí)現(xiàn)自定義的語義提供者時(shí),可以直接去掉type項(xiàng),或者把該項(xiàng)設(shè)置為custom。以數(shù)據(jù)表提供者舉例,其配置項(xiàng)為: <nc.vo.smart.config.ProviderConfig> <title>數(shù)據(jù)表</title> <icon>./dbtablep
26、rovider.gif</icon><type>preset</type> <providerClzName> vider.impl.DbTableProvider</providerClzName><designWizardClzName>vider.DbTableProviderDesigner</designWizardClzName></nc.vo.smart.config.ProviderConfig>
27、 至此,我們的語義提供者就全部實(shí)現(xiàn)了,在語義模型的設(shè)計(jì)向?qū)е芯蜁?huì)支持該類型的語義提供者。2.4 函數(shù)2.4.1 函數(shù)解析語義腳本支持sql語法和自定義函數(shù)的混合編寫。系統(tǒng)默認(rèn)函數(shù)有smart(), nc_metadata(), qdi_metadata(), parameter(),macro(),后續(xù)會(huì)擴(kuò)展字符串函數(shù)、時(shí)間函數(shù)等。NC公式統(tǒng)一走宏變量定義。2.4.2 函數(shù)擴(kuò)展語義模型支持對其函數(shù)進(jìn)行擴(kuò)展,用戶可以根絕業(yè)務(wù)需求添加自定義函數(shù)。具體步驟如下:n 根據(jù)函數(shù)接口(ISemanticCommand)實(shí)現(xiàn)自定義函數(shù)。類圖示意如下:接口中API如下:public interface ISe
28、manticCommand /* * 執(zhí)行計(jì)算 * param context 上下文環(huán)境 * param params 參數(shù)值 * return 執(zhí)行結(jié)果 */Object run(SmartContext context, Object params);/* * 函數(shù)名稱 * return */String getFunctionName();/* * 函數(shù)描述 */String getFunctionDesc();/* * 函數(shù)參數(shù)類型 * 為null表示不作約束 */Class getParameterTypes();/* * 函數(shù)設(shè)置向?qū)ь?* 為null標(biāo)識無設(shè)置向?qū)?* retu
29、rn see IFunctionDesignWizard */String getFunctionDesignWizardClz(); n 在函數(shù)擴(kuò)展配置文件進(jìn)行配置。默認(rèn)配置文件路徑為$NC_Home/resources/smart/function_default.xml。為方便各模塊擴(kuò)展函數(shù),在開發(fā)環(huán)境下,配置文件存放位置為各模塊resources下的smart目錄:$NC_Project/resources/smart/function_$模塊號.xml。如總帳項(xiàng)目擴(kuò)展配置文件路徑為:gl/resources/smart/function_gl.xml 這樣在安裝盤中,各模塊的擴(kuò)展配置
30、文件將都在NC_HOME/resources/smart/目錄中。配置文件示例如下:配置文件中是根據(jù)驅(qū)動(dòng)名稱進(jìn)行組織的,驅(qū)動(dòng)總共分為兩類SmartFunctionDriver和DBFunctionDriver。之所以對驅(qū)動(dòng)進(jìn)行區(qū)分是因?yàn)樵诓煌墓δ茳c(diǎn),加載的函數(shù)驅(qū)動(dòng)可能不同。在實(shí)際配置過程中,用戶可以根據(jù)自己的需要把自定義的函數(shù)類全路徑名放在已有的驅(qū)動(dòng)定義或新增加自定的驅(qū)動(dòng)定義中,即可完成函數(shù)的擴(kuò)展。2.5 參數(shù)參數(shù)是模型中代表動(dòng)態(tài)信息的元素,用于響應(yīng)用戶的輸入。在模型的執(zhí)行過程中,可以根據(jù)參數(shù)值的不同來影響結(jié)果數(shù)據(jù)。參數(shù)常用于對篩選條件的設(shè)置上。示意圖如下:2.5.1 參數(shù)定義參數(shù)是與具體的
31、模型綁定的,在每個(gè)模型的設(shè)計(jì)過程中都可以對參數(shù)進(jìn)行定義。參數(shù)的類型分為:字符,數(shù)值,枚舉和參照。當(dāng)類型為枚舉時(shí),枚舉項(xiàng)為用“”分隔的枚舉值,或者是一個(gè)單字段的查詢SQL;當(dāng)類型為參照時(shí),枚舉項(xiàng)為基礎(chǔ)參照名,或者是用尖括號括起的自定義參照的類名。在定義的時(shí)候需要注意,參數(shù)的編碼要保證互不相同。2.5.2 參數(shù)引用參數(shù)引用主要在模型設(shè)計(jì)中的篩選描述器部分,在篩選描述器的條目中,值類型選擇為參數(shù)時(shí)候,則會(huì)在值字段的下拉列表中列出相應(yīng)的參數(shù)。另外在模型設(shè)計(jì)的“Smart腳本”中,我們提供了“parameter”函數(shù),在函數(shù)列表中雙擊,則會(huì)彈出參數(shù)選擇框。范例請參考本文檔第五章范例-腳本中引用參數(shù)范例一
32、節(jié)。2.5.3 參數(shù)設(shè)置運(yùn)行態(tài)要求用戶首先對參數(shù)進(jìn)行設(shè)置,當(dāng)報(bào)表引用了多個(gè)語義模型時(shí),參數(shù)將通過多頁簽設(shè)置,每個(gè)頁簽代表一個(gè)模型。另外需要注意的是,模型在運(yùn)行態(tài)時(shí)會(huì)對參數(shù)是否被引用進(jìn)行檢查,最終的設(shè)置界面上只會(huì)顯示被引用的參數(shù)。2.5.4 參照依賴n 設(shè)計(jì)態(tài)增加“參照依賴”列,參照型的參數(shù)可以使用參照依賴,其他類型即使設(shè)置也不會(huì)起作用n “參照依賴”中支持parameter,macro 函數(shù);例如:n sm_user.cuid=parameter('param1') and pk_org=macro('m1')n 如果參照是樹表形式的,并且需要分別對樹和表進(jìn)行設(shè)
33、置,則輸入框中輸入的條件用“;”分割。n 定義態(tài)的默認(rèn)值設(shè)置支持參照依賴,即參照顯示的值會(huì)根據(jù)依賴的條件過濾。具體設(shè)置:2.5.5 自定義參照參照類型參數(shù)支持對參照編輯的自定義設(shè)置。實(shí)現(xiàn)方法:在設(shè)計(jì)態(tài),屬性列編輯框中通過注冊自定義編輯器的方式實(shí)現(xiàn),方式為“<類路徑>”。相關(guān)的具體規(guī)則如下:編輯界面基類:nc.ui.pub.smart.designer.preference.CustomParamDlg ,自定義編輯器必須實(shí)現(xiàn)以下方法:/* * 利用參數(shù)信息構(gòu)建UI * param info 參數(shù)信息 *
34、;throws Exception */public abstract void buildUI(CustomParamInfo info) throws Exception;/* * 獲取參數(shù)編輯的返回值 * return * throws Exception */public abstract String getParamValue() throws Exception;其中bui
35、ldUI方法傳遞的參數(shù)CustomParamInfo相關(guān)說明:/* * 參照當(dāng)前值 */private String currentValue;/* * 當(dāng)前數(shù)據(jù)源 */private String dsName;/* * 當(dāng)前參數(shù)的哈希表 */private HashMap<String, Parameter> paramMap;使用說明,見下圖:2.6 宏變量宏變量引申自程序設(shè)計(jì)中的宏,其表達(dá)式會(huì)被替換為字符串,并在最終
36、的查詢語句中可以被完全替換。宏變量根據(jù)作用域分為全局宏變量和模型宏變量。故名思意,全局宏變量用于全局共享,在任何語義模型中都可以直接引用。模型宏變量與具體的語義模型相關(guān),其只在當(dāng)前模型中其作用。全局宏變量中包含多個(gè)預(yù)置宏變量,如LoginDate,LoginUser等,方便共享。宏變量其定義與參數(shù)類似,不同之處在于其類型有兩種選擇“公式”和“SQL語句”。公式只是其表達(dá)式支持NC公式的編輯;SQL語句是指一般的SQL語句,但默認(rèn)情況下取值只能取第一行第一列的值。宏變量示意圖如下:宏變量的引用與參數(shù)相同,分別在篩選描述器和Smart腳本的公式(macro)中可以對其引用。另外與參數(shù)區(qū)別的是,由于
37、宏變量都是固定的值,因此不需要與用戶進(jìn)行交互,所有在瀏覽態(tài)沒有相應(yīng)的設(shè)置界面。2.7 描述器Descriptor是指對數(shù)據(jù)操作的描述,例如:過濾、排序、分頁、匯總 等?,F(xiàn)支持以下幾種描述器:名稱對應(yīng)類用途結(jié)構(gòu)對應(yīng)界面設(shè)計(jì)類匯總描述器AggrDescriptor對數(shù)據(jù)做匯總處理,相當(dāng)于sql中的group by包含匯總條件、匯總字段兩部分無數(shù)據(jù)唯一描述符DistinctDescriptor清除數(shù)據(jù)中的重復(fù)行,相當(dāng)于sql中的distinct不持有屬性,以其存在與否來判斷是否做distinct處理無過濾描述器FilterDescriptor對數(shù)據(jù)做過濾處理,相當(dāng)于sql中的where包含樹形結(jié)構(gòu)的
38、過濾條件FilterDescPanel表連接描述器JoinDescriptor表示表之間的連接關(guān)系,相當(dāng)于sql中的join。只用于設(shè)計(jì)態(tài)包含連接條件JoinStepPanel限制列描述器LimitColumnDescriptor只提供選定的那些列(以字段名指定)的數(shù)據(jù)包含指定的列名數(shù)組無分頁描述器PaginalDescriptor對數(shù)據(jù)做數(shù)據(jù)庫端分頁處理包含頁大小、頁數(shù)無限制行描述器LimitRowDescriptor取最前 或 最后 多少行數(shù)據(jù)。屬于分頁的一種,一般用作top分析包含 最前 或 最后 標(biāo)示,及數(shù)據(jù)行數(shù)無排序描述器SortDescriptor對數(shù)據(jù)做排序處理包含排序字段、排列
39、順序SortDescPanel描述器可在 設(shè)計(jì)態(tài)、運(yùn)行態(tài) 兩處使用。在設(shè)計(jì)語義模型時(shí),我們通過設(shè)計(jì)向?qū)軜?gòu)造設(shè)計(jì)態(tài)的描述器,保存于語義模型中;在執(zhí)行語義模型時(shí),我們可以另外自己構(gòu)造運(yùn)行態(tài)的描述器,對語義模型進(jìn)行再處理。對于語義模型的使用者,一般接觸到的是運(yùn)行態(tài)的描述器,現(xiàn)對這部分進(jìn)行詳細(xì)講解。構(gòu)造描述器:對于提供了設(shè)計(jì)界面的描述器,可以調(diào)用界面類來構(gòu)造描述器;也可在后臺(tái)直接構(gòu)造描述器。調(diào)用provide接口:把上述描述器封裝到描述器數(shù)組Descriptor descs,然后傳入語義模型相應(yīng)的provide接口方法中:DataSet provideData(IContext context, D
40、escriptor descs) 獲得執(zhí)行結(jié)果數(shù)據(jù)集;DbTable provideView(IContext context, Descriptor descs) 執(zhí)行結(jié)果保存在視圖上。String provideSQL(IContext context, Descriptor descs) 獲得最終執(zhí)行sql;Int provideCount(IContext context, Descriptor descs) 獲取總行數(shù); 上述方法中的Descriptor descs 即是運(yùn)行態(tài)描述器,藉此提供了對語義模型進(jìn)行再處理的可能。2.8 數(shù)據(jù)加工2.8.1 概念 數(shù)據(jù)加工是語義模型
41、提供的一類取數(shù)方式,支持用戶使用java代碼來定義一段取數(shù)邏輯。2.8.2 定位考慮到在現(xiàn)實(shí)應(yīng)用中業(yè)務(wù)邏輯的復(fù)雜性,單純依賴sql語句,用戶并不是總能得到想要的結(jié)果集,因此提供了在語義模型嵌入Java代碼的功能,用于單純sql處理不了的場景。由于數(shù)據(jù)加工是在從數(shù)據(jù)庫中取出結(jié)果集后在內(nèi)存中進(jìn)行操作,考慮到資源和效率問題,我們建議只有在SQL解決不了的數(shù)據(jù)處理要求,才使用數(shù)據(jù)加工實(shí)現(xiàn)。由于在數(shù)據(jù)加工中提供的通過Java代碼實(shí)現(xiàn)相關(guān)數(shù)據(jù)處理的功能,理論上講其可以滿足任意相關(guān)的業(yè)務(wù)邏輯需求,復(fù)雜的業(yè)務(wù)邏輯算法需要在實(shí)際應(yīng)用開發(fā)中按照不同情況和場景靈活使用。2.8.3 執(zhí)行原理在使用時(shí),數(shù)據(jù)加工分為兩個(gè)
42、步驟:n 第一步使用java代碼定義取數(shù)邏輯,最終返回sql語句 或 結(jié)果集DataSet?;谛阅芸紤],推薦返回值為sql;n 第二步定義元數(shù)據(jù),即對上述代碼返回的數(shù)據(jù)的描述,包括:有哪幾列、每一列的數(shù)據(jù)類型、長度、精度等;執(zhí)行時(shí),上述定義的java代碼會(huì)在后臺(tái)被調(diào)用,拿到返回的sql語句或結(jié)果集DataSet(DataSet需要持久化到數(shù)據(jù)庫中的臨時(shí)表中),然后和其他邏輯表(provider)進(jìn)行復(fù)合取數(shù)。2.8.4 使用使用方式如下: 彈出設(shè)計(jì)界面如下: 在上述編輯器中編輯java代碼,左邊提供了輔助代碼片段生成向?qū)А?#160;步驟“元數(shù)據(jù)”,是要求代碼設(shè)計(jì)者對代碼執(zhí)行完后的
43、結(jié)果數(shù)據(jù)進(jìn)行描述,即返回幾列數(shù)據(jù),每列的列名、數(shù)據(jù)類型等信息。 (該步驟的改進(jìn)方案為:元數(shù)據(jù)自動(dòng)生成,通過預(yù)執(zhí)行一遍代碼來實(shí)現(xiàn)。不過手工設(shè)置避免不了,因?yàn)榇蟛糠执a在設(shè)計(jì)態(tài)很難成功執(zhí)行)2.8.5 常見問題n 數(shù)據(jù)加工java代碼中,調(diào)用語義模型的類時(shí),直接使用類名,而對業(yè)務(wù)部門的類,需要使用全路徑名。n java代碼中封裝DataSet時(shí),需要設(shè)置元數(shù)據(jù)MetaData(具體參見相關(guān)類)。n java代碼中通過調(diào)用代碼setDataSet(DataSet)設(shè)置最終需要返回的結(jié)果數(shù)據(jù)集DataSet,通過調(diào)用代碼setResultSQL(sql)設(shè)置sql返回值。n 這部分代碼是在后
44、臺(tái)調(diào)用,切忌調(diào)用UI類n java代碼最終生成的類繼承于nc.pub.smart.model.code.CodeProcessor ,實(shí)現(xiàn)其process() 方法n java代碼生成的類放在 NC_HomemodulesbapubMETA-INFvarclasses 下2.9 物化策略我們可以對一個(gè)語義模型設(shè)置定時(shí)策略,定時(shí)把語義模型執(zhí)行后的數(shù)據(jù)持久化到指定數(shù)據(jù)源上指定的數(shù)據(jù)表中。通過提供這種功能,我們就能把一些執(zhí)行效率較低的語義模型預(yù)先調(diào)度執(zhí)行,到真正取數(shù)時(shí),直接從物化表中取數(shù),減少執(zhí)行等待過程。物化策略使用有其局限性,只有在只使用語義模型本身的字段時(shí),才會(huì)從物化表直接取數(shù);如果需要取語義
45、模型本身未定義的字段(例如語義字段等),則會(huì)把語義模型從頭執(zhí)行一遍,不再使用物化表。2.10 復(fù)合語義模型復(fù)合語義模型,指的是,我們在定義語義模型時(shí),可以引用已經(jīng)存在的語義模型。對這種引用了其他語義模型的語義模型,我們稱之為復(fù)合語義模型。下圖形象的闡釋了復(fù)合語義模型的嵌套結(jié)構(gòu)。應(yīng)用復(fù)合語義模型能夠達(dá)到數(shù)據(jù)集成的效果。在上圖中,我們注意到,每個(gè)語義模型均可以定義自己的執(zhí)行數(shù)據(jù)源,也就是說,復(fù)合語義模型引用的原子語義模型的執(zhí)行數(shù)據(jù)源可以互不相同,從而,我們就能支持多數(shù)據(jù)源取數(shù)功能。數(shù)據(jù)從不同數(shù)據(jù)源抽取出來,然后以語義模型這種統(tǒng)一的形式對外提供數(shù)據(jù),這樣就達(dá)到了數(shù)據(jù)集成的效果。創(chuàng)建復(fù)合語義模型有兩種
46、方式:設(shè)計(jì)向?qū)А⒄Z義腳本。下面我們將針對這兩種方式做分別介紹。2.10.1 設(shè)計(jì)向?qū)Х绞皆谡Z義模型設(shè)計(jì)向?qū)е校x擇“選擇表”步驟,單擊右邊的“語義模型”按鈕,彈出語義模型參照對話框,選中語義模型,單擊“確定”按鈕。這樣就可以把選中的語義模型引用到當(dāng)前設(shè)計(jì)的語義模型中。這時(shí),原子語義模型是以語義提供者的形式存在于復(fù)合語義模型中。2.10.2 語義腳本方式我們可以在語義腳本中通過使用語義函數(shù)smart()來引用語義模型(smart() 的語法規(guī)則參見附錄)。在語義模型設(shè)計(jì)向?qū)е?,選擇“選擇表”步驟,在右邊單擊“語義腳本”按鈕,彈出“語義腳本編輯器”對話框,這時(shí),我們可以以語義腳本的形式來創(chuàng)建語義模
47、型。在“語義函數(shù)”頁簽選中“smart”函數(shù),雙擊,彈出語義模型參照對話框,選中語義模型,單擊“確定”按鈕。這時(shí),在腳本編輯框中會(huì)自動(dòng)添加一段腳本“smart(user)”,當(dāng)然,如果我們事先知道被引用的語義模型的編碼,我們也可以在文本框中直接編輯腳本。2.11 語義上下文語義上下文SmartContext提供了語義模型運(yùn)行時(shí)環(huán)境,包括了如下有用信息:例如參數(shù)值、宏變量值、當(dāng)前模型、執(zhí)行數(shù)據(jù)源等。相關(guān)方法列表如下:方法名稱參數(shù)功能SmartModel getBuildingSmartModel()獲得當(dāng)前正在build的模型。對復(fù)合模型,不一定是當(dāng)前正在執(zhí)行的模型String getDsNam
48、e4Exec()獲取執(zhí)行數(shù)據(jù)源Object getMacroValue(String macro)macro:宏變量編碼獲得宏變量的值Object getParameterValue(String paramCode)paramCode:參數(shù)編碼獲得參數(shù)的值2.12 腳本規(guī)則腳本規(guī)則是指針對語義腳本的處理邏輯,具體處理過程如下圖所示:腳本規(guī)則支持?jǐn)U展,業(yè)務(wù)部門可以通過擴(kuò)展規(guī)則、直接操作內(nèi)存腳本模型,藉此實(shí)現(xiàn)特定功能,例如:復(fù)雜權(quán)限控制等。規(guī)則的擴(kuò)展機(jī)制如下:2.12.1 實(shí)現(xiàn)規(guī)則類規(guī)則的統(tǒng)一接口為:nc.pub.smart.script.engine.rule.IScriptRule主要接口方
49、法為:/* * 執(zhí)行規(guī)則*/public Select exec() throws Exception;在該接口中,我們可以操作傳過來的腳本模型Select各部分,包括select字段列表、from、where、orderBy、groupBy等。修改完腳本模型,把其返回即可。我們可以繼承AbsScriptRule來實(shí)現(xiàn)自定義的規(guī)則。2.12.2 配置文件注冊編寫完規(guī)則實(shí)現(xiàn)類,我們還需在配置文件中注冊該規(guī)則,以便在語義模型能加載到。所謂注冊,即在配置文件中增加相應(yīng)配置項(xiàng)。為方便各模塊擴(kuò)展規(guī)則,在開發(fā)環(huán)境下,配置文件存放位置為各模塊resources下的smart目錄:$NC_Project/re
50、sources/smart/smart_rule_$模塊號.xml。如總帳項(xiàng)目擴(kuò)展配置文件路徑為:gl/resources/smart/smart_rule_gl.xml 這樣在安裝盤中,各模塊擴(kuò)的擴(kuò)展配置文件將都在NC_HOME/resources/smart/目錄中。具體配置信息如下:每個(gè)規(guī)則注冊項(xiàng)包含三種屬性:顯示名、規(guī)則class全路徑名、優(yōu)先級。其格式為:<nc.pub.smart.script.engine.rule.config.ScriptRuleConfig><items><nc.pub.smart.script.engine.rule.conf
51、ig.ScriptRuleConfigItem><displayName></displayName><ruleClz></ruleClz><priority></priority></nc.pub.smart.script.engine.rule.config.ScriptRuleConfigItem></items></nc.pub.smart.script.engine.rule.config.ScriptRuleConfig> 其中,priority優(yōu)先級是用于確定各規(guī)則的
52、調(diào)用順序。至此,我們的規(guī)則擴(kuò)展就全部實(shí)現(xiàn)了,在語義模型的設(shè)計(jì)向?qū)е芯蜁?huì)支持該規(guī)則。2.12.3 操作使用打開 語義模型設(shè)計(jì)向?qū)?最后一步“選項(xiàng)”-配置項(xiàng),“業(yè)務(wù)規(guī)則”配置項(xiàng), 設(shè)置值時(shí)彈出規(guī)則選擇對話框:勾選所需規(guī)則,支持多選。這些選中規(guī)則即可在腳本引擎解析時(shí)調(diào)用,來對語義腳本進(jìn)行處理。第三章 語義模型管理本章內(nèi)容概要:l 對象管理l 環(huán)境配置l 導(dǎo)入導(dǎo)出語義模型的管理一般包括:語義模型目錄的管理、語義模型的管理、語義模型的相關(guān)配置管理、全局變量的配置、監(jiān)控、查詢、權(quán)限管理等功能點(diǎn)。語義模型目錄的管理:目錄的新增、修改、刪除、刷新等功能點(diǎn)。語義模型的管理:語義模型的新增、修改、刪除、
53、刷新和語義模型的設(shè)計(jì)、執(zhí)行等功能點(diǎn)。語義模型的相關(guān)配置管理:主要是對數(shù)據(jù)源的管理,設(shè)置默認(rèn)定義數(shù)據(jù)源,執(zhí)行數(shù)據(jù)源全局變量的配置:預(yù)置宏變量,在整個(gè)系統(tǒng)中是全局的。監(jiān)控:語義模型執(zhí)行取數(shù)操作的性能監(jiān)控功能,方便的定位效率瓶頸。查詢:權(quán)限管理:語義模型管理的功能權(quán)限、數(shù)據(jù)權(quán)限、資源權(quán)限和NC權(quán)限規(guī)則一致以上介紹了語義模型管理都有那些功能點(diǎn)。由面到點(diǎn),下面針對每個(gè)功能點(diǎn)的用法和功能做一下詳細(xì)描述。3.1 對象管理語義模型的管理調(diào)度功能由主界面完成,主界面左側(cè)為語義模型目錄,右側(cè)為選中目錄下的語義模型列表和語義模型屬性卡片,如下圖:3.1.1 目錄管理增加/刪除/修改:在根節(jié)點(diǎn)或目錄節(jié)點(diǎn)之下可以增加目
54、錄,刪除目錄時(shí)會(huì)刪除目錄下的所有對象。目錄的可修改屬性為目錄名稱。同一目錄下的目錄和對象不能重名。3.1.2 語義模型管理增加/刪除/修改:在根節(jié)點(diǎn)或目錄節(jié)點(diǎn)之下可以增加語義模型。屬性為編碼、名稱和備注其中編碼一經(jīng)使用,就不再建議作任何修改,因?yàn)榇司幋a可能被其它對象引用。請注意語義模型的唯一標(biāo)識是編碼而不是顯示名稱。3.1.3 監(jiān)控語義模型執(zhí)行取數(shù)操作的性能監(jiān)控功能,方便的定位效率瓶頸。主要功能點(diǎn):后臺(tái)集群性能日志、客戶端性能日志、執(zhí)行隊(duì)列管理、性能監(jiān)控、集群調(diào)度管理、元數(shù)據(jù)管理、臨時(shí)表管理。3.1.4 權(quán)限語義模型管理的功能權(quán)限、數(shù)據(jù)權(quán)限、資源權(quán)限和NC權(quán)限規(guī)則一致。具體可以查看NC權(quán)限相關(guān)
55、文檔,此處不再詳細(xì)說明。3.1.5 全局變量配置預(yù)置宏變量,在整個(gè)系統(tǒng)中是全局的。界面效果如下:3.2 環(huán)境配置主要配置默認(rèn)定義數(shù)據(jù)源,并從有效數(shù)據(jù)源中選擇執(zhí)行數(shù)據(jù)源。進(jìn)入“數(shù)據(jù)源配置”模塊,打開如下界面。此配置存放語義模型運(yùn)行所需要的環(huán)境變量,這些變量被存儲(chǔ)在后臺(tái)datasource.xml中,位于NC_Home/resources/smart/目錄下,由于本文下面的章節(jié)中還有需要涉及到環(huán)境變量設(shè)置的地方,所以這里只提及數(shù)據(jù)源環(huán)境變量的設(shè)置。n 有效數(shù)據(jù)源啟動(dòng)中間件時(shí)的所有能夠連接的合法數(shù)據(jù)源,實(shí)際上也就是prop.xml文件中的所有定義過并且能夠正常連接的數(shù)據(jù)源。n 執(zhí)行數(shù)據(jù)源語義模型所能夠引用的執(zhí)行數(shù)據(jù)源列表,語義模型管理中所有的語義模型的取數(shù)數(shù)據(jù)源范圍就在這個(gè)列表中定義。請注意一個(gè)查詢執(zhí)行數(shù)據(jù)源必須是一個(gè)有效數(shù)據(jù)源。n 默認(rèn)定義數(shù)據(jù)源語義模型定義在哪個(gè)數(shù)據(jù)源上。各種
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- JJF 2167-2024電阻真空變送器校準(zhǔn)規(guī)范
- 2024年度云南省高校教師資格證之高等教育法規(guī)自我檢測試卷A卷附答案
- 贛南師范大學(xué)《商法》2022-2023學(xué)年第一學(xué)期期末試卷
- 贛南師范大學(xué)《高等代數(shù)》2021-2022學(xué)年第一學(xué)期期末試卷
- 贛南師范大學(xué)《體育社會(huì)學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- 阜陽師范大學(xué)《英國文學(xué)一》2021-2022學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)《語文教學(xué)設(shè)計(jì)》2021-2022學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)《信號分析與控制》2022-2023學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)《圖形語言》2021-2022學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)《數(shù)字信號處理應(yīng)用二》2022-2023學(xué)年第一學(xué)期期末試卷
- 醫(yī)院檢驗(yàn)科實(shí)驗(yàn)室生物安全程序文件SOP
- 92式手槍基礎(chǔ)訓(xùn)練
- 煤氣商業(yè)爐具使用指南
- 進(jìn)修醫(yī)師考核鑒定表(共4頁)
- 中國水利水電第三工程局有限公司國內(nèi)工程分包管理辦法
- 煤炭實(shí)驗(yàn)室建設(shè)要求
- 公司人事檔案規(guī)范管理工作方案
- therebe句型專項(xiàng)練習(xí)
- 民間秘術(shù)絕招大全
- 檢驗(yàn)科授權(quán)申請表1頁
- 工程地質(zhì)學(xué)—地貌
評論
0/150
提交評論