【问题标题】:Trying to work with a multi-value array in LotusScript and sort of stuck尝试在 LotusScript 中使用多值数组并有点卡住
【发布时间】:2012-04-13 03:46:19
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 我们不得不提出这样的问题,这让我非常讨厌 LotusScript。它是一种半实现的语言。
  • @iconoclast。你是真的吗?这类问题与语言无关,只是使用正确的工具来解决问题。所以,你的想法也应该讨厌java。 Java 的集合/列表/地图/树比你可以戳的多很多倍。如果您还必须研究它,那么确定解决问题的正确工具要困难得多。 LS虽然没有java健壮,但是解决这个问题比java好用多了。老兄,讨厌的人会讨厌的。克服它,LS 只是另一种语言,一旦你以这种方式看待技术,你就会平静下来。
  • @giulio:我同意你对 Java 的批评,但我不确定你为什么反对指出一种语言的缺陷,因为你是在批评 Java。请记住,除了这两种语言之外,还有其他语言。我建议您学习一些,因为您可能会学会欣赏他们所提供的东西。 LotusScript 只是另一种语言,但并非所有语言都是平等的。
  • @iconclast 我不反对你指出任何语言的缺陷,或者就此而言的 LS。如果您重新阅读我写的内容,我会通过混合您对技术的个人偏见(即“仇恨”)来指出您的缺陷,因为您对技术的使用方式一无所知。但如果你不理解这一点,那么我或你所知道的编程语言的数量就无关紧要了,因为这个论点现在带有所有收益迅速递减的迹象。

标签: lotus-notes lotus lotusscript


【解决方案1】:

我能想到的最简单的结构是“列表”。这是一个快速示例,它使用列表将值“往返”到文档中并返回到列表中。剪切并粘贴到代理中进行测试(不要忘记将代理属性的“运行时”目标设置为“无”)

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

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

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

【讨论】:

  • 谢谢。我会尝试一下,看看我能得到什么。在使用 Notes 和现在的 XPages 工作了 20 年后,我很惭愧地说我以前从未使用过列表。估计没有像现在这样的时间了。
  • 多米诺骨牌就像一座冰山,80% 都潜伏在表面之下。你不知道它,直到你遇到它。
  • 列表是很棒的东西。它们是关联数组,不需要 ReDimming,你可以在其中填充任何东西(甚至是对象)。不太方便的是缺少从 NotesDocument 加载或保存 List 的简单方法,以及在使用值之前必须使用 IsElement。
猜你喜欢
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
相关资源
最近更新 更多