Esempio n. 1
0
        } //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)
Esempio n. 2
0
        } //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)
Esempio n. 3
0
 /// <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)