protected List <T> RetrieveEtObjects <T>(
            string objType,
            string[] retProps,
            out string continueRequestId,
            FilterPart filter        = null,
            string existingRequestId = null
            ) where T : APIObject
        {
            RetrieveRequest rr = null;

            continueRequestId = null;
            if (!string.IsNullOrEmpty(existingRequestId))
            {
                rr = new RetrieveRequest
                {
                    ContinueRequest = existingRequestId
                };
            }
            else if (filter != null)
            {
                rr = new RetrieveRequest
                {
                    ObjectType = objType,
                    Properties = retProps,
                    Filter     = filter
                };
            }
            else
            {
                rr = new RetrieveRequest
                {
                    ObjectType = objType,
                    Properties = retProps,
                };
            }

            if (_auth.ClientId.HasValue)
            {
                rr.ClientIDs = new ClientID[] { new ClientID()
                                                {
                                                    ID = _auth.ClientId.Value, IDSpecified = true
                                                } };
            }

            RetrieveRequest1 request1 = new RetrieveRequest1(rr);
            var result = Client.RetrieveAsync(request1).Result;

            if (result.OverallStatus.ToLower().StartsWith("error"))
            {
                throw new Exception(result.OverallStatus);
            }

            if (result.OverallStatus.ToLower() == "moredataavailable")
            {
                continueRequestId = result.RequestID;
            }

            return(result.Results.ToList().ConvertAll(obj => (T)obj));
        }
コード例 #2
0
        public Dictionary <string, Dictionary <string, string> > GetDataExtension()
        {
            Dictionary <string, Dictionary <string, string> > dict = new Dictionary <string, Dictionary <string, string> >();
            SoapClient client = new SoapClient();

            client.ClientCredentials.UserName.UserName = "******";
            client.ClientCredentials.UserName.Password = "******";
            APIObject[]      Results;
            String           requestID;
            String           status;
            RetrieveRequest1 rr1 = new RetrieveRequest1();
            RetrieveRequest  rr  = new RetrieveRequest();

            rr.ObjectType = "DataExtensionObject[Alert_Inbox]";
            rr.Properties = new string[] {
                "Alert_Category", "Alert_Subject"
            };
            rr1.RetrieveRequest = rr;
            SimpleFilterPart sf = new SimpleFilterPart();

            sf.SimpleOperator = SimpleOperators.equals;
            sf.Property       = "ET_Surrogate_ID";

            try
            {
                //var result = Task.Run(async () => client.RetrieveAsync(rr1));
                // var values = result.GetAwaiter().GetResult().GetAwaiter().GetResult();
                var results = client.Retrieve(rr, out requestID, out Results);
                if (Results.Length > 0)
                {
                    for (int i = 0; i < Results.Length; i++)
                    {
                        DataExtensionObject deo = (DataExtensionObject)Results[i];

                        Dictionary <string, string> props = new Dictionary <string, string>();
                        string transactionID = "";

                        foreach (APIProperty prop in deo.Properties)
                        {
                            if (prop.Name == "ET_Transaction_ID")
                            {
                                transactionID = prop.Value;
                            }

                            props[prop.Name] = prop.Value;
                        }

                        dict[transactionID] = props;
                    }
                }
            }
            catch (Exception e)
            {
            }
            //var results =   client.RetrieveAsync(rr1);
            return(dict);
        }
        internal RetrieveResponse RetrieveAsync(RetrieveRequest request)
        {
            var request1 = new RetrieveRequest1(request);
            var task     = Client.RetrieveAsync(request1);

            task.Wait();
            var result = task.Result;

            if (result.OverallStatus.ToLower() == "moredataavailable")
            {
                // TODO: Implement Paginated Results
                throw new NotImplementedException("Paginated Results have not yet been implemented");
            }
            return(result);
        }
コード例 #4
0
        public void GetDataExtension()
        {
            client.ClientCredentials.UserName.UserName = "******";
            client.ClientCredentials.UserName.Password = "******";
            APIObject[]      Results;
            String           requestID;
            String           status;
            RetrieveRequest1 rr1 = new RetrieveRequest1();
            RetrieveRequest  rr  = new RetrieveRequest();

            rr.ObjectType = "DataExtensionObject[Alert_Inbox]";
            rr.Properties = new string[] {
                "Alert_Category", "Alert_Subject"
            };
            rr1.RetrieveRequest = rr;
            SimpleFilterPart sf = new SimpleFilterPart();

            sf.SimpleOperator = SimpleOperators.equals;
            sf.Property       = "ET_Surrogate_ID";

            //var results =   client.RetrieveAsync(rr1);
            var result = Task.Run(async() => client.RetrieveAsync(rr1));
            var values = result.GetAwaiter().GetResult().GetAwaiter().GetResult();
        }
コード例 #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="T:FuelSDK.GetReturn"/> class.
        /// </summary>
        /// <param name="objs">Objects.</param>
        /// <param name="continueRequest">If set to <c>true</c> continue request.</param>
        /// <param name="overrideObjectType">Override object type.</param>
        public GetReturn(APIObject objs, bool continueRequest, string overrideObjectType)
        {
            if (objs == null)
            {
                throw new ArgumentNullException("objs");
            }
            var response = ExecuteAPI(x =>
            {
                var rr = new RetrieveRequest();

                // Handle RetrieveAllSinceLastBatch
                if (x.GetType().GetProperty("GetSinceLastBatch") != null)
                {
                    rr.RetrieveAllSinceLastBatch = (bool)x.GetType().GetProperty("GetSinceLastBatch").GetValue(x, null);
                }

                if (continueRequest)
                {
                    if (x.LastRequestID == null)
                    {
                        throw new Exception("Unable to call GetMoreResults without first making successful Get() request");
                    }
                    rr.ContinueRequest = x.LastRequestID;
                }
                else
                {
                    if (x.SearchFilter != null)
                    {
                        rr.Filter = x.SearchFilter;
                    }

                    // Use the name from the object passed in unless an override is passed (Used for DataExtensionObject)
                    if (string.IsNullOrEmpty(overrideObjectType))
                    {
                        if (x.GetType().ToString().Contains("ET_"))
                        {
                            rr.ObjectType = TranslateObject2(x).GetType().ToString().Replace("FuelSDK.", string.Empty);
                        }
                        else
                        {
                            rr.ObjectType = TranslateObject(x).GetType().ToString().Replace("FuelSDK.", string.Empty);
                        }
                    }
                    else
                    {
                        rr.ObjectType = overrideObjectType;
                    }

                    // If they didn't specify Props then we look them up using Info()
                    if (x.Props == null && x.GetType().GetMethod("Info") != null)
                    {
                        var ir = new InfoReturn(x);

                        if (!ir.Status)
                        {
                            throw new Exception("Unable to find properties for object in order to perform Get() request");
                        }

                        rr.Properties = ir.Results.Where(y => y.IsRetrievable).Select(y => y.Name).ToArray();
                    }
                    else
                    {
                        rr.Properties = x.Props;
                    }
                }

                return(rr);
            }, (client, o) =>
            {
                var retrieveRequest  = new RetrieveRequest1(o[0]);
                var retrieveResponse = client.SoapClient.RetrieveAsync(retrieveRequest).Result;

                return(new ExecuteAPIResponse <APIObject>(retrieveResponse.Results, retrieveResponse.RequestID, retrieveResponse.OverallStatus)
                {
                    OverallStatusMessage = retrieveResponse.OverallStatus
                });
            }, objs);

            if (response != null)
            {
                if (response.Length > 0)
                {
                    if (objs.GetType().ToString().Contains("ET_"))
                    {
                        Results = response.Select(TranslateObject2).ToArray();
                    }
                    else
                    {
                        Results = response.Select(TranslateObject).ToArray();
                    }
                }
                else
                {
                    Results = new APIObject[0];
                }
            }
        }
コード例 #6
0
        public ETClient(NameValueCollection parameters = null, RefreshState refreshState = null)
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json");

            var config = builder.Build();

            // Get configuration file and set variables
            configSection = (FuelSDKConfigurationSection)config.GetSection("FuelSDK").Get <FuelSDKConfigurationSection>();

            if (parameters != null)
            {
                if (parameters.AllKeys.Contains("appSignature"))
                {
                    configSection.AppSignature = parameters["appSignature"];
                }
                if (parameters.AllKeys.Contains("clientId"))
                {
                    configSection.ClientId = parameters["clientId"];
                }
                if (parameters.AllKeys.Contains("clientSecret"))
                {
                    configSection.ClientSecret = parameters["clientSecret"];
                }
                if (parameters.AllKeys.Contains("soapEndPoint"))
                {
                    configSection.SoapEndPoint = parameters["soapEndPoint"]; //https://webservice.s4.exacttarget.com/Service.asmx
                }
                if (parameters.AllKeys.Contains("authEndPoint"))
                {
                    configSection.AuthenticationEndPoint = parameters["authEndPoint"]; //https://auth-qa.exacttargetapis.com/v1/requestToken?legacy=1
                }
            }

            if (string.IsNullOrEmpty(configSection.ClientId) || string.IsNullOrEmpty(configSection.ClientSecret))
            {
                throw new Exception("clientId or clientSecret is null: Must be provided in config file or passed when instantiating ETClient");
            }

            // If JWT URL Parameter Used
            var organizationFind = false;

            if (refreshState != null)
            {
                RefreshKey     = refreshState.RefreshKey;
                EnterpriseId   = refreshState.EnterpriseId;
                OrganizationId = refreshState.OrganizationId;
                Stack          = refreshState.Stack;
                RefreshToken();
            }
            else if (parameters != null && parameters.AllKeys.Contains("jwt") && !string.IsNullOrEmpty(parameters["jwt"]))
            {
                if (string.IsNullOrEmpty(configSection.AppSignature))
                {
                    throw new Exception("Unable to utilize JWT for SSO without appSignature: Must be provided in config file or passed when instantiating ETClient");
                }
                var encodedJWT = parameters["jwt"].ToString().Trim();
                var decodedJWT = DecodeJWT(encodedJWT, configSection.AppSignature);
                var parsedJWT  = JObject.Parse(decodedJWT);
                AuthToken           = parsedJWT["request"]["user"]["oauthToken"].Value <string>().Trim();
                AuthTokenExpiration = DateTime.Now.AddSeconds(int.Parse(parsedJWT["request"]["user"]["expiresIn"].Value <string>().Trim()));
                InternalAuthToken   = parsedJWT["request"]["user"]["internalOauthToken"].Value <string>().Trim();
                RefreshKey          = parsedJWT["request"]["user"]["refreshToken"].Value <string>().Trim();
                Jwt = parsedJWT;
                var orgPart = parsedJWT["request"]["organization"];
                if (orgPart != null)
                {
                    EnterpriseId   = orgPart["enterpriseId"].Value <string>().Trim();
                    OrganizationId = orgPart["id"].Value <string>().Trim();
                    Stack          = orgPart["stackKey"].Value <string>().Trim();
                }
            }
            else
            {
                RefreshToken();
                organizationFind = true;
            }

            // Find the appropriate endpoint for the acccount
            var grSingleEndpoint = new ETEndpoint {
                AuthStub = this, Type = "soap"
            }.Get();

            if (grSingleEndpoint.Status && grSingleEndpoint.Results.Length == 1)
            {
                configSection.SoapEndPoint = ((ETEndpoint)grSingleEndpoint.Results[0]).URL;
            }
            else
            {
                throw new Exception("Unable to determine stack using /platform/v1/endpoints: " + grSingleEndpoint.Message);
            }

            // Create the SOAP binding for call with Oauth.
            SoapClient = new SoapClient(GetSoapBinding(), new EndpointAddress(new Uri(configSection.SoapEndPoint)));
            SoapClient.ClientCredentials.UserName.UserName = "******";
            SoapClient.ClientCredentials.UserName.Password = "******";

            // Find Organization Information
            if (organizationFind)
            {
                using (var scope = new OperationContextScope(SoapClient.InnerChannel))
                {
                    // Add oAuth token to SOAP header.
                    XNamespace ns           = "http://exacttarget.com";
                    var        oauthElement = new XElement(ns + "oAuthToken", InternalAuthToken);
                    var        xmlHeader    = MessageHeader.CreateHeader("oAuth", "http://exacttarget.com", oauthElement);
                    OperationContext.Current.OutgoingMessageHeaders.Add(xmlHeader);

                    var httpRequest = new System.ServiceModel.Channels.HttpRequestMessageProperty();
                    OperationContext.Current.OutgoingMessageProperties.Add(System.ServiceModel.Channels.HttpRequestMessageProperty.Name, httpRequest);
                    httpRequest.Headers.Add(HttpRequestHeader.UserAgent, ETClient.SDKVersion);

                    var req = new RetrieveRequest {
                        ObjectType = "BusinessUnit", Properties = new[] { "ID", "Client.EnterpriseID" }
                    };
                    var req1 = new RetrieveRequest1(req);
                    var r    = SoapClient.RetrieveAsync(req1).Result;

                    if (r.OverallStatus == "OK" && r.Results.Length > 0)
                    {
                        EnterpriseId   = r.Results[0].Client.EnterpriseID.ToString();
                        OrganizationId = r.Results[0].ID.ToString();
                        Stack          = GetStackFromSoapEndPoint(new Uri(configSection.SoapEndPoint));
                    }
                }
            }
        }