public static object GetCustomAttr(string customID, string name) { IWFWorkflowService svc = Common.GetWorkFlowAPI(); Object obj = null; try { obj = svc.GetCustomAttr(customID, name); } catch (Exception ex) { } return(obj); }
private int CountParticipantOnActivity(IWFWorkflowService api, string piID, WFBaseActivityInstance ai) { ArrayList participantList = new ArrayList(); //Retreive Activity definition to know the type of activity WFBaseProcessInstance pi = api.GetProcInst(piID); string xmlString = api.GetProcDefXml(pi.DefID); WFProcessDefinition processDef = new WFProcessDefinition(); ProcDefXmlParser xmlParser = new ProcDefXmlParser(processDef); xmlParser.Parse(xmlString); IWFActivityDefinition ad = processDef.FindActivityByName(ai.Name); WFManualActivityDefinition activityDef = null; //Get the type of activity if (ad != null && ad.GetType() == typeof(WFManualActivityDefinition)) { activityDef = (WFManualActivityDefinition)ad; } // Get manual work items for the given Activity WFAny any = WFAny.Create(ai.ID); WFQueryExpr expr = new WFQueryExpr("ACTIVITY_INST_ID", SQLExpr.EQ, any, true); WFManualWorkItem[] wks = api.QueryWorkList(expr); if (wks != null) { foreach (WFManualWorkItem wk in wks) { if (wk.Status == WFManualWorkItem.ASSIGNED || wk.Status == WFManualWorkItem.OVERDUE || wk.Status == WFManualWorkItem.COMPLETED) { if (!String.IsNullOrEmpty(wk.UserID) && !participantList.Contains(wk.UserID.ToLower())) { participantList.Add(wk.UserID.ToLower()); } } } } // if activity is Agilework of type ProcessAdaptation if (activityDef != null && activityDef.CustomProperties.Contains("Ascentn.AgileWork.Premier.ProcessAdaptation")) { //Get type of the AgileWork string activityType = api.GetCustomAttr(pi.WorkObjectID, ai.ID + "_ApprovalType") as string; //Count number of participant in case of sequential type if (activityType == "Sequential") { string activityProperties = api.GetCustomAttr(pi.WorkObjectID, ai.ID + "_ActivityProperties") as string; if (!String.IsNullOrEmpty(activityProperties)) { string[] approverInfoList = activityProperties.Split(';'); foreach (string approverInfo in approverInfoList) { string[] userInfoList = approverInfo.Split('|'); string user = userInfoList[0]; if (!String.IsNullOrEmpty(user) && !participantList.Contains(user.ToLower())) { participantList.Add(user.ToLower()); } } } } } return(participantList.Count); }
private int CountParticipantOnActivity(IWFWorkflowService api, string piID, WFBaseActivityInstance ai) { ArrayList participantList = new ArrayList(); //Retreive Activity definition to know the type of activity WFBaseProcessInstance pi = api.GetProcInst(piID); string xmlString = api.GetProcDefXml(pi.DefID); WFProcessDefinition processDef = new WFProcessDefinition(); ProcDefXmlParser xmlParser = new ProcDefXmlParser(processDef); xmlParser.Parse(xmlString); IWFActivityDefinition ad = processDef.FindActivityByName(ai.Name); WFManualActivityDefinition activityDef = null; //Get the type of activity if (ad != null && ad.GetType() == typeof(WFManualActivityDefinition)) { activityDef = (WFManualActivityDefinition)ad; } // Get manual work items for the given Activity WFAny any = WFAny.Create(ai.ID); WFQueryExpr expr = new WFQueryExpr("ACTIVITY_INST_ID", SQLExpr.EQ, any, true); WFManualWorkItem[] wks = api.QueryWorkList(expr); if (wks != null) { foreach (WFManualWorkItem wk in wks) { if (wk.Status == WFManualWorkItem.ASSIGNED || wk.Status == WFManualWorkItem.OVERDUE || wk.Status == WFManualWorkItem.COMPLETED) { if (!String.IsNullOrEmpty(wk.UserID) && !participantList.Contains(wk.UserID.ToLower())) { participantList.Add(wk.UserID.ToLower()); } } } } // if activity is Agilework of type ProcessAdaptation if (activityDef != null && activityDef.CustomProperties.Contains("Ascentn.AgileWork.Premier.ProcessAdaptation")) { //Get type of the AgileWork string activityType = api.GetCustomAttr(pi.WorkObjectID, ai.ID + "_ApprovalType") as string; //Count number of participant in case of sequential type if (activityType == "Sequential") { string activityProperties = api.GetCustomAttr(pi.WorkObjectID, ai.ID + "_ActivityProperties") as string; if (!String.IsNullOrEmpty(activityProperties)) { string[] approverInfoList = activityProperties.Split(';'); foreach (string approverInfo in approverInfoList) { string[] userInfoList = approverInfo.Split('|'); string user = userInfoList[0]; if (!String.IsNullOrEmpty(user) && !participantList.Contains(user.ToLower())) { participantList.Add(user.ToLower()); } } } } } return participantList.Count; }