public static void SendEscalationEmail(DataTable tblEscalation, ClientContext clientContext, Web web) { //var allUsers = from row in tblEscalation.AsEnumerable() // select row.Field<string>("UserEmail"); //foreach (var userEmail in allUsers) //{ //DataRow[] filteredDataTable = tblEscalation.Select(@"UserEmail = '" + userEmail + "'"); string appName = string.Empty; string formName = string.Empty; string template = string.Empty; //foreach (DataRow dr in filteredDataTable) foreach (DataRow dr in tblEscalation.Rows) { appName = dr["ApplicationName"].ToString(); formName = dr["FormName"].ToString(); EmailHelper eHelper = new EmailHelper(); template = dr["ActionStatus"].ToString(); Dictionary <string, string> custom = new Dictionary <string, string>(); custom["DCRNo"] = dr["ReferenceNo"].ToString(); custom["DCNNo"] = dr["ReferenceNo"].ToString(); custom["Link"] = dr["Link"].ToString();; custom["AssignDate"] = dr["AssignDate"].ToString(); custom["UserName"] = dr["UserFullName"].ToString(); ListItemDetail listDetail = new ListItemDetail(); listDetail.ItemId = Convert.ToInt32(dr["ID"].ToString()); listDetail.ListName = dr["ListName"].ToString(); List <ListItemDetail> listDetails = new List <ListItemDetail>(); listDetails.Add(listDetail); Dictionary <string, string> email = new Dictionary <string, string>(); switch (Convert.ToInt32(template)) { case 1: //Escalation only email = eHelper.GetEmailBody(clientContext, web, EmailTemplateName.ESCLATIONMAILTEMPLATE, listDetails, custom, null, appName, formName); eHelper.SendMail(appName, formName, EmailTemplateName.ESCLATIONMAILTEMPLATE, email["Subject"], email["Body"], BELDataAccessLayer.Instance.GetConfigVariable("FromEmailAddress"), dr["ToEmail"].ToString(), dr["CCEmail"].ToString(), false); break; case 2: //Reminder only email = eHelper.GetEmailBody(clientContext, web, EmailTemplateName.REMINDEREMAILTEMPLATE, listDetails, custom, null, appName, formName); eHelper.SendMail(appName, formName, EmailTemplateName.REMINDEREMAILTEMPLATE, email["Subject"], email["Body"], BELDataAccessLayer.Instance.GetConfigVariable("FromEmailAddress"), dr["ToEmail"].ToString(), dr["CCEmail"].ToString(), false); break; default: break; } } // } }
public async Task ShouldBatchUpdateFieldsByFilter() { /// Arrange var objectName = "ThisObjectB" + new Random().Next(0, 999999); var listItem = new ListItemCreateRequest { ContentSchemaId = nameof(Tag), Content = new Tag { Name = objectName } }; ListItemDetail listItemDetail = await _client.ListItems.CreateAsync(listItem); /// Act var updateRequest = new ListItemFieldsFilterUpdateRequest { ListItemFilterRequest = new ListItemFilterRequest // TODO: ListItemFieldsFilterUpdateRequest.ListItemFilterRequest: Rename property to FilterRequest? { Filter = new TermFilter { Field = "id", Term = listItemDetail.Id } }, ChangeCommands = new List <MetadataValuesChangeCommandBase> { new MetadataValuesSchemaUpdateCommand { SchemaId = nameof(Tag), Value = new DataDictionary { { "name", "Foo" } } } } }; /// Act var businessProcess = await _client.ListItems.BatchUpdateFieldsByFilterAsync(updateRequest); var waitResult = await _client.BusinessProcesses.WaitForCompletionAsync(businessProcess.Id, TimeSpan.FromSeconds(10)); ListItemDetail result = await _client.ListItems.GetAsync(listItemDetail.Id, true); /// Assert Assert.Equal("Foo", result.ConvertTo <Tag>(nameof(Tag)).Name); }
public async Task ShouldCreate() { // Arrange var objectName = "ThisObjectB" + new Random().Next(0, 999999); var listItem = new ListItemCreateRequest { ContentSchemaId = nameof(Tag), Content = new Tag { Name = objectName } }; // Act ListItemDetail result = await _client.ListItem.CreateAsync(listItem).ConfigureAwait(false); // Assert Assert.False(string.IsNullOrEmpty(result.Id)); }
public async Task ShouldBatchUpdateFieldsByFilter() { // Arrange var objectName = "ThisObjectB" + new Random().Next(0, 999999); var listItem = new ListItemCreateRequest { ContentSchemaId = nameof(Tag), Content = new Tag { Name = objectName } }; ListItemDetail listItemDetail = await _client.ListItem.CreateAsync(listItem).ConfigureAwait(false); // Act var updateRequest = new ListItemFieldsBatchUpdateFilterRequest { FilterRequest = new ListItemFilterRequest { Filter = new TermFilter { Field = "id", Term = listItemDetail.Id } }, ChangeCommands = new List <MetadataValuesChangeCommandBase> { new MetadataValuesSchemaUpdateCommand { SchemaId = nameof(Tag), Value = new DataDictionary { { "name", "Foo" } } } } }; // Act await _client.ListItem.BatchUpdateFieldsByFilterAsync(updateRequest).ConfigureAwait(false); ListItemDetail result = await _client.ListItem.GetAsync(listItemDetail.Id, new[] { ListItemResolveBehavior.Content }).ConfigureAwait(false); // Assert Assert.Equal("Foo", result.ConvertTo <Tag>().Name); }
/// <summary> /// Gets the email template. /// </summary> /// <param name="appContext">The application context.</param> /// <param name="appWeb">The application web.</param> /// <param name="templateName">Name of the template.</param> /// <param name="listItemDetails">The list item details.</param> /// <param name="customValues">The custom values.</param> /// <param name="role">The role.</param> /// <param name="applicationName">Name of the application.</param> /// <param name="formName">Name of the form.</param> /// <returns> /// Return Subject and Body Dictionary /// </returns> public Dictionary <string, string> GetEmailBody(ClientContext appContext, Web appWeb, string templateName, List <ListItemDetail> listItemDetails, Dictionary <string, string> customValues, string role, string applicationName = ApplicationNameConstants.LUMITEMCODECREATION, string formName = FormNameConstants.ICCPForm) { Dictionary <string, string> emailTemplate = new Dictionary <string, string>(); if (!string.IsNullOrEmpty(templateName)) { //BELDataAccessLayer helper = new BELDataAccessLayer(); //string siteURL = BELDataAccessLayer.Instance.GetConfigVariable(SiteURLs.ROOTSITEURL); string siteURL = BELDataAccessLayer.Instance.GetSiteURL(SiteURLs.ROOTSITEURL); using (ClientContext context = BELDataAccessLayer.Instance.CreateClientContext(siteURL)) { List emailTemplateList = context.Web.Lists.GetByTitle(ListNames.EmailTemplateList); CamlQuery qry = new CamlQuery(); qry.ViewXml = @"<View> <Query> <Where> <And> <And> <And> <Or> <IsNull><FieldRef Name='Role' /></IsNull> <Contains> <FieldRef Name='Role' /> <Value Type='Text'>" + role + @"</Value> </Contains> </Or> <Eq> <FieldRef Name='FormName' /> <Value Type='Text'>" + formName + @"</Value> </Eq> </And> <Eq> <FieldRef Name='ApplicationName' /> <Value Type='Text'>" + applicationName + @"</Value> </Eq> </And> <Eq> <FieldRef Name='Title' /> <Value Type='Text'>" + templateName + @"</Value> </Eq> </And> </Where> </Query> </View>"; ListItemCollection items = emailTemplateList.GetItems(qry); context.Load(items); context.ExecuteQuery(); if (items.Count > 0) { ListItem emailListItem = null; if (items.Count > 1) { emailListItem = items.FirstOrDefault(i => Convert.ToString(i["Role"]) != string.Empty); } else { emailListItem = items.FirstOrDefault(); } emailTemplate["Subject"] = Convert.ToString(emailListItem["Subject"]); emailTemplate["Body"] = Convert.ToString(emailListItem["Body"]); if (listItemDetails != null || customValues != null) { ListItemDetail listDetail = listItemDetails[0]; ListItem item = listDetail.ListItemObject; string listName = listDetail.ListName; if (item == null) { List spList = appWeb.Lists.GetByTitle(listName); item = spList.GetItemById(listDetail.ItemId); appContext.Load(item); appContext.Load(spList, p => p.DefaultDisplayFormUrl); appContext.ExecuteQuery(); listDetail.ListItemObject = item; customValues["ItemLink"] = "#URL" + spList.DefaultDisplayFormUrl + "?ID=" + listDetail.ItemId; customValues["ItemLinkClickHere"] = "<a href='#URL" + spList.DefaultDisplayFormUrl + "?ID=" + listDetail.ItemId + "' >Click Here</a>"; //if (customValues.ContainsKey("CurrentUserAlise")) //{ // customValues["UserName"] = customValues[Parameter.CURRENTUSERALISE]; //} customValues["ReceiverName"] = customValues[Parameter.MAILRECEIVERNAME]; customValues["UserName"] = customValues[Parameter.CURRENTAPPROVERNAME]; } emailTemplate = this.CreateEmailBody(appContext, appWeb, emailTemplate, listItemDetails, customValues); } } } } return(emailTemplate); }
/// <summary> /// Creates the email body. /// </summary> /// <param name="context">The context.</param> /// <param name="web">The web.</param> /// <param name="emailBody">The email body.</param> /// <param name="listItemDetails">The list item details.</param> /// <param name="customValues">The custom values.</param> /// <returns> /// Email Subject and Body /// </returns> public Dictionary <string, string> CreateEmailBody(ClientContext context, Web web, Dictionary <string, string> emailBody, List <ListItemDetail> listItemDetails, Dictionary <string, string> customValues) { Dictionary <string, string> emailBodyWithCustomData = new Dictionary <string, string>(); Dictionary <string, string> emailBodyWithAllData = new Dictionary <string, string>(); if (context != null && web != null && emailBody != null) { if (customValues != null && customValues.Count > 0) { foreach (KeyValuePair <string, string> strEmail in emailBody) { Regex r = new Regex(@"\[\[Custom:(.+?)\]\]"); string preparedEmail = HttpUtility.HtmlDecode(strEmail.Value); MatchCollection mc = r.Matches(preparedEmail); foreach (Match match in mc) { string fieldName = match.Groups[1].Value; try { Logger.Info("Email Body Replacement Listname : Custom , FieldName : " + fieldName); preparedEmail = preparedEmail.Replace("[[Custom:" + fieldName + "]]", this.GetFieldValueString(customValues[fieldName])); } catch (Exception ex) { Logger.Error("Error While Replace parameter, Error Message: " + ex.Message + " Stack trace : " + ex.StackTrace); } } emailBodyWithCustomData[strEmail.Key] = preparedEmail; } ////emailBody = emailBodyWithCustomData; ////foreach (KeyValuePair<string, string> customField in customValues) ////{ //// emailBody["Subject"] = emailBody["Subject"].Replace(customField.Key, customField.Value); //// emailBody["Body"] = emailBody["Body"].Replace(customField.Key, customField.Value); ////} } if (emailBodyWithCustomData == null || emailBodyWithCustomData.Count == 0) { emailBodyWithCustomData = emailBody; } if (listItemDetails != null && listItemDetails.Count > 0) { for (int i = 0; i < listItemDetails.Count; i++) { ListItemDetail listDetail = listItemDetails[i]; ListItem item = listDetail.ListItemObject; string listName = listDetail.ListName; if (item == null) { List spList = web.Lists.GetByTitle(listName); item = spList.GetItemById(listDetail.ItemId); context.Load(item); context.ExecuteQuery(); } foreach (KeyValuePair <string, string> strEmail in emailBodyWithCustomData) { Regex r = new Regex(@"\[\[" + listName + @":(.+?)\]\]"); string preparedEmail = HttpUtility.HtmlDecode(strEmail.Value); MatchCollection mc = r.Matches(preparedEmail); foreach (Match match in mc) { string fieldName = match.Groups[1].Value; try { Logger.Info("Email Body Replacement Listname : " + listName + " , FieldName : " + fieldName); preparedEmail = preparedEmail.Replace("[[" + listName + ":" + fieldName + "]]", this.GetFieldValueString(item[fieldName])); } catch (Exception ex) { Logger.Error("Error While Replace parameter, Error Message: " + ex.Message + " Stack trace : " + ex.StackTrace); } } emailBodyWithAllData[strEmail.Key] = preparedEmail; } } } } if (emailBodyWithAllData.Count == 0) { emailBodyWithAllData = emailBodyWithCustomData; } return(emailBodyWithAllData); }
public ActionStatus SaveBySection(ISection sectionDetails, Dictionary <string, string> objDict) { lock (Padlock) { ActionStatus status = new ActionStatus(); DCRNoCount currentDCRNo = null; //BELDataAccessLayer helper = new BELDataAccessLayer(); if (sectionDetails != null && objDict != null) { objDict[Parameter.ACTIVITYLOG] = DCRDCNListNames.DCRACTIVITYLOG; objDict[Parameter.APPLICATIONNAME] = ApplicationNameConstants.DCRAPP; objDict[Parameter.FROMNAME] = FormNameConstants.DCRFORM; DCRDetailSection section = null; DesignEngineerSection designEngSection = null; if (sectionDetails.SectionName == DCRSectionName.DCRDETAILSECTION) { section = sectionDetails as DCRDetailSection; if (string.IsNullOrEmpty(section.DCRNo) && sectionDetails.ActionStatus == ButtonActionStatus.SaveAsDraft) { section.Title = section.DCRNo = "View"; } else if (sectionDetails.ActionStatus == ButtonActionStatus.NextApproval && (string.IsNullOrEmpty(section.DCRNo) || section.DCRNo == "View")) { ////section = sectionDetails as DCRDetailSection; currentDCRNo = GetDCRNo(section.BusinessUnit); section.RequestDate = DateTime.Now; if (currentDCRNo != null) { currentDCRNo.CurrentValue = currentDCRNo.CurrentValue + 1; Logger.Info("DCR Current Value + 1 = " + currentDCRNo.CurrentValue); section.DCRNo = string.Format("DCR-{0}-{1}-{2}", currentDCRNo.BusinessUnit, DateTime.Today.Year, string.Format("{0:0000}", currentDCRNo.CurrentValue)); section.Title = section.DCRNo; Logger.Info("DCR No is " + section.DCRNo); status.ExtraData = section.DCRNo; } } } if (sectionDetails.SectionName == DCRSectionName.DESIGNENGINEERSECTION && sectionDetails.ActionStatus == ButtonActionStatus.NextApproval) { designEngSection = sectionDetails as DesignEngineerSection; if (designEngSection != null) { designEngSection.FinalDesignEngineer = objDict[Parameter.USEREID]; } } List <ListItemDetail> objSaveDetails = BELDataAccessLayer.Instance.SaveData(this.context, this.web, sectionDetails, objDict); ListItemDetail itemDetails = objSaveDetails.Where(p => p.ListName.Equals(DCRDCNListNames.DCRLIST)).FirstOrDefault <ListItemDetail>(); if (sectionDetails.SectionName == DCRSectionName.DCRDETAILSECTION) { if (section != null && !string.IsNullOrEmpty(section.OldDCRNo)) { Dictionary <string, dynamic> values = new Dictionary <string, dynamic>(); values.Add("IsDCRRetrieved", true); BELDataAccessLayer.Instance.SaveFormFields(this.context, this.web, DCRDCNListNames.DCRLIST, section.OldDCRId, values); } if (itemDetails.ItemId > 0 && currentDCRNo != null) { //// AsyncHelper.Call(obj => //// { UpdateDCRNoCount(currentDCRNo); Logger.Info("Update DCR No " + section.DCRNo); //// }); } } if (sectionDetails.SectionName == DCRSectionName.DESIGNENGINEERSECTION && sectionDetails.ActionStatus == ButtonActionStatus.NextApproval) { if (designEngSection != null && designEngSection.DateForCompletionOfTesting != null && designEngSection.DateForReceiptOfSamples != null) { EmailHelper eHelper = new EmailHelper(); Dictionary <string, string> mailCustomValues = null; List <FileDetails> emailAttachments = null; Dictionary <string, string> email = new Dictionary <string, string>(); List <ListItemDetail> itemdetail = new List <ListItemDetail>(); string applicationName = ApplicationNameConstants.DCRAPP; string formName = FormNameConstants.DCRFORM; string from = string.Empty, to = string.Empty, cc = string.Empty, role = string.Empty, tmplName = string.Empty; from = objDict[Parameter.USEREID]; from = BELDataAccessLayer.GetEmailUsingUserID(context, web, from); to = designEngSection.ProposedBy; to = BELDataAccessLayer.GetEmailUsingUserID(context, web, to); cc = from; role = DCRRoles.DESIGNENGINEER; tmplName = EmailTemplateName.DESIGNENGGTOCREATOR; itemdetail.Add(new ListItemDetail() { ItemId = itemDetails.ItemId, IsMainList = true, ListName = DCRDCNListNames.DCRLIST }); if (mailCustomValues == null) { mailCustomValues = new Dictionary <string, string>(); } mailCustomValues[Parameter.CURRENTAPPROVERNAME] = BELDataAccessLayer.GetNameUsingUserID(context, web, objDict[Parameter.USEREID]); email = eHelper.GetEmailBody(context, web, tmplName, itemdetail, mailCustomValues, role, applicationName, formName); eHelper.SendMail(applicationName, formName, tmplName, email["Subject"], email["Body"], from, to, cc, false, emailAttachments); } } if (itemDetails.ItemId > 0) { status.IsSucceed = true; status.ItemID = itemDetails.ItemId; switch (sectionDetails.ActionStatus) { case ButtonActionStatus.SaveAsDraft: status.Messages.Add("Text_SaveDraftSuccess"); break; case ButtonActionStatus.SaveAndNoStatusUpdate: status.Messages.Add("Text_SaveSuccess"); break; case ButtonActionStatus.NextApproval: status.Messages.Add(ApplicationConstants.SUCCESSMESSAGE); break; case ButtonActionStatus.Delegate: status.Messages.Add("Text_DelegatedSuccess"); break; case ButtonActionStatus.Complete: status.Messages.Add("Text_CompleteSuccess"); break; case ButtonActionStatus.Rejected: status.Messages.Add("Text_RejectedSuccess"); break; default: status.Messages.Add(ApplicationConstants.SUCCESSMESSAGE); break; } } else { status.IsSucceed = false; status.Messages.Add(ApplicationConstants.ERRORMESSAGE); } } return(status); } }
/// <summary> /// Saves the by section. /// </summary> /// <param name="sections">The sections.</param> /// <param name="objDict">The object dictionary.</param> /// <returns>return status</returns> public ActionStatus SaveBySection(ISection sectionDetails, Dictionary <string, string> objDict) { ActionStatus status = new ActionStatus(); BELDataAccessLayer helper = new BELDataAccessLayer(); if (sectionDetails != null && objDict != null) { objDict[Parameter.ACTIVITYLOG] = DCRDCNListNames.DCNACTIVITYLOG; objDict[Parameter.APPLICATIONNAME] = ApplicationNameConstants.DCRAPP; objDict[Parameter.FROMNAME] = FormNameConstants.DCNFORM; DesignEngineerSection section = null; if (sectionDetails.SectionName == DCNSectionName.DESIGNENGINEERSECTION) { if (sectionDetails.ListDetails != null && sectionDetails.ListDetails.Count != 0 && sectionDetails.ListDetails[0].ItemId == 0) { section = sectionDetails as DesignEngineerSection; if (ISDCNGenerataed(section.DCRNo)) { status.IsSucceed = false; status.Messages.Add("Text_IsDCNGenerated"); return(status); } } } List <ListItemDetail> objSaveDetails = helper.SaveData(this.context, this.web, sectionDetails, objDict); ListItemDetail itemDetails = objSaveDetails.Where(p => p.ListName.Equals(DCRDCNListNames.DCNLIST)).FirstOrDefault <ListItemDetail>(); if (sectionDetails.SectionName == DCNSectionName.DESIGNENGINEERSECTION) { if (sectionDetails.ListDetails != null && sectionDetails.ListDetails.Count != 0 && sectionDetails.ListDetails[0].ItemId == 0) { //var sectiondcn = sectionDetails as DesignDocumentEngineerSection; Dictionary <string, dynamic> values = new Dictionary <string, dynamic>(); values.Add("DCNNo", section.DCNNo); values.Add("IsDCNGenerated", "1"); BELDataAccessLayer.Instance.SaveFormFields(this.context, this.web, DCRDCNListNames.DCRLIST, section.DCRID, values); status.ExtraData = section.DCNNo; } } if (itemDetails.ItemId > 0) { status.ItemID = itemDetails.ItemId; status.IsSucceed = true; switch (sectionDetails.ActionStatus) { case ButtonActionStatus.SaveAsDraft: status.Messages.Add("Text_SaveDraftSuccess"); break; case ButtonActionStatus.SaveAndNoStatusUpdate: status.Messages.Add("Text_SaveSuccess"); break; case ButtonActionStatus.NextApproval: status.Messages.Add(ApplicationConstants.SUCCESSMESSAGE); break; case ButtonActionStatus.Complete: status.Messages.Add("Text_CompleteSuccess"); break; case ButtonActionStatus.SendBack: status.Messages.Add("Text_SendBackSuccess"); break; default: status.Messages.Add(ApplicationConstants.SUCCESSMESSAGE); break; } } else { status.IsSucceed = false; status.Messages.Add(ApplicationConstants.ERRORMESSAGE); } } return(status); }