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); }
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); }
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(); } }