Lotus notes 尝试在LotusScript中使用多值数组时遇到了一些问题

Lotus notes 尝试在LotusScript中使用多值数组时遇到了一些问题,lotus-notes,lotus,lotusscript,Lotus Notes,Lotus,Lotusscript,我必须找到一种方法来存储一系列变量-MonthYear(键)和一个计数器。其目的是跟踪按月和按年处理的文档数量。我正在考虑一个列表,但我不知道如何保存数据,以便它可读,并能够在以后的日期显示在表中。我考虑过使用多维数组-someArray(1,0到1),每次我开始新的MonthYear时都重新编辑它,然后将它保存回文档上的一个字段,但不确定这将如何进行。有人知道我怎样才能做到这一点吗 第一个维度是MonthYear(键),第二个维度是计数器,每次处理新文档时都会更新计数器 密钥将基于正在处理的文

我必须找到一种方法来存储一系列变量-MonthYear(键)和一个计数器。其目的是跟踪按月和按年处理的文档数量。我正在考虑一个列表,但我不知道如何保存数据,以便它可读,并能够在以后的日期显示在表中。我考虑过使用多维数组-someArray(1,0到1),每次我开始新的MonthYear时都重新编辑它,然后将它保存回文档上的一个字段,但不确定这将如何进行。有人知道我怎样才能做到这一点吗

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

  • 密钥将基于正在处理的文档上的字段。如何确保我正在更新正确的键/计数器组合

  • 如何从文档上的字段检索现有计数器,更新计数器,然后替换值

  • 我考虑过每次处理文档时只添加一个新元素(ReDim),然后将每个键的所有计数器相加并存储在一个数组中,但这看起来真的很混乱。必须有一个好的方法来做到这一点


    任何和所有的想法都将受到极大的赞赏

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

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


    DominoDesigner帮助提供了关于列表的大量信息。如果需要验证列表元素是否存在,请查看“isElement”函数。

    谢谢。我会尝试一下,看看我能得到什么。在使用Notes和现在的XPages工作了20年之后,我很惭愧地说我以前从未使用过列表。多米诺骨牌就像一座冰堡,80%的骨牌都隐藏在表面之下。直到你遇到它,你才知道它。列表是很棒的东西。它们是关联数组,无需重新命名,您可以在其中填充任何内容(甚至对象)。不太方便的是,缺少从Notes文档加载或保存列表的简单方法,以及在使用值之前必须使用iElement。我们不得不问这样的问题,这让我非常讨厌LotusScript。它是一种半实现的语言。@iconoclast。你是真的吗?这类问题与语言无关,只是使用正确的工具来解决问题。所以,你也应该从思想上憎恨java。Java拥有的集合/列表/地图/树的数量是你所能看到的数倍。如果你也要研究这个问题的话,就很难确定什么是解决这个问题的正确工具。虽然LS不如java强大,但它比java更容易解决这个问题。算了吧,LS只是另一种语言,一旦你以这种方式看待技术,你就会平静下来。@giulio:我同意你对Java的批评,但我不确定你为什么反对指出一种语言的缺陷,因为你在批评Java。请记住,除了这两种语言之外,还有其他语言。我建议你学习一些,因为你可能会学会欣赏他们所提供的东西。LotusScript只是另一种语言,但并不是所有语言都是平等的。@iconclast我不反对你指出任何语言的缺陷,也不反对LS。如果你重读我写的东西,我会指出你的缺点,因为你对一项技术的使用方式一无所知,从而混淆了你的个人偏见(即“仇恨”)。但是如果你不明白这一点,那么我或你所知道的编程语言的数量是无关紧要的,因为这个论点现在已经有了回报迅速减少的所有迹象。
    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