在xpages中的session.evaluate中的@dbcolumn

时间:2012-04-01 07:20:24

标签: lotus-notes xpages lotus-domino lotus-formula

我正在尝试为列表框执行此代码但它不起作用,这给了我500的错误。如果我直接在列表框中写@formula它工作正常。

return session.evaluate("@DbColumn(@DbName(), \"viewName\", 1)").elementAt(0)

但如果我写下面的代码,它可以正常工作。

return session.evaluate("@Unique").elementAt(0);

我在Lotus Notes 8.5.3上使用xpages

3 个答案:

答案 0 :(得分:5)

您收到500er错误,因为SSJS的@DbColumn的参数小于“原始”@DbColumn-Version,如果您使用的是evaluate方法,它将被执行。 对于XPages,缓存和类的选项丢失了。

这是evaluate语句的语法:

@DbColumn( class : cache ; server : database ; view ; columnNumber )

这是XPages语法:

@DbColumn( server : database , view , columnNumber );

你必须使用本机Notes @Formula语法,例如。用分号代替逗号。

答案 1 :(得分:1)

session.evaluate适用于原始的@Formula语法,而不适用于SSJS语法。

所以请改用@DbColumn(“”; @DbName;“view”,列)。

答案 2 :(得分:0)

以下是解决方案: 在SSJS中,您可以直接编写以下代码......

@DbColumn(@DbName(),"viewName",1)

如果你想使用session.Evaluate()做同样的事情,那么你可以尝试以下方法。

//@DbColumn(@DbName(),"viewName",1) --> in SSJS
//@DbColumn( class : cache ; server : database ; view ; columnNumber ) --> in Formula using Evaluate

var colValues = "@DbColumn(\"\":\"\";" + @DbName() + ";\"viewName\";1)";

print ("colValues[0]" + colValues[0]); // will print @DbColumn( "":""; ServerName ; viewName; 1)
print ("colValues[1]" + colValues[1]); // will print @DbColumn( "":""; DatabaseName; viewName; 1)

return session.evaluate(colValues[1]) // It will return the expected value in listbox

因为@DbName()将返回服务器名称和数据库名称。而我们只需要数据库名称。这仅适用于当前服务器。对于不同的服务器,我们需要指定服务器名称。我希望这会有所帮助...... !!!