Ejemplo n.º 1
0
        private static object LoadBizObjectArrayData(InstanceData Data, FieldSchema field)
        {
            OThinker.H3.DataModel.BizObject[] boValues = GetBOsValue(Data.BizObject, field);
            MvcDataItem      dataItem = new MvcDataItem(Data[field.Name], false);
            MvcBizObjectList mboList  = new MvcBizObjectList();

            if (boValues != null)
            {
                foreach (BizObject bo in boValues)
                {
                    MvcBizObject mbo = new MvcBizObject();
                    foreach (PropertySchema p in bo.Schema.Properties)
                    {
                        MvcDataItem item = GetMvcDataFromProperty(field, p, bo);
                        mbo.DataItems.Add(field.Name + "." + p.Name, item);
                    }
                    mboList.Add(mbo);
                }
            }
            object V = new { R = mboList };

            return(V);
        }
Ejemplo n.º 2
0
        private static MvcDataItem GetMvcDataFromProperty(FieldSchema field, PropertySchema Property, BizObject bo)
        {
            object      Value    = bo[Property.Name];
            MvcDataItem dataItem = new MvcDataItem()
            {
                N = Property.DisplayName,
                L = Property.LogicType,
                O = "",
                V = Value
            };

            if (Property.LogicType == DataLogicType.SingleParticipant)
            {
                if (!string.IsNullOrEmpty(Value + string.Empty))
                {
                    dataItem.V = new MvcListItem(Value + string.Empty, AppUtility.Engine.Organization.GetName(Value + string.Empty));
                }
            }
            else if (Property.LogicType == DataLogicType.MultiParticipant)
            {
                List <MvcListItem> listItems = null;
                string[]           ids       = Value as string[];
                if (ids != null)
                {
                    listItems = new List <MvcListItem>();
                    List <OThinker.Organization.Unit> units = AppUtility.Engine.Organization.GetUnits(ids);
                    if (units != null)
                    {
                        foreach (string user in ids)
                        {
                            string name = string.Empty;
                            foreach (OThinker.Organization.Unit u in units)
                            {
                                if (u.ObjectID == user)
                                {
                                    name = u.Name;
                                    break;
                                }
                            }
                            listItems.Add(new MvcListItem(user, name));
                        }
                    }
                }
                dataItem.V = listItems;
            }
            else if (Property.LogicType == DataLogicType.Attachment)
            {
                List <MvcListItem> listItems = new List <MvcListItem>();
                AttachmentHeader[] headers   = AppUtility.Engine.BizObjectManager.QueryAttachment(
                    Property.Name,
                    bo.ObjectID,
                    field.Name + "." + Property.Name,
                    OThinker.Data.BoolMatchValue.True,
                    null);
                if (headers != null)
                {
                    foreach (AttachmentHeader header in headers)
                    {
                        string url = AppConfig.GetReadAttachmentUrl(
                            false,
                            Property.Name,
                            bo.ObjectID,
                            header.ObjectID,
                            AttachmentOpenMethod.Download);
                        listItems.Add(new MvcListItem(header.ObjectID, header.FileName, url, header.ContentLength, header.ContentType));
                    }
                }
                dataItem.V = listItems;
            }

            return(dataItem);
        }
Ejemplo n.º 3
0
        public static object LoadMvcInstanceData(string InsID, string SchemaCode)
        {
            InstanceContext context = AppUtility.Engine.InstanceManager.GetInstanceContext(InsID);

            if (context == null)
            {
                return new { Success = false, Data = "", Msg = "InstanceID错误或不存在" }
            }
            ;
            if (SchemaCode != context.BizObjectSchemaCode)
            {
                return(new { Success = false, Data = "", Msg = "SchemaCode不一致,不能进行复制" });
            }
            var schema = AppUtility.Engine.BizObjectManager.GetPublishedSchema(context.BizObjectSchemaCode);

            var fields             = schema.Fields;
            MvcDataItemTable items = new MvcDataItemTable();
            InstanceData     data  = new InstanceData(AppUtility.Engine, InsID, "");

            string[] sys_fields = new string[] { "ObjectID", "Name", "CreatedBy", "CreatedByParentId", "OwnerId", "OwnerParentId", "CreatedTime", "ModifiedBy", "ModifiedTime", "RunningInstanceId" };
            foreach (FieldSchema field in fields)
            {
                if (items.ContainsKey(field.Name))
                {
                    continue;
                }
                if (sys_fields.Contains(field.Name))
                {
                    continue;
                }
                MvcDataItem dataItem = new MvcDataItem(data[field.Name], false);
                switch (field.LogicType)
                {
                case DataLogicType.BizObject:     // 业务对象
                    dataItem.V = LoadBizObjectData(data, field);
                    break;

                case DataLogicType.BizObjectArray:    //业务对象数组
                    dataItem.V = LoadBizObjectArrayData(data, field);
                    break;

                //case DataLogicType.Comment://处理审批意见逻辑
                //    dataItem.V = LoadCommentData(field.Name);
                //    break;
                //case DataLogicType.Attachment://处理附件逻辑
                //    dataItem.V = LoadAttachmentData(field);
                //    break;
                case DataLogicType.MultiParticipant:    //处理多人参与者逻辑
                    dataItem.V = LoadMultiParticipantData(data, field);
                    break;

                case DataLogicType.SingleParticipant:    //处理单人参与者逻辑
                    string v = data[field.Name].Value + string.Empty;
                    if (!string.IsNullOrEmpty(v))
                    {
                        OThinker.Organization.Unit unit = AppUtility.Engine.Organization.GetUnit(v);
                        if (unit != null)
                        {
                            string type = string.Empty;
                            if (unit.UnitType == OThinker.Organization.UnitType.OrganizationUnit)
                            {
                                type = "O";
                            }
                            else if (unit.UnitType == OThinker.Organization.UnitType.Group)
                            {
                                type = "G";
                            }
                            else if (unit.UnitType == OThinker.Organization.UnitType.User)
                            {
                                type = "U";
                            }
                            // dataItem.V = new MvcListItem(v, this.ActionContext.Engine.Organization.GetName(v));
                            dataItem.V = new MvcListItem(v, unit.Name, null, 0, type);
                        }
                    }
                    break;
                    //case DataLogicType.Association:
                    //    dataItem.V = LoadAssociationData(field, dataItem.V + string.Empty);
                    //    break;
                }
                items.Add(field.Name, dataItem);
            }
            return(new { Success = true, Data = items, Msg = "Sucess" });
        }
        /// <summary>
        /// 保存表单数据到引擎中
        /// </summary>
        /// <param name="Args"></param>
        public override void SaveDataFields(MvcPostValue MvcPost, MvcResult result)
        {
            try
            {
                MvcDataItem type = new MvcDataItem();
                MvcPost.BizObject.DataItems.TryGetValue("APPLICANT_TYPE", out type);
                var dataJson = JsonConvert.SerializeObject(MvcPost.BizObject.DataItems);
                var r        = JsonConvert.DeserializeObject <List <System.Collections.Generic.Dictionary <object, object> > >(JsonConvert.SerializeObject(type.V));
                if (r.Count() > 0)
                {
                    var    name     = r[0]["NAME1"] + string.Empty;
                    string msg      = "";
                    bool   isInject = new DongZheng.H3.WebApi.Controllers.XssAttribute().IsContainXSSCharacter(name, out msg);
                    if (isInject)
                    {
                        result.Successful = false;
                        result.Errors.Add("检测到SQL敏感字符");
                        return;
                    }
                    isInject = new DongZheng.H3.WebApi.Controllers.SqlInjectAttribute().IsSqlInjectCharacter(name, out msg);
                    if (isInject)
                    {
                        result.Successful = false;
                        result.Errors.Add("检测到XSS敏感字符");
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
            }

            // 保存后,后台执行事件
            base.SaveDataFields(MvcPost, result);

            string Command = Request["Command"] + string.Empty;

            //1.判断是否成功保存
            if (result.Successful && Command.ToLower() == MvcController.Button_Submit)
            {
                var version        = 1;
                var tokenId        = 1;
                var fields         = this.ActionContext.Schema.Fields;
                var sheetDataType  = this.ActionContext.SheetDataType;
                var clientActivity = (H3.WorkflowTemplate.ClientActivity) this.ActionContext.ActivityTemplate;
                var context        = this.ActionContext.Engine.InstanceManager.GetInstanceContext(this.ActionContext.InstanceId);
                if (context != null)
                {
                    var tokens = context.GetTokens("Activity2", Instance.TokenState.Unspecified).OrderByDescending(p => p.CreatedTime);
                    version = tokens.Count() == 0 ? 1 : tokens.Count();
                    tokenId = tokens.Count() == 0 ? 1 : tokens.FirstOrDefault().TokenId;
                }
                var instanceId = this.ActionContext.InstanceId;
                //2.记录数据变动日志
                Task.Run(() =>
                {
                    var trackResult = new DataLogger().DataTrack(MvcPost, fields, sheetDataType, clientActivity);
                    string sql      = "insert into H3.c_fidatatrack(objectid,instanceid,verson,activitycode,datatrack,tokenid,createdtime) values('" + Guid.NewGuid().ToString() + "','" + instanceId + "','" + version + "','Activity2',:content,'" + tokenId + "',to_date('" + DateTime.Now + "','yyyy/mm/dd HH24:MI:SS'))";
                    try
                    {
                        var i = 0;
                        string connectionCode       = "Engine";
                        var dbObject                = AppUtility.Engine.SettingManager.GetBizDbConnectionConfig(connectionCode);
                        OracleConnection connection = new OracleConnection(dbObject.DbConnectionString);
                        connection.Open();
                        OracleCommand Cmd    = new OracleCommand(sql, connection);
                        OracleParameter Temp = new OracleParameter("content", OracleType.NClob);
                        Temp.Direction       = ParameterDirection.Input;
                        Temp.Value           = trackResult;
                        Cmd.Parameters.Add(Temp);
                        i = Cmd.ExecuteNonQuery();
                        connection.Close();
                    }
                    catch (Exception ex)
                    {
                        AppUtility.Engine.LogWriter.Write("保存风控报告数据异常:" + ex.ToString());
                    }
                }).GetAwaiter();
            }
        }