Ulteam.SharePoint.Client

Notifications Class

Namespace: Ulteam.SharePoint.Client

Description

Класс по работе с уведомлениями. Для стабильной работы методов класса лучше использовать списки, созданные с помощью ListInitialization класса.

Constructors

Name Description
Notifications(ClientContext Context, List<DataItem> DataItems, List NotificationList, List NotificationSettingsList, List NotificationUserList, List ReminderNotificationList, List ReminderSettingsList) Инициирование объекта для отправки уведомлений.
Context: SharePoint site collection context.
DataItems: Список объектов с данными, необходимыми для формирования уведомления.
NotificationList: Список уведомлений.
NotificationSettingsList: Список настроек уведомлений.
NotificationUserList: Список для добавления пользователей в уведомления.
ReminderNotificationList: Список Reminder’ов.
ReminderSettingsList: Список настроек Reminder’ов.
Notifications(ClientContext Context, List<DataItem> DataItems, String NotificationListUrl, String NotificationSettingsListUrl, String NotificationUserListUrl, String ReminderNotificationListUrl, String ReminderSettingsListUrl) Инициирование объекта для отправки уведомлений.
Context: SharePoint site collection context.
DataItems: Список объектов с данными, необходимыми для формирования уведомления.
NotificationListUrl: Url списка уведомлений. По умолчанию: ‘Lists/NotificationList’.
NotificationSettingsListUrl: Url списка настроек уведомлений. По умолчанию: ‘Lists/NotificationSettings’.
NotificationUserListUrl: Url списка для добавления пользователей в уведомления. По умолчанию: ‘Lists/NotificationUserList’.
ReminderNotificationListUrl: Url списка Reminder’ов.
ReminderSettingsListUrl: Url списка настроек Reminder’ов.

Methods

Name Description
CreateByProcessStep(ListItem ProcessStep, DateTime ReminderStartDate, String ItemType, String ItemId, String StepNumber, Boolean AddIfCreated) Создание уведомления по настройке шага процесса (элемент списка ProcessStepList).
ProcessStep: Шаг процесса (элемент списка ProcessStepList).
ReminderStartDate: Дата первого Reminder’а. В случае обычного уведомления значение ни на что не влияет.
ItemType: Тип элемента списка.
ItemId: Id элемента списка.
StepNumber: Id шага процесса уведомления.
AddIfCreated: Укажите, надо ли добавлять уведомление, если уже добавлено уведомление с такими же ItemType, ItemId, StepNumber и NotificationSetting. Значение по умолчанию: false.
CreateBySetting(NotificationSetting Setting, DateTime ReminderStartDate, String ItemType, String ItemId, String StepNumber, Boolean AddIfCreated) Создание уведомления по настройке уведомления (элементу из NotificationSettings).
Setting: Настройка уведомления (элемент из NotificationSettings).
ReminderStartDate: Дата первого Reminder’а. В случае обычного уведомления значение ни на что не влияет.
ItemType: Тип элемента списка.
ItemId: Id элемента списка.
StepNumber: Id шага процесса уведомления.
AddIfCreated: Укажите, надо ли добавлять уведомление, если уже добавлено уведомление с такими же ItemType, ItemId, StepNumber и NotificationSetting. Значение по умолчанию: false.
CreateByTitle(String NotificationTitle, DateTime ReminderStartDate, String ItemType, String ItemId, String StepNumber, Boolean AddIfCreated) Создание уведомления по названию в списке NotificationSettings.
NotificationTitle: Название уведомления (поле Title в NotificationSettings).
ReminderStartDate: Дата первого Reminder’а. В случае обычного уведомления значение ни на что не влияет.
ItemType: Тип элемента списка.
ItemId: Id элемента списка.
StepNumber: Id шага процесса уведомления.
AddIfCreated: Укажите, надо ли добавлять уведомление, если уже добавлено уведомление с такими же ItemType, ItemId, StepNumber и NotificationSetting. Значение по умолчанию: false.
DefaultParseTemplate(String Template) Парсинг шаблона по тегам Filled, Field, FormUrl, History.
Template: Шаблон для парсинга.
EndReminders(String ItemType) Завершение Reminder’ов, отфильтрованных по ItemType.
ItemType: Тип элемента списка.
EndReminders(String ItemType, String ItemId) Завершение Reminder’ов, отфильтрованных по ItemType, ItemId.
ItemType: Тип элемента списка.
ItemId: Id элемента списка.
EndReminders(String ItemType, String ItemId, String StepNumber) Завершение Reminder’ов, отфильтрованных по ItemType, ItemId, StepNumber.
ItemType: Тип элемента списка.
ItemId: Id элемента списка.
StepNumber: Id шага процесса уведомления.
GetNotificationUsers(FieldLookupValue[] LookupValues) Получение пользователей для уведомления через lookupValues из NotificationUserList.
LookupValues: Lookup’ы к списку NotificationUserList.
SendNotifications() Отправка уведомлений на почту по элементам списка NotificationList с Sent = false.
UpdateReminders(DateTime CheckDate) Обновление всех Reminder’ов по условию (End = 0 AND NotificationDate <= CheckDate). Если Reminder (элемент списка ReminderNotificationList) подходит под эти условия, то создается элемент в NotificationList и к Reminder.NotificationDate добавляется ReminderSendPeriod из списка NotificationSettings.
CheckDate: Дата, с которой необходимо сравнить NotificationDate.

Samples


/// <summary>
/// Создание уведомлений для шага процесса.
/// Для стабильной работы методов класса лучше использовать списки, созданные с помощью ListInitialization класса.
/// </summary>
public void CreateNotificationByProcessStep()
{
    ClientContext context = TestSettings.Context;
    
    // список настроек шагов процесса
    List processList = context.GetListByTitle("ProcessStepList");

    // шаг процесса
    ListItem processStep = processList.GetItemById(1);

    context.Load(processStep);
    context.ExecuteQuery();

    // Данные, по которым формируется уведомление.
    List<DataItem> dataItems = GetDataItems();

    Notifications notifications = new Notifications(context, dataItems);

    // Формирование уведомлений и добавление обычных уведомлений в NotificationList 
    // и reminder'ов в ReminderNotificationList
    bool created = notifications.CreateByProcessStep(
        processStep,

        // Дата первой отправки Reminder'а. Если простое уведомление, то дата ни на что не влияет
        DateTime.Now,

        // ItemType в NotificationList 
        "ProcessStepTest",

        // ItemId в NotificationList
        "100",

        // StepNumber в NotificationList
        "1000",

        // Если false, то новый элемент в NotificationList добавляется только в случае, 
        // если не существует элемента с такими же ItemType, ItemId, StepNumber
        false 
    );

    // добавление Reminder'ов, для которых NotificationDate из ReminderNotificationList меньше DateTime.Now
    notifications.UpdateReminders(DateTime.Now);

    // отправка уведомлений из NotificationList на почту (без процесса).
    notifications.SendNotifications();
}

/// <summary>
/// Создание уведомления по элементу из списка NotificationSettings.
/// Для стабильной работы методов класса лучше использовать списки, созданные с помощью ListInitialization класса.
/// </summary>
public void CreateNotificationBySetting()
{
    ClientContext context = TestSettings.Context;

    // Данные, по которым формируется уведомление.
    List<DataItem> dataItems = GetDataItems();

    Notifications notifications = new Notifications(context, dataItems);

    // получение настройки уведомления
    NotificationSetting setting = new NotificationSetting(context, notifications.NotificationSettingsList);
    setting.GetByTitle("NotificationTest");

    // Формирование уведомления и добавление  в NotificationList 
    // или в ReminderNotificationList
    bool created = notifications.CreateBySetting(
        setting,

        // Дата первой отправки Reminder'а. Если простое уведомление, то дата ни на что не влияет
        DateTime.Now,

        // ItemType в NotificationList 
        "ProcessStepTest",

        // ItemId в NotificationList
        "100",

        // StepNumber в NotificationList
        "1000",

        // Если false, то новый элемент в NotificationList добавляется только в случае, 
        // если не существует элемента с такими же ItemType, ItemId, StepNumber
        false
    );

    // добавление Reminder'ов, для которых NotificationDate из ReminderNotificationList меньше DateTime.Now
    notifications.UpdateReminders(DateTime.Now);

    // отправка уведомлений из NotificationList на почту (без процесса).
    notifications.SendNotifications();
}

/// <summary>
/// Создание уведомления по названию элемента из списка NotificationSettings.
/// Для стабильной работы методов класса лучше использовать списки, созданные с помощью ListInitialization класса.
/// </summary>
public void CreateNotificationBySettingTitle()
{
    ClientContext context = TestSettings.Context;

    // Данные, по которым формируется уведомление.
    List<DataItem> dataItems = GetDataItems();

    Notifications notifications = new Notifications(context, dataItems);

    // Формирование уведомления и добавление  в NotificationList 
    // или в ReminderNotificationList
    bool created = notifications.CreateByTitle(
        "NotificationTest",

        // Дата первой отправки Reminder'а. Если простое уведомление, то дата ни на что не влияет
        DateTime.Now,

        // ItemType в NotificationList 
        "ProcessStepTest",

        // ItemId в NotificationList
        "100",

        // StepNumber в NotificationList
        "1000",

        // Если false, то новый элемент в NotificationList добавляется только в случае, 
        // если не существует элемента с такими же ItemType, ItemId, StepNumber
        false
    );

    // добавление Reminder'ов, для которых NotificationDate из ReminderNotificationList меньше DateTime.Now
    notifications.UpdateReminders(DateTime.Now);

    // отправка уведомлений из NotificationList на почту (без процесса).
    notifications.SendNotifications();
}

/// <summary>
/// Формирование данных, по которым формируются уведомления.
/// </summary>
private List<DataItem> GetDataItems()
{
    // шаг в HTML истории процесса
    XmlNode stepNode = GetStepNode();

    // основной список, например, с заявками
    ListItem mainItem = TestSettings.NotificationTestList.GetItemById(1);

    // дополнительный список, например, с задачи процесса
    ListItem secondItem = TestSettings.NotificationTestList.GetItemById(2);

    TestSettings.Context.Load(mainItem);
    TestSettings.Context.Load(secondItem);
    TestSettings.Context.ExecuteQuery();

    return new List<DataItem>
    {
        // из mainItem будут подставляться значения в теги с type="Main"
        // например, <Field type='Main' name='Title' />
        new DataItem("Main", mainItem),

        // из secondItem будут подставляться значения в теги с type="Task"
        // например, <Field type='Task' name='Title' />
        new DataItem("Task", secondItem),

        // из stepNode будут подставляться значения в теги вида:
        // <History type='MainProcess' name='history-approver' />
        // Где 'history-approver' - класс в stepNode.
        // Подставится значение stepNode.innerText
        new DataItem("MainProcess", stepNode)
    };
}

/// <summary>
/// Шаг процесса
/// </summary>
private XmlNode GetStepNode()
{
    string userIdList = $"{MockData.UserId1},{MockData.UserId3},{MockData.UserId3}";
    string history = string.Format(@"
        <div class='node' useridlist='{0}'>
            <div>
                <span class='history-approver'>History User Name</span>
            </div>
        </div>", userIdList);
    XmlDocument document = XmlHelper.GetXmlDocument(history);

    return document.SelectSingleNode("//div[@class='node']");
}

Updated: