/// <summary> /// 组织字段 /// </summary> /// <param name="id">字段配置对象id</param> /// <returns></returns> public IActionResult AggregateField(int id) { //获取组织字段里面本字段配置下的所有字段 var fieldListAggregations = fieldAggregationService.GetByFieldListId(id) ?? new List <FieldListAggregation>(); var aggregateMetaFieldIds = fieldListAggregations.Select(t => t.MetaFieldId).ToArray(); //获取到本对象的所有字段 var metaFields = metaFieldService.GetEntitiesUnDeletedByMetaObjectId(CurrentMetaObjectId); //过滤出已配置过的字段 var aggregateFields = metaFields.Where(t => fieldListAggregations.Any(n => n.MetaFieldId == t.Id)) .Select(t => { var fieldAggregation = fieldListAggregations.FirstOrDefault(f => f.MetaFieldId == t.Id); return(new MetaFieldViewModel { Id = t.Id, Code = t.Code, Name = t.Name, FieldAggregationId = fieldAggregation.Id, SortNumber = fieldAggregation.SortNumber }); }).OrderBy(t => t.SortNumber).ToList(); //剩下的是未配置的待选字段 var waitingForSelection = metaFields.Where(t => !aggregateMetaFieldIds.Contains(t.Id)).ToList(); //【BUG】下面这种从查询到的内存数据中排除的写法是错误的,会导致内存做的缓存中的数据根据引用地址跟着修改,导致缓存数据被改动,下次查询出错 //如果使用序列化做的缓存应该不会有如下语句出现的缓存问题 //aggregateMetaFields.ForEach(t => metaFields.RemoveAll(n => n.Id == t));//remove metafield aggregateField exist. ViewData["AggregateFields"] = aggregateFields; ViewData["MetaFields"] = waitingForSelection; ViewData["FieldListId"] = id; return(View()); }
public IActionResult AggregationCondition(int id) { ViewData["AggregationConditions"] = conditionAggregationService.GetListBySearchConditionId(id); ViewData["MetaFields"] = metaFieldService.GetEntitiesUnDeletedByMetaObjectId(CurrentMetaObjectId); ViewData["searchConditionId"] = id; return(View()); }
public IActionResult List(int metaObjectId) { //如果传递过来是0,表示没有选择对象 if (metaObjectId == 0) { ViewBag.IsSuccess = false; ViewBag.Message = "请先选择对象"; return(View()); } //这里是选择对象的入口,预先设置Session HttpContext.Session.SetInt32("MetaObjectId", metaObjectId); var obj = metaObjectService.GetById(metaObjectId); if (obj != null) { HttpContext.Session.SetString("MetaObjectCode", obj.Code); } return(View(metaFieldService.GetEntitiesUnDeletedByMetaObjectId(metaObjectId))); }
public IActionResult Get([FromQuery] QueryArgs queryArgs) { try { //Pretreatment create queryContext QueryPiplineContext queryContext = PretreatmentAndCreateQueryPiplineContext(queryArgs); //查询条件 FilterDefinition <BsonDocument> filter = FilterDefinition <BsonDocument> .Empty; //【SingleObject,TableList,Count】预处理一些逻辑 if (new InterfaceType[] { InterfaceType.SingleObject, InterfaceType.TableList, InterfaceType.Count }.Contains(queryContext.InterfaceType)) { //缓存对象下的全部未删除字段信息 queryContext.MetaFieldsUnDeleted = metaFieldService.GetEntitiesUnDeletedByMetaObjectId(queryContext.MetaObjectId); //组织查询条件 filter = conditionAggregationService.AnalysisConditionToFilterDefinitionByConditionId(queryContext, queryContext.ArgumentsDic); //缓存列字段信息 if (queryContext.InterfaceType == InterfaceType.SingleObject || queryContext.InterfaceType == InterfaceType.TableList) { queryContext.FieldListMetaFieldsOfFieldListId = _fieldListMetaFieldService.GetByFieldListId(queryContext.FieldListId); } } switch (queryContext.InterfaceType) { case InterfaceType.SingleObject: //缓存某个服务下的全部触发器脚本,包括before和after queryContext.TriggerScriptsOfOneServiceType = _triggerScriptService.GetTriggerScriptsUnDeletedByMetaObjectIdAndServiceType(queryContext.MetaObjectId, (int)ServiceType.Interface_SingleObject); filter = _triggerScriptService.RunTriggerScript(queryContext, TriggerPoint.Before, TriggerScriptService.FunctionName_MetaObject_Interface_SingleObject_Before, filter, CurrentApplicationContext, queryContext.InterfaceCode, filter); var singleObjectComponent = dataAccessService.GetSingleObjectComponent(queryContext, filter); singleObjectComponent = _triggerScriptService.RunTriggerScript(queryContext, TriggerPoint.After, TriggerScriptService.FunctionName_MetaObject_Interface_SingleObject_After, singleObjectComponent, CurrentApplicationContext, queryContext.InterfaceCode, singleObjectComponent); return(JsonResultModel.Success("get single data success", singleObjectComponent)); case InterfaceType.TableList: //缓存某个服务下的全部触发器脚本,包括before和after queryContext.TriggerScriptsOfOneServiceType = _triggerScriptService.GetTriggerScriptsUnDeletedByMetaObjectIdAndServiceType(queryContext.MetaObjectId, (int)ServiceType.Interface_TableList); filter = _triggerScriptService.RunTriggerScript(queryContext, TriggerPoint.Before, TriggerScriptService.FunctionName_MetaObject_Interface_TableList_Before, filter, CurrentApplicationContext, queryContext.InterfaceCode, filter); var sort = metaFieldService.GetSortDefinitionBySortFields(queryContext, new[] { new SortField { Column = "ModifyTime", IsDesc = true } }); var tableListComponent = dataAccessService.GetTableListComponent(queryContext, filter, queryArgs._pageIndex, queryArgs._pageSize, sort, out int totalCount); tableListComponent = _triggerScriptService.RunTriggerScript(queryContext, TriggerPoint.After, TriggerScriptService.FunctionName_MetaObject_Interface_TableList_After, tableListComponent, CurrentApplicationContext, queryContext.InterfaceCode, tableListComponent); return(JsonResultModel.Success("get data list success", tableListComponent)); case InterfaceType.Count: //缓存某个服务下的全部触发器脚本,包括before和after queryContext.TriggerScriptsOfOneServiceType = _triggerScriptService.GetTriggerScriptsUnDeletedByMetaObjectIdAndServiceType(queryContext.MetaObjectId, (int)ServiceType.Interface_Count); filter = _triggerScriptService.RunTriggerScript(queryContext, TriggerPoint.Before, TriggerScriptService.FunctionName_MetaObject_Interface_Count_Before, filter, CurrentApplicationContext, queryContext.InterfaceCode, filter); var count = dataAccessService.GetCount(queryContext.TenantId, queryContext.MetaObjectId, filter); count = _triggerScriptService.RunTriggerScript(queryContext, TriggerPoint.After, TriggerScriptService.FunctionName_MetaObject_Interface_Count_After, count, CurrentApplicationContext, queryContext.InterfaceCode, filter, count); return(JsonResultModel.Success("get data count success", count)); case InterfaceType.JsonDataSource: return(new JsonResult(Newtonsoft.Json.JsonConvert.DeserializeObject(_dataSourceService.GetById(queryContext.DataSourceId).Script))); case InterfaceType.ExecutableScriptDataSource: object triggerScriptDataSourceResult = _triggerScriptService.RunDataSourceScript(queryContext, CurrentApplicationContext, queryContext.InterfaceCode, queryContext.ArgumentsDic); return(JsonResultModel.Success("get trigger script result success", triggerScriptDataSourceResult)); default: break; } return(JsonResultModel.Success("success,no data")); } catch (ArgumentNullException argNullEx) { return(JsonResultModel.Error(argNullEx.Message)); } catch (ArgumentException argEx) { return(JsonResultModel.Error(argEx.Message)); } catch (Exception ex) { return(JsonResultModel.Error(ex.Message)); } }