/// <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());
        }
예제 #2
0
 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)));
        }
예제 #4
0
        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));
            }
        }