版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度足浴店店面租賃與轉(zhuǎn)租合同模板
- 2025年度醫(yī)療器械外觀設(shè)計(jì)研發(fā)生產(chǎn)合同4篇
- 2025年度淋浴房行業(yè)風(fēng)險(xiǎn)評(píng)估與保險(xiǎn)服務(wù)合同4篇
- 二零二五版文化藝術(shù)品交易代理服務(wù)合同3篇
- 二零二五版飯店租賃合同經(jīng)營(yíng)數(shù)據(jù)共享協(xié)議3篇
- 二零二五年度解除餐飲場(chǎng)所租賃合同
- 2025年度花卉產(chǎn)業(yè)人才培養(yǎng)與技術(shù)服務(wù)合同
- 2025年度私人酒店前臺(tái)接待員勞動(dòng)合同
- 2025年度二零二五年度現(xiàn)代商業(yè)門(mén)面房租賃經(jīng)營(yíng)合同
- 2025年度智慧城市建設(shè)贊助合同
- GB/T 16895.3-2024低壓電氣裝置第5-54部分:電氣設(shè)備的選擇和安裝接地配置和保護(hù)導(dǎo)體
- 2025湖北襄陽(yáng)市12345政府熱線(xiàn)話(huà)務(wù)員招聘5人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年河北省職業(yè)院校技能大賽智能節(jié)水系統(tǒng)設(shè)計(jì)與安裝(高職組)考試題庫(kù)(含答案)
- 2024年下半年鄂州市城市發(fā)展投資控股集團(tuán)限公司社會(huì)招聘【27人】易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- GB/T 29498-2024木門(mén)窗通用技術(shù)要求
- 《職業(yè)院校與本科高校對(duì)口貫通分段培養(yǎng)協(xié)議書(shū)》
- GJB9001C質(zhì)量管理體系要求-培訓(xùn)專(zhuān)題培訓(xùn)課件
- 人教版(2024)英語(yǔ)七年級(jí)上冊(cè)單詞表
- 中醫(yī)養(yǎng)生產(chǎn)業(yè)現(xiàn)狀及發(fā)展趨勢(shì)分析
- 2023年浙江省溫州市中考數(shù)學(xué)真題含解析
- 窗簾采購(gòu)?fù)稑?biāo)方案(技術(shù)方案)
評(píng)論
0/150
提交評(píng)論