0

下面的代码是一个 XPage 上的脚本对象,其中我循环遍历数据库中所有表单的数组,查找包含字段“ACIncludeForm”的所有表单。我的方法有效,但计算需要 2 到 3 秒,这确实减慢了 XPage 的负载。我的问题是 - 有没有更好的方法来实现这一点。我添加了代码来检查 sessionScope 变量是否为空,并且只在需要时执行,并且页面第二次加载它会在一秒钟内完成。所以我的方法确实消耗了大量的处理器时间。

var forms:Array = database.getForms();
var rtn = new Array;
for (i=0 ; i<forms.length; ++i){
    var thisForm:NotesForm = forms[i];
    var a = thisForm.getFields().indexOf("ACIncludeForm");
    if (a >= 0){
        if (!thisForm.isSubForm()) {
            if (thisForm.getAliases()[0] == ""){
                rtn.push(thisForm.getName() + "|" + thisForm.getName() );
            }else{
                rtn.push(thisForm.getName() + "|" + thisForm.getAliases()[0] );
            }
        }
    }
    thisForm.recycle()
}
sessionScope.put("ssAllFormNames",rtn)
4

2 回答 2

2

一种方法是自己建立表格索引。例如,创建一个获取所有表单的代理(LotusScript 或 Java),并为每个表单创建一个文档,其中包含一个包含表单名称的字段“form”和一个包含所有字段名称的字段“fields”(注意 32K限制)。

然后创建一个视图,显示所有这些文档并在第一列中包含“字段”字段的值,以便该字段的每个值在该视图中创建一行。

有了这样的视图,您可以简单地从 XPage 中创建一个 @DbLookup。

如果您的表单发生更改,您只需重新运行代理即可重新构建索引。@DbLookup 应该很快。

于 2013-11-05T06:20:50.060 回答
0

将表单列表放在staticJava 类的字段中。它将在那里停留很长时间(可能直到 http 启动)。根据我的经验applicationScope,价值会在 15 分钟内消失。

于 2013-11-04T20:14:59.780 回答