Example #1
0
        private void UpdateSuppliers(string country, string[] supplierNames)
        {
            var request = HttpContext.Current.Request;
            var authority = request.Url.Authority;
            var spAppWebUrl = request.Headers["SPAppWebUrl"];
            var contextToken = request.Headers["SPContextToken"];

            using (var clientContext = TokenHelper.GetClientContextWithContextToken(
                spAppWebUrl, contextToken, authority))
            {
                var service = new PartSuppliersService(clientContext);
                service.UpdateSuppliers(country, supplierNames);
            }
        }
        public ActionResult Create(string country, string spHostUrl)
        {
            var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);
            using (var clientContext = spContext.CreateUserClientContextForSPAppWeb())
            {
                var service = new PartSuppliersService(clientContext);
                var id = service.GetIdByCountry(country);
                if (id == null)
                {
                    id = service.Add(country);
                    TempData["Message"] = "Part Supplier Successfully Created!";
                }
                else
                    TempData["ErrorMessage"] = string.Format("Failed to Create The Part Supplier: There's already a Part Supplier who's country is {0}.", country);

                return RedirectToAction("Details", new { id = id.Value, SPHostUrl = spHostUrl });
            }
        }
        public ActionResult StartWorkflow(int id, Guid workflowSubscriptionId, string spHostUrl)
        {
            var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext) as SharePointAcsContext;

            var webServiceUrl = Url.RouteUrl("DefaultApi", new { httproute = "", controller = "Data" }, Request.Url.Scheme);
            var payload = new Dictionary<string, object>
                {
                    { "appWebUrl", spContext.SPAppWebUrl.ToString() },
                    { "webServiceUrl", webServiceUrl },
                    { "contextToken",  spContext.ContextToken }
                };

            using (var clientContext = spContext.CreateUserClientContextForSPAppWeb())
            {
                var service = new PartSuppliersService(clientContext);
                service.StartWorkflow(workflowSubscriptionId, id, payload);
            }

            TempData["Message"] = "Workflow Successfully Started!";
            return RedirectToAction("Details", new { id = id, SPHostUrl = spHostUrl });
        }
        public ActionResult PublishSubmitEvent(int id, Guid workflowInstanceId, string spHostUrl)
        {
            var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);
            using (var clientContext = spContext.CreateUserClientContextForSPAppWeb())
            {
                var service = new PartSuppliersService(clientContext);
                service.PublishCustomEvent(workflowInstanceId, "Submit for Approval", "");
                
                // Wait until workflow user status changed
                WorkflowInstance instance;
                do
                {
                    Thread.Sleep(1000);
                    instance = service.GetWorkflowInstance(workflowInstanceId);
                }
                while (instance.UserStatus == "Wait for Submit");
            }
            TempData["Message"] = "Successfully Submitted For Approval!";


            return RedirectToAction("Details", new { id = id, SPHostUrl = spHostUrl });
        }
        public ActionResult Details(int id)
        {
            var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);
            using (var clientContext = spContext.CreateUserClientContextForSPAppWeb())
            {
                var service = new PartSuppliersService(clientContext);
                var item = service.GetItem(id);
                if (item == null) return HttpNotFound();

                var workflowSubscription = service.GetWorkflowSubscription("Approve Suppliers");

                ViewBag.AppWebUrl = spContext.SPAppWebUrl.ToString();
                ViewBag.WorkflowSubscription = workflowSubscription;
                ViewBag.WorkflowInstance = service.GetItemWorkflowInstance(workflowSubscription.Id, id);
                ViewBag.ApprovalTask = service.GetApprovalTaskForCurrentUser(id);

                return View(item);
            }
        }