开发sharepoint工作的五个步骤:
      1、为你的工作流建模
            在工作流设计器中可以完成
      2、为你的工作流设计表单
            有四种类型的表单可以设计
                  1)关联表单,建立工作流和列表或者内容类型的关联的时候使用的表单,例如是否使用默认值
                  2)初始化表单,初始化工作流的时候使用的表单,是否允许申请人手动启动工作流,如果是的话,需要填写那些信息
                  3)任务表单,任务相关的表单
                  4)修改工作流的表单,在工作流运行过程中调整工作流使用
            左右的表单都要做两件事,1)收集用户信息 2)调用对象模型的一个功能来表现行为,例如,创建关联,修改任务等,传递给工作流的数据通过功能的参数来实现。(MOSS提供了默认的InfoPath表单可以使用)
      3、编写代码
      4、部署工作流
      5、调试工作流直到满意
      Host和workflow的交互使用了workflow提供的两个活动:CallExternalMethod 和HandleExternalEvent ,分别使用在workflow传递数据给Host和Host传递数据给workflow两个方向上。
      CallExternalMethod 就是通过服务接口中定义的事件将信息在事件参数中传递给Host,事件在Host中注册处理程序,处理参数(传递过来的数据)。
      HandleExternalEvent 就是向外部提供一个激活自己事件的方法,供外界调用,同时传递参数给workflow,在工作流中还要写事件对应的处理代码,事件的Handler代码,接收、处理外部传过来的参数。

sharepoint工作流预定义了很多任务相关的活动,CreateTask就是一个   CallExternalMethod  ,在工作流中可以操作sharepoint对象模型,创建任务,相当于向Host中的sharepoint发送信息,信息就是新建一个工作流任务。OnTaskChanged就是一个HandleExternalEvent ,就是Host向工作流发送消息,工作流任务改变了,在工作流中要做出响应。可以说一个工作流任务是属于一个工作流实例的,工作流任务的修改和删除都要经过Host来通知工作流,就是使用sharepoint工作里组件中要On开头的那些组件,也就是通过交互方法提供的方法来激活工作流对应的事件,然后由工作流来做出响应。
      
      Pitfall容易犯的错误:
      1、在sharepoint中操作未提交的列表项
            对于还没有提交的列表或者列表项,不要使用对象模型来调用它们。记住要首先持久化他们,在获取他们之前,要使用event handler或者delay。例如,如果你创建工作流任务,任务列表的列表项在你使用event handler或者delay睡觉工作流之前是不存在的。使用工作流服务没有问题,但是在睡觉工作流之前不要使用对象模型操作列表项。

CallExternalMethod活动的invoking属性的方法运行在服务执行之前,HandlerExternalEvent活动的Invoking属性的方法运行在服务执行之后,并且激活工作流。

2、使用CreateTask或者OnTaskChanged的SPWorkflowTaskProperties属性作为sharepoint任务列表进行操作
      当你使用CreateTask的时候,你绑定到CreateTask的TaskProperties属性的对象还只是任务的初始值,还没有和任务列表同步,因此对于任务来说,还没有任务改变,反之亦然。同样的概念也适用于OnTaskChanged的AfterProperties属性。
      由于还没有实践开发,所以这句话我也没有很理解。估计是说在你用这两个活动的时候,不可以使用这两个属性来映射对应的任务项,因为他们还没有和数据库同步,是不是说明数据库中的内容还是旧的任务项,而通过这两个属性获取的任务项已经是更新过的了。这还需要实践的检验。

关于correlationToken,你可以把它想象成workflow用来唯一标识Sharepoint对象的东西。如果你的CreateTask活动、OnTaskChanged活动、CompleteTask  活动都要映射同一个任务项的话,就需要把他们的correlationToken设置一样。
下面的三组活动需要设置相同的correlation token

“Workflow” token:
OnWorkflowActivated
OnWorkflowItemChanged
OhWorkflowItemDeleted
SetState
SendEmail
UpdateAllTasks
Task token:
CreateTask
CreateTaskWithContentType
UpdateTask
DeleteTask
CompleteTask
RollbackTask
OnTaskChanged
OnTaskDeleted
OnTaskCreated
Modification token:
EnableWorkflowModification
OnWorkflowModified

使用InfoPath表单的好处
      1、可以直接在OFFICE2007客户端中打开
      2、可以很容易的在InfoPath设计器中进行修改,拖拽,添加验证规则
      3、是无代码的开发,如何实现特殊功能的调用呢,可以在Host的页面中调用对象模型来做

Pitfall:在反持久化工作流之后重新使用SharePoint的不可序列化对象
      许多非工作流的SharePoint对象,例如SPListItem,是不可序列化的,所以当工作流被持久化之后,这些东西将不可用。如果你试图在工作流激活之后使用他们,将会发生错误。为了避免这些情况,在你反持久化工作流之后再使用他们。
      Pitfall:不要忘记将自定义类标识为可序列化
      当你在工作流中添加自定义类的时候,不要忘记给类添加[Serializable]特性。如果没有添加这个特性,当你在睡觉工作流,并且序列化类的时候,工作流将会失败。
      Pitfall:更新锁定的列表项
      如果一篇文档打开或者被锁定,更新列会抛出异常。如果你需要工作流修改列表项的某一个栏目,你可以a)在锁定释放的时候在修改或者b)使用item.SystemUpdate()来绕过锁定,但是如果这么做,文档打开又关闭的时候,不会保存工作流做的修改。

Office开发,在MSDN的Office开发中有很多关于SharePoint结合Office客户端的例子,工作流,outlook开发,communicator开发等内容,大家可以参考的。
      http://msdn.microsoft.com/en-us/office/cc514057.aspx

转载于:https://www.cnblogs.com/virusswb/archive/2008/11/26/1341334.html

开发sharepoint工作流过程中的Ptifall(容易犯的错误)相关推荐

  1. 数据分析过程中,我们常犯的错误有哪些?

    1.走得太快,没空回头看路 初创公司里的人们仿佛一直在被人念着紧箍咒:"要么快要么死,要么快要么死."他们是如此着急于产品开发,以至于他们常常没有空想用户对产品的具体使用细节,产品 ...

  2. 用VS2005开发Sharepoint工作流,出现此安装不支持该项目类型。的处理

    用VS2005开发Sharepoint工作流,可能会出现"此安装不支持该项目类型."的错误,英文版VS2005是"the project type is not supp ...

  3. 解决爬取网站过程中遇到的HTTP Error 302错误和中文乱码问题

    解决爬取网站过程中遇到的HTTP Error 302错误和中文乱码问题 参考文章: (1)解决爬取网站过程中遇到的HTTP Error 302错误和中文乱码问题 (2)https://www.cnbl ...

  4. vim使用过程中的以前的消息和错误消息代码介绍

    本文包含一个 Vim 产生的消息和错误信息按字母排序的列表.如果你不理解消息的含义,可以在这里查找.不过,该列表不一定完整.部分翻译可能不是很准确,敬请谅解,如果你想添加可以在本文留言讨论. 本文约定 ...

  5. PADS使用过程中出现“发生严重的运行错误,请按“确认”关闭程序”的解决方法

    PADS使用过程中出现"发生严重的运行错误,请按"确认"关闭程序"的解决方法 在使用Ruter的时候,一旦按下保存就会弹出此窗口,刚开始以为是DRC报错太多了, ...

  6. [CSO]安全威胁建模分析中7个可能犯的错误

    [CSO]安全威胁建模分析中7个可能犯的错误 相对缺乏成熟度的威胁建模分析可能给那些依赖此举确保其网络和服务安全的机构带来大麻烦. [By Jaikumar Vijayanfrom:www.csoon ...

  7. 嵌入式开发板老化过程中显示温度与负载的关系脚本的用法

    有一次测试过程需要查看开发板在增加负载的过程是否正常,由于在增加负载的过程中打印温度,打印温度可以通过脚本直接体现出来,负载也可以使用top命令打印出来,但是top命令用于保存脚本就比较费劲了,如何将 ...

  8. golang 学习心得一(开发环境搭建过程中一些坑)

    最近刚接触golang,除了被go的语法吸引之外,在搭建go开发环境过程才也遇到一些问题,现在写出来和大家分享,希望以后对go有兴趣的初学者能避免我的弯路. Sublime Text 环境搭建,这个有 ...

  9. 老牛知点所以然-Linux(Ubuntu)配置安卓开发环境及过程中常见问题解决

    文章目录 Linux安装JDK,配置JDK环境变量 安装SDK和gradle 安装AndroidStudio AndroidStudio创建模拟器报错 安装FireFox 建立Firefox桌面快捷方 ...

最新文章

  1. AI大厂迎最冷冬天?网传阿里拟裁员2万人,净利下滑高管离职
  2. cmder默认的命令提示符λ改成$
  3. C#资源释放及Dispose、Close和析构方法
  4. Android关机流程源码分析
  5. html 8 盒子的background 颜色的面积
  6. 清除浏览器缓存之后为什么还是显示旧的html页面_Web缓存控制策略详解
  7. 好全的Android面试题
  8. 过渡效果_剪映教程:剪映怎么添加视频之间的过渡转场效果?
  9. PID控制器开发笔记之十三:单神经元PID控制器的实现
  10. 人工智能TensorFlow工作笔记010---TensorFlow 游乐场游戏,了解神经网络主要功能作用_工作流程
  11. 木马的隐藏及其启动方式 (转)
  12. 贝叶斯网络是神经网络吗,贝叶斯网络和神经网络
  13. emoji粉色爱心符号_特殊符号
  14. 微信多开设置网络代理服务器,微信多开终极技巧,可随意控制数量已亲测很好用...
  15. 斯坦福大学公开课:机器学习的动机与应用
  16. 上海交通出行热线电话一览
  17. C# 控件透明背景(winform)
  18. c语言编程樱花树,分形樱花树(画画)
  19. 计154-1.2班C++翻转课堂的课程总结链接集
  20. java利用poi导出excel功能-附带图片导出

热门文章

  1. 牛客网刷题 --- 输入输出数据处理
  2. Map排序,获取map的第一值,根据value取key等操作(数据预处理)
  3. 多元分类SVM(多类别SVM)程序使用说明
  4. 计算机视觉基础---OpenCV框架与图像插值算法(图像伸缩)cpp+python
  5. SSH框架整合——基于注解
  6. 10815 - Andy's First Dictionary
  7. [git 基础] 生成patch 和 打patch 的实例
  8. php正则去掉width=,关于php使用正则去除宽高样式的方法
  9. python 自动登录网站_python自动登录网页脚本
  10. 椭圆极点极线性质_笔记:关于极点极线的一些思考