惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Full Disclosure
博客园 - 三生石上(FineUI控件)
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
L
LINUX DO - 最新话题
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
宝玉的分享
宝玉的分享
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Visual Studio Blog
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
月光博客
月光博客
博客园 - 叶小钗
D
Docker
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tailwind CSS Blog
D
DataBreaches.Net
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog RSS Feed
量子位
美团技术团队
Vercel News
Vercel News
Y
Y Combinator Blog
IT之家
IT之家
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
腾讯CDC
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
罗磊的独立博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
The Register - Security
The Register - Security
博客园 - 司徒正美
N
Netflix TechBlog - Medium
S
Schneier on Security
博客园 - 聂微东
U
Unit 42
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
雷峰网
雷峰网
Latest news
Latest news

博客园 - 老猴

SharePoint 2010问题集锦 (2011.2) SharePoint 2010问题集锦 (2011.1) Excel REST使用方法 微软企业生产力大学培训课程_8月 招聘:赴微软工作SharePoint技术专家(V-,北京) SharePoint 2010: 如何使用Word Automation Services开发应用 SharePoint 2010: 对于开发人员 SharePoint 2010: 使用SharePoint的Theming引擎 SharePoint 2010: Claims-based Authentication SharePoint 2010: 学习资源 SharePoint 2010: 使用Visio Services展示SCOM数据 SharePoint 2010: 使用BCS构建解决方案 WSS3.0 Server Admin Template vs Site Admin Template 安装BSM2005时的错误 K2.net工作流引擎在智能设备上的应用 如何使用K2.Net 2003设计流程 K2与SharePoint 2003集成特征 K2.Net 2003中的5种业务规则(Rules) 感受K2.Net 2003工作流解决方案
SharePoint 2010: 设计BCS工作流
老猴 · 2010-06-19 · via 博客园 - 老猴

一起使用SharePoint工作流和BCS可以实现很多复杂的业务场景。

为什么使用BCS工作流?

比如,有一个简单的费用报销流程,客户希望:仅当总费用超过某个限额时,工作流会把费用报告发送给审批者;如果低于这个限额,则自动审批通过。而每个人的限额是不同的,每个人的限额可以从某个外部系统中获取到。我们可以考虑利用BCS获取到这个数据。如果这个数据是通过外部数据列表暴露在SharePoint的,工作流就可以查询到这个数据。

支持的工具

一般来讲,我们有2种工具来设计BCS工作流。一是采用SharePoint Designer 2010提供的开箱即用的Activity来设计,再有,就是使用Visual Studio。

设计时需要牢记的几点

设计BCS工作流时,有几个点非常重要。

  1. 工作流不能关联到外部数据列表

    在SharePoint 2010里,工作流不能直接关联到外部数据列表。这是因为外部数据不是保存在SharePoint里,所以当列表条目发生变化时无法通知给工作流。但这并不意味着外部数据无法使用工作流。我们可以创建一个站点工作流,或者为某个常规列表(如文档库)创建一个工作流,并让这个列表从外部数据列表读取/更新数据。当然,我们也可以将外部数据列表项作为SPD任务处理的目标,尽管任务链接总是外部数据列表项没有标题。

  2. 访问BCS的工作流必须以服务账号运行,即使在身份模拟步骤下

    工作流会一直以服务账号来运行(一般是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列的值方式才可以找到已有的条目。