【问题标题】:xPage with multiple datasources has the second datasource always opened in edit mode具有多个数据源的 xPage 始终以编辑模式打开第二个数据源
【发布时间】:2013-05-31 01:00:59
【问题描述】:

我有一个带有 2 个数据源的 xPage。我打开页面,第一个数据源是只读的,而第二个数据源处于编辑模式。添加 ignoreRequestParms=true 似乎会导致这种行为,但这是文档保存到不同数据源的唯一方法。

我发现有人发现了类似行为的链接。 http://www-10.lotus.com/ldd/nd85forum.nsf/7756aedc25e6d81285256324005ac76c/5e2f855ea18ff802852576e3007c34f2?OpenDocument

发生了一些我不明白的事情。如果有人可以向我解释这一点,我将不胜感激。

这是数据源和选项卡面板中的字段的代码

<xp:dominoDocument var="document2" action="createDocument"
        formName="software" ignoreRequestParams="true">
    </xp:dominoDocument>

<xp:tabbedPanel id="tabbedPanel1">
    <xp:tabPanel id="tabPanel1" label="Checklist Items">
        <xp:checkBoxGroup id="checkBoxGroup1" layout="pageDirection"
            value="#{document1.checklist}">
            <xp:selectItems>
                <xp:this.value><![CDATA[#{javascript:var dbName = new     Array("","");
var Rep = @Unique(@DbColumn(dbName,"checklistitems",3));
Rep}]]></xp:this.value>
            </xp:selectItems>
        </xp:checkBoxGroup>
    </xp:tabPanel>
    <xp:tabPanel label="Software" id="tabPanel2">



        <xp:button value="Edit Software list" id="button1">

        <xp:eventHandler event="onclick" submit="true" refreshMode="partial"  refreshId="panelsoft">
            <xp:this.action>
                <xp:changeDocumentMode mode="edit"
                    var="document2">
                </xp:changeDocumentMode>
            </xp:this.action></xp:eventHandler></xp:button>
        <xp:button value="Save Software list" id="button2">
            <xp:eventHandler event="onclick" submit="true"
                refreshMode="partial" refreshId="panelsoft">
                <xp:this.action>

                    <xp:actionGroup>



                        <xp:modifyField name="uid"
                            value="#{javascript:document1.getDocument().getUniversalID()}"
                            var="document2">
                        </xp:modifyField>

                    <xp:executeScript script="#{javascript:document2.save()}">
                        </xp:executeScript></xp:actionGroup>
                </xp:this.action>
            </xp:eventHandler>
        </xp:button>
        <xp:br></xp:br>

        <xp:panel id="panelsoft"><xp:table rendered="#{javascript:document2.isEditable()}"><xp:tr><xp:td><xp:br></xp:br>
                    Software Name
                </xp:td>
                <xp:td>
                    <xp:inputText id="inputText1"
                        style="width:300px" value="#{document2.Softwarename}">
                    </xp:inputText></xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td></xp:td>
                <xp:td></xp:td>
            </xp:tr>
        </xp:table>
        <xp:viewPanel rows="30" id="viewPanel1">
            <xp:this.facets>
                <xp:pager partialRefresh="true"
                    layout="Previous Group Next" xp:key="headerPager" id="pager1">
                </xp:pager>
            </xp:this.facets>
            <xp:this.data>
                <xp:dominoView var="view2" viewName="CustomSoftware"
                    categoryFilter="#{javascript:document1.getDocument().getUniversalID()}">
                </xp:dominoView>
            </xp:this.data>
            <xp:viewColumn columnName="uid" id="viewColumn1">
                <xp:viewColumnHeader value="uid"
                    id="viewColumnHeader1">
                </xp:viewColumnHeader>
            </xp:viewColumn>
            <xp:viewColumn columnName="Softwarename"
                id="viewColumn2">
                <xp:viewColumnHeader value="Software Name"
                    id="viewColumnHeader2">
                </xp:viewColumnHeader>
            </xp:viewColumn>
            <xp:viewColumn columnName="comments" id="viewColumn3">
                <xp:viewColumnHeader value="Comments"
                    id="viewColumnHeader3">
                </xp:viewColumnHeader>
            </xp:viewColumn>
        </xp:viewPanel>

        </xp:panel>

        <xp:br></xp:br>
        <xp:br></xp:br>
        <xp:br></xp:br>

        <xp:br></xp:br>



        <xp:br></xp:br>




        <xp:br></xp:br>

        <xp:panel>

        </xp:panel>
        <xp:br></xp:br>
    </xp:tabPanel>
</xp:tabbedPanel>

【问题讨论】:

  • 请用您的数据源定义更新问题
  • 我假设您在第二个数据源上将action 设置为openDocument?正如 Per 提到的,发布您的源代码将有助于解决问题。
  • 您的第二个数据源是否定义了 UNID?如果没有,它将始终编写新文档,因此处于编辑模式。
  • Frantisek - 我将“父”文档的 UNID 定义为第二个文档上的字段。如果这就是你要问的。
  • @PatrickSawyer 您需要为 document1 提供数据源定义,否则将无法解决此问题。 document2 是由您的数据源定义创建的,因此除非 document1 具有 action="openDocument",否则您将创建两个文档,尽管 ignoreRequestParms,它们都将处于编辑模式并且基本上不相关。您是否尝试过为 document2 设置 action="openDocument"?

标签: xpages


【解决方案1】:

因为action 设置为createDocument(可以省略,因为这是默认值),这会导致在内存中创建一个新文档。这就是文档处于编辑模式的原因:您正在编写新记录。如果您不想创建新文档,请将action 属性更改为其他选项之一:openDocumenteditDocument。其中任何一个都需要同时设置documentId 属性,因为数据源需要知道您希望分别打开或编辑哪个文档。

如果您省略ignoreRequestParams 属性,则此数据源不会忽略 URL 请求参数。相反,它会查找名为 databaseNameformNamedocumentIdaction 的参数。如果 URL 中包含这些参数中的任何一个,则每个参数的值都会覆盖数据源上定义的值。这就是为什么如果您打开一个 document1 的实例,但没有在 document2 上设置 ignoreRequestParams,那么 两个 文档将具有相同的模式(读取/编辑):因为 两个数据源都没有忽略 URL,因此两个数据源都在按照 URL 的指示进行操作。

通常,在同一个 XPage 上定义多个数据源时,您将拥有一个可以被视为“主要”数据源的数据源;任何其他数据都与该数据有某种关系,但主要数据是用户查看该页面上所有数据的上下文。因此,您希望该数据源尊重 URL 参数以允许导航(从数据视图、视图面板、重复等)能够指示正在打开的文档以及以何种模式打开。但与该文档相关的所有数据源都应明确指定它们绑定到的数据,以及对该数据采取的操作,并使用ignoreRequestParams 确保 URL 不会覆盖它信息。

【讨论】:

  • 好的,感谢您抽出宝贵时间详细了解这一点。
  • 太棒了。我有一个 XPage,其中一个主文档需要四个其他 Notes 文档来存储附件。我在代表/保存方面遇到了可怕的问题,所有附件最终都附加到主文件和所有其他四个文件中。救命!
猜你喜欢
  • 2019-08-27
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多