1

SharePoint에서 워크 플로를 프로그래밍 방식으로 승인/거부하려고합니다. 성공적으로이 작업을 수행 할 수 있지만 주석을 추가 할 수는 없습니다. old question에서 코드를 얻었는데, 아직 답을 얻지 못했기 때문에 새로운 질문을 시작할 것이라고 생각했습니다.프로그래밍 방식으로 워크 플로 승인/거부 및 의견 추가

내 코드 : 작업이 승인 된 후

ht["ows_FieldName_Comments"] = comments; 

:

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 전에 선을 사용할 필요가 그것을 승인/거부 작업에 댓글을 추가하려면 워크 플로 기록 목록에서 주석을 볼 수 있습니다.

또한 함께 작업에서 모든 통합 된 의견을 얻을 수 있습니다 :

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();