session.evaluate和notesxspdocument

时间:2012-07-12 21:27:29

标签: xpages xpages-ssjs

我对SSJS中的session.evaluate有疑问。在关键字文档中,我存储了一些@formula,它可以进行一些数据转换。让我们说这将是:

@left(fieldname;2)

如果字段名包含'hello',则会产生'he'。这里没什么好看的。现在我想在xpage中使用它。

我写了一个名为executeFormula(doc)的函数。我通过xpage上的动作调用此函数。此xpage包含1个备注文档数据源。函数调用是

executeFormula(datasource.getDocument(true))

现在由于某种原因,永远无法正确计算@formula。在我使用session.evaluate(kwFormula,doc)之前是否需要先保存文档,或者@formula在某种程度上是错误的?

P.S。我忘了提到这段代码在customvalidator中起作用

3 个答案:

答案 0 :(得分:2)

如果没有看到executeFormula(doc)函数的代码,很难确切地知道session.evaluate是如何被调用的。

我建议暂时将该功能从等式中取出并创建一个带有文档源的简单测试页面和一个带有session.evaluate的简单计算字段,以便您可以看到结果。鉴于上面的示例,计算字段将是

的行
session.evaluate("@Left(fieldname;2)",xspDoc.getDocument(true));

一旦你获得了可接受的结果,那么你可以将它移动到你的函数中并验证它是否也在那里工作。

不要忘记session.evaluate会返回一个向量,因此如果它不为null,您可能会对返回的值执行.getFirstElement()。

答案 1 :(得分:1)

如果您在自定义验证程序中使用它,则从浏览器/客户端发布的值尚未更新数据模型(在您的情况下,文档中)。验证成功后会发生这种情况。

我想它可能适用于某些字段(例如,在成功刷新后更新的字段,或现有文档中存储的字段)。

答案 2 :(得分:-1)

实际上不需要提及该文档,例如: - session.evaluate(“@ username”)就足够了。

对于你的session.evaluate(“@ left('hello'; 2)”)将起作用。,