ASP.net;sharepoint
c# moss 程序人生
随笔 - 53,  文章 - 0,  评论 - 120,  阅读 - 53371
当你自定义控件时,你封装的控件属性,在访问时能访问但是却不能赋值给它,相当于指针指向了黑盒子,因此我们用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   sumh  阅读(2530)  评论(6编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述

< 2008年4月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 1 2 3
4 5 6 7 8 9 10
点击右上角即可分享
微信分享提示