2012-06-26 16 views
2

我有一个XPage,由于(本来应该是)一个小小的改变而刚刚破解。NotesXSPDocument - 插入一个布尔值休息getDocument

如果我运行(其中文档1是NotesXSPDocument数据源):

document1.replaceItem("ItemName", false); //or true, or any variable/formula that results in a boolean 

后跟:

document1.getDocument(true); 

我最终发生了错误

[类型错误]异常调用方法NotesXspDocument.getDocument(boolean)null

这是一个新的文档(所以还没有保存,我还没有测试过,但可能会有所作为),因此我不能只在底层文档上设置字段。

它似乎不是页面中其他任何东西的人工产物,因为基本测试页确认了它。除了布尔值之外,它不会发生任何事情(我发现)。

任何意见,除了只是改变数据类型?我想这就是我最终会做的事(连同一个错误报告),但我想知道我不会错过任何东西。

感谢

------------测试XSP代码------------

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"><xp:this.data> 
    <xp:dominoDocument var="document1" formName="Test" /> 
    </xp:this.data><xp:span style="font-weight:bold"> 
     Button 1 code:</xp:span><xp:br></xp:br>document1.replaceItemValue(&quot;Test&quot;,false); 
<xp:br></xp:br>var doc:NotesDocument = document1.getDocument(true); 
<xp:br></xp:br>print(doc.toString());<xp:br></xp:br> 
    <xp:button value="Test 1" id="button1"> 
     <xp:eventHandler event="onclick" submit="true" 
      refreshMode="complete"> 
      <xp:this.action><![CDATA[#{javascript:document1.replaceItemValue("Test",false); 
var doc:NotesDocument = document1.getDocument(true); 
print(doc.toString());}]]></xp:this.action> 
     </xp:eventHandler></xp:button> 
    <xp:br></xp:br> 
    <xp:br></xp:br> 
    <xp:br></xp:br> 
    <xp:br></xp:br><xp:span style="font-weight:bold"> 
    Button</xp:span><xp:span style="font-weight:bold"> 2</xp:span><xp:span style="font-weight:bold"> Code:</xp:span><xp:span style="font-weight:bold"></xp:span>&#160;<xp:br></xp:br>document1.replaceItemValue(&quot;Test&quot;,&quot;Test);<xp:br></xp:br>var doc:NotesDocument = document1.getDocument(true); 
<xp:br></xp:br>print(doc.toString());<xp:br></xp:br><xp:button value="Test 2" id="button2"> 
     <xp:eventHandler event="onclick" submit="true" 
      refreshMode="complete"> 
      <xp:this.action><![CDATA[#{javascript:document1.replaceItemValue("Test","Test"); 
var doc:NotesDocument = document1.getDocument(true); 
print(doc.toString());}]]></xp:this.action> 
     </xp:eventHandler></xp:button></xp:view> 

回答

6

如果你在看看堆栈跟踪您将看到以下内容:

.... 
NotesException: Unknown or unsupported object type in Vector 
    lotus.domino.local.Document.NreplaceItemValue(Native Method) 
    lotus.domino.local.Document.replaceItemValue(Unknown Source) 
    com.ibm.xsp.model.domino.wrapped.DominoDocument.applyChangesToDoc(DominoDocument.java:1698) 
    com.ibm.xsp.model.domino.wrapped.DominoDocument.applyChanges(DominoDocument.java:1649) 
    com.ibm.xsp.model.domino.wrapped.DominoDocument.getDocument(DominoDocument.java:544) 
    com.ibm.xsp.script.WrapperDominoEx$fct_DominoDocument.call(WrapperDominoEx.java:254) 
.... 

的问题是,您使用replaceItemValue方法与不支持的数据类型。

这里是所有允许的数据类型的列表:

  • 字符串文本
  • 整数数
  • 双号
  • 日期时间的日期时间项目
  • java.util.Vector中与字符串,整数,双精度或DateTime元素多值文本,数字或日期时间项目
  • 项目与项目相同的数据类型

在后端文档与数据源文档同步的时刻出现错误。这就是为什么它调用document1.getDocument(true)失败。

希望这有助于

斯文

编辑: 为什么你的值设置为

+0

数字。我想我必须使用一个数字来代替。我并不是真的把它设置为假,只是为了测试/例子。 –

+0

+1,布尔值不是合法的Notes项目类型。按照惯例,它应该是0/1(数字)或“”/“1”(字符串)。 –