Возникла необходимость работать с задачами 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()
. При этом пользователю будет выдано окошко логина, а в атрибутах коннектора появится проинициализированный экземпляр коннектора Лотуса.
Если вызвать инициализацию по второму разу, то ничего не произойдет, поскольку в скрипте библиотеки прописана проверка на этот случай.
Итак, инициализация сводится к одной строчке
Создание записи в 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.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);
}
Замечания и конструктивная критика приветствуются.