Пример #1
0
        public void FilterTest()
        {
            string expected = @"<?xml version=""1.0"" encoding=""utf-8""?>
<function controlid=""unittest"">
    <query>
        <select>
            <field>CUSTOMERID</field>
            <field>RECORDNO</field>
        </select>
        <object>ARINVOICE</object>
        <filter>
            <lessthanorequalto>
                <field>RECORDNO</field>
                <value>10</value>
            </lessthanorequalto>
        </filter>
        <options />
    </query>
</function>";

            SelectBuilder builder = new SelectBuilder();

            ISelect[] fields = builder.Fields(new[] { "CUSTOMERID", "RECORDNO" }).GetFields();

            IFilter filter = (new Filter("RECORDNO")).SetLessThanOrEqualTo("10");

            IQueryFunction query = new QueryFunction("unittest")
            {
                FromObject   = "ARINVOICE",
                SelectFields = fields,
                Filter       = filter
            };

            this.CompareXml(expected, query);
        }
Пример #2
0
        public IFunctionBuilder AddFunction(QueryFunction function, params IExpressionBuilder[] arguments)
        {
            var builder = this.CreateFunction(function, arguments);

            this.Expressions.Add(builder);
            return(builder);
        }
Пример #3
0
        public void EmptyOrderByTest()
        {
            string expected = @"<?xml version=""1.0"" encoding=""utf-8""?>
<function controlid=""unittest"">
    <query>
        <select>
            <field>CUSTOMERID</field>
        </select>
        <object>CLASS</object>
        <options />
    </query>
</function>";

            SelectBuilder builder = new SelectBuilder();

            ISelect[] fields = builder.Field("CUSTOMERID").GetFields();

            IQueryFunction query = new QueryFunction("unittest")
            {
                FromObject   = "CLASS",
                SelectFields = fields,
                OrderBy      = new IOrder[0]
            };

            this.CompareXml(expected, query);
        }
Пример #4
0
        private QueryFunction GetQueryFunction()
        {
            QueryFunction queryFunction = new QueryFunction("ReportFunction", UFIDA.U8.UAP.Services.ReportResource.U8ResService.GetResStringEx("U8.UAP.Services.ReportData.ConvertDataToBO.报表查询函数"));

            queryFunction.QuerySettings.Add(this.GetQuerySetting());
            return(queryFunction);
        }
Пример #5
0
        public void EmptyObjectNameTest()
        {
            Stream            stream      = new MemoryStream();
            XmlWriterSettings xmlSettings = new XmlWriterSettings
            {
                Encoding = Encoding.GetEncoding("UTF-8")
            };

            IaXmlWriter xml = new IaXmlWriter(stream, xmlSettings);

            SelectBuilder builder = new SelectBuilder();

            ISelect[] fields = builder.Field("CUSTOMERID").GetFields();

            IQueryFunction query = new QueryFunction("unittest")
            {
                FromObject   = "",
                SelectFields = fields
            };

            var ex = Record.Exception(() => query.WriteXml(ref xml));

            Assert.IsType <ArgumentException>(ex);
            Assert.Equal("From Object is required for query; set through method from setter.", ex.Message);
        }
Пример #6
0
        private IQueryBuilder RecursiveHaving(WhereType type, QueryFunction queryFunc)
        {
            var queryBuilder = new QueryBuilder(_options);

            queryFunc(queryBuilder);
            _query.HavingForest.Add(new Where(type, queryBuilder._query.HavingForest));
            return(this);
        }
Пример #7
0
 public IFunctionBuilder CreateFunction(QueryFunction function, params IExpressionBuilder[] arguments)
 {
     return(this.Fragment <IFunctionBuilder>().With(builder =>
     {
         builder.Function = function;
         builder.AddArguments(arguments);
     }));
 }
Пример #8
0
        public void FilterOrWithAndConditionTest()
        {
            string expected = @"<?xml version=""1.0"" encoding=""utf-8""?>
<function controlid=""unittest"">
    <query>
        <select>
            <field>BATCHNO</field>
            <field>RECORDNO</field>
            <field>STATE</field>
        </select>
        <object>GLBATCH</object>
        <filter>
            <or>
                <equalto>
                    <field>JOURNAL</field>
                    <value>APJ</value>
                </equalto>
                <and>
                    <greaterthanorequalto>
                        <field>BATCHNO</field>
                        <value>1</value>
                    </greaterthanorequalto>
                    <equalto>
                        <field>STATE</field>
                        <value>Posted</value>
                    </equalto>
                </and>
            </or>
        </filter>
        <options />
    </query>
</function>";

            SelectBuilder builder = new SelectBuilder();

            ISelect[] fields = builder.Fields(new[] { "BATCHNO", "RECORDNO", "STATE" }).GetFields();

            AndOperator batchnoAndState = new AndOperator(new List <IFilter>());

            batchnoAndState.AddFilter((new Filter("BATCHNO")).SetGreaterThanOrEqualTo("1"));
            batchnoAndState.AddFilter((new Filter("STATE")).SetEqualTo("Posted"));

            IFilter journal = new Filter("JOURNAL").SetEqualTo("APJ");

            IFilter filter = new OrOperator(new List <IFilter>()
            {
                journal, batchnoAndState
            });

            IQueryFunction query = new QueryFunction("unittest")
            {
                FromObject   = "GLBATCH",
                SelectFields = fields,
                Filter       = filter
            };

            this.CompareXml(expected, query);
        }
Пример #9
0
        public Task <QueryOutputDTO> QueryQueryAsync(byte[] label, string subdomain, BlockParameter blockParameter = null)
        {
            var queryFunction = new QueryFunction();

            queryFunction.Label     = label;
            queryFunction.Subdomain = subdomain;

            return(ContractHandler.QueryDeserializingToObjectAsync <QueryFunction, QueryOutputDTO>(queryFunction, blockParameter));
        }
Пример #10
0
 public SequenceTileSelector(QueryFunction matcher,
                             SortedList <TFactor, TRenderTile> choices,
                             Func <int, int, TContext> contextProvider = null)
 {
     this.matcher         = matcher;
     this.comparer        = choices.Comparer;
     this.choiceKeys      = new List <TFactor>(choices.Keys);
     this.choiceValues    = new List <TRenderTile>(choices.Values);
     this.contextProvider = contextProvider ?? DefaultContext;
 }
Пример #11
0
        private QueryFunction GetQueryFunctionFrom(BusinessObject bo)
        {
            QueryFunction qf = (QueryFunction)bo.Functions[0];

            if (qf == null &&
                qf.QuerySettings == null &&
                qf.QuerySettings.Count == 0)
            {
                throw new TempDBServiceException(
                          "不能从数据引擎获取正确的QueryFunction对象",
                          "DataSourceId:" + this._dataSourceId);
            }
            return(qf);
        }
Пример #12
0
        private QuerySetting GetQuerySetting()
        {
            BusinessObject bo           = this.GetBOFromDataEngine();
            QueryFunction  qf           = this.GetQueryFunctionFrom(bo);
            QuerySetting   ruerySetting = qf.QuerySettings[0];

            if (ruerySetting == null)
            {
                throw new TempDBServiceException(
                          "从数据引擎获取的QuerySetting对象为空",
                          "DataSourceId:" + this._dataSourceId);
            }
            return(ruerySetting);
        }
Пример #13
0
        public void NegativePagesizeTest()
        {
            SelectBuilder builder = new SelectBuilder();

            ISelect[] fields = builder.Field("CUSTOMERID").GetFields();

            QueryFunction query = new QueryFunction("unittest")
            {
                FromObject   = "CUSTOMER",
                SelectFields = fields,
            };

            var ex = Record.Exception(() => query.PageSize = -1);

            Assert.IsType <IntacctException>(ex);
            Assert.Equal("PageSize cannot be negative. Set PageSize greater than zero.", ex.Message);
        }
Пример #14
0
        public void NoSelectFieldsTest()
        {
            Stream            stream      = new MemoryStream();
            XmlWriterSettings xmlSettings = new XmlWriterSettings
            {
                Encoding = Encoding.GetEncoding("UTF-8")
            };

            IaXmlWriter xml = new IaXmlWriter(stream, xmlSettings);

            IQueryFunction query = new QueryFunction("unittest")
            {
                FromObject = "CUSTOMER"
            };

            var ex = Record.Exception(() => query.WriteXml(ref xml));

            Assert.IsType <ArgumentException>(ex);
            Assert.Equal("Select fields are required for query; set through method SelectFields setter.", ex.Message);
        }
        private SerializableFunction MapQueryFunction(QueryFunction queryFunction)
        {
            var resultFunction = new SerializableFunction();
            var functionType   = queryFunction.GetType();

            switch (functionType.ToString())
            {
            case "Terrasoft.Core.DB.DatePartQueryFunction":
                var datePartQueryFunction = (Terrasoft.Core.DB.DatePartQueryFunction)queryFunction;
                resultFunction.Expression   = datePartQueryFunction.Expression;
                resultFunction.FunctionType = SerializableFunctionType.DatePart;
                resultFunction = new SerializableDatePartFunction(resultFunction)
                {
                    Interval     = datePartQueryFunction.Interval,
                    UseUtcOffset = datePartQueryFunction.UseUtcOffset
                };
                break;
            }
            return(resultFunction);
        }
Пример #16
0
        public void OrderByTest()
        {
            string expected = @"<?xml version=""1.0"" encoding=""utf-8""?>
<function controlid=""unittest"">
    <query>
        <select>
            <field>CUSTOMERID</field>
        </select>
        <object>CLASS</object>
        <orderby>
            <order>
                <field>TOTALDUE</field>
                <ascending />
            </order>
            <order>
                <field>RECORDNO</field>
                <descending />
            </order>
        </orderby>
        <options />
    </query>
</function>";

            SelectBuilder builder = new SelectBuilder();

            ISelect[] fields = builder.Field("CUSTOMERID").GetFields();

            IOrder[] orderBy = (new OrderBuilder()).Ascending("TOTALDUE").Descending("RECORDNO").GetOrders();

            IQueryFunction query = new QueryFunction("unittest")
            {
                FromObject   = "CLASS",
                SelectFields = fields,
                OrderBy      = orderBy
            };

            this.CompareXml(expected, query);
        }
Пример #17
0
        public void AllParamsTest()
        {
            string expected = @"<?xml version=""1.0"" encoding=""utf-8""?>
<function controlid=""unittest"">
    <query>
        <select>
            <field>CUSTOMERID</field>
            <field>RECORDNO</field>
        </select>
        <object>CUSTOMER</object>
        <docparid>REPORT</docparid>
        <options>
            <caseinsensitive>true</caseinsensitive>
            <showprivate>true</showprivate>
        </options>
        <pagesize>10</pagesize>
        <offset>5</offset>
    </query>
</function>";

            SelectBuilder builder = new SelectBuilder();

            ISelect[] fields = builder.Field("CUSTOMERID").Field("RECORDNO").GetFields();

            IQueryFunction query = new QueryFunction("unittest")
            {
                FromObject      = "CUSTOMER",
                DocParId        = "REPORT",
                SelectFields    = fields,
                CaseInsensitive = true,
                ShowPrivate     = true,
                PageSize        = 10,
                Offset          = 5
            };

            this.CompareXml(expected, query);
        }
Пример #18
0
        public void FieldsTest()
        {
            string expected = @"<?xml version=""1.0"" encoding=""utf-8""?>
<function controlid=""unittest"">
    <query>
        <select>
            <field>CUSTOMERID</field>
            <field>TOTALDUE</field>
            <field>WHENDUE</field>
            <field>TOTALENTERED</field>
            <field>TOTALDUE</field>
            <field>RECORDNO</field>
        </select>
        <object>ARINVOICE</object>
        <options />
    </query>
</function>";

            string[]      fieldNames = { "CUSTOMERID",
                                         "TOTALDUE",
                                         "WHENDUE",
                                         "TOTALENTERED",
                                         "TOTALDUE",
                                         "RECORDNO" };
            SelectBuilder builder = new SelectBuilder();

            ISelect[] fields = builder.Fields(fieldNames).GetFields();


            IQueryFunction query = new QueryFunction("unittest")
            {
                FromObject   = "ARINVOICE",
                SelectFields = fields
            };

            this.CompareXml(expected, query);
        }
Пример #19
0
        public void AggregateFunctionsTest()
        {
            string expected = @"<?xml version=""1.0"" encoding=""utf-8""?>
<function controlid=""unittest"">
    <query>
        <select>
            <field>CUSTOMERID</field>
            <avg>TOTALDUE</avg>
            <min>WHENDUE</min>
            <max>TOTALENTERED</max>
            <sum>TOTALDUE</sum>
            <count>RECORDNO</count>
        </select>
        <object>ARINVOICE</object>
        <options />
    </query>
</function>";

            SelectBuilder builder = new SelectBuilder();

            ISelect[] fields = builder.Field("CUSTOMERID").
                               Average("TOTALDUE").
                               Minimum("WHENDUE").
                               Maximum("TOTALENTERED").
                               Sum("TOTALDUE").
                               Count("RECORDNO").
                               GetFields();

            IQueryFunction query = new QueryFunction("unittest")
            {
                FromObject   = "ARINVOICE",
                SelectFields = fields
            };

            this.CompareXml(expected, query);
        }
Пример #20
0
 public IQueryBuilder Having(QueryFunction queryFunc) => AndHaving(queryFunc);
Пример #21
0
        public static void Run(ILogger logger)
        {
            OnlineClient client = Bootstrap.Client(logger);

            List <IFilter> filterList = new List <IFilter>();

            filterList.Add((new Filter("CUSTOMERID")).SetLike("c%"));
            filterList.Add((new Filter("CUSTOMERID")).SetLike("1%"));
            OrOperator filter = new OrOperator(filterList);

            OrderBuilder orderBuilder = new OrderBuilder();

            IOrder[] orders = orderBuilder.Descending("CUSTOMERID").GetOrders();

            SelectBuilder selectBuilder = new SelectBuilder();

            ISelect[] fields = selectBuilder.
                               Fields(new[] { "CUSTOMERID", "CUSTOMERNAME" }).
                               Sum("TOTALDUE").
                               GetFields();

            QueryFunction query = new QueryFunction()
            {
                SelectFields    = fields,
                FromObject      = "ARINVOICE",
                Filter          = filter,
                CaseInsensitive = true,
                PageSize        = 100,
                OrderBy         = orders
            };

            logger.LogInformation("Executing query to Intacct API");

            Task <OnlineResponse> task = client.Execute(query);

            task.Wait();
            OnlineResponse response = task.Result;
            Result         result   = response.Results[0];

            dynamic json = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(result.Data));

            if (json != null && json.First != null)
            {
                Console.WriteLine("Success! Number of ARINVOICE objects found: " + result.TotalCount);
                Console.WriteLine("First ARINVOICE result found");
                Console.WriteLine("CUSTOMERID: " + json.First["ARINVOICE"]["CUSTOMERID"].Value);
                Console.WriteLine("CUSTOMERNAME: " + json.First["ARINVOICE"]["CUSTOMERNAME"].Value);
                Console.WriteLine("SUM.TOTALDUE: " + json.First["ARINVOICE"]["SUM.TOTALDUE"].Value);

                Console.WriteLine("See the log file (logs/intacct.log) for the complete list of results.");
            }
            else
            {
                Console.WriteLine("The query executed, but no ARINVOICE objects met the query criteria.");
                Console.WriteLine("Either modify the filter or comment it out from the query.");
                Console.WriteLine("See the log file (logs/intacct.log) for the XML request.");
            }

            try
            {
                string jsonString = json.ToString();

                logger.LogDebug(
                    "Query successful [ Company ID={0}, User ID={1}, Request control ID={2}, Function control ID={3}, Total count={4}, Data={5} ]",
                    response.Authentication.CompanyId,
                    response.Authentication.UserId,
                    response.Control.ControlId,
                    result.ControlId,
                    result.TotalCount,
                    jsonString
                    );
            }
            catch (NullReferenceException e)
            {
                logger.LogDebug("No response in Data. {0}", e);
            }
            finally
            {
                LogManager.Flush();
            }
        }
Пример #22
0
 public IQueryBuilder OrNotHaving(QueryFunction queryFunc) => RecursiveHaving(WhereType.OrNotHaving, queryFunc);
Пример #23
0
        public void ThreeLevelFilterTest()
        {
            string expected = @"<?xml version=""1.0"" encoding=""utf-8""?>
<function controlid=""unittest"">
    <query>
        <select>
            <field>BATCHNO</field>
            <field>RECORDNO</field>
            <field>STATE</field>
        </select>
        <object>GLBATCH</object>
        <filter>
            <or>
                <and>
                    <equalto>
                        <field>JOURNAL</field>
                        <value>APJ</value>
                    </equalto>
                    <equalto>
                        <field>STATE</field>
                        <value>Posted</value>
                    </equalto>
                </and>
                <and>
                    <equalto>
                        <field>JOURNAL</field>
                        <value>RCPT</value>
                    </equalto>
                    <equalto>
                        <field>STATE</field>
                        <value>Posted</value>
                    </equalto>
                    <or>
                        <equalto>
                            <field>RECORDNO</field>
                            <value>168</value>
                        </equalto>
                        <equalto>
                            <field>RECORDNO</field>
                            <value>132</value>
                        </equalto>
                    </or>
                </and>
            </or>
        </filter>
        <options />
    </query>
</function>";

            SelectBuilder builder = new SelectBuilder();

            ISelect[] fields = builder.Fields(new[] { "BATCHNO", "RECORDNO", "STATE" }).GetFields();

            AndOperator apjAndState = new AndOperator(new List <IFilter>());

            apjAndState.AddFilter((new Filter("JOURNAL")).SetEqualTo("APJ"));
            apjAndState.AddFilter((new Filter("STATE")).SetEqualTo("Posted"));

            OrOperator recordnoOr = new OrOperator(new List <IFilter>());

            recordnoOr.AddFilter((new Filter("RECORDNO")).SetEqualTo("168"));
            recordnoOr.AddFilter((new Filter("RECORDNO")).SetEqualTo("132"));

            AndOperator rcptAndState = new AndOperator(new List <IFilter>());

            rcptAndState.AddFilter((new Filter("JOURNAL")).SetEqualTo("RCPT"));
            rcptAndState.AddFilter((new Filter("STATE")).SetEqualTo("Posted"));
            rcptAndState.AddFilter(recordnoOr);

            IFilter filter = new OrOperator(new List <IFilter>()
            {
                apjAndState, rcptAndState
            });

            IFunction query = new QueryFunction("unittest")
            {
                FromObject   = "GLBATCH",
                SelectFields = fields,
                Filter       = filter
            };

            this.CompareXml(expected, query);
        }
Пример #24
0
 public void RegisterFunction(string name, QueryFunction func)
 {
     throw new InvalidOperationException("Cannot register a function inside this context");
 }
Пример #25
0
 public IFunctionBuilder AddFunction(QueryFunction function, params IExpressionBuilder[] arguments)
 {
     return(this.AddFunction(this.CreateFunction(function, arguments)));
 }
Пример #26
0
 public Task <QueryOutputDTO> QueryQueryAsync(QueryFunction queryFunction, BlockParameter blockParameter = null)
 {
     return(ContractHandler.QueryDeserializingToObjectAsync <QueryFunction, QueryOutputDTO>(queryFunction, blockParameter));
 }
Пример #27
0
 public IQueryBuilder AndHaving(QueryFunction queryFunc) => RecursiveHaving(WhereType.AndHaving, queryFunc);
Пример #28
0
 public void RegisterFunction(string name, QueryFunction func)
 {
     Parent.RegisterFunction(name, func);
 }
Пример #29
0
 public void RegisterFunction(string name, QueryFunction func)
 {
     _functions.Add(name, func);
 }