vs2010 开发自定义Activity问题,请高手指点
小弟最近研究研究sharepoint 工作流 ,需将同一任务分配给多人,查看微软CSDN,需运用replicator Activity实现,前提是先创建自定义Activity。于是小弟参照 http://msdn.microsoft.com/en-us/library/hh128696.aspx 进行自定义Activity的创建。
创建结果如连接中Figer1.custom activity图所示
代码如下:
public SPTask()
{
InitializeComponent();
}
public Guid workflowId = default(System.Guid);
public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties();
public Guid createTaskId = default(System.Guid);
public SPWorkflowTaskProperties createTaskProperties = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
private bool IsComplete;
public string AssignTo { get; set; }
public DateTime DurTime { get; set; }
public string TaskTitle { get; set; }
public string Desc { get; set; }
public int TaskType { get; set; }
private void createTask_MethodInvoking(object sender, EventArgs e)
{
createTaskId = Guid.NewGuid();
createTaskProperties.AssignedTo = AssignTo;
createTaskProperties.Description = Desc;
createTaskProperties.DueDate = DurTime;
createTaskProperties.Title = TaskTitle;
createTaskProperties.StartDate = DateTime.Now;
createTaskProperties.PercentComplete = 0;
createTaskProperties.TaskType = TaskType;
}
private void IsOk(object sender, ConditionalEventArgs e)
{
e.Result = !IsComplete;
}
private void onTaskChanged1_Invoked(object sender, ExternalDataEventArgs e)
{
string CompleteStatu = createTaskProperties.ExtendedProperties["CompleteFlag"].ToString();
IsComplete = bool.Parse(CompleteStatu);
}
private void completeTask1_MethodInvoking(object sender, EventArgs e)
{
OutCome = "任务已完成";
}
public string OutCome = default(System.String);
现在主要问题:
1、onTaskChanged1_Invoked()这个方法不是在用户提交任务时触发,而是在创建任务时就触发了,请问该如何设置,实现用户提交任务时触发该方法。
2、同样的任务提交页面,管理员可以正常显示,而普通用户就提示如下:
值不能为空。
参数名: item
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.ArgumentNullException: 值不能为空。
参数名: item
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
堆栈跟踪:
[ArgumentNullException: 值不能为空。
参数名: item]
Microsoft.Office.Workflow.ListPage.SimpleNameFromItem(SPListItem item) +146
Microsoft.Office.Workflow.WrkTaskIPPage.OnLoad(EventArgs ea) +2215
System.Web.UI.Control.LoadRecursive() +66
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428
请高手指点,不甚感激~~~
[解决办法]
public SPWorkflowTaskProperties onTaskChanged1_AfterProperties1 = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
public SPWorkflowTaskProperties onTaskChanged1_BeforeProperties1 = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
private void onTaskChanged1_Invoked(object sender, ExternalDataEventArgs e)
{
onTaskChanged1_AfterProperties1 = onTaskChanged1.AfterProperties;
onTaskChanged1_BeforeProperties1 = onTaskChanged1.BeforeProperties;
}
你需要先用这中方式 绑定任务属性
在用
onTaskChanged1_AfterProperties1.ExtendedProperties[“”].ToString();
就可以读出值了
但前提是你的任务列表有这个栏,并且这个栏是有值的。
[解决办法]
很明显,管理员可见,而普通用户报错,那肯定是权限问题,你在读取、操作列表数据时,提升一下权限应该就可以了!