扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:佚名 2007年10月31日
关键字: 技术 微软 设计 SharePoint Office
先看 Kaneboy 的《SharePoint Designer 2007, 强大的工作流设计器》。然后,我们针对利用 SPD 2007进行扩展、设计工作流三个常见问题做一些回答。由于开始步入大忙期,时间和精力有限,每个问题我都只点到为止,具体更细节就不累赘。
1、“从用户处收集数据”这个Action中输出的输出变量是什么,做什么用?或者换个问法,我怎么获取用户填写在收集表单里的数据?
输出的变量实际上是任务列表中的ItemID。“从用户处收集数据”这个Action是一个强迫工作流暂停以等待用户进行操作的过程。该Action实际是以任务形式在任务列表中新建一条任务向用户派发,然后用户上来编辑任务进行录入数据,以完成任务。这个输出变量ItemID就是用来定位获取用户填写的数据项的。在Conditions中放入“比较任意数据”,选择“任务”列表要查找用户输入值的哪个字段,然后下面把任务ID和输出变量关联即可。
2、初始变量Initiations和变量Variables有何区别?
初始变量赋值于工作流启动前,而Variables则赋值于工作流启动后。二者均在整个工作流生命周期内可用。初始变量工作流务必设置默认值,用于当新建就自动触发工作流的情景。无法通过查找获取到的数据,或者多次反复使用的数据都可以存入变量Variables中,以便在Workflow周期里方便使用。
3、自定义扩展Activity中,如何获取当前SPWeb、SPList、SPListItem、SPFile等?比如,最简单的,如何获取当前工作流运作的ListItem数据?
完全可以在自定义Activity中通过WorkflowContext上下文获取到当前项或当前SPWeb等信息。除非你要获取其他Site的数据,否则就没必要用去把Site Url、List Guid或ListItem ID等这些数据信息作为输入参数让工作流定制人员来手工输入以获取相关对象。
下面为一个代码模板(LiveWriter不支持代码色彩,就看黑白的代码吧):
publicclassMyActivity: Activity
{
#regionProperties
publicstaticDependencyProperty __ContextProperty =DependencyProperty.Register("__Context", typeof(WorkflowContext), typeof(MyActivity));
[ValidationOption(ValidationOption.Required)]
publicWorkflowContext __Context
{
get
{
return(WorkflowContext)base.GetValue(__ContextProperty);
}
set
{
base.SetValue(__ContextProperty, value);
}
}
publicstaticDependencyProperty ListItemProperty =DependencyProperty.Register("ListItem", typeof(int), typeof(MyActivity));
[ValidationOption(ValidationOption.Required)]
publicintListItem
{
get
{
return(int)base.GetValue(ListItemProperty);
}
set
{
base.SetValue(ListItemProperty, value);
}
}
publicstaticDependencyProperty ListIdProperty =DependencyProperty.Register("ListId", typeof(string), typeof(MyActivity));
[ValidationOption(ValidationOption.Required)]
publicstringListId
{
get
{
return(string)base.GetValue(ListIdProperty);
}
set
{
base.SetValue(ListIdProperty, value);
}
}
#endregion
protectedoverrideActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
Guid listGuid =Helper.GetListGuid(__Context, ListId);
SPList list =__Context.Web.Lists[listGuid];
SPListItem item =__Context.GetListItem(list, ListItem);
//做自己的事 :)
returnActivityExecutionStatus.Closed;
}
其对应在 WSS.ACTIONS 中的节点配置如下:
ClassName="TestActivities.MyActivity" Assembly="TestActivities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dd27a7cb343a4cac" AppliesTo="list" Category="我的自定义操作"> ClassName="TestActivities.MyActivity" Assembly="TestActivities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dd27a7cb343a4cac" AppliesTo="list" Category="我的自定义操作">
几点说明:
AppliesTo="list" 表示应用到列表,还可以有 AppliesTo="all" 表示应用到包括列表在内的所有sharepoint库表。Category="我的自定义操作",就表示你在 SPD 2007中看到的 Actions 的分类。Action 内属性还有 ListModeration="true" 表示是否要显示未经审核的项,UsesCurrentItem="true" 表示直接使用当前项。
DesignerType="ChooseDoclibItem" 表示点“此列表”后弹出选择对话框(ChooseDoclibItem限文档库,列表可用ChooseListItem),以选择参数 ListId 和 ListItem。DesignerType表示SPD 2007支持的各种类型,如整数Integer、字符串String,电子邮件Email(含Email关键参数,类似Field="To,CC,Subject,Body"),单个人员SinglePerson,多个人员Person,参数类型ParameterNames,待更新项类型UpdateListItem(类似Field="ListId,ListItem,ItemProperties"),还有一个我们第一个问题用的“向用户收集数据”用到的类型Survey。SPD 2007设计器都支持这些类型的直接设计,因为也才体现出其强大之处(当然也有不足,如不支持InfoPath,不支持调试,不支持StateMachine等)。
Id="1" 表示对应 Sentence 中的 %1。比如上面效果,你在SPD 2007将看到显示为“输出 此列表 到数据库”,点此列表后,将弹出让你选择你要的项。 下面Parameters节点里就比较好理解了,只要注意 Direction 有 In 和 Out 作为输入参数和输出参数即可。
SPD 2007 设计工作流基本也就这些东西,主要要扩展的还是需要你用 VS2005 来自定义 Activity 配合,才能达到最大灵活性。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者