У меня есть библиотека документов под названием «Документы в производстве». Я написал задание таймера для отправки электронных писем на основе столбцов в библиотеке.
В среде dev все было хорошо, но задание таймера в prod дает мне исключения. Любые идеи?
Entering monitored scope (Timer Job Corporate Policies - Reminder Emails)
Метод Execute определения задания CorporatePolicyReminders.DailySchedule (ID 3586f4d2-1bc1-4770-b5b8-4c2c578ee8d5) вызвал исключение. Дополнительная информация приведена ниже. В экземпляре объекта не задана ссылка на объект.
Трассировка стека исключений:
в CorporatePolicyReminders.CorporatePolicyReminders.SendCorporateReminder(SPWeb web)
в CorporatePolicyReminders.DailySchedule.Execute(Guid contentDbId)
в Microsoft.SharePoint.Administration.SPTimerJobInvokeInternal.Invoke(SPJobDefinition jd, Guid targetInstanceId, Логическое значение isTimerService, Int32 и результат)
Выход из контролируемой области (корпоративные политики задания таймера — электронные письма с напоминаниями). Время выполнения = 364,288198639771
Метод SendCorporateReminers
public void SendCorporateReminder(SPWeb web)
{
SPList lstComplaint = Helper.GetList(web, "Documents", Helper.ListType.Library);
if (lstComplaint != null)
{
string query = "<Where><Eq><FieldRef Name='DocFormat' /><Value Type='Choice'>Policy</Value></Eq></Where>";
SPListItemCollection colRecords = Helper.ExecuteQueryRecursive(lstComplaint, query, null, 2000);
if (colRecords != null && colRecords.Count > 0)
{
foreach (SPListItem item in colRecords)
{
DateTime Expires = Helper.GetSPFieldDateTimeValue(item, "Expires");
String Title = Helper.GetSPFieldTextValue(item, "Title");
SPFieldUserValueCollection userResp = Helper.GetUsers(item, "Contact");
TimeSpan totaldays = DateTime.Now.Date - Expires.Date;
Int32 days = totaldays.Days;
String emailtemplatekeyA = "AEmail" + days.ToString();
String emailtemplatekeyB = "BEmail" + days.ToString();
String respToEmail = String.Empty;
if (userResp != null && userResp.Count > 0)
{
foreach (SPFieldUserValue user in userResp)
{
if (!string.IsNullOrEmpty(respToEmail))
respToEmail += ",";
respToEmail += user.User.Email;
}
}
HandleEmails handleEmail = new HandleEmails();
handleEmail.AddValueToPlaceholder(HandleEmails.EmailPlaceHolders.SendingTypeValue.EmailRecipient, PlaceHolder.USERRESP.ToString(), respToEmail);
handleEmail.AddValueToPlaceholder(HandleEmails.EmailPlaceHolders.SendingTypeValue.OTHER, PlaceHolder.TITLE.ToString(), Title);
handleEmail.AddValueToPlaceholder(HandleEmails.EmailPlaceHolders.SendingTypeValue.OTHER, PlaceHolder.EXPDT.ToString(), Expires.ToShortDateString());
handleEmail.AddValueToPlaceholder(HandleEmails.EmailPlaceHolders.SendingTypeValue.OTHER, PlaceHolder.ID.ToString(), item.ID.ToString());
handleEmail.SendMail(web, emailtemplatekeyA);
handleEmail = new HandleEmails();
handleEmail.AddValueToPlaceholder(HandleEmails.EmailPlaceHolders.SendingTypeValue.EmailRecipient, PlaceHolder.USERRESP.ToString(), respToEmail);
handleEmail.AddValueToPlaceholder(HandleEmails.EmailPlaceHolders.SendingTypeValue.OTHER, PlaceHolder.TITLE.ToString(), Title);
handleEmail.AddValueToPlaceholder(HandleEmails.EmailPlaceHolders.SendingTypeValue.OTHER, PlaceHolder.EXPDT.ToString(), Expires.ToShortDateString());
handleEmail.AddValueToPlaceholder(HandleEmails.EmailPlaceHolders.SendingTypeValue.OTHER, PlaceHolder.ID.ToString(), item.ID.ToString());
handleEmail.SendMail(web, emailtemplatekeyB);
}
}
}
}`