【问题标题】:NotesXSPDocument - Inserting a boolean breaks getDocumentNotesXSPDocument - 插入一个布尔中断 getDocument
【发布时间】:2012-06-26 22:24:11
【问题描述】:

我有一个 XPage,由于(应该是)一个小变化而刚刚损坏。

如果我运行(其中 document1 是 NotesXSPDocument 数据源):

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

接着是:

document1.getDocument(true); 

我遇到了一个错误

[TypeError] 调用方法 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>

【问题讨论】:

    标签: xpages lotus-domino xpages-ssjs


    【解决方案1】:

    如果您查看堆栈跟踪,您将看到以下内容:

    ....
    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 方法和不受支持的数据类型。

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

    • 字符串文本
    • 整数
    • 双数
    • DateTime 日期时间项
    • 带有 String、Integer、Double 或 DateTime 元素的 java.util.Vector 多值文本、数字或日期时间项
    • Item 与 Item 的数据类型相同

    在后端文档与数据源文档同步时引发错误。这就是调用 document1.getDocument(true) 时失败的原因。

    希望对你有帮助

    斯文

    编辑: 为什么将值设置为 false

    【讨论】:

    • 数字。我想那时我将不得不使用一个数字。我并没有真正将其设置为 false,只是为了测试/示例。
    • +1 完全正确,布尔值不是合法的 Notes 项目类型。按照惯例,它应该是 0/1(数字)或“”/“1”(字符串)。
    猜你喜欢
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2012-11-20
    相关资源
    最近更新 更多