获取面板内的文档,该面板位于重复控件外部的重复控件内

时间:2013-11-19 19:26:35

标签: xpages document repeat

我正在研究这个功能,我需要为用户提供一个文档列表,并为用户提供一个选项,让用户可以更改/添加这些文档中的字段。我正在通过这个例子Xpages - Display filtered Document Collection in a repeat control并做了类似的实现并让它发挥作用。所以我现在拥有的是一个重复内部的面板,其数据源设置为表单和文档ID设置为返回重复控制变量中的值(这是文档集合中的文档UNID),因此我能够使用面板中定义的数据源将字段直接绑定到这些文档。挑战在于我想获取这些文档的句柄以在其中设置特定值,并将值保存在我绑定到后端文档的字段中。有没有办法可以从重复控件外部访问文档(比如点击按钮)?以下是重复的代码:

    <xp:repeat id="rptApprDocuments" rows="30" var="apprDoc"
            indexVar="docIndex" first="0">
            <xp:this.value><![CDATA[#{javascript:// Look up the employee details view to get the employee appraisal details from the current database
    var curDB:NotesDatabase = session.getCurrentDatabase();
    var vwlkApprView:NotesView = curDB.getView("vwlkApprAllFGCompAppr");
    var collDocAppr:NotesDocumentCollection = vwlkApprView.getAllDocumentsByKey(sessionScope.key);
    var apprDocCount = collDocAppr.getCount();
    if(apprDocCount != 0){
        var docAppr:NotesDocument;
        var docUNIDArray = new Array();
        for(i=0;i<apprDocCount;i++){
            docAppr = collDocAppr.getNthDocument(i+1);
            //print(docAppr.getUniversalID());
            docUNIDArray.push(docAppr.getUniversalID());                        
        }
        viewScope.put("docUNIDArray",docUNIDArray);
        return docUNIDArray;
        /*return collDocAppr;
        /return sortColByItemName(collDocAppr, "AppraiseeCWLCluster");*/        
    }
return null;

]]></xp:this.value>
            <xp:panel id="pnlRR">
                <xp:this.data>
                    <xp:dominoDocument formName="frmAppraisal" var="appraisalDoc"
                        action="editDocument" ignoreRequestParams="true">
                        <xp:this.postSaveDocument><![CDATA[#{javascript:if(requestScope.SubmitRR == true){
    appraisalDoc.setValue("ApperRRStatus","1");
    appraisalDoc.save();
}}]]></xp:this.postSaveDocument>
                        <xp:this.documentId><![CDATA[#{javascript://apprDoc.getUniversalID();
return apprDoc;}]]></xp:this.documentId>
                    </xp:dominoDocument>
                </xp:this.data>
                <xp:tr>
                    <xp:td styleClass="tdCls" style="width:2%">
                        <xp:label id="SrNo">
                            <xp:this.value><![CDATA[#{javascript:var index = parseInt(docIndex)
index = index + 1;
index.toString();}]]></xp:this.value>
                        </xp:label>
                    </xp:td>
                    <xp:td styleClass="tdCls" style="width:20.0%">
                        <xp:label id="ApeName">
                            <xp:this.value><![CDATA[#{javascript://return apprDoc.getItemValueString("AppraiseeName");
return appraisalDoc.getItemValueString("AppraiseeName");}]]></xp:this.value>
                        </xp:label>
                    </xp:td>
                    <xp:td styleClass="tdCls" style="width:8.0%">
                        <xp:label id="ApeGrade">
                            <xp:this.value><![CDATA[#{javascript://return apprDoc.getItemValueString("Appraisee_Grade");
return appraisalDoc.getItemValueString("Appraisee_Grade");}]]></xp:this.value>
                        </xp:label>
                    </xp:td>
                    <xp:td styleClass="tdCls" style="width:15.0%">
                        <xp:div style="text-align:center">
                            <xp:label id="appeTotImpRate"
                                style="font-size:10pt;color:rgb(255,0,0);font-weight:bold">
                                <xp:this.value><![CDATA[#{javascript://return apprDoc.getItemValueDouble("AppeTotImpRate").toFixed(2);
return appraisalDoc.getItemValueDouble("AppeTotImpRate").toFixed(2);}]]></xp:this.value>
                            </xp:label>
                        </xp:div>
                    </xp:td>
                    <xp:td styleClass="tdCls" style="width:15.0%">
                        <xp:div style="text-align:center">
                            <xp:label id="apprTotImpRate"
                                style="color:rgb(255,0,0);font-size:10pt;font-weight:bold">
                                <xp:this.value><![CDATA[#{javascript://return apprDoc.getItemValueDouble("ApprTotImpRate").toFixed(2);
return appraisalDoc.getItemValueDouble("ApprTotImpRate").toFixed(2);}]]></xp:this.value>
                            </xp:label>
                        </xp:div>
                    </xp:td>
                    <xp:td styleClass="tdCls" style="width:15.0%">
                        <xp:div style="text-align:center">
                            <xp:label id="revTotImpRate"
                                style="font-size:10pt;color:rgb(255,0,0);font-weight:bold">
                                <xp:this.value><![CDATA[#{javascript://return apprDoc.getItemValueDouble("RevTotImpRate").toFixed(2);
return appraisalDoc.getItemValueDouble("RevTotImpRate").toFixed(2);}]]></xp:this.value>
                            </xp:label>
                        </xp:div>
                    </xp:td>
                    <xp:td styleClass="tdCls" style="width:12.0%">
                        <xp:div
                            style="font-size:10pt;color:rgb(255,0,0);font-weight:bold;text-align:center">
                            <xp:comboBox id="apprGrades" style="width:50.0px"
                                disableClientSideValidation="true" value="#{appraisalDoc.ApperFinalGrade}"
                                readonly="true">
                                <xp:selectItem itemLabel="-" itemValue=""
                                    id="selectItem1">
                                </xp:selectItem>
                                <xp:selectItem itemLabel="1" itemValue="1"
                                    id="selectItem2">
                                </xp:selectItem>
                                <xp:selectItem itemLabel="2" itemValue="2"
                                    id="selectItem3">
                                </xp:selectItem>
                                <xp:selectItem itemLabel="3" itemValue="3"
                                    id="selectItem4">
                                </xp:selectItem>
                                <xp:selectItem itemLabel="4" itemValue="4"
                                    id="selectItem5">
                                </xp:selectItem>
                                <xp:selectItem itemLabel="5" itemValue="5"
                                    id="selectItem6">
                                </xp:selectItem>
                            </xp:comboBox>
                        </xp:div>
                    </xp:td>
                    <xp:td styleClass="tdCls" style="width:12.0%">
                        <xp:div
                            style="font-size:10pt;color:rgb(255,0,0);font-weight:bold;text-align:center">
                            <xp:comboBox id="ApperRelativeRank" style="width:50.0px"
                                disableClientSideValidation="true" value="#{appraisalDoc.ApperRelativeRank}">
                                <xp:this.readonly><![CDATA[#{javascript:/*if(compositeData.UserRole == "Appraiser"){
    return true;
}
if(parseInt(appraisalDoc.getValue("CurrFGRRStatus")) >= parseInt(compositeData.compStatus)){
    return true;
}*/
return false;}]]></xp:this.readonly>
                                <xp:this.rendered><![CDATA[#{javascript:/*if(compositeData.UserRole == "Appraiser"){
    return false;
}*/
return true;}]]></xp:this.rendered>
                                <xp:selectItem itemLabel="-" itemValue=""
                                    id="selectItem13">
                                </xp:selectItem>
                                <xp:selectItems>
                                    <xp:this.value><![CDATA[#{javascript:// Look up the employee details view to get the employee appraisal details from the current database
    var curDB:NotesDatabase = session.getCurrentDatabase();
    var vwlkApprView:NotesView = curDB.getView("vwlkCWLApprAllFGCompAppr");
    var cwlCluster = appraisalDoc.getItemValueString("AppraiseeCWLCluster");
    var collEntAppr:NotesViewEntryCollection = vwlkApprView.getAllEntriesByKey(sessionScope.key + cwlCluster);
    var entCount = collEntAppr.getCount() 
    if(entCount != 0){
        var ranks = new Array();
        var rankValue, rankLabel;
        for(i=0;i<entCount;i++){
            rankValue = i + 1;
            rankLabel = rankValue + "/" + entCount;
            ranks.push(rankLabel + "|" + rankValue);
        }
        return ranks;
    }
return null;}]]></xp:this.value>
                                </xp:selectItems>
                            </xp:comboBox>
                        </xp:div>
                    </xp:td>
                </xp:tr>
            </xp:panel>
        </xp:repeat>

1 个答案:

答案 0 :(得分:0)

您可以访问面板的数据源,有关示例代码,请参阅http://xpageswiki.com/web/youatnotes/wiki-xpages.nsf/dx/Work_with_datasources#Reset+%2F+clear+a+datasource

但这只解决了问题的一半,你需要一个句柄来处理转发器内的每个面板。 你可以在openNTF上找到一个XPages API浏览器(我现在还不知道确切的名字)。考虑到这一点,您可以在运行时检查重复控件并检查方法和属性。我敢打赌,有一些东西可以让转发器内部的组件。