Java 是否可以确定视图列是包含常量数据还是仅包含UI数据?

Java 是否可以确定视图列是包含常量数据还是仅包含UI数据?,java,lotus-notes,lotus-domino,Java,Lotus Notes,Lotus Domino,根据for lotusnotes,一个视图包含一个列,该列的数据为常量值或UI-only函数,该列不会通过视图条目的getColumnValues方法包含在列值向量中。因此,如果在视图中定义了5列,其中一列是常量值,则视图条目仅返回4列值的向量 从视图索引效率的角度来看,这是可以理解的,但不幸的是,它给开发人员在分析视图及其数据的元结构时带来了一个重大的难题 IBM未能(多年来?)提供一种方法,允许开发人员查询viewColumns结构,以确定ColumnValue向量中缺少哪一列。是否有任何编

根据for lotusnotes,一个视图包含一个列,该列的数据为常量值或UI-only函数,该列不会通过视图条目的getColumnValues方法包含在列值向量中。因此,如果在视图中定义了5列,其中一列是常量值,则视图条目仅返回4列值的向量

从视图索引效率的角度来看,这是可以理解的,但不幸的是,它给开发人员在分析视图及其数据的元结构时带来了一个重大的难题


IBM未能(多年来?)提供一种方法,允许开发人员查询viewColumns结构,以确定ColumnValue向量中缺少哪一列。是否有任何编程方法来确定将从viewentry对象的getColumnValues方法中忽略哪一列?

您可以欺骗视图将列中的常量值作为公式处理。我相信这就像附加一个空字符串或用@Text公式包装它一样简单。例如:

"Constant Value"  // won't be returned by NotesViewEntry's getColumnValues() method

@Text("Constant Value")  // should be returned

"Constant Value" + ""  // should also be returned
如果这不是一个选项,您可以通过NotesView类访问列本身。您应该能够将返回的列值与实际存在的列进行比较。通过将哪些列没有值与视图中存在的列列表进行比较,可以知道哪些列被省略


或者,您可以检查列本身,以查看哪些列具有常量公式,或者哪些列的类型是“仅限ui”。不幸的是,我相信没有比这更好的方法了。

使用NotesView.getColumns,然后使用NotesView.isFormula()、isHidden()和isField()来确定显示哪些列及其值。当您试图确定某个列具有固定值时要非常小心…

谢谢ken,但我无法“欺骗”视图,因为我必须“按原样”使用它们。我不太明白如何通过NotesView类来确定哪些列值将被包括(或排除)。一切似乎都是通过视图类的getColumns指向ViewColumn类的,该视图类不提供任何方法来实现这一点。理想情况下,我需要一种健壮的方法以编程方式确定省略了哪一列(如果有)。我想我将被迫手动定义它。@giulio,我更新了我的答案-我最初有点搞混了。谢谢ken。我想您已经确认了,自推出以来,IBM还没有为此提供API(R6.5?)。我希望有人提供一些方法来询问列元数据,并实际确定它是否为常量。有太多的方法使一个值变为常量:(抱歉..这根本不能解决问题。-1“一种允许开发人员查询viewColumns结构以确定ColumnValue向量中缺少哪一列的方法。”这可能不是一个好方法,但对我来说似乎是一个可行的解决方法。一个粗略的方法来确定列公式是否有固定值:try{var value=session.evaluate(column.getFormula());var isFixed=value[0]?true:false;}catch(e){value=null;isFixed=false;}对于那些遇到相同问题的人,现在R9中有了一个新方法:isConstant()