I am trying to fetch items of a particular view using JSOM using below code:
ListDataService.getItemsByCamlQueryUsingCSOM = function (listName, camlQuery, viewfields) {
var deferred = $.Deferred();
var context = SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle(listName);
var query = new SP.CamlQuery();
query.set_viewXml(camlQuery);
var items = list.getItems(query);
var index = viewfields.indexOf("LinkTitle");
if (index !== -1) {
viewfields[index] = "Title";
}
context.load(items, "Include(" + viewfields.join() + ")");
//context.load(items);
context.executeQueryAsync(function () {
deferred.resolve(items);
}, function (sender, args) {
deferred.reject(args);
});
return deferred.promise();
}
I get a strange behaviour that if my viewfields has any Managed metadata field, the executeQueryAsync is mostly failing with below error "Value does not fall within the expected range"
at Microsoft.SharePoint.SPFieldMap.GetColumnNumber(String strFieldName, Boolean bThrow)
↵ at Microsoft.SharePoint.SPListItemCollection.GetRawValue(String fieldname, Int32 iIndex, Boolean bThrow)
↵ at Microsoft.SharePoint.SPListItem.GetValue(SPField fld, Int32 columnNumber, Boolean bRaw, Boolean bThrowException)
↵ at Microsoft.SharePoint.SPListItem.GetValue(String strName, Boolean bThrowIfValueMissing, Boolean bThrowIfFieldMissing)
↵ at Microsoft.SharePoint.SPListItem.GetFieldValue_Client(String fieldName)
↵ at Microsoft.SharePoint.Client.ServerStub.WriteAsJson(JsonWriter writer, Object obj, ClientObjectQuery objectQuery, ProxyContext proxyContext)
↵ at Microsoft.SharePoint.Client.ServerStub.WriteChildItems(JsonWriter writer, Object obj, ClientObjectQuery objectQuery, ProxyContext proxyContext)
↵ at Microsoft.SharePoint.Client.ServerStub.WriteAsJson(JsonWriter writer, Object obj, ClientObjectQuery objectQuery, ProxyContext proxyContext)
↵ at Microsoft.SharePoint.Client.ServerStub.WriteAsJsonWithMonitoredScope(JsonWriter writer, Object value, ClientObjectQuery objectQuery, ProxyContext proxyContext)
↵ at Microsoft.SharePoint.Client.ClientMethodsProcessor.WriteQueryResults(Object obj, ClientObjectQuery objQuery)
↵ at Microsoft.SharePoint.Client.ClientMethodsProcessor.ProcessQuery(XmlElement xe)
↵ at Microsoft.SharePoint.Client.ClientMethodsProcessor.ProcessOne(XmlElement xe)
↵ at Microsoft.SharePoint.Client.ClientMethodsProcessor.ProcessStatements(XmlNode xe)
↵ at Microsoft.SharePoint.Client.ClientMethodsProcessor.Process()
My viewfields has only 3 or 4 fields and I tried to hard code only the Managed metadata field in the Include statement and still it threw the same error.
Configuration of my site:
- List is having 30+ columns
- Listview Look up threshold is 8 for the web application.
- Site Regional setting has Local set to English(South Africa) (PS: Setting it to English(US) did not make any difference.)
Update: Got this issue fixed by adding the viewfields in caml instead of Include .