none
任务由 xxx 在 2011/5/21 所做的更改未被接受。该任务已被标记为已完成,但尚未作出“批准”或“拒绝”选择。 RRS feed

  • 问题

  • 想用代码控制微软自带的工作流向下转,代码如下:

    try
          {
            SPWeb web = SPContext.Current.Web;
            SPList mList = web.Lists[new Guid(taskListName)];
            SPListItem item = mList.Items[taskGuid];
    
            Hashtable ht = new Hashtable();
            ht.Add(SPBuiltInFieldId.Completed, true);
            ht.Add(SPBuiltInFieldId.TaskStatus, "已完成");
            ht.Add(SPBuiltInFieldId.PercentComplete, 1);
            ht.Add(SPBuiltInFieldId.WorkflowOutcome, "Completed");
            ht.Add(SPBuiltInFieldId.FormData, SPWorkflowStatus.Completed);
            
    
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
              item.Web.AllowUnsafeUpdates = true;
              bresutl = SPWorkflowTask.AlterTask(item, ht, true);
              item.Web.AllowUnsafeUpdates = false;
    
            });
          }
          catch (Exception ex)
          {
            throw ex;
          }
    

    但是却提示错误:

    任务由 xxx 在 2011/5/21 所做的更改未被接受。该任务已被标记为已完成,但尚未作出“批准”或“拒绝”选择。

    若要完成此任务:

    1. 审阅 cccaa.xml。
    2. 执行此任务所需的特定活动。
    3. 编辑此任务,将该任务标记为已完成。

    为什么?!howto?


    lixw
    2011年5月21日 8:12

答案

  • 问题搞定,代码如下

     SPSecurity.RunWithElevatedPrivileges(delegate()
                    {
                        item.ModerationInformation.Status = SPModerationStatusType.Approved;
                        item.ModerationInformation.Comment = txtComment.Text;
                        item[SPBuiltInFieldId.WorkflowVersion] = 1;
                       
                        Hashtable data = new Hashtable();
                        data[SPBuiltInFieldId.Completed] = "TRUE";
                        data[SPBuiltInFieldId.PercentComplete] = 1;
                        data[SPBuiltInFieldId.Outcome] = txtComment.Text ;
                        data[SPBuiltInFieldId.TaskStatus] =SPResource.GetString(new CultureInfo((int)item.Web.Language, false),"WorkflowTaskStatusComplete",new object[0]);
                        data[SPBuiltInFieldId.FormData] = SPWorkflowStatus.Completed;
                        data[SPBuiltInFieldId.WorkflowOutcome] = "从移动设备完成";
                        item.Web.AllowUnsafeUpdates = true;
                        item.Web.Update();
                        SPWorkflowTask.AlterTask(item, data, true);
                        item.Web.AllowUnsafeUpdates = false;
                    });


    lixw
    • 已标记为答案 softking 2011年5月30日 8:11
    2011年5月30日 8:10

全部回复

  • 你好,

    在workflow中你可以试试直接使用UpdateTask activity来修改某个task的属性。

    AlterTask有人提到不能在workflow 的context中使用,只能在workflow外部使用。

    http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowtask.altertask.aspx

     


    Microsoft Online Community Support
    2011年5月23日 9:53
  • 我把代码改了,但这次提示“发生意外错误”

    try
          {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
    
              SPWeb web = SPContext.Current.Web;
              SPList mList = web.Lists[new Guid(taskListName)];
              SPListItem item = mList.Items[taskGuid];
              item.Web.AllowUnsafeUpdates = true;
              item.ModerationInformation.Status = SPModerationStatusType.Approved;
              item.ModerationInformation.Comment = "commentas";
    
    
              Hashtable ht = new Hashtable();
              ht.Add(SPBuiltInFieldId.Completed, true);
              ht.Add(SPBuiltInFieldId.TaskStatus, SPResource.GetString(new CultureInfo((int)
                  item.Web.Language, false), "WorkflowTaskStatusComplete", new object[0]));
              ht.Add(SPBuiltInFieldId.PercentComplete, 1);
              ht.Add(SPBuiltInFieldId.FormData, SPWorkflowStatus.Completed);
              
              bresutl = SPWorkflowTask.AlterTask((item as SPListItem), ht, true);
              item.Web.Update();
              item.Web.AllowUnsafeUpdates = false;
    
            });
          }
          catch (Exception ex)
          {
            throw ex;
          }
    
    
    
    

    lixw
    2011年5月25日 3:47
  • 问题搞定,代码如下

     SPSecurity.RunWithElevatedPrivileges(delegate()
                    {
                        item.ModerationInformation.Status = SPModerationStatusType.Approved;
                        item.ModerationInformation.Comment = txtComment.Text;
                        item[SPBuiltInFieldId.WorkflowVersion] = 1;
                       
                        Hashtable data = new Hashtable();
                        data[SPBuiltInFieldId.Completed] = "TRUE";
                        data[SPBuiltInFieldId.PercentComplete] = 1;
                        data[SPBuiltInFieldId.Outcome] = txtComment.Text ;
                        data[SPBuiltInFieldId.TaskStatus] =SPResource.GetString(new CultureInfo((int)item.Web.Language, false),"WorkflowTaskStatusComplete",new object[0]);
                        data[SPBuiltInFieldId.FormData] = SPWorkflowStatus.Completed;
                        data[SPBuiltInFieldId.WorkflowOutcome] = "从移动设备完成";
                        item.Web.AllowUnsafeUpdates = true;
                        item.Web.Update();
                        SPWorkflowTask.AlterTask(item, data, true);
                        item.Web.AllowUnsafeUpdates = false;
                    });


    lixw
    • 已标记为答案 softking 2011年5月30日 8:11
    2011年5月30日 8:10