慢打开'viewPanel'(Xpages)

问题描述 投票:2回答:2

我在加载viewPanel时遇到了一个草率的问题,页面打开但看起来数据源一次加载所有文档,此时尝试打开列出的文档需要很长时间。你能否告诉我你是否可以限制数据源加载的文件数量?提高性能。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xc="http://www.ibm.com/xsp/custom"
xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:this.data>
    <xp:dominoView var="viewProposta" keysExactMatch="true"
        dataCache="nodata">

        <xp:this.categoryFilter><![CDATA[#{javascript:var filtro=[];
                if(viewScope.statusVoltar!=null){
                    viewScope.status=viewScope.statusVoltar;
                    sessionScope.remove("statusVoltar");
                } 
                if(compositeData.filtraUsuario){
                    filtro.push(sessionScope.usuarioLogado.nome);
                }
                if(compositeData.filtraEntidade){
                    filtro.push(sessionScope.usuarioLogado.fk_entidade_funcional);
                }
                return filtro.join("\\");}]]>
        </xp:this.categoryFilter>

        <xp:this.viewName><![CDATA[#{javascript:if(!viewScope.minhasPendencias ){   
            if(compositeData.filtraEntidade){
                switch(viewScope.status) {
                    case "Solicitado":
                        var vw = "vw_parecer_solicitado_entidade"
                        break;
                    ...
                }
            }
            if(compositeData.filtraUsuario){
                switch(viewScope.status) {
                    case "Solicitado":
                        var vw = "vw_parecer_solicitado_usuario"
                        break;
                    ....
                    }
                }
            }else
            var vw= "vw_parecer_minhas_pendencias";

            return vw;}]]>
        </xp:this.viewName>
    </xp:dominoView>

</xp:this.data>


<xp:viewPanel value="#{viewProposta}" rows="20" id="viewPanel1"
    pageName="/xsp_parecer.xsp" viewStyleClass="bloco" var="doc">

    <xp:viewColumn columnName="ds_status" id="viewColumn8"
        style="">
        <xp:this.facets>
            <xp:viewColumnHeader value="" xp:key="header"
                id="viewColumnHeader8" style="text-align:center">
            </xp:viewColumnHeader>
        </xp:this.facets>
        <xp:this.rendered><![CDATA[#{javascript:viewScope.statusVector.length>0}]]></xp:this.rendered>
    </xp:viewColumn>


    <xp:viewColumn columnName="ds_parecer" displayAs="link"
        style="width:18.0%">
        <xp:this.openDocAsReadonly><![CDATA[#{javascript:var valores:java.util.Vector =doc.getDocument().getItemValue("no_destinatarios");
            valores.addAll(doc.getDocument().getItemValue("no_emitente"));
            return !valores.contains(sessionScope.usuarioLogado.nome);}]]></xp:this.openDocAsReadonly>
        <xp:viewColumnHeader style="text-align:center"
            value="Ds_parecer">
        </xp:viewColumnHeader>

        <xp:eventHandler event="onclick" submit="true"
            refreshMode="complete">
            <xp:this.action>
                <xp:actionGroup>
                    <xp:executeScript>
                        <xp:this.script><![CDATA[#{javascript:if(compositeData.filtraEntidade)
                                return sessionScope.retornarPara="/xsp_lista_propostas_unidade.xsp";
                            else
                                return sessionScope.retornarPara="/xsp_lista_propostas.xsp";}]]>
                        </xp:this.script>
                    </xp:executeScript>
                    <xp:openPage target="editDocument"
                        documentId="#{javascript:doc.getDocument().getUniversalID()}">
                        <xp:this.name><![CDATA[#{javascript:return "/xsp_"+doc.getDocument().getItemValueString("form").split("_")[1]+".xsp"}]]></xp:this.name>
                    </xp:openPage>
                </xp:actionGroup>
            </xp:this.action>
        </xp:eventHandler>

    </xp:viewColumn>

    <xp:viewColumn id="viewColumn2" style="width:13%">
        <xp:this.value><![CDATA[#{javascript:
        if(!doc.isCategory()){
            var fk=doc.getDocument().getItemValueString("fk_proposta");
            if(fk == null || fk == "")
                fk = doc.getDocument().getItemValueString("fk_proposta_aux");
            return @DbLookup("","vw_proposta_pesquisa",fk,"ds_proposta");}}]]></xp:this.value>
        <xp:viewColumnHeader id="viewColumnHeader2" value="Proposta"
            style="text-align:center">
        </xp:viewColumnHeader>
    </xp:viewColumn>

    <xp:viewColumn columnName="no_processo_adm" id="viewColumn10"
        style="">
        <xp:this.facets>
            <xp:viewColumnHeader value="No_processo_adm"
                xp:key="header" id="viewColumnHeader10"
                style="text-align:center">
            </xp:viewColumnHeader>
        </xp:this.facets>
    </xp:viewColumn>

    <xp:viewColumn columnName="ds_assunto">
        <xp:this.facets>
            <xp:viewColumnHeader value="Ds_assunto" xp:key="header"
                style="text-align:center">
            </xp:viewColumnHeader>
        </xp:this.facets>
    </xp:viewColumn>
    <xp:viewColumn columnName="unidade_solicitante"
        style="width:8%">
        <xp:viewColumnHeader value="Unidade_solicitante"
            style="text-align:center">
        </xp:viewColumnHeader>
    </xp:viewColumn>
    <xp:viewColumn columnName="no_remetente" id="viewColumn4"
        style="text-align:left">
        <xp:viewColumnHeader value="No_remetente"
            id="viewColumnHeader4" style="text-align:center">
        </xp:viewColumnHeader>
    </xp:viewColumn>

    <xp:viewColumn columnName="ct_posicao_parecer" id="viewColumn3"
        styleClass="centro">

        <xp:this.rendered><![CDATA[#{javascript:viewScope.status=="Concluído"}]]></xp:this.rendered>
        <xp:viewColumnHeader value="Ct_posicao_parecer"
            id="viewColumnHeader3" style="text-align:center">
        </xp:viewColumnHeader>
    </xp:viewColumn>

    <xp:viewColumn columnName="dt_envio" id="viewColumn5"
        styleClass="centro">
        <xp:this.rendered><![CDATA[#{javascript:viewScope.status!="Concluído"}]]></xp:this.rendered>
        <xp:viewColumnHeader value="Dt_envio" id="viewColumnHeader5"
            style="text-align:center">
        </xp:viewColumnHeader>
    </xp:viewColumn>

    <xp:viewColumn columnName="dt_conclusao" id="viewColumn1"
        styleClass="centro">

        <xp:this.rendered><![CDATA[#{javascript:viewScope.status=="Concluído"}]]></xp:this.rendered>
        <xp:viewColumnHeader value="Dt_conclusao"
            id="viewColumnHeader1" style="text-align:center">
        </xp:viewColumnHeader>
    </xp:viewColumn>

    <xp:viewColumn id="viewColumn7" rendered="false">
        <xp:this.value><![CDATA[#{javascript:return ""}]]></xp:this.value>
        <xp:button value="Remover" id="killdoc">
            <xp:eventHandler event="onclick" submit="true"
                refreshMode="partial" refreshId="viewPanel1" id="eventHandler1">

                <xp:this.script>
                    <xp:executeClientScript>
                        <xp:this.script><![CDATA[return window.confirm("Confirma a exclusão?")]]></xp:this.script>
                    </xp:executeClientScript>
                </xp:this.script>

                <xp:this.action><![CDATA[#{javascript:var d:NotesDocument=doc.getDocument();
                    apagarProposta(d);}]]>
                </xp:this.action>
            </xp:eventHandler>
        </xp:button>
        <xp:viewColumnHeader value="" id="viewColumnHeader7"
            rendered="false">
        </xp:viewColumnHeader>
    </xp:viewColumn>
    <xp:this.facets>
        <xp:pager partialRefresh="true" xp:key="headerPager"
            id="pager1" rendered="true" layout="Previous Group Next">
        </xp:pager>
        <xp:pager partialRefresh="true" layout="Previous Group Next"
            xp:key="footerPager" id="pager2">
        </xp:pager>

    </xp:this.facets>
</xp:viewPanel>

xpages lotus-notes
2个回答
4
投票

你的viewPanel中有一些非常“昂贵”的东西

  • @DbLookup
  • doc.getDocument()。getItemValueString(...)
  • doc.getDocument()。getItemValue(...)

试着摆脱它们。

如果您访问底层文档中的字段,这是一个性能杀手。在视图列中包含所有需要的数据会更好。

更糟糕的是@DbLookup。它为视图中的每一行执行另一个视图的调用。尝试从按钮或鼠标悬停中调用@DbLookup。


0
投票

加载的文档数取决于定义的行数。 ViewNavigator功能经过优化,仅显示当前页面的功能以及更多功能。

例外是如果寻呼机将alwaysCalculateLast设置为true。如果是这样,它需要遍历整个视图,以便计算出它需要显示为最后一个的页码。

© www.soinside.com 2019 - 2024. All rights reserved.