/// <summary> /// Generic string query method /// - Defaults to a limit of 2000. If a higher /// limit is specified, ZuoraMagic will implement the /// 'queryMore' SOAPAction to capture all results. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="query"></param> /// <param name="limit"></param> /// <returns></returns> public virtual IEnumerable <T> Query <T>(string query, int limit = 0) where T : ZObject { query = QueryBuilder.ValidateAndFlattenQuery <T>(query); return(2000 > limit ? PerformArrayRequest <T>(SoapRequestManager.GetQueryRequest(query, limit, Login())) : PerformAdvancedQuery <T>(query, limit)); }
public virtual ZuoraResponse Crud <T>(CrudOperation <T> operation) where T : ZObject { if (operation.Items.Count() > 50) { throw new ZuoraRequestException( "The SOAP api only allows the modification of up to 50 records. " + "Please use the Bulk api methods for any operation that requires " + "higher limits."); } return(PerformSimpleRequest(SoapRequestManager.GetCrudRequest(operation, Login()))); }
public virtual SalesforceResponse Crud <T>(CrudOperation <T> operation) where T : SObject { if (operation.Items.Count() > 200) { throw new SalesforceRequestException("The SOAP api only allows the modification of up tp 200 records. " + "Please use the Bulk api methods for any operation that requires " + "higher limits."); } if (operation.OperationType == CrudOperations.Upsert && string.IsNullOrEmpty(operation.ExternalIdField)) { throw new SalesforceRequestException("Upsert requests required an external ID name field to be specified."); } return(PerformSimpleRequest(SoapRequestManager.GetCrudRequest(operation, Login()))); }
public SalesforceSession Login() { lock (Lock) { SalesforceSession session; if (_config.UseSessionStore) { session = _sessionStore.RetrieveSession(_config.Environment ?? "Default"); if (session != null) { return(session); } } if (_config.Session != null) { return(_config.Session); } using (HttpClient httpClient = new HttpClient()) { XmlDocument response = httpClient.PerformRequest(SoapRequestManager.GetLoginRequest(_config)); SimpleLogin result = ResponseReader.ReadGenericResponse <SimpleLogin>(response, "result"); Uri instanceUrl = new Uri(result.ServerUrl); session = new SalesforceSession { Environment = _config.Environment, ApiVersion = _config.ApiVersion, IsSandbox = _config.IsSandbox, LastLogin = DateTime.Now, InstanceUrl = instanceUrl.Scheme + "://" + instanceUrl.Host, SessionId = result.SessionId, Proxy = _config.Proxy, BatchSize = _config.BatchSize, }; if (_config.UseSessionStore) { _sessionStore.StoreSession(session); } _config.Session = session; return(session); } } }
/// <summary> /// Login Action /// - Stores session data for re-use /// </summary> /// <returns></returns> public ZuoraSession Login() { lock (Lock) { ZuoraSession session; if (_config.UseSessionStore) { session = _sessionStore.RetrieveSession(_config.EnvironmentName ?? "Default"); if (session != null) { return(session); } } if (_config.Session != null) { return(_config.Session); } using (HttpClient httpClient = new HttpClient()) { XmlDocument response = httpClient.PerformRequest(SoapRequestManager.GetLoginRequest(_config)); SimpleLogin result = ResponseReader.ReadGenericResponse <SimpleLogin>(response); Uri instanceUrl = new Uri(result.ServerUrl); session = new ZuoraSession { SoapUrl = _config.SoapUrl, InstanceUrl = instanceUrl.Scheme + "://" + instanceUrl.Host, SessionId = result.SessionId }; if (_config.UseSessionStore) { _sessionStore.StoreSession(session); } _config.Session = session; _config.InstanceUrl = session.InstanceUrl; return(session); } } }
/// <summary> /// Generic query more method. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryLocator"></param> /// <param name="limit"></param> /// <returns></returns> public virtual QueryResult <T> PerformQueryMore <T>(string queryLocator, int limit = 0) where T : ZObject { return (PerformGenericRequest <QueryResult <T> >(SoapRequestManager.GetQueryMoreRequest(queryLocator, limit, Login()))); }
/// <summary> /// Search /// - Used for searching on fields of a given type of a single sObject type /// </summary> /// <typeparam name="T">The sObject type to search.</typeparam> /// <param name="searchQuery">The search query to search with. See http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_sosl_find.htm for more information.</param> /// <param name="fieldType">The field type. See http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_sosl_in.htm for more information.</param> /// <returns></returns> public IEnumerable <T> Search <T>(string searchQuery, string fieldType) where T : SObject { return(PerformSearchRequest <T>(SoapRequestManager.GetSearchRequest <T>(searchQuery, fieldType, Login()))); }
/// <summary> /// Simple Query /// - Query items based on generic object /// - Generate query using predicate /// - Limited by 200 records /// </summary> /// <typeparam name="T"></typeparam> /// <param name="predicate"></param> /// <param name="limit"></param> /// <returns></returns> public virtual IEnumerable <T> Query <T>(Expression <Func <T, bool> > predicate, int limit = 0) where T : SObject { return(PerformArrayRequest <T>(SoapRequestManager.GetQueryRequest(predicate, limit, Login()))); }
/// <summary> /// Generic predicate query method implementing /// deeper Zuora API features. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="predicate"></param> /// <param name="limit"></param> /// <returns></returns> public virtual QueryResult <T> PerformQuery <T>(Expression <Func <T, bool> > predicate, int limit = 0) where T : ZObject { return(PerformGenericRequest <QueryResult <T> >(SoapRequestManager.GetQueryRequest(predicate, limit, Login()))); }
/// <summary> /// Delete /// - Used to delete multiple records by id /// </summary> /// <param name="ids">the ids of the records to delete</param> /// <returns></returns> public virtual SalesforceResponse Delete(string[] ids) { return(PerformSimpleRequest(SoapRequestManager.GetDeleteRequest(ids, Login()))); }
/// <summary> /// Simple Query /// - Query items based on generic object /// - Limited by 200 records /// </summary> /// <typeparam name="T"></typeparam> /// <param name="limit"></param> /// <returns></returns> public virtual IEnumerable <T> Query <T>(int limit = 0) where T : SObject { return(PerformArrayRequest <T>(SoapRequestManager.GetQueryAllRequest <T>(limit, Login()))); }
/// <summary> /// Simple Query /// - Query items based on generic object /// - Utilize included raw query /// - Limited by 200 records /// </summary> /// <typeparam name="T"></typeparam> /// <param name="query"></param> /// <returns></returns> public virtual IEnumerable <T> Query <T>(string query) where T : SObject { // TODO: Validate query return(PerformArrayRequest <T>(SoapRequestManager.GetQueryRequest(query, Login()))); }
/// <summary> /// Retrieve /// - Used to retrieve multiple records by id /// </summary> /// <typeparam name="T"></typeparam> /// <param name="ids">the ids of the records to retrieve</param> /// <returns></returns> public virtual IEnumerable <T> Retrieve <T>(string[] ids) where T : SObject { return(PerformRetrieveRequest <T>(SoapRequestManager.GetRetrieveRequest <T>(ids, Login()))); }
/// <summary> /// Retrieve an object total count. /// - Allows for filtering count totals /// using the conditional lambda. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="predicate"></param> /// <returns></returns> public int Count <T>(Expression <Func <T, bool> > predicate = null) where T : SObject { var request = SoapRequestManager.GetCountRequest(Login(), predicate); return(PerformCountRequest(request)); }
/// <summary> /// Query More /// - Used to retrieve the next set of records /// available in a query using the queryLocator. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryLocator"></param> /// <returns></returns> public QueryResult <T> QueryMore <T>(string queryLocator) where T : SObject { return(PerformQueryRequest <T>(SoapRequestManager.GetQueryMoreRequest(queryLocator, Login()))); }
/// <summary> /// Advanced Query /// - Query items based on generic object /// - Utilize included raw query /// - Returns query locator, and done status which /// can be used to bypass the 200 record limit. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="query"></param> /// <returns></returns> public QueryResult <T> AdvancedQuery <T>(string query) where T : SObject { return(PerformQueryRequest <T>(SoapRequestManager.GetQueryRequest(query, Login()))); }
/// <summary> /// Advanced Query /// - Query items based on generic object /// - Generate query using predicate /// - Returns query locator, and done status which /// can be used to bypass the 200 record limit. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="predicate"></param> /// <param name="limit"></param> /// <returns></returns> public QueryResult <T> AdvancedQuery <T>(Expression <Func <T, bool> > predicate, int limit = 0) where T : SObject { return(PerformQueryRequest <T>(SoapRequestManager.GetQueryRequest(predicate, limit, Login()))); }
/// <summary> /// Advanced Query /// - Query items based on generic object /// - Returns query locator, and done status which /// can be used to bypass the 200 record limit. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="limit"></param> /// <returns></returns> public QueryResult <T> AdvancedQuery <T>(int limit = 0) where T : SObject { return(PerformQueryRequest <T>(SoapRequestManager.GetQueryAllRequest <T>(limit, Login()))); }