在MOSS 2007种利用InfoPath 2007结合Workflow Foundation可以高效的做出非常强大的工作流应用。因为在SDK中这部分的内容有点不流畅,读起来比较费劲。所以我想以我的一点小经验和大家Share下,希望能少走点弯路,然后再结合SDK 、ECM Starter Kits 和 WSS Workflow StarterKits 快速掌握这个非常棒的功能。

1、我要创建用于 MOSS 的 Workflow 项目。

请下载 WSS Workflow StarterKits,安装后将有个"SharePoint Server"的组,内有 SharePoint Sequential Workflow Library 和 SharePoint State Machine Workflow Library 两个项目模板。利用这两个模板创建的项目,对 Workflow 的开发、部署都很方便。

  • 项目用到的 Microsoft.Office.Workflow.Tasks.dll、Microsoft.SharePoint.dll 和 Microsoft.SharePoint.WorkflowActions.dll均在装有MOSS 2007的机器的 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI\ 目录下。其中开发时主要注意记得在VS2005工具箱里注册 microsoft.sharepoint.WorkflowActions.dll,就可以从工具箱里拖拉出MOSS 特有的 Workflow 控件了。
  • Feature.xml:在 MOSS 中, Workflow 是作为 MOSS 的 Feature 存在的,具体使用时再关联到具体某个 List 或 Library 中并创建实例运作的。因为 Feature.xml 文件就是安装部署时候要把生成的项目 dll 文件作为 Feature 注册到MOSS 中的描述文件了。刚打开时是空的,只是一些提示,按提示插入 Feature 的 Snippets,就有一段 xml 代码插入。其中 GUID 可通过 VS2005 菜单 Tools 下的 Create GUID 创建一个新的 GUID 填入;中间有个 <ElementManifest Location="workflow.xml" /> 节点用于关联工作流 xml 描述文件。
  • Workflow.xml:工作流描述文件。其中有工作流名字Name(该名字在添加 Workflow 关联具体列表或文档库时显示在工作流列表中);GUID(同样通过 Create GUID 生成填入);CodeBesideClass和CodeBesideAssembly对应工作流类全名和程序集全称(项目如进行签名,此处需明确PublickToken,同时把 install.bat 中 gacutil 部分反注释掉);TaskListContentTypeId为工作流使用到的任务列表的 ContentType ID,默认为 Workflow Tasks 的 ContentTypeID,一般不需要修改;AssociationUrl、InstantiationUrl和ModificationUrl一般也不用改,默认创建即是用于呈现InfoPath 的页面,其中 AssociationUrl 为用来关联 Workflow 和列表或文档库,并设置工作流运行参数的页面;InstantiationUrl为用于当手动启用工作流时呈现给用户的初始化页面。Association_FormURN 和 Instantiation_FormURN 等以 _FormURN 结尾的节点都存放其相应的InfoPath Form 的 ID(该 ID 可通过设计InfoPath Form时,打开“文件->属性”窗口即可看到该InfoPath Form 的 ID)。关于 TaskForm 下面解释。
  • install.bat:用于安装部署Workflow的批处理文件。根据具体情况注释或反注释命令行,同时配置MOSS地址即可。
  • Workflow1.cs:工作流设计和代码。

2、我的 InfoPath 表单模版无法正常发布,或者发布后状态为“Installing”而不是“Ready”。

请检查以下几个环节,一般无法正常发布都有可能是以下原因造成。

  1. 首先检查表单模版是否与浏览器兼容。设计表单模版状态下,打开 InfoPath 菜单“工具-->检查设计方案”,然后再在右边任务窗格中点“更改兼容性设置”弹出表单选项,把“浏览器兼容性”组里的“设计一个可在浏览器或InfoPath 中打开的表单模版”勾起来,然后进行检查。
  2. 如果表单发布用于 Web Access,可同样打开“表单选项”,在“安全和信任”中把“安全级别”调整为“域”级别。
  3. 确认所有的表单最好都不曾发布过。判断依据,把.xsn表单模版文件拷贝到其他地方,打开右键“设计”打开它,如果出现警告错误框提示“此表单已经发布到一个位置,但后来被保存或移动到了另外一个位置。如果确保基于此模板的表单正常工作,请重新发布表单”,那就说明该表单已经发布过,否则则没发布过。没发布过的表单模板,每次保存表单模板时均提示是“发布”还是“保存”,一概“保存”。
  4. 如果该 InfoPath 表单有后部 C#或VB.NET代码,即不小心用 VSTA 打开过,那么发布时会要求必须经过管理员审核,也会造成无法正常发布表单。可在“表单选项”窗口中“编程”里,点击“删除代码”即可。
  5. InfoPath 2007是中文版本,但发布到英文版本的MOSS 中时也会出现发布异常。同样在“表单选项”窗口中“浏览器”里,选择表单语言为“英语(美国)”即可。

3、我在 MOSS 列表中设置 Workflow 为新增一条记录 A 时就自动启动,同时给审批者创建一条任务,该任务用了我自己定义的任务InfoPath 表单,但该 InfoPath 任务表单中有几个字段是要读取记录A中字段值来显示的。

这个问题的实质就是要把某条具体 ListItem 中的字段值传递给 Task 表单(该表单为 InfoPath 表单),然后再通过Task表单显示出来。这里头有三个子问题:怎样获取和当前Workflow相关的 ListItem、通过怎样方式把值传递给 Task表单、Task 表单最后又怎么呈现。

  1. 怎样获取和当前Workflow相关的ListItem:通过SPWorkflowActivationProperties.Item来获取当前 SPListItem。
  2. 通过怎样方式传递给 Task 表单。请查看《How to:Access Workflow Task form Data》。例如 taskProperties.ExtendedProperties["ApplyNo"] = this.ApplyNo;。
  3. Task表单最后怎么呈现。察看《Creating the WOrkflow Task Edit Form》的第4、5、6点。主要是要选择绑定 ows_ 字段时,默认是没有 ows_ 字段的“主”数据源,你必须选择“ItemMetadata (辅助)”数据源才能看到ows_字段。

具体范例可以查看 ECMStarterKits中 HelloWorld 经典示例。结合上面注意的几点。

4、我现在已经在 Workflow.xml 里配置了一个 Task Form了(有类似这么一个节点<Task0_FormURN>urn:schemas-microsoft-com:office:infopath:ReviewTaskForm:-myXSD-2005-11-22T23-52-35</Task0_FormURN>),这个 Task Form是我第一个 Task 用到的,但我还有第二步,第三步,每个步骤都会建一个任务,我的每个任务都要对应不同的 Task Form 来收集每个阶段的用户录入的数据来运作工作流的。怎么加第二个任务表单?

根据 SDK 《Windows Task Form〉,无疑,增加第二个Task Form的第一步就是在把设计好的第2步用到的InfoPath 表单模板的 ID(URN) 配置起来。即在<Task0_FormURN>节点下增加类似这么一个节点:<Task1_FormURN>urn:schemas-microsoft-com:office:infopath:MultiStage-Initiation:-myXSD-2006-04-28T22-44-03</Task1_FormURN>。

真正核心的问题来了,怎么让第2个任务表单<Task1_FormURN>和实际工作流中分配的第2条任务关联起来?好,关键就在 SPWorkflowTaskProperties.TaskType 这个属性。TaskType = 0 时就表示这是第一个任务请用第一个任务表单,TaskType=1时就表示这是第二个任务请用第二个任务表单。就是这么简单。:)

你可以打开 ECM StarterKits中的 MultiStage 示例,这个示例是比较实用的例子,务必研读。打开示例中的 WorkflowTask.cs,找个GetTaskCreationProperties()方法。修改如下:

public SPWorkflowTaskProperties GetTaskCreationProperties(int taskType)
{
    SPWorkflowTaskProperties properties = new SPWorkflowTaskProperties();
    properties.AssignedTo = this.Participants[0].AccountId;
    properties.Title = this.TaskTitle;
    properties.Description = this.TaskInstructions;
    properties.SendEmailNotification = true;
    properties.TaskType = taskType;
    properties.DueDate = (DateTime)this.dueDate;

return properties;
}

然后再打开 Workflow1.cs 代码,搜索到这么一行代码 activity.TaskCreationProperties = this.activeTask.GetTaskCreationProperties(); 改为:

activity.TaskCreationProperties = this.activeTask.GetTaskCreationProperties(this.completedStages);

至此,这个 MultiStage 例子就更智能化了。你在增加工作流步骤外,还可以方便控制每个步骤任务用到的 InfoPath 表单了,而不是都用同一个表单。

5、先到这里吧。最后推荐几篇经典文章:

InfoPath + Workflow + MOSS相关推荐

  1. 学习:InfoPath + Workflow + MOSS(转)

    在MOSS 2007种利用InfoPath 2007结合Workflow Foundation可以高效的做出非常强大的工作流应用.因为在SDK中这部分的内容有点不流畅,读起来比较费劲.所以我想以我的一 ...

  2. MOSS工作流 InfoPath+WorkFlow+Moss 开发要点

    项目基本完成了,一期的东西基本都做完了,采用的纯Moss下面的开发,也应该总结一些要点和东西,为了不使自己以后完全忘记,或者说:为了让广大困惑的人,能在此找到一些捷径和关键点,在此能有所用,也就欣慰不 ...

  3. 微软MCP之SharePoint2007考试试题(Microsoft 70-542)

    将以下试题熟练掌握,即可通过此考试(MS Office SharePoint Server 2007.Application Development) 1.You are creating a Mic ...

  4. MOSS关于Workflow

    题外话:初次写Blog,大家有什么意见请在评论中提出来,还有什么改进的,大家交流交流!这篇VS2008介绍的不多,主要是之后会发一个详细的VS2008 ,结合InfoPath 和SharePoint ...

  5. 在MOSS中开发和部署Infopath

    Infopath是Office中提供的一个部件,可以方便快捷的处理一些表单.比较常见的使用就是会计可以利用Infopath制作一个表单模板,需要报销的人直接填写就可以了,填写好的表单可以xml的格式保 ...

  6. MOSS 2010:Visual Studio 2010开发体验(26)——工作流开发概述

    这一篇开始,我将介绍在MOSS 2010中进行工作流开发的最佳实践.这一篇主要介绍有关的几个概念 1.什么是工作流 工作流开发是这几年都比较火的一个领域.工作流,顾名思义就是工作的流程,而软件系统所要 ...

  7. 《博客园精华集》Sharepoint+MOSS分册第2轮筛选结果文章列表

    <博客园精华集>Sharepoint+MOSS分册第2轮筛选结果文章列表 由我筛选完成,MOSS部分一共68篇,Sharepoint部分一共213篇 Sharepoint相对来说学习和使用 ...

  8. MOSS开发知识积累

    SPListCollection转Datatable SPListItemCollection unprocessedItems = List.GetItems(query); DataTable d ...

  9. 初步尝试Teamplate Workflow Web Part for SharePoint Portal Server

    试用了一天,记录一些使用体会,今天继续尝试.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:offi ...

最新文章

  1. pythonpandas函数详解_对pandas中Series的map函数详解
  2. 做报表必看!一个工具就可搞定中国式复杂报表需求
  3. 排序及其分类(一级)
  4. java数组复制用for_在JavaScript中复制数组的最快方法 - 切片与'for'循环
  5. Qt工作笔记-Linux上字体问题,导致所有文字重叠在一起
  6. 李彦宏:5年后语音和图片搜索会超文字搜索
  7. mysql5.7延迟_[MySQL] 号称永久解决了复制延迟问题的并行复制,MySQL5.7-阿里云开发者社区...
  8. 继承性(HTML、CSS)
  9. 在FL Studio中如何混音你的鼓组采样与旋律采样
  10. CSDN上传的资源为何不能自定义下载积分?
  11. 递归神经网络教程请签收!
  12. 美团点评Java一二面过,三面“凉凉”~复习备战“金三春招季
  13. 【架构风格 架构模式 设计模式 概念】
  14. 【三 HLS】HLS实现肤检测
  15. 白话空间统计二十三回归分析番外:残差可视化
  16. [英语阅读]英国13岁男孩当爹引各界热议
  17. 编写仿supersu的权限管理工具(aosp11 root、实现aosp系统内置wifi、root管理apk)
  18. Linux常用指令(5)——20.4.25
  19. elementUi tabs刷新后,选中的tab下划线不显示
  20. 关于博客的书写——读刘末鹏博客学习方法篇有感

热门文章

  1. Linux下的Makefile规则(隐式规则和模式规则)
  2. 华为硬件工程师春招一面面经
  3. 建荣dm8261量产工具V1.8(12.06.19)
  4. srm系统的供应管理策略
  5. matlab套利,期现套利-现货组合构建(1)-市值权重法
  6. WordPress虚拟资源商城主题日主题RiPro6.7 开源版 星空资源网首发
  7. qpython kivy_Kivy和PY4A的区别
  8. 选中文本后的颜色和背景:默认是蓝底白字
  9. VSCode使用总结之——Ubuntu下设置鼠标后退键实现代码回跳
  10. python word 操作 doc 文件格式转docx 格式 学习笔记