2013-05-16 26 views
0

您好堆棧溢出社區...試圖算SharePoint列表值用JavaScript

感謝所有的你到目前爲止,即使我從來沒有在網站上公佈所提供的幫助。我是一名初學者......所以這意味着我已經開始工作的大部分東西都是在試圖將一個方形釘子推入圓孔中多次計算,直到最後邊緣磨損到足以適合它...

無論如何...由於今天()與SharePoint的問題,需要根據當前的日期/時間比較數據我一直在努力寫我自己的代碼並顯示數據,因爲我想到我也可以訪問的SharePoint網站。

到目前爲止,我所擁有的一切如預期運行一個小瑕疵......

我無法弄清楚如何計算價值,即使我可以在兩個值之間進行比較。我認爲這與如何從SharePoint列表行中檢索數據並將其附加到HTML表格有關。是

相關的代碼段如下:

$(document).ready(function() { 
    $().SPServices({ 
    operation: "GetListItems", 
    async: false, 
    CAMLRowLimit: 20, 
    listName: "Announcements", 
    completefunc: FirstFunc 
    }); 
}); 

function FirstFunc(xData, Status) { 
var index = 0; 
$documentListtable = $("#tableFirstFunc"); 

$(xData.responseXML).find("z\\:row, row").each(function() { 


var LOTOSPLink =$(this).attr("ows_LOTODocLink"); 
var _Title = $(this).attr("ows_Title"); 
var ahref = "<a href='" + LOTOSPLink + "'>"; 
var anchor = "</a>" 
var Titles = ahref + _Title + anchor 

    //Start of AReview 

var _AReview = $(this).attr("ows_AReview"); 
var astartDateTime = $(this).attr("ows_AReview"); 
var astartDate = $(this).attr("ows_AReview").split(" ")[0]; 
var astartTime = $(this).attr("ows_AReview").split(" ")[1]; 

var astartDateParts = astartDate.split("-"); 
var aSPDYear = astartDateParts[0]; 
var aSPDMonth = astartDateParts[1]; 
var aSPDDay = astartDateParts[2]; 

var aSPDJoin = aSPDMonth+'/'+aSPDDay+'/'+aSPDYear; 

var astartTimeParts = astartTime.split(":"); 
var aSPTHour = astartTimeParts[0]; 
var aSPTMin = astartTimeParts[1]; 
var aSPTSec = astartTimeParts[2]; 

    //Combine SharePoint Date & Time split parts back together in JS Date Object 
       //format and than convert to millisecons to compare dates 

     var aReviewGraphic = "" 
    if(aSPDTValue === 18000000) { 
    aReviewGraphic="<img src="sites/Somesite/NAGlassyButton20.png>"; 
    } 
    else if(aSPDTValue >= firstDCMonth && aSPDTValue < lastDCMonth) { 
    aReviewGraphic="<img src="/sites/Somesite/GreenButtNew20.png>"; 
    } 
    else if(aSPDTValue >= firstDCYear && aSPDTValue < firstDCMonth) { 
    aReviewGraphic="<img src="/sites/Somesite//GreenButtOld20.png>"; 
    } 
    else if(aSPDTValue < firstDCYear) { 
    aReviewGraphic="<img src="/sites/Somesite/RedButt20.png>"; 
    } 

var $row = $("#templates").find(".row-template").clone(); 

$row.find(".Titles").html(Titles); 
$row.find(".aReviewGraphic").html(aReviewGraphic); 
$row.find(".bReviewGraphic").html(bReviewGraphic); 
$row.find(".cReviewGraphic").html(cReviewGraphic); 
$row.find(".dReviewGraphic").html(dReviewGraphic); 
$row.find(".NewModiDReviewGraphic").html(NewModiDReviewGraphic); 

$documentListtable.append($row); 

}); 

} 

我改變如預期表中的圖形,根據需要被顯示的數據......但我無法弄清楚如何執行計數。好像這些行一次只能讀取一個,並且一個接一個地放入HTML表中,並且所有的比較都是逐行進行的。我說這是因爲我的警報(消息)正在觸發從Sharepoint列表中拉入的每行數據。

是否有存儲在本地數組中此數據的方式......肯定有一些方法來做到這一點,但我有足夠的這個新的,我甚至不知道正確的問題要問...

此外,if語句中的18000000是我目前使用的1/1/1970測試日期,因爲我發現任何在sharepoint列表中空白的字段都會導致查詢退出之後返回任何行那。我的解決方案是使用1/1/1970作爲默認值,並使用它與留空字段相同。我相信,這是一個粗略的方法來解決一個容易解決的問題,但這是我能想到的。

任何幫助,將不勝感激...... 史蒂夫

回答

0

我試着去了解...我的建議是,所有的HTML存儲到一個變量,然後將代碼注入到表中。

// somewhere you should have your HTML code 
// <table id="templates"></table> 

$(document).ready(function() { 
    $().SPServices({ 
    operation: "GetListItems", 
    async: false, 
    CAMLRowLimit: 20, 
    listName: "Announcements", 
    completefunc: FirstFunc 
    }); 
}); 

function FirstFunc(xData, Status) { 
    var index = 0; 
    $documentListtable = $("#tableFirstFunc"); 
    // create a variable where to store the html code 
    var htmlData = ""; 
    // go thru the data received by the query 
    $(xData.responseXML).find("z\\:row, row").each(function() { 
    // we look at one row 
    var LOTOSPLink =$(this).attr("ows_LOTODocLink"); 
    var _Title = $(this).attr("ows_Title"); 
    var ahref = "<a href='" + LOTOSPLink + "'>"; 
    var anchor = "</a>" 
    var Titles = ahref + _Title + anchor 

    //Start of AReview 
    var _AReview = $(this).attr("ows_AReview"); 
    var astartDateTime = $(this).attr("ows_AReview"); 
    var astartDate = $(this).attr("ows_AReview").split(" ")[0]; 
    var astartTime = $(this).attr("ows_AReview").split(" ")[1]; 

    var astartDateParts = astartDate.split("-"); 
    var aSPDYear = astartDateParts[0]; 
    var aSPDMonth = astartDateParts[1]; 
    var aSPDDay = astartDateParts[2]; 

    var aSPDJoin = aSPDMonth+'/'+aSPDDay+'/'+aSPDYear; 

    var astartTimeParts = astartTime.split(":"); 
    var aSPTHour = astartTimeParts[0]; 
    var aSPTMin = astartTimeParts[1]; 
    var aSPTSec = astartTimeParts[2]; 

    //Combine SharePoint Date & Time split parts back together in JS Date Object 
    //format and than convert to millisecons to compare dates 

    var aReviewGraphic = ""; 
    // I don't understand why you use this variable that hasn't been initialized... 
    if (aSPDTValue === 18000000) { 
     aReviewGraphic='<img src="sites/Somesite/NAGlassyButton20.png>'; 
    } 
    else if(aSPDTValue >= firstDCMonth && aSPDTValue < lastDCMonth) { 
     aReviewGraphic='<img src="/sites/Somesite/GreenButtNew20.png>'; 
    } 
    else if(aSPDTValue >= firstDCYear && aSPDTValue < firstDCMonth) { 
     aReviewGraphic='<img src="/sites/Somesite//GreenButtOld20.png>'; 
    } 
    else if(aSPDTValue < firstDCYear) { 
     aReviewGraphic='<img src="/sites/Somesite/RedButt20.png>'; 
    } 

    htmlData += '<tr><td class="Titles">'+Titles+'</td><td class="aReviewGraphic">'+aReviewGraphic+'</td><td class="bReviewGraphic">'+bReviewGraphic+'</td><td class="cReviewGraphic">'+cReviewGraphic+'</td><td class="dReviewGraphic">'+dReviewGraphic+'</td><td class="NewModiDReviewGraphic">'+NewModiDReviewGraphic+'</td></tr>'; 

    // you can increment your index if you want 
    index++; 
    }); 

    alert("There are "+index+" rows"); 
    // add the HTML data into the table 
    $documentListtable.append(htmlData); 
} 
+0

對不起,關於未定義的變量,當我複製和粘貼我的代碼的部分我離開了兩行。右下面的「if語句前的註釋行有: – Steve

+0

VAR aSPDTtoJSDT =新的日期(aSPDYear,(aSPDMonth - 1),aSPDDay,aSPTHour,aSPTMin,aSPTSec,00);
\t VAR aSPDTValue = aSPDTtoJSDT.valueOf() ; – Steve

+0

我會讓你知道這是否工作到目前爲止,我還沒有能夠以這種方式得到這個附加到我的表中的索引++正在工作,並提醒我行數(感謝那:D )但是數據沒有顯示出來 – Steve