sharepoint高效率工作流開發(fā)(doc 88頁).doc_第1頁
sharepoint高效率工作流開發(fā)(doc 88頁).doc_第2頁
sharepoint高效率工作流開發(fā)(doc 88頁).doc_第3頁
sharepoint高效率工作流開發(fā)(doc 88頁).doc_第4頁
sharepoint高效率工作流開發(fā)(doc 88頁).doc_第5頁
已閱讀5頁,還剩82頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本章主要闡述SharePoint Designer 2007(SPD)的工作流應(yīng)用及利用WF對(duì)SharePoint Designer工作流組件(動(dòng)作和條件)進(jìn)行擴(kuò)展,講解利用WF和Visual Studio 2008開發(fā)工作流模板的方法。本章提供視頻教程:采用SPD設(shè)計(jì)工作流的默認(rèn)方式和定制后的方式。本章包括:n 工作流開發(fā)概述n 采用SharePoint Designer設(shè)計(jì)工作流n SharePoint Designer工作流的擴(kuò)展n 采用Visual Studio 2008 開發(fā)工作流模板7.1 工作流開發(fā)概述SharePoint基于WF(Window Workflow Foundation)構(gòu)建了它的工作流功能。WF是SharePoint工作流框架的基礎(chǔ),要深入了解SharePoint工作流的開發(fā),首先應(yīng)該了解WF的一些基礎(chǔ)知識(shí),本章對(duì)WF的技術(shù)細(xì)節(jié)并不會(huì)過多講解。本節(jié)將講述SharePoint工作流的基礎(chǔ)知識(shí),并介紹系統(tǒng)自帶的工作流模板的使用和默認(rèn)的工作流任務(wù)操作方式。7.1.1 工作流開發(fā)環(huán)境的搭建如果使用Visual Studio 2005開發(fā)SharePoint工作流應(yīng)用,首先需要安裝Visual Studio 2005的WF擴(kuò)展Visual Studio 2005 Extensions for Windows Workflow Foundation ,可以在以下地址下載:/downloads/details.aspx?familyid= 5D61409E-1FA3-48CF- 8023-E8F38E709BA6&displaylang=zh-cn。然后安裝Office SharePoint Server 2007 SDK。采用Visual Studio 2005開發(fā)SharePoint工作流,無論是開發(fā)環(huán)境的搭建還是開發(fā)時(shí)調(diào)試和測(cè)試,都比較煩瑣。Visual Studio 2008已經(jīng)發(fā)布正式版了,VS 2008提供了對(duì)SharePoint工作流開發(fā)更好的支持,直接集成了開發(fā)、部署和調(diào)試。本章的示例將采用VS 2008來進(jìn)行。為了便于調(diào)試和測(cè)試工作流,選擇直接在SharePoint服務(wù)器環(huán)境下開發(fā),因此VS 2008要直接安裝在SharePoint服務(wù)器上。7.1.2 SharePoint工作流的基本概念SharePoint工作流是一個(gè)預(yù)先定義好的對(duì)列表項(xiàng)或文檔庫文檔的處理流程。一個(gè)工作流實(shí)例跟一個(gè)列表項(xiàng)或文檔進(jìn)行關(guān)聯(lián),工作流實(shí)例不能脫離列表項(xiàng)存在。當(dāng)需要用戶處理數(shù)據(jù)的時(shí)候,比如進(jìn)行審批操作,系統(tǒng)會(huì)創(chuàng)建一個(gè)任務(wù)到某個(gè)任務(wù)列表中,審批用戶操作列表中的任務(wù)來實(shí)現(xiàn)跟流程實(shí)例的交互。工作流實(shí)例可以在列表新建、修改時(shí)自動(dòng)啟動(dòng),或者可以由用戶手動(dòng)啟動(dòng)。MOSS支持兩種工作流的開發(fā)方式。l 利用SharePoint Designer可以設(shè)計(jì)簡(jiǎn)單的無代碼順序工作流。在SharePoint Designer中,可以直接創(chuàng)建跟某個(gè)列表或文檔庫關(guān)聯(lián)的工作流,在工作流中,可以直接訪問列表項(xiàng)的字段,獲取字段的值作邏輯判斷或者給字段賦值,給用戶分配審批任務(wù)并動(dòng)態(tài)生成審批界面。SharePoint Designer設(shè)計(jì)的工作流只能跟一個(gè)列表(或文檔庫)關(guān)聯(lián),單個(gè)工作流無法用于多個(gè)列表,不同列表(或文檔庫)的工作流處理邏輯即使一樣,也只能分別進(jìn)行設(shè)計(jì)。 采用SharePoint Designer設(shè)計(jì)工作流的優(yōu)點(diǎn)是操作簡(jiǎn)單,無須編譯和部署,缺點(diǎn)是只能實(shí)現(xiàn)順序操作邏輯,無法實(shí)現(xiàn)退回等循環(huán)邏輯,審批界面自動(dòng)生成,也無法實(shí)現(xiàn)一些復(fù)雜的操作。7.2節(jié)將演示采用SharePoint Designer設(shè)計(jì)工作流的步驟。l 利用Visual Studio可以開發(fā)復(fù)雜的順序或狀態(tài)機(jī)工作流。在Visual Studio 2008中,可以直接在WF設(shè)計(jì)器中開發(fā)工作流,工作流開發(fā)好后,編譯成DLL,然后采用Feature部署到SharePoint服務(wù)器,在網(wǎng)站中將Feature激活后,工作流即可使用了,可以把這種工作流關(guān)聯(lián)到多個(gè)列表。所以又稱Visual Studio 2008設(shè)計(jì)的工作流為工作流模板。Visual Studio 2008開發(fā)工作流的優(yōu)點(diǎn)是能實(shí)現(xiàn)很復(fù)雜的流程邏輯,開發(fā)出來的工作流模板可以供多個(gè)網(wǎng)站、多個(gè)列表使用。流程任務(wù)的操作界面可以采用infopath或者直接采用aspx頁面,這樣就可以實(shí)現(xiàn)較復(fù)雜的頁面操作。缺點(diǎn)就是開發(fā)部署比較復(fù)雜,對(duì)開發(fā)人員要求較高。7.1.3 SharePoint工作流的操作方式SharePoint的工作流的默認(rèn)操作方式并不適合用戶的操作習(xí)慣,一般來說其他工作流產(chǎn)品的操作方式是用戶在一個(gè)頁面上完成所有操作,包括查看業(yè)務(wù)數(shù)據(jù)(被審批數(shù)據(jù))、填寫審批意見等。而SharePoint工作流的操作方式是:業(yè)務(wù)數(shù)據(jù)跟審批數(shù)據(jù)分離,業(yè)務(wù)數(shù)據(jù)可以用列表項(xiàng)或文檔庫中的文檔來表示,用戶審批的時(shí)候默認(rèn)只看到審批頁面,只有單擊鏈接才能查看業(yè)務(wù)數(shù)據(jù),這種操作方式對(duì)文檔審批還是說的過去的,但是對(duì)列表數(shù)據(jù)的審批操作就有點(diǎn)“不夠人性化”了。在實(shí)際的項(xiàng)目中,需要對(duì)用戶的操作習(xí)慣進(jìn)行引導(dǎo)。SharePoint默認(rèn)提供了很多工作流模板,這些工作流模板跟采用VS 2008開發(fā)的工作流模板操作上是一樣的。下面看一下系統(tǒng)自帶的“審批”工作流模板的使用。要在SharePoint中使用一個(gè)工作流模板,首先需要將工作流模板跟文檔庫或列表關(guān)聯(lián),操作步驟如下。Step1 在文檔庫的設(shè)置頁面單擊“工作流設(shè)置”鏈接,如圖7-1所示。圖7-1 工作流設(shè)置Step2 在添加工作流頁面中,選擇工作流模板為“審批”,輸入工作流名稱為“文檔審批”,單擊“下一步”,如圖7-2所示。圖7-2 添加工作流任務(wù)列表是用戶存放工作流給審批用戶分配的任務(wù)列表項(xiàng)的列表,可選擇系統(tǒng)已經(jīng)存在的任務(wù)列表或者新建一個(gè)任務(wù)列表。歷史記錄列表用戶存放工作流運(yùn)行工程中產(chǎn)生的日志信息。Step3 在工作流參數(shù)設(shè)置頁面中,選擇任務(wù)分配對(duì)象為“串行”,輸入兩個(gè)用戶作為審批者,選擇“文檔被拒絕”時(shí)取消工作流,選擇“工作流完成后”為“更新審批狀態(tài)”,如圖7-3所示。單擊“確定”按鈕完成設(shè)置。圖7-3 設(shè)置工作流參數(shù)設(shè)置工作流參數(shù)頁面又叫做工作流關(guān)聯(lián)界面,本示例中的關(guān)聯(lián)界面是采用InfoPath表單開發(fā)的,這個(gè)表單叫做工作流關(guān)聯(lián)表單,7.4.7節(jié)將講述工作流關(guān)聯(lián)表單的開發(fā)。Step4 為了方便審批用戶的操作,需要將用戶任務(wù)WebPart添加到網(wǎng)站的首頁,如圖7-4所示。圖7-4 添加用戶任務(wù)WebPart工作流的配置操作已經(jīng)完成,下面我們看一下這個(gè)工作流的使用。Step1 在文檔庫中新建或上傳一個(gè)文檔,然后在下拉列表中選擇“工作流”選項(xiàng),如圖7-5所示。圖7-5 選擇“工作流”選項(xiàng)Step2 單擊“文檔審批”工作流,如圖7-6所示。圖7-6 選擇工作流Step3 在接下來的配置審批參數(shù)頁面中,可以輸入審批信息,如圖7-7所示。再單擊“啟動(dòng)”按鈕。圖7-7 配置審批參數(shù)這個(gè)配置審批參數(shù)的頁面在工作流啟動(dòng)(初始化)的時(shí)候出現(xiàn),因此叫做初始化表單,可以采用infopath開發(fā),在7.4.8節(jié)將具體講述工作流初始化表單的開發(fā)?,F(xiàn)在文檔審批工作流已經(jīng)啟動(dòng),返回到文檔庫頁面,可以看到文檔庫上多出來一個(gè)“文檔審批”欄,如圖7-8所示。通過“文檔審批”欄中的鏈接可以鏈接到工作流監(jiān)控和管理頁面,如圖7-9所示。通過工作流監(jiān)控和管理頁面,可以查看工作流任務(wù)的分配和完成情況,強(qiáng)制終止工作流。圖7-8 文檔庫中工作流鏈接圖7-9 工作流監(jiān)控頁面用第一個(gè)審批用戶的賬號(hào)登錄系統(tǒng),可以在用戶任務(wù)Web部件中看到需要操作的任務(wù),如圖7-10所示。圖7-10 工作流任務(wù)單擊任務(wù)鏈接,在接下來的任務(wù)操作頁面中可以通過鏈接查看被審批的文檔,通過下方的“批準(zhǔn)”和“拒絕”按鈕進(jìn)行審批,如圖7-11所示。圖7-11 任務(wù)頁面任務(wù)操作頁面又稱為任務(wù)表單,可以采用infopath開發(fā),在7.4.4節(jié)將具體講述。用第2個(gè)審批用戶的賬號(hào)登錄系統(tǒng),進(jìn)行批準(zhǔn)操作。兩個(gè)審批用戶都批準(zhǔn)之后,返回到文檔庫頁面,可以看到文檔審批的狀態(tài)已經(jīng)變成“已批準(zhǔn)”,如圖7-12所示。圖7-12 文檔庫7.2 采用SharePoint Designer設(shè)計(jì)工作流SharePoint Designer可以設(shè)計(jì)無代碼的工作流,對(duì)列表項(xiàng)或文檔啟用處理邏輯。SharePoint Designer只能設(shè)計(jì)出簡(jiǎn)單的順序工作流,本節(jié)了解一下具體的操作方法。7.2.1 列表項(xiàng)流程示例本節(jié)演示一個(gè)員工請(qǐng)假流程的設(shè)計(jì):?jiǎn)T工提交請(qǐng)假單,由審批人進(jìn)行審批,審批人批準(zhǔn)之后,自動(dòng)添加一個(gè)日程到日歷列表中,如果不批準(zhǔn),則郵件通知提交人。具體的操作步驟如下。Step1 創(chuàng)建列表。新建一個(gè)自定義列表,名稱為“員工請(qǐng)假”,添加如圖7-13所示的欄。圖7-13 創(chuàng)建列表Step2 啟用列表的內(nèi)容審批。通過“列表設(shè)置”“版本控制設(shè)置”,啟用列表的內(nèi)容審批。設(shè)置“僅限可批準(zhǔn)項(xiàng)目的用戶”可以查看列表中的草稿項(xiàng)目,如圖7-14所示。圖7-14 啟用內(nèi)容審批Step3 新建工作流。用SharePoint Designer 打開站點(diǎn),選擇“文件”“新建”“工作流”命令,如圖7-15所示。圖7-15 新建工作流Step4 指定工作流名稱和啟動(dòng)方式。在定義新工作流界面中,輸入工作流名稱為“員工請(qǐng)假流程”,選擇附加到“員工請(qǐng)假”列表,再選擇“允許從項(xiàng)目中手工啟動(dòng)此工作流”,如圖7-16所示。圖7-16 定義新工作流界面Step5 添加審批步驟。將步驟名稱改為“經(jīng)理審批”,在操作中,選擇“從用戶處收集數(shù)據(jù)”,單擊“此用戶”鏈接,在彈出的對(duì)話框中選擇一個(gè)審批人,如圖7-17和圖7-18所示。圖7-17 添加審批步驟圖圖7-18 選擇審批用戶Step6 設(shè)計(jì)審批步驟需要采集的數(shù)據(jù)。單擊“數(shù)據(jù)”鏈接,在自定義任務(wù)向?qū)е休斎肴蝿?wù)名稱為“請(qǐng)假審批”,如圖7-19所示,再單擊“下一步”按鈕。圖7-19 添加“請(qǐng)假申請(qǐng)”添加一個(gè)名稱為“審批意見”的多行域,如圖7-20所示。添加一個(gè)名稱為“是否同意”的選項(xiàng)類型域,選項(xiàng)為“批準(zhǔn)和拒絕”,如圖7-21所示。圖7-20 添加“審批意見”域 圖7-21 添加“是否同意”域以上的操作實(shí)際上是創(chuàng)建了一個(gè)任務(wù)內(nèi)容類型,并且創(chuàng)建了其編輯表單,如圖7-22所示。圖7-22 請(qǐng)假審批內(nèi)容類型Step7 修改審批任務(wù)ID變量名。通過添加“從用戶處收集數(shù)據(jù)”動(dòng)作創(chuàng)建了一個(gè)任務(wù)內(nèi)容類型,在工作流運(yùn)行的時(shí)候,會(huì)創(chuàng)建一個(gè)任務(wù)列表項(xiàng),這個(gè)列表項(xiàng)的ID會(huì)被放到流程的變量中,以便從工作流中可以訪問任務(wù)數(shù)據(jù)。我們把存放這個(gè)任務(wù)列表項(xiàng)ID的變量名修改為“請(qǐng)假審批任務(wù)ID”,如圖7-23和圖7-24所示。圖7-23 修改工作流變量名圖7-24 重新選擇任務(wù)ID綁定到的變量Step8 添加審批完成后的處理邏輯。再添加一個(gè)工作流步驟,名稱為“審批完成”,如圖7-25所示。圖7-25 添加審批完成步驟Step9 添加判斷條件。經(jīng)理審批同意時(shí)需要批準(zhǔn)列表項(xiàng),并且將請(qǐng)假休息添加進(jìn)日程列表中,首先需要添加判斷經(jīng)理審批是否同意的條件,查找到審批任務(wù)列表項(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)椤笆欠裢狻?,設(shè)置匹配值為任務(wù)ID匹配工作流變量中的“請(qǐng)假審批任務(wù)ID”,如圖7-28所示。圖7-28 綁定到是否同意字段設(shè)置條件為任務(wù)的“是否同意”字段值等于“批準(zhǔn)”,如圖7-29所示。圖7-29 設(shè)置判斷條件為“批準(zhǔn)”Step10 添加列表項(xiàng)審批操作。在“操作”中選擇“設(shè)置內(nèi)容審批狀態(tài)”,并將內(nè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)假”,將開始時(shí)間和結(jié)束時(shí)間綁定到當(dāng)前列表項(xiàng)的相應(yīng)字段,如圖7-31所示。圖7-31 創(chuàng)建日歷項(xiàng)Step12 添加批準(zhǔn)未通過的操作。添加一個(gè)Else If條件分支,添加設(shè)置內(nèi)容審批狀態(tài)操作,將內(nèi)容審批狀態(tài)設(shè)置為“已拒絕”,添加一個(gè)發(fā)送郵件操作,給啟動(dòng)流程的用戶發(fā)送一封提醒郵件,如圖7-32所示。圖7-32 添加內(nèi)容審批為“拒絕”和發(fā)送郵件操作SharePoint Designer設(shè)計(jì)的工作流的使用和7.1.3節(jié)描述的操作方式基本是一樣的。不同的是,單擊任務(wù)鏈接首先進(jìn)入的任務(wù)查看頁面,在任務(wù)查看頁面中單擊“編輯項(xiàng)目”鏈接后才會(huì)轉(zhuǎn)到任務(wù)編輯頁面,如圖7-33,圖7-34和圖7-35所示。圖7-33 任務(wù)列表圖7-34 任務(wù)查看頁面圖7-35 任務(wù)編輯7.2.2 SharePoint Designer工作流的遷移SharePoint Designer設(shè)計(jì)工作流的功能是提供給最終用戶使用的,就如同用SPD定制站點(diǎn)頁面一樣,并沒有提供專門的流程遷移工具。最終用戶可以直接在生產(chǎn)環(huán)境中設(shè)計(jì)流程。對(duì)開發(fā)人員來說,如果在開發(fā)環(huán)境中設(shè)計(jì)好了一個(gè)比較復(fù)雜的流程,需要遷移到生產(chǎn)環(huán)境,必須手工操作,可以參考如下步驟。Step1 確保生產(chǎn)環(huán)境已經(jīng)建好了相應(yīng)的列表,并確保列表的配置跟開發(fā)環(huán)境完全一致,包括列表名稱、列表的所有欄。Step2 用SharePoint Designer打開生產(chǎn)環(huán)境的站點(diǎn),新建一個(gè)與開發(fā)環(huán)境名稱一樣的流程,綁定到同名稱的列表,直接保存。Step3 SharePoint Designer打開開發(fā)環(huán)境的站點(diǎn),將工作流的所有文件復(fù)制到生產(chǎn)環(huán)境。Step4 打開所有工作流的文件,將其中所有的列表項(xiàng)ID替換成生產(chǎn)環(huán)境相應(yīng)的列表項(xiàng)ID。7.3 SharePoint Designer工作流的擴(kuò)展SharePoint Designer提供了常用的很多條件和活動(dòng),但是這些條件和活動(dòng)并不能滿足所有需要。本節(jié)就來講述SPD動(dòng)作和條件的擴(kuò)展。7.3.1 動(dòng)作的擴(kuò)展SPD工作流的動(dòng)作是一個(gè)普通的WF活動(dòng)類。WF活動(dòng)類開發(fā)好以后,部署到GAC中,然后修改SPD工作流的配置文件,注冊(cè)新開發(fā)的活動(dòng)。SPD工作流配置文件路徑為C:Program FilesCommon FilesMicrosoft Sharedweb server extensions12TEMPLATE2052Workflow,2052表示中文語言,英文語言的配置文件路徑為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ī)則來定義的。在ACTIONS配置文件中,將動(dòng)作類的屬性與各種規(guī)則設(shè)計(jì)器關(guān)聯(lián)。以下是“從用戶處收集數(shù)據(jù)”動(dòng)作的聲明。 以下是對(duì)配置文件中主要元素的說明。l ClassName和Assembly分別是動(dòng)作類的全名和所在的程序集。l AppliesTo指定動(dòng)作是應(yīng)用到文檔庫還是列表,允許的值為list和all。l CreatesTask指定是否需要?jiǎng)?chuàng)建任務(wù)項(xiàng)。l Parameters節(jié)點(diǎn)中聲明了WF活動(dòng)類需要跟上下文數(shù)據(jù)進(jìn)行綁定或進(jìn)行設(shè)置的屬性。在Parameter節(jié)點(diǎn)中,Name為WF活動(dòng)類的屬性名,Type為屬性的類型,Direction聲明屬性是需要賦值的還是對(duì)外提供值,有3個(gè)可選值:In、Out、Optional,指定In時(shí)必須給屬性賦值,指定Out時(shí)必須將屬性跟某個(gè)工作流變量進(jìn)行綁定,Optional表示可選項(xiàng),指定Optional時(shí)可以不對(duì)屬性進(jìn)行操作。以下為3個(gè)特殊的Parameter。l _Context:當(dāng)Action類需要訪問工作流數(shù)據(jù)時(shí),必須聲明此屬性,類型是Microsoft.SharePoint.WorkflowActions.WorkflowContext。l _ListId:當(dāng)需要訪問工作流關(guān)聯(lián)的列表時(shí),需要指定此屬性。l _ItemID:當(dāng)需要訪問工作流關(guān)聯(lián)的列表項(xiàng)時(shí),需要指定此屬性。以上的3個(gè)屬性定義在Action類中,然后聲明在配置文件中,工作流運(yùn)行時(shí)引擎會(huì)自動(dòng)為其賦值。RuleDesigner節(jié)點(diǎn)聲明了對(duì)Action類屬性的設(shè)計(jì)規(guī)則。Sentence指定了設(shè)計(jì)時(shí)顯示的提示信息,其中的占位符號(hào)與RuleDesigner中的FieldBind的ID屬性配置,F(xiàn)ieldBind定義了對(duì)某個(gè)屬性的設(shè)計(jì)規(guī)則。Field為屬性的名字,Text為占位符處顯示的文本,ID跟占位符前的數(shù)字對(duì)應(yīng)。DesignerType指定了對(duì)屬性應(yīng)用的設(shè)計(jì)器,系統(tǒng)支持如下的設(shè)計(jì)器。l Survey:生成收集數(shù)據(jù)的表單,表單對(duì)應(yīng)的內(nèi)容類型ID和標(biāo)題需要分別映射到兩個(gè)屬性中。l SinglePerson:?jiǎn)蝹€(gè)用戶或用戶組。l Person:多個(gè)用戶或用戶組。l ParameterNames:工作流變量。l StringBuilder:生成可以跟當(dāng)前工作流數(shù)據(jù)混合的字符串。l Operator:選項(xiàng),用Option指定可選值。如: l fieldNames:列表欄,采用此設(shè)計(jì)器將工作流關(guān)聯(lián)列表的某個(gè)欄和Action類的屬性綁定。l E-mail:郵件設(shè)計(jì)器,設(shè)計(jì)郵件的標(biāo)題、內(nèi)容和收件人等,需要將收件人、抄送人、標(biāo)題、內(nèi)容4個(gè)屬性分別綁定,如: 7.3.2 動(dòng)作擴(kuò)展示例自定義E-mail活動(dòng)系統(tǒng)默認(rèn)的發(fā)送郵件動(dòng)作只能發(fā)送簡(jiǎn)單的文本,很多時(shí)候,用戶希望審批任務(wù)的提醒郵件中帶一個(gè)鏈接,可以直接鏈接到任務(wù)操作頁面。本節(jié)我開發(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ā)送出去的郵件內(nèi)容中帶有任務(wù)操作鏈接。圖7-36 發(fā)送郵件動(dòng)作Step1 新建一個(gè)工作流活動(dòng)項(xiàng)目,如圖7-37所示。將默認(rèn)產(chǎn)生的Activity1類改名為“MailWithTaskLinkActivity”。圖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的基類由SequenceActivity改為Activity。復(fù)核活動(dòng)可以從SequenceActivity類繼承,但是MailWithTaskLinkActivity并不需要使用子活動(dòng)(也就是不是一個(gè)復(fù)核活動(dòng)),所有應(yīng)該從基本的Activity類繼承。Step4 添加對(duì)SharePoint API主要名稱空間的引用,代碼如下所示。using Microsoft.SharePoint;using Microsoft.SharePoint.Utilities;using Microsoft.SharePoint.Workflow;using Microsoft.SharePoint.WorkflowActions;namespace CodeArt.SharePoint.WorkflowActions public class MailWithTaskLinkActivity : Activity public MailWithTaskLinkActivity() Step5 希望MailWithTaskLinkActivity部署成SharePoint Designer的動(dòng)作之后,依然具有系統(tǒng)自帶的發(fā)送郵件活動(dòng)的功能可以動(dòng)態(tài)綁定到收件人、指定郵件主題等,所以需要給MailWithTaskLinkActivity添加相應(yīng)的屬性。添加一個(gè)_Context屬性,代碼如下所示。public static DependencyProperty _ContextProperty = DependencyProperty.Register(_Context, typeof(WorkflowContext), typeof(SendMail); Browsable(true), ValidationOption(ValidationOption.Required), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible), Description(Context) public WorkflowContext _Context get return (WorkflowContext)base.GetValue(_ContextProperty); set base.SetValue(_ContextProperty, value); _Context屬性用來綁定到工作流的上下文,以便獲取工作流運(yùn)行環(huán)境的網(wǎng)站集、網(wǎng)站等信息。這個(gè)屬性的名稱是不能變的,后面的步驟會(huì)講述如何在配置文件中配置這個(gè)屬性。添加一個(gè)_ListId屬性,代碼如下所示。public static DependencyProperty _ListIdProperty = DependencyProperty.Register(_ListId, typeof(string), typeof(MailWithTaskLinkActivity); ValidationOption(ValidationOption.Required) public string _ListId get return (string)base.GetValue(_ListIdProperty); set base.SetValue(_ListIdProperty, value); _ListId屬性用來綁定到工作流的關(guān)聯(lián)的列表ID。添加一個(gè)_ListItem屬性,代碼如下所示。public static DependencyProperty _ListItemProperty = DependencyProperty.Register(_ListItem, typeof(int), typeof(MailWithTaskLinkActivity); ValidationOption(ValidationOption.Required) public int _ListItem get return (int)base.GetValue(_ListItemProperty); set base.SetValue(_ListItemProperty, value); _ListItem屬性用來綁定到工作流的關(guān)聯(lián)的列表項(xiàng)ID。添加一個(gè)To屬性,代碼如下所示。public static DependencyProperty ToProperty = DependencyProperty.Register(To, typeof(ArrayList), typeof(MailWithTaskLinkActivity); ValidationOption(ValidationOption.Required) public ArrayList To get return (ArrayList)base.GetValue(ToProperty); set base.SetValue(ToProperty, value); To屬性是一個(gè)ArrayList類型的集合,在SharePoint Designer進(jìn)行設(shè)計(jì)的時(shí)候可以直接綁定到用戶。同樣,添加郵件的抄送(CC)、暗送(BCC)、主題(Subject)、內(nèi)容(Body)4個(gè)屬性代碼如下所示。public static DependencyProperty CCProperty = DependencyProperty.Register(CC, typeof(ArrayList), typeof(MailWithTaskLinkActivity); /抄送 ValidationOption(ValidationOption.Optional) public ArrayList CC get return (ArrayList)base.GetValue(CCProperty); set base.SetValue(CCProperty, value); public static DependencyProperty BCCProperty = DependencyProperty.Register(BCC, typeof(ArrayList), typeof(MailWithTaskLinkActivity); /暗送 ValidationOption(ValidationOption.Optional) public ArrayList BCC get return (ArrayList)base.GetValue(BCCProperty); set base.SetValue(BCCProperty, value); public static DependencyProperty SubjectProperty = DependencyProperty.Register(Subject, typeof(String), typeof(MailWithTaskLinkActivity); /主題 ValidationOption(ValidationOption.Required) public string Subject get return (string)base.GetValue(SubjectProperty); set base.SetValue(SubjectProperty, value); public static DependencyProperty BodyProperty = DependencyProperty.Register(Body, typeof(String), typeof(MailWithTaskLinkActivity); /郵件內(nèi)容 ValidationOption(ValidationOption.Optional) public string Body get return (string)base.GetValue(BodyProperty); set base.SetValue(BodyProperty, value); Step6 上一步把MailWithTaskLinkActivity需要的所有屬性都添加好了,下面來添加發(fā)送郵件的處理代碼。重載Execute方法,代碼如下所示。 protected override ActivityExecutionStatus Execute(ActivityExecutionContext provider) /獲取到工作流服務(wù) ISharePointService service = (ISharePointService)provider.GetService(typeof(ISharePointService); if (service = null) throw new InvalidOperationException(); try /獲取到列表 SPList list = _Context.Web.Listsnew Guid(_ListId); /獲取到列表項(xiàng) SPListItem item = list.GetItemById(Convert.ToInt32(_ListItem); /計(jì)算任務(wù)查看URL string url = this._Context.Web.Url + _layouts/codeArt/SPTaskRedirect.aspx?ListId= + item.ParentList.ID + &ItemId= + item.ID; /發(fā)送郵件參數(shù) StringDictionary headers = new StringDictionary(); headersto = this.ParseSendTo(this.To); headerssubject = this.Subject; if (null != this.CC) headerscc = this.ParseSendTo(this.CC); if (null != this.BCC) headersbcc = this.ParseSendTo(this.BCC); string body = null; if (null != this.Body) Activity parent = provider.Activity; while (parent.Parent != null) parent = parent.Parent; /處理郵件內(nèi)容中的屬性綁定,Helper是系統(tǒng)自帶的類 body = Helper.ProcessStringField(this.Body, parent, this._Context); body += 點(diǎn)擊此處查看或處理任務(wù); /發(fā)送郵件 service.SendEmail(base.WorkflowInstanceId, false, headers, body); return ActivityExecutionStatus.Closed; catch (Exception ex) /將異常信息記錄到日志列表 service.LogToHistoryList(base.WorkflowInstanceId, SPWorkflowHistoryEventType.WorkflowError, _Context.Web.CurrentUser.ID, TimeSpan.MinValue, MailWithTaskLinkActivity Error, ex.Message + ex.StackTrace, ); return ActivityExecutionStatus.Faulting; 發(fā)送郵件活動(dòng)一般放置在從用戶處收集數(shù)據(jù)活動(dòng)之前,那么在發(fā)送郵件活動(dòng)執(zhí)行的時(shí)候?qū)徟蝿?wù)是沒有創(chuàng)建的,這時(shí)候無法獲取任務(wù)的路徑

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論