/// <summary> /// 获取对象 /// </summary> /// <param name="id"></param> /// <param name="name"></param> /// <returns></returns> protected object Get(int id, string name) { //return (new OrgManager(this.DataHelper)).GetEntity(name, id); var es = IEntitySchemaHelper.Get(name); return(this.GenericHelper.FindById(es.EntityType, id)); }
internal void Delete(int id, string entityName) { IEntitySchema es = IEntitySchemaHelper.Get(entityName); object entity = es.CreateInstance(); entity.SetPropertyValue(es.KeyName, id); this.GenericHelper.Delete(entity); }
private DataTable GetData() { long entityId = this.Field.RefRelation.ParentEntityId.Value; //这里和元网站一致,不要用this.Field.RefEntityId var es = IEntitySchemaHelper.Get(entityId); var displayFieldName = es.DisplayName; //entity.GetDisplayFieldName(); var keyFieldName = es.KeyName; // entity.GetKeyFieldName(); string sql = string.Format("select {0} as ID, {1} as NAME from {2} ", keyFieldName, displayFieldName, es.EntityName); DataTable data; using (BizDataContext db = new BizDataContext()) { data = db.ExecuteDataTable(sql); } return(data); }
/// <summary> /// 活动实体的内容 /// </summary> /// <param name="process"></param> /// <param name="activityInstance"></param> /// <param name="data"></param> private void LoadActivityEntityData(BizDataContext context, SysProcess process, WfActivityInstance activityInstance, WfWorkflowInstanceData data) { //实体名 string entityName = process.ActivityEntity.EntityName; var es = IEntitySchemaHelper.Get(entityName); //主键名 string keyFieldName = es.KeyName;// process.ActivityEntity.GetKeyFieldName(); //字段列表 var fieldList = process.ActivityEntity.Fields.ToList(); //签核流程 bool isApprove = process.ProcessCategory == (int)ProcessCategory.Approve; if (isApprove) { SysApproveActivityData ad = context.FirstOrDefault <SysApproveActivityData>(p => p.ActivityInstanceId == activityInstance.ActivityInstanceId); if (ad != null) { WfActivityEntityInstance entity = GetApproveEntityData(context, ad); activityInstance.ActivityEntityInstance = entity; } } else { //标哥说普通流程活动实例ID和活动实体ID是一样的…… int id = activityInstance.ActivityInstanceId; dynamic entityData = (new OrgManager(context)).GetEntity(entityName, id); if (entityData != null) { Type entityType = entityData.GetType(); WfActivityEntityInstance entity = new WfActivityEntityInstance() { ActivityEntityInstanceId = id, }; //属性的键值对 entity.ActivityEntityInstanceData = entityType.GetProperties() .Where(i => i.Name != keyFieldName && !IgnoreList.Contains(i.Name)) .ToDictionary(i => i.Name, i => { var pValue = new WfActivityFieldData(); try { pValue.Value = Convert.ToString(i.GetValue(entityData, null)); } catch { } return(pValue); }); //加上DisplayText foreach (var i in entity.ActivityEntityInstanceData) { var field = fieldList.FirstOrDefault(q => q.FieldName.Contains(i.Key)); if (field != null) { i.Value.DisplayText = field.DisplayText; } else { i.Value.DisplayText = i.Key; } } activityInstance.ActivityEntityInstance = entity; } } }
/// <summary> /// 新增表单实例,新增表单实体对象 /// </summary> public int SaveFormInstance(BizDataContext db) { SysFormInstance fi = new SysFormInstance() { FormInstanceId = db.GetNextIdentity_Int(), FormId = this.FormId, //--------------// FormDate = Convert.ToDateTime(this.lblFormDate.Text.Trim()), FormCode = this.lblFormCode.Text.Trim(), FormDescription = Server.HtmlDecode(this.lblFormDescription.Text.Trim()).Replace("<br />", "\r\n"), FormTitle = this.lblFormTitle.Text.Trim(), State = (int)FormInstanceState.New, //---------------// CreateTime = DateTime.Now, CreateUserId = this.BasePage.LoginUserID, OwnerId = this.BasePage.LoginUserID, }; #region 收集实体字段的值,创建实体对象 List <SysFormField> ffList = db.Where <SysFormField>(p => p.FormId == this.FormId); Dictionary <string, object> valueDict = new Dictionary <string, object>(); foreach (var ff in ffList) { string controlId = string.Format("ff_{0}", ff.FormFieldId); IDrisionControl control = this.BasePage.GetControlById <IDrisionControl>(controlId); if (control == null) { throw new Exception("表单控件解析出错"); } valueDict[control.FieldName] = control.GetValue(); } SysEntity entity = this.BasePage.EntityCache.FindById <SysEntity>(this.EntityId); if (entity != null) //元数据预置实体,利用EntitySchema创建对象插入 { var es = IEntitySchemaHelper.Get(this.EntityId); if (es == null) { throw new Exception("元数据实体EntitySchema找不到"); } object obj = es.CreateInstance(); int objectId = db.GetNextIdentity_Int(); obj.SetPropertyConvertValue(es.KeyName, objectId); //主键 foreach (var p in valueDict) { obj.SetPropertyConvertValue(p.Key, p.Value); } //一些默认字段 if (es.RequiredLevel() != RequireLevelEnum.PlatForm) { if (obj.GetPropertyValue(ConstFieldNames.CreateTime) == null) { obj.SetPropertyConvertValue(ConstFieldNames.CreateTime, DateTime.Now); } if (obj.GetPropertyValue(ConstFieldNames.CreateUserId) == null) { obj.SetPropertyConvertValue(ConstFieldNames.CreateUserId, this.BasePage.LoginUserID); } if (obj.GetPropertyValue(ConstFieldNames.OwnerId) == null) { obj.SetPropertyConvertValue(ConstFieldNames.OwnerId, this.BasePage.LoginUserID); } if (obj.GetPropertyValue(ConstFieldNames.State) == null) { obj.SetPropertyConvertValue(ConstFieldNames.State, 0); } if (obj.GetPropertyValue(ConstFieldNames.StateDetail) == null) { obj.SetPropertyConvertValue(ConstFieldNames.StateDetail, 0); } } db.Insert(obj); fi.ObjectId = objectId; } else //自定义实体 { entity = this.DataHelper.FindById <SysEntity>(this.EntityId); fi.ObjectId = db.DynamicInsert(entity, valueDict); } #endregion db.Insert(fi); return(fi.FormInstanceId); }
/// <summary> /// 保存表单实体,和表单实体对象 /// </summary> /// <param name="db"></param> public int UpdateFormInstance(BizDataContext db) { SysFormInstance fi = db.FindById <SysFormInstance>(this.FormInstanceId); if (fi == null) { throw new Exception("表单实例不存在"); } if (fi.State != (int)FormInstanceState.Approving) { fi.State = (int)FormInstanceState.New; //2013-10-8 zhumin 重新保存后状态改为新增,审核中除外 } fi.UpdateUserId = this.BasePage.LoginUserID; fi.UpdateTime = DateTime.Now; //收集实体字段的值,创建实体对象 List <SysFormField> ffList = db.Where <SysFormField>(p => p.FormId == this.FormId); Dictionary <string, object> valueDict = new Dictionary <string, object>(); foreach (var ff in ffList) { string controlId = string.Format("ff_{0}", ff.FormFieldId); IDrisionControl control = this.BasePage.GetControlById <IDrisionControl>(controlId); if (control == null) { throw new Exception("表单控件解析出错"); } valueDict[control.FieldName] = control.GetValue(); } SysEntity entity = this.BasePage.EntityCache.FindById <SysEntity>(this.EntityId); if (entity != null) //元数据预置实体,利用EntitySchema创建对象插入 { var es = IEntitySchemaHelper.Get(this.EntityId); if (es == null) { throw new Exception("元数据实体EntitySchema找不到"); } object obj = db.FindById(es.EntityType, this.ObjectId); List <string> cols = new List <string>(); foreach (var p in valueDict) { if (obj.GetPropertyValue(p.Key) != p.Value) { obj.SetPropertyConvertValue(p.Key, p.Value); cols.Add(p.Key); } } db.UpdatePartial(obj, cols); } else //自定义实体 { entity = this.DataHelper.FindById <SysEntity>(this.EntityId); db.DynamicUpdate(entity, this.ObjectId, valueDict); } db.UpdatePartial(fi, p => new { p.State, p.UpdateTime, p.UpdateUserId }); return(fi.FormInstanceId); }
/// <summary> /// 加载表单实体对象 /// </summary> private void LoadObjectData(Dictionary <long, IDrisionControl> controlDict) { List <SysFormField> ffList = this.DataHelper.Where <SysFormField>(p => p.FormId == this.FormId); SysEntity entity = this.BasePage.EntityCache.FindById <SysEntity>(this.EntityId); if (entity != null) //元数据预置实体,利用EntitySchema查询,给控件赋值 { #region 元数据预置实体 var es = IEntitySchemaHelper.Get(this.EntityId); if (es == null) { throw new Exception("元数据实体EntitySchema找不到"); } object obj = this.DataHelper.FindById(es.EntityType, this.ObjectId); foreach (var ff in ffList) { ff.Field = BasePage.GetField(ff.FieldId); if (controlDict.ContainsKey(ff.FormFieldId)) { IDrisionControl control = controlDict[ff.FormFieldId]; object value = obj.GetPropertyValue(control.FieldName); if (this.IsDetailPage) { FormPreviewHelper.SetValueForDetailPage(ff, control, value); } else { FormPreviewHelper.SetValue(ff, control, value); } } else { throw new Exception("表单字段找不到对应控件"); } } #endregion } else { #region 自定义实体 entity = this.DataHelper.FindById <SysEntity>(this.EntityId); Dictionary <string, object> valueDict = this.DataHelper.DynamicFindById(entity, this.ObjectId); foreach (var ff in ffList) { ff.Field = BasePage.GetField(ff.FieldId); if (controlDict.ContainsKey(ff.FormFieldId)) { IDrisionControl control = controlDict[ff.FormFieldId]; if (!valueDict.ContainsKey(control.FieldName.ToLower())) { throw new Exception(string.Format("字段{0}找不到", control.FieldName)); } object value = valueDict[control.FieldName.ToLower()]; if (this.IsDetailPage) { FormPreviewHelper.SetValueForDetailPage(ff, control, value); } else { FormPreviewHelper.SetValue(ff, control, value); } } else { throw new Exception("表单字段找不到对应控件"); } } #endregion } }
protected IEntitySchema GetEs(string name) { IEntitySchema es = IEntitySchemaHelper.Get(name); return(es); }