【问题标题】:Assign a datetime array to a multivalue date field on the Domino form将日期时间数组分配给 Domino 表单上的多值日期字段
【发布时间】:2011-02-05 02:18:57
【问题描述】:

我正在从视图访问文档,读取日期时间字段,找出两个日期/时间值之间的天数,这些值分为四类。在每个类别中都有一个 for 循环,它将日期时间值的数量添加到变量数组中。数组条目介于 7 到 35 之间。在循环之后,我喜欢将数组值分配给表单上的日期时间字段并保存文档。我使用的 Notes 项目如下:

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

为什么代理运行后文档中的datefield是空白的?什么不见​​了?我应该如何改变它以获得结果。是否可以在赋值语句中添加分隔符,如下所示:

谢谢

【问题讨论】:

    标签: lotus-notes lotus-domino lotusscript


    【解决方案1】:

    当你在玩NotesItemNotesDateTime 类时,我认为使用NotesItem DateTimeValue 属性会让你更快乐。这是读/写,并返回(或期望)NotesDateTime 对象。

    例如,如果您有一个名为“dt”的NotesDateTime 实例,您可以将它写回到名为“YourDT”的字段中:

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

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

    【讨论】:

      【解决方案2】:

      从数组中分配 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);
      

      【讨论】:

        【解决方案3】:

        这很难为您排除故障,因为您没有提供原始源代码。您尝试使用方法的方式有点奇怪。

        以下是您尝试做的基本操作。 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 值。然后将数组分配给字段,然后保存文档。有很多方法可以做到这一点,但当您想将特定类型的数组推送到字段中时,这是我的首选方式。如果您可以发布原始代码,则更正您的代码会更容易。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-13
          • 1970-01-01
          • 1970-01-01
          • 2015-10-20
          • 2021-08-23
          • 1970-01-01
          相关资源
          最近更新 更多