caml Query Возвращает последний элемент в списке

У меня есть CamlQuery, который я установил следующим образом:

function getPartID(partName) {
var clientContext = new SP.ClientContext('/sites/HepatoChemKitCustomizationForms/');
var oList = clientContext.get_web().get_lists().getByTitle('PartsTable');

var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query><Where><Eq><FieldRef Name="Part_x0020_Name" /><Value Type="Text">' + partName + '</Value></Eq></Where></Query></View>');
this.collListItem = oList.getItems(camlQuery);

clientContext.load(collListItem);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onPartQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onPartQuerySucceeded(sender, args) {
var listItemEnumerator = collListItem.getEnumerator();

while (listItemEnumerator.moveNext()) {
    var oListItem = listItemEnumerator.get_current();
    partID = (oListItem.get_item('Part_x0020_ID'));
}

}

"Part Name" - это существующее поле в таблице, по которой я выполняю запрос, это текстовое поле, а переменная partName содержит строку, которая включена в это поле в таблице.

Тем не менее, запрос возвращает последний элемент в таблице вместо этого (один из первых элементов, не то, что это имеет значение).

Я попытался удалить последний элемент, чтобы увидеть, было ли что-то конкретное в этом, но это случилось снова с новым последним элементом.

Я новичок в Caml, поэтому я не знаю, что происходит с этим.

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

ОБНОВИТЬ:

Я думаю, что нашел проблему. Когда я запустил оповещение (partName + " " + oListItem.get_item('Part_x0020_Name')); это показывает это:

Я не знаю, почему строка строится с возвратом каретки. Я использую следующий код для построения строки:

(catalystArray[i] + "/" + baseArray[j]);

Если на объект из CatalyArray действительно прикреплен возврат каретки, как бы я его удалил?

ОБНОВИТЬ:

Решил это. Тупая ошибка, но мне потребовался целый день, чтобы найти.

catalystArray[i].replace(/[\n\r]+/g, '');
baseArray[i].replace(/[\n\r]+/g, '');
(catalystArray[i] + "/" + baseArray[j]);

1 ответ

Решение

При установке View XML для объекта CAML Query вы должны включить внешний <View> а также <Query> элементы в вашем XML.

Если XML не в формате, распознаваемом SharePoint, он выполнит запрос по умолчанию, который (обычно) вернет все элементы. Это, вероятно, то, что происходит в вашем случае с кодом, перечисляющим все элементы в результатах. Как следствие, только значения последнего элемента сохраняются в переменных, которые вы ожидали.

Другие вопросы по тегам