Назначьте массив datetime многозначному полю даты в форме Domino

Я получаю доступ к документу из представления, читаю поле datetime, вычисляю количество дней между двумя значениями даты / времени, которые попадают в четыре категории. В каждой категории есть цикл for, который добавляет количество значений datetime в массив вариантов. Количество записей в массиве составляет от семи до 35. После цикла мне нравится назначать значения массива полю даты и времени в форме и сохранять документ. Я использовал следующие заметки:

Dim nitem as Notesitem  
Set nitem = doc.ReplaceItemValue("Datefield", dtArray)  

Это не сработало. Я использовал doc.ReplaceItemValue "Datefield, dtArray этот тоже не работал. Поле остается пустым после запуска агента. Я объявил переменную и присвоил ей массив, а затем присвоил переменную полю в форме:"

Dim var1 as variant
var1 = dtArray
doc.datefield = Var1

По-прежнему не удается увидеть значения массива, присвоенные полю в документе

Вот основной цикл

Redim dateArray(0)
For i=0 to NumberofDays -1
    set notesitem = dtitem.DateTimeValue
    call notesitem.AdjustDay(i)
    set dateArray(i) = notesitem
    Redim preserve dateArray(i+1)
Next


doc.replaceitemvalue "Datefield", dateArray

call doc.save(false, true)
erase dateArray

Почему после запуска агента поля даты в документах остаются пустыми? Чего не хватает? Как мне изменить это, чтобы получить результат. Можно ли добавить делитель в оператор присваивания следующим образом:

Спасибо


person Al Soltan    schedule 05.02.2011    source источник


Ответы (3)


Когда вы играете с классами NotesItem и NotesDateTime, я думаю, вы получите больше удовольствия от использования свойства NotesItem DateTimeValue. Это чтение / запись, возвращающее (или ожидающее) объект NotesDateTime.

Например, если у вас есть NotesDateTime экземпляр с именем «dt», вы должны записать его обратно в поле с именем «YourDT»:

Dim itDT as NotesItem
Dim dt as New NotesDateTime
' Instantiate itDT and dt
...
Set itDT.DateTimeValue = dt

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

person Ben    schedule 07.02.2011

Самый простой способ назначить поле dateTime из массива:

SimpleDateFormat smdf = new SimpleDateFormat();
smdf.applyPattern("dd.MM.yyyy");
Vector dates = new Vector();
for (Date dt: dateArray) {
       dates.addElement(smdf.formatter(dt));
}; 
doc.replaceItemValue("dateField", dates);
person vexan    schedule 05.08.2012

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

Ниже приведены основные сведения о том, что вы пытаетесь сделать. Поля DateTime немного сложны, но вы можете установить их, используя вариантные массивы.

    Dim i As Integer
    Dim vDateArr() As Variant
    Dim itDate As notesItem
    ' setup date array.
    ' .........
    ' .........
    ' Now get the date field to be updated from the document
    Set itDate = doc.GetFirstItem("fieldName")
    ' loop through the array of values and make sure they're date time
    For i=0 To numberOfDays - 1
       ' ensure that the array has date type values. V_DATE is a constant defined 
       ' in LSConst.lss. V_DATE = 7, so you can still write the following line as
       ' If Datatype(vDateArr(i)) <> 7 then
       If Datatype(vDateArr(i)) <> V_DATE Then
           vDate = Cdat(vDateArr(i))
       End If
       vDateArr(i) = vDate
    Next
    ' assign the array back onto the itDate field. Even if the field is not 
    ' already a dateTime type. Assigning the array this way will make it so.
    itDate.Values = vDateArr
    Call doc.Save(True, False)

Я считаю, что в этом случае лучше всего работать с примитивами, а не с объектами. Здесь происходит то, что я гарантирую, что значения даты хранятся как значение dateTime. Затем присваиваем массив полю и затем сохраняем документ. Есть несколько способов сделать это, но я предпочитаю этот способ, когда вы хотите вставить массив определенного типа в поле. Если вы можете опубликовать исходный код, его будет легче исправить.

person angryITguy    schedule 09.02.2011