Присвойте массив datetime многозначному полю даты в форме Domino - PullRequest
1 голос
/ 05 февраля 2011

Я обращаюсь к документу из представления, читаю поле даты и времени, вычисляю количество дней между двумя значениями даты / времени, которые подразделяются на четыре категории.В каждой категории есть цикл 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

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

Спасибо

Ответы [ 3 ]

1 голос
/ 05 августа 2012

Самый простой способ назначить поле 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);
1 голос
/ 07 февраля 2011

Когда вы играете с 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 объектов и записать его обратно в соответствующее поле, используя этот подход.

0 голосов
/ 09 февраля 2011

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

Ниже приведено базовое описание того, что вы пытаетесь сделать. Поля 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. Затем назначьте массив полю и затем сохраните документ. Есть несколько способов сделать это, но это мой предпочтительный способ, когда вы хотите вставить массив определенного типа в поле. Если вы можете опубликовать исходный код, вам будет проще исправить его.

...