private object LoadInstances(string SimulationID, string InstanceId) { if (string.IsNullOrEmpty(SimulationID)) { return(null); } InstanceSimulation Simulation = this.Engine.SimulationManager.GetSimulation(SimulationID); if (Simulation == null || Simulation.NextBatchNo <= InstanceSimulationLog.InitialBatchNo) { return(null); } InstanceContext context = this.Engine.InstanceManager.GetInstanceContext(InstanceId); if (context == null) { return(null); } var InstanceName = Simulation.InstanceName; var Originator = this.Engine.Organization.GetName(Simulation.Originators[0]); var State = "InstanceState.InstanceState_" + Enum.Parse(typeof(InstanceState), (int)context.State + string.Empty).ToString(); Dictionary <string, bool> ActivityIgnore = new Dictionary <string, bool>(); Dictionary <string, string[]> ExistItems = new Dictionary <string, string[]>(); Dictionary <string, string> DicUnits = new Dictionary <string, string>(); if (Simulation.DataItems != null && Simulation.DataItems.Length > 0) { foreach (InstanceSimulationDataItem item in Simulation.DataItems) { if (!ExistItems.ContainsKey(item.ItemName)) { ExistItems.Add(item.ItemName, item.ItemValues); } if (!ActivityIgnore.ContainsKey(item.ItemName)) { ActivityIgnore.Add(item.ItemName, item.Ignore); } } } OThinker.H3.WorkflowTemplate.PublishedWorkflowTemplate tempalte = this.Engine.WorkflowManager.GetDefaultWorkflow(Simulation.WorkflowCode); foreach (OThinker.H3.WorkflowTemplate.Activity activity in tempalte.Activities) { if (ExistItems.ContainsKey(activity.ActivityCode)) { OThinker.Organization.Unit[] Units = this.Engine.Organization.GetUnits(ExistItems[activity.ActivityCode]).ToArray(); if (Units != null) { foreach (OThinker.Organization.Unit u in Units) { if (!DicUnits.ContainsKey(u.ObjectID)) { DicUnits.Add(u.ObjectID, u.Name); } } } } } int failedCount = 0; int IgnoreCount = 0; //输出到前台的表格数据 List <object> InstanceObjs = new List <object>(); string[] workitemIds = this.Engine.Query.QueryWorkItems(InstanceId, -1, OThinker.H3.WorkItem.WorkItemType.Unspecified, OThinker.H3.WorkItem.WorkItemState.Finished, OThinker.Data.BoolMatchValue.Unspecified); string[] workitemIdsUnfinished = this.Engine.Query.QueryWorkItems(InstanceId, -1, OThinker.H3.WorkItem.WorkItemType.Unspecified, OThinker.H3.WorkItem.WorkItemState.Unfinished, OThinker.Data.BoolMatchValue.Unspecified); workitemIds = OThinker.Data.ArrayConvertor <string> .Add(workitemIds, workitemIdsUnfinished); if (workitemIds != null || workitemIds.Length > 0) { foreach (string workitemId in workitemIds) { OThinker.H3.WorkItem.WorkItem workItem = this.Engine.WorkItemManager.GetWorkItem(workitemId); if (ActivityIgnore.ContainsKey(workItem.ActivityCode)) { if (!ActivityIgnore[workItem.ActivityCode]) { if (ExistItems.ContainsKey(workItem.ActivityCode)) { if (ExistItems[workItem.ActivityCode] == null || ExistItems[workItem.ActivityCode].Length == 0) { IgnoreCount++; } else if (!ExistItems[workItem.ActivityCode].Contains(workItem.Participant)) { failedCount++; } } } else { IgnoreCount++; } string UnitNames = string.Empty; foreach (string id in ExistItems[workItem.ActivityCode]) { if (DicUnits.ContainsKey(id)) { UnitNames += DicUnits[id] + ";"; } } bool result = true; if (!ActivityIgnore[workItem.ActivityCode] && ExistItems[workItem.ActivityCode].Length > 0 && !ExistItems[workItem.ActivityCode].Contains(workItem.Participant)) { result = false; } InstanceObjs.Add(new { WorkItemName = workItem.DisplayName, Participant = this.Engine.Organization.GetName(workItem.Participant), ExisItem = UnitNames.TrimEnd(';'), Ignore = ActivityIgnore[workItem.ActivityCode] ? "Simulation.SheetPrint_Yes" : "Simulation.SheetPrint_No", Result = result }); } } } var WorkItemCount = workitemIds.Length + string.Empty; var SuccessCount = (workitemIds.Length - IgnoreCount - failedCount) + string.Empty; var FailedCount = failedCount + string.Empty; double Percent = 0; if (workitemIds.Length > 0) { Percent = (workitemIds.Length - IgnoreCount - failedCount) * 100 / (workitemIds.Length - IgnoreCount); } var PercentString = Percent + "%"; var gridData = CreateLigerUIGridData(InstanceObjs.ToArray()); var obj = new { InstanceName = InstanceName, Originator = Originator, State = State, WorkItemCount = WorkItemCount, SuccessCount = SuccessCount, FailedCount = FailedCount, IgnoreCount = IgnoreCount.ToString(), Percent = PercentString, Instances = gridData }; return(obj); //ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "Instances", "var Instances=" + CreateLigerUIGridData(InstanceObjs.ToArray()) + ";", true); }
public JsonResult SaveSimulation(EditSimulationViewModel model) { return(ExecuteFunctionRun(() => { InstanceSimulation Simulation = null; ActionResult result = new ActionResult(false, ""); if (string.IsNullOrEmpty(model.ObjectID)) { Simulation = new InstanceSimulation() { WorkflowCode = model.WorkflowCode }; } else { Simulation = this.Engine.SimulationManager.GetSimulation(model.ObjectID); } if (Simulation == null) { //编辑的模拟不存在 result.Message = "Simulation.SimulationDetail_Mssg1"; return Json(result, JsonRequestBehavior.AllowGet); } Simulation.Originators = (string[])JsonConvert.DeserializeObject(model.Creator, typeof(string[])); //(model.Creator + string.Empty).Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (Simulation.Originators == null || Simulation.Originators.Length == 0) { Simulation.Originators = new string[] { this.UserValidator.User.ObjectID }; } Simulation.InstanceName = model.UseCaseName; if (string.IsNullOrEmpty(Simulation.InstanceName)) { //编辑的模拟不存在 result.Message = "Simulation.SimulationDetail_Mssg2"; return Json(result, JsonRequestBehavior.AllowGet); } //数据项预设值 Dictionary <string, string[]> DataItems = (Dictionary <string, string[]>)JsonConvert.DeserializeObject(model.DataItemsString + string.Empty, typeof(Dictionary <string, string[]>)); Dictionary <string, bool> Ignores = (Dictionary <string, bool>)JsonConvert.DeserializeObject(model.IgnoresString + string.Empty, typeof(Dictionary <string, bool>)); List <InstanceSimulationDataItem> Items = new List <InstanceSimulationDataItem>(); foreach (string itemName in DataItems.Keys) { Items.Add(new InstanceSimulationDataItem() { ItemName = itemName, ItemValues = DataItems[itemName] }); } if (Ignores != null && Ignores.Count > 0) { foreach (InstanceSimulationDataItem item in Items) { if (Ignores.ContainsKey(item.ItemName) && Ignores[item.ItemName] != null && Ignores[item.ItemName]) { item.Ignore = true; } } } Simulation.DataItems = Items.ToArray(); if (!string.IsNullOrEmpty(model.ObjectID)) { result.Success = this.Engine.SimulationManager.UpdateSimulation(Simulation); } else { result.Success = this.Engine.SimulationManager.AddSimulation(Simulation); } if (result.Success) { result.Message = Simulation.ObjectID; } else { result.Message = "msgGlobalString.SaveFailed"; } return Json(result, JsonRequestBehavior.AllowGet); })); }
public JsonResult LoadSimulation(string simulationID, string workflowCode) { return(ExecuteFunctionRun(() => { EditSimulationViewModel model = new EditSimulationViewModel(); ActionResult result = new ActionResult(true); DataModel.BizObjectSchema Schema = null; OThinker.H3.WorkflowTemplate.WorkflowClause Clause = null; InstanceSimulation Simulation = null; if (!string.IsNullOrEmpty(workflowCode)) { Clause = this.Engine.WorkflowManager.GetClause(workflowCode); } if (Clause != null) { Schema = this.Engine.BizObjectManager.GetPublishedSchema(Clause.BizSchemaCode); } if (Schema == null) { result.Success = false; result.Message = "EditBizObjectSchema.Msg0"; return Json(result, JsonRequestBehavior.AllowGet); } WorkflowTemplate.PublishedWorkflowTemplate tempalte = this.Engine.WorkflowManager.GetDefaultWorkflow(workflowCode); if (tempalte == null) { result.Success = false; result.Message = "StartInstance.StartInstance_Msg1"; return Json(result, JsonRequestBehavior.AllowGet); } if (string.IsNullOrEmpty(simulationID)) { model.WorkflowCode = workflowCode; model.WorkflowName = this.Engine.WorkflowManager.GetClauseDisplayName(workflowCode); ShowDataItems(workflowCode, Schema, null, null, model); } else { Simulation = this.Engine.SimulationManager.GetSimulation(simulationID); if (Simulation == null) { result.Success = false; result.Message = "Simulation.SimulationDetail_Mssg1"; return Json(result, JsonRequestBehavior.AllowGet); } else { if (Clause != null) { model.WorkflowName = Clause.WorkflowName + "[" + workflowCode + "]"; } model.UseCaseName = Simulation.InstanceName; model.Creator = JsonConvert.SerializeObject(Simulation.Originators); //DataItems ShowDataItems(workflowCode, Schema, Simulation, null, model); } } result.Extend = model; return Json(result, JsonRequestBehavior.AllowGet); })); }
EditSimulationViewModel ShowDataItems(string workflowCode, DataModel.BizObjectSchema Schema, InstanceSimulation simulation, Dictionary <string, object> valueTable, EditSimulationViewModel model) { if (Schema == null || Schema.Properties == null) { return(model); } //<ItemName,Values> WorkflowTemplate.PublishedWorkflowTemplate tempalte = this.Engine.WorkflowManager.GetDefaultWorkflow(workflowCode); Dictionary <string, string[]> ExistItems = new Dictionary <string, string[]>(); Dictionary <string, bool> ActivityIgnore = new Dictionary <string, bool>(); if (valueTable != null) { foreach (string key in valueTable.Keys) { string[] values = new string[1]; values[0] = valueTable[key] + string.Empty; ExistItems.Add(key, values); } } else if (simulation != null && simulation.DataItems != null && simulation.DataItems.Length > 0) { foreach (InstanceSimulationDataItem item in simulation.DataItems) { if (!ExistItems.ContainsKey(item.ItemName)) { ExistItems.Add(item.ItemName, item.ItemValues); } if (!ActivityIgnore.ContainsKey(item.ItemName)) { ActivityIgnore.Add(item.ItemName, item.Ignore); } } } //可设置的类型 Data.DataLogicType[] SetableLogicTypes = new Data.DataLogicType[] { Data.DataLogicType.Bool, //Data.DataLogicType.Comment, Data.DataLogicType.DateTime, Data.DataLogicType.Decimal, Data.DataLogicType.Double, //Data.DataLogicType.Html, Data.DataLogicType.Int, Data.DataLogicType.Long, Data.DataLogicType.MultiParticipant, Data.DataLogicType.ShortString, Data.DataLogicType.SingleParticipant, Data.DataLogicType.String, Data.DataLogicType.TimeSpan//, //Data.DataLogicType.Xml }; List <string> UserIDs = new List <string>(); foreach (DataModel.PropertySchema p in Schema.Properties) { if (!DataModel.BizObjectSchema.IsReservedProperty(p.Name) && (p.LogicType == Data.DataLogicType.SingleParticipant || p.LogicType == Data.DataLogicType.MultiParticipant) && ExistItems.ContainsKey(p.Name) && ExistItems[p.Name] != null) { foreach (string id in ExistItems[p.Name]) { UserIDs.Add(id); } } } foreach (WorkflowTemplate.Activity activity in tempalte.Activities) { if (activity.ActivityType == WorkflowTemplate.ActivityType.Start || activity.ActivityType == WorkflowTemplate.ActivityType.End) { continue; } if (activity.ActivityCode == tempalte.StartActivityCode) { continue; } if (ExistItems.ContainsKey(activity.ActivityCode)) { foreach (string id in ExistItems[activity.ActivityCode]) { UserIDs.Add(id); } } } OThinker.Organization.Unit[] Units = this.Engine.Organization.GetUnits(UserIDs.ToArray()).ToArray(); //<UserID,UserName> Dictionary <string, string> DicUnits = new Dictionary <string, string>(); if (Units != null) { foreach (OThinker.Organization.Unit u in Units) { if (!DicUnits.ContainsKey(u.ObjectID)) { DicUnits.Add(u.ObjectID, u.Name); } } } List <object> lstDataItems = new List <object>(); foreach (DataModel.PropertySchema p in Schema.Properties) { if (DataModel.BizObjectSchema.IsReservedProperty(p.Name)) { continue; } if (!SetableLogicTypes.Contains(p.LogicType)) { continue; } string DisplayValueString = string.Empty; if (ExistItems.ContainsKey(p.Name) && ExistItems[p.Name] != null && ExistItems[p.Name].Length > 0) { if (p.LogicType == Data.DataLogicType.SingleParticipant || p.LogicType == Data.DataLogicType.MultiParticipant) { foreach (string _Value in ExistItems[p.Name]) { if (DicUnits.ContainsKey(_Value)) { DisplayValueString += DicUnits[_Value] + ";"; } else { DisplayValueString += ";"; } } } else { DisplayValueString = string.Join(";", ExistItems[p.Name]); } } lstDataItems.Add(new { ItemName = p.Name, ItemValues = ExistItems.ContainsKey(p.Name) ? ExistItems[p.Name] : null, DisplayValueString = DisplayValueString, LogicType = OThinker.H3.Data.DataLogicTypeConvertor.ToLogicTypeName(p.LogicType), Editable = SetableLogicTypes.Contains(p.LogicType) }); } List <object> lstActivitys = new List <object>(); foreach (WorkflowTemplate.Activity activity in tempalte.Activities) { if (activity.ActivityType == WorkflowTemplate.ActivityType.Start || activity.ActivityType == WorkflowTemplate.ActivityType.End) { continue; } if (activity.ActivityCode == tempalte.StartActivityCode) { continue; } string DisplayValueString = string.Empty; if (ExistItems.ContainsKey(activity.ActivityCode) && ExistItems[activity.ActivityCode] != null && ExistItems[activity.ActivityCode].Length > 0) { foreach (string _Value in ExistItems[activity.ActivityCode]) { if (DicUnits.ContainsKey(_Value)) { DisplayValueString += DicUnits[_Value] + ";"; } else { DisplayValueString += ";"; } } } lstActivitys.Add(new { WorkflowTemplate = workflowCode, ActivityCode = activity.ActivityCode, ActivityName = activity.DisplayName, Participants = ExistItems.ContainsKey(activity.ActivityCode) ? ExistItems[activity.ActivityCode] : null, DisplayValueString = DisplayValueString, Ignore = ActivityIgnore.ContainsKey(activity.ActivityCode) ? ActivityIgnore[activity.ActivityCode] : false, Editable = true }); } model.DataItems = CreateLigerUIGridData(lstDataItems.ToArray()); model.Activitys = CreateLigerUIGridData(lstActivitys.ToArray()); return(model); }
/// <summary> /// /// </summary> /// <param name="SimulationID"></param> /// <param name="SimulationToken"></param> /// <param name="SchemaCode">流程编码</param> /// <returns></returns> private object LoadInstances(string SimulationID, string SimulationToken, string SchemaCode) { if (string.IsNullOrEmpty(SimulationID)) { return(null); } InstanceSimulation Simulation = this.Engine.SimulationManager.GetSimulation(SimulationID); if (Simulation == null || Simulation.NextBatchNo <= InstanceSimulationLog.InitialBatchNo) { return(null); } //根据流程编码查找SchemaCode string bizChemaCode = this.Engine.WorkflowManager.GetClause(SchemaCode).BizSchemaCode; //查看批次号 int SimulationTokenID = 0; int.TryParse(SimulationToken + string.Empty, out SimulationTokenID); if (SimulationTokenID <= InstanceSimulationLog.InitialBatchNo || SimulationTokenID >= Simulation.NextBatchNo) { SimulationTokenID = Simulation.NextBatchNo - 1; } object gridData = null; DataTable InstanceTable = this.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteDataTable( " SELECT " + "A." + InstanceSimulationLog.PropertyName_DataItemsSummary + ",B." + InstanceContext.C_ObjectID + ",B." + InstanceContext.PropertyName_Originator + ",B." + InstanceContext.PropertyName_InstanceName + ",B." + InstanceContext.PropertyName_State + " FROM " + InstanceSimulationLog.TableName + " A JOIN " + InstanceContext.TableName + " B " + " ON A." + InstanceSimulationLog.PropertyName_InstanceId + "=B." + InstanceContext.C_ObjectID + " WHERE A." + InstanceSimulationLog.PropertyName_SimulationID + "='" + SimulationID + "'" + " AND A." + InstanceSimulationLog.PropertyName_BatchNo + "=" + SimulationTokenID + " "); if (InstanceTable != null && InstanceTable.Rows.Count > 0) { //一次获取所有用户 List <string> lstUserIDs = new List <string>(); foreach (DataRow row in InstanceTable.Rows) { lstUserIDs.Add(row[InstanceContext.PropertyName_Originator] + string.Empty); } OThinker.Organization.Unit[] Units = this.Engine.Organization.GetUnits(lstUserIDs.ToArray()).ToArray(); //<UserID,UserName> Dictionary <string, string> DicUnits = new Dictionary <string, string>(); if (Units != null) { foreach (OThinker.Organization.Unit u in Units) { if (!DicUnits.ContainsKey(u.ObjectID)) { DicUnits.Add(u.ObjectID, u.Name); } } } //输出到前台的表格数据 List <object> InstanceObjs = new List <object>(); foreach (DataRow row in InstanceTable.Rows) { string DataItemsSummary = row[InstanceSimulationLog.PropertyName_DataItemsSummary] + string.Empty; string instanceId = row[InstanceContext.C_ObjectID] + string.Empty; Dictionary <string, string> NameValues = InstanceSimulationLog.DeserializeItemSummary(DataItemsSummary); OThinker.H3.DataModel.BizObjectSchema schema = this.Engine.BizObjectManager.GetPublishedSchema(bizChemaCode); Dictionary <string, string> ItemValues = new Dictionary <string, string>(); List <string> participants = new List <string>(); foreach (string key in NameValues.Keys) { OThinker.H3.DataModel.FieldSchema field = schema.GetField(key); if (field != null && (field.LogicType == OThinker.H3.Data.DataLogicType.SingleParticipant || field.LogicType == OThinker.H3.Data.DataLogicType.MultiParticipant)) { participants.Add(NameValues[key]); } } OThinker.Organization.Unit[] units = this.Engine.Organization.GetUnits(participants.ToArray()).ToArray(); Dictionary <string, string> names = new Dictionary <string, string>(); foreach (OThinker.Organization.Unit unit in units) { if (!names.ContainsKey(unit.ObjectID)) { names.Add(unit.ObjectID, unit.Name); } } foreach (string key in NameValues.Keys) { OThinker.H3.DataModel.FieldSchema field = schema.GetField(key); if (field != null && (field.LogicType == OThinker.H3.Data.DataLogicType.SingleParticipant || field.LogicType == OThinker.H3.Data.DataLogicType.MultiParticipant)) { if (names.ContainsKey(NameValues[key])) { ItemValues.Add(key, names[NameValues[key]]); } } else { ItemValues.Add(key, NameValues[key]); } } InstanceObjs.Add(new { ObjectID = instanceId, Originator = DicUnits.ContainsKey(row[InstanceContext.PropertyName_Originator] + string.Empty) ? DicUnits[row[InstanceContext.PropertyName_Originator] + string.Empty] : "", InstanceName = row[InstanceContext.PropertyName_InstanceName] + string.Empty, State = "InstanceState.InstanceState_" + Enum.Parse(typeof(InstanceState), row[InstanceContext.PropertyName_State] + string.Empty).ToString(), Url = this.GetInstanceUrl(instanceId, "", DateTime.Now.ToString("yyyyMMddHHmmss")), DataItems = ItemValues }); } gridData = CreateLigerUIGridData(InstanceObjs.ToArray()); } if (gridData == null) { gridData = new { Rows = new object[] { }, Total = 0 }; } var data = new { SimulationName = Simulation.InstanceName, Instances = gridData }; return(data); }