LotusScript View ColumnValues处理嵌入式数组

时间:2013-05-13 13:05:19

标签: lotus-notes lotus-domino lotusscript

使用LotusScript访问ColumnValues(通过NotesDocument或NotesViewEntry访问的值的变量数组)时,某些数组元素可能包含一个或多个元素中的嵌入数组。例如:

doc.ColumnValues(0) = "A"
doc.ColumnValues(1) = ["A", "B"]
doc.ColumnValues(2) = 4
...

有没有办法一次性将所有数组值分配给数组?如果将ColumnValues数组赋值给变量变量,那么这只有在数组元素中没有嵌入数组数据的情况下才有效,即:ColumnValues(1)=" AB"不是" [A,B]"例如:

dim v as variant
v = doc.ColumnValues

如果存在数组,则此分配失败,但如果所有元素都是标量,则该分配有效。一种解决方法是确保所有ColumnValues都是标量(不是数组),但这不能保证。我唯一的其他解决方法是迭代所有ColumnValues并检查数组:

For i = 1 to ubound(doc.ColumnValues)   'or other columcount var!
  v=doc.ColumnValues(i)
  if isarry(v) then
    a=join(v,";")
  else
    a=v
  end if
Next

上述工作但许多专栏都很慢,有没有其他方法?

2 个答案:

答案 0 :(得分:3)

经过一些测试后,我发现了以下内容:如果我使用了forall循环...

dim cvals() as variant
redim cvals(ncolsreqd)
i = 0
ForAll v In doc.columnValues
    If IsArray(v) Then
        cvals(i) = Join(v, ";")
    Else
        cvals(i) = v
    End if
    i = i + 1
End ForAll
Print "v:= " & Join(cvals, ",")

然后ColumnValues只显示检索一次,许多列的性能不受影响。 (如果使用For循环,则每次查找整个数组,然后从数组中选择1个元素。)

答案 1 :(得分:0)

另一个想法:如果要检索的数据几乎总是标量,则可以使用单个赋值变量:

dim v as variant
v = doc.ColumnValues

然后,如果由于类型不匹配(嵌入式数组)而导致此错误,则只在forall循环中重新处理数据作为错误处理的一部分,然后重新开始。在大多数情况下避免使用forall loop,并且整体应该更快。 (但是,如果大部分数据是多值的,那么错误/数组处理路径可能会更慢)!