Exemple #1
0
        public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req, TraceWriter log)
        {
            HttpStatusCode responseCode = HttpStatusCode.OK;
            string         status       = "Unknown Error";

            // parse query parameter
            string taskId = req.GetQueryNameValuePairs()
                            .FirstOrDefault(q => String.Compare(q.Key, "taskId", StringComparison.OrdinalIgnoreCase) == 0)
                            .Value;

            if (taskId != null)
            {
                try
                {
                    SecurityHelper security = new SecurityHelper();
                    responseCode = security.validateSecurity(req, log);
                    if (responseCode == HttpStatusCode.OK)
                    {
                        // Get request body
                        string dataString = await req.Content.ReadAsStringAsync();

                        log.Info($"AMTaskUpdate (Run) error at: {DateTime.Now} - {dataString}");
                        dynamic data = await req.Content.ReadAsAsync <AMUpdate>();

                        log.Info($"AMTaskUpdate (Run) error at: {DateTime.Now} - {data?.percentComplete}");
                        double?percentComplete = data?.percentComplete;
                        log.Info($"AMTaskUpdate (Run) error at: {DateTime.Now} - {data?.dueDate}");
                        DateTime?dueDate = data?.dueDate;

                        log.Info(
                            $"AMTaskUpdate (Run) error at: {DateTime.Now} - Values: {dueDate} : {percentComplete}");

                        percentComplete = percentComplete / 100;
                        string siteUrl = Environment.GetEnvironmentVariable("SharePointSiteUrl");

                        var task = Task.Run(async() => await CSOMHelper.GetClientContext(siteUrl));
                        task.Wait();
                        if (task.Result != null)
                        {
                            string ID;
                            string title;
                            string dueDateString;
                            string percentCompleteString;
                            string description;
                            string itemUrl;

                            using (var ctx = task.Result)
                            {
                                List     l    = ctx.Web.Lists.GetByTitle("AMTaskList");
                                ListItem item = l.GetItemById(taskId);
                                if (percentComplete.HasValue)
                                {
                                    item["PercentComplete"] = percentComplete;
                                }
                                if (dueDate.HasValue)
                                {
                                    item["DueDate"] = dueDate;
                                }
                                item.Update();
                                ctx.Load(item);
                                ctx.ExecuteQuery();
                                ID            = item["ID"].ToString();
                                title         = item["Title"].ToString();
                                dueDateString = ((DateTime)item["DueDate"]).ToString("yyyy-MM-dd");
                                //string dueDate = ((DateTime) item["DueDate"]).ToString("MM/dd/YYYY");
                                percentCompleteString = (((double)item["PercentComplete"]) * 100).ToString(CultureInfo.InvariantCulture);
                                //string percentComplete = (((double)item["PercentComplete"]) * 100) + " %";
                                description = item["Body"]?.ToString() ?? "";
                                itemUrl     = Environment.GetEnvironmentVariable("SharePointListDisplayForm") + item["ID"];
                            }
                            string filePath = Path.Combine(Environment.GetEnvironmentVariable("Home") ?? throw new InvalidOperationException(), "site\\wwwroot\\", "AMCardUpdated.json");
                            //string filePath = "AMCardUpdated.json";
                            string jsonAM = System.IO.File.ReadAllText(filePath);

                            var itemPost = string.Format(jsonAM, title, dueDateString, percentCompleteString, description, ID, itemUrl);

                            var response = req.CreateResponse(responseCode);
                            response.Headers.Add("CARD-ACTION-STATUS",
                                                 "The tasks status has been updated.");
                            response.Headers.Add("CARD-UPDATE-IN-BODY", "true");
                            var content = new StringContent(itemPost, Encoding.UTF8, "application/json");
                            response.Content = content;
                            return(response);
                        }
                    }
                }
                catch (Exception ex)
                {
                    responseCode = HttpStatusCode.InternalServerError;
                    status       = ex.Message;
                    log.Info($"AMTaskUpdate (Run) error at: {DateTime.Now} - {ex.Message} - {ex.StackTrace}");
                }
            }

            // You should also return the CARD-ACTION-STATUS header in the response.
            // The value of the header will be displayed to the user.

            switch (responseCode)
            {
            case HttpStatusCode.Forbidden:
                status = "This message was not sent through secure channels.";
                break;

            case HttpStatusCode.Unauthorized:
                status = "Thie messages token was not valid.";
                break;
            }

            HttpResponseMessage errorResponse = req.CreateErrorResponse(responseCode, new HttpError());

            errorResponse.Headers.Add("CARD-ACTION-STATUS", status);
            return(errorResponse);
        }
Exemple #2
0
        //Every 5 minutes
        //0 */5 * * * *
        //Once a day at 9am
        //0 00 9 * * *
        public static void Run([TimerTrigger("0 00 9 * * *")] TimerInfo myTimer, TraceWriter log)
        {
            log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
            try
            {
                string siteUrl = Environment.GetEnvironmentVariable("SharePointSiteUrl");

                var task = Task.Run(async() => await CSOMHelper.GetClientContext(siteUrl));
                task.Wait();
                if (task.Result != null)
                {
                    using (var ctx = task.Result)
                    {
                        List      l        = ctx.Web.Lists.GetByTitle("AMTaskList");
                        CamlQuery newQuery = new CamlQuery
                        {
                            ViewXml = "<View><Query><Where><And>" +
                                      "<Lt><FieldRef Name=\"DueDate\"/><Value Type=\"DateTime\"><Today/></Value></Lt>" +
                                      "<Lt><FieldRef Name=\"PercentComplete\" /><Value Type=\"Number\">1.00</Value></Lt>" +
                                      "</And></Where></Query><RowLimit>100</RowLimit></View>"
                        };
                        var items = l.GetItems(newQuery);
                        ctx.Load(items);
                        ctx.ExecuteQuery();

                        if (items.Count > 0)
                        {
                            string filePath = Path.Combine(Environment.GetEnvironmentVariable("Home") ?? throw new InvalidOperationException(), "site\\wwwroot\\", "AMCard.json");
                            //string filePath = "AMCard.json";
                            string jsonAM = System.IO.File.ReadAllText(filePath);

                            if (jsonAM.Length > 0)
                            {
                                var notificationHelper = new NotificationHelper(log);
                                foreach (var item in items)
                                {
                                    var fuv  = (FieldUserValue[])item["AssignedTo"];
                                    var user = ctx.Web.EnsureUser(fuv[0].LookupValue);
                                    ctx.Load(user);
                                    ctx.ExecuteQuery();
                                    //send email
                                    string title   = item["Title"].ToString();
                                    string dueDate = ((DateTime)item["DueDate"]).ToString("yyyy-MM-dd");
                                    //string dueDate = ((DateTime) item["DueDate"]).ToString("MM/dd/YYYY");
                                    string percentComplete = (((double)item["PercentComplete"]) * 100).ToString(CultureInfo.InvariantCulture);
                                    //string percentComplete = (((double)item["PercentComplete"]) * 100) + " %";
                                    string description = item["Body"]?.ToString() ?? "";
                                    string itemUrl     = Environment.GetEnvironmentVariable("SharePointListDisplayForm") + item["ID"];
                                    var    itemEmail   = string.Format(jsonAM, title, dueDate, percentComplete, description, item["ID"], itemUrl);

                                    var result = notificationHelper.SendNotification(user.Email, itemEmail);
                                    log.Info($"SendAM (Run) notification {result} at: {DateTime.Now} - {user.Email}");
                                }
                            }
                            else
                            {
                                log.Info($"SendAM (Run) error at: {DateTime.Now} - jsonAM.Length 0");
                            }
                        }

                        else
                        {
                            log.Info($"SendAM (Run) at: {DateTime.Now} - items.Count 0");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.Info($"SendAM (Run) error at: {DateTime.Now} - {ex.Message} - {ex.StackTrace}");
            }
        }