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)); }
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); }
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(); }
/// <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]; } } }
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)); } } } }