2016-07-25 3 views
0

リピートコントロールでビューのサブセットを表示しようとしましたが、NotesViewEntryCollectionを取得してこのコレクションをループし、配列には、エントリ内の列値に対応する配列が含まれます。 'はjava.lang.String型'リピートコレクション内の文字列を返す配列の配列にバインドされた反復コントロール

不明なメンバー '0' Javaクラスで: <xp:text escape="true" id="computedField1" value="#{javascript:rowData[rowIndex][0]}"></xp:text>

エラーは次のとおりです。

<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
    <xp:repeat id="repeat1" rows="30" var="rowData" indexVar="rowIndex"> 
     <xp:this.value><![CDATA[#{javascript: 
      var view:NotesView = database.getView("CatalogEntries"); 
      var entryColl:NotesViewEntryCollection = view.getAllEntriesByKey(compositeData.catalog, true); 
      if (entryColl.getCount() == 0) return ["empty"]; 
      var entries = []; 
      var columnVals = []; 
      var entry:NotesViewEntry = entryColl.getFirstEntry(); 
      do { 
       columnVals = []; 
       columnVals.push(entry.getColumnValues()[0]); 
       columnVals.push(entry.getColumnValues()[1]); 
       columnVals.push(entry.getColumnValues()[2]); 
       columnVals.push(entry.getColumnValues()[3]); 
       columnVals.push(entry.getColumnValues()[4]); 
       columnVals.push(entry.getColumnValues()[5]); 
       entries.push(columnVals); 
       entry = entryColl.getNextEntry(entry); 
      } while(!(entry == null)) 
      return entries;}]]></xp:this.value> 
     <xp:text escape="true" id="computedField1" value="#{javascript:rowData[rowIndex][0]}"></xp:text> 
    </xp:repeat> 
</xp:view> 

しかし、私は、この行でエラーを取得しています

私はこれをどのように修正することができますか?

答えて

2

する必要があります私は、これができると感じていない - 何のはず! - 単純化する。基本的な考え方は、あなたがrepeatオブジェクトにというように、DominoビューのデータソースまたはNotesViewEntryCollectionオブジェクトのいずれかを供給することができるということです。このようにして、単一のNotesViewEntryオブジェクトを表すrowDataになります。 computedField値は、エントリのcolumnValuesベクトルから任意の要素を直接参照できます。この方法では、オブジェクトをリサイクルする必要はありません。

<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
    <xp:this.data> 
     <xp:dominoView var="myView" viewName="CatalogEntries" keys=compositeData.catalog keysExactMatch="true"> 
     </xp:dominoView> 
    </xp:this.data> 
    <xp:repeat id="repeat1" rows="30" var="rowData" value="#{myView}"> 
     <xp:panel id="pnInner"> 
      <xp:text escape="true" id="computedField1"> 
       <xp:this.value><![CDATA[#{javascript: 
        if(rowData){ 
         return rowData.getColumnValues()[0].toString(); 
        }else{ 
         return "empty"; 
        }}]]> 
       </xp:this.value> 
      </xp:text> 
     </xp:panel> 
    </xp:repeat> 
</xp:view> 

ビューデータのフィルタリングは、データソースレベルで行われます。

+1

私はロタールと完全に同意します。 dominoViewは 'keys'プロパティを設定していますが、ViewNavigatorを使用し、実行時にViewNavigatorを使用してパフォーマンスを向上させ、ビューエントリとビューエントリ値の両方をリサイクルしますViewEntryのリサイクル時に自動的にリサイクルされないDate/Timesを含みます)。 ViewEntriesを手動で反復するのは、絶対に必要なときだけです。 'getColumnValues()'は全てのカラム値を抽出しなければならないので、もしあなたが1つのカラムだけを必要としていても、実際にそれらをすべて取得する必要があります。 –

+0

このアプローチに完全に同意します。どうもありがとうございました! – jpishko

0

プッシュメソッドでは、配列インデックスを渡すことはありません。

columnVals.push(entry.getColumnValues()[0]); 

columnVals.push(entry.getColumnValues()); 

ハワード

+0

また、ノートビューをループする際には必ずリサイクルしてください! – Howard

関連する問題