2017-09-28 8 views
0

OpenNTF 확장 라이브러리를 통해 명명 된 JDBC 연결을 사용하는 XPage가 있습니다.OpenNTF 드라이버를 통해 XPage의 ViewPanel에서 JDBC 쿼리 용 데이터에 액세스합니다.

데이터를 성공적으로 가져 와서보기 패널에 배치하면 행의 첫 번째 필드 옆에 확인란을 표시하고 해당 행의 해당 필드에 대한 반환 값에 액세스해야합니다 (또는 선택된 행의 배수에 대한 배열).

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: [email protected]: 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, ",")); 

모든 단서 방법 ExternalUNCLink의 반환 값에 액세스 할 수 :

지금까지 이러한 방법을 시도?

경고 : 저는 Domino 개발자가 아니므로 일부 용어가 정확하지 않은 경우 실례합니다.

[편집]

우리가있는 패키지에 사는 JDBC 드라이버 -> 웹 콘텐츠 -> WEB-INF - 테스트의 이름과, ​​따라서 XML 스타일 형식, 네 criterea와> JDBC 폴더 : 당신이 JDB에은 SQLQuery에 대한 값 필드에 viewScope 변수 "은 SQLQuery"를 넣어, 그 후

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

:

<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 쿼리를 위에 표시된 JDBC 드라이버의 connectionName 변수를 사용하는 CQuery 뷰. 데이터를 반환하지만 액세스 할 수 없습니다.

[/ 편집]

[EDIT2]

(개 아침 식사에 대한 사과와 함께 ...)

<?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]

+0

viewPanel은 Notes보기 이외의 표시를 위해 설계되지 않았습니다. 나는 당신이 ViewPanel을 강요하여 SQL 결과를 보여주기 위해 무엇을했는지 궁금합니다. 결국 데이터 테이블을 사용 했습니까? – stwissel

+0

SQL – stwissel

+0

에서 멀리 떨어져 계시다보기 테이블에 SQL 데이터를 보는 방법을 보여주기 위해 업데이트 된 질문 ... – neophytte

답변

0

는 3 개 부분입니다 - 먼저 우리는, 따라서, 체크 상자를 얻을 수 사물의 도미노면을 사용

var Docs2=getComponent("viewPanelDocs"); 
var APKArray=Docs2.getSelectedIds(); 
//getComponent("svDocuments")[email protected](APKArray,","); 

그런 다음 우리가 OpenNTF을 사용하여 "모델

// 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 

그런 다음 우리는 SQL 측의 이름을 참조하고, 새로운 배열에 그것을 넣어,는 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")[email protected](FinalNames,","); 

경로 + 이름은 Docs2 편집 상자에서 끝납니다. 꽤 지저분하지만 작동합니다 (이것이 내주의 사항을 망치지 않기를 바랍니다 !!)

1

당신은 ViewPanel있을 때 Notes View에 링크 된 viewPanel 객체의 getSelectedIds() 메소드를 사용하여 선택한 문서를 찾을 수 있습니다.

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의 사용 사례에 대해 작동 할 수 있음 : 그런 다음 loop through the values 문서 및 자신의 전체 URL을 얻을 수 있습니다. 그것은 내 질문에 대한 답처럼 보이는

+0

답변을 감사하지만 "데이터베이스" 변수 - 코드에서 "doc"이 null임을 나타냅니다. JavaScript 액션 식을 실행하는 중 오류가 발생했습니다. 스크립트 인터프리터 오류, 줄 = 23, 열 = 36 : 'doc'가 null입니다. – neophytte

+0

데이터베이스가 전역 변수입니다. 그러나 뷰 패널을 단순히 뷰에 바인딩하면 안된다고 생각합니다. 따라서 실제 xpage 소스로 질문을 업데이트하십시오. 그렇지 않으면 우리는 짐작 게임을합니다. – stwissel

+0

넣어 줘서 고맙겠지 만, 약간의 찹 - 가게 일, 나는 그것을 가장 원시적 인 형식으로했습니다 ... – neophytte