如何使用@DbLookup结果填充xpages中的Readers字段?

时间:2014-01-15 14:04:36

标签: javascript arrays xpages xpages-ssjs

db = new Array("myserver", "myfolder\\mydb.nsf") 
dir = getComponent("Dir").value; 
div = getComponent("Div").value; 
lu = @DbLookup(db, "ManagerAccess", dir + "PP" + div, "DTManagers"); 
var a = []; 
a.push(lu); 
var item:NotesItem = docBackEnd.replaceItemValue('FormReaders', @Unique(a)); 
item.setReaders(true);

该代码位于querySaveDocument ssjs上。我从@DbLookup获得的结果(当我放入计算字段时)看起来像这样: Pedro Martinez,Manny Ramirez,David Ortiz,Terry Francona

我尝试在它上面做一个@Explode(@Implode)的东西,但它似乎不起作用。 我在浏览器中遇到的错误只是告诉我replaceItemValue行被破坏了。 为了测试它,我一次按下一个字符串,并且它正确地用多个条目填充我的FormReaders字段。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我在这里看到几个问题:

一个。在你所描述的情况下,@ DDlookup实际上会返回一个数组。如果将数组推入普通的computedField控件,它将与您编写的内容完全相同:

value1, value2, ..., valueN

computedField对多个值等没有任何了解,它只能显示字符串或可以转换为字符串的数据。

如果您想测试返回值,可以尝试返回lu[0]之类的内容;然后,如果lu不是数组,则应该接收数组的第1个元素或运行时错误。或者你可以使用lu.length来询问数组的大小。返回数组元素的数量,如果它只是一个普通的字符串,则返回字符数。

B中。您的代码包含以下两行:

var a = [];
a.push(lu);

通过它创建一个空数组,然后将lu[]推送到a[]的第一个元素。结果是这样的:

a[0] = [value1, value2, ..., valueN]

即。 a是第一个元素包含另一个数组的数组。由于您不需要,只需在replaceItemValue方法中使用@Unique(lu)

℃。我不明白为什么replaceItemValue会在这里引发错误,除了我在主题B中写的内容。试一试将lu直接写入项目(首先没有@Unique)。这应该有用。

d。为了完整性:在第一行中使用了“new Array”。定义db参数的更好方法是

var db = ["myserver", "myfolder/mydb.nsf"];

(请参阅Tim Tripcony在您最近提出的问题中的评论,或在http://www.timtripcony.com/blog.nsf/d6plinks/TTRY-9AN5ZK查看他的博客文章)