1

我試圖以編程方式批准/拒絕SharePoint中的工作流。我可以成功地做到這一點,但我不能添加評論。我從一年的old question得到了我的代碼,這也沒有得到回答,所以我想我會開始一個新的問題。以編程方式批准/拒絕工作流並添加註釋

我的代碼:

Hashtable ht = new Hashtable(); 
ht[SPBuiltInFieldId.Completed] = "TRUE"; 
ht["Completed"] = "TRUE"; 
ht[SPBuiltInFieldId.PercentComplete] = 1.0f; 
ht["PercentComplete"] = 1.0f; 
ht["Status"] = "Completed"; 
ht[SPBuiltInFieldId.TaskStatus] = SPResource.GetString 
    (new CultureInfo((int)task.Web.Language, false), 
    Strings.WorkflowStatusCompleted, new object[0]); 
if (param == "Approved") 
{ 
    ht[SPBuiltInFieldId.WorkflowOutcome] = "Approved"; 
    ht["TaskStatus"] = "Approved"; 
    if (!string.IsNullOrEmpty(comments)) 
    { 
     ht[SPBuiltInFieldId.Comments] = comments; 
     ht["Comments"] = comments; 
     ht[SPBuiltInFieldId.Comment] = comments; 
    } 
} 
else 
{ 

    ht[SPBuiltInFieldId.WorkflowOutcome] = "Rejected"; 
    ht["TaskStatus"] = "Rejected"; 
    if (!string.IsNullOrEmpty(comments)) 
    { 
     ht[SPBuiltInFieldId.Comments] = comments; 
     ht["Comments"] = comments; 
     ht[SPBuiltInFieldId.Comment] = comments; 
    } 
} 
ht["FormData"] = SPWorkflowStatus.Completed; 
bool isApproveReject = AlterTask(task, ht, true, 5, 100); 

private static bool AlterTask(SPListItem task, Hashtable htData, bool fSynchronous, int attempts, int millisecondsTimeout) 
{ 
    if ((int)task[SPBuiltInFieldId.WorkflowVersion] != 1) 
    { 
     SPList parentList = task.ParentList.ParentWeb.Lists[new Guid(task[SPBuiltInFieldId.WorkflowListId].ToString())]; 
     SPListItem parentItem = parentList.Items.GetItemById((int)task[SPBuiltInFieldId.WorkflowItemId]); 
     for (int i = 0; i < attempts; i++) 
     { 
      SPWorkflow workflow = parentItem.Workflows[new Guid(task[SPBuiltInFieldId.WorkflowInstanceID].ToString())]; 
      if (!workflow.IsLocked) 
      { 
       task[SPBuiltInFieldId.WorkflowVersion] = 1; 
       task.SystemUpdate(); 
       break; 
      } 
      if (i != attempts - 1) 
       Thread.Sleep(millisecondsTimeout); 
     } 
    } 
    return SPWorkflowTask.AlterTask(task, htData, fSynchronous); 
} 

回答

2

添加註釋,當你批准/拒絕它,你只需要使用AlterTask前行任務:

ht["ows_FieldName_Comments"] = comments; 

任務被批准後您可以在工作流歷史列表中看到註釋。

您也可以從任務中的所有的綜合意見有:

Hashtable extProperties = SPWorkflowTask.GetExtendedPropertiesAsHashtable(currentTask); 

string consolidatedComments = extProperties["FieldName_ConsolidatedComments"].ToString(); 
0

它也有可能批准/通過客戶端對象模型

規範工作流程任務 審批拒絕工作流任務

 ClientContext ctx = new ClientContext("http://SiteUrl"); 
     Web web = ctx.Web; 
     List list = web.Lists.GetByTitle("My Task List"); 
     ListItem listitem = list.GetItemById(1); 
     listitem["Completed"] = true; 
     listitem["PercentComplete"] = 1; 
     listitem["Status"] = "Approved"; 
     listitem["WorkflowOutcome"] = "Approved"; 
     listitem.Update(); 
     ctx.ExecuteQuery(); 

規範工作流程任務的

拒絕
 ClientContext ctx = new ClientContext("http://SiteUrl"); 
     Web web = ctx.Web; 
     List list = web.Lists.GetByTitle("My Task List"); 
     ListItem listitem = list.GetItemById(1); 
     listitem["Completed"] = false; 
     listitem["PercentComplete"] = 1; 
     listitem["Status"] = "Rejected"; 
     listitem["WorkflowOutcome"] = "Rejected"; 
     listitem.Update(); 
     ctx.ExecuteQuery(); 
相關問題