0

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

@left(fieldname;2)

如果字段名包含“你好”,这将导致“他”。这里没什么可看中的。现在我想在 xpage 中使用它。

我编写了一个名为 executeFormula(doc) 的函数。我从 xpage 上的操作调用此函数。此 xpage 包含 1 个注释文档数据源。函数调用是

executeFormula(datasource.getDocument(true))

现在由于某种原因,@formula 永远不会正确计算。我是否需要先保存文档才能使用session.evaluate(kwFormula,doc),还是 @formula 在某些方面有误?

ps我忘了提到这段代码在customvalidator中工作

4

3 回答 3

3

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

我建议暂时将该函数从等式中取出,并使用文档源创建一个简单的测试页面,并在其中创建一个带有 session.evaluate 的简单计算字段,以便您可以看到结果。鉴于您上面的示例,计算场将类似于以下内容

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

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

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

于 2012-07-12T21:58:46.323 回答
1

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

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

于 2012-07-17T10:21:10.330 回答
-1

实际上无需提及文档,例如:- session.evaluate("@username") 就足够了。

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

于 2012-07-13T10:22:20.313 回答