ASP.net;sharepoint
c# moss 程序人生
当你自定义控件时,你封装的控件属性,在访问时能访问但是却不能赋值给它,相当于指针指向了黑盒子,因此我们用Replicator控件来解决它。当然Replicator控件还有其他功能,其中对于工作流来说,审批过程中人员数的不确切这个问题也很容易的解决了。

Replicator控件

属性:

ExecutionType 指定activity的执行模式,是顺序还是状态。

InitialChildData 指定将包含复制器的初始子实例数据的集合。

条件:

UntilCondition 请指定导致复制器的内容activity停止执行的条件;

ChildInitialized 请指定初始化子活动的实例时要调用的方法。


在工作流中引用自定义控件的步骤:

一、OnWorkflowActivated 工作流启动方法 初始化工作流程。我们用FormContact类来解析初始化表单的数据,在microsoft.office.workflow.utility命名空间里。

转换初始化表单数据到一个哈希表

获得原始工作流的信息

设置复制器执行类型

使用内置的方法来解析出人

给每个联系人创建一个任务添加到replicator中,replicator创建列表中的每个子项

    准备replicator 的数据

源代码:

初始化工作流程

二、OnReplicatorChildInitializedInitialChildData方法: 指定将包含 复制器的初始子实例数据的集合。) :为每个复制器的子实例创建和初始化任务。

获取活动

设置任务

添加info表中的用户和检测与任务关联的用户

更新任务属性的值显示在infopath

设置其他值

设置created by用户 

源代码:

创建和初始化任务

三、IsReplicatorDone UntilCondition 请指定导致复制器的内容activity停止执行的条件;

):判断复制器是否已完成任务的条件。

源代码:

        private void IsReplicatorDone(object sender, ConditionalEventArgs e)
        
{
            
//Have all the replicator children completed?
            e.Result = this.taskReplicator1.AllChildrenComplete;
        }

四、IsTaskCompleted(自定义控件的onTaskChanged的自定义方法isTaskCompleted: 任务修改了反射到自定义控件的IsTaskCompleted事件中。IsTaskCompleted事件参数TaskEventArgs包含了SPWorkflowTaskProperties (AfterProperties)属性,该属性是任务修改时存储修改时的新值。

获得任务数据

获得审批该活动的用户

获得任务结果——#@TaskStatus属性中显示完成

判断结果是否取消流程

判断结果是否任务已完成

源代码:
        private void IsTaskCompleted(object sender, TaskEventArgs e)
        
{
            
//Get the task data
            
//获得任务数据
            WssTaskActivity task = sender as WssTaskActivity;

            
//Get the name of the user who performed this action
            
//获取活动的当前用户
            Contact contact = Contact.FromName(e.Executor, this.workflowProperties.Web);

            
//Get the task result - # and @ in the "TaskStatus" field indicate a completion
            
//获得任务结果-#和@在TaskStatus属性中显示完成
            string taskResult = e.AfterProperties.ExtendedProperties["TaskStatus"as string;

            
bool isTaskRejected = (taskResult == "@");
            e.Result 
= isTaskRejected || (taskResult == "#");                       

            
//Single rejection rejects the entire workflow
            
//取消流程
            if (isTaskRejected)
            
{
                
this.isWorkflowRejected = true;
            }


            
//Is the task completed
            
//任务是否完成
            if (e.Result)
            
{
                task.TaskChangedBy 
= contact;
                task.TaskCompletedBy 
= contact;
                task.completeWssTask_TaskOutcome1 
= isTaskRejected ? string.Format("Task rejected by {0}", contact.DisplayName) : 
                    
string.Format("Task approved by {0}", contact.DisplayName);                
            }

        }

五、OnTaskDeleted (自定义控件onTaskDeletedInvoked方法):删除任务事件。

获得任务数据

获得审批该活动的用户

设置友好的名称

拒绝工作流

源代码:

OnTaskDeleted

posted on 2008-04-18 15:20  sumh  阅读(2520)  评论(6编辑  收藏  举报