SharePoint 2010: 设计BCS工作流
一起使用SharePoint工作流和BCS可以實現很多復雜的業務場景。
為什么使用BCS工作流?
比如,有一個簡單的費用報銷流程,客戶希望:僅當總費用超過某個限額時,工作流會把費用報告發送給審批者;如果低于這個限額,則自動審批通過。而每個人的限額是不同的,每個人的限額可以從某個外部系統中獲取到。我們可以考慮利用BCS獲取到這個數據。如果這個數據是通過外部數據列表暴露在SharePoint的,工作流就可以查詢到這個數據。
支持的工具
一般來講,我們有2種工具來設計BCS工作流。一是采用SharePoint Designer 2010提供的開箱即用的Activity來設計,再有,就是使用Visual Studio。
設計時需要牢記的幾點
設計BCS工作流時,有幾個點非常重要。
在SharePoint 2010里,工作流不能直接關聯到外部數據列表。這是因為外部數據不是保存在SharePoint里,所以當列表條目發生變化時無法通知給工作流。但這并不意味著外部數據無法使用工作流。我們可以創建一個站點工作流,或者為某個常規列表(如文檔庫)創建一個工作流,并讓這個列表從外部數據列表讀取/更新數據。當然,我們也可以將外部數據列表項作為SPD任務處理的目標,盡管任務鏈接總是外部數據列表項沒有標題。
工作流會一直以服務賬號來運行(一般是IIS的應用程序池賬號),并且只有當使用Secure Store Service或者RevertToSelf(因為安全原因,默認情況下被關閉)時才支持工作流。這樣的限制是為了保護SharePoint受到惡意模型/開發人員的攻擊。因為對后臺系統的訪問總會以某個服務賬號觸發,所以我們無法跟蹤到底是誰修改了數據。要解決這個問題,我們可以讓工作流把SPUser的名稱傳遞到外部數據列表的某個列,或者是某個使用BDC API的自定義Activity,但這僅僅是為了信息追蹤的目的而不是一個可靠的安全保護措施。
如何設計BCS工作流?
使用SPD List Item Activity和使用外部數據列表是非常類似的,2者最大的差別是對于SPD List Item Activity,我們識別它時需要使用其Identifying列而不是ID。
使用SPD Activity構建安全限額工作流
接下來我們開始設計前面提及的費用報銷工作流。
- 在SPD中創建外部內容類型,命名為SafeLimit;
- 有2個字段:EmployeeID和安全限額的值
- 使用SafeLimit外部內容類型,創建外部數據列表,命名為SafeLimits;
- 創建一個名稱為ExpenseReports的文檔庫;
- 添加一個EmployeeID的新列
- 在SPD中,打開ExpenseReports文檔庫;
- 點擊"New List Workflow";
- 為工作流起一個名稱,并且輸入描述信息,然后點擊下一步;
- 添加一個"Set Workflow Variable"的動作;
- 點擊工作流變量鏈接,點擊"Create New Variable",命名為 SafeLimit;
- 點擊"Value",然后 點擊按鈕 創建外部數據列表查詢;
- 選擇SafeLimits外部數據列表作為數據源;
- 選擇顯示Safe Limit的字段Limit;
- 選擇EmplyeeID;
- 點擊對話框中的按鈕,在新對話框中選擇"Current Item",然后再選擇EmployeeID。
完成上面的操作后,結果如下圖。現在可以選擇SafeLimit變量,并且在工作流中使用它來作決策了。
備注:當點擊"Ok"后,會有一個如下的警示信息。這對于外部數據列表來講是正常的,無需在意。它只是告訴我們如果外部數據列表項目沒有唯一值,那么系統將返回第一個找到的項目。
小提示:關于Activity用法和常見錯誤
什么情況下使用這些Activity?
- 如果需要從外部數據列表中讀取一小部分列,并且在工作流中使用它們。
- 從同一個外部數據列表中讀取多個值并不會緩沖該條目。正因為如此,Activity會對每個要讀取的列首先調用Read List方法,然后再調用Read Item方法。所以,如果我們要讀取一個包含1000個條目的列表的10個屬性值,系統需要發起20個對BDC的調用,并且最終從后臺系統中讀取到20010個條目。
- 如果需要創建、更新或者刪除外部數據列表的一小部分條目。
需要牢記在心的內容
- 如果要查找某一個條目,如某個員工的辦公室編號,但系統返回的值是Null,我們無法確定是返回了0個條目還是1個條目,我們只知道值是Null,這時候我們該怎么辦呢?我們可以首先確認該條目是否存在,如:根據員工 姓名或ID找到該員工。如果該員工存在,然后再找到其辦公室編號;如果是Null,那我們就知道該員工沒有辦公室編號了。
- 在外部數據列表中創建新的條目后,從同一工作流對該條目的任何修改都必須通過Create List Item方法返回的BDC Identity反饋到該條目。如果嘗試通過從所有列中找值的方式來找到該條目,肯定會導致失敗。
- 絕對無法從已有的條目中讀取BDC Identity的值,必須通過找非BDC Identity列的值方式才可以找到已有的條目。
轉載于:https://www.cnblogs.com/dwang/archive/2010/06/19/1761002.html
總結
以上是生活随笔為你收集整理的SharePoint 2010: 设计BCS工作流的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用windbg排查一个内存溢出的问题
- 下一篇: 栀子花开了,很香