尝试在LotusScript中使用多值数组并陷入困境

Roy*_*ner 2 lotus-notes lotus lotusscript

我必须找到一种方法来存储一系列变量 - MonthYear(键)和一个计数器.这样做的目的是跟踪按月和年处理的文档数.我在想一个列表,但我不确定如何保存数据,以便它可读并且能够在以后的表格中显示.我想过使用一个多维数组 - someArray(1,0比1)和ReDim'每次我开始一个新的MonthYear然后将它保存回文档上的字段但是我不确定它是怎么回事播出.有谁知道我怎么能做到这一点?

第一个维度是MonthYear(键),第二个维度是每次处理新文档时更新的计数器.

  1. 密钥将基于正在处理的文档上的字段.如何确保更新正确的密钥/计数器组合?

  2. 如何从文档字段中检索现有计数器,更新计数器然后替换值?

我想过每次处理文档时只添加一个新元素(ReDim),而不是以某种方式为每个键添加所有计数器并将其存储在一个数组中,但这看起来真的很混乱.必须有一个很好的方法来做到这一点.

任何和所有的想法将不胜感激

ang*_*guy 5

我能想到的最简单的结构是"列表".下面是一个快速示例,将"往返"值与列表放在文档上并返回到列表中.剪切并粘贴到代理中进行测试(不要忘记将代理属性的"运行时"目标设置为"无")

Sub Initialize
    Dim session As New notesSession
    Dim counter List As String
    Dim sValue As String
    Dim doc As notesDocument
    Dim itCounters As NotesItem
    Dim db As notesDatabase
    Dim i As Integer
    Dim vResult As Variant
    Dim vValues As Variant

    Set db = session.CurrentDatabase
    Set doc = db.CreateDocument
    Set itCounters = doc.ReplaceItemValue("counters","")

    counter("201201") = 16
    counter("201202") = 1
    counter("201203") = 10
    counter("201204") = 5

    ' print the tags
    Forall k In counter
        Print Listtag(k)
    End Forall

    ' adding the values (and tags)
    Forall k In counter
        Print "[" + Listtag(k) + "]:" + counter(Listtag(k))
        sValue = Listtag(k) + "!" + counter(Listtag(k))
        itCounters.AppendToTextList(sValue)
    End Forall

    'retrieving
    Erase counter

    Set itCounters = doc.GetFirstItem("Counters")
    vValues = itCounters.Values
    For i = 0 To Ubound(vValues)
        vResult = Split(vValues(i), "!")
        counter(vResult(0)) = vResult(1)
    Next

    Forall k In counter
        Print "[" + Listtag(k) + "]:" + counter(Listtag(k))
    End Forall

End Sub
Run Code Online (Sandbox Code Playgroud)

方便的方面是您根据需要声明每个新项目(没有Dim'ing).您可以通过有意义的密钥(月份和年份或其他)访问任何值.您可以使用与要匹配的键匹配的字段名称,或者仅将值保留在多值字段中,并使用特定的分隔符,如示例中所示.此外,当您递增时,您不必搜索数组以使正确的值递增,您可以根据标记引用它,然后只增加它.我认为这很简单.

Domino设计器帮助包含有关列表的大量信息.如果需要验证列表元素的存在,请查看"isElement"函数.