Inheritance: Sage.SData.Client.Framework.UriFormatter
        /// <summary>
        /// Adds a url to the batch for processing
        /// </summary>
        /// <param name="item">url for batch item</param>
        public void AddToBatch(SDataBatchRequestItem item)
        {
            Guard.ArgumentNotNull(item, "item");

            var uri = new SDataUri(item.Url)
                      {
                          CollectionPredicate = null,
                          Query = null
                      };

            if (uri.PathSegments.Length > 3)
            {
                uri.PathSegments = uri.PathSegments.Take(3).ToArray();
            }

            var baseUri = uri.ToString();
            var request = _requests.LastOrDefault(x => x.ToString() == baseUri);

            if (request == null)
            {
                throw new InvalidOperationException("Unable to find an appropriate batch request in progress");
            }

            request.Requests.Add(item);
        }
        private void FormatURL()
        {
            try
            {
                var server = tbServer.Text;
                var pos = server.IndexOf(':');
                var uri = new SDataUri();
                int port;

                if (pos >= 0 && int.TryParse(server.Substring(pos + 1), out port))
                {
                    server = server.Substring(0, pos);
                    uri.Port = port;
                }

                uri.Scheme = cbProtocol.Text;
                uri.Host = server;
                uri.Server = tbVirtualDirectory.Text;
                uri.Product = tbApplication.Text;
                uri.Contract = tbContract.Text;
                uri.CompanyDataset = tbDataSet.Text;

                tbURL.Text = uri.ToString();
            }
            catch (UriFormatException)
            {
            }
        }
 protected override void BuildUrl(SDataUri uri)
 {
     base.BuildUrl(uri);
     uri.AppendPath("$system");
     uri.AppendPath("registry");
     uri.AppendPath("endpoints");
 }
        /// <summary>
        /// Adds a url to the batch for processing
        /// </summary>
        /// <param name="item">url for batch item</param>
        /// <returns>True if an appropriate pending batch operation was found</returns>
        public bool AddToBatch(SDataBatchRequestItem item)
        {
            Guard.ArgumentNotNull(item, "item");

            var uri = new SDataUri(item.Url)
                      {
                          CollectionPredicate = null,
                          Query = null
                      };

            if (uri.PathSegments.Length > 4)
            {
                uri.TrimRange(4, uri.PathSegments.Length - 4);
            }

            uri.AppendPath("$batch");
            var baseUri = uri.ToString();
            var request = _requests.LastOrDefault(x => string.Equals(x.ToString(), baseUri, StringComparison.InvariantCultureIgnoreCase));

            if (request != null)
            {
                request.Items.Add(item);
                return true;
            }

            return false;
        }
        public void Assign_Ampersand_In_Query_Test()
        {
            var uri = new SDataUri("http://localhost:2001/sdata/aw/dynamic/-/accounts") {Query = "a=%26&b=%26"};

            Assert.That(uri.Query, Is.EqualTo("a=%26&b=%26"));
            Assert.That(uri["a"], Is.EqualTo("&"));
            Assert.That(uri["b"], Is.EqualTo("&"));
        }
Ejemplo n.º 6
0
        private RequestOperation CreateBatchOperation()
        {
            var uri = new SDataUri(Uri);

            if (uri.PathSegments.Length != 4)
            {
                throw new InvalidOperationException("Batch requests can only be made on collection end points");
            }

            var feed    = new AtomFeed();
            var batchOp = new RequestOperation(HttpMethod.Post, feed);

            foreach (var op in _operations)
            {
                AtomEntry entry;

                if (op.Resource == null)
                {
                    if (op.Method != HttpMethod.Post)
                    {
                        throw new InvalidOperationException("A predicate must be specified for GET, PUT and DELETE batch requests");
                    }

                    var entryUri = new SDataUri(uri)
                    {
                        CollectionPredicate = op.Predicate
                    };
                    entry = new AtomEntry {
                        Id = new AtomId(entryUri.Uri)
                    };
                }
                else
                {
                    entry = op.Resource as AtomEntry;

                    if (entry == null)
                    {
                        throw new InvalidOperationException("Only atom entry resources can be submitted in batch requests");
                    }
                }

                entry.SetSDataHttpMethod(op.Method);

                if (!string.IsNullOrEmpty(op.ETag))
                {
                    entry.SetSDataHttpIfMatch(op.ETag);
                }

                feed.AddEntry(entry);

                foreach (var file in op.Files)
                {
                    batchOp.Files.Add(file);
                }
            }

            return(batchOp);
        }
 public void Appending_Segments_To_Specific_Service_Urls_Test()
 {
     var uri = new SDataUri("http://test.com/sdata/-/-/-/resource/$service/name");
     uri.AppendPath("test");
     Assert.AreEqual("resource", uri.CollectionType);
     Assert.AreEqual("name", uri.ServiceMethod);
     Assert.AreEqual("-/-/-/resource/$service/name/test", uri.DirectPath);
     Assert.AreEqual("http://test.com/sdata/-/-/-/resource/$service/name/test", uri.ToString());
 }
        protected SDataBaseRequest(ISDataService service)
        {
            Guard.ArgumentNotNull(service, "service");

            _service = service;
            _uri = new SDataUri();
            Protocol = service.Protocol;
            ServerName = service.ServerName;
            Port = service.Port;
            VirtualDirectory = !string.IsNullOrEmpty(service.VirtualDirectory) ? service.VirtualDirectory : "sdata";
        }
        protected override void BuildUrl(SDataUri uri)
        {
            base.BuildUrl(uri);

            if (!string.IsNullOrEmpty(ResourceKind))
            {
                uri.AppendPath(ResourceKind);
            }

            uri.AppendPath(ServiceTerm);
        }
        /// <summary>
        /// Execute the request and return a response object.
        /// </summary>
        public SDataResponse GetResponse()
        {
            var uri = Uri;
            RequestOperation operation;

            if (_operations.Count == 1)
            {
                operation = _operations[0];
            }
            else
            {
                operation = CreateBatchOperation();
                uri       = new SDataUri(uri).AppendPath("$batch").ToString();
            }

            string location = null;
            var    attempts = TimeoutRetryAttempts;

            while (true)
            {
                var request = CreateRequest(uri, operation);

                WebResponse response;
                try
                {
                    response = request.GetResponse();
                }
                catch (WebException ex)
                {
                    if (ex.Status == WebExceptionStatus.Timeout && attempts > 0)
                    {
                        attempts--;
                        continue;
                    }
                    throw new SDataException(ex);
                }

                var httpResponse = response as HttpWebResponse;
                var statusCode   = httpResponse != null ? httpResponse.StatusCode : 0;

                if (statusCode != HttpStatusCode.Found)
                {
                    return(new SDataResponse(response, location));
                }

                uri = location = response.Headers[HttpResponseHeader.Location];
            }
        }
Ejemplo n.º 11
0
 /// <summary>
 /// Initialises a new instance of the <see cref="SDataService"/> class, initialized with a target url, user name and password.
 /// </summary>
 /// <param name="url"></param>
 /// <param name="userName">user name used for credentials</param>
 /// <param name="password">password for user</param>
 public SDataService(string url, string userName, string password)
 {
     _uri = url != null
                ? new SDataUri(url)
                : new SDataUri
                  {
                      Server = "sdata",
                      Product = "-",
                      Contract = "-",
                      CompanyDataset = "-"
                  };
     UserName = userName;
     Password = password;
     Timeout = 120000;
     UserAgent = "Sage";
 }
        public IAsyncResult BeginGetResponse(AsyncCallback callback, object state)
        {
            var uri = Uri;
            RequestOperation operation;

            if (_operations.Count == 1)
            {
                operation = _operations[0];
            }
            else
            {
                operation = CreateBatchOperation();
                uri       = new SDataUri(uri).AppendPath("$batch").ToString();
            }

            var request = CreateRequest(uri, operation);

            return(new AsyncResultWrapper <WebResponse>(request.BeginGetResponse, request.EndGetResponse, callback, state));
        }
 public void Non_Standard_Parameters_Should_Have_Underscore_Prefix_Test()
 {
     var uri = new SDataUri("http://test.com/sdata/-/-/-/resource?_includeContent=true");
     Assert.IsTrue(uri.IncludeContent ?? false);
 }
Ejemplo n.º 14
0
        /// <summary>
        /// Asynchronous PUT to the server
        /// </summary>
        /// <param name="request">The request that identifies the resource within the syndication data source.</param>
        /// <param name="resource">The resource that should be created asynchronously.</param>
        public virtual AsyncRequest CreateAsync(SDataBaseRequest request, ISyndicationResource resource)
        {
            Guard.ArgumentNotNull(request, "request");
            Guard.ArgumentNotNull(resource, "resource");

            try
            {
                var requestUrl = new SDataUri(request.ToString()) {TrackingId = Guid.NewGuid().ToString()}.ToString();
                var operation = new RequestOperation(HttpMethod.Post, resource);
                var response = ExecuteRequest(requestUrl, operation, MediaType.Xml);
                var tracking = (Tracking) response.Content;
                return new AsyncRequest(this, response.Location, tracking);
            }
            catch (Exception ex)
            {
                throw new SDataClientException(ex.Message, ex);
            }
        }
Ejemplo n.º 15
0
 /// <summary>
 /// Initialises a new instance of the <see cref="SDataUri"/> class with
 /// the specified <see cref="Uri"/>.
 /// </summary>
 /// <param name="uri">The <see cref="Uri"/> to assign.</param>
 public SDataUri(SDataUri uri)
     : base(uri)
 {
 }
        protected override void BuildUrl(SDataUri uri)
        {
            base.BuildUrl(uri);

            if (!string.IsNullOrEmpty(ResourceSelector))
            {
                uri.CollectionPredicate = ResourceSelector.StartsWith("(") && ResourceSelector.EndsWith(")")
                                              ? ResourceSelector.Substring(1, ResourceSelector.Length - 2)
                                              : ResourceSelector;
            }
            else if (Entry != null)
            {
                var payload = Entry.GetSDataPayload();

                if (payload != null)
                {
                    uri.CollectionPredicate = string.Format("'{0}'", payload.Key);
                }
            }
        }
 protected virtual void BuildUrl(SDataUri uri)
 {
 }
Ejemplo n.º 18
0
 /// <summary>
 /// Initialises a new instance of the <see cref="SDataUri"/> class with
 /// the specified <see cref="Uri"/>.
 /// </summary>
 /// <param name="uri">The <see cref="Uri"/> to assign.</param>
 public SDataUri(SDataUri uri)
     : base(uri)
 {
 }
 /// <summary>
 /// function to format url string for the request
 /// </summary>
 /// <returns>formatted string</returns>
 public override string ToString()
 {
     var uri = new SDataUri(Uri.Uri.AbsoluteUri);
     BuildUrl(uri);
     return uri.Uri.AbsoluteUri.Replace("%20", " ");
 }
        protected override void BuildUrl(SDataUri uri)
        {
            base.BuildUrl(uri);

            foreach (var value in ResourceProperties)
            {
                uri.AppendPath(value);
            }
        }
 protected override void BuildUrl(SDataUri uri)
 {
     base.BuildUrl(uri);
     uri.AppendPath(TemplateTerm);
 }
Ejemplo n.º 22
0
        // Example site to view the templates for the different entries.
        // https://trinity.sagesaleslogixcloud.com/sdata/slx/dynamic/-/history/$template

        #region BotFunctions
        public virtual void Run()
        {
            bool ok = false;
            SDataUri Uri = new SDataUri(service.Url.ToString());

                progressLabel.ForeColor = Color.White;
                SetText("Running Bot");
                SDataRequest request = new SDataRequest(Uri.ToString()) { UserName = UserID, Password = Password };
                try
                {
                    // Simulates the Bot as only functioning during some typical work schedule. This schedule excludes any work off due to holidays and weekends...
                    if (DateTime.Compare(DateTime.Now.ToUniversalTime(), startWork.ToUniversalTime()) >= 0 && DateTime.Compare(DateTime.Now.ToUniversalTime(), endWork.ToUniversalTime()) <= 0)
                    {
                        // Checks to see if the bot was first commanded to run, if so demonstrates that it can connect to the server.
                        if (firstRun)
                        {
                            SetActivitiesCreated("0");
                            SetNotesCreated("0");
                            SetCompletedActivities("0");
                            SetLeadsCreated("0");
                            SetAccountsCreated("0");
                            SetContactsCreated("0");
                            SetOppsCreated("0");
                            SetOppsUpdated("0");
                            SetTicketsCreated("0");
                            SetText("Progress:");
                            role = "General";//getRole();
                            SetRole(role);
                            SetText("Connecting to server...");
                            Log("Logging at: " + DateTime.Now + "\n================================================================\n", fileName);
                            SDataResponse response = request.GetResponse();
                            ok = (response.StatusCode == HttpStatusCode.OK);
                            if (ok == true)
                            {
                                //PerformStep();
                                SetText("Connected to server");
                            }
                            // If it cannot connect it displays an error message to the user and stops the bot from running.
                            else
                            {
                                progressLabel.ForeColor = Color.Crimson;
                                SetText("Unable to connect to server. Please try again.");
                                this.stop();
                            }
                            firstRun = false;
                            // bool value runningHelper needed to clarify which UI label to change.
                            //runningHelper = false;
                            switch (role)
                            {
                                case "General":
                                    runGeneral();
                                    SetText("Done");
                                    break;
                                default:
                                    runGeneral();
                                    SetText("General role ran");
                                    break;
                            }
                        }
                        else
                        {
                            //runningHelper = false;
                            switch (role)
                            {
                                case "General":
                                    runGeneral();
                                    SetText("Done");
                                    break;
                                default:
                                    runGeneral();
                                    SetText("General role ran...");
                                    break;
                            }
                            SetText("Waiting...");
                        }
                    }
                    else
                        return;
                } 
                catch (Sage.SData.Client.Framework.SDataException)
                {
                    progressLabel.ForeColor = Color.Crimson;
                    SetText("Invalid User Name. Please try again...");
                } 
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Execute the request and return a response object.
        /// </summary>
        public SDataResponse GetResponse()
        {
            var uri = Uri;
            RequestOperation operation;

            if (_operations.Count == 1)
            {
                operation = _operations[0];
            }
            else
            {
                operation = CreateBatchOperation();
                uri = new SDataUri(uri).AppendPath("$batch").ToString();
            }

            string location = null;

            while (true)
            {
                var request = CreateRequest(uri, operation);

                WebResponse response;
                try
                {
                    response = request.GetResponse();
                }
                catch (WebException ex)
                {
                    throw new SDataException(ex);
                }

                var httpResponse = response as HttpWebResponse;
                var statusCode = httpResponse != null ? httpResponse.StatusCode : 0;

                if (statusCode != HttpStatusCode.Found)
                    return new SDataResponse(response, location);

                uri = location = response.Headers[HttpResponseHeader.Location];
            }
        }
 protected override void BuildUrl(SDataUri uri)
 {
     base.BuildUrl(uri);
     uri.AppendPath(SchemaTerm);
 }
        protected override void BuildUrl(SDataUri uri)
        {
            base.BuildUrl(uri);
            uri.AppendPath(ServiceTerm);

            if (!string.IsNullOrEmpty(OperationName))
            {
                uri.AppendPath(OperationName);
            }
        }
Ejemplo n.º 26
0
        private RequestOperation CreateBatchOperation()
        {
            var uri = new SDataUri(Uri);

            if (uri.PathSegments.Length != 4)
            {
                throw new InvalidOperationException("Batch requests can only be made on collection end points");
            }

            var feed = new AtomFeed();
            var batchOp = new RequestOperation(HttpMethod.Post, feed);

            foreach (var op in _operations)
            {
                AtomEntry entry;

                if (op.Resource == null)
                {
                    if (op.Method != HttpMethod.Post)
                    {
                        throw new InvalidOperationException("A predicate must be specified for GET, PUT and DELETE batch requests");
                    }

                    var entryUri = new SDataUri(uri) {CollectionPredicate = op.Predicate};
                    entry = new AtomEntry {Id = new AtomId(entryUri.Uri)};
                }
                else
                {
                    entry = op.Resource as AtomEntry;

                    if (entry == null)
                    {
                        throw new InvalidOperationException("Only atom entry resources can be submitted in batch requests");
                    }
                }

                entry.SetSDataHttpMethod(op.Method);

                if (!string.IsNullOrEmpty(op.ETag))
                {
                    entry.SetSDataHttpIfMatch(op.ETag);
                }

                feed.AddEntry(entry);

                foreach (var file in op.Files)
                {
                    batchOp.Files.Add(file);
                }
            }

            return batchOp;
        }
        protected override void BuildUrl(SDataUri uri)
        {
            base.BuildUrl(uri);

            if (!string.IsNullOrEmpty(ResourceSelector))
            {
                uri.CollectionPredicate = ResourceSelector.StartsWith("(") && ResourceSelector.EndsWith(")")
                                              ? ResourceSelector.Substring(1, ResourceSelector.Length - 2)
                                              : ResourceSelector;
            }
        }