2015-02-09 40 views
0

我想了解如何在dataTable上执行计算可见属性以隐藏某个字段/行(如果状态为启用或禁用状态)。XPages dataTable控件,计算可见

下面的代码是什么我已经使用,但一直得到错误

var userName=rowData.getColumnValue("userName") 
var status:NotesView = database.getView("(UserProfile)"); 
var doc:NotesDocument = status.getDocumentByKey(userName); 
var active = doc.getItemValueString("Status") 
if(active == "Enabled") { 
    return true 
}else{ 
return false 
} 
+0

什么错误?以及XPages日志文件说什么? – 2015-02-09 18:49:54

+0

我打印(用户名)检查名称是否在视图“(UserProfile)”中的第一个排序列中,并保持geting行= 4,col = 18:'doc'为空 – 2015-02-09 18:52:16

+1

。它必须是相同的拼写... – 2015-02-09 18:54:16

回答

1

把你的代码放到一个try-catch块,只要你想,如果用户是鉴于部分才可以看到“(用户配置)”并有一定的状态:

try { 
    var userName=rowData.getColumnValue("userName") 
    var status:NotesView = database.getView("(UserProfile)"); 
    var doc:NotesDocument = status.getDocumentByKey(userName); 
    var active = doc.getItemValueString("Status") 
    if(active == "Enabled") { 
     return true; 
    } else { 
     return false; 
    } 
} catch (e) { 
    return false; 
} 
1

这是页面加载或部分刷新期间失败?如果是后者,你可能会遇到我在这里提到的问题http://www.intec.co.uk/dataviews-and-nested-repeats/。部分刷新是许多服务器端阶段,在此阶段中检索页面的服务器端映射,应用浏览器的值以及重新计算数据表的内容。在早期阶段,变量rowData将为空,这意味着doc也将为空。

使用像XPages OpenLog Logger一个日志机制将捕捉到的堆栈跟踪,其中将包括它的失败的阶段。

使用view.isRenderingPhase()只能运行在Render Response阶段(该阶段写入HTML返回给浏览器的代码)。它将避免阶段性问题并优化性能。如果它被渲染的属性,这是你需要计算值的唯一阶段;-)

+0

是的错误在部分刷新过程中,是新的XPage,所以我不知道在哪里插入或使用'view.isRenderingPhase()'你可以请更多的灯光,谢谢 – 2015-02-09 19:51:13

+0

if(view。 isRenderingPhase()){ //运行代码 } else { return false; } 这仍然会允许使用try/catch进行错误处理 – 2015-02-09 21:13:32