xpages在action = newDocument之前将值设置为字段

时间:2014-09-04 05:48:33

标签: xpages xpages-ssjs

我有一个带有eventHandler的简单按钮:

<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
        <xp:this.action>
            <xp:openPage target="newDocument" name="/doc.xsp"></xp:openPage>
        </xp:this.action>
</xp:eventHandler>

lotusScript中,我会在编写表单之前为字段添加一个值,使用:

Call doc_new.ReplaceItemValue("txt_codformularmain","01")
....
....
Set uidoc = w.EditDocument ( True, doc_new )  

我尝试了postNewDocument

doc.xsp事件
<xp:this.data>
    <xp:dominoDocument var="Contr" formName="(fmFormularCIP)">
        <xp:this.postNewDocument><![CDATA[#{javascript:Contr.replaceItemValue("txt_codformularmain", "01")}]]></xp:this.postNewDocument></xp:dominoDocument>
</xp:this.data>

我不希望每次创建文档的时候都有价值,比如01,但只有在文档时才会这样。由特定按钮组成。其他一些按钮将有机会为该字段添加02值,依此类推。

如何在xpages开发中实现这一目标?谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

这在Web应用程序开发中有点棘手,因为您在经典Notes开发中所做的不能在此处应用。我在这方面遇到了很多问题。

经典场景是你有一个具有一定价值的Page X(比如txt_codformularmain将是01)。你如何决定这个价值&#34; 01&#34;?

在某些情况下,此值是页面X中的值。因此,您希望将特定值传递给目标页面。一个选项可能是使用查询参数(doc.xsp?myValue=01)并使用param.myValue在doc.xsp上使用它。或者,您可以在转到目标页面之前放置一个sessionScope变量,并按sessionScope.myValue使用它。

这取决于你需要什么。查询参数更安全一些,因为用户可能会使用相同的按钮两次,而sessionScope变量会导致不一致的行为。另一方面,查询参数可以由用户更改,因此您的应用程序可能存在违规行为。

有些情况下,您希望在第二页填充一些值。可以用表格(即,加载时的计算值)填充简单值(例如,创建日期,用户名等)。有时它会更复杂(例如,您必须查找某些视图的用户部门)。对于此类情况,您需要在目标页面上使用postNewDocument事件。

将值传递到doc.xsp页面后,您将以您需要的方式使用。如果它不会在页面上进行修改,您可以再次使用postNewDocument事件并按dataSourceName.replaceItemValue('itemName', param.myValue)设置值。如果可以编辑该值,则可以将其用作字段组件的默认值。

我遇到的一个问题:在postNewDocument中设置值后,您可能会在以后更改它时遇到问题,直到保存文档数据源。这是在特定情况下发生的。如果遇到此类问题,可以使用一些带有readonly属性的可编辑字段。请记住:)