internal static void CaliculateExecutionTime(ref DateTime executionTime, Alert alert, bool isRepeat) { try { int num = (isRepeat || (alert.PeriodPosition == PeriodPosition.After)) ? -1 : 1; int periodAmount = num * (isRepeat ? alert.RepeatInterval : alert.PeriodQty); PeriodType periodUnit = isRepeat ? alert.RepeatType : alert.PeriodType; executionTime = CaliculatePeriod(executionTime, periodUnit, periodAmount); } catch { } }
internal void SendDelayedMessage(DelayedAlert delayedAlert, Alert alert, SPListItem item) { try { MailTemplateUsageObject mtObject = alert.GetMailTemplateUsageObjectForEventType(delayedAlert.AlertType); string toAddress = GetRecipientEmailAddresses(alert.ToAddress, item); string ccAddress = GetRecipientEmailAddresses(alert.CcAddress, item); string fromAddress = GetRecipientEmailAddresses(alert.FromAdderss, item); string subject = delayedAlert.Subject; string body = delayedAlert.Body; //string subject = ReplacePlaceHolders(mtObject.Template.Subject, item); //string body = ReplacePlaceHolders(mtObject.Template.Body, item); string smtpSName = GetSMTPServer(item); SendMail(smtpSName, toAddress, fromAddress, ccAddress, subject, body, null); } catch { } //try //{ // SPListItem item = null; // using (SPSite site = new SPSite(this.siteCollectionURL)) // { // site.CatchAccessDeniedException = false; // try // { // using (SPWeb web = site.OpenWeb(alert.WebId)) // { // // item = ScanningUtilities.GetItemFromList(web, alert.ListId, delayedAlert.Item.ID); // //if (item == null) // { // item = delayedAlert.Item; // } // } // } // catch // { // item = delayedAlert.Item; // } // } //} //catch //{ //} }
bool isValidTimerAlert(Alert alert, SPWeb web, DateTime dtWebTime) { try { if (alert.ImmediateBusinessDays.Count > 0) { if (!(Utilities.ContainsDay(alert.ImmediateBusinessDays, Convert.ToInt32(web.RegionalSettings.TimeZone.UTCToLocalTime(DateTime.UtcNow).DayOfWeek))) && (alert.BusinessStartHour <= web.RegionalSettings.TimeZone.UTCToLocalTime(DateTime.UtcNow).Hour) && (alert.BusinessendtHour > web.RegionalSettings.TimeZone.UTCToLocalTime(DateTime.UtcNow).Hour)) { return false; } } else if (!alert.ImmidiateAlways) { //if (!(Utilities.ContainsDay(alert.ImmediateBusinessDays, Convert.ToInt32(web.RegionalSettings.TimeZone.UTCToLocalTime(DateTime.UtcNow).DayOfWeek))) && (alert.BusinessStartHour <= web.RegionalSettings.TimeZone.UTCToLocalTime(DateTime.UtcNow).Hour) && (alert.BusinessendtHour > web.RegionalSettings.TimeZone.UTCToLocalTime(DateTime.UtcNow).Hour)) if (!((alert.SendHour == dtWebTime.Hour) && (((alert.SendType == SendType.Daily) && Utilities.ContainsDay(alert.DailyBusinessDays, Convert.ToInt32(dtWebTime.DayOfWeek))) || (alert.SendDay == Convert.ToInt32(dtWebTime.DayOfWeek))))) { return false; } } else { return true; } } catch { } return true; }
private void ExecuteTimerAlert(SPWeb web, SPList list, Alert alert) { try { if (web != null && list != null) { DateTime startTime = web.RegionalSettings.TimeZone.UTCToLocalTime(DateTime.UtcNow).AddMinutes(-30.0); DateTime endTime = web.RegionalSettings.TimeZone.UTCToLocalTime(DateTime.UtcNow); TimerJobHelper.CaliculateExecutionTime(ref startTime, alert, false); TimerJobHelper.CaliculateExecutionTime(ref endTime, alert, false); int num = !alert.Repeat ? 1 : (alert.RepeatCount + 1); int num2 = 1; while (num2 <= num) { //We need to get all alerts which are fall SPQuery query = new SPQuery(); query.Query = string.Format("<Where>" + "<And>" + "<Gt>" + "<FieldRef Name=\"{0}\" />" + "<Value Type=\"DateTime\" IncludeTimeValue=\"TRUE\">{1}</Value>" + "</Gt>" + "<Leq>" + "<FieldRef Name=\"{0}\" />" + "<Value Type=\"DateTime\" IncludeTimeValue=\"TRUE\">{2}</Value>" + "</Leq>" + "</And>" + "</Where>", new object[] { alert.DateColumnName, SPUtility.CreateISO8601DateTimeFromSystemDateTime(startTime), SPUtility.CreateISO8601DateTimeFromSystemDateTime(endTime) }); SPListItemCollection items = list.GetItems(query); if (items.Count > 0) { foreach (SPListItem item in items) { if (alert.IsValid(item, AlertEventType.DateColumn, null)) { Notifications mailSender = new Notifications(); //mailSender.SendAlert(alert, ChangeTypes.DateColumn, item2, null); mailSender.SendMail(alert, AlertEventType.DateColumn, item); } else { //Some conditions are not passthrough } } } else { //No items returned as part of Query } if (num2 < num) { TimerJobHelper.CaliculateExecutionTime(ref startTime, alert, true); TimerJobHelper.CaliculateExecutionTime(ref endTime, alert, true); } num2++; } } } catch { //Error occured while executing timer alerts } }
public void SendDelayedMessage2(DelayedAlert delayedAlert, Alert alert, SPListItem item) { Notifications notificationSender = new Notifications(); try { MailTemplateUsageObject mtObject = alert.GetMailTemplateUsageObjectForEventType(delayedAlert.AlertType); toAddress = notificationSender.GetRecipientEmailAddresses(alert.ToAddress, item); ccAddress = notificationSender.GetRecipientEmailAddresses(alert.CcAddress, item); fromAddress = notificationSender.GetRecipientEmailAddresses(alert.FromAdderss, item); subject = delayedAlert.Subject; body += delayedAlert.Body; smtpSName = notificationSender.GetSMTPServer(item); //SendMail(smtpSName, // toAddress, // fromAddress, // ccAddress, // subject, // body, // null); } catch { } }
internal void ExecuteDelayedMessages(Alert alert) { try { SPQuery query = new SPQuery(); query.Query = string.Format("<Where><Eq><FieldRef Name=\"{0}\" LookupId=\"TRUE\"/><Value Type=\"Lookup\">{1}</Value></Eq></Where>", "Alert", alert.Id); SPListItemCollection items = this.delayedAlertList.GetItems(query); if (items.Count > 0) { foreach (SPListItem item in items) { try { try { if (alert.SendAsSingleMessage) { DelayedAlert delayedAlert = new DelayedAlert(item); Notifications notificationSender = new Notifications(); SendDelayedMessage2(delayedAlert, alert,item); } else { DelayedAlert delayedAlert = new DelayedAlert(item); Notifications notificationSender = new Notifications(); notificationSender.SendDelayedMessage(delayedAlert, alert,item); } } catch { } continue; } finally { try { //Delete the delayed alert after completion } catch { } } } if (alert.SendAsSingleMessage) { SendMail(smtpSName, toAddress, fromAddress,ccAddress,subject,body,null); } } else { //No delayed alert found in the Delayed alert list } } catch { } }
/// <summary> /// Get Alert from its item id /// </summary> /// <param name="alertId"></param> /// <param name="mtManager"></param> /// <returns></returns> internal Alert GetAlertFromID(string alertId,MailTemplateManager mtManager) { Alert alert = null; try { SPListItem item = this.alertList.GetItemById(Convert.ToInt32(alertId)); alert = new Alert(item, mtManager); } catch { //error occured while entering } return alert; }
/// <summary> /// Get the alerts changed after last sync /// </summary> /// <param name="since"></param> /// <returns></returns> internal Dictionary<int, Alert> GetAlertsChangesSince(DateTime since) { Dictionary<int, Alert> modifiedAlerts = new Dictionary<int, Alert>(); try { if (since < alertList.Created || since < DateTime.UtcNow.AddDays(-60)) { //By default, the change log retains data for 60 days. You can configure the retention period by setting the ChangeLogRetentionPeriod property. since = alertList.Created; //since = DateTime.UtcNow.AddDays(-30); } //SPChangeToken startToken = new SPChangeToken(SPChangeCollection.CollectionScope.List, list.ID, DateTime.UtcNow); //SPChangeToken endToken = new SPChangeToken(SPChangeCollection.CollectionScope.List,list.ID, new DateTime(2008, 10, 18)); SPChangeToken token = new SPChangeToken(SPChangeCollection.CollectionScope.List, this.alertList.ID, since.ToUniversalTime()); //Dictionary<int,Alert> modifiedAlerts = new Dictionary<int,Alert>(); foreach (SPChange change in alertList.GetChanges(token)) { if (!(change is SPChangeItem)) { continue; } SPChangeItem item = change as SPChangeItem; if (!modifiedAlerts.ContainsKey(item.Id)) { Alert alert = null; //if(item.ChangeType != 3) try { alert = new Alert(alertList.GetItemById(item.Id), new MailTemplateManager(alertList.ParentWeb)); } catch { //item has been deleted } //if (alert != null && !alert.ImmidiateAlways) //{ // alert = null; //} modifiedAlerts.Add(item.Id, alert); } //Check if the alert is not immediate and all the stuff which are not eligible for timer based alerts } } catch { } return modifiedAlerts; }
/// <summary> /// Serialize Alert information into XML format /// </summary> /// <param name="alert"></param> /// <returns></returns> private static string SerializeAlertMetaData(Alert alert) { XmlDocument xmlDoc = new XmlDocument(); try { XmlNode rootNode = xmlDoc.CreateElement("AlertInformation"); xmlDoc.AppendChild(rootNode); //General Properties rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.ToAddress, alert.ToAddress)); rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.FromAddress, alert.FromAdderss)); rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.CcAddress, alert.CcAddress)); rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.BccAddress, alert.BccAddress)); // Create evaluation criteria XmlNode xEvaluation = rootNode.AppendChild(xmlDoc.CreateElement(XMLElementNames.EvaluationCriteria)); xEvaluation.Attributes.Append(XMLHelper.AppendAttribute(xmlDoc, XMLElementNames.EvaluationCustom, alert.CustomEvaluation ? "true" : "false")); if (alert.CustomEvaluation) { XmlNode xCustomData = xEvaluation.AppendChild(xmlDoc.CreateElement(XMLElementNames.CustomEvaluationData)); xCustomData.InnerXml = alert.CustomEvaluationData; } else { //Create Conditions XmlNode xConditions = xEvaluation.AppendChild(xmlDoc.CreateElement(XMLElementNames.ConditionsRootNodeName)); foreach (Condition condition in alert.Conditions) { XmlNode xCondition = xConditions.AppendChild(xmlDoc.CreateElement(XMLElementNames.ConditionChildNodeName)); xCondition.Attributes.Append(XMLHelper.AppendAttribute(xmlDoc, XMLElementNames.ConditionFieldTagName, condition.FieldName)); xCondition.Attributes.Append(XMLHelper.AppendAttribute(xmlDoc, XMLElementNames.ConditionOperatorTagName, Convert.ToString(condition.ComparisionOperator))); xCondition.Attributes.Append(XMLHelper.AppendAttribute(xmlDoc, XMLElementNames.ConditionValueTagName, condition.StrValue)); xCondition.Attributes.Append(XMLHelper.AppendAttribute(xmlDoc, XMLElementNames.ConditionsComparisionType, Convert.ToString(condition.ComparisionType))); } } //General Information rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.BlockedUsers, alert.BlockedUsers));// rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.DateColumnName, alert.DateColumnName));// rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.PType, alert.PeriodType.ToString()));// rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.PPosition, alert.PeriodPosition.ToString()));// rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.Repeat, alert.Repeat.ToString()));// rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.RInterval, alert.RepeatInterval.ToString()));// rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.RType, alert.RepeatType.ToString()));// rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.RCount, alert.RepeatCount.ToString()));// rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.CombineAlerts, alert.CombineAlerts.ToString())); // XmlNode xSendType = rootNode.AppendChild(xmlDoc.CreateElement(XMLElementNames.SendType)); xSendType.Attributes.Append(XMLHelper.AppendAttribute(xmlDoc, XMLElementNames.Type, alert.SendType.ToString())); if (alert.ImmediateDays) { XmlNode xImmediate = xSendType.AppendChild(xmlDoc.CreateElement(XMLElementNames.SendTypeDetails)); xImmediate.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.ImmediateBusinessDays, ConvertDaysToString(alert.ImmediateBusinessDays)));// xImmediate.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.ImmediateBusinessHoursStart, alert.BusinessStartHour.ToString()));// xImmediate.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.ImmediateBusinessHoursFinish, alert.BusinessendtHour.ToString()));// xImmediate.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.SendAsSingleMessage, alert.SendAsSingleMessage.ToString())); } else if (alert.SendType==SendType.Daily) { XmlNode xBusinessdays = xSendType.AppendChild(xmlDoc.CreateElement(XMLElementNames.SendTypeDetails)); xBusinessdays.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.DailyBusinessDays, ConvertDaysToString(alert.DailyBusinessDays))); xBusinessdays.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.SendHour, alert.SendHour.ToString())); xBusinessdays.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.SendAsSingleMessage, alert.SendAsSingleMessage.ToString())); } else if (alert.SendType == SendType.Weekly) { XmlNode xWeekely = xSendType.AppendChild(xmlDoc.CreateElement(XMLElementNames.SendTypeDetails)); xWeekely.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.SendDay, alert.SendDay.ToString()));// xWeekely.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.SendHour, alert.SendHour.ToString())); xWeekely.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.SendAsSingleMessage, alert.SendAsSingleMessage.ToString())); } //rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.ImmediateAlways, alert.ImmidiateAlways.ToString())); //rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.ImmediateDays, alert.ImmediateDays.ToString())); //rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.ImmediateBusinessDays, ConvertDaysToString(alert.ImmediateBusinessDays)));// //rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.ImmediateBusinessHoursStart, alert.BusinessStartHour.ToString()));// //rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.ImmediateBusinessHoursFinish, alert.BusinessendtHour.ToString()));// //rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.DailyBusinessDays, ConvertDaysToString(alert.DailyBusinessDays)));// rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.SummaryMode, alert.SummaryMode.ToString())); // //rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.SendDay, alert.SendDay.ToString()));// //rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.SendHour, alert.SendHour.ToString())); //rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.SendAsSingleMessage, alert.SendAsSingleMessage.ToString())); //if (alert.PeriodQty > 0) { rootNode.AppendChild(XMLHelper.CreateNode(xmlDoc, XMLElementNames.PQty, alert.PeriodQty.ToString())); // } } catch { } return xmlDoc.InnerXml; }
/// <summary> /// This method take alert object and create item in alert listing list /// if Alert succesfully added to Alert list it will return true /// </summary> /// <param name="item"></param> /// <returns></returns> /// internal static int AddAlert(SPWeb rootweb, Alert alert) { ///Basic information we are saving for Alert in Alert listing List //Title Single line of text //WebID Single line of text //ListID Single line of text //ItemID Single line of text //WhenToSend Choice //DetailInfo Multiple lines of text //Owner Person or Group //EventType Choice SPList settingslist = rootweb.Lists.TryGetList(ListAndFieldNames.settingsListName); int alertID = 0; if (settingslist != null) { SPListItem listItem = null; if (alert.Id != "0") { listItem = settingslist.GetItemById(Convert.ToInt32(alert.Id)); } if(listItem ==null) { listItem = settingslist.AddItem(); } listItem["Title"] = alert.Title; listItem[ListAndFieldNames.settingsListWebIdFieldName] = alert.WebId; listItem[ListAndFieldNames.settingsListListIdFieldName] = alert.ListId; listItem[ListAndFieldNames.settingsListItemIdFieldName] = alert.ItemID; //Event Type Registered string eventType = string.Empty; foreach(AlertEventType aType in alert.AlertType ) { eventType += aType + ";#"; } listItem[ListAndFieldNames.settingsListEventTypeFieldName] = eventType; //Send type listItem[ListAndFieldNames.settingsListWhenToSendFieldName] = alert.SendType; //Alert owner listItem[ListAndFieldNames.settingsListOwner] = alert.Owner; //Other information in xml format listItem[ListAndFieldNames.settingsListDetailInfoFieldName] = SerializeAlertMetaData(alert); listItem.Update(); alertID = listItem.ID; } return alertID; }
private void CreateDelayedAlert(Alert alert, AlertEventType eventType, SPItemEventProperties properties, AlertManager alertManager) { //, SPWeb web try { if (!alert.SendAsSingleMessage) { Notifications notificationSender = new Notifications(); //Need to get the Alert instances MailTemplateUsageObject mtObject = alert.GetMailTemplateUsageObjectForEventType(eventType); //string subject = mtObject.Template.Subject; //string body = mtObject.Template.Body + "<br>" + "<br>" + FinalBody; string subject = notificationSender.ReplacePlaceHolders(mtObject.Template.Subject, properties.ListItem); string body = notificationSender.ReplacePlaceHolders(mtObject.Template.Body, properties.ListItem) + "<br>" + "<br>" + FinalBody; string parentItemId = Convert.ToString(properties.ListItem.ID); DelayedAlert dAlert = new DelayedAlert(subject, body, alert.Id, parentItemId, eventType); alertManager.AddDelayedAlert(dAlert); } else { Notifications notificationSender = new Notifications(); MailTemplateUsageObject mtObject = alert.GetMailTemplateUsageObjectForEventType(eventType); string subject = properties.ListTitle; string body = notificationSender.ReplacePlaceHolders(mtObject.Template.Subject, properties.ListItem) + "<br>" + "<br>" +notificationSender.ReplacePlaceHolders(mtObject.Template.Body,properties.ListItem) + "<br>" + "<br>" + FinalBody; string parentItemId = Convert.ToString(properties.ListItem.ID); DelayedAlert dAlert = new DelayedAlert(subject, body, alert.Id, parentItemId, eventType); alertManager.AddDelayedAlert(dAlert); } } catch { } }
internal bool SendMail(Alert alert, AlertEventType eventType, SPListItem item) { //bool succes = true; //try //{ // MailTemplateUsageObject mtObject = alert.GetMailTemplateUsageObjectForEventType(eventType); // string toAddress = GetRecipientEmailAddresses(alert.ToAddress, item); // string ccAddress = GetRecipientEmailAddresses(alert.CcAddress, item); // string fromAddress = GetRecipientEmailAddresses(alert.FromAdderss, item); // string subject = ReplacePlaceHolders(mtObject.Template.Subject, item); // string body = ReplacePlaceHolders(mtObject.Template.Body, item); // string smtpSName = GetSMTPServer(item); // SendMail(smtpSName, // toAddress, // fromAddress, // ccAddress, // subject, // body, // null); //} //catch { succes = false; } //return succes; return SendMail(alert, eventType, item, string.Empty); }
internal bool SendMail(Alert alert, AlertEventType eventType, SPListItem item, string strAfterProperties) { bool succes = true; string body = string.Empty; try { MailTemplateUsageObject mtObject = alert.GetMailTemplateUsageObjectForEventType(eventType); List<Attachment> attachmentsToSend = null; if (mtObject.Template.InsertAttachments) { if (item.Attachments != null && item.Attachments.Count > 0) { if (attachmentsToSend == null) { attachmentsToSend = new List<Attachment>(); } foreach (string fileName in item.Attachments) { SPFile file = item.ParentList.ParentWeb.GetFile(item.Attachments.UrlPrefix + fileName); System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(file.OpenBinaryStream(), fileName, string.Empty); attachmentsToSend.Add(attachment); } } } string toAddress = GetRecipientEmailAddresses(alert.ToAddress, item); string ccAddress = GetRecipientEmailAddresses(alert.CcAddress, item); string fromAddress = GetRecipientEmailAddresses(alert.FromAdderss, item); string subject = ReplacePlaceHolders(mtObject.Template.Subject, item); if (mtObject.Template.InsertUpdatedFields) { body = ReplacePlaceHolders(mtObject.Template.Body, item) + "<br>" + "<br>" + strAfterProperties; } else { body = ReplacePlaceHolders(mtObject.Template.Body, item); } string smtpSName = GetSMTPServer(item); SendMail(smtpSName, toAddress, fromAddress, ccAddress, subject, body, attachmentsToSend); } catch { succes = false; } return succes; }