Exemplo n.º 1
0
        /// <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));
        }
Exemplo n.º 2
0
        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())));
        }
Exemplo n.º 3
0
        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())));
        }
Exemplo n.º 4
0
        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);
                }
            }
        }
Exemplo n.º 5
0
        /// <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);
                }
            }
        }
Exemplo n.º 6
0
 /// <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())));
 }
Exemplo n.º 7
0
 /// <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())));
 }
Exemplo n.º 8
0
 /// <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())));
 }
Exemplo n.º 9
0
 /// <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())));
 }
Exemplo n.º 10
0
 /// <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())));
 }
Exemplo n.º 11
0
 /// <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())));
 }
Exemplo n.º 12
0
 /// <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())));
 }
Exemplo n.º 13
0
 /// <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())));
 }
Exemplo n.º 14
0
        /// <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));
        }
Exemplo n.º 15
0
 /// <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())));
 }
Exemplo n.º 16
0
 /// <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())));
 }
Exemplo n.º 17
0
 /// <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())));
 }
Exemplo n.º 18
0
 /// <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())));
 }