Esempio n. 1
0
        public IList <TrackingEvent> RetrieveTrackingEventData(Type eventType, DateTime sinceWhen, String eventTypeString, ClientID clientId = null, string TriggeredSendDefinitionObjectID = "")
        {
            //String filterField = "CreatedDate";
            String filterField = "EventDate";
            var    properties  = GetRetrivableProperties(eventTypeString).ToArray();


            SimpleFilterPart filter = new SimpleFilterPart();

            //Use this only if you are retrieving for TriggeredSend
            filter.Property = "TriggeredSendDefinitionObjectID";
            String[] vlaues = { TriggeredSendDefinitionObjectID };


            //filter.Property = "SendID";
            //String[] vlaues = { "28980" };
            filter.Value = vlaues;

            var dateFilter = new SimpleFilterPart
            {
                Property       = filterField,
                SimpleOperator = SimpleOperators.greaterThanOrEqual,
                DateValue      = new DateTime[] {
                    sinceWhen
                }
            };

            ComplexFilterPart cfilter = new ComplexFilterPart();

            cfilter.LeftOperand     = filter;
            cfilter.LogicalOperator = LogicalOperators.AND;
            cfilter.RightOperand    = dateFilter;


            RetrieveRequest retrieveRequest = new RetrieveRequest
            {
                ObjectType = eventType.Name,
                Properties = properties,
                Filter     = cfilter,
                ClientIDs  = new ClientID[] { clientId }
            };

            APIObject[] results = null;
            String      requestId = null, message;

            SoapClient client = _client;

            String status = "";
            IList <TrackingEvent> returnList = new List <TrackingEvent>();

            do
            {
                status = client.Retrieve(retrieveRequest, out requestId, out results);

                if (!client.GetResult(status, results, out message))
                {
                    //WriteToLog(PIMCO.SMS.Logging.Category.Exception, message);
                    //throw new ExactTargetException(message);
                }

                for (int i = 0; i < results.Length; i++)
                {
                    returnList.Add((TrackingEvent)results[i]);
                }

                //This calls the API again to get the next 2500 records
                retrieveRequest = new RetrieveRequest();
                retrieveRequest.ContinueRequest = requestId;
            } while (status.Equals("MoreDataAvailable"));

            return(returnList.ToList());
        }