zoukankan      html  css  js  c++  java
  • 开发sharepoint工作流过程中的Ptifall(容易犯的错误) Virus

          开发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

    【Blog】http://virusswb.cnblogs.com/

    【MSN】jorden008@hotmail.com

    【说明】转载请标明出处,谢谢

    反馈文章质量,你可以通过快速通道评论:

  • 相关阅读:
    多传感器融合(三)
    多传感器融合(二)
    多传感器融合(一)
    3D点云完美匹配
    Geo-CNN的三维点云
    3D点云几何拟合
    BAD SLAM:捆绑束调整直接RGB-D SLAM
    三维视觉惯性SLAM的有效Schmidt-EKF
    RGB-D相机视觉SLAM
    Visual SLAM
  • 原文地址:https://www.cnblogs.com/virusswb/p/1341334.html
Copyright © 2011-2022 走看看