代码之家  ›  专栏  ›  技术社区  ›  neophytte

通过OpenNTF驱动程序访问XPage上ViewPanel中JDBC查询的数据

  •  0
  • neophytte  · 技术社区  · 7 年前

    这将成功地检索数据并将其放置在视图面板中,我已选择在行中第一个字段旁边显示一个复选框,并需要访问该行中该字段的返回值(或选定行的倍数的数组)。

    到目前为止,已经尝试了以下方法:

    var Docs2=getComponent("viewPanelDocs");
    //var db2 = Docs2.getAttributes();
    //var doc2Array=Docs2.getSelectedIds();
    //var test = getComponent("something");
    var p=Docs2.getParent()
    var pp=something.getColumnValue("extName")
    var Rows = Docs2.getChildCount().valueOf();
    var doc2Array= new Array();
    var SelectedDocs2 = new Array();
    for(i=0; i < Rows; i++) {
            // Works, no output: var Selected2Docs=Docs2.getAttributes();
            // FAILS: var Selected2Docs=Docs2_xspGetRendererData();
            // WORKS, no output: var Selected2Docs=Docs2._xspGetRendererData();
            // WORKS, gets local ID of viewPanel: var Selected2Docs=Docs2.getId();
            // Works: javax.faces.component.UIComponentBase$AttributesMap@0: var Selected2Docs=Docs2.getAttributes();
            // FAILS, doesn't like string: var Selected2Docs=Docs2.getAttributes("ExternalUNCLink");
            // WOrks, no output: var Selected2Docs=Docs2.getAttributes().get("ExternalUNCLink");
            // Fails, something, something: var Selected2Docs=Docs2.getAttributes().values("ExternalUNCLink");
            var Selected2Docs=Docs2.toString().valueOf();
            doc2Array.push(Selected2Docs);
    }
    getComponent("Docs2").value=Rows + ": " + @Implode(doc2Array, ",");
    //viewScope.put("Documents", @Implode(docArray, ","));
    

    有没有关于如何访问externalunlink的返回值的线索?

    警告:我不是Domino开发人员,如果有些术语不正确,请原谅。

    我们有一个JDBC驱动程序,它位于包中->Web内容->WEB-INF->具有XML样式格式的测试名称和四个标准的jdbc文件夹,因此:

    <jdbc>
        <driver>net.sourceforge.jtds.jdbc.Driver</driver>
        <url>jdbc:jtds:sqlserver://malbec/aps_dsql</url>
        <user>user</user>
        <password>pass</password>
    </jdbc>
    

    然后在页面上的afterPageLoad事件中有一个SQL查询:

    var TmpSql="select * from TABLE"
    viewScope.put("SQLQuery", TmpSql );
    getComponent("strSQLQuery").value=TmpSql;
    

    [/编辑]

    [编辑2]

    <?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">
    
        <xp:this.afterPageLoad><![CDATA[#{javascript:var TmpSql="select A.extName,A.extUNC,A.extObjInstID,LEFT(A.extUNC,5) as Category, B.cltMailName From cdblink A inner join cdbClientMaster B on A.extobjinstid=B.objInstID where extobjectid=1 and extobjinstid in (1536,1871,632)"
    viewScope.put("strSQLQuery", TmpSql);
    getComponent("strSQLQuery").value=TmpSql;
    getComponent('viewPanelDocs').getData().refresh();
    }]]></xp:this.afterPageLoad>
        <xc:testjdbcrowdataaccess></xc:testjdbcrowdataaccess>
        <xp:br></xp:br>
        <xp:br></xp:br>
        <xp:button value="Label" id="button1">
            <xp:eventHandler event="onclick" submit="true"
                refreshMode="complete">
                <xp:this.action><![CDATA[#{javascript:
    // --var vp=getComponent("viewPanelDocs");
    // --
    // --//var test=vp._xspGetRendererData().getParent();
    // --//var test=vp._xspGetStateId().valueOf();
    // --//var test= vp.getChildren().lastIndexOf();
    // --var test= vp.getChildren().size();
    // --var test=vp.getChildCount();
    // --var test=vp._xspGetStateId().valueOf();
    // --//var test=vp._xspGetReadOnlyObj().hashCode();
    // --//var test=vp.getAttributes().get();
    // --var test=vp.getFamily().valueOf();
    // --var test=vp.getParent();
    // --
    // --getComponent("Test").value=test.toString();
    
    //var database=mssql_test.jdbc;
    //
    //var viewPanel=getComponent("viewPanelDocs");// get the componet of viewPanel
    //var docIDArray=viewPanel.getSelectedIds(); //get the array of document ids
    //for(i=0; i < docIDArray.length; i++){
     //   var docId=docIDArray[i];
      //  var doc=database.getDocumentByID(docId); 
        // .. your code to deal with the selected document
    
    //    getComponent("Test").value=doc.toString();
    //}
    
    var test = getComponent("viewPanelDocs").value;
    @ErrorMessage("ID: "+test);}]]></xp:this.action>
            </xp:eventHandler></xp:button>
        <xp:br></xp:br>
        <xp:br></xp:br>
        <xp:br></xp:br><xp:table id="DEBUG" style="width:100%">
            <xp:tr>
                <xp:td>inputText2</xp:td>
                <xp:td>
                    <xp:inputText id="inputText2" value="#{viewScope.searchDOCID}" style="width:100%">
                        <xp:eventHandler event="onfocus" submit="true" refreshMode="complete" id="eventHandler2">
                            <xp:this.action>
                                <![CDATA[#{javascript:
                                    var viewPanel:com.ibm.xsp.component.xp.XspViewPanel = getComponent('viewPanel2');
                                    var dominoView:com.ibm.xsp.model.domino.DominoViewData = viewPanel.getData();
                                    var filterValue = getComponent('inputText2').getValue();
                                    if (filterValue == 'NA') {
                                    filterValue = '';}
                                    viewScope.clear()
                                    dominoView.setKeys(filterValue);}]]>
                            </xp:this.action>
                        </xp:eventHandler>
                    </xp:inputText>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>inputText3 (displayvar)</xp:td>
                <xp:td>
                    <xp:inputText id="inputText3" value="#{viewScope.documentDOCID}" style="width:100%">
                    </xp:inputText>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>Test</xp:td>
                <xp:td>
                    <xp:inputText id="Test" style="width:100%" value="#{viewScope.test}">
                    </xp:inputText>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>inputText1</xp:td>
                <xp:td>
                    <xp:inputText id="inputText1" style="width:100%"></xp:inputText>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>inputText4</xp:td>
                <xp:td>
                    <xp:inputText id="inputText4" style="width:100%"></xp:inputText>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>SQLQuery</xp:td>
                <xp:td>
                    <xp:inputText id="strSQLQuery" style="width:100%" defaultValue="strSQLQuery">
                    </xp:inputText>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>SQLQueryCat</xp:td>
                <xp:td>
                    <xp:inputText id="strSQLQueryCat" style="width:100%">
                    </xp:inputText></xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>Doc1</xp:td>
                <xp:td>
                    <xp:inputText id="Docs" style="width:100%">
    </xp:inputText>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td style="width:15%">Doc2</xp:td>
                <xp:td>
                    <xp:inputText id="Docs2" style="width:100%"></xp:inputText>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>scopeVariable.Documents</xp:td>
                <xp:td>
                    <xp:inputText id="svDocuments" style="width:100%"></xp:inputText>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>scopeVariable.Recipients</xp:td>
                <xp:td>
                    <xp:inputText id="svRecipients" style="width:100%"></xp:inputText>
                </xp:td>
            </xp:tr>
        </xp:table></xp:view>
    

    [/EDIT2]

    2 回复  |  直到 7 年前
        1
  •  1
  •   stwissel    7 年前

    当你有一个 ViewPanel 如果链接到Notes视图,则可以使用 getSelectedIds() 方法。然后你可以 loop through the values

    var viewPanel=getComponent("viewPanel1");get the componet of viewPanel
    var docIDArray=viewPanel.getSelectedIds(); get the array of document ids
    for(i=0; i < docIDArray.length; i++){
        var docId=docIDArray[i];
        var doc=database.getDocumentByID(docId); 
        // .. your code to deal with the selected document
    }
    

    可能也适用于您的JDBC用例。

        2
  •  0
  •   neophytte    7 年前

    var Docs2=getComponent("viewPanelDocs");
    var APKArray=Docs2.getSelectedIds();
    //getComponent("svDocuments").value=@Implode(APKArray,",");
    

    // get the Array from the SQL selection
    var namesArray=[];
    var PathArray=[];
    var locationArray = [];
    var FinalNames=[];
    var FinalLocations=[];
    
    var Model:com.ibm.xsp.component.xp.XspViewColumn = getComponent("xxxviewColumn3");
    var modelData=Model.getDataModel();
    var Rows = Model.getChildCount().valueOf();
    namesArray.push(Rows);
    for(i=0; i < modelData.getRowCount(); i++) {
        modelData.setRowIndex(i);
        var x=modelData.getRowIndex();
        var y=modelData.getRowData().getColumnValue("ExternalName").toString();
        var z=modelData.getRowData().getColumnValue("ExternalUNCLink").toString();
        namesArray.push(x);
        locationArray.push(y);
        PathArray.push(z);
    }                       
    //getComponent("Docs2").value=namesArray
    

    然后,我们使用Domino端的索引来引用SQL端的名称,并将其放入一个新数组中:

    // put the selected docs in the selected array
    
    for(i=0; i < APKArray.length; i++) {
        var z = APKArray[i].valueOf();
        FinalNames.push(PathArray[z].valueOf() + "\\" + locationArray[z].valueOf())
        //FinalLocations.push(locationArray[z].valueOf())
    }
    
    getComponent("Docs2").value=@Implode(FinalNames,",");
    

    路径+名称最终出现在Docs2编辑框中。它很凌乱,但有效(我希望这不会破坏我的警告!!)