尝试使用JavaScript计算SharePoint列表值

时间:2013-05-16 02:16:06

标签: javascript list validation sharepoint count

Hello堆栈溢出社区...

感谢您提供的所有帮助,即使我从未在此网站上发布过。我是一个初学者...所以这意味着我已经开始工作的大部分东西是在试图将一个方形钉子推入一个圆孔太多次以至于最终边缘磨损到足以使其真正适合......

无论如何......由于SharePoint的Today()问题以及需要根据当前日期/时间进行数据比较,我一直在努力编写自己的代码并在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作为默认值,并将其与将字段留空一样使用。我确信这是一个粗略的方法来解决一个容易解决的问题,但这是我能想到的。

任何帮助将不胜感激...... 史蒂夫

1 个答案:

答案 0 :(得分: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);
}