版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
nychen2000@163.com2009-06-13--nychen2000@163.comi 1 2 3 3 3 6 6 7 7 9 9 12 12 13 13 15 7.附,預(yù)覽版文檔中關(guān)于當(dāng)前流程模型不 16 20 20 21 24 25 26 29 29 31 34 34 34 34 35 36 36 38 47 56 56 61 63 63 64 64 67 73 74 76 78 79 79 79 83 86 90 92 93 95 104 104 105 108 108I.第一部分概述c.沒有好的設(shè)計器,應(yīng)用比較困難我從來不認(rèn)為工作流可以“自定義”,所以FireWorkflow是面向開發(fā)人員的。Firea.流程設(shè)計器。FireWorkflow用于幫助開發(fā)人員解b.工作流引擎。FireWorkflow引擎設(shè)計充分考慮擴展22.FireWorkflow的構(gòu)成模型部分規(guī)定了流程定義文件的各種元素及其相互關(guān)系,例如流程(Workflo),3II.第二部分FireWorkflow工作流模型1.當(dāng)前工作各種流模型的缺點XPDL:該規(guī)范歷史較為悠久,模型中規(guī)定了諸多指導(dǎo)計算機個建立在xpdl上的流程引擎極端困難。xpdl模型長期未能取得突破,2.FireWorkflow模型的設(shè)計思想業(yè)務(wù)邏輯是指某個具體的業(yè)務(wù)操作,例如填寫一張表單,調(diào)用一個WebService服務(wù),4SSSS5SSSSActivity代表業(yè)務(wù)活動,完全不關(guān)心工作流如何分支、匯聚等工作,所公司經(jīng)days<=3公司經(jīng)days<=3days<=3公司經(jīng)63.FireWorkflow模型的構(gòu)成元素3.1.WorkflowProcess模型在本人看來,可以將一個系統(tǒng)分成業(yè)務(wù)子系統(tǒng)和工作流子系統(tǒng)。7兩類特殊的Synchronizer;工作流邏輯中的邊分為兩種類型,一種是轉(zhuǎn)在工作流邏輯中,Activity節(jié)點代表業(yè)務(wù)活動,工作流引擎通過Activit3.2.WorkflowProcess與資源的關(guān)系在FireWorkflow中,Workflow與外部資源是分開存儲的,外部資源是指被調(diào)用的4.FireWorkflow模型各個元素的約束895.FireWorkflow模型的執(zhí)行機理5.1.Fireworkflow相關(guān)數(shù)學(xué)定義有的有向邊的集合。K是P的容量的集合。所謂容量,就是這個同步器能夠容工作流邏輯網(wǎng)的初始狀M0:對于起始節(jié)點p有M0(p)5.2.Fireworkflow工作流邏輯運行的規(guī)則5.3.基于Fireworkflow工作流網(wǎng)的業(yè)務(wù)邏輯的執(zhí)行規(guī)則tt6.FireWorkflow模型各種元素的詳細(xì)屬性6.1.所有流程元素通用屬性6.2.WorkflowProcess的屬性一個實現(xiàn)了ITaskInstanceRunner接口一個實現(xiàn)了ITaskInstanceRunner接口一個實現(xiàn)了ITaskInstanceRunner接口一個實現(xiàn)了ITaskInstanceCom一個實現(xiàn)了ITaskInstanceCom一個實現(xiàn)了ITaskInstanceCom6.3.StartNode、Synchronizer、EndNode屬性6.4.Activity屬性6.5.Transition的屬性6.6.Loop的屬性6.7.Task的公共屬性如果Task定義了該屬性,則它具有最高優(yōu)先級,覆蓋BasicTaskInstanceManager中的缺省實現(xiàn)。一般一個實現(xiàn)了ITaskInstanceRunner接口的類,負(fù)責(zé)該T如果Task定義了該屬性,則它具有最高優(yōu)先級,覆蓋如果Task定義了該屬性,則它具有最高優(yōu)先級,覆蓋6.8.SubflowTask的屬性6.9.ToolTask的屬性6.10.FormTask的屬性ANY表示任何一個操作員完成該其工作項則任務(wù)實例可7.附,預(yù)覽版文檔中關(guān)于當(dāng)前流程模型不足之處的描述——從流程建模說起UML活動圖從業(yè)務(wù)層次精確描述了這個案例,但是,這種建模一般只用在需求分析階段。因為現(xiàn)在還沒有一個引擎可以去執(zhí)行它,雖然他也可以轉(zhuǎn)換為xml文件。因此,活動義文件(xpdl1.0格式)是從代碼執(zhí)行的角度描述業(yè)然而,WFMC定義的工作流建模語言,以及其他和多工作流建模語言從我的經(jīng)驗看,xpdl還缺乏邏輯嚴(yán)密的語義,在稍微復(fù)雜一動圖沒有什么本質(zhì)區(qū)別,都是很籠統(tǒng)的一個業(yè)務(wù)流程而已,只是xml文件的DTD有點不我個人認(rèn)為,正是這種在兩個子系統(tǒng)之間的職責(zé)的模糊與混亂導(dǎo)致工作流引擎無法進(jìn)我們沒有考慮審批不通過的情況,現(xiàn)在把這種情況III.第三部分Engine的設(shè)計及其擴展我們常常在投標(biāo)書或者需求說明書里面吹噓說:XYZ系統(tǒng)說的多了也就變成了說說而已,很少人再往深層次追問一下:XYZ系統(tǒng)如何做到“可擴展1.1.合理的職責(zé)劃分工作流引擎的“本職工作”就是按照流程定義的流轉(zhuǎn)邏輯驅(qū)動流程實例一個環(huán)節(jié)一個1.2.足夠的擴展性FireWorkflow將引擎本身的職責(zé)劃分成上節(jié)所述的7個部分,正是這種思路。上述71.3.方便集成到業(yè)務(wù)系統(tǒng)中2.1.Engine總體結(jié)構(gòu)你可以將IWorkflowSession類比Jdbc中的connection。通過Connection那么在系統(tǒng)中如何取得IWorkflowSession對象呢?Fireworkflow缺省情況下是通過RuntimeContextrtCtx=mySpringBeanFactoryGetanduseworkflowsessionobjectYourBizDatabase(includeFireWorkflowtables)cdGetanduseworkflowsessionobjectYourBizDatabase(includeFireWorkflowtables)YourBizSystemEngineAPI?interface?IConditionResolver?interface?ITaskInstanceManager+IProcessInstance+ITaskInstance?interface?IPersistenceService?interface?IDefinitionService?interface?ICalendarServiceKenelManagerKenel+IActivityInstance+INetInstance+INodeInstance+ISynchronizerInstance+ITransitionInstanceFireWorkflowEngineEngineAPI?interface?IConditionResolver?interface?ITaskInstanceManager+IProcessInstance+ITaskInstance?interface?IPersistenceService?interface?IDefinitionService?interface?ICalendarServiceKenelManagerKenel+IActivityInstance+INetInstance+INodeInstance+ISynchronizerInstance+ITransitionInstance?interface?IWorkflowSessionorgorg.fireflow.engine.RuntimeContext內(nèi)核管理器的職責(zé)是根據(jù)流程定義文件創(chuàng)建和維護(hù)工作流邏輯網(wǎng)實例INetInstance。IPersistenceService存儲服務(wù)。FireWorkflow缺省情況下使用hibernate進(jìn)行數(shù)據(jù)庫存取。如果你的系統(tǒng)不org.fireflow.engine.definition.DefinitionService4FileSystem。該實現(xiàn)類從文件系統(tǒng)中獲得流程BeanFactory3.EngineAPI對象?interface?ITaskInstance?interface?IWorkItem10?interface?ITaskInstance?interface?IWorkItem10..1?interface?IProcessInstance3.1.IProcessInstancenewProcessInstance()newProcessInstance()IProcessInstance.run()IProcessInstanceIProcessInstance.abort()例開始運行,并進(jìn)入Running狀態(tài)。在活動狀態(tài)的下,調(diào)用IProcessInstance.abort()進(jìn)入運行結(jié)束后自動進(jìn)入的,判斷流程實例結(jié)束的標(biāo)準(zhǔn)是當(dāng)前已IProcessInstanceprocInst=workflowSession.createProcessInstance(ProcessName,creatorName);通過調(diào)用流程實例的run()方法進(jìn)入運行狀態(tài),流程實例根據(jù)流3.2.ITaskInstance然后運行這些新創(chuàng)建的TaskInstance,最后結(jié)束TaskInstance。TaskInstance存儲在IProcessInstanceIProcessInstance.abort()complete()方法時,會觸發(fā)TaskInstancCompleted狀態(tài)。在對應(yīng)的流程實例上調(diào)用IProcessInstance.abort(),會使該實例的所有3.3.WorkItemloopTowithdraw調(diào)用completeWorkItem()方法,使之進(jìn)入Completed狀態(tài)。在對應(yīng)的流程實例上調(diào)用4.WorkflowSession4.1.WorkflowSession的作用WorkflowSession的作用有兩點,首先它作為獲取工作流API對象(ProcessInstance、IWorkflowSessionworkflowSession=runtimeContext.getWorkflowSession();//指定Task2的操作者為ActorBDynamicAssignmentHandlerdynamicAssignmentHandler=newDynamicAssignmentHandler();ListactorIdsList=newArrayList();actorIdsList.add("ActorB");dynamicAssignmentHandler.setActorIdsList(actorIdsList);workflowSession.setDynamicAssigmentHandler((dynamicAssignmentHandler);//設(shè)置x的值workflowSession.setAttribute("x",theValueOfX);//結(jié)束ActorA在Task1的工作項workflowSession.setAttribute("assgiment4Task2",dynamicAssignmentHandler);DynamicAssignmentHandlerdynamicHandler=dynamicHandler.assign(workflowSession,processInstanasignable,performer}Objectx=workflowSession.getAttribute("x");}夠在事件監(jiān)聽器等擴展代碼中重新通過runtimeContext.getWorkflowSession()獲得新的4.2.WorkflowSession是非線成安全的4.3.WorkflowSession會保存在API對象中IWorkflowSessionworkflowSession_2=runtimeContext.getWorkflowSession();workflowSession_2.setAttribute("x",theValueOfX);IWorkItemtheWorkItem=(IWorkItem)httpSession.getAttribute("theWorkItem");theWorkIplete();在這種情況下,theWorkIplete()后觸發(fā)的流程運算中,所使用的“當(dāng)前IWorkflowSessionworkflowSession_2=runtimeContext.getWorkflowSession();workflowSession_2.setAttribute("x",theValueOfX);IWorkItemtheWorkItem=httpSession.getAttribute("theWorkItem");theWorkIplete();5.TaskInstanceManager6.BeanFactoryService戶管理系統(tǒng)的集成為例,假設(shè)某Task的AssignmentHandler類名為org.fireflow.example.7.PersistenceServicePersistenceService統(tǒng)一負(fù)責(zé)引擎運行過程中各種實例對象的存取工作,其地位相當(dāng)于DAO,如下圖。PersistenceService的缺省實現(xiàn)采用的是Hibernate該類也擴展自org.springframework.orm.hibernaternateImplrnateImpl8.CalendarService9.DefinitionService1)存儲在表T_FF_DF_WORKF2)直接存儲在文件系統(tǒng)中。這種存儲方式,流程定義文件沒有版本控制,但是比較簡兩種流程定義服務(wù)通過配置spring文件FireflowContext10.ConditionResolver缺省實現(xiàn)采用Appachecommons的JavaExpre/jexl/reference/syntax.htm11.Engine各種擴展11.1.RuntimeContextFactoryRuntimeContext作為引擎的總?cè)肟冢瑪[在我們面前的首要問題是:業(yè)務(wù)代碼如何獲得11.2.數(shù)據(jù)持久化服務(wù)11.4.任務(wù)實例管理器11.5.流程定義服務(wù)IV.第四部分FireWorkflow應(yīng)用1.通過流程設(shè)計器和模擬器快速了解FireWorkflow1.1.設(shè)計器的安裝4、安裝完畢后,重新啟動netbeans,可以在已安裝的插件列表中看到Fireflow插件。1.2.設(shè)計器各部分介紹FireWorkflow設(shè)計器是一個多頁面編輯器,包含了設(shè)計器頁面、Tool類型的任務(wù)用于調(diào)用java程序。上方的工具欄,2、圖形化的流程執(zhí)行進(jìn)程視圖(Processinstancestateviewer3、模擬數(shù)據(jù)視圖,如果該視圖沒有打開,則通過“window-->showview-->other...-->Fireworkflow--TaskInstances:展示當(dāng)前的任務(wù)實例信息,該表格展示的信息正是任務(wù)實例表ProcessInstances:展示當(dāng)前的流程實例信息,該表格展示的信息正是流程實例表完成當(dāng)前工作項,并且按照預(yù)定義的流程邏輯啟動下一個環(huán)設(shè)置當(dāng)前流程實例的流程變量。在Fireworkflow中,流程變1.2.3.Xml源代碼界面1.3.設(shè)計一個最簡單的請假流程首先需要創(chuàng)建一個新的流程定義文件。從File->New->Other...打開對話框,在“Fire統(tǒng)默認(rèn)將“LeaveApplicationProcess”作為新流程的流程名稱。系統(tǒng)為新創(chuàng)建的流程定義文.創(chuàng)建Activity以及Task根據(jù)的業(yè)務(wù)場景,我們首先增加“申請”環(huán)節(jié)。在流程設(shè)計器工具欄上選擇,然后在設(shè)計界面點擊鼠標(biāo)左鍵。流程中新增了一個名稱為“Activity1”的環(huán)節(jié),同時里面自動增加了一個名稱為Task1的Form類型的任務(wù)。如下圖iv-1.3.3.定義performerorg.fireflow.engine.taskinstance.IAssignmentHandlerorg.fireflow.example.lea操作者屬性設(shè)置完成后,界面如下對于FormTask,一般需要和一個業(yè)務(wù)表單相關(guān)聯(lián)。FireViewForm:填寫只讀表單的URL等信息,F(xiàn)ireworkflowE請假申請流程的表單定義信息如下圖iv-在工具欄上點擊創(chuàng)建一個附帶ToolTask.定義ToolTask所調(diào)用的后臺程序1.4.模擬流程的執(zhí)行//獲得WorkflowSession對象IWorkflowSessionfireflowSession=ctx.getWorkflowSession();//根據(jù)流程名稱創(chuàng)建流程實例IProcessInstanceprocessInstance=fireflowSession.createProcessInstance(workflowProcess.getName(),currentUserName);//調(diào)用流程實例的run()方法啟動流程實例,processInstance.run();IWorkflowSessionworkflowSession=ctx.getWorkflowSession();IWorkItemclaimedWorkItem=workflowSession.claimWorkItem();IProcessInstance.setProcessInstanceVariable(Stringname,Objectvar);在上圖中,設(shè)置下一個環(huán)節(jié)的工作項的操作者是“zhangsan”,即送到下一環(huán)節(jié)送到調(diào)用其AssignmentHandler獲得的。當(dāng)然也可//創(chuàng)建動態(tài)AssignmentHandlerDynamicAssignmentHandlerhandler=newDynamicAssignmentHandler();//將要指定的Actor的Id設(shè)置到動態(tài)AssignmentHandler中handler.setActorIdsList(actorIdsList);handler.setNeedClaim//將動態(tài)AssignmentHandler保存到當(dāng)前session中workflowSession.setDynamicAssignmentHandler(handler);//結(jié)束當(dāng)前工作項currentWorkIplete();使用這個動態(tài)AssignmentHandler。所以指定后續(xù)環(huán)節(jié)的操作人一般只能用于順序流轉(zhuǎn)的情和簽收工作項一樣,在此崗位,不能夠點擊結(jié)束工作項,而要點擊下來菜單中的的AssignmentHandler來決定其操作者。在模擬器中,所有的TaskInstance的操作者都是Fireflow_Simulator。1.5.設(shè)計一個更復(fù)雜的請假流程2.業(yè)務(wù)代碼如何調(diào)用FireWorkflowAPI實現(xiàn)流轉(zhuǎn)該實例,/針對上一章節(jié)的請假流程,我們編寫一個簡單的java類LeaveApplicationTester.java,2.1.往javaproject中加入FireWorkflow支持如果不考慮流程設(shè)計器,那么FireWorkflow和包而已。唯一的區(qū)別是,F(xiàn)ireWorkflow還附帶了幾張表,用于記錄流程這是缺省的組裝方式,實際上你也可以寫一個Hibernate相關(guān)的jar包將StartNodeInstance,ActivityInstance,SynchronizerITransitionInstance,LoopInstance等當(dāng)作內(nèi)核的對象,內(nèi)核的對象是所有流程實例共享的無T_FF_DF_WorkflowDef2.2.配置FireWorkflowApplicationHandler等等,這個配置文件一般命名FireflowContext.xml的默認(rèn)配置需要有兩處地方需要根據(jù)實際情況稍作修改。一處是2.3.編寫并運行LeaveApplicationTester.java流程實例的運行調(diào)用processInstance.run()方法,該方法會使得實例從開始節(jié)點往下執(zhí)行。當(dāng)遇到FormTask時,會創(chuàng)建相應(yīng)的WorkIt在的流程分支處于等待狀態(tài);當(dāng)遇到ToolTask時,F(xiàn)ireWorkflow引擎自動調(diào)用其ApplicationHandler,調(diào)用返回后,流程實例繼續(xù)往下執(zhí)行;當(dāng)遇到SubflowTask時,作員結(jié)束他的工作項,即業(yè)務(wù)代碼調(diào)用IWorkIplete()。相關(guān)的操作代碼請參閱testClaimAndCompleteSubmitApplication()和testClaimAnLeaveApplicationTester代碼已經(jīng)寫好了,你可以直接運行,運行之前別忘了用dbscript2.4.AssignmentHandler和ApplicationHandler在請假流程中,申請環(huán)節(jié)和部門經(jīng)理審批環(huán)節(jié)的Task都通過Performer來指beanfactory.xml。如下圖3.將FireWorkflow嵌入你的J2EE系統(tǒng)中(1)例,/svn/3.1.J2EE系統(tǒng)中常見的流程操作在上一章中,我們講解了怎樣調(diào)用Fireworkflow的API驅(qū)動流程實例流轉(zhuǎn)。在LeaveApplicationProcessTesJ2EE系統(tǒng)中流程實例的操作和一個帶main函數(shù)java類是不一樣J2EE系統(tǒng)中的流程實例是多個參與者共同操作驅(qū)動其往下執(zhí)行的。下面我3.1.1.首個環(huán)節(jié)的參與者的流程操作特點業(yè)務(wù)系統(tǒng)自動完成的無1、創(chuàng)建流程實例,并啟動3、自動簽收并完成相關(guān)的3.1.2.后續(xù)環(huán)節(jié)的參與者的流程操作特點動完成的流程操存無3.2.將Fireworkflow嵌入J2EE系統(tǒng)的詳細(xì)步驟3.3.第J2EE系統(tǒng)中常見的流程操作的實現(xiàn)怎么往下流轉(zhuǎn)呢?這個代碼在CurrentUserAssignmentHandler.java),面分別存放了這個業(yè)務(wù)相關(guān)的編輯界面、只讀界面4.將FireWorkflow嵌入你的J2EE系統(tǒng)中(2)該實例,/ProcessInstance對象均沒有保存業(yè)務(wù)信息。與業(yè)4.1.工作流數(shù)據(jù)VS業(yè)務(wù)數(shù)據(jù)FireWorkflow首先支持將業(yè)務(wù)特征數(shù)據(jù)作為流程變量的存儲方式那么這個“復(fù)制”得到的橫向表如何存儲呢?F),T_FF_RT_TaskInstance和T_Biz_MyTaskInstance進(jìn)行查詢即可。而且這兩個表的數(shù)據(jù)是14.2.如何填充TaskInstance擴展表的數(shù)據(jù)workflowextension.LeaveApplicationTaskInstanceExt僅僅擴展org.fireflow.engine.impl.TaskInstance還是沒有解決問題,還需要定制一個那么LeaveApplicationTaskInstanceCreator注冊在哪里才能讓工作流引擎正確引用到beanfactory.xml中定義這個Bean。如下圖,從這個spring配置中我們可以看到,將4.3.請假流程實例的擴展以及效果LeaveApplicationProcessEx項目在LeaveApplicationProcess項目的基礎(chǔ)上增加了擴展((LeaveApplicationTa在這個Project中待辦工作項列表表現(xiàn)如5.工作流應(yīng)用中經(jīng)典問題的解決方案5.1.流程定義文件的存儲與版本控制況,下修改Xml配置文件和配置數(shù)據(jù)下比修改ja因此,在我看來java文件也好,xml配置文件也好.,配置數(shù)據(jù)也好都是系統(tǒng)的代碼。5.1.2.FireWorkflow流程定義文件的存儲與版本控制流程常常需要調(diào)整;在流程定義更新后,系統(tǒng)中FireWorkflow流程定義文件還可以存儲在后臺數(shù)據(jù)庫表T_FF_DF_WORKFLOWDEF中。該表可以記錄同名流程的各個版本。FireWorkflow要求每個流5.2.業(yè)務(wù)數(shù)據(jù)vs工作流數(shù)據(jù)5.3.流程數(shù)據(jù)存取設(shè)計與事務(wù)一致性IPersistenceSerivce的實現(xiàn)類完成的,假設(shè)這個實現(xiàn)類的名字是MyPersistence調(diào)調(diào)業(yè)務(wù)邏輯javabean1如果你的系統(tǒng)采用的是申明式事務(wù),將事務(wù)申明添加到MyPersistanc現(xiàn)類org.fireflow.engine.persistence.hib5.4.與用戶管理系統(tǒng)的接口據(jù)角色名稱返回該角色的所有成員,然后把這些成員的ID列表5.5.與業(yè)務(wù)表單的接口),可編輯的表單信息,在此填入相關(guān)的url可以用于鏈接可以參考o(jì)rg.fireflow.example5.6.工作項簽收與業(yè)務(wù)實際中的材料移交在FireWorkflow中,工作項簽收的意義首先是對工作任務(wù)的“認(rèn)領(lǐng)”。因為在FireFireWorkflow也可以用編碼的方式設(shè)置工作項不需要簽收,參見接口IAssignable.5.7.流程“自定義”與“自調(diào)整”但是,最終用戶在某種程度上調(diào)整業(yè)已存在的流程是一個真實的需求。FireWorkflow5.8.工作流系統(tǒng)的性能問題在MIS系統(tǒng)中,多執(zhí)行一條不必要的語句對性能都有影響!因為MI因此FireWorkflow盡量減少數(shù)據(jù)庫IO。首先,F(xiàn)ireWork結(jié)束工作項并啟動下一6.各種工作流模式的實現(xiàn)載到該項目,/svn/6.1.概述6.2.順序、分支、匯聚6.2.1.順序分支匯聚其實是統(tǒng)一的MyFirstProcess.xml,模擬了一個最簡單的6.2.4.分支選擇業(yè)務(wù)流程舉例在文檔《2_通過設(shè)計器和模擬器快速了解FireWorkflow》中,設(shè)計了流程定義文件是:LeaveApplicatonProcess_com6.3.子流程圖SS在FireWorkflow中,跳轉(zhuǎn)操作還不能在設(shè)計器中通過圖形表達(dá),只能調(diào)用接口IWorkItem.jumpTo(StringTaskInstance和ActivityInstance,然后啟繼節(jié)點構(gòu)成的集合,則稱activity1和activity2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高考地理一輪復(fù)習(xí)第四章地球上的水及其運動第四節(jié)海-氣相互作用課件
- 吉林省德惠市第七中學(xué)七年級地理上冊 第一章 地球和地圖綜合教案 (新版)新人教版
- 二年級品德與生活上冊 3.3 做個快樂鳥3教學(xué)設(shè)計 新人教版
- 2024-2025學(xué)年高中政治上學(xué)期第4周《文化的繼承性與文化發(fā)展》教學(xué)設(shè)計
- 元稹-《菊花》課件
- 裝修甲醛合同(2篇)
- 2020-2024年上海市春考語文真題試卷匯編含答案
- 西南林業(yè)大學(xué)《地理學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 裝在套子里的人 (公開課獲獎?wù)n件)
- 拋物線中的三角形面積
- 荒漠區(qū)生態(tài)治理(麥草沙障、植物固沙)施工方案
- 2019年11月系統(tǒng)集成項目管理工程師真題
- 圓錐曲線的光學(xué)性質(zhì)及其應(yīng)用-(3)-PPT課件
- 三年級上冊語文期中質(zhì)量分析
- 滾珠絲杠基礎(chǔ)知識ppt課件
- (完整版)鋼結(jié)構(gòu)質(zhì)量通病及防治措施
- (高清正版)JJG 342-2014 凝膠色譜儀
- 潛孔鉆安全的操作規(guī)程
- 新生兒聽力篩查PPT幻燈片課件
- 招投標(biāo)業(yè)務(wù)工作失誤檢討書
- 網(wǎng)吧公司章程范本
評論
0/150
提交評論