2016-07-28 16 views
0

在Xpage中,它將顯示軍官姓名,軍官類型和部門(我使用sessionScope變量來做到這一點)。有一個combobox允許用戶選擇用戶想要比較的軍官類型 。然後一個按鈕用於導出數據。Xpages:如何在導出數據時使用viewEnt.getColumnValues()來檢索所有相關的值?

導出數據將顯示所選人員類型需要閱讀的文檔與當前人員已閱讀的文檔之間的比較。 如果官員已經閱讀文件,所選擇的官員類型匹配需要讀取,它會顯示「文件已被閱讀」,否則會 秀「文件並沒有讀」

由於這個職位export data from panel讓我知道如何從面板導出數據,我開始關注帖子中的代碼並修改一些代碼以滿足用戶需求。

我有兩個觀點做了比較:

每個軍官類型需要讀取各種文件,所以存儲的值來看,第一列是官型,而第二列是文件 官員類型應該閱讀。第二列是多值字段,我可以將多值分隔符設置爲新行。

另一種觀點的包括官員的姓名,相關人員類型和文件由官員讀。(多值沒有列)

我用@DbLookupfor循環做比較,這裏是部分代碼:

var officer = sessionScope.Officer; 
var officerType = sessionScope.OfficerType; 
var showSelectedTypeDoc = @DbLookup(@DbName(),"view1", officerType, 2); 
var showUserHasReadDoc= @DbLookup(@DbName(),"view2", officer, 3); 
var result = ""; 

while (viewEnt != null) 
{ 
    if(viewEnt.getColumnValues()[1] == officer) //get the value related to the officer in the session 
    { 
     writer.write("<tr>"); 
     for(var s = 0; s < showSelectedTypeDoc.length;s++) //loop in view1 first 
     { 
      for(var r = 0; r < showUserHasReadDoc.length;r++)//then loop the view2 
      { 
       if(showSelectedTypeDoc[s] == showUserHasReadDoc[r])//if value matches between 2 views 
       { 
        result = "Document has been read"; 
       } 
       else 
       { 
        result = "Document has not read"; 
       } 
      } 
     } 
     //display the list of the document category related to specific officer type 
     writer.write("<td>" + viewEnt.getColumnValues()[2] + "</td>"); //Problem occurs here, it only shows the first value, the appearance depends on the loop 
     writer.write("<td>" + result+ "</td>"); // only display the else part 
     writer.write("</tr>"); 
    } 
} 

其實我想

viewEnt.getColumnValues()[2] 

將顯示所有相關值,但是當我導出該值時,它僅顯示第一個值,例如[第一個值]。 代碼

writer.write("<td>" + result+ "</td>"); 

我檢討,如果條件下,它應該是很好,但它只能說明其他部分

我試過的

viewEnt.getColumnValues()[2] 

showSelectedTypeDoc[s] 

代替它顯示未定義,外觀取決於循環。

但如果我嘗試

showSelectedTypeDoc[0] //or showSelectedTypeDoc[1], etc 

它可以顯示正確的價值和外觀取決於循環。

不過,我不會知道存儲着的變量有多少價值,所以我更喜歡

showSelectedTypeDoc[s] 

找到所有相關的值,但沒有成功。

我開始思考它爲什麼只顯示第一個值。我修改代碼和視圖,我想可能是多值列導致問題。這是因爲在Louts Client中,在視圖中我只點擊一次以獲得特定值,如果該值具有多個值,則會向相關數據顯示「打勾」符號。

所以我想知道如何使用

viewEnt.getColumnValues()[2] 

檢索所有與特定值的數據。感謝您的建議。謝謝。

+0

在'writer.write( 「​​」+ viewEnt.getColumnValues()[2] +「 」);',我試圖'writer.write(「​​」+ showSelectedTypeDoc.length +「」); '。它可以在視圖中顯示正確的長度。 – beginner

+0

但是,如果我嘗試'writer.write(「​​」+ showSelectedTypeDoc +「」);',當我導出數據時,它顯示奇怪的結果。它顯示'<<<<<'',並且該位置與相關列不匹配。 – beginner

+0

我讀過這篇文章[小心getColumnValue返回什麼](http://linqed.eu/2010/08/16/beware-of-what-getcolumnvalue-is-returning/)。我在應用程序中應用了代碼,當我導出數據時,結果爲空。 – beginner

回答

1

getColumnsValues()返回一個Java向量。因此,獲取Vector中特定元素所需的語法是getColumnValues().get(2)(這將獲得第三列)。

獲取列值不需要對其進行分類。分類僅用於檢索條目,而不是列值。

我相信當使用索引時,會跳過靜態列(例如,公式設置爲靜態值,如1"<tr>")。

+0

需要牢記一點,一旦你有它的工作。 1)@DbLookup是獲取條目的最低性能方法。公式語言在Notes Client中可能最快,但在XPages中,它需要路由到底層Java函數('View.getAllEntriesByKey()'),並且每個參數都需要解析和轉換。最好直接進入'getAllEntriesByKey()'。 2)查看條目應循環循環。有各種各樣的問題和博客文章。另外,如果視圖包含日期列,則還應該回收'getColumnValues()'對象。 –

+0

保羅是絕對正確的。您目前的方法爲表格中的每一行都執行@DbLookup。不是一個好主意。使用getAllEntriesByKey進行一次查找,將unid加載到JS對象中並進行比較 – stwissel

相關問題