使用silverlight構(gòu)建一個工作流設(shè)計器(三)(附最新源代碼下載及在線演示)
求助:未找到在silverlight中動態(tài)生成一個文件下載,和從用戶本地的系統(tǒng)中提取文件的方法,還請熟悉這方面的朋友指點一下怎么做?
最新源代碼下載:http://www.shareidea.net/opensource.htm
最新版本在線演示:http://www.shareidea.net/workflow.htm
技術(shù)支持QQ群:85444465
本文系列索引:
使用silverlight構(gòu)建一個工作流設(shè)計器(一)
使用silverlight構(gòu)建一個工作流設(shè)計器(二)
使用silverlight構(gòu)建一個工作流設(shè)計器(三)
使用silverlight構(gòu)建一個工作流設(shè)計器(四)
使用silverlight構(gòu)建一個工作流設(shè)計器(五)
使用silverlight構(gòu)建一個工作流設(shè)計器(六)
使用silverlight構(gòu)建一個工作流設(shè)計器(七)
使用silverlight構(gòu)建一個工作流設(shè)計器(八)
使用silverlight構(gòu)建一個工作流設(shè)計器(九)
使用silverlight構(gòu)建一個工作流設(shè)計器(十)
使用silverlight構(gòu)建一個工作流設(shè)計器(十一)
新功能調(diào)查:系統(tǒng)到這里已經(jīng)具備一個設(shè)計器的雛形了,當(dāng)然還有很多需要完善的功能,如果您在這方面有經(jīng)驗,請?zhí)岢瞿膶氋F意見,也可以留下您想要實現(xiàn)的功能,在后續(xù)版本中,我們將考慮您的意見,非常感謝:)
本文繼續(xù)前文的內(nèi)容,主要講述與導(dǎo)入xml,導(dǎo)出xml,xml存儲有關(guān)的一些內(nèi)容。包含以下部分:
l 設(shè)計一個流程圖的xml描述文件
l 將流程圖導(dǎo)出為xml
l 根據(jù)xml文件呈現(xiàn)流程圖
在完成以上內(nèi)容后,進(jìn)一步深入思考,既然可以將流程的當(dāng)前狀態(tài)保存為xml,那么在每次流程改變的時候?qū)?dāng)前狀態(tài)保存到內(nèi)存中,在需要的時候再從內(nèi)存中還原,就可以實現(xiàn)word里面的 撤銷 與 前進(jìn) 的功能了,所以功能就加多了兩個。
l 撤銷
l 前進(jìn)
在進(jìn)一步,如果將內(nèi)存保存的xml對象集合按照一定的頻率自動播放,是不是就是一個動畫了,呵呵,我們可以用這個來做一個簡單的動畫片了。
四、xml存取
4.1 xml內(nèi)容
就是將流程圖保存為xml文件,以及根據(jù)xml文件還原流程圖的功能。首先來看一下xml文件的格式。Xml文件用來描述流程的,在本文中,流程的布局信息主要有幾個方面:
l 流程的屬性信息。例如流程名稱等
l 活動和規(guī)則的屬性信息,例如活動名稱等
l 活動和規(guī)則的位置信息
l 活動和規(guī)則的關(guān)聯(lián)信息
我們設(shè)計出一個可以完全描述上面內(nèi)容的xml文件即可,下面給出這個xml描述的一個實現(xiàn)。
上面的內(nèi)容不用多講了,大家看名字應(yīng)該可以猜的出來。
我們還可以使用xsd.exe工具(.netframework sdk里面帶有)生成對應(yīng)的workflow.xsd文件,在根據(jù).xsd文件生成Class,這個class就是操作這個xml文件的,.net真是太方便了。(這里就先不這么做了,而直接使用LINQ To Xml來操作上面的xml文件)
如果您不了解xml相關(guān)的一些技術(shù),可以參考
http://www.w3schools.com/xml/default.asp或者http://www.w3school.com.cn/(中文版)
4.2 導(dǎo)入、導(dǎo)出
有幾個生成xml的方法。一個是將流程對象序列化,使用對象序列化的方法。另一個是讓對象自己生成xml片段,這里采用第二種方法。首先為了導(dǎo)入導(dǎo)出xml,容器、活動、規(guī)則、類需要增加兩個方法。
l ToXmlString()
l LoadFromXmlString(string xmlNode)
第一個用于生成表達(dá)本對象的xml片段,第二個用戶根據(jù)xml片段來生成相應(yīng)的對象。使用這兩個方法就可以將流程當(dāng)前狀態(tài)轉(zhuǎn)化為xml存儲了。具體實現(xiàn)大家看源代碼即可。未找到在silverlight中動態(tài)生成一個文件下載,和從用戶本地的系統(tǒng)中提取文件的方法,生成xml的文件存放在一個TextBox中,拷貝就可以。
4.3 撤銷及前進(jìn)
有了上面的生成xml及載入xml的基礎(chǔ),就可以設(shè)計出一個支持撤銷和前進(jìn)功能的應(yīng)用了。有c/s編程經(jīng)驗的朋友對此一定不陌生,搞b/s開發(fā)的可能不太熟悉,這里簡單實現(xiàn),并說明一下思路。
在內(nèi)存中定一個兩個堆棧(Stack),一個保存用于撤銷的xml集合,一個保存用于前進(jìn)的xml集合。當(dāng)出現(xiàn)下面的情況是,將流程當(dāng)前狀態(tài)的xml描述進(jìn)入出棧和入棧的動作。
l 用戶進(jìn)行流程修改的時候,將修改后的xml描述壓入(Push) 撤銷堆棧,并清空 前進(jìn)堆棧。
l 當(dāng)用戶點擊 撤銷 按鈕時,從撤銷堆棧 彈出(pop)一個xml,使用這個xml來還原流程圖,同時將這個xml壓入 前進(jìn)堆棧。
l 當(dāng)用戶點擊 前進(jìn) 按鈕時,從前進(jìn)堆棧 彈出(pop)一個xml,使用這個xml來還原流程圖,同時將這個xml壓入 撤銷堆棧。
也就是說兩個堆棧協(xié)同工作,就可以完成撤銷、前進(jìn)的功能了。
另外撤銷前進(jìn)功能的xml存儲也可以有兩種方式,一種是增量存儲,也就是只存儲改變的部分,另一種的完全存儲,也就是存儲當(dāng)前整個流程圖的xml。對于第一種比較麻煩,對于第二種方式,系統(tǒng)中的函數(shù)已經(jīng)支持,所以采用第二種方式,就是比第一種方式存儲的xml長度大了一點。
本章的內(nèi)容就結(jié)束了,請留下您的寶貴意見!后文再續(xù)!
========================================================
比sharepoint更強大的表單功能,圖形化的流程設(shè)計,與asp.net完美結(jié)合,支持vs.net編程擴(kuò)展
========================================================
浙公網(wǎng)安備 33010602011771號