Повторяющиеся записи календаря в Lotus Notes

Кто-нибудь знает, можно ли изменить один из документов в серии повторяющихся встреч? Я изменил один из них с помощью С# API, и он изменил все документы в серии (например, 5 документов в серии будут изменены во время одного вызова save())

var document = view.GetFirstDocument();
if (document != null)
{
    do
    {
        var item = document.GetFirstItem("Repeats");
        var repeat = tmpItem != null ? Convert.ToInt32(tmpItem.Text) : 0;

        if(repeats)
        {
            document.ReplaceItemValue("myVal", "1"); //it change all my 5 docs after first save
            document.Save(true, false);
        }
        document = view.GetNextDocument(document);
    }
    while (document != null);
}

person Marcin Marek    schedule 21.10.2011    source источник


Ответы (3)


Из "Объяснение календаря и планирования Lotus Notes! Часть 1":

документ экземпляра повторяющегося собрания может быть разделен на несколько документов, если председатель переназначит некоторые экземпляры. Рассмотрим повторяющееся собрание, которое повторяется раз в неделю в течение пяти недель. Если председатель опережает первый и второй экземпляр на час, единый ответный документ для всех пяти экземпляров теперь разделяется на два ответных документа: один для первого и второго экземпляров и еще один для остальных экземпляров.

И из "IBM Lotus Notes и Domino Calendaring & Scheduling Schema":

Повторяющиеся события запланированы более чем один раз во времени и представлены как минимум двумя примечаниями в отношениях родитель-потомок. Родительская заметка идентифицируется своим элементом ApptUNID (который является ее универсальным идентификатором заметки), а дочерняя заметка идентифицируется тем же ApptUNID, что и родительская и исходная RepeatInstanceDates. Элементы ApptUNID и RepeatInstanceDates образуют ключевую пару значений, которая однозначно идентифицирует конкретный повторяющийся экземпляр. Более подробная информация содержится в разделе «Повторяющаяся модель» этой статьи.

Итак, что вам в основном нужно сделать, это найти дочерний документ события ($CSFlags содержит «i» и $Ref родительский UNID) и создать новый (второй) дочерний документ для измененной даты/времени, удалив эту конкретную дату/ запись времени из существующего дочернего документа IIRC. В таких случаях я всегда делаю это вручную в клиенте Notes, а затем сравниваю поля, созданные таким образом, с теми, которые я создал с помощью своего кода.

person leyrer    schedule 22.10.2011

В коде вы перебираете представление и изменяете все документы, доступные в представлении. Вам нужно выбрать документ, который вы хотите изменить.

РЕДАКТИРОВАТЬ: повторяющаяся запись — это документ, отображаемый несколько раз в представлении. Поэтому вполне возможно, что вы обновляете один и тот же документ несколько раз. Сравните UniversalID всех документов в серии, чтобы быть уверенным.

Если вы измените одну из записей с помощью Lotus Client, он спросит, хотите ли вы обновить все, если вы выберете «только этот экземпляр», запись будет сохранена в новом документе. Таким образом, повторяющаяся запись может быть отдельным документом или комбинацией документов.

person Jasper Duizendstra    schedule 21.10.2011
comment
Извините моя ошибка. Перебираю все документы в поле зрения - правильно. Но при изменении первого документа в серии все документы изменяются до того, как я получу эти документы. Я имею в виду во время одного вызова ReplaceItemValue(myVal, 1); С# API изменил всю серию - person Marcin Marek; 21.10.2011
comment
Это действительно не имеет смысла. Замена элемента в одном документе не повлияет на другие документы, и я не могу придумать, как вы могли бы активировать агент или другой инициирующий код, который будет изменять эти другие документы. Просто чтобы быть уверенным, я бы посмотрел, что произойдет, если вы уберете do-while из кода. - person Ken Pespisa; 21.10.2011
comment
хорошо, вот код без do/while string id = "974E390DCF9D14F5C125793000468DA4"; ///first doc in serie var d = UserDb.GetDocumentByUNID(id); d.ReplaceItemValue("mmRepeat", ""); d.Save(true, true, true); - person Marcin Marek; 21.10.2011
comment
C# API снова изменил всю серию - person Marcin Marek; 21.10.2011
comment
Вы уверены, что это не тот документ? Повторяющаяся запись календаря на самом деле является одним документом, показанным несколько раз. Только если вы измените время записи, она будет сохранена как отдельный документ. - person Jasper Duizendstra; 21.10.2011

Лучший и единственный совет, который я могу вам дать, — это изучить код LotusScript в почтовом шаблоне и посмотреть, что именно он делает, когда пользователь изменяет одну запись в повторяющейся встрече. Lotus не задокументировал его каким-либо другим образом, но весь код шаблона является открытым исходным кодом, и он является высшим авторитетом. Ваша задача состоит в том, чтобы быть совместимым с тем, что они делают в шаблоне, иначе весьма вероятно, что ваш код будет иметь побочные эффекты, которые вызовут проблемы у пользователей, которые попытаются использовать клиент Notes для выполнения дополнительных действий в серии событий календаря после ваш код запустился.

person Richard Schwartz    schedule 21.10.2011
comment
Извините, но на самом деле есть очень хорошая документация от IBM, IBM Lotus Notes и Domino Calendaring & Scheduling Schema: lotus.com/ldd/ddwiki.nsf/dx/cs_schema_toc - person leyrer; 22.10.2011
comment
А, тогда хорошо. Никогда не был доступен, когда я хотел, но это было довольно давно. Спасибо. - person Richard Schwartz; 24.10.2011