Lotus notes 将datetime数组分配给Domino表单上的多值日期字段

Lotus notes 将datetime数组分配给Domino表单上的多值日期字段,lotus-notes,lotus-domino,lotusscript,Lotus Notes,Lotus Domino,Lotusscript,我从视图访问文档,读取datetime字段,计算两个日期/时间值之间的天数,这两个值分为四类。在每个类别中,都有一个for循环,它将datetime值的数量添加到变量数组中。数组项在7到35之间。循环之后,我想将数组值分配给表单上的日期时间字段并保存文档。我使用的注释项目如下: Dim nitem as Notesitem Set nitem = doc.ReplaceItemValue("Datefield", dtArray) 它不起作用。我使用了doc.ReplaceItemVa

我从视图访问文档,读取datetime字段,计算两个日期/时间值之间的天数,这两个值分为四类。在每个类别中,都有一个for循环,它将datetime值的数量添加到变量数组中。数组项在7到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
为什么在代理运行后,文档中的日期字段为空?缺少什么?我应该如何更改此字段以获得结果。是否可以按如下方式向分配语句中添加删除器:


谢谢你

当你在玩
NotesItem
NotesDateTime
类时,我想你使用
NotesItem
DateTimeValue
属性会更开心。这是读/写,并返回(或期望)一个
NotesDateTime
对象

例如,如果您有一个名为“dt”的
NotesDateTime
实例,那么您将如何将其写回名为“YourDT”的字段:


因此,您应该能够获取
NotesDateTime
对象数组,并使用此方法将其写回相关字段。

这对于您来说是一个棘手的问题,因为您没有提供原始源代码。您尝试使用方法的方式有点奇怪

下面是您尝试执行的基本操作。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)
Dim i作为整数
Dim vDateArr()作为变量
将itDate设置为notesItem
'设置日期数组。
' .........
' .........
'现在从文档中获取要更新的日期字段
设置itDate=doc.GetFirstItem(“字段名”)
'循环遍历值数组并确保它们是日期时间
对于i=0到numberOfDays-1
'确保数组具有日期类型值。V_date是定义的常量
'在LSConst.lss.V_DATE=7中,因此您仍然可以将以下行作为
'如果数据类型(vDateArr(i))为7,则
如果数据类型(vDateArr(i))为V_日期,则
vDate=Cdat(vDateArr(i))
如果结束
vDateArr(i)=vDate
下一个
'将数组分配回itDate字段。即使该字段不是
'已经是dateTime类型。通过这种方式分配数组将使其成为dateTime类型。
itDate.Values=vDateArr
调用doc.Save(真、假)

在这种情况下,我发现最好使用原语,而不是对象。这里发生的事情是,我确保日期值存储为日期时间值。然后将数组分配给字段,然后保存文档。有多种方法可以做到这一点,但当您要推送特定类型的数组时,这是我首选的方法pe到字段中。如果可以发布原始代码,则更容易更正代码。

从数组分配日期时间字段的最简单方法是:

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);
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);