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);
        }
示例#2
0
        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);
            }));
        }
示例#3
0
        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);
            }));
        }
示例#4
0
        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);
        }