public IActionResult RenderChart([FromBody] RenderChartModel model) { QueryView.Domain.QueryView view = null; if (model.QueryId.Equals(Guid.Empty) && model.EntityName.IsNotEmpty()) { view = _queryViewFinder.FindEntityDefaultView(model.EntityName); if (view != null) { model.QueryId = view.QueryViewId; } } else if (!model.QueryId.Equals(Guid.Empty)) { view = _queryViewFinder.FindById(model.QueryId); } if (view == null) { return(NotFound()); } var chartEntity = _chartFinder.FindById(model.ChartId); var result = _chartBuilder.Build(view, chartEntity, model.Filter, model.Groups.NotEmpty() ? model.Groups.Last() : string.Empty); model.Chart = result.Chart; model.ChartData = result.ChartData; model.ChartEntity = chartEntity; model.Attributes = result.Attributes; model.DataSource = result.DataSource; return(View($"~/Views/Component/{WebContext.ActionName}.cshtml", model)); }
public IActionResult CopyQueryView(Guid queryViewId, string name) { if (!queryViewId.Equals(Guid.Empty)) { var entity = _queryViewFinder.FindById(queryViewId); var newQueryView = new QueryView.Domain.QueryView(); entity.CopyTo(newQueryView); newQueryView.QueryViewId = Guid.NewGuid(); newQueryView.Name = name.IfEmpty(entity.Name + " Copy"); newQueryView.IsDefault = false; newQueryView.CreatedOn = DateTime.Now; newQueryView.CreatedBy = CurrentUser.SystemUserId; _queryViewCreater.Create(newQueryView); return(SaveSuccess(new { id = entity.QueryViewId })); } return(SaveFailure()); }
public string ToExcelFile(QueryView.Domain.QueryView queryView, FilterExpression filter, OrderExpression order, string fileName, bool includePrimaryKey = false, bool includeIndex = false, string title = "") { fileName.IfEmpty(queryView.Name); fileName = Encoding.UTF8.GetString(fileName.ToByteArray());//防止linux下乱码 var webPath = "/excel/" + fileName + "_" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls"; var filePath = _webHelper.MapPath(webPath); //SaveToExcel(list, fileName, filePath, columnNames, hideColumns, title, _fetchDataService.QueryResolver.AttributeList); using (var ms = ToExcelStream(queryView, filter, order, fileName, includePrimaryKey, includeIndex, title)) { using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { byte[] data = ms.ToArray(); fs.Write(data, 0, data.Length); fs.Flush(); } } return(webPath); }
public IActionResult Post(EditQueryViewModel model) { if (ModelState.IsValid) { var entity = new QueryView.Domain.QueryView(); model.CopyTo(entity); entity.StateCode = RecordState.Enabled; entity.IsDefault = false; entity.IsPrivate = false; entity.QueryViewId = Guid.NewGuid(); entity.CreatedBy = CurrentUser.SystemUserId; if (model.IsCustomButton && model.ButtonId.NotEmpty()) { entity.CustomButtons = model.ButtonId.SerializeToJson(); } entity.AggregateConfig = string.Empty; _queryViewCreater.Create(entity); return(CreateSuccess(new { id = entity.QueryViewId })); } return(CreateFailure(GetModelErrors())); }
public IActionResult Export([FromBody] EntityGridModel model) { QueryView.Domain.QueryView queryView = null; if (model.QueryViewId.HasValue && !model.QueryViewId.Equals(Guid.Empty)) { queryView = _queryViewFinder.FindById(model.QueryViewId.Value); } else if (model.EntityId.HasValue && !model.EntityId.Value.Equals(Guid.Empty)) { queryView = _queryViewFinder.FindEntityDefaultView(model.EntityId.Value); } else if (model.EntityName.IsNotEmpty()) { queryView = _queryViewFinder.FindEntityDefaultView(model.EntityName); } else { return(NotFound()); } if (queryView == null) { return(NotFound()); } OrderExpression orderExp = null; if (model.IsSortBySeted) { orderExp = new OrderExpression(model.SortBy, model.SortDirection == 0 ? OrderType.Ascending : OrderType.Descending); } string path = _dataExporter.ToExcelFile(queryView, model.Filter, orderExp, queryView.Name, model.ExportType == 1, includeIndex: model.IncludeIndex, title: model.ExportTitle); if (path.IsEmpty()) { return(JError(T["list_nodata"])); } return(JOk(path)); }
public IActionResult RenderGridView([FromBody] EntityGridModel model) { QueryView.Domain.QueryView queryView = null; if (model.QueryViewId.HasValue && !model.QueryViewId.Equals(Guid.Empty)) { queryView = _queryViewFinder.FindById(model.QueryViewId.Value); } else if (model.EntityId.HasValue && !model.EntityId.Value.Equals(Guid.Empty)) { queryView = _queryViewFinder.FindEntityDefaultView(model.EntityId.Value); } else if (model.EntityName.IsNotEmpty()) { queryView = _queryViewFinder.FindEntityDefaultView(model.EntityName); } else { return(NotFound()); } if (queryView == null) { return(NotFound()); } if (!queryView.IsDefault && queryView.AuthorizationEnabled) { if (!_roleObjectAccessService.Exists(queryView.QueryViewId, QueryViewDefaults.ModuleName, CurrentUser.Roles.Select(n => n.RoleId).ToArray())) { return(Unauthorized()); } } model.QueryView = queryView; model.EntityId = queryView.EntityId; FetchDescriptor fetch = new FetchDescriptor { Page = model.Page, PageSize = model.PageSize, FetchConfig = queryView.FetchConfig, GetAll = !model.PagingEnabled }; if (model.IsSortBySeted) { QueryColumnSortInfo sort = new QueryColumnSortInfo(model.SortBy, model.SortDirection == 0); fetch.Sort = sort; } //查询关键字 if (model.Q.IsNotEmpty()) { fetch.Keyword = model.Q; fetch.Field = model.QField; } var canFetch = true; //filter by relationship if (model.RelationShipName.IsNotEmpty()) { var relationship = _relationShipFinder.FindByName(model.RelationShipName); if (relationship != null && model.ReferencedRecordId.HasValue && !model.ReferencedRecordId.Value.Equals(Guid.Empty)) { if (model.Filter == null) { model.Filter = new FilterExpression(); } var condition = new ConditionExpression(relationship.ReferencingAttributeName, ConditionOperator.Equal, model.ReferencedRecordId); model.Filter.AddCondition(condition); } model.RelationShipMeta = relationship; } if (model.RelationShipName.IsNotEmpty() && (!model.ReferencedRecordId.HasValue || model.ReferencedRecordId.Value.Equals(Guid.Empty))) { //如果被引用ID为空,则不查询数据 canFetch = false; } fetch.Filter = model.Filter; if (canFetch) { fetch.User = CurrentUser; var datas = _fetchService.Execute(fetch); if (model.OnlyData) { //var serializer = new DataContractJsonSerializer(typeof(User), new DataContractJsonSerializerSettings() //{ // UseSimpleDictionaryFormat = true//去掉Key和Value //}); //return new JsonResult() { Data = datas.Items.SerializeToJson(), JsonRequestBehavior = JsonRequestBehavior.AllowGet }; return(Content(datas.SerializeToJson())); } model.Grid = _gridService.Build(queryView, _fetchService.QueryResolver.EntityList, _fetchService.QueryResolver.AttributeList); model.EntityList = _fetchService.QueryResolver.EntityList; model.AttributeList = _fetchService.QueryResolver.AttributeList; model.RelationShipList = _fetchService.QueryResolver.RelationShipList; model.Items = datas.Items; model.TotalItems = datas.TotalItems; } else { _fetchService.GetMetaDatas(fetch); model.Grid = _gridService.Build(queryView, _fetchService.QueryResolver.EntityList, _fetchService.QueryResolver.AttributeList); model.EntityList = _fetchService.QueryResolver.EntityList; model.AttributeList = _fetchService.QueryResolver.AttributeList; model.RelationShipList = _fetchService.QueryResolver.RelationShipList; model.Items = new List <dynamic>(); model.TotalItems = 0; } var buttons = _ribbonbuttonFinder.Find(model.EntityId.Value, RibbonButtonArea.SubGrid); if (buttons.NotEmpty()) { buttons = buttons.OrderBy(x => x.DisplayOrder).ToList(); model.RibbonButtons = buttons; } if (model.IsSortBySeted == false) { if (_fetchService.QueryExpression.Orders.NotEmpty()) { model.SortBy = _fetchService.QueryExpression.Orders[0].AttributeName; model.SortDirection = (int)_fetchService.QueryExpression.Orders[0].OrderType; } } return(View($"~/Views/Entity/{WebContext.ActionName}.cshtml", model)); }
/// <summary> /// 生成图表 /// </summary> /// <param name="queryId">视图记录</param> /// <param name="chartId">图表记录</param> /// <param name="filter">附加过滤条件</param> /// <returns></returns> public ChartContext Build(QueryView.Domain.QueryView queryView, Chart chartEntity, FilterExpression filter = null, string drillGroup = "") { ChartContext context = new ChartContext(); //图表对象 ChartDescriptor chart = new ChartDescriptor(); chart = chart.DeserializeFromJson(chartEntity.PresentationConfig); chart.Title = chartEntity.Name; //引用视图查询数据 _fetchDataService.GetMetaDatas(queryView.FetchConfig); if (filter != null) { _fetchDataService.QueryExpression.Criteria.AddFilter(filter); } //图表数据描述 ChartDataDescriptor chartData = new ChartDataDescriptor(); chartData = chartData.DeserializeFromJson(chartEntity.DataConfig); if (drillGroup.IsNotEmpty()) { var categoryChartData = chartData.Fetch.Find(n => n.Type == ChartItemType.Category); categoryChartData.Attribute = drillGroup; } var dataSource = _chartRepository.GetChartDataSource(chartData, _fetchDataService.QueryExpression, _fetchDataService.QueryResolver); chart.Legend = new List <string>(); var categories = new List <string>();//分类标签 var emptyStr = _loc["chart_nodata"]; foreach (var item in chartData.Fetch) { var attr = _fetchDataService.QueryResolver.AttributeList.Find(n => n.EntityId == chartEntity.EntityId && n.Name.IsCaseInsensitiveEqual(item.Attribute)); var name = item.Attribute; if (item.Type == ChartItemType.Series) { //legend chart.Legend.Add(attr.LocalizedName); var seriesData = new List <string>(); var seriesName = name + Enum.GetName(typeof(AggregateType), item.Aggregate); foreach (var d in dataSource) { var line = d as IDictionary <string, object>; seriesData.Add(line[seriesName] != null ? line[seriesName].ToString() : "0"); } var s = chart.Series.Find(n => n.Name.IsCaseInsensitiveEqual(item.Attribute)); s.Name = attr.LocalizedName; s.Data = seriesData; } else if (item.Type == ChartItemType.Category) { if (attr.TypeIsLookUp() || attr.TypeIsOwner() || attr.TypeIsCustomer()) { name += "name"; } else if (attr.TypeIsPrimaryKey()) { name = attr.Name + "name"; } foreach (var d in dataSource) { var line = d as IDictionary <string, object>; //选项类型,获取选项显示名称 if (line[name] != null && (attr.TypeIsPickList() || attr.TypeIsStatus())) { var oname = _optionSetDetailFinder.GetOptionName(attr.OptionSetId.Value, int.Parse(line[name].ToString())); categories.Add(oname.IfEmpty(emptyStr)); } //是否类型,获取选项显示名称 else if (line[name] != null && (attr.TypeIsBit() || attr.TypeIsState())) { var oname = _stringMapFinder.GetOptionName(attr.AttributeId, int.Parse(line[name].ToString())); categories.Add(oname.IfEmpty(emptyStr)); } else { categories.Add(line[name] != null ? line[name].ToString() : emptyStr); } } chart.XAxis = new XAxis() { Type = AxisType.Category, Data = categories }; } chart.SubTitle = queryView.Name; context.Chart = chart; context.ChartData = chartData; context.Attributes = _fetchDataService.QueryResolver.AttributeList; context.DataSource = dataSource; } return(context); }
public IActionResult GetViewInfo(Guid?id, Guid?entityId, string entityName) { //视图信息 List <QueryView.Domain.QueryView> views = null; //字段信息 List <Schema.Domain.Attribute> attributes = null; //按钮信息 List <RibbonButton.Domain.RibbonButton> buttons = null; //Web资源信息 string webResources = null; List <Guid> webResourceIds = null; QueryView.Domain.QueryView queryView = null; //查询视图信息 if (id.HasValue && !id.Value.Equals(Guid.Empty)) { queryView = _queryViewFinder.FindById(id.Value); if (queryView != null) { views = new List <QueryView.Domain.QueryView> { queryView }; } } else if (entityId.HasValue && !entityId.Equals(Guid.Empty)) { views = _queryViewFinder.QueryAuthorized(n => n.Where(f => f.EntityId == entityId && f.StateCode == RecordState.Enabled) .Sort(s => s.SortAscending(f => f.Name))); if (views.NotEmpty()) { queryView = views.First(x => x.IsDefault); } } else if (entityName.IsNotEmpty()) { views = _queryViewFinder.QueryAuthorized(n => n.Where(f => f.EntityName == entityName && f.StateCode == RecordState.Enabled) .Sort(s => s.SortAscending(f => f.Name))); if (views.NotEmpty()) { queryView = views.FirstOrDefault(x => x.IsDefault); } } if (queryView == null) { return(NotFound()); } //查询字段 var queryExp = new QueryExpression().DeserializeFromJson(queryView.FetchConfig); attributes = _queryMetadataFinder.GetAttributes(queryExp); //查询按钮 FilterContainer <RibbonButton.Domain.RibbonButton> buttonFilter = FilterContainerBuilder.Build <RibbonButton.Domain.RibbonButton>() .And(w => w.StateCode == RecordState.Enabled && w.EntityId == queryView.EntityId && (w.ShowArea == RibbonButtonArea.ListHead || w.ShowArea == RibbonButtonArea.ListRow || w.ShowArea == RibbonButtonArea.SubGrid)); if (queryView.IsCustomButton && queryView.CustomButtons.IsNotEmpty()) { List <Guid> buttonid = new List <Guid>(); buttonid = buttonid.DeserializeFromJson(queryView.CustomButtons); buttonFilter.And(w => w.RibbonButtonId.In(buttonid)); } buttons = _ribbonbuttonFinder.Query(n => n .Where(buttonFilter) .Sort(s => s.SortAscending(f => f.DisplayOrder))); //查询Web资源信息 if (queryView.LayoutConfig.IsNotEmpty()) { QueryViewLayoutConfigModel layoutConfig = new QueryViewLayoutConfigModel().DeserializeFromJson(queryView.LayoutConfig); if (layoutConfig != null && layoutConfig.ClientResources.NotEmpty()) { webResourceIds = layoutConfig.ClientResources; } } if (buttons.NotEmpty()) { buttons.ForEach(x => { if (x.JsLibrary != null) { string[] arr = x.JsLibrary.Split(":"); if (arr.Length > 1) { Guid webResourceId = Guid.Empty; if (Guid.TryParse(arr[1], out webResourceId)) { if (webResourceIds == null) { webResourceIds = new List <Guid>(); } webResourceIds.Add(webResourceId); } } } }); } if (webResourceIds.NotEmpty()) { StringBuilder content = new StringBuilder(); var result = _webResourceFinder.FindByIds(webResourceIds.ToArray()); foreach (var item in result) { content.Append(_webResourceContentCoder.CodeDecode(item.Content)); } webResources = content.ToString(); } else { webResources = T["notfound_record"]; } List <Guid> noneReadFields = new List <Guid>(); //获取字段权限 if (!CurrentUser.IsSuperAdmin && attributes.Count(n => n.AuthorizationEnabled) > 0) { var securityFields = attributes.Where(n => n.AuthorizationEnabled).Select(f => f.AttributeId)?.ToList(); if (securityFields.NotEmpty()) { //无权限的字段 noneReadFields = _systemUserPermissionService.GetNoneReadFields(CurrentUser.SystemUserId, securityFields); } } return(JOk(new { Views = views, Attributes = attributes, Buttons = buttons, WebResources = webResources, NoneReadFields = noneReadFields })); }
public IActionResult Post([FromBody] EntityGridModel model) { QueryView.Domain.QueryView queryView = null; if (model.QueryViewId.HasValue && !model.QueryViewId.Equals(Guid.Empty)) { queryView = _queryViewFinder.FindById(model.QueryViewId.Value); } else if (model.EntityId.HasValue && !model.EntityId.Value.Equals(Guid.Empty)) { queryView = _queryViewFinder.FindEntityDefaultView(model.EntityId.Value); } else if (model.EntityName.IsNotEmpty()) { queryView = _queryViewFinder.FindEntityDefaultView(model.EntityName); } else { return(NotFound()); } if (queryView == null) { return(NotFound()); } if (!queryView.IsDefault && queryView.AuthorizationEnabled) { if (!_roleObjectAccessService.Exists(queryView.QueryViewId, QueryViewDefaults.ModuleName, CurrentUser.Roles.Select(n => n.RoleId).ToArray())) { return(Unauthorized()); } } model.QueryView = queryView; model.EntityId = queryView.EntityId; FetchDescriptor fetch = new FetchDescriptor { Page = model.Page, PageSize = model.PageSize, FetchConfig = queryView.FetchConfig, GetAll = !model.PagingEnabled }; if (model.IsSortBySeted) { QueryColumnSortInfo sort = new QueryColumnSortInfo(model.SortBy, model.SortDirection == 0); fetch.Sort = sort; } //查询关键字 if (model.Q.IsNotEmpty()) { fetch.Keyword = model.Q; fetch.Field = model.QField; } var canFetch = true; //filter by relationship if (model.RelationShipName.IsNotEmpty()) { var relationship = _relationShipFinder.FindByName(model.RelationShipName); if (relationship != null && model.ReferencedRecordId.HasValue && !model.ReferencedRecordId.Value.Equals(Guid.Empty)) { if (model.Filter == null) { model.Filter = new FilterExpression(); } var condition = new ConditionExpression(relationship.ReferencingAttributeName, ConditionOperator.Equal, model.ReferencedRecordId); model.Filter.AddCondition(condition); } model.RelationShipMeta = relationship; } if (model.RelationShipName.IsNotEmpty() && (!model.ReferencedRecordId.HasValue || model.ReferencedRecordId.Value.Equals(Guid.Empty))) { //如果被引用ID为空,则不查询数据 canFetch = false; } fetch.Filter = model.Filter; if (canFetch) { fetch.User = CurrentUser; var fetchDatas = _fetchService.Execute(fetch); object aggregateDatas = null; if (queryView.AggregateConfig.IsNotEmpty()) { var aggFields = new List <AggregateExpressionField>().DeserializeFromJson(queryView.AggregateConfig); if (aggFields.NotEmpty()) { var queryExp = new QueryExpression().DeserializeFromJson(queryView.FetchConfig); if (model.Filter != null && (model.Filter.Conditions.NotEmpty() || (model.Filter.Filters.NotEmpty() && model.Filter.Filters.First().Conditions.NotEmpty()))) { queryExp.Criteria.AddFilter(model.Filter); } var aggExp = new AggregateExpression { ColumnSet = queryExp.ColumnSet, Criteria = queryExp.Criteria, EntityName = queryExp.EntityName, LinkEntities = queryExp.LinkEntities, AggregateFields = aggFields }; var aggDatas = _aggregateService.Execute(aggExp); var attributes = _attributeFinder.FindByName(queryView.EntityId, aggFields.Select(x => x.AttributeName).ToArray()); foreach (dynamic item in aggDatas) { var line = item as IDictionary <string, object>; var attribute = attributes.Find(x => x.Name.IsCaseInsensitiveEqual(line.Keys.First())); item.metadata = new { attribute.Name, attribute.LocalizedName, attribute.AttributeTypeName, attribute.EntityId, attribute.EntityName, attribute.EntityLocalizedName }; item.aggregatetype = aggFields.Find(x => x.AttributeName.IsCaseInsensitiveEqual(attribute.Name)).AggregateType; } aggregateDatas = new { View = new { queryView.QueryViewId, queryView.Name }, Data = aggDatas }; } } return(Content(new { FetchData = fetchDatas, AggregateData = aggregateDatas }.SerializeToJson())); } if (!model.IsSortBySeted) { if (_fetchService.QueryExpression.Orders.NotEmpty()) { model.SortBy = _fetchService.QueryExpression.Orders[0].AttributeName; model.SortDirection = (int)_fetchService.QueryExpression.Orders[0].OrderType; } } return(View($"~/Views/Entity/{WebContext.ActionName}.cshtml", model)); }
public MemoryStream ToExcelStream(QueryView.Domain.QueryView queryView, FilterExpression filter, OrderExpression order, string fileName, bool includePrimaryKey = false, bool includeIndex = false, string title = "") { _fetchDataService.GetMetaDatas(queryView.FetchConfig); if (filter != null) { _fetchDataService.QueryExpression.Criteria.AddFilter(filter); } if (order != null) { _fetchDataService.QueryExpression.Orders.Clear(); _fetchDataService.QueryExpression.Orders.Add(order); } _fetchDataService.QueryExpression.PageInfo = new PagingInfo() { PageNumber = 1, PageSize = 99999 }; var data = _fetchDataService.Execute(_fetchDataService.QueryExpression); if (data.TotalItems == 0) { return(null); } Dictionary <string, string> columnNames = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); List <string> hideColumns = new List <string>(); var grid = _gridService.Build(queryView, _fetchDataService.QueryResolver.EntityList, _fetchDataService.QueryResolver.AttributeList); if (includeIndex) { columnNames.Add("rownum", "序号"); if (data.Items.NotEmpty()) { for (int i = 0; i < data.Items.Count; i++) { data.Items[i].RowNum = i + 1; } } } if (includePrimaryKey) { var pk = _fetchDataService.QueryResolver.AttributeList.Find(n => n.EntityName.IsCaseInsensitiveEqual(_fetchDataService.QueryResolver.MainEntity.Name) && n.TypeIsPrimaryKey());//new Schema.AttributeService(user).Find(n => n.AttributeTypeName == AttributeTypeIds.PRIMARYKEY && n.EntityName == fetchService.QueryResolver.MainEntity.Name); columnNames.Add(pk.Name, pk.Name); hideColumns.Add(pk.Name); } foreach (var cell in grid.Rows[0].Cells) { var columnName = cell.Name.IndexOf(".") > 0 ? cell.Name.Split('.')[1] : cell.Name; var item = _fetchDataService.QueryResolver.AttributeList.Find(n => n.Name.IsCaseInsensitiveEqual(columnName) && n.EntityName.IsCaseInsensitiveEqual(cell.EntityName)); var label = cell.Label;//item.LocalizedName; if (cell.Label.IsEmpty()) { if (!item.EntityId.Equals(_fetchDataService.QueryResolver.MainEntity.EntityId)) { var le = _fetchDataService.QueryExpression.FindLinkEntityByName(item.EntityName); if (le != null) { var relationship = _fetchDataService.QueryResolver.RelationShipList.Find(n => n.Name.IsCaseInsensitiveEqual(cell.Name.Split('.')[0])); _relationShipFinder.WrapLocalizedLabel(relationship); label += "(" + relationship.ReferencingAttributeLocalizedName + ")"; columnName = le.EntityAlias + "." + columnName; } } else { label = item.LocalizedName; } } if (item.TypeIsPrimaryKey()) { var pkField = _fetchDataService.QueryResolver.AttributeList.Find(n => n.EntityName.IsCaseInsensitiveEqual(_fetchDataService.QueryResolver.MainEntity.Name) && n.IsPrimaryField); columnNames.Add(pkField.Name, label); } else if (item.TypeIsBit() || item.TypeIsState() || item.TypeIsStatus() || item.TypeIsPickList() || item.TypeIsLookUp() || item.TypeIsOwner() || item.TypeIsCustomer()) { columnNames.Add(cell.Name + "Name", label); } else { columnNames.Add(cell.Name, label); } } //字段权限 if (_fetchDataService.QueryResolver.AttributeList.Count(x => x.AuthorizationEnabled) > 0) { var noneRead = _systemUserPermissionService.GetNoneReadFields(_appContext.GetFeature <ICurrentUser>().SystemUserId, _fetchDataService.QueryResolver.AttributeList.Where(x => x.AuthorizationEnabled).Select(x => x.AttributeId).ToList()); if (noneRead.NotEmpty()) { var noneReadAttrs = _attributeFinder.Query(x => x.Where(f => f.AttributeId.In(noneRead))); foreach (var d in data.Items) { var _this = d as IDictionary <string, object>; foreach (var nr in noneReadAttrs) { _this[nr.Name.ToLower()] = null; if (nr.TypeIsBit() || nr.TypeIsState() || nr.TypeIsPickList() || nr.TypeIsStatus() || nr.TypeIsLookUp() || nr.TypeIsOwner() || nr.TypeIsCustomer()) { _this[nr.Name.ToLower() + "name"] = null; } } } } } var list = data.Items; //aggregation if (list.NotEmpty() && queryView.AggregateConfig.IsNotEmpty()) { var aggFields = new List <AggregateExpressionField>().DeserializeFromJson(queryView.AggregateConfig); if (aggFields.NotEmpty()) { var aggExp = new AggregateExpression { ColumnSet = _fetchDataService.QueryExpression.ColumnSet, Criteria = _fetchDataService.QueryExpression.Criteria, EntityName = _fetchDataService.QueryExpression.EntityName, LinkEntities = _fetchDataService.QueryExpression.LinkEntities, AggregateFields = aggFields }; var aggDatas = _aggregateService.Execute(aggExp); var aggData = aggDatas.NotEmpty() ? aggDatas.First() : null; if (aggData != null) { var tmpRow = list.First() as IDictionary <string, object>; var aggRow = new Dictionary <string, object>(); var aggDataRow = aggData as IDictionary <string, object>; foreach (var r in tmpRow) { var aggf = aggFields.Find(n => n.AttributeName.IsCaseInsensitiveEqual(r.Key)); if (aggf != null) { aggRow[r.Key] = aggDataRow[aggf.AttributeName.ToLower()]; } else { aggRow[r.Key] = null; } } list.Add(aggRow); } } } return(ToExcelStream(list, fileName, columnNames, hideColumns, title, _fetchDataService.QueryResolver.AttributeList)); }
public IActionResult GridView([FromBody] EntityGridModel model) { QueryView.Domain.QueryView queryView = null; if (model.QueryViewId.HasValue && !model.QueryViewId.Equals(Guid.Empty)) { queryView = _queryViewFinder.FindById(model.QueryViewId.Value); } else if (model.EntityId.HasValue && !model.EntityId.Value.Equals(Guid.Empty)) { queryView = _queryViewFinder.FindEntityDefaultView(model.EntityId.Value); } else if (model.EntityName.IsNotEmpty()) { queryView = _queryViewFinder.FindEntityDefaultView(model.EntityName); } else { return(NotFound()); } if (queryView == null) { return(NotFound()); } if (!queryView.IsDefault && queryView.AuthorizationEnabled) { if (!_roleObjectAccessService.Exists(queryView.QueryViewId, QueryViewDefaults.ModuleName, CurrentUser.Roles.Select(n => n.RoleId).ToArray())) { return(Unauthorized()); } } //EntityGridModel model = new EntityGridModel(); model.QueryView = queryView; model.EntityId = queryView.EntityId; model.QueryViewId = queryView.QueryViewId; model.TargetFormId = queryView.TargetFormId; if (model.IsEnabledViewSelector) { model.QueryViews = _queryViewFinder.QueryAuthorized(n => n.Where(f => f.EntityId == model.EntityId && f.StateCode == RecordState.Enabled) .Sort(s => s.SortAscending(f => f.Name))); } if (!model.PageSizeBySeted && CurrentUser.UserSettings.PagingLimit > 0) { model.PageSize = CurrentUser.UserSettings.PagingLimit; } FetchDescriptor fetch = new FetchDescriptor { User = CurrentUser, Page = model.Page, PageSize = model.PageSize, FetchConfig = queryView.FetchConfig }; if (model.IsSortBySeted) { QueryColumnSortInfo sort = new QueryColumnSortInfo(model.SortBy, model.SortDirection == 0); fetch.Sort = sort; } fetch.Filter = model.Filter; if (model.Q.IsNotEmpty()) { fetch.Keyword = model.Q; fetch.Field = model.QField; } //buttons if (model.IsShowButtons) { FilterContainer <RibbonButton.Domain.RibbonButton> buttonFilter = FilterContainerBuilder.Build <RibbonButton.Domain.RibbonButton>() .And(w => w.StateCode == RecordState.Enabled && w.EntityId == model.EntityId.Value && (w.ShowArea == RibbonButtonArea.ListHead || w.ShowArea == RibbonButtonArea.ListRow)); if (model.QueryView.IsCustomButton && model.QueryView.CustomButtons.IsNotEmpty()) { List <Guid> buttonid = new List <Guid>(); buttonid = buttonid.DeserializeFromJson(model.QueryView.CustomButtons); buttonFilter.And(w => w.RibbonButtonId.In(buttonid)); } var buttons = _ribbonbuttonFinder.Query(n => n .Where(buttonFilter) .Sort(s => s.SortAscending(f => f.DisplayOrder))); model.RibbonButtons = buttons; } //var datas = _fetchService.Execute(fetch); _fetchDataService.GetMetaDatas(fetch); model.Grid = _gridService.Build(queryView, _fetchDataService.QueryResolver.EntityList, _fetchDataService.QueryResolver.AttributeList); model.EntityList = _fetchDataService.QueryResolver.EntityList; model.AttributeList = _fetchDataService.QueryResolver.AttributeList; model.RelationShipList = _fetchDataService.QueryResolver.RelationShipList; //model.Items = datas.Items; //model.TotalItems = datas.TotalItems; //model.TotalPages = datas.TotalPages; //aggregation if (queryView.AggregateConfig.IsNotEmpty()) { var aggFields = new List <AggregateExpressionField>().DeserializeFromJson(queryView.AggregateConfig); if (aggFields.NotEmpty()) { var aggExp = new AggregateExpression { ColumnSet = _fetchDataService.QueryExpression.ColumnSet, Criteria = _fetchDataService.QueryExpression.Criteria, EntityName = _fetchDataService.QueryExpression.EntityName, LinkEntities = _fetchDataService.QueryExpression.LinkEntities, AggregateFields = aggFields }; var aggDatas = _aggregateService.Execute(aggExp); model.AggregationData = aggDatas.NotEmpty() ? aggDatas.First() : null; model.AggregateFields = aggFields; } } if (model.IsSortBySeted == false) { if (_fetchDataService.QueryExpression.Orders.NotEmpty()) { model.SortBy = _fetchDataService.QueryExpression.Orders[0].AttributeName; model.SortDirection = (int)_fetchDataService.QueryExpression.Orders[0].OrderType; } } //字段权限 model.NonePermissionFields = _fetchDataService.NonePermissionFields; return(View($"~/Views/Entity/{WebContext.ActionName}.cshtml", model)); }
public IActionResult RecordsDialog([FromBody] SelectEntityRecordsDialogModel model, DialogModel dm) { QueryView.Domain.QueryView queryView = null; if (model.QueryId.HasValue && !model.QueryId.Equals(Guid.Empty)) { queryView = _queryViewFinder.FindById(model.QueryId.Value); } else if (model.EntityId.HasValue && !model.EntityId.Equals(Guid.Empty)) { queryView = _queryViewFinder.FindEntityDefaultView(model.EntityId.Value); } else if (model.EntityName.IsNotEmpty()) { queryView = _queryViewFinder.FindEntityDefaultView(model.EntityName); } else { return(NotFound()); } if (queryView == null) { return(NotFound()); } model.QueryId = queryView.QueryViewId; model.QueryView = queryView; model.EntityId = queryView.EntityId; FetchDescriptor fetch = new FetchDescriptor { User = CurrentUser, Page = model.Page, PageSize = model.PageSize, FetchConfig = queryView.FetchConfig }; if (model.IsSortBySeted) { QueryColumnSortInfo sort = new QueryColumnSortInfo(model.SortBy, model.SortDirection == 0); fetch.Sort = sort; } if (model.Q.IsNotEmpty()) { fetch.Keyword = model.Q; fetch.Field = model.QField; } if (model.Filter == null) { model.Filter = new FilterExpression(); } //filter disabled records if (model.OnlyEnabledRecords) { if (model.Filter.Conditions.IsEmpty() || model.Filter.Conditions.Find(n => n.AttributeName.IsCaseInsensitiveEqual("statecode")) == null) { model.Filter.AddCondition("statecode", ConditionOperator.Equal, 1); } } //filter by relationship if (model.RelationShipName.IsNotEmpty()) { var relationship = _relationShipFinder.FindByName(model.RelationShipName); if (relationship != null && model.ReferencedRecordId.HasValue && !model.ReferencedRecordId.Value.Equals(Guid.Empty)) { var condition = new ConditionExpression(relationship.ReferencingAttributeName, ConditionOperator.Equal, model.ReferencedRecordId); model.Filter.AddCondition(condition); } model.RelationShipMeta = relationship; } fetch.Filter = model.Filter; var datas = _fetchDataService.Execute(fetch); model.Grid = _gridService.Build(queryView, _fetchDataService.QueryResolver.EntityList, _fetchDataService.QueryResolver.AttributeList); model.EntityList = _fetchDataService.QueryResolver.EntityList; model.AttributeList = _fetchDataService.QueryResolver.AttributeList; model.RelationShipList = _fetchDataService.QueryResolver.RelationShipList; model.Items = datas.Items; model.TotalItems = datas.TotalItems; if (model.IsSortBySeted == false) { if (_fetchDataService.QueryExpression.Orders.NotEmpty()) { model.SortBy = _fetchDataService.QueryExpression.Orders[0].AttributeName; model.SortDirection = (int)_fetchDataService.QueryExpression.Orders[0].OrderType; } } ViewData["DialogModel"] = dm; return(View($"~/Views/Entity/{WebContext.ActionName}.cshtml", model)); }
public IActionResult Post([FromBody] EntityGridModel model) { QueryView.Domain.QueryView queryView = null; if (model.QueryViewId.HasValue && !model.QueryViewId.Equals(Guid.Empty)) { queryView = _queryViewFinder.FindById(model.QueryViewId.Value); } else if (model.EntityId.HasValue && !model.EntityId.Value.Equals(Guid.Empty)) { queryView = _queryViewFinder.FindEntityDefaultView(model.EntityId.Value); } else if (model.EntityName.IsNotEmpty()) { queryView = _queryViewFinder.FindEntityDefaultView(model.EntityName); } else { return(NotFound()); } if (queryView == null) { return(NotFound()); } if (!queryView.IsDefault && queryView.AuthorizationEnabled) { if (!_roleObjectAccessService.Exists(queryView.QueryViewId, QueryViewDefaults.ModuleName, CurrentUser.Roles.Select(n => n.RoleId).ToArray())) { return(Unauthorized()); } } model.QueryView = queryView; model.EntityId = queryView.EntityId; FetchDescriptor fetch = new FetchDescriptor { Page = model.Page, PageSize = model.PageSize, FetchConfig = queryView.FetchConfig, GetAll = !model.PagingEnabled }; if (model.IsSortBySeted) { QueryColumnSortInfo sort = new QueryColumnSortInfo(model.SortBy, model.SortDirection == 0); fetch.Sort = sort; } //查询关键字 if (model.Q.IsNotEmpty()) { fetch.Keyword = model.Q; fetch.Field = model.QField; } var canFetch = true; //filter by relationship if (model.RelationShipName.IsNotEmpty()) { var relationship = _relationShipFinder.FindByName(model.RelationShipName); if (relationship != null && model.ReferencedRecordId.HasValue && !model.ReferencedRecordId.Value.Equals(Guid.Empty)) { if (model.Filter == null) { model.Filter = new FilterExpression(); } var condition = new ConditionExpression(relationship.ReferencingAttributeName, ConditionOperator.Equal, model.ReferencedRecordId); model.Filter.AddCondition(condition); } model.RelationShipMeta = relationship; } if (model.RelationShipName.IsNotEmpty() && (!model.ReferencedRecordId.HasValue || model.ReferencedRecordId.Value.Equals(Guid.Empty))) { //如果被引用ID为空,则不查询数据 canFetch = false; } fetch.Filter = model.Filter; if (canFetch) { fetch.User = CurrentUser; var datas = _fetchService.Execute(fetch); return(Content(datas.SerializeToJson())); } if (!model.IsSortBySeted) { if (_fetchService.QueryExpression.Orders.NotEmpty()) { model.SortBy = _fetchService.QueryExpression.Orders[0].AttributeName; model.SortDirection = (int)_fetchService.QueryExpression.Orders[0].OrderType; } } return(View($"~/Views/Entity/{WebContext.ActionName}.cshtml", model)); }
public IActionResult KanbanView([FromBody, FromQuery] KanbanGridModel model) { if (model.AggregateField.IsEmpty() || model.GroupField.IsEmpty()) { return(JError("请指定统计字段及分组字段")); } QueryView.Domain.QueryView queryView = null; if (model.QueryId.HasValue && !model.QueryId.Equals(Guid.Empty)) { queryView = _queryViewFinder.FindById(model.QueryId.Value); } if (queryView == null) { return(NotFound()); } if (!queryView.IsDefault && queryView.AuthorizationEnabled) { if (!_roleObjectAccessService.Exists(queryView.QueryViewId, QueryViewDefaults.ModuleName, CurrentUser.Roles.Select(n => n.RoleId).ToArray())) { return(Unauthorized()); } } model.QueryView = queryView; model.EntityId = queryView.EntityId; model.QueryId = queryView.QueryViewId; model.EntityName = _entityFinder.FindById(model.EntityId.Value).Name; var attributes = new List <Schema.Domain.Attribute>(); var aggAttr = _attributeFinder.Find(model.EntityId.Value, model.AggregateField); attributes.Add(aggAttr); var queryExp = new QueryExpression(); queryExp = queryExp.DeserializeFromJson(queryView.FetchConfig); var orderExp = new OrderExpression("createdon", OrderType.Descending); queryExp.Orders.Add(orderExp); Dictionary <string, AggregateType> attributeAggs = new Dictionary <string, AggregateType>(); if (aggAttr.TypeIsInt() || aggAttr.TypeIsFloat() || aggAttr.TypeIsDecimal() || aggAttr.TypeIsMoney()) { attributeAggs.Add(model.AggregateField, AggregateType.Sum); model.AggType = AggregateType.Sum; } else { attributeAggs.Add(model.AggregateField, AggregateType.Count); model.AggType = AggregateType.Count; } var datas = _aggregateService.Execute(queryExp, attributeAggs, new List <string>() { model.GroupField }); model.Items = datas; queryExp.ColumnSet.Columns.Clear(); queryExp.ColumnSet.AddColumns("createdon", model.AggregateField, model.GroupField, "ownerid"); model.GroupingDatas = _aggregateService.GroupingTop(model.GroupingTop, model.GroupField, queryExp, orderExp); var groupAttr = _attributeFinder.Find(model.EntityId.Value, model.GroupField); groupAttr.OptionSet = _optionSetFinder.FindById(groupAttr.OptionSetId.Value); attributes.Add(groupAttr); model.AttributeList = attributes; return(View($"~/Views/Entity/{WebContext.ActionName}.cshtml", model)); }