// GET: odata/Data
        public IQueryable <DscQData> Get(string datasource, string path)
        {
            ClaimsPrincipal cp = (ClaimsPrincipal)User;

            string user = cp.FindFirst(ClaimTypes.Name)?.Value;
            string pswd = cp.FindFirst(BasicClaimTypes.Password)?.Value;

            // DscQParameters (из кеша)
            DscQParameterQuery parameterQuery = new DscQParameterQuery()
            {
                Path       = path.Replace(DscQRouteHandler.RandomWord, "\\"),
                DataSource = datasource,
                UserId     = user,
                Password   = pswd
            };

            DscQParameterQueryResult parameterResult = _queryDispatcher.Dispatch <DscQParameterQuery, DscQParameterQueryResult>(parameterQuery);

            DscQDataQuery dataQuery = new DscQDataQuery()
            {
                Path       = path.Replace(DscQRouteHandler.RandomWord, "\\"),
                DataSource = datasource,
                UserId     = user,
                Password   = pswd,
                Parameters = Request.GetQueryNameValuePairs()
                             .Where(p => !p.Key.StartsWith("$"))
                             .Select((p, i) => new DscQParameter()
                {
                    // заполнение ключа [No] для вычисления хеша
                    No        = i + 1,
                    FieldCode = p.Key,
                    Value     = p.Value,
                    // FlexField из списка DscQParameter's
                    FlexField = parameterResult
                                .Items
                                .FirstOrDefault(item => item.FieldCode.Equals(p.Key, StringComparison.OrdinalIgnoreCase))
                                ?.FlexField
                })
                             .ToList()
            };

            DscQDataQueryResult result = _queryDispatcher.Dispatch <DscQDataQuery, DscQDataQueryResult>(dataQuery);

            return(result.Items);
        }
Example #2
0
        public DscQData[] GetResults(DscQDataQuery query)
        {
            // DscQParameters (из кеша)
            DscQParameterQuery parameterQuery = new DscQParameterQuery()
            {
                Path       = query.Path,
                DataSource = query.DataSource,
                UserId     = _securityToken.UserName,
                Password   = _securityToken.Password
            };

            DscQParameterQueryResult parameterResult = _queryDispatcher.Dispatch <DscQParameterQuery, DscQParameterQueryResult>(parameterQuery);

            query.UserId   = _securityToken.UserName;
            query.Password = _securityToken.Password;

            if (query.DynamicParameters != null)
            {
                query.Parameters = query.DynamicParameters
                                   .Select((p, i) => new DscQParameter()
                {
                    // заполнение ключа [No] для вычисления хеша
                    No        = i + 1,
                    FieldCode = p.Key,
                    Value     = p.Value,
                    // FlexField из списка DscQParameter's
                    FlexField = parameterResult
                                .Items
                                .FirstOrDefault(item => item.FieldCode.Equals(p.Key, StringComparison.OrdinalIgnoreCase))
                                ?.FlexField
                })
                                   .ToList();
            }

            DscQDataQueryResult result = _queryDispatcher.Dispatch <DscQDataQuery, DscQDataQueryResult>(query);

            return(result.Items.ToArray());
        }