Как сохранить список дат в многозначном поле с помощью SSJS?

В прошлом я добавлял многозначные текстовые данные в поле, помещая значения в простой массив JavaScript. Например: doc.replaceItemValue('AlwaysAccess', ["John Doe","Bob Smith"]);

Любые рекомендации о том, как сохранить ряд дат в многозначном поле времени / даты в документе Notes?

2 ответа

Решение

TL;DR: концепция должна быть почти идентична многозначному полю String s, ваши значения даты (/ времени) должны быть действительными значениями NotesDateTime, правильно сохраненными.


Поле Notes может иметь несколько значений даты / времени; Вы можете увидеть это в форме, выбрав поле типа Дата / Время и отметив "Разрешить несколько значений".

многозначные поля даты

Вы также можете увидеть это многозначное значение на странице replaceItemValue центра знаний Domino Designer.

Чтобы сделать то же самое с NotesDominoAPI (в SSJS), нам нужно:

  1. получить дескриптор NotesItem (поле, которое я создам)
  2. создайте наши значения, чтобы поместить в поле (я создам пару, используя session.createDateTime)
  3. добавьте эти значения в java.util.Vector, который будет интерпретироваться как многозначный (вы также должны иметь возможность использовать массив SSJS, если хотите)
  4. установить значения в поле

Пример кода (я только что запустил его в событии 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). Я обновил код, чтобы отразить это. [/Редактировать]

Проверяя представление на основе форм после запуска, я даю это (свойства поля отражают многозначное поле значений даты / времени; два снимка, когда оно вышло из коробки).

первый снимок нового документа с многозначным полем DateTimeвторой снимок, показывает второе значение как отдельное значение в

По сути, я обнаружил, что мне нужно создать вектор для хранения списка дат и заполнить его объектами NotesDateTime.

var vRepeatDates:java.util.Vector = new java.util.Vector();

В моем случае мне нужно было увеличивать даты х количество раз. Итак, я использовал цикл for для добавления элементов NotesDateTime к вектору (при использовании.adjustDay(1) для увеличения дат)

И, наконец, сохраните вектор в поле, используя replaceItemValue()

doc.replaceItemValue("RepeatInstanceDates",vRepeatDates);
Другие вопросы по тегам