sharepoint高效率工作流開(kāi)發(fā)_第1頁(yè)
sharepoint高效率工作流開(kāi)發(fā)_第2頁(yè)
sharepoint高效率工作流開(kāi)發(fā)_第3頁(yè)
sharepoint高效率工作流開(kāi)發(fā)_第4頁(yè)
sharepoint高效率工作流開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩79頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 本章主要闡述SharePoint Designer 2007(SPD)的工作流應(yīng)用與利用WF對(duì)SharePoint Designer工作流組件(動(dòng)作和條件)進(jìn)行擴(kuò)展,講解利用WF和Visual Studio 2008開(kāi)發(fā)工作流模板的方法。本章提供視頻教程:采用SPD設(shè)計(jì)工作流的默認(rèn)方式和定制后的方式。本章包括:n       工作流開(kāi)發(fā)概述n       采用SharePoint Designer設(shè)計(jì)工作流n     

2、60; SharePoint Designer工作流的擴(kuò)展n       采用Visual Studio 2008 開(kāi)發(fā)工作流模板7.1  工作流開(kāi)發(fā)概述SharePoint基于WF(Window Workflow Foundation)構(gòu)建了它的工作流功能。WF是SharePoint工作流框架的基礎(chǔ),要深入了解SharePoint工作流的開(kāi)發(fā),首先應(yīng)該了解WF的一些基礎(chǔ)知識(shí),本章對(duì)WF的技術(shù)細(xì)節(jié)并不會(huì)過(guò)多講解。本節(jié)將講述SharePoint工作流的基礎(chǔ)知識(shí),并介紹系統(tǒng)自帶的工作流模板的使用和默認(rèn)的工作流任務(wù)操作方式。7.1

3、.1  工作流開(kāi)發(fā)環(huán)境的搭建如果使用Visual Studio 2005開(kāi)發(fā)SharePoint工作流應(yīng)用,首先需要安裝Visual Studio 2005的WF擴(kuò)展Visual Studio 2005 Extensions for Windows Workflow Foundation ,可以在以下地址下載:.microsoft./downloads/details.aspx?familyid= 5D61409E-1FA3-48CF- 8023-E8F38E709BA6&displaylang=zh-cn。然后安裝Office SharePoint Server 2007

4、SDK。采用Visual Studio 2005開(kāi)發(fā)SharePoint工作流,無(wú)論是開(kāi)發(fā)環(huán)境的搭建還是開(kāi)發(fā)時(shí)調(diào)試和測(cè)試,都比較煩瑣。Visual Studio 2008已經(jīng)發(fā)布正式版了,VS 2008提供了對(duì)SharePoint工作流開(kāi)發(fā)更好的支持,直接集成了開(kāi)發(fā)、部署和調(diào)試。本章的示例將采用VS 2008來(lái)進(jìn)行。為了便于調(diào)試和測(cè)試工作流,選擇直接在SharePoint服務(wù)器環(huán)境下開(kāi)發(fā),因此VS 2008要直接安裝在SharePoint服務(wù)器上。7.1.2  SharePoint工作流的基本概念SharePoint工作流是一個(gè)預(yù)先定義好的對(duì)列表項(xiàng)或文檔庫(kù)文檔的處理流程。一個(gè)工作流實(shí)

5、例跟一個(gè)列表項(xiàng)或文檔進(jìn)行關(guān)聯(lián),工作流實(shí)例不能脫離列表項(xiàng)存在。當(dāng)需要用戶(hù)處理數(shù)據(jù)的時(shí)候,比如進(jìn)行審批操作,系統(tǒng)會(huì)創(chuàng)建一個(gè)任務(wù)到某個(gè)任務(wù)列表中,審批用戶(hù)操作列表中的任務(wù)來(lái)實(shí)現(xiàn)跟流程實(shí)例的交互。工作流實(shí)例可以在列表新建、修改時(shí)自動(dòng)啟動(dòng),或者可以由用戶(hù)手動(dòng)啟動(dòng)。MOSS支持兩種工作流的開(kāi)發(fā)方式。l         利用SharePoint Designer可以設(shè)計(jì)簡(jiǎn)單的無(wú)代碼順序工作流。在SharePoint Designer中,可以直接創(chuàng)建跟某個(gè)列表或文檔庫(kù)關(guān)聯(lián)的工作流,在工作流中,可以直接訪問(wèn)列表項(xiàng)的字段,獲取字段的值

6、作邏輯判斷或者給字段賦值,給用戶(hù)分配審批任務(wù)并動(dòng)態(tài)生成審批界面。SharePoint Designer設(shè)計(jì)的工作流只能跟一個(gè)列表(或文檔庫(kù))關(guān)聯(lián),單個(gè)工作流無(wú)法用于多個(gè)列表,不同列表(或文檔庫(kù))的工作流處理邏輯即使一樣,也只能分別進(jìn)行設(shè)計(jì)。采用SharePoint Designer設(shè)計(jì)工作流的優(yōu)點(diǎn)是操作簡(jiǎn)單,無(wú)須編譯和部署,缺點(diǎn)是只能實(shí)現(xiàn)順序操作邏輯,無(wú)法實(shí)現(xiàn)退回等循環(huán)邏輯,審批界面自動(dòng)生成,也無(wú)法實(shí)現(xiàn)一些復(fù)雜的操作。7.2節(jié)將演示采用SharePoint Designer設(shè)計(jì)工作流的步驟。l         利用

7、Visual Studio可以開(kāi)發(fā)復(fù)雜的順序或狀態(tài)機(jī)工作流。在Visual Studio 2008中,可以直接在WF設(shè)計(jì)器中開(kāi)發(fā)工作流,工作流開(kāi)發(fā)好后,編譯成DLL,然后采用Feature部署到SharePoint服務(wù)器,在中將Feature激活后,工作流即可使用了,可以把這種工作流關(guān)聯(lián)到多個(gè)列表。所以又稱(chēng)Visual Studio 2008設(shè)計(jì)的工作流為工作流模板。Visual Studio 2008開(kāi)發(fā)工作流的優(yōu)點(diǎn)是能實(shí)現(xiàn)很復(fù)雜的流程邏輯,開(kāi)發(fā)出來(lái)的工作流模板可以供多個(gè)、多個(gè)列表使用。流程任務(wù)的操作界面可以采用infopath或者直接采用aspx頁(yè)面,這樣就可以實(shí)現(xiàn)較復(fù)雜的頁(yè)面操作。缺點(diǎn)就

8、是開(kāi)發(fā)部署比較復(fù)雜,對(duì)開(kāi)發(fā)人員要求較高。7.1.3  SharePoint工作流的操作方式SharePoint的工作流的默認(rèn)操作方式并不適合用戶(hù)的操作習(xí)慣,一般來(lái)說(shuō)其他工作流產(chǎn)品的操作方式是用戶(hù)在一個(gè)頁(yè)面上完成所有操作,包括查看業(yè)務(wù)數(shù)據(jù)(被審批數(shù)據(jù))、填寫(xiě)審批意見(jiàn)等。而SharePoint工作流的操作方式是:業(yè)務(wù)數(shù)據(jù)跟審批數(shù)據(jù)分離,業(yè)務(wù)數(shù)據(jù)可以用列表項(xiàng)或文檔庫(kù)中的文檔來(lái)表示,用戶(hù)審批的時(shí)候默認(rèn)只看到審批頁(yè)面,只有單擊才能查看業(yè)務(wù)數(shù)據(jù),這種操作方式對(duì)文檔審批還是說(shuō)的過(guò)去的,但是對(duì)列表數(shù)據(jù)的審批操作就有點(diǎn)“不夠人性化”了。在實(shí)際的項(xiàng)目中,需要對(duì)用戶(hù)的操作習(xí)慣進(jìn)行引導(dǎo)。SharePoint

9、默認(rèn)提供了很多工作流模板,這些工作流模板跟采用VS 2008開(kāi)發(fā)的工作流模板操作上是一樣的。下面看一下系統(tǒng)自帶的“審批”工作流模板的使用。要在SharePoint中使用一個(gè)工作流模板,首先需要將工作流模板跟文檔庫(kù)或列表關(guān)聯(lián),操作步驟如下。Step1  在文檔庫(kù)的設(shè)置頁(yè)面單擊“工作流設(shè)置”,如圖7-1所示。圖7-1  工作流設(shè)置Step2  在添加工作流頁(yè)面中,選擇工作流模板為“審批”,輸入工作流名稱(chēng)為“文檔審批”,單擊“下一步”,如圖7-2所示。圖7-2  添加工作流任務(wù)列表是用戶(hù)存放工作流給審批用戶(hù)分配的任務(wù)列表項(xiàng)的列表,可選擇系統(tǒng)已經(jīng)存在的任務(wù)列表或

10、者新建一個(gè)任務(wù)列表。歷史記錄列表用戶(hù)存放工作流運(yùn)行工程中產(chǎn)生的日志信息。Step3  在工作流參數(shù)設(shè)置頁(yè)面中,選擇任務(wù)分配對(duì)象為“串行”,輸入兩個(gè)用戶(hù)作為審批者,選擇“文檔被拒絕”時(shí)取消工作流,選擇“工作流完成后”為“更新審批狀態(tài)”,如圖7-3所示。單擊“確定”按鈕完成設(shè)置。圖7-3  設(shè)置工作流參數(shù)設(shè)置工作流參數(shù)頁(yè)面又叫做工作流關(guān)聯(lián)界面,本示例中的關(guān)聯(lián)界面是采用InfoPath表單開(kāi)發(fā)的,這個(gè)表單叫做工作流關(guān)聯(lián)表單,7.4.7節(jié)將講述工作流關(guān)聯(lián)表單的開(kāi)發(fā)。Step4  為了方便審批用戶(hù)的操作,需要將用戶(hù)任務(wù)WebPart添加到的首頁(yè),如圖7-4所示。圖7-4&#

11、160; 添加用戶(hù)任務(wù)WebPart工作流的配置操作已經(jīng)完成,下面我們看一下這個(gè)工作流的使用。Step1  在文檔庫(kù)中新建或上傳一個(gè)文檔,然后在下拉列表中選擇“工作流”選項(xiàng),如圖7-5所示。圖7-5  選擇“工作流”選項(xiàng)Step2  單擊“文檔審批”工作流,如圖7-6所示。圖7-6  選擇工作流Step3  在接下來(lái)的配置審批參數(shù)頁(yè)面中,可以輸入審批信息,如圖7-7所示。再單擊“啟動(dòng)”按鈕。圖7-7  配置審批參數(shù)這個(gè)配置審批參數(shù)的頁(yè)面在工作流啟動(dòng)(初始化)的時(shí)候出現(xiàn),因此叫做初始化表單,可以采用infopath開(kāi)發(fā),在7.4.8節(jié)將

12、具體講述工作流初始化表單的開(kāi)發(fā)?,F(xiàn)在文檔審批工作流已經(jīng)啟動(dòng),返回到文檔庫(kù)頁(yè)面,可以看到文檔庫(kù)上多出來(lái)一個(gè)“文檔審批”欄,如圖7-8所示。通過(guò)“文檔審批”欄中的可以到工作流監(jiān)控和管理頁(yè)面,如圖7-9所示。通過(guò)工作流監(jiān)控和管理頁(yè)面,可以查看工作流任務(wù)的分配和完成情況,強(qiáng)制終止工作流。圖7-8  文檔庫(kù)中工作流圖7-9  工作流監(jiān)控頁(yè)面用第一個(gè)審批用戶(hù)的賬號(hào)登錄系統(tǒng),可以在用戶(hù)任務(wù)Web部件中看到需要操作的任務(wù),如圖7-10所示。圖7-10  工作流任務(wù)單擊任務(wù),在接下來(lái)的任務(wù)操作頁(yè)面中可以通過(guò)查看被審批的文檔,通過(guò)下方的“批準(zhǔn)”和“拒絕”按鈕進(jìn)行審批,如圖7-11所示

13、。圖7-11  任務(wù)頁(yè)面任務(wù)操作頁(yè)面又稱(chēng)為任務(wù)表單,可以采用infopath開(kāi)發(fā),在7.4.4節(jié)將具體講述。用第2個(gè)審批用戶(hù)的賬號(hào)登錄系統(tǒng),進(jìn)行批準(zhǔn)操作。兩個(gè)審批用戶(hù)都批準(zhǔn)之后,返回到文檔庫(kù)頁(yè)面,可以看到文檔審批的狀態(tài)已經(jīng)變成“已批準(zhǔn)”,如圖7-12所示。圖7-12  文檔庫(kù)7.2  采用SharePoint Designer設(shè)計(jì)工作流SharePoint Designer可以設(shè)計(jì)無(wú)代碼的工作流,對(duì)列表項(xiàng)或文檔啟用處理邏輯。SharePoint Designer只能設(shè)計(jì)出簡(jiǎn)單的順序工作流,本節(jié)了解一下具體的操作方法。7.2.1  列表項(xiàng)流程示例本節(jié)演示一

14、個(gè)員工請(qǐng)假流程的設(shè)計(jì):?jiǎn)T工提交請(qǐng)假單,由審批人進(jìn)行審批,審批人批準(zhǔn)之后,自動(dòng)添加一個(gè)日程到日歷列表中,如果不批準(zhǔn),則通知提交人。具體的操作步驟如下。Step1  創(chuàng)建列表。新建一個(gè)自定義列表,名稱(chēng)為“員工請(qǐng)假”,添加如圖7-13所示的欄。圖7-13  創(chuàng)建列表Step2  啟用列表的容審批。通過(guò)“列表設(shè)置”“版本控制設(shè)置”,啟用列表的容審批。設(shè)置“僅限可批準(zhǔn)項(xiàng)目的用戶(hù)”可以查看列表中的草稿項(xiàng)目,如圖7-14所示。圖7-14  啟用容審批Step3  新建工作流。用SharePoint Designer 打開(kāi)站點(diǎn),選擇“文件”“新建”“工作流”命

15、令,如圖7-15所示。圖7-15  新建工作流Step4  指定工作流名稱(chēng)和啟動(dòng)方式。在定義新工作流界面中,輸入工作流名稱(chēng)為“員工請(qǐng)假流程”,選擇附加到“員工請(qǐng)假”列表,再選擇“允許從項(xiàng)目中手工啟動(dòng)此工作流”,如圖7-16所示。圖7-16  定義新工作流界面Step5  添加審批步驟。將步驟名稱(chēng)改為“經(jīng)理審批”,在操作中,選擇“從用戶(hù)處收集數(shù)據(jù)”,單擊“此用戶(hù)”,在彈出的對(duì)話(huà)框中選擇一個(gè)審批人,如圖7-17和圖7-18所示。圖7-17  添加審批步驟圖圖7-18  選擇審批用戶(hù)Step6  設(shè)計(jì)審批步驟需要采集的數(shù)據(jù)。單擊“

16、數(shù)據(jù)”,在自定義任務(wù)向?qū)е休斎肴蝿?wù)名稱(chēng)為“請(qǐng)假審批”,如圖7-19所示,再單擊“下一步”按鈕。圖7-19  添加“請(qǐng)假申請(qǐng)”添加一個(gè)名稱(chēng)為“審批意見(jiàn)”的多行域,如圖7-20所示。添加一個(gè)名稱(chēng)為“是否同意”的選項(xiàng)類(lèi)型域,選項(xiàng)為“批準(zhǔn)和拒絕”,如圖7-21所示。圖7-20  添加“審批意見(jiàn)”域   圖7-21  添加“是否同意”域以上的操作實(shí)際上是創(chuàng)建了一個(gè)任務(wù)容類(lèi)型,并且創(chuàng)建了其編輯表單,如圖7-22所示。圖7-22  請(qǐng)假審批容類(lèi)型Step7  修改審批任務(wù)ID變量名。通過(guò)添加“從用戶(hù)處收集數(shù)據(jù)”動(dòng)作創(chuàng)建了一個(gè)任務(wù)容類(lèi)型,在

17、工作流運(yùn)行的時(shí)候,會(huì)創(chuàng)建一個(gè)任務(wù)列表項(xiàng),這個(gè)列表項(xiàng)的ID會(huì)被放到流程的變量中,以便從工作流中可以訪問(wèn)任務(wù)數(shù)據(jù)。我們把存放這個(gè)任務(wù)列表項(xiàng)ID的變量名修改為“請(qǐng)假審批任務(wù)ID”,如圖7-23和圖7-24所示。圖7-23  修改工作流變量名圖7-24  重新選擇任務(wù)ID綁定到的變量Step8  添加審批完成后的處理邏輯。再添加一個(gè)工作流步驟,名稱(chēng)為“審批完成”,如圖7-25所示。圖7-25  添加審批完成步驟Step9  添加判斷條件。經(jīng)理審批同意時(shí)需要批準(zhǔn)列表項(xiàng),并且將請(qǐng)假休息添加進(jìn)日程列表中,首先需要添加判斷經(jīng)理審批是否同意的條件,查找到審批任務(wù)

18、列表項(xiàng)的是否同意字段,進(jìn)行判斷即可。從“條件”菜單中選擇“比較任意數(shù)據(jù)源”,如圖7-26和圖7-27所示。圖7-26  添加比較任意數(shù)據(jù)源條件圖7-27  比較任意數(shù)據(jù)源比較任意數(shù)據(jù)源條件是“如果值等于值”的形式,第一個(gè)值可以綁定到當(dāng)前列表項(xiàng)的任意字段,或者是其他列表項(xiàng)的字段。這里我們要把它綁定到任務(wù)列表的“是否同意”字段。單擊“值”,再單擊“綁定”圖標(biāo),在定義工作流查找窗口中,選擇數(shù)據(jù)源為“任務(wù)”,選擇域?yàn)椤笆欠裢狻保O(shè)置匹配值為任務(wù)ID匹配工作流變量中的“請(qǐng)假審批任務(wù)ID”,如圖7-28所示。圖7-28  綁定到是否同意字段設(shè)置條件為任務(wù)的“是否同意”字段值

19、等于“批準(zhǔn)”,如圖7-29所示。圖7-29  設(shè)置判斷條件為“批準(zhǔn)”Step10 添加列表項(xiàng)審批操作。在“操作”中選擇“設(shè)置容審批狀態(tài)”,并將容審批狀態(tài)設(shè)置為“已批準(zhǔn)”,如圖7-30所示。圖7-30  添加審批操作Step11 創(chuàng)建日歷信息。添加一個(gè)“創(chuàng)建列表項(xiàng)”操作,選擇列表為“個(gè)人日歷”(若不存在,則先創(chuàng)建此日歷列表),將日歷的標(biāo)題設(shè)置為“請(qǐng)假”,將開(kāi)始時(shí)間和結(jié)束時(shí)間綁定到當(dāng)前列表項(xiàng)的相應(yīng)字段,如圖7-31所示。圖7-31  創(chuàng)建日歷項(xiàng)Step12 添加批準(zhǔn)未通過(guò)的操作。添加一個(gè)Else If條件分支,添加設(shè)置容審批狀態(tài)操作,將容審批狀態(tài)設(shè)置為“已拒絕”,添加

20、一個(gè)發(fā)送操作,給啟動(dòng)流程的用戶(hù)發(fā)送一封提醒,如圖7-32所示。圖7-32  添加容審批為“拒絕”和發(fā)送操作SharePoint Designer設(shè)計(jì)的工作流的使用和7.1.3節(jié)描述的操作方式基本是一樣的。不同的是,單擊任務(wù)首先進(jìn)入的任務(wù)查看頁(yè)面,在任務(wù)查看頁(yè)面中單擊“編輯項(xiàng)目”后才會(huì)轉(zhuǎn)到任務(wù)編輯頁(yè)面,如圖7-33,圖7-34和圖7-35所示。圖7-33  任務(wù)列表圖7-34  任務(wù)查看頁(yè)面圖7-35  任務(wù)編輯7.2.2  SharePoint Designer工作流的遷移SharePoint Designer設(shè)計(jì)工作流的功能是提供給最終用戶(hù)使

21、用的,就如同用SPD定制站點(diǎn)頁(yè)面一樣,并沒(méi)有提供專(zhuān)門(mén)的流程遷移工具。最終用戶(hù)可以直接在生產(chǎn)環(huán)境中設(shè)計(jì)流程。對(duì)開(kāi)發(fā)人員來(lái)說(shuō),如果在開(kāi)發(fā)環(huán)境中設(shè)計(jì)好了一個(gè)比較復(fù)雜的流程,需要遷移到生產(chǎn)環(huán)境,必須手工操作,可以參考如下步驟。Step1  確保生產(chǎn)環(huán)境已經(jīng)建好了相應(yīng)的列表,并確保列表的配置跟開(kāi)發(fā)環(huán)境完全一致,包括列表名稱(chēng)、列表的所有欄。Step2  用SharePoint Designer打開(kāi)生產(chǎn)環(huán)境的站點(diǎn),新建一個(gè)與開(kāi)發(fā)環(huán)境名稱(chēng)一樣的流程,綁定到同名稱(chēng)的列表,直接保存。Step3  SharePoint Designer打開(kāi)開(kāi)發(fā)環(huán)境的站點(diǎn),將工作流的所有文件復(fù)制到生產(chǎn)環(huán)

22、境。Step4  打開(kāi)所有工作流的文件,將其中所有的列表項(xiàng)ID替換成生產(chǎn)環(huán)境相應(yīng)的列表項(xiàng)ID。7.3  SharePoint Designer工作流的擴(kuò)展SharePoint Designer提供了常用的很多條件和活動(dòng),但是這些條件和活動(dòng)并不能滿(mǎn)足所有需要。本節(jié)就來(lái)講述SPD動(dòng)作和條件的擴(kuò)展。7.3.1  動(dòng)作的擴(kuò)展SPD工作流的動(dòng)作是一個(gè)普通的WF活動(dòng)類(lèi)。WF活動(dòng)類(lèi)開(kāi)發(fā)好以后,部署到GAC中,然后修改SPD工作流的配置文件,注冊(cè)新開(kāi)發(fā)的活動(dòng)。SPD工作流配置文件路徑為C:Program FilesCommon FilesMicrosoft Sharedweb s

23、erver extensions12TEMPLATE2052Workflow,2052表示中文語(yǔ)言,英文語(yǔ)言的配置文件路徑為C:Program FilesCommon FilesMicrosoft Sharedweb server extensions12TEMPLATE1033 Workflow,在這個(gè)路徑下,有個(gè)WSS.ACTIONS文件,這是一個(gè)XML文件,這個(gè)文件里面配置了所有系統(tǒng)自帶的動(dòng)作和條件。WSS.ACTIONS在Actions節(jié)點(diǎn)下聲明了所有的動(dòng)作。SDP工作流是基于規(guī)則來(lái)定義的。在ACTIONS配置文件中,將動(dòng)作類(lèi)的屬性與各種規(guī)則設(shè)計(jì)器關(guān)聯(lián)。以下是“從用戶(hù)處收集數(shù)據(jù)”動(dòng)作的

24、聲明。<Action Name="從用戶(hù)處收集數(shù)據(jù)"     ClassName="Microsoft.SharePoint.WorkflowActions.CollectDataTask"     Assembly="Microsoft.SharePoint.WorkflowActions, Version=, Culture=neutral, PublicKeyToken=71e9bce111e9429c"     Ap

25、pliesTo="all"     CreatesTask="true"     Category="任務(wù)操作">     <RuleDesigner Sentence="從 %2 處收集 %1 (輸出到 %3)">        <FieldBind Field="Title,ContentTypeId" Des

26、ignerType="Survey" Text="數(shù)據(jù)" Id="1"/>        <FieldBind Field="AssignedTo" DesignerType="SinglePerson" Text="此用戶(hù)" Id="2"/>   <FieldBind Field="TaskId" DesignerType

27、="ParameterNames" Text="collect" Id="3"/>     </RuleDesigner>     <Parameters>        <Parameter Name="_Context" Type="Microsoft.SharePoint.WorkflowActions.WorkflowContext,

28、 Microsoft.SharePoint.WorkflowActions" Direction="In" />        <Parameter Name="ContentTypeId" Type="System.String, mscorlib" Direction="In" />        <Parameter Name="

29、;AssignedTo" Type="System.String, mscorlib" Direction="In" />        <Parameter Name="Title" Type="System.String, mscorlib" Direction="In" />        <Parameter Nam

30、e="TaskId" Type="System.Int32, mscorlib" Direction="Out" />     </Parameters>    </Action>以下是對(duì)配置文件中主要元素的說(shuō)明。l         ClassName和Assembly分別是動(dòng)作類(lèi)的全名和所在的程序集。l     &#

31、160;   AppliesTo指定動(dòng)作是應(yīng)用到文檔庫(kù)還是列表,允許的值為list和all。l         CreatesTask指定是否需要?jiǎng)?chuàng)建任務(wù)項(xiàng)。l         Parameters節(jié)點(diǎn)中聲明了WF活動(dòng)類(lèi)需要跟上下文數(shù)據(jù)進(jìn)行綁定或進(jìn)行設(shè)置的屬性。在Parameter節(jié)點(diǎn)中,Name為WF活動(dòng)類(lèi)的屬性名,Type為屬性的類(lèi)型,Direction聲明屬性是需要賦值的還是對(duì)外提供值,有3個(gè)可選值:In、Ou

32、t、Optional,指定In時(shí)必須給屬性賦值,指定Out時(shí)必須將屬性跟某個(gè)工作流變量進(jìn)行綁定,Optional表示可選項(xiàng),指定Optional時(shí)可以不對(duì)屬性進(jìn)行操作。以下為3個(gè)特殊的Parameter。l         _Context:當(dāng)Action類(lèi)需要訪問(wèn)工作流數(shù)據(jù)時(shí),必須聲明此屬性,類(lèi)型是Microsoft.SharePoint.WorkflowActions.WorkflowContext。l         _ListI

33、d:當(dāng)需要訪問(wèn)工作流關(guān)聯(lián)的列表時(shí),需要指定此屬性。l         _ItemID:當(dāng)需要訪問(wèn)工作流關(guān)聯(lián)的列表項(xiàng)時(shí),需要指定此屬性。以上的3個(gè)屬性定義在Action類(lèi)中,然后聲明在配置文件中,工作流運(yùn)行時(shí)引擎會(huì)自動(dòng)為其賦值。RuleDesigner節(jié)點(diǎn)聲明了對(duì)Action類(lèi)屬性的設(shè)計(jì)規(guī)則。Sentence指定了設(shè)計(jì)時(shí)顯示的提示信息,其中的占位符號(hào)與RuleDesigner中的FieldBind的ID屬性配置,F(xiàn)ieldBind定義了對(duì)某個(gè)屬性的設(shè)計(jì)規(guī)則。Field為屬性的名字,Text為占位符處顯示的文本,ID跟

34、占位符前的數(shù)字對(duì)應(yīng)。DesignerType指定了對(duì)屬性應(yīng)用的設(shè)計(jì)器,系統(tǒng)支持如下的設(shè)計(jì)器。l         Survey:生成收集數(shù)據(jù)的表單,表單對(duì)應(yīng)的容類(lèi)型ID和標(biāo)題需要分別映射到兩個(gè)屬性中。l         SinglePerson:?jiǎn)蝹€(gè)用戶(hù)或用戶(hù)組。l         Person:多個(gè)用戶(hù)或用戶(hù)組。l   

35、0;     ParameterNames:工作流變量。l         StringBuilder:生成可以跟當(dāng)前工作流數(shù)據(jù)混合的字符串。l         Operator:選項(xiàng),用Option指定可選值。如:<FieldBind Field="TaskMode" DesignerType="Operator" Text="此模式&qu

36、ot; Id="3">          <Option Name="RequireOne" Value="RequireOne"/>          <Option Name="RequireAll" Value="RequireAll"/>  </FieldBind&

37、gt;l         fieldNames:列表欄,采用此設(shè)計(jì)器將工作流關(guān)聯(lián)列表的某個(gè)欄和Action類(lèi)的屬性綁定。l         E-mail:設(shè)計(jì)器,設(shè)計(jì)的標(biāo)題、容和收件人等,需要將收件人、抄送人、標(biāo)題、容4個(gè)屬性分別綁定,如:<RuleDesigner Sentence="電子 %1">        <FieldB

38、ind Field="To,CC,Subject,Body" Text="此電子" DesignerType="Email" Id="1"/>      </RuleDesigner>      <Parameters>               <P

39、arameter Name="Body" Type="System.String, mscorlib" Direction="Optional" />        <Parameter Name="To" Type="System.Collections.ArrayList, mscorlib" Direction="In" />     

40、;   <Parameter Name="CC" Type="System.Collections.ArrayList, mscorlib" Direction="Optional" />        <Parameter Name="Subject" Type="System.String, mscorlib" Direction="In" /> &

41、#160;    </Parameters>7.3.2  動(dòng)作擴(kuò)展示例自定義E-mail活動(dòng)系統(tǒng)默認(rèn)的發(fā)送動(dòng)作只能發(fā)送簡(jiǎn)單的文本,很多時(shí)候,用戶(hù)希望審批任務(wù)的提醒中帶一個(gè),可以直接到任務(wù)操作頁(yè)面。本節(jié)我開(kāi)發(fā)一個(gè)可以發(fā)送任務(wù)的E-mail活動(dòng),這個(gè)E-mail活動(dòng)具有系統(tǒng)發(fā)送動(dòng)作的所有功能,可以動(dòng)態(tài)綁定收件人、指定主題等,如圖7-36所示。唯一跟系統(tǒng)默認(rèn)功能的區(qū)別就是:在發(fā)送出去的容中帶有任務(wù)操作。圖7-36  發(fā)送動(dòng)作Step1  新建一個(gè)工作流活動(dòng)項(xiàng)目,如圖7-37所示。將默認(rèn)產(chǎn)生的Activity1類(lèi)改名為“MailW

42、ithTaskLinkActivity”。圖7-37  新建工作流活動(dòng)項(xiàng)目Step2  添加Microsoft.SharePoint.dll和microsoft.sharepoint.WorkflowActions.dll兩個(gè)程序集的引用。這兩個(gè)程序集位于服務(wù)器上的C:Program FilesCommon FilesMicrosoft Sharedweb server extensions12ISAPI目錄中。Step3  切換到代碼視圖,將MailWithTaskLinkActivity的基類(lèi)由SequenceActivity改為Activity。復(fù)核活動(dòng)可以

43、從SequenceActivity類(lèi)繼承,但是MailWithTaskLinkActivity并不需要使用子活動(dòng)(也就是不是一個(gè)復(fù)核活動(dòng)),所有應(yīng)該從基本的Activity類(lèi)繼承。Step4  添加對(duì)SharePoint API主要名稱(chēng)空間的引用,代碼如下所示。using Microsoft.SharePoint;using Microsoft.SharePoint.Utilities;using Microsoft.SharePoint.Workflow;using Microsoft.SharePoint.WorkflowActions;namespace CodeArt.Sha

44、rePoint.WorkflowActions    public class MailWithTaskLinkActivity : Activity            public MailWithTaskLinkActivity()                     

45、;            Step5  希望MailWithTaskLinkActivity部署成SharePoint Designer的動(dòng)作之后,依然具有系統(tǒng)自帶的發(fā)送活動(dòng)的功能可以動(dòng)態(tài)綁定到收件人、指定主題等,所以需要給MailWithTaskLinkActivity添加相應(yīng)的屬性。添加一個(gè)_Context屬性,代碼如下所示。public static DependencyProperty _ContextProperty =     

46、60;    DependencyProperty.Register("_Context", typeof(WorkflowContext), typeof(SendMail);        Browsable(true), ValidationOption(ValidationOption.Required), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible), Descrip

47、tion("Context")        public WorkflowContext _Context                    get               

48、60;            return (WorkflowContext)base.GetValue(_ContextProperty);                        set      &

49、#160;                     base.SetValue(_ContextProperty, value);                    _Context屬性用來(lái)綁定到工作流的上下文,以便獲取工作流

50、運(yùn)行環(huán)境的集、等信息。這個(gè)屬性的名稱(chēng)是不能變的,后面的步驟會(huì)講述如何在配置文件中配置這個(gè)屬性。添加一個(gè)_ListId屬性,代碼如下所示。public static DependencyProperty _ListIdProperty = DependencyProperty.Register("_ListId", typeof(string), typeof(MailWithTaskLinkActivity);        ValidationOption(ValidationOption.Requir

51、ed)        public string _ListId                    get                     

52、;       return (string)base.GetValue(_ListIdProperty);                        set              

53、              base.SetValue(_ListIdProperty, value);                    _ListId屬性用來(lái)綁定到工作流的關(guān)聯(lián)的列表ID。添加一個(gè)_ListItem屬性,代碼如下所示。public static Dependency

54、Property _ListItemProperty = DependencyProperty.Register("_ListItem", typeof(int), typeof(MailWithTaskLinkActivity);        ValidationOption(ValidationOption.Required)        public int _ListItem    &

55、#160;               get                            return (int)base.GetValue(_ListItemProperty); 

56、60;                      set                            base.SetValue(

57、_ListItemProperty, value);                    _ListItem屬性用來(lái)綁定到工作流的關(guān)聯(lián)的列表項(xiàng)ID。添加一個(gè)To屬性,代碼如下所示。public static DependencyProperty ToProperty = DependencyProperty.Register("To", typeof(ArrayList), typeof(Mai

58、lWithTaskLinkActivity);        ValidationOption(ValidationOption.Required)        public ArrayList To                    get  

59、0;                         return (ArrayList)base.GetValue(ToProperty);                    

60、;    set                            base.SetValue(ToProperty, value);               &

61、#160;    To屬性是一個(gè)ArrayList類(lèi)型的集合,在SharePoint Designer進(jìn)行設(shè)計(jì)的時(shí)候可以直接綁定到用戶(hù)。同樣,添加的抄送(CC)、暗送(BCC)、主題(Subject)、容(Body)4個(gè)屬性代碼如下所示。public static DependencyProperty CCProperty = DependencyProperty.Register("CC", typeof(ArrayList), typeof(MailWithTaskLinkActivity);    

62、    /抄送        ValidationOption(ValidationOption.Optional)        public ArrayList CC                    get   

63、;                         return (ArrayList)base.GetValue(CCProperty);                    

64、    set                            base.SetValue(CCProperty, value);               &#

65、160;            public static DependencyProperty BCCProperty = DependencyProperty.Register("BCC", typeof(ArrayList), typeof(MailWithTaskLinkActivity);        /暗送        V

66、alidationOption(ValidationOption.Optional)        public ArrayList BCC                    get              

67、60;             return (ArrayList)base.GetValue(BCCProperty);                        set       

68、                     base.SetValue(BCCProperty, value);                          

69、0; public static DependencyProperty SubjectProperty = DependencyProperty.Register("Subject", typeof(String), typeof(MailWithTaskLinkActivity);        /主題        ValidationOption(ValidationOption.Required)  

70、0;     public string Subject                    get                        

71、    return (string)base.GetValue(SubjectProperty);                        set                 &

72、#160;          base.SetValue(SubjectProperty, value);                            public static DependencyProperty BodyProperty = D

73、ependencyProperty.Register("Body", typeof(String), typeof(MailWithTaskLinkActivity);        /容        ValidationOption(ValidationOption.Optional)        public string Body  &#

74、160;                 get                            return (string)base.GetValue(BodyProperty);

75、                        set                            base.

76、SetValue(BodyProperty, value);                    Step6  上一步把MailWithTaskLinkActivity需要的所有屬性都添加好了,下面來(lái)添加發(fā)送的處理代碼。重載Execute方法,代碼如下所示。        protected override ActivityExecu

77、tionStatus Execute(ActivityExecutionContext provider)                    /獲取到工作流服務(wù)            ISharePointService service = (ISharePointService)provider.Get

78、Service(typeof(ISharePointService);            if (service = null)                            throw new InvalidOper

79、ationException();                        try                         &

80、#160;  /獲取到列表                SPList list = _Context.Web.Listsnew Guid(_ListId);                /獲取到列表項(xiàng)       &

81、#160;        SPListItem item = list.GetItemById(Convert.ToInt32(_ListItem);                /計(jì)算任務(wù)查看URL               

82、0;string url = this._Context.Web.Url +                "_layouts/codeArt/SPTaskRedirect.aspx?ListId=" + item.ParentList.ID + "&ItemId=" + item.ID;         &#

83、160;                      /發(fā)送參數(shù)                StringDictionary headers = new StringDictionary();    

84、0;           headers"to" = this.ParseSendTo(this.To);                headers"subject" = this.Subject;         

85、       if (null != this.CC)                                    headers"cc" = this.ParseSen

86、dTo(this.CC);                                if (null != this.BCC)              

87、                      headers"bcc" = this.ParseSendTo(this.BCC);                      

88、;          string body = null;                if (null != this.Body)                   

89、60;                Activity parent = provider.Activity;                    while (parent.Parent != null)    &#

90、160;                                       parent = parent.Parent;        &

91、#160;                               /處理容中的屬性綁定,Helper是系統(tǒng)自帶的類(lèi)                

92、;    body = Helper.ProcessStringField(this.Body, parent, this._Context);                                body += "<br/><a

93、href='" + url + "'><b>點(diǎn)擊此處查看或處理任務(wù)</b></a>"                /發(fā)送                service.SendEmail(base.Workfl

94、owInstanceId, false, headers, body);                return ActivityExecutionStatus.Closed;                        c

95、atch (Exception ex)                            /將異常信息記錄到日志列表                service.LogToHistor

96、yList(base.WorkflowInstanceId, SPWorkflowHistoryEventType.WorkflowError, _Context.Web.CurrentUser.ID, TimeSpan.MinValue, "MailWithTaskLinkActivity Error",                    ex.Message + ex.StackTrace, "");                        return ActivityExecutionStatus.Faulting;        發(fā)送活動(dòng)一般放置在從用戶(hù)處收集數(shù)據(jù)活動(dòng)之前

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論