Возникла необходимость работать с задачами Lotus Notes из конфигурации Terrasoft по следующим пунктам:

  • Создать задачу в Lotus Notes
  • Удалить задачу из Lotus Notes
  • Получить список задач текущего пользователя

Прежде всего нужно в настройках пользователя (Файл - Настройки - Настройки пользователя) на вкладке "E-mail" указать интеграцию с Lotus Notes, перегрузить клиент, затем там же в настройках пользователя на вкладке Lotus Notes указать путь к исполняемому файлу и файлу настроек (на машине должен быть установлен Lotus Client).
Последующие операции проводились на версиях Lotus Notes 8.5 и Terrasoft 3.3.2.220.

Инициализация
Для установки соединения с Lotus Notes потребуется scr_LotusUtils, а именно функция InitializeLotus(). При этом пользователю будет выдано окошко логина, а в атрибутах коннектора появится проинициализированный экземпляр коннектора Лотуса.
Если вызвать инициализацию по второму разу, то ничего не произойдет, поскольку в скрипте библиотеки прописана проверка на этот случай.
Итак, инициализация сводится к одной строчке

InitializeLotus();

Создание записи в Lotus Notes
Вначале получаем почтовую базу Лотуса

var Lotus = Connector.Attributes('Lotus');
var MailDB = Lotus.MailDB;

Далее создаем в ней новый документ
var doc = MailDB.CreateDocument();

В календаре LotusNotes можно создавать записи разных типов. То, какой тип будет создан, определяется параметром Form
Для создания записей с типом "встреча" или "собрание" этот параметр нужно заполнить значением 'Appointment':
doc.AppendItemValue('Form', 'Appointment');

Для конкретно задач нужно использовать значение 'Task'.
Атрибутов у создаваемого документа Лотуса есть довольно много, но минимальный необходимый набор следующий:
doc.AppendItemValue('Chair', Lotus.Session.UserName); //устанавливаем текущего лользователя Лотуса председателем записи
doc.AppendItemValue('Subject', Dataset.ValAsStr('Title')); //заголовок записи
// для записи с типом "собрание"
//doc.AppendItemValue('AppointmentType','3');
// для записи с типом "встреча"
doc.AppendItemValue('AppointmentType','0');
doc.AppendItemValue('StartDateTime', Dataset.ValAsDateTime('StartDate')); // дата/время начала
doc.AppendItemValue('EndDateTime', Dataset.ValAsDateTime('DueDate')); // дата/время окончания
doc.AppendItemValue('CalendarDateTime', Dataset.ValAsDateTime('StartDate')); // заполняем для корректного отображения в календаре Лотуса

После этого осталось только сохранить созданную запись в базу:
doc.Save(true,true);

При создании задачи (doc.AppendItemValue('Form', 'Task');) нужно заполнять несколько другие атрибуты создаваемого документа:

doc = MailDB.CreateDocument();
doc.AppendItemValue('Form','Task');
doc.AppendItemValue('Chair',Lotus.Session.UserName);
doc.AppendItemValue('Subject','your subject here');
doc.AppendItemValue('StartDate',Today.getVarDate());
doc.AppendItemValue('DueDateTime',DateToStr(EndTime))
doc.AppendItemValue('CalendarDateTime',Today.getVarDate());
doc.Save(true,true);

Очень полезно при создании записи сохранить ее уникальный номер в Лотусе. Этот номер можно впоследствии использовать для быстрого нахождения записи.

var UNID = doc.UniversalID;
Номер имеет строковый тип.

Удаление записи Lotus Notes
Процесс удаления намного короче (при условии, что сохранен уникальный номер UNID созданной ранее записи):

var doc = MailDB.GetDocumentByUNID(UNID);
if (doc.Remove(false)) {
   ShowInformationDialog('Задача успешно удалена из календаря Lotus Notes');
} else {
   ShowInformationDialog('Невозможно удалить задачу из Lotus Notes');
}

Получение всех записей текущего пользователя
Список записей будем получать из представления календаря Лотуса:

var Calendar = MailDB.GetView("($Calendar)");

Для удобства получения из записи атрибута будем использовать дополниетльную функцию
function GetItem(Task, ItemName) {
   return Task.GetItemValue(ItemName).getItem(0);
}

Простой вариант - перебор всех записей, и по имеющимся атрибутам определение нужной.
var Task = Calendar.GetFirstDocument();
while (Task != null) {
   Form = GetItem(Task, 'Form');
   StartDateTime = GetItem(Task, 'StartDateTime');
   EndDateTime = GetItem(Task, 'EndDateTime');
   Owner = GetItem(Task, 'Chair');
   Subject = GetItem(Task, 'Subject');
   AppointmentType = GetItem(Task, 'AppointmentType');
   UNID = Task.UniversalID;
   // если нужно - можно получать больше атрибутов или другие

   // здесь необходимые действия ...

   Task = Calendar.GetNextDocument(Task);
}

Замечания и конструктивная критика приветствуются.

Нравится

Поделиться

0 комментариев
Показать все комментарии