示例#1
0
        /// <summary>
        /// Clear all settings
        /// </summary>
        /// <returns></returns>
        public RestClient Clear()
        {
            QueryItems.Clear();
            PathItems   = StringVector.Empty;
            BaseAddress = null;

            return(this);
        }
示例#2
0
        /// <summary>
        /// Add query item
        /// </summary>
        /// <param name="name">name of query</param>
        /// <param name="value">value of query</param>
        /// <returns>this</returns>
        public RestClient AddQuery(string name, string value)
        {
            name.VerifyNotEmpty(nameof(name));
            value.VerifyNotEmpty(nameof(value));

            QueryItems.Add(name, value);

            return(this);
        }
示例#3
0
        /// <summary>
        /// Clear all settings
        /// </summary>
        /// <returns></returns>
        public RestClient Clear()
        {
            HeaderItems.Clear();
            QueryItems.Clear();
            PathItems   = StringVector.Empty;
            AbsoluteUri = null;
            BaseAddress = null;

            return(this);
        }
示例#4
0
 public QueryModelHandler()
 {
     QueryLists = new List <List <QueryDatabaseModel> >();
     QueryLists.Add(new List <QueryDatabaseModel>()
     {
         new QueryDatabaseModel()
     });
     SelectedIndexes = new List <QueryDatabaseModel>();
     QueryItems.Add(new QueryDatabaseModel());
 }
示例#5
0
        /// <summary>
        /// Add query item
        /// </summary>
        /// <param name="name">name of query</param>
        /// <param name="value">value of query</param>
        /// <returns>this</returns>
        public RestClient AddQuery(string name, string value)
        {
            Verify.IsNotEmpty(nameof(name), name);

            if (value.IsNotEmpty())
            {
                QueryItems.Add(name, value);
            }

            return(this);
        }
示例#6
0
            public override void Intercept(HttpClient httpClient)
            {
                QueryItems.Clear();

                QueryItems.Add(new KeyValuePair <string, string>("Accept", "application/json"));

                var sessionInfo = _sessionInfoHolder.SessionInfo;

                if (sessionInfo != null)
                {
                    QueryItems.Add(new KeyValuePair <string, string>("Authorization", sessionInfo.ToString()));
                }

                base.Intercept(httpClient);
            }
示例#7
0
        private DateTime?ConvertToDate(string key, string value)
        {
            var year  = 0;
            var month = 0;
            var day   = 0;

            if (key.EndsWith("-date"))
            {
                // Convert from one query string item.
                var dateItems = value.SplitSafe("-");
                year  = dateItems.SafeGet(0).ToInt();
                month = dateItems.SafeGet(1).ToInt();
                day   = dateItems.SafeGet(2).ToInt();
            }
            else if (key.EndsWith("-year"))
            {
                // Convert from three form controls.
                var dateKey = key.Replace("-year", "");
                year = value.ToInt();

                if (QueryItems.ContainsKey(dateKey + "-month"))
                {
                    var str = QueryItems[dateKey + "-month"].FirstOrDefault();
                    month = str?.ToInt() ?? 0;
                }

                if (QueryItems.ContainsKey(dateKey + "-day"))
                {
                    var str = QueryItems[dateKey + "-day"].FirstOrDefault();
                    day = str?.ToInt() ?? 0;
                }
            }

            if (year > 0 && month > 0 && day > 0)
            {
                try
                {
                    return(new DateTime(year, month, day));
                }
                catch
                {
                }
            }

            return(null);
        }
示例#8
0
        /// <summary>
        /// Build HTTP request
        /// </summary>
        /// <param name="method">HTTP method</param>
        /// <returns>HTTP request message</returns>
        private HttpRequestMessage BuildRequestMessage(HttpMethod method)
        {
            var builder = BaseAddress != null ? new UriBuilder(BaseAddress) : new UriBuilder()
            {
                Path = PathItems
            };

            if (QueryItems.Count > 0)
            {
                builder.Query = string.Join("&", QueryItems.Select(x => Uri.EscapeDataString(x.Key).Trim() + "=" + Uri.EscapeDataString(x.Value).Trim()));
            }

            var request = new HttpRequestMessage(method, builder.Uri)
            {
                Content = Content,
            };

            return(request);
        }
示例#9
0
        /// <summary>
        /// Build HTTP request
        /// </summary>
        /// <param name="method">HTTP method</param>
        /// <returns>HTTP request message</returns>
        private HttpRequestMessage BuildRequestMessage(HttpMethod method)
        {
            var builder = BaseAddress != null ? new UriBuilder(BaseAddress) : new UriBuilder();

            builder.Path = (builder.Path?.Split("/", StringSplitOptions.RemoveEmptyEntries) ?? new string[0])
                           .Concat(PathItems)
                           .Func(x => string.Join("/", x));

            if (QueryItems.Count > 0)
            {
                builder.Query = string.Join("&", QueryItems.Select(x => Uri.EscapeDataString(x.Key).Trim() + "=" + Uri.EscapeDataString(x.Value).Trim()));
            }

            var request = new HttpRequestMessage(method, builder.Uri)
            {
                Content = Content,
            };

            return(request);
        }
示例#10
0
        private string GetPropertyValue(QueryItems property, Dictionary <string, DataItem> included)
        {
            var propertyValue = string.Empty;

            if (property == null)
            {
                return(propertyValue);
            }

            foreach (var relationship in property.Data)
            {
                var item = included.LocateItem(relationship);

                if (item == null)
                {
                    continue;
                }

                propertyValue = item.Item.value;
            }

            return(propertyValue);
        }
示例#11
0
 public async Task <object> Any(QueryItems request)
 {
     using var db = AutoQuery.GetDb(request, base.Request);
     return(await AutoQuery.ExecuteAsync(request, AutoQuery.CreateQuery(request, Request, db), db));
 }
示例#12
0
    /// <summary>
    /// 调用 OnQuery 回调方法获得数据源
    /// </summary>
    protected async Task QueryData()
    {
        // 目前设计使用 Items 参数后不回调 OnQueryAsync 方法
        if (Items == null)
        {
            if (OnQueryAsync == null && DynamicContext != null && typeof(TItem).IsAssignableTo(typeof(IDynamicObject)))
            {
                // 动态数据
                SelectedRows.Clear();
                QueryItems = DynamicContext.GetItems().Cast <TItem>();
                if (DynamicContext.OnGetSelectedRows != null)
                {
                    SelectedRows.AddRange(DynamicContext.OnGetSelectedRows().Cast <TItem>());
                }
                TotalCount = QueryItems.Count();
            }
            else
            {
                // 数据集合
                await OnQuery();
            }
        }
        else
        {
            RowsCache = null;
        }

        async Task OnQuery()
        {
            QueryData <TItem>?queryData = null;
            var queryOption             = new QueryPageOptions()
            {
                IsPage          = IsPagination,
                PageIndex       = PageIndex,
                PageItems       = PageItems,
                SearchText      = SearchText,
                SortOrder       = SortOrder,
                SortName        = SortName,
                SortList        = string.IsNullOrEmpty(SortString) ? null : new List <string>(SortString.Split(",", StringSplitOptions.RemoveEmptyEntries)),
                Filters         = Filters.Values,
                Searchs         = GetSearchs(),
                AdvanceSearchs  = GetAdvanceSearchs(),
                CustomerSearchs = GetCustomerSearchs(),
                SearchModel     = SearchModel,
                StartIndex      = StartIndex
            };

            if (CustomerSearchModel != null)
            {
                queryOption.SearchModel = CustomerSearchModel;
            }

            queryData = await InternalOnQueryAsync(queryOption);

            RowsCache       = null;
            Items           = null;
            QueryItems      = queryData.Items;
            TotalCount      = queryData.TotalCount;
            IsAdvanceSearch = queryData.IsAdvanceSearch;

            // 处理选中行逻辑
            ProcessSelectedRows();

            // 分页情况下内部不做处理防止页码错乱
            if (!queryOption.IsPage)
            {
                ProcessPageData(queryData, queryOption);
            }

            if (IsTree)
            {
                await ProcessTreeData();
            }

            void ProcessSelectedRows()
            {
                // 判断模型是否有 [Key] Id 等可识别字段尝试重构
                var rows = new List <TItem>();

                if (HasKeyAttribute)
                {
                    // 更新选中行逻辑
                    foreach (var item in SelectedRows)
                    {
                        var key = Utility.GetKeyValue <TItem, object>(item);
                        if (key != null)
                        {
                            var row = QueryItems.FirstOrDefault(i => Utility.GetKeyValue <TItem, object>(i).ToString() == key.ToString());
                            if (row != null)
                            {
                                rows.Add(row);
                            }
                        }
                    }
                }
                else
                {
                    foreach (var row in SelectedRows)
                    {
                        if (QueryItems.Any(i => i == row))
                        {
                            rows.Add(row);
                        }
                    }
                }
                SelectedRows = rows;
            }

            void ProcessPageData(QueryData <TItem> queryData, QueryPageOptions queryOption)
            {
                var filtered = queryData.IsFiltered;
                var sorted   = queryData.IsSorted;
                var searched = queryData.IsSearch;

                // 外部未处理 SearchText 模糊查询
                if (!searched && queryOption.Searchs.Any())
                {
                    QueryItems = QueryItems.Where(queryOption.Searchs.GetFilterFunc <TItem>(FilterLogic.Or));
                    TotalCount = QueryItems.Count();
                }

                // 外部未处理自定义高级搜索 内部进行高级自定义搜索过滤
                if (!IsAdvanceSearch && queryOption.CustomerSearchs.Any())
                {
                    QueryItems      = QueryItems.Where(queryOption.CustomerSearchs.GetFilterFunc <TItem>());
                    TotalCount      = QueryItems.Count();
                    IsAdvanceSearch = true;
                }

                // 外部未过滤,内部自行过滤
                if (!filtered && queryOption.Filters.Any())
                {
                    QueryItems = QueryItems.Where(queryOption.Filters.GetFilterFunc <TItem>());
                    TotalCount = QueryItems.Count();
                }

                // 外部未处理排序,内部自行排序
                // 先处理列头排序 再处理默认多列排序
                if (!sorted)
                {
                    if (queryOption.SortOrder != SortOrder.Unset && !string.IsNullOrEmpty(queryOption.SortName))
                    {
                        var invoker = Utility.GetSortFunc <TItem>();
                        QueryItems = invoker(QueryItems, queryOption.SortName, queryOption.SortOrder);
                    }
                    else if (queryOption.SortList != null && queryOption.SortList.Any())
                    {
                        var invoker = Utility.GetSortListFunc <TItem>();
                        QueryItems = invoker(QueryItems, queryOption.SortList);
                    }
                }
            }

            async Task ProcessTreeData()
            {
                KeySet.Clear();
                if (HasKeyAttribute)
                {
                    CheckExpandKeys(TreeRows);
                }
                if (KeySet.Count > 0)
                {
                    TreeRows = new List <TableTreeNode <TItem> >();
                    foreach (var item in QueryItems)
                    {
                        var node = new TableTreeNode <TItem>(item)
                        {
                            HasChildren = CheckTreeChildren(item),
                        };
                        node.IsExpand = IsExpandRow(node);
                        if (node.IsExpand)
                        {
                            await RestoreIsExpand(node);
                        }
                        TreeRows.Add(node);
                    }
                }
                else
                {
                    TreeRows = QueryItems.Select(item => new TableTreeNode <TItem>(item)
                    {
                        HasChildren = CheckTreeChildren(item)
                    }).ToList();
                }
            }
        }
    }