2013-05-16 2 views
0

안녕하세요 스택 오버플로 커뮤니티 ...JavaScript로 SharePoint 목록 값을 계산하려고합니다.

이 사이트에 게시 한 적은 없지만 지금까지 제공해 주신 모든 도움에 감사드립니다. 나는 초급자이다. 그래서 나는 내가 일한 물건의 대부분이 둥근 구멍에 정사각형 못을 박는 것을 시도한 후에 너무 많은 시간을 세어 마침내 가장자리가 실제로 딱 들어 맞을 정도로 닳아 없어 질 때까지왔다. ...

어쨌든 ... 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 테이블에 놓이고 모든 비교가 행별로 완료되는 것처럼 보입니다. 공유 목록에서 가져온 데이터의 각 행에 대해 내 경고 (메시지)가 트리거되기 때문에이를 말합니다.

이 데이터를 배열에 로컬로 저장하는 방법이 있습니까? 물론이 작업을 수행 할 수있는 방법이 있지만 필자는이 질문을하기에 적합한 질문조차 모르는만큼 충분히 새로운 것입니다 ...

또한 if 문에서 18000000은 SharePoint 테스트에서 현재 사용하고있는 1/1/1970 테스트 날짜입니다. 공유 목록에서 비어있는 필드를 사용하면 쿼리가 종료 된 후 쿼리를 종료하게됩니다. 그. 내 해결책은 1970 년 1 월 1 일을 기본값으로 사용하고 필드를 공백으로 두는 것과 같은 방식으로 사용했습니다. 나는 이것이 수정하기 쉬운 문제를 해결할 수있는 원유 방법이라고 확신하지만, 그것이 내가 생각해 낼 수있는 전부였다.

어떤 도움을 주시면 감사하겠습니다 ... 스티브

답변

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

코드를 복사하여 붙여 넣을 때 미확인 변수에 대해 두 줄을 끝내지 않았습니다. 오른쪽 "만약 문 앞에 주석 행 아래에있다 : – Steve

+0

VAR aSPDTtoJSDT = 새로운 날짜 (aSPDYear (aSPDMonth - 1), aSPDDay, aSPTHour, aSPTMin, aSPTSec, 00);
\t VAR aSPDTValue = aSPDTtoJSDT.valueOf() ; – Steve

+0

이게 작동하면 알려 드리겠습니다. 지금까지이 방법으로이 테이블에 테이블을 추가 할 수 없었습니다. 인덱스 ++가 작동 중이며 행 수를 알려줍니다 (D : D)하지만 데이터가 나타나지 않습니다. – Steve