版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、RSA 中 UML 建模元素的擴(kuò)展與定制本文介紹了使用 IBM Rational Software Architect 進(jìn)行 UML 建模元素的擴(kuò)展與定制的基本實(shí)現(xiàn)方法。通過(guò)對(duì)一個(gè)實(shí)例場(chǎng)景的引用,文章重點(diǎn)闡明如何在 RSA 中基于 Eclipse 插件技術(shù)完成對(duì) RSA 中 UML 建模元素的容器,即 Palette 的靜態(tài)、動(dòng)態(tài)擴(kuò)展,以及對(duì) Palette 擴(kuò)展工具項(xiàng)定制時(shí)需要注意的技術(shù)難點(diǎn)。1 摘要RSA為基于UML進(jìn)行業(yè)務(wù)建模并完成底層代碼生成的開(kāi)發(fā)人員提供了可視化的建模環(huán)境,開(kāi)發(fā)人員可以因此方便的從Palette中拖取合適的UML元素來(lái)表達(dá)業(yè)務(wù)語(yǔ)義。但是在很多時(shí)候,開(kāi)發(fā)人員希望在Pal
2、ette中定制自己的工具項(xiàng),從而便捷的使用具有更豐富業(yè)務(wù)概念和關(guān)系語(yǔ)義的UML元素。本文基于RSA 6.0中UML建模元素的容器-標(biāo)準(zhǔn)palette插件,從靜態(tài)配置和動(dòng)態(tài)加載兩種途徑提供了擴(kuò)展Palette的基本方法和其中需要關(guān)注的技術(shù)難點(diǎn)。文章也舉例說(shuō)明了如何在具體實(shí)現(xiàn)中嵌入對(duì)Palette擴(kuò)展工具項(xiàng)所生成的UML元素的定制?;仨?yè)首2 引言IBM® Rational Software Architect - IBM軟件開(kāi)發(fā)平臺(tái)的一部分,是IBM在2003年2月并購(gòu)Rational以來(lái)首次發(fā)布的Rational產(chǎn)品。RSA作為一個(gè)集成化的設(shè)計(jì)和開(kāi)發(fā)工具,支持使用UML進(jìn)行模型驅(qū)動(dòng)的開(kāi)
3、發(fā)以得到架構(gòu)良好的應(yīng)用和服務(wù)。RSA是在Eclipse 3.0 的基礎(chǔ)之上創(chuàng)建的,因而支持Eclipse 提供的使用特性,其中最為主要的就是Eclipse插件技術(shù)。本文所要討論的Palette就是使用Eclipse插件技術(shù)嵌入到RSA工具環(huán)境中的一個(gè)UI組件。假設(shè)有如下的場(chǎng)景:開(kāi)發(fā)人員使用RSA為一個(gè)網(wǎng)上電子零售業(yè)務(wù)進(jìn)行業(yè)務(wù)建模,在建模過(guò)程中需要大量重用如下4個(gè)業(yè)務(wù)角色:· 提供商· 消費(fèi)者· 商品· 零售商使用RSA建模環(huán)境下原有的Palette,需要反復(fù)拖入Class元素并為每個(gè)這樣創(chuàng)建的Class賦予相應(yīng)的構(gòu)造型(Stereotype)以表達(dá)如上之
4、一的業(yè)務(wù)角色。如下是使用RSA中未擴(kuò)展的UML建模環(huán)境進(jìn)行建模時(shí)的界面:圖1 使用RSA經(jīng)典UML建模環(huán)境進(jìn)行網(wǎng)上電子零售業(yè)務(wù)建模為了提高建模的效率,開(kāi)發(fā)人員希望在Palette中定制代表了這些業(yè)務(wù)角色的新元素。本文基于上面的實(shí)例總結(jié)了開(kāi)發(fā)人員在進(jìn)行Palette擴(kuò)展時(shí)所采用的基本實(shí)現(xiàn)技術(shù)和難點(diǎn)。回頁(yè)首3 基于RSA的Palette靜態(tài)擴(kuò)展從前面的討論可以知道,RSA是構(gòu)建在Eclipse3.0的基礎(chǔ)之上的。Eclipse的插件結(jié)構(gòu)是Eclipse重要的基礎(chǔ)設(shè)施和體系結(jié)構(gòu),其中應(yīng)用擴(kuò)展點(diǎn)是兩個(gè)或者多個(gè)插件完成協(xié)作的基礎(chǔ)?;赗SA的Palette靜態(tài)擴(kuò)展方法就是通過(guò)Eclipse,定義單獨(dú)的插
5、件來(lái)完成Palette擴(kuò)展點(diǎn)的定義,從而增加新的建模功能。本節(jié)將通過(guò)一個(gè)簡(jiǎn)單的"零售業(yè)務(wù)建模"的例子向您逐步展示如何來(lái)對(duì)RSA的Palette進(jìn)行擴(kuò)展。在"零售業(yè)務(wù)建模"中,我們需要四類角色:零售提供商、商品、消費(fèi)者和零售商。為了提供更好的操作感覺(jué)和交互過(guò)程,我們將擴(kuò)展Palette面板,這樣進(jìn)行零售業(yè)務(wù)建模就如同UML建模一樣的直觀快捷。同RSA平臺(tái)中其他插件一樣,Palette也是通過(guò)擴(kuò)展點(diǎn)來(lái)進(jìn)行定義的,所以,必須要在插件清單plugin.xml文件中聲明所需要的擴(kuò)展點(diǎn),并且提供相應(yīng)的實(shí)現(xiàn)類。對(duì)于Palette而言,要聲明的擴(kuò)展點(diǎn)就是com.ibm.
6、xtools.presentation.paletteProvider,要提供的實(shí)現(xiàn)類必須實(shí)現(xiàn)ernal.services.palette.IPaletteProvider接口。當(dāng)然,也可以使用缺省的ernal.services.palette.DefaultPaletteProvider類,因?yàn)镈efaultPaletteProvider已經(jīng)完全實(shí)現(xiàn)了IPaletteProvider接口,在RSA的一些建模插件中,可以查找到使用的都是這個(gè)缺省的Palette提供類。就p
7、alette而言,只有這樣的聲明是不夠的,更加完整的擴(kuò)展聲明如清單1所示。清單1 一個(gè)完整的Palette擴(kuò)展聲明其中,比較重要的部分就是contribution節(jié)點(diǎn),該節(jié)點(diǎn)聲明了要為Palette添加內(nèi)容,他的屬性factoryClass必須要指定一個(gè)實(shí)現(xiàn)類,提供生成相應(yīng)工具的工廠方法。在Contribution節(jié)點(diǎn)中,通過(guò)聲明entry節(jié)點(diǎn)來(lái)實(shí)現(xiàn)在Palette面板上要添加的抽屜(drawer,Palette面板上容納工具的容器)或者工具盒(tool)。例如,首先要添加一個(gè)容納零售業(yè)務(wù)建模工具的抽屜,那么清單2中的片斷就完成了這樣的聲明:清單2 一個(gè)典型的Palette抽屜擴(kuò)展聲明以清單2
8、為例,上述entry節(jié)點(diǎn)中· label聲明了要在Palette面板中顯示的名字;· kind聲明了該Entry是drawer類型(或者是tool類型);· id聲明了他的唯一性并在程序中將使用該id來(lái)唯一標(biāo)識(shí);· path聲明了他在Palette或者drawer中的位置,他的格式同Menu和Toolbar中擴(kuò)展的path格式是一致的。類似的,在添加了抽屜之后,就要在抽屜中添加建模的工具,對(duì)應(yīng)的就是零售提供商工具、商品工具和消費(fèi)者工具,如清單1中所示。這個(gè)時(shí)候我們新建立一個(gè)插件工程,并把上述Palette擴(kuò)展聲明填寫(xiě)進(jìn)插件清單文件中去,然后以工作臺(tái)方式運(yùn)
9、行,我們新建的這個(gè)插件也會(huì)被自動(dòng)裝載進(jìn)啟動(dòng)的工作臺(tái)中。新建"UML模型",打開(kāi)"建模"視圖,我們可以在palette面板上看到如圖2的所示的截圖。圖2 用于零售業(yè)務(wù)建模的Palette片斷雖然,我們新擴(kuò)展的零售建模工具已經(jīng)在Palette面板中出現(xiàn),但是他們不能執(zhí)行任何操作,甚至?xí)伋霎惓#虼?,我們要進(jìn)一步添加功能方面的擴(kuò)展。首先,對(duì)應(yīng)著Palette中的工具,在插件中要有相應(yīng)的工具類來(lái)完成該工具的操作。這個(gè)工具類通常要求繼承自ernal.tools.CreationTool,例如實(shí)現(xiàn)消費(fèi)者
10、的模型生成工具類的代碼段如下:其中,· 構(gòu)造函數(shù),傳進(jìn)參數(shù)IElementType,定義該模型具有的語(yǔ)義信息;· performCreation,具體的執(zhí)行動(dòng)作,為了簡(jiǎn)單起見(jiàn),我們都是調(diào)用了父類的方法。類似的,我們也實(shí)現(xiàn)了零售提供商和商品的生成工具類,即SupplierCreationTool和ProductCreationTool。 這些工具生成類的對(duì)象控制都是由插件清單中指定的工廠類來(lái)進(jìn)行控制的,如清單1中的片斷,這個(gè)工廠需要繼承自ernal.ui.palette.PaletteFactory.Adapter,事實(shí)上Palet
11、teFactory的Adapter已經(jīng)完成了絕大部分的工作,在例子中實(shí)現(xiàn)的工廠類BizdemoPaletteFactory中僅僅需要重載一個(gè)方法就可以了,如下面程序段所示:其中:· 參數(shù)toolId,表示的是目前需要生成的工具id,對(duì)應(yīng)的也就是插件清單文件中Entry節(jié)點(diǎn)聲明的id;· 返回值,返回對(duì)應(yīng)的生成工具對(duì)象,也就是我們前面已經(jīng)實(shí)現(xiàn)的四個(gè)生成工具類;· 傳遞給生成工具對(duì)象的ElementType,為了簡(jiǎn)單起見(jiàn),我們將UML中的CLASS類型傳給了生成工具,在第五章中,我們將介紹如何對(duì)他進(jìn)行進(jìn)一步的擴(kuò)展,包括在語(yǔ)義方面的擴(kuò)展。至此,我們就已經(jīng)用靜態(tài)擴(kuò)展的方式
12、對(duì)Palette進(jìn)行了擴(kuò)展,提供了一個(gè)簡(jiǎn)單的零售業(yè)務(wù)的建模工具?;仨?yè)首4 基于RSA的Palette動(dòng)態(tài)擴(kuò)展上節(jié)給出了通過(guò)編輯RSA插件工程的plugin.xml文件中提供的擴(kuò)展點(diǎn)進(jìn)行靜態(tài)Palette擴(kuò)展的基本方法。在一些特定情況下,開(kāi)發(fā)人員在進(jìn)行業(yè)務(wù)建模和業(yè)務(wù)開(kāi)發(fā)時(shí)無(wú)法完全窮舉業(yè)務(wù)模型中所需要的所有角色,并在plugin.xml的擴(kuò)展點(diǎn)中完成定義。就網(wǎng)上電子零售業(yè)務(wù)而言,未來(lái)該業(yè)務(wù)的供貨來(lái)源很有可能被擴(kuò)展到海外,并且需要為該角色添加"國(guó)籍"、"報(bào)關(guān)單"、"報(bào)關(guān)"等新的屬性和行為。為此需要從提供商中分離出"國(guó)外提供商&qu
13、ot;這樣新的業(yè)務(wù)角色。"國(guó)外提供商"和原有的"國(guó)內(nèi)提供商"屬于相同的Palette分組,但是重新編碼、編譯、構(gòu)建原有的插件工程會(huì)給代碼維護(hù)帶來(lái)一定的困難,因?yàn)殚_(kāi)發(fā)人員無(wú)法預(yù)料在將來(lái)是否還有添加更多的角色。綜上,開(kāi)發(fā)人員希望在提供靜態(tài)Palette擴(kuò)展的插件(下文稱之為BizDemo核心插件)內(nèi)提供必要的擴(kuò)展點(diǎn),允許未來(lái)新的業(yè)務(wù)角色以新的插件的形式嵌入到RSA環(huán)境中來(lái)。這樣的插件下文稱之為BizDemo擴(kuò)展插件)將使用Palette核心擴(kuò)展插件暴露的擴(kuò)展點(diǎn),以允許核心插件在動(dòng)態(tài)加載時(shí)讀取其工具項(xiàng)配置,將擴(kuò)充的工具項(xiàng)添加到Palette中來(lái)。進(jìn)行Palet
14、te動(dòng)態(tài)擴(kuò)展的第一步是為第3節(jié)中創(chuàng)建的BizDemo核心插件開(kāi)放一個(gè)擴(kuò)展點(diǎn),體現(xiàn)在插件工程中,就是在plugin.xml中添加如下清單所示的聲明:清單3 為支持Palette動(dòng)態(tài)擴(kuò)展在插件工程中添加的擴(kuò)展點(diǎn)該聲明規(guī)定擴(kuò)展點(diǎn)的id為bizdemoProviders,該id將作為未來(lái)提供擴(kuò)展業(yè)務(wù)角色語(yǔ)義的新插件的定位擴(kuò)展點(diǎn)的依據(jù)。同時(shí),上面的聲明還指出,未來(lái)這樣的新插件必須在自己的plugin.xml聲明中使用核心插件schema目錄下bizdemoProviders.exsd文件所規(guī)定的XML語(yǔ)法來(lái)表達(dá)對(duì)該擴(kuò)展點(diǎn)的擴(kuò)展聲明。因而,BizDemo核心插件必須在自己的工程目錄下創(chuàng)建一個(gè)schema目
15、錄和其下的一個(gè)名為bizdemoProviders.exsd的XSD文件。如下給出了該文件的關(guān)鍵片斷:清單4 描述BizDemo核心插件bizdemoProvider擴(kuò)展點(diǎn)的XSD片斷下面的步驟就是創(chuàng)建一個(gè)用來(lái)描述"國(guó)外提供商"業(yè)務(wù)語(yǔ)義的基于BizDemo核心插件的擴(kuò)展插件。首先,使用RSA創(chuàng)建一個(gè)普通的插件工程,并在plugin.xml中添加如下的聲明:清單5 為使用在BizDemo核心插件中定義的擴(kuò)展點(diǎn)而在擴(kuò)展插件plugin.xml中給出的聲明該聲明片斷完全符合清單4定義的語(yǔ)法,它表示新的插件將使用BizDemo核心插件的擴(kuò)展點(diǎn)d
16、emoProviders(bizdemo.palette是BizDemo核心插件的id,也作為擴(kuò)展點(diǎn)的名字空間),并在bizdemoProvider元素的屬性descriptor中指出了提供新的業(yè)務(wù)角色語(yǔ)義的文件名。接下來(lái)在新插件工程的根目錄下生成名為bizdemo-role.xml的XML文件,并在文件中如下描述"國(guó)外提供商"Palette擴(kuò)展工具項(xiàng)的基本屬性:清單6 描述了"國(guó)外提供商"Palette擴(kuò)展工具項(xiàng)屬性bizdemo-role.xml聲明片斷該聲明規(guī)定了將要添加到BizDemo抽屜中的"國(guó)外提供商"工具項(xiàng)的id、lab
17、el、large_icon、small_icon、description等屬性。這些屬性和第3節(jié)清單1中所列舉的靜態(tài)定義屬性一一對(duì)應(yīng)。最后,我們需要再次修改BizDemo核心插件的代碼和部分聲明,使之支持對(duì)所有擴(kuò)展了該插件的BizDemo擴(kuò)展插件的角色信息動(dòng)態(tài)提?。?#183; 創(chuàng)建一個(gè)DynaRoleInfo 類,并定義和清單6所列項(xiàng)對(duì)應(yīng)的屬性,用來(lái)動(dòng)態(tài)保存從每個(gè)角色擴(kuò)展插件中讀出的信息;· 創(chuàng)建一個(gè)RoleManager類管理所有DynaRoleInfo的實(shí)例。該類提供靜態(tài)屬性Map roleList和相關(guān)的get-set方法完成運(yùn)行時(shí)對(duì)DynaRoleInfo的實(shí)例的加入和查詢
18、。具體實(shí)現(xiàn)時(shí),可以使用每個(gè)動(dòng)態(tài)角色信息中的id作為Map的key,而將相應(yīng)的DynaRoleInfo實(shí)例作為Map的object;· 創(chuàng)建一個(gè)RoleProviderInfo類用來(lái)解析每個(gè)BizDemo擴(kuò)展插件中的bizdemo-role.xml文件,并將信息加載到一個(gè)DynaRoleInfo實(shí)例中。RoleProviderInfo類的代碼邏輯可以只實(shí)現(xiàn)對(duì)一個(gè)bizdemo-role.xml文件的解析,而將所有對(duì)擴(kuò)展了核心Palette插件的插件集合的迭代放到RoleManager中完成。例如,RoleManager提供initialize方法來(lái)完成該邏輯:RoleProviderI
19、nfo的構(gòu)造函數(shù)將定位參數(shù)提供的擴(kuò)展點(diǎn)入口所屬的插件,并由此找到相應(yīng)的bizdemo-role.xml,完成解析:最后,我們需要做兩個(gè)代碼段的修改。首先如第3節(jié)所述的那樣,添加一個(gè)繼承了ernal.tools.CreationTool的DynaCreationTool,并在BizdemoPaletteFactory的createTool方法中添加一個(gè)if分支:new DynaCreationTool (UMLType.CLASS);其次,修改清單1中對(duì)Palette擴(kuò)展的實(shí)現(xiàn)類聲明,將paletteProvider的屬性class改
20、為自定義的類bizdemo.palette. DynaProvider,并擴(kuò)展其contributeToPalette方法如下:動(dòng)態(tài)添加一個(gè)工具項(xiàng)的典型代碼片斷如下:經(jīng)過(guò)如上步驟,使用RSA的Runtime Workbench動(dòng)態(tài)加載這兩個(gè)插件,用戶將能夠看到在Palette中動(dòng)態(tài)創(chuàng)建的"國(guó)外提供商"工具項(xiàng):圖3 創(chuàng)建了"國(guó)外提供商"工具項(xiàng)的零售業(yè)務(wù)建模Palette片斷回頁(yè)首5 Palette擴(kuò)展工具項(xiàng)的定制在一般情況下,通過(guò)擴(kuò)展Palette得到的工具項(xiàng)都要對(duì)其生產(chǎn)的UML元素進(jìn)行定制,以表達(dá)在開(kāi)發(fā)人員看來(lái)更豐富的業(yè)務(wù)含義。這樣的定制可能包括:
21、83; 為創(chuàng)建的UML元素賦予新的構(gòu)造型;· 為創(chuàng)建的UML元素添加新的構(gòu)成元素,如在Class上添加預(yù)定制的屬性和操作;· 為創(chuàng)建的UML元素定制特定的外觀,如設(shè)置其背景色、圖標(biāo)、字體等。限于篇幅,我們將只介紹定制第4節(jié)創(chuàng)建的"國(guó)外提供商"工具項(xiàng)生成的UML元素的背景和構(gòu)造型的實(shí)現(xiàn)方法。首先,需要在第4節(jié)創(chuàng)建的"國(guó)外提供商" BizDemo擴(kuò)展插件的bizdemo-role.xml中補(bǔ)充聲明相關(guān)的定制信息:該定制信息說(shuō)明,由"國(guó)外提供商"Palette工具項(xiàng)生成的UML元素將被應(yīng)用InterProviderPro
22、file這一Profile定義的InterProvider構(gòu)造型;并且,該UML元素的背景色將設(shè)為由十六進(jìn)制整數(shù)EADDAA對(duì)應(yīng)的RGB值標(biāo)志的顏色。其次,我們需要修改BizDemo核心插件中DynaRoleInfo類的屬性,使之包含所有定制的屬性的集合。應(yīng)該說(shuō),BizDemo核心插件規(guī)定了定制屬性的集合及其在bizdemo-role.xml的描述語(yǔ)法(類似清單4的bizdemoProviders.exsd),并依據(jù)它完成DynaRoleInfo類的定義。而每個(gè)BizDemo擴(kuò)展插件的bizdemo-role.xml只是選擇表達(dá)自身語(yǔ)義的一部分屬性進(jìn)行描述。類似的,我們需要在RoleProvi
23、derInfo類中修改相關(guān)的XML解析邏輯,以加入對(duì)定制信息的解釋支持。最為關(guān)鍵的是下一步。由于RSA認(rèn)為UML模型和UML圖屬于不同的分類體系(而實(shí)際上確實(shí)如此,UML模型表達(dá)了模型自身的屬性和關(guān)系,UML圖則給出了模型的一個(gè)圖形化的顯示方案),一個(gè)具體的UML元素通過(guò)Palette被生成到UML圖的過(guò)程中,兩者在不同時(shí)刻生成。如構(gòu)造型這樣屬于UML模型的元素在UML元素被繪制到UML圖之前就被加入到工具項(xiàng)的結(jié)果對(duì)象中。而如背景色這樣屬于UML圖的元素則在真正在圖上繪制生成的結(jié)果對(duì)象時(shí)才被加載。反映到我們的解決方法上,對(duì)于構(gòu)造型,我們必須修改BizdemoPaletteFactory使得創(chuàng)建
24、的UML元素不簡(jiǎn)單是個(gè)Class。辦法是· 創(chuàng)建如下的一個(gè)特殊的Classifier DYNACLASSROLE,并在BizdemoPaletteFactory的DynaCreationTool方法中要求對(duì)于"國(guó)外提供商"創(chuàng)建的結(jié)果對(duì)象是這個(gè)DYNACLASSROLE:· 在BizDemo核心插件的plugin.xml中加入如下的聲明該聲明對(duì)com.ibm.xtools.presentation.semanticProviders擴(kuò)展點(diǎn)進(jìn)行了擴(kuò)展,在用于擴(kuò)展的類bizdemo.palette.DynaSemanticProvider的getCreateComponentElementCommand方法中,要求用CreateBizDemoCommand類(繼承了mands.CreateClassifierCommand)的構(gòu)造函數(shù)返回結(jié)果對(duì)象:· 最后,在CreateBizDemoCommand類的doExecute方法中在返回缺省創(chuàng)建的UML結(jié)果對(duì)象前應(yīng)用該構(gòu)造型: 背景色的定制要簡(jiǎn)單一些,實(shí)現(xiàn)它的關(guān)鍵在于捕獲在RSA的UML圖編輯器中創(chuàng)建UML對(duì)象這一事件:· 在Palette的核心插件plugin.xml中添加如下聲明:該聲明用自定義的類bizdemo.palette.act
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025建筑工程勞務(wù)承包合同鋼筋分項(xiàng)工程合同
- 建筑工程電力工程建設(shè)
- 建筑工程水利工程建設(shè)
- 2025銀行房屋抵押按揭合同
- 2025景觀設(shè)計(jì)標(biāo)準(zhǔn)合同
- 2025年外研版七年級(jí)物理下冊(cè)月考試卷含答案
- 2025發(fā)展對(duì)象考試題庫(kù)附含參考答案
- 建筑工程中的電氣安裝要點(diǎn)講解
- 新郎父親婚禮上經(jīng)典致辭集錦15篇
- 2025紀(jì)檢監(jiān)察業(yè)務(wù)知識(shí)考試題及參考答案
- 勞務(wù)經(jīng)紀(jì)人培訓(xùn)
- 如何提高售后服務(wù)的快速響應(yīng)能力
- 成人氧氣吸入療法-中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)
- ?;愤\(yùn)輸安全緊急救援與處理
- Unit-3-Reading-and-thinking課文詳解課件-高中英語(yǔ)人教版必修第二冊(cè)
- 高數(shù)(大一上)期末試題及答案
- 婚介公司紅娘管理制度
- 煤礦電氣試驗(yàn)規(guī)程
- JCT796-2013 回彈儀評(píng)定燒結(jié)普通磚強(qiáng)度等級(jí)的方法
- 物業(yè)客服培訓(xùn)課件PPT模板
- 火力發(fā)電廠節(jié)能管理制度實(shí)施細(xì)則
評(píng)論
0/150
提交評(píng)論