} //end Query(Type entity_type, List<QueryFilter> filters = null) /// <summary> /// Queries entities using instance /// </summary> /// <param name="entity">instance of entity to query</param> /// <param name="filters">query filters</param> /// <returns></returns> public List <Entities.Entity> Query(Entities.Entity entity, QueryFilter filters = null) { List <Entities.Entity> entities = null; if (!entity.CanQuery) { throw new AutotaskNETException($"The {entity.GetType().Name} entity can not be queried."); } else { //query entity entities = new List <Entities.Entity>(); bool query_done = false; long current_id = 0; while (!query_done) { //create query StringBuilder query = new StringBuilder(); query.Append("<queryxml version=\"1.0\">"); query.Append($"<entity>{entity.GetType().Name}</entity>"); query.Append("<query>"); #region QueryFilters //use id to pull more than 500 records if id is not already a filter if (filters == null || !QueryFilter.ContainsCondition(new ConditionGroup(filters), "id")) { query.Append($"<field>Id<expression op=\"greaterthan\">{current_id}</expression></field>"); } //handle all other filters if (filters != null) { string cond = this.ParseConditions(new ConditionGroup(filters)); query.Append(cond); } #endregion //QueryFilters query.Append("</query>"); query.Append("</queryxml>"); //submit query net.autotask.webservices.ATWSResponse response = this._atws.query(query.ToString()); //parse response if (response.ReturnCode > 0 && response.EntityResults.Length > 0) { List <Entities.Entity> temp_entities = new List <Entities.Entity>(); foreach (net.autotask.webservices.Entity atws_entity in response.EntityResults) { temp_entities.Add((Entities.Entity)Activator.CreateInstance(entity.GetType(), new object[] { atws_entity })); } current_id = temp_entities.First(e => e.id == temp_entities.Max(m => m.id)).id; entities.AddRange(temp_entities); temp_entities = null; //########################################################################### if ((filters != null && QueryFilter.ContainsCondition(new ConditionGroup(filters), "id")) || response.EntityResults.Length < 500) { query_done = true; } } else { //no results or error query_done = true; } } } return(entities); } //end Query(Entities.Entity entity, List<QueryFilter> filters = null)
} //end Query(Type entity_type, List<QueryFilter> filters = null) /// <summary> /// Queries entities using instance /// </summary> /// <param name="entity">instance of entity to query</param> /// <param name="filters">query filters</param> /// <returns></returns> public List <Entities.Entity> Query(Entities.Entity entity, List <QueryFilter> filters = null) { List <Entities.Entity> entities = null; if (!entity.CanQuery) { throw new AutotaskNETException($"The {entity.GetType().Name} entity can not be queried."); } else { //query entity entities = new List <Entities.Entity>(); bool query_done = false; long current_id = 0; while (!query_done) { //create query StringBuilder query = new StringBuilder(); query.Append("<queryxml version=\"1.0\">"); query.Append($"<entity>{entity.GetType().Name}</entity>"); query.Append("<query>"); if (filters != null && filters.Exists(f => f.FieldName == "id")) { QueryFilter filter = filters.Find(f => f.FieldName == "id"); query.Append($"<field>Id<expression op=\"{filter.Operation}\">{filter.Value.ToString()}</expression></field>"); } else { query.Append($"<field>Id<expression op=\"greaterthan\">{current_id}</expression></field>"); } if (filters != null) { foreach (QueryFilter filter in filters.Where(f => f.FieldName != "id")) { query.Append($"<field>{filter.FieldName}<expression op=\"{filter.Operation}\">{filter.Value.ToString()}</expression></field>"); } } query.Append("</query>"); query.Append("</queryxml>"); //submit query net.autotask.webservices.ATWSResponse response = this._atws.query(query.ToString()); //parse response if (response.ReturnCode > 0 && response.EntityResults.Length > 0) { List <Entities.Entity> temp_entities = new List <Entities.Entity>(); foreach (net.autotask.webservices.Entity atws_entity in response.EntityResults) { temp_entities.Add((Entities.Entity)Activator.CreateInstance(entity.GetType(), new object[] { atws_entity })); } current_id = temp_entities.First(e => e.id == temp_entities.Max(m => m.id)).id; entities.AddRange(temp_entities); temp_entities = null; if (filters != null && filters.Exists(f => f.FieldName == "id")) { query_done = true; } } else { query_done = true; } } } return(entities); } //end Query(Entities.Entity entity, List<QueryFilter> filters = null)
/// <summary> /// Queries entities using type /// </summary> /// <param name="entity_type">type of entity to query</param> /// <param name="filters">query filters</param> /// <returns></returns> public List <Entities.Entity> Query(Type entity_type, QueryFilter filters = null) { return(this.Query((Entities.Entity)Activator.CreateInstance(entity_type), filters)); } //end Query(Type entity_type, List<QueryFilter> filters = null)