I'm trying to query the last item in the current list where status = New, so I can auto-populate one of the fields based on the previous item's value. Executing "alert(collListItem);" displays "[object] [Object]", and the onQuerySucceeded function is in fact firing, however, the value it's inputing is "NaN" when it should be the previous number field value +1 (the previous value is 1).
var collListItem;
function QueryLastNewItem() {
var clientContext = new SP.ClientContext();
var List = clientContext.get_web().get_lists().getByTitle('Tracker');
var query = new SP.CamlQuery();
query.set_viewXml("<View><RowLimit>1</RowLimit><Query><OrderBy><FieldRef Name='ID' Ascending='False' /></OrderBy><Where><Eq><FieldRef Name='Status' /><Value Type='Choice'>New</Value></Eq></Where></Query></View>");
collListItem = List.getItems(query);
clientContext.load(collListItem);
alert(collListItem);
clientContext.executeQueryAsync(Function.createDelegate(this,
this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded(sender, args) {
//Once the list item is loaded, populate number field with the previous number field plus 1
if ($("select[id^='Status']").val() == "New")
{
$("input[id^='Number']").val(collListItem.get_item("Number")+1);
}
}
function onQueryFailed(sender, args) {
alert('Request failed. \nError: ' + args.get_message() + '\nStackTrace: ' + args.get_stackTrace());
}
Since the query seems to be successful, I'm confused as to why the value isn't being assigned appropriately. I thought it may be because "collListItem" could be considered a collection of objects, but I have set the row limit to 1 in the CAML query, so it should only contain 1 item.
Any help or suggestions are much appreciated.
EDIT: Working code:
var collListItem;
function QueryLastNewItem() {
var clientContext = new SP.ClientContext();
var List = clientContext.get_web().get_lists().getByTitle('Tracker');
var query = new SP.CamlQuery();
query.set_viewXml("<View><RowLimit>1</RowLimit><Query><OrderBy><FieldRef Name='ID' Ascending='False' /></OrderBy><Where><Eq><FieldRef Name='Status' /><Value Type='Text'>New</Value></Eq></Where></Query></View>");
collListItem = List.getItems(query);
clientContext.load(collListItem);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded(sender, args) {
//Once the list item is loaded for the most recent New Lead, populate the subject number field with the previous subject number plus 1
var listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
}
if ($("select[id^='Status']").val() == "New Lead")
{
$("input[id^='Number']").val(oListItem.get_item('Number')+1);
}
}
function onQueryFailed(sender, args) {
//Alert error message if list item above fails to load
alert('Request failed. \nError: ' + args.get_message() + '\nStackTrace: ' + args.get_stackTrace());
}