Попытка подсчитать значения списка SharePoint с помощью JavaScript

Здравствуйте, сообщество переполнения стека...

Спасибо за всю помощь, которую вы оказали до сих пор, хотя я никогда не размещал на этом сайте. Я новичок... так что это означает, что большинство вещей, которые я получил, пришло после того, как я пытался засунуть квадратный колышек в круглое отверстие слишком много раз, чтобы сосчитать, пока, наконец, края не стерлись настолько, что он действительно подходит...

В любом случае... из-за проблемы Today() в 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.

Есть ли способ хранить эти данные в массиве локально... конечно, есть какой-то способ сделать это, но я достаточно новичок в этом, что я даже не знаю правильные вопросы, чтобы задать...

Кроме того, 18000000 в операторе if является датой тестирования 01.01.1970, которую я использую для тестирования в настоящее время, так как я обнаружил, что любые поля, которые были пустыми в списке sharepoint, приводили к тому, что запрос прекращал возвращать любые строки после этого. Мое решение состояло в том, чтобы использовать 1/1/1970 в качестве значения по умолчанию и использовать его так же, как оставить поле пустым. Я уверен, что это грубый метод обойти проблему, которую легко решить, но это было все, что я мог придумать.

Любая помощь будет оценена... Стив

1 ответ

Я пытаюсь понять... Мое предложение состоит в том, чтобы сохранить все ваши 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);
}
Другие вопросы по тегам