1

我在选项卡式面板中有一个视图面板,其中 data > var 属性设置为 rowData。我将此视图设置为通过使用 viewScope 值来模拟单一类别视图。

当我打开 XPage 并单击视图面板所在的选项卡时,有时会弹出此错误(JavaScript 代码中的第 2 行是错误所在):


Unexpected runtime error
The runtime has encountered an unexpected error.

Error source
Page Name:/speakerReq.xsp
Control Id: viewColumn2 

Exception
Error while executing JavaScript computed expression
Script interpreter error, line=2, col=23: [ReferenceError] 'rowData' not found

JavaScript 代码

1: var href = facesContext.getExternalContext().getRequest().getContextPath();
**2: var docUNID = rowData.getDocument().getUniversalID();**
3: var formName = rowData.getDocument().getItemValueString("Form");
4: var formType = rowData.getColumnValue("Form")
5: 
6: if(formName == "clientProfile") {
7:  href + "/clientProfile.xsp?documentId=" + docUNID + "&action=openDocument&rtr=yes";
8: }
9: else {
10:     href + "/speakerProfile.xsp?documentId=" + docUNID + "&action=openDocument&rtr=yes";
11: }

上面引用的 viewColumn2 是视图中具有以下公式的列:

@ReplaceSubstring(Form; "clientProfile" : "clientFeed" : "speakerProfile" : "speakerFeed"; "Client Profile" : "Client Feedback" : "Speaker Profile" : "Speaker Feedback")

我不确定这将如何引发上述错误 --- 在大多数 XPages 上单击该选项卡都可以正常工作。

视图中显示的文档没有什么特别之处。我比较了其中两个——一个显示错误,一个抛出错误,我找不到任何会导致此问题的差异。

我无法确定为什么有时会出现错误,有时不会。

任何帮助都会很棒!

4

3 回答 3

3

尝试使用不同的变量名 curRowData ---并且不要忘记这些东西是区分大小写的。此外,您的代码是一个很大的内存泄漏,因为 rowData.getDocument 初始化了一个您不回收的 NotesDocument。

尝试使用:

var result;
if (curRowData.isCategory()) {
   return "";
}
var href = facesContext.getExternalContext().getRequest().getContextPath();
try {
   var doc = curRowData.getDocument();
   if (doc != null) {
      var docUNID = doc.getUniversalID();
      var formName = doc.getItemValueString("Form");
      var formType = curRowData.getColumnValue("Form")
          if(formName == "clientProfile") {
          result = href + "/clientProfile.xsp?documentId=" + docUNID + "&action=openDocument&rtr=yes";
      } else {
        result = href + "/speakerProfile.xsp?documentId=" + docUNID + "&action=openDocument&rtr=yes";
      }  
   }
} catch (e) {
  // some error handling
}
if (doc != null) {
   doc.recyle();
}
return result;

当然,最好将所有需要的值添加到视图中。无需创建 NotesDocument 对象

于 2012-10-14T13:18:38.390 回答
2

如果视图已分类并且代码命中类别而不是文档,则可能会发生此错误。您可以使用以下代码确保当前行不是类别:

if (!rowdata.isCategory()) {
// insert your code here
}

此代码当然假设 rowData 可用,因此这可能无法解决您的问题。

示例代码可在 Notes & Domino Application Development wiki 中找到: http ://www-10.lotus.com/ldd/ddwiki.nsf/dx/notesxspviewentry_sample_javascript_code_for_xpages#isCategory+isDocument+isTotal

于 2012-09-28T04:35:39.917 回答
0

请添加对声明控件的 XML 的描述。我自己也遇到了这个错误,这是因为我以错误的方式计算了该列;“计算”与 JavaScript 我认为是……</p>

于 2013-02-04T16:37:01.070 回答