sharepoint 工作流setpbystep_第1頁
sharepoint 工作流setpbystep_第2頁
sharepoint 工作流setpbystep_第3頁
sharepoint 工作流setpbystep_第4頁
sharepoint 工作流setpbystep_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、SharePoint 2010工作流SetpByStep在 SharePoint 2010 改進(jìn) Paul Andrew SharePoint 2007 引入的協(xié)作應(yīng)用程序的工作流,許多組織都有會通過移動到 SharePoint 工作流的手動過程。 為什么在軟件設(shè)計中使用工作流,我們將主要原因是管理長時間運行的進(jìn)程。 而計算機硬件設(shè)計完成進(jìn)程作為可能的等待完成表單的人快速做出決策,或共享的外部的操作的結(jié)果總是花費更長的時間比以使 CPU 處于繁忙狀態(tài)所需的毫秒響應(yīng)時間。 SharePoint 工作流是軟件的自動進(jìn)行這些手動流程,以前所需的紙張或使用復(fù)雜可以記錄和監(jiān)視長時間運行的任何活動的理想的

2、方法。 Windows 流 Foundation 在 2005 年第一次引入和最初包含在 Microsoft.NET Framework 3.0 中。 今天,SharePoint 2010 提供了許多新改進(jìn)的工作流開發(fā)人員,并在 SharePoint 2007 中的工作流的普及上生成。 對于長時間運行人類工作流位置我們經(jīng)常等待完成任務(wù)的人員建議 SharePoint 工作流。 本文將向您介紹關(guān)鍵概念并描述了可用新的功能。 首先,我將談?wù)?SharePoint 2010 中新功能的工作流開發(fā)人員,我將在然后遍歷幾個新用戶方案。 工作流模型設(shè)計工具改進(jìn) SharePoint 2010 提供更好地適

3、合那些創(chuàng)建和維護(hù)工作流模型的需求加工中更多的選項。 工作流開發(fā)的工具包括 Visual Studio 2010、 SharePoint 設(shè)計器 2010年和 Visio 2010。 應(yīng)當(dāng)注意的是 SharePoint 2010 需要.net Framework 3.5。 下一個版本的.net Framework 4.0 目前正在開發(fā)中但產(chǎn)品時間線意味著 SharePoint 2010 不是依賴于它。 visual Studio 2010 包括許多加工改進(jìn)為專門針對工作流項目的 SharePoint 項目。 新的 SharePoint 解決方案 (WSP) 包裝可幫助部署您輕松地到將允許您將 A

4、SPX 工作流啟動和關(guān)聯(lián)表單添加到 Visual Studio 2010 工作流項目 ( 的 圖 1) 下的 SharePoint 服務(wù)器的工作流。 在本文中稍后介紹的一個演練演練中我將向您展示如何添加一個啟動窗體。 圖 1 的 Visual Studio 2010 SharePoint 項目模板 SharePoint 設(shè)計器 2010年還具有新的圖形化的工作流設(shè)計器設(shè)計工作流和直接到 SharePoint 部署它們。 它還之前可以使用作為原型設(shè)計工具中 Visual Studio 2010 進(jìn)一步開發(fā)工作流。 在設(shè)計器 2010 SharePoint 中的另一改進(jìn)是它現(xiàn)在允許您編輯附帶 Sh

5、arePoint 出的-更改工作流。 它也將使用 InfoPath 表單如果安裝了 InfoPath 或在 Data Form Web Part 如果未安裝 InfoPath ; 以前,僅 ASPX 窗體已由 SharePoint 設(shè)計器 2007年。 現(xiàn)在可以使用 InfoPath 表單,因為它可以很容易非常編輯這些稍后使用以提高它們的 InfoPath 表單。 如果指定工作流中的新列它們將自動添加到列表中將與工作流相關(guān)聯(lián)的架構(gòu)。 這些稱為關(guān)聯(lián)列,并且可以在整個 SharePoint 設(shè)計器工作流中使用。 可以將用戶配置文件數(shù)據(jù)綁定到可以獲取有關(guān) SharePoint 用戶配置文件的信息使工

6、作流中的屬性。 渚嬪,您可以查找為審批直接管理器的名稱。 SharePoint 設(shè)計器 2010年包括一個新的任務(wù)進(jìn)程設(shè)計器創(chuàng)建工作流中的活動,但可以靈活地管理所有內(nèi)的一次活動在審批流程的方式。 這包括定義定義審批要求和如果基礎(chǔ)文檔更改在審批期間發(fā)生的情況的語義的委派的升級進(jìn)程。 工作流模型進(jìn)行進(jìn)一步編輯在 SharePoint 設(shè)計器 2010 Visio 2010 中創(chuàng)建。 Visio 2010 支持業(yè)務(wù)流程建模表示法。 它還支持 sub-processes 和分解關(guān)系圖和驗證分析以確保正確構(gòu)造一個關(guān)系圖的容器。 在 SharePoint 2010 中的新工作流模型 站點工作流 站點工作流

7、釋放從要求列表項目或文檔項運行針對工作流工作流開發(fā)人員。 這可用于當(dāng)實現(xiàn)工作流過程不能啟動作為列表項或文檔的結(jié)果。 這是開發(fā)人員將只是要添加工作流創(chuàng)建虛擬的列表和項以這樣一個常見方案。 在可視化的 Studio 2010 您只需選擇網(wǎng)站流 的 圖 2 所示創(chuàng)建工作流項目項時。 圖 2 的 站點/列表工作流對話框頁 可以通過從 SharePoint 中網(wǎng)站操作菜單中選擇網(wǎng)站工作流來獲取已激活的網(wǎng)站工作流。 它可以顯示工作新流可以啟動任何正在運行的網(wǎng)站的工作流和已完成的工作流。 因為站點工作流 dont 具有列表項目或文檔從啟動,它們必須手動啟動通過 SharePoint 用戶界面或通過 Shar

8、ePoint API。 可重用聲明式工作流 在 SharePoint 設(shè)計器 2010,您可以創(chuàng)建可重用的聲明性工作流。 在 SharePoint 2007 在 SharePoint 設(shè)計器中創(chuàng)建一個工作流模型只可能與一個列表相關(guān)聯(lián)。 這些可重用的工作流不依賴于特定的列表,但可以與任何列表相關(guān)聯(lián)。 可重復(fù)使用工作流設(shè)計,并將其與多個列表相關(guān)聯(lián)。 此外,另存為模板命令可用于創(chuàng)建一個包含可重用的工作流可以被移動到另一個 SharePoint 服務(wù)器或者 Visual Studio 2010 到其中的 WSP 文件。 在 SharePoint 設(shè)計器中,這意味著您 dont 具有訪問數(shù)據(jù),因為沒有特

9、定的列表結(jié)構(gòu)已連接的列表域的訪問權(quán)限。 運行庫和宿主改進(jìn) 高特權(quán)工作流 在 SharePoint 2007 中工作流作為登錄用戶的身份運行。 在 SharePoint 2010 具有高特權(quán)可以指定的帳戶運行工作流,以使其具有附加的工作流,需要的權(quán)限 (請參閱 的 圖 3)。 創(chuàng)建工作流在 SharePoint 設(shè)計器 2010年時, 可以添加個別步驟,使其運行為而不是登錄的用戶的工作流的作者。 圖 3 的 顯示高的特權(quán)模擬步驟的 SharePoint 設(shè)計器工作流 SPTimer 位置 SharePoint 根據(jù)上次的操作的兩個位置之一中執(zhí)行工作流實例。 如果工作流中的最后一個操作正在等待用戶

10、輸入,工作流繼續(xù)執(zhí)行上 Web 前端用戶完成該輸入的位置。 如果工作流續(xù)從延遲計時器或從其他地方接收事件,則它將執(zhí)行 SPTimer 服務(wù)中。 使用 SharePoint 管理中心中的新選項,您現(xiàn)在可以設(shè)置首選的服務(wù)器 SPTimer 服務(wù)運行的位置。 若要執(zhí)行此操作單擊 SharePoint 管理中心的應(yīng)用程序管理部分的管理內(nèi)容數(shù)據(jù)庫菜單中。 然后單擊上內(nèi)容的數(shù)據(jù)庫和向下滾動到首選服務(wù)器的計時器作業(yè)的設(shè)置 (如 的 圖 4 所示)。 可以手動停止 SPTimer 服務(wù) dont 希望其運行的任何服務(wù)器上。 圖 4 的 首選服務(wù)器的工作流計時器作業(yè)的設(shè)置 工作流消息的改進(jìn) SharePoint

11、 2010 添加列表基于工作流的四個新工作流事件接收器。 啟動、 已啟動、 Postponed 和已完成 (如 的 圖 5 所示),都是在四個工作流事件接收器可用。 這些是類似于其他 SharePoint 事件接收器和它們在響應(yīng)該事件在服務(wù)器上執(zhí)行代碼。 若要使開發(fā)更容易,Visual Studio 2010 包括使使用相當(dāng)簡單這些事件的事件接收器的項目類型。 新的事件將附加到特定的列表,并觸發(fā)與該列表這意味著這些事件接收器 cant 激發(fā)上站點的工作流相關(guān)聯(lián)的工作流實例在發(fā)生事件時。 事件接收器還要求列表。 圖 5 的可以在 Visual Studio 2010 能生成的事件接收器 Shar

12、ePoint 2007 進(jìn)行簡單涉及在工作流,中的人,但被難發(fā)送和接收與外部系統(tǒng)的郵件。 建議的方法就是使用任務(wù)項來將消息發(fā)送到外部 Web 服務(wù)使用的系統(tǒng)并具有外部的系統(tǒng)更新任務(wù),使其返回的結(jié)果。 SharePoint 2010 添加可插入的工作流服務(wù)的支持。 這些將是為 Windows 流基礎(chǔ) (WF) 開發(fā)人員所熟悉,并且通過創(chuàng)建包含方法和事件接口定義。 此接口連接到一對稱為 CallExternalMethod 和 HandleExternalEvent 的活動。 一種工具附帶 WF 在.NET Framework Framework中稱為 WCA.exe 生成強類型用于發(fā)送和接收基于

13、該接口上的活動。 這些生成的活動可以也使用 SharePoint 工作流中。 它們不需要作為屬性設(shè)置接口,而是可以被拖動直接從工具箱到工作流設(shè)計曲面圖。 由工作流程集成了與 SharePoint 工作流服務(wù)代碼加載到 gac 中的訪問。 它需要從 SPWorkflowService 基類繼承,并且它需要在 web.config 中引用。 將使用這些新的活動可以異步消息發(fā)送到外部系統(tǒng)從 SharePoint 工作流內(nèi)右。 我將研究創(chuàng)建和使用在第二個演練本文中稍后介紹的這些活動。 本演練的構(gòu)建簡單的工作流在 Visual Studio 2010 在 SharePoint 工作流中關(guān)鍵的事情是交互人

14、員,以便最簡單的做法是將任務(wù)分配給某個人,并等待他們響應(yīng)。 以下內(nèi)容,則顯示新的 Visual Studio 2010 SharePoint 工具如何使該任務(wù)分配真正易于生成。 步驟 1-創(chuàng)建新的 SharePoint 順序工作流項目 創(chuàng)建新的 SharePoint 工作流項目是很容易的。 在 的 圖 1 所示以前,請選擇新的項目模板選擇器上的順序工作流。 這還可以使用狀態(tài)機工作流樣式來完成。 新的工作流項目向?qū)б呀?jīng)有四頁。 第一個是 SharePoint 的所有工具項目模板都具有共同的頁面,您希望使用部署和調(diào)試您的解決方案, 的 圖 6 所示位置標(biāo)識本地的 SharePoint 網(wǎng)站的 UR

15、L。 圖 6 的 首頁的新建的工作流項目向?qū)?第二個是一個頁,其中提供工作流的名稱,選擇是否將其與列表或作為站點關(guān)聯(lián)。 前面 的 圖 2 顯示此頁。 第三頁是您決定如果 Visual Studio 將自動為您關(guān)聯(lián)工作流,或者可以在已部署后手動執(zhí)行。 如果您選擇將保留選中框,它已為列表 (如果您以前選擇基于列表的工作流) 相關(guān)聯(lián)、 工作流歷史記錄列表,以使用和任務(wù)列表用于選擇選項 (請參閱 圖 7) 。 通常,歷史記錄和任務(wù)列表中不需要更改。 圖 7 的 第三頁的新建的工作流項目向?qū)?第四個和最后一頁,可以選擇如何 (請參閱 的 圖 8) 啟動工作流。 您不應(yīng)取消選擇所有三個這些或您的工作流將會

16、很難進(jìn)行啟動。 對于站點工作流可以只選擇手動啟動工作流。 為基于列表的工作流也可以選擇在創(chuàng)建文檔時啟動工作流實例或更改文檔時啟動。 圖 8 的 第四頁的新建的工作流項目向?qū)?新的空白的工作流模型如下所示 Visual Studio 2010 在設(shè)計圖面中的 圖 9。 激活的工作流活動從 HandleExternalEvent 活動派生,并提供了從 SharePoint 到工作流實例初始化數(shù)據(jù)。 我將稍后涉及多個 HandleExternalEvent 活動。 圖 9 的 顯示的 WorkflowActivated 活動的默認(rèn)空白工作流 步驟 2 發(fā)起表單添加到該工作流 當(dāng)它們在啟動工作流時,可

17、以向用戶顯示一個啟動窗體。 它允許工作流,以獲取在開始之前收集參數(shù)。 這可以添加在 Visual Studio 2010 輕松地在工作流項目在解決方案資源管理器中右鍵單擊,然后選擇添加然后新的項,如 的 圖 10 所示。 選擇工作流啟動表單模板和新的窗體是自動與工作流相關(guān)聯(lián)。 它是您編輯 HTML 中的 ASPX 窗體 (請參閱 的 圖 11)。 圖 10 添加工作流啟動表單 調(diào)用 GetInitiationData 的一種方法需要在代碼隱藏 ASPX 文件中進(jìn)行編輯。 此方法只返回一個字符串 ; 如果多個值則建議您序列化它們到 XML 片段返回它們之前。 一旦工作流實例正在運行,可以很容易地

18、獲得對此字符串只是通過引用 workflowProperties.InitiationData。 多個值需要它們時,序列化 GetInitiationData 中如果將 de-serialized 從 XML 片段。 圖 11 的 默認(rèn)工作流 ASPX 啟動窗體 啟動窗體將添加一個文本域,然后從 GetInitiationData 方法返回該字段。 在下面的代碼中標(biāo)記添加第一個 asp: 內(nèi)容標(biāo)記內(nèi), 就像這樣: GetInitiationData 方法已存在,只需要有代碼添加到返回 MyID.Text 屬性。 下面的代碼顯示了已更新的方法代碼: private string GetIniti

19、ationData() / TODO: Return a string that contains the initiation data that will be passed to the workflow. Typically , this is in XML format. return MyID.Text;第 3 步 添加工作流日志活動 LogToHistoryList 活動是非常易于使用。 創(chuàng)建每個工作流實例有可以在 SharePoint 用戶界面中顯示一個歷史記錄列表。 活動采用單個字符串參數(shù),并將項添加到該列表中。 它可用于在生產(chǎn)中向用戶報告的工作流實例狀態(tài)。 只需將 LogT

20、oHistoryList 活動從工具箱拖動到工作流設(shè)計和說明屬性設(shè)置 (請參閱 的 圖 12)。 圖 12 的 顯示 SharePoint 工作流活動的 Visual Studio 工具箱 在工作流中的屬性稱為依賴項屬性。 這些在運行時綁定到另一個活動屬性、 字段、 屬性或方法。 此過程通常稱為布線,它是什么允許即使它們 dont 具有特定類型信息彼此在編譯時,一起工作流中的活動。 在 Visual Studio 中屬性窗口中的每個屬性有線類的字段或在工作流類的類屬性。 字段是最容易創(chuàng)建和彈出布線的向上為創(chuàng)建新字段、 創(chuàng)建新的屬性或向現(xiàn)有的布線允許工作流屬性對話框。 圖 13 的 要創(chuàng)建的字段

21、綁定的依賴項屬性 圖 13 顯示添加新字段具有默認(rèn)名稱。 以下內(nèi)容顯示到為該屬性設(shè)置為工作流啟動數(shù)據(jù)活動 MethodInvoking 的事件處理程序添加的代碼: public String logToHistoryListActivity1_HistoryDescription1 = default(System.String);private void logToHistoryListActivity1_MethodInvoking(object sender, EventArgs e) logToHistoryListActivity1_HistoryDescription1 = wor

22、kflowProperties.InitiationData;因為此屬性 doesnt 連接活動,之間,但若要了解有關(guān)依賴項屬性的一點是很好的簡單活動,實際上可以直接在代碼中設(shè)置 HistoryDescription 屬性。 第 4 步 添加 CreateTask 活動 此下一步是稱為 SharePoint 任務(wù)項的人工工作流程交互的主要部分。 創(chuàng)建任務(wù)、 分配給一個人,然后等待人對該任務(wù)所做的更改。 CreateTask 活動必須拖動到工作流程設(shè)計圖面上,并將它們?nèi)缓笈渲昧怂斜匦璧膶傩浴?圖 14 顯示 CreateTask 的屬性窗口,只需后對其拖動到活動。 圖 14 的 顯示的 Cre

23、ateTask 活動的屬性窗格 首先需要在此處為該任務(wù)的相關(guān)標(biāo)記。 相關(guān)標(biāo)記用于在工作流中的消息相關(guān)。 它提供了使任務(wù)對象特定的工作流實例中和在 SharePoint 中的工作流運行庫之間映射的唯一標(biāo)識符。 這用于,以便 SharePoint 接收工作流實例的消息時它可以找到正確的工作流實例內(nèi)正確的任務(wù)。 必須配置 CorrelationToken 屬性,并且它不推薦使用該 WorkflowToken 的任務(wù),雖然這 isnt 禁止在工具。 輸入 TaskToken 并按輸入的新名稱的相關(guān)標(biāo)記。 然后展開 (+) 出現(xiàn),并單擊移到右側(cè) OwnerActivityName 的拖放并選擇工作流符號

24、。 必須配置在 TaskId 以及新的 GUID 指定的任務(wù) id。 這是通過選擇 TaskId 屬性,然后單擊該 以調(diào)出屬性編輯器的省略號。 單擊綁定到新的成員選項卡,選擇創(chuàng)建的字段,然后單擊確定。 相同必須完成 TaskProperties 屬性通過再次選擇屬性,單擊省略號上添加新字段。 接下來,雙擊新的 CreateTask 活動,調(diào)出 createTask1_MethodInvoking 處理程序代碼,并在代碼中設(shè)置屬性工作流在設(shè)計圖面上。 新的任務(wù)必須給定一個標(biāo)題和對于良好的度量值將任務(wù)描述設(shè)置到字符串中我收到從啟動窗體。 一旦所有這些屬性已被將設(shè)置這是添加的代碼: public G

25、uid createTask1_TaskId1 = default(System.Guid);public SPWorkflowTaskProperties createTask1_TaskProperties1 = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();private void createTask1_MethodInvoking(object sender, EventArgs e) createTask1_TaskId1 = Guid.NewGuid(); createTask1_TaskProperti

26、es1.Title = Hello; createTask1_TaskProperties1.Description = workflowProperties.InitiationData;步驟 5 添加該 OnTaskChanged 和 CompleteTask 活動 使用該時來等待的任務(wù)的多個更改,直到看到所需的更改的活動。 在 While 活動必須包含如 OnTaskChanged 活動的另一個活動。 偵聽活動還可用于通過添加偵聽分支內(nèi)的實際事件接收器活動與一個偵聽活動偵聽的一次多個事件。 鎴栬 咃,您可以只是等待,直到與 OnTaskDeleted 活動中刪除任務(wù)。 常見的要求是逐步升

27、級或等待事件超時。 這是通過使用偵聽活動偵聽這兩個任務(wù)使用延遲活動更改消息和計時器消息。 第一條消息,以接收的任何一個包含該工作流和其他活動停止等待活動簡歷。 延遲活動在超時發(fā)生時發(fā)送一條消息。 有很多上面描述的選項,但最簡單是使用 OnTaskChanged 將等待任務(wù)項的任何更改,然后繼續(xù)。 要配置該 OnTaskChanged,需要在 CorrelationToken 和 TaskId 屬性向上連結(jié)到作為該 CreateTask 相同的域。 上次,添加 CompleteTask 活動和重新設(shè)置 CorrelationToken 和 TaskId 屬性。 的 圖 15 所示等待消息的活動是

28、綠色的而將消息發(fā)送的活動是藍(lán)色。 這是在 SharePoint 工作流的整個內(nèi)保持一致。 圖 15 的 已完成的簡單任務(wù)流模型 步驟 6 部署和測試工作流 現(xiàn)在工作流是幾乎完整的因此按 f5 鍵,并等待部署。 按 F5 將編譯工作流、 打包到一個 WSP 的工作流、 到 SharePoint 部署該 WSP、 激活 SharePoint 功能、 Visual Studio 2010 調(diào)試器附加到 SharePoint 并啟動 Internet Explorer 與 SharePoint 網(wǎng)站。 一旦出現(xiàn)在 SharePoint 網(wǎng)站,請從網(wǎng)站操作菜單上選擇網(wǎng)站工作流。 您將看到所有的站點工作流

29、,并且您可以單擊上您啟動它。 選中后它將會看到您的工作流啟動表單 的 圖 16 所示。 圖 16 的 工作流啟動表單 其他改進(jìn)可以添加到此基本初學(xué)者工作流模型使用內(nèi)容類型定義分配給一個人使用電子郵件以通知用戶他們已被指派一個任務(wù)的任務(wù)和甚至使用來創(chuàng)建更復(fù)雜的窗體為完成電子郵件中或聯(lián)機用戶的 InfoPath 表單等。 本演練的構(gòu)建可插入的工作流服務(wù) 新 SharePoint 2010 中是可插入的工作流服務(wù)添加到 SharePoint 能力。 這始終已可能在 Windows 流基礎(chǔ),但 SharePoint 承載工作流運行時已鎖定狀態(tài),以前 didnt 允許這樣。 主要可插入的工作流服務(wù)被設(shè)計

30、為發(fā)送和接收消息超出了工作流實例。 但是,它們也是有價值的任何長時間運行系統(tǒng)操作 (如長時間運行計算。 這是工作流運行時將使用的消息傳遞歸納作為管理長時間運行的工作機制。 只需執(zhí)行的活動內(nèi)運行很短的工作,并長時間運行操作已完成或郵件接收,則表示一個人完成任務(wù)之前將一直掛起工作流。 因此等待響應(yīng)人員,時工作流實例被凍結(jié)并不會占用 CPU 或 RAM 執(zhí)行的服務(wù)器上的資源。 (凍結(jié)只需工作流實例的狀態(tài)寫入到數(shù)據(jù)庫記錄中 rehydrated 的回發(fā),并稍后繼續(xù)上一方法的方法。 所有類型的長時間運行的工作流由都處理相同的方式。 首先,它啟動長時間運行的工作或發(fā)送一條消息,然后它掛起工作流直到完成長時

31、間運行的工作或收到響應(yīng)。 相關(guān)標(biāo)記用于確保收到響應(yīng)時恢復(fù)正確的工作流實例。 作為一個示例考慮兩個常見的長時間運行的工作示例。 一個示例是同步的 Web 服務(wù)請求位置調(diào)用方將被阻塞,直到該通道上收到響應(yīng)。 這不是適合于工作流活動內(nèi)運行。 工作流服務(wù)需要等待 Web 服務(wù)調(diào)用完成,然后為發(fā)送的郵件重新與響應(yīng)一起工作流實例。 另一個示例是需要運行一個 CPU 密集的工作項,但因為它可能要花較長的時間比第二個需要運行之外的工作流活動。 再次,您可以使用工作流服務(wù)并在工作流服務(wù)執(zhí)行 CPU 密集的工作項中創(chuàng)建線程。 回它完成后,新的線程可以發(fā)送消息。 這些示例的兩個實現(xiàn)具有相同的模式。 下面的演練演示如

32、何創(chuàng)建新的 SharePoint 順序流和調(diào)用因素來確定多少素數(shù)有下 100,000,000 素數(shù)一個可插入的工作流服務(wù)。 此項工作要花很長時間執(zhí)行活動的主行內(nèi)。 第 1 步 創(chuàng)建可插入的工作流服務(wù) 在 Visual Studio 2010 創(chuàng)建可插入的工作流服務(wù),需要作為接口和類在項目中的實現(xiàn)服務(wù)。 圖 17 顯示了一個可插入的工作流服務(wù),它可以將添加到您的項目稱為 MyService.cs 新的類文件中的一個示例。 在代碼中接口定義是在 IMyService 中,該接口的實現(xiàn)類 MyService 和 MessageOut 方法中單獨的線程上通過匿名方法委托運行大多數(shù)邏輯。 在單獨的線程中

33、對 RaiseEvent 調(diào)用將返回到等待 HandleExternalMessage 活動發(fā)送郵件。 圖 17 的 可插入的工作流服務(wù) / Interface declarationExternalDataExchangepublic interface IMyService event EventHandler MessageIn; void MessageOut(string msg);/ Arguments for event handlerSerializablepublic class MyEventArgs : ExternalDataEventArgs public MyEve

34、ntArgs(Guid id) : base(id) public string sAnswer;/ Class for stateclass FactoringState public SPWeb web;public Guid instanceId; public FactoringState(Guid instanceId, SPWeb web) this.instanceId = instanceId; this.web = web; / Interface implementationclass MyService : Microsoft.SharePoint.Workflow.SP

35、WorkflowExternalDataExchangeService, IMyService public event EventHandler MessageIn; public void MessageOut(string msg) ThreadPool.QueueUserWorkItem(delegate(object state) FactoringState factState = state as FactoringState; DateTime start = DateTime.Now; int topNumber = 100000000; BitArray numbers =

36、 new System.Collections.BitArray(topNumber, true); for (int i = 2; i topNumber; i+) if (numbersi) for (int j = i * 2; j topNumber; j += i) numbersj = false; int primes = 0; for (int i = 2; i topNumber; i+) if (numbersi) primes+; string sAnswer = Found + primes + in + Math.Round(DateTime.Now.Subtract

37、(start).TotalSeconds, 0) + seconds; / Send event back through CallEventHandler RaiseEvent(factState.web, factState.instanceId, typeof(IMyService), MessageIn, new object sAnswer ); , new FactoringState(WorkflowEnvironment.WorkflowInstanceId, this.CurrentWorkflow.ParentWeb); / Plumbing that routes the

38、 event handler public override void CallEventHandler(Type eventType, string eventName, object eventData, SPWorkflow workflow, string identity, System.Workflow.Runtime.IPendingWork workHandler, object workItem) var msg = new MyEventArgs(workflow.InstanceId); msg.sAnswer = eventData0.ToString(); msg.W

39、orkHandler = workHandler; msg.WorkItem = workItem; msg.Identity = identity; / If more than one event - youd need to switch based on parameters this.MessageIn(null, msg); public override void CreateSubscription(MessageEventSubscription subscription) throw new NotImplementedException(); public override void DeleteSubscription(Guid subscriptionId) throw new NotImplementedException(); 步驟 2 更新 web.config 一旦在構(gòu)造可插入的工作流服務(wù),它需要使用 SharePoint 中運行的工作流運行時進(jìn)行注冊。 這是通過編

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論