




















一起使用SharePoint工作流和BCS可以实现很多复杂的业务场景。
比如,有一个简单的费用报销流程,客户希望:仅当总费用超过某个限额时,工作流会把费用报告发送给审批者;如果低于这个限额,则自动审批通过。而每个人的限额是不同的,每个人的限额可以从某个外部系统中获取到。我们可以考虑利用BCS获取到这个数据。如果这个数据是通过外部数据列表暴露在SharePoint的,工作流就可以查询到这个数据。
一般来讲,我们有2种工具来设计BCS工作流。一是采用SharePoint Designer 2010提供的开箱即用的Activity来设计,再有,就是使用Visual Studio。
设计BCS工作流时,有几个点非常重要。
工作流不能关联到外部数据列表
在SharePoint 2010里,工作流不能直接关联到外部数据列表。这是因为外部数据不是保存在SharePoint里,所以当列表条目发生变化时无法通知给工作流。但这并不意味着外部数据无法使用工作流。我们可以创建一个站点工作流,或者为某个常规列表(如文档库)创建一个工作流,并让这个列表从外部数据列表读取/更新数据。当然,我们也可以将外部数据列表项作为SPD任务处理的目标,尽管任务链接总是外部数据列表项没有标题。
访问BCS的工作流必须以服务账号运行,即使在身份模拟步骤下
工作流会一直以服务账号来运行(一般是IIS的应用程序池账号),并且只有当使用Secure Store Service或者RevertToSelf(因为安全原因,默认情况下被关闭)时才支持工作流。这样的限制是为了保护SharePoint受到恶意模型/开发人员的攻击。因为对后台系统的访问总会以某个服务账号触发,所以我们无法跟踪到底是谁修改了数据。要解决这个问题,我们可以让工作流把SPUser的名称传递到外部数据列表的某个列,或者是某个使用BDC API的自定义Activity,但这仅仅是为了信息追踪的目的而不是一个可靠的安全保护措施。
使用SPD List Item Activity和使用外部数据列表是非常类似的,2者最大的差别是对于SPD List Item Activity,我们识别它时需要使用其Identifying列而不是ID。
接下来我们开始设计前面提及的费用报销工作流。
在SPD中创建外部内容类型,命名为SafeLimit;
创建一个名称为ExpenseReports的文档库;
按钮 创建外部数据列表查询;
按钮,在新对话框中选择"Current Item",然后再选择EmployeeID。 完成上面的操作后,结果如下图。现在可以选择SafeLimit变量,并且在工作流中使用它来作决策了。
备注:当点击"Ok"后,会有一个如下的警示信息。这对于外部数据列表来讲是正常的,无需在意。它只是告诉我们如果外部数据列表项目没有唯一值,那么系统将返回第一个找到的项目。
如果需要从外部数据列表中读取一小部分列,并且在工作流中使用它们。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。