public Resource FindResourceByEmail(string resourceEmail)
        {
            Resource _result = null;
            // Query Resource to get the owner of the lead
            StringBuilder strResource = new StringBuilder();

            try {
                strResource.Append("<queryxml version=\"1.0\">");
                strResource.Append("<entity>Resource</entity>");
                strResource.Append("<query>");
                strResource.Append("<field>Email<expression op=\"equals\">");
                strResource.Append(resourceEmail);
                strResource.Append("</expression></field>");
                strResource.Append("</query></queryxml>");

                queryResponse respResource = _atwsServicesClient.query(new queryRequest(_atwsIntegrations, strResource.ToString()));

                if (respResource.queryResult.ReturnCode > 0 && respResource.queryResult.EntityResults.Length > 0)
                {
                    // Get the ID for the resource
                    _result = (Resource)respResource.queryResult.EntityResults[0];
                }

                return(_result);
            }
            catch (Exception _ex)
            {
                throw new Exception("AutotaskAPIClient.FindResourceByEmail", _ex);
            }
        }
        public Account FindAccountByName(string AccountName)
        {
            Account       _result     = null;
            StringBuilder strResource = new StringBuilder();

            try
            {
                strResource.Append("<queryxml version=\"1.0\">");
                strResource.Append("<entity>Account</entity>");
                strResource.Append("<query>");
                strResource.Append("<field>AccountName<expression op=\"equals\">");
                strResource.Append(AccountName);
                strResource.Append("</expression></field>");
                strResource.Append("</query></queryxml>");

                queryResponse respResource = _atwsServicesClient.query(new queryRequest(_atwsIntegrations, strResource.ToString()));

                if (respResource.queryResult.ReturnCode > 0 && respResource.queryResult.EntityResults.Length > 0)
                {
                    _result = (Account)respResource.queryResult.EntityResults[0];
                }

                return(_result);
            }
            catch (Exception _ex)
            {
                throw new Exception("AutotaskAPIClient.FindAccountByName", _ex);
            }
        }
        public Contact FindContactByEmail(string contactEmail)
        {
            Contact _result = null;
            // Query Resource to get the owner of the lead
            StringBuilder strResource = new StringBuilder();

            try
            {
                strResource.Append("<queryxml version=\"1.0\">");
                strResource.Append("<entity>Contact</entity>");
                strResource.Append("<query>");
                strResource.Append("<condition><field>EMailAddress<expression op=\"equals\">");
                strResource.Append(contactEmail);
                strResource.Append("</expression></field></condition>");

                strResource.Append("<condition><field>Active<expression op=\"equals\">");
                strResource.Append("1");
                strResource.Append("</expression></field></condition>");

                strResource.Append("</query></queryxml>");

                queryResponse respResource = _atwsServicesClient.query(new queryRequest(_atwsIntegrations, strResource.ToString()));

                if (respResource.queryResult.ReturnCode > 0 && respResource.queryResult.EntityResults.Length > 0)
                {
                    _result = (Contact)respResource.queryResult.EntityResults[0];
                }

                return(_result);
            }
            catch (Exception _ex)
            {
                throw new Exception("AutotaskAPIClient.FindContactByEmail", _ex);
            }
        }
        public Resource FindResource(string resourceUserName)
        {
            Resource _result = null;

            // Query Resource to get the owner of the lead
            StringBuilder strResource = new StringBuilder();

            strResource.Append("<queryxml version=\"1.0\">");
            strResource.Append("<entity>Resource</entity>");
            strResource.Append("<query>");
            strResource.Append("<field>UserName<expression op=\"equals\">");
            strResource.Append(resourceUserName);
            strResource.Append("</expression></field>");
            strResource.Append("</query></queryxml>");

            queryResponse respResource = _atwsServicesClient.query(new queryRequest(_atwsIntegrations, strResource.ToString()));

            if (respResource.queryResult.ReturnCode > 0 && respResource.queryResult.EntityResults.Length > 0)
            {
                // Get the ID for the resource
                _result = (Resource)respResource.queryResult.EntityResults[0];
            }

            return(_result);
        }
        public Account FindAccountByDomain(string emailDomain)
        {
            Dictionary <int, decimal> _counts     = new Dictionary <int, decimal>();
            Dictionary <int, decimal> _statistics = new Dictionary <int, decimal>();
            Account _result = null;
            // Query Resource to get the owner of the lead
            StringBuilder strResource = new StringBuilder();

            try
            {
                strResource.Append("<queryxml version=\"1.0\">");
                strResource.Append("<entity>Contact</entity>");
                strResource.Append("<query>");
                strResource.Append("<field>EMailAddress<expression op=\"contains\">");
                strResource.Append(emailDomain);
                strResource.Append("</expression></field>");
                strResource.Append("</query></queryxml>");

                queryResponse respResource = _atwsServicesClient.query(new queryRequest(_atwsIntegrations, strResource.ToString()));

                if (respResource.queryResult.ReturnCode > 0 && respResource.queryResult.EntityResults.Length > 0)
                {
                    int _total = respResource.queryResult.EntityResults.Count();

                    System.Threading.Tasks.Parallel.ForEach(respResource.queryResult.EntityResults, (_contact) =>
                    {
                        lock (_counts)
                        {
                            if (_counts.ContainsKey((int)((Contact)_contact).AccountID))
                            {
                                _counts[(int)((Contact)_contact).AccountID]++;
                            }
                            else
                            {
                                _counts.Add((int)((Contact)_contact).AccountID, 1);
                                _statistics.Add((int)((Contact)_contact).AccountID, 0);
                            }
                        }
                    });
                    System.Threading.Tasks.Parallel.ForEach(_counts, (_count) =>
                    {
                        _statistics[_count.Key] = Math.Round(((_count.Value / _total) * 100), 3);
                    });

                    int _AccountID = _statistics.OrderBy(key => key.Value).Reverse().First().Key;
                    _result = FindAccountByID(_AccountID);
                }

                return(_result);
            }
            catch (Exception _ex)
            {
                throw new Exception("AutotaskAPIClient.FindAccountByDomain", _ex);
            }
        }
        private List <AllocationCode> UpdateUseTypeOneAllocationCodes()
        {
            List <AllocationCode> _result = null;

            StringBuilder strResource = new StringBuilder();

            strResource.Append("<queryxml version=\"1.0\">");
            strResource.Append("<entity>AllocationCode</entity>");
            strResource.Append("<query>");
            strResource.Append("<condition><field>UseType<expression op=\"equals\">");
            strResource.Append(Convert.ToString(1));
            strResource.Append("</expression></field></condition>");
            strResource.Append("</query></queryxml>");

            queryResponse respResource = _atwsServicesClient.query(new queryRequest(_atwsIntegrations, strResource.ToString()));

            if (respResource.queryResult.ReturnCode > 0 && respResource.queryResult.EntityResults.Length > 0)
            {
                _result = new List <AllocationCode>(Array.ConvertAll(respResource.queryResult.EntityResults, new Converter <Entity, AllocationCode>(EntityToAllocationCode)));
            }
            return(_result);
        }
        public Contact FindFirstContactByDomain(string emailDomain)
        {
            Contact _result = null;
            // Query Resource to get the owner of the lead
            StringBuilder strResource = new StringBuilder();

            strResource.Append("<queryxml version=\"1.0\">");
            strResource.Append("<entity>Contact</entity>");
            strResource.Append("<query>");
            strResource.Append("<field>EMailAddress<expression op=\"contains\">");
            strResource.Append(emailDomain);
            strResource.Append("</expression></field>");
            strResource.Append("</query></queryxml>");

            queryResponse respResource = _atwsServicesClient.query(new queryRequest(_atwsIntegrations, strResource.ToString()));

            if (respResource.queryResult.ReturnCode > 0 && respResource.queryResult.EntityResults.Length > 0)
            {
                _result = (Contact)respResource.queryResult.EntityResults[0];
            }

            return(_result);
        }
        public Ticket FindTicketByNumber(string ticketNumber)
        {
            Ticket        _result     = null;
            StringBuilder strResource = new StringBuilder();

            if (string.IsNullOrWhiteSpace(ticketNumber))
            {
                throw new ArgumentNullException();
            }

            if (!IsValidAutoTaskTicket(ticketNumber))
            {
                throw new ArgumentException();
            }
            try
            {
                strResource.Append("<queryxml version=\"1.0\">");
                strResource.Append("<entity>Ticket</entity>");
                strResource.Append("<query>");
                strResource.Append("<field>TicketNumber<expression op=\"equals\">");
                strResource.Append(Convert.ToString(ticketNumber));
                strResource.Append("</expression></field>");
                strResource.Append("</query></queryxml>");

                queryResponse respResource = _atwsServicesClient.query(new queryRequest(_atwsIntegrations, strResource.ToString()));

                if (respResource.queryResult.ReturnCode > 0 && respResource.queryResult.EntityResults.Length > 0)
                {
                    _result = (Ticket)respResource.queryResult.EntityResults[0];
                }
                return(_result);
            }
            catch (Exception _ex)
            {
                throw new Exception("AutotaskAPIClient.FindTicketByNumber", _ex);
            }
        }
        public Ticket[] FindTicketByDateRange(DateTimeOffset DateStart, DateTimeOffset DateEnd)
        {
            Ticket[]      _results       = null;
            List <Ticket> _resultBuilder = new List <Ticket>();

            if (DateStart == null && DateEnd == null)
            {
                throw new ArgumentNullException();
            }

            if (DateStart >= DateEnd)
            {
                throw new ArgumentOutOfRangeException();
            }

            StringBuilder        strQuery      = new StringBuilder();
            StringBuilder        strQueryStart = new StringBuilder();
            StringBuilder        strQueryEnd   = new StringBuilder();
            List <StringBuilder> strConditions = new List <StringBuilder>();

            strQueryStart.Append("<queryxml version=\"1.0\">");
            strQueryStart.Append("<entity>Ticket</entity>");
            strQueryStart.Append("<query>");

            strConditions.Add(new StringBuilder());
            strConditions.Last().Append("<condition><field>CreateDate<expression op=\"GreaterThanorEquals\">");
            strConditions.Last().Append(DateStart);
            strConditions.Last().Append("</expression></field></condition>");

            strConditions.Add(new StringBuilder());
            strConditions.Last().Append("<condition><field>CreateDate<expression op=\"LessThanorEquals\">");
            strConditions.Last().Append(DateEnd);
            strConditions.Last().Append("</expression></field></condition>");

            strQueryEnd.Append("</query></queryxml>");

            strQuery.Append(strQueryStart);
            foreach (StringBuilder _condition in strConditions)
            {
                strQuery.Append(_condition);
            }

            strQuery.Append(strQueryEnd);
            queryResponse respResource = _atwsServicesClient.query(new queryRequest(_atwsIntegrations, strQuery.ToString()));

            while (respResource.queryResult.ReturnCode > 0)
            {
                Ticket[] _temp = new Ticket[respResource.queryResult.EntityResults.Count()];
                Array.Copy(respResource.queryResult.EntityResults, 0, _temp, 0, respResource.queryResult.EntityResults.Count());
                _resultBuilder.AddRange(_temp);
                if (respResource.queryResult.EntityResults.Length == 500)
                {// try for more
                    if (strConditions.Count == 3)
                    {
                        strConditions.Remove(strConditions.Last());
                    }

                    strConditions.Add(new StringBuilder());
                    strConditions.Last().Append("<condition><field>id<expression op=\"GreaterThan\">");
                    strConditions.Last().Append(respResource.queryResult.EntityResults.Last().id);
                    strConditions.Last().Append("</expression></field></condition>");
                    strQuery.Clear();
                    strQuery.Append(strQueryStart);
                    foreach (StringBuilder _condition in strConditions)
                    {
                        strQuery.Append(_condition);
                    }

                    strQuery.Append(strQueryEnd);
                    respResource = _atwsServicesClient.query(new queryRequest(_atwsIntegrations, strQuery.ToString()));
                }
                else
                {
                    break; // we got em all but returncode will never be > 0 unless we set it so just break out.
                }
            }
            _results = _resultBuilder.ToArray();
            return(_results);
        }
예제 #10
0
        public async Task <object[]> SyncAsync(string soqlQuery, SqlSyncWriter writer)
        {
            if (string.IsNullOrWhiteSpace(soqlQuery))
            {
                throw new ArgumentNullException(nameof(soqlQuery));
            }

            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }


            // if not login yet then login
            if (_soapClient == null)
            {
                await LoginAsync();
            }

            List <object> writeResult = new List <object>();

            try
            {
                // read data from sfdc
                Logger.LogInfo("Querying from Sfdc");
                Logger.LogDebug($"SOQL: {soqlQuery}");
                queryResponse queryResponse =
                    await _soapClient.queryAsync(_sessionHeader, null, null, null, null, soqlQuery);

                QueryResult queryResult = queryResponse.result;

                if (queryResult.records == null)
                {
                    Logger.LogInfo($"No result return from Sfdc");
                    return(null);
                }

                Logger.LogInfo(
                    $"Querying from Sfdc returning {queryResult.records.Length} records from {queryResult.size} total records");

                // loop fetch data from sfdc when is not done
                bool done;
                do
                {
                    done = queryResult.done;
                    // ReSharper disable once InvertIf
                    if (queryResult.size > 0)
                    {
                        // write data
                        DataTableObject data = new DataTableObject(queryResult.records);
                        Logger.LogInfo($"Writing to destination {data.Length} records");
                        object[] ids = await writer(data);

                        Logger.LogInfo($"Writing to destination completed");
                        writeResult.AddRange(ids);

                        // query more record
                        if (!queryResult.done)
                        {
                            Logger.LogInfo("Querying more record from Sfdc");
                            queryMoreResponse queryMoreResponse =
                                await _soapClient.queryMoreAsync(_sessionHeader, null, null, queryResult.queryLocator);

                            queryResult = queryMoreResponse.result;
                            Logger.LogInfo($"Querying more record from Sfdc returning {queryResult.records.Length} records");
                        }
                    }
                } while (!done);
            }
            catch (Exception e)
            {
                throw new Exception("Error sync data.", e);
            }

            return(writeResult.ToArray());
        }