Step 1) Get the Workflow instance id from the custom list using the Server Object Model
Step 2) Build CAML query and pass the below parameters to the Workflow history Custom list
2.a) Workflow instance ID
2.b) Event type = 1 (1 is for completed workflows)
2.c) Primary Item ID (Retrieved by custom list properties using object model)
Code Snippet is as follows
#region Getting Review Start Date - Workflow Initiated
SPListItem oobapprovalitem = listItem; //Pass the list item
oobapprovalworkflows = oobapprovalitem.Workflows.Count;
if (oobapprovalworkflows > 0) { oobapprovalworkflowReviewStartItemID = oobapprovalitem.Workflows[0].ItemId.ToString();
SPList reviewStartoobapprovalwrkflwHistoryList = thisWeb.Lists["Workflow History"]; SPQuery reviewStartoobapprovalwrkflwHistoryquery = new SPQuery();
StringBuilder strReviewStartDateQuery = new StringBuilder(); strReviewStartDateQuery.Append("<Where>"); strReviewStartDateQuery.Append("<And>"); strReviewStartDateQuery.Append("<Eq><FieldRef Name='Event' /><Value Type='WorkflowEventType'>1</Value>"); strReviewStartDateQuery.Append("</Eq>");
if (oobapprovalworkflows > 1) { strReviewStartDateQuery.Append("<Or>"); }
strReviewStartDateQuery.Append("<Eq><FieldRef Name='WorkflowInstance' /><Value Type='Text'>" + "{" + oobapprovalListItem.Workflows[0].InstanceId + "}" + "</Value>"); strReviewStartDateQuery.Append("</Eq>");
if (oobapprovalworkflows > 1) { for (int i = 1; i < oobapprovalworkflows; i++) { if (i != oobapprovalworkflows - 1) { strReviewStartDateQuery.Append("<Or>"); }
strReviewStartDateQuery.Append("<Eq><FieldRef Name='WorkflowInstance' /><Value Type='Text'>" + "{" + oobapprovalListItem.Workflows[i].InstanceId + "}" + "</Value>"); strReviewStartDateQuery.Append("</Eq>");
}
if (oobapprovalworkflows > 1) { for (int i = 1; i < oobapprovalworkflows; i++) { if (i != oobapprovalworkflows - 1) { strReviewStartDateQuery.Append("</Or>"); } }
strReviewStartDateQuery.Append("</Or>"); }
strReviewStartDateQuery.Append("</And>"); strReviewStartDateQuery.Append("</Where>"); strReviewStartDateQuery.Append("<OrderBy><FieldRef Name='Occurred' Ascending='True' /></OrderBy>");
reviewStartoobapprovalwrkflwHistoryquery.Query = strReviewStartDateQuery.ToString();// @"<Where><And><Eq><FieldRef Name='Event' /><Value Type='WorkflowEventType'>1</Value></Eq><And><Eq><FieldRef Name='WorkflowInstance' /><Value Type='Text'>" + "{" + oobapprovalListItem.Workflows[0].InstanceId + "}" + "</Value></Eq><Eq><FieldRef Name='Item' /><Value Type='Integer'>" + oobapprovalworkflowReviewStartItemID + "</Value></Eq></And></And></Where>"; reviewStartoobapprovalwrkflwHistoryquery.RowLimit = 1;
SPListItemCollection reviewStartoobapprovalwrkflwHistorylistItemCollection = reviewStartoobapprovalwrkflwHistoryList.GetItems(reviewStartoobapprovalwrkflwHistoryquery); if (reviewStartoobapprovalwrkflwHistorylistItemCollection.Count > 0) { foreach (SPListItem reviewStartoobapprovalwrkflwHistoryListItem in reviewStartoobapprovalwrkflwHistorylistItemCollection) { if (reviewStartoobapprovalwrkflwHistoryListItem["Primary Item ID"].ToString() == oobapprovalworkflowReviewStartItemID) { //Getting Date Occured column value // strIQA1ReviewStartDate = reviewStartoobapprovalwrkflwHistoryListItem[11].ToString(); strIQA1ReviewStartDate = Convert.ToDateTime(reviewStartoobapprovalwrkflwHistoryListItem[11].ToString()).ToString(@"MM/dd/yyyy h:mm:ss tt", CultureInfo.InvariantCulture); //this.Controls.Add(reviewStartDate);
} } } strReviewStartDateQuery.Length = 0; } #endregion
Maheshkumar S Tiwari edited Original. Comment: Added tags