Как сохранить список дат в многозначном поле с помощью SSJS?
В прошлом я добавлял многозначные текстовые данные в поле, помещая значения в простой массив JavaScript. Например: doc.replaceItemValue('AlwaysAccess', ["John Doe","Bob Smith"]);
Любые рекомендации о том, как сохранить ряд дат в многозначном поле времени / даты в документе Notes?
2 ответа
TL;DR: концепция должна быть почти идентична многозначному полю String s, ваши значения даты (/ времени) должны быть действительными значениями NotesDateTime, правильно сохраненными.
Поле Notes может иметь несколько значений даты / времени; Вы можете увидеть это в форме, выбрав поле типа Дата / Время и отметив "Разрешить несколько значений".
Вы также можете увидеть это многозначное значение на странице replaceItemValue центра знаний Domino Designer.
Чтобы сделать то же самое с NotesDominoAPI (в SSJS), нам нужно:
- получить дескриптор NotesItem (поле, которое я создам)
- создайте наши значения, чтобы поместить в поле (я создам пару, используя session.createDateTime)
- добавьте эти значения в java.util.Vector, который будет интерпретироваться как многозначный (вы также должны иметь возможность использовать массив SSJS, если хотите)
- установить значения в поле
Пример кода (я только что запустил его в событии onClick кнопки xp:):
//create a new doc
var tmpDoc:NotesDocument = database.createDocument();
//give it a Form
tmpDoc.replaceItemValue("Form","MultiDateFieldForm");
//create a NotesItem
var itm:NotesItem = tmpDoc.replaceItemValue("DateFieldName",new java.util.Vector());
//create the Vector, our multi-value container
var vec:java.util.Vector = new java.util.Vector();
//create a couple NotesDateTime values to store
var first = session.createDateTime(new Date());
vec.add(first);
var second = session.createDateTime("Tomorrow");
vec.add(second);
//save the values to the item
itm.setValues(vec);
//save
tmpDoc.save();
//recycle!
first.recycle();
second.recylce();
itm.recycle();
tmpDoc.recylce();
[Редактировать] Как отмечает Франтишек Коссут в комментариях, обязательно переработайте свои объекты API NotesDomino (особенно объекты Date/Time). Я обновил код, чтобы отразить это. [/Редактировать]
Проверяя представление на основе форм после запуска, я даю это (свойства поля отражают многозначное поле значений даты / времени; два снимка, когда оно вышло из коробки).
По сути, я обнаружил, что мне нужно создать вектор для хранения списка дат и заполнить его объектами NotesDateTime.
var vRepeatDates:java.util.Vector = new java.util.Vector();
В моем случае мне нужно было увеличивать даты х количество раз. Итак, я использовал цикл for для добавления элементов NotesDateTime к вектору (при использовании.adjustDay(1) для увеличения дат)
И, наконец, сохраните вектор в поле, используя replaceItemValue()
doc.replaceItemValue("RepeatInstanceDates",vRepeatDates);