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); }
public IFunctionBuilder AddFunction(QueryFunction function, params IExpressionBuilder[] arguments) { var builder = this.CreateFunction(function, arguments); this.Expressions.Add(builder); return(builder); }
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); }
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); }
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); }
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); }
public IFunctionBuilder CreateFunction(QueryFunction function, params IExpressionBuilder[] arguments) { return(this.Fragment <IFunctionBuilder>().With(builder => { builder.Function = function; builder.AddArguments(arguments); })); }
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); }
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)); }
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; }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public IQueryBuilder Having(QueryFunction queryFunc) => AndHaving(queryFunc);
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(); } }
public IQueryBuilder OrNotHaving(QueryFunction queryFunc) => RecursiveHaving(WhereType.OrNotHaving, queryFunc);
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); }
public void RegisterFunction(string name, QueryFunction func) { throw new InvalidOperationException("Cannot register a function inside this context"); }
public IFunctionBuilder AddFunction(QueryFunction function, params IExpressionBuilder[] arguments) { return(this.AddFunction(this.CreateFunction(function, arguments))); }
public Task <QueryOutputDTO> QueryQueryAsync(QueryFunction queryFunction, BlockParameter blockParameter = null) { return(ContractHandler.QueryDeserializingToObjectAsync <QueryFunction, QueryOutputDTO>(queryFunction, blockParameter)); }
public IQueryBuilder AndHaving(QueryFunction queryFunc) => RecursiveHaving(WhereType.AndHaving, queryFunc);
public void RegisterFunction(string name, QueryFunction func) { Parent.RegisterFunction(name, func); }
public void RegisterFunction(string name, QueryFunction func) { _functions.Add(name, func); }