Использование SharePoint SOAP с jQuery GetListItems - просто, но не получается! - PullRequest
3 голосов
/ 26 ноября 2010

Я пытаюсь загрузить список SharePoint в неупорядоченный список, чтобы я мог создать простую функцию поиска (Поиск Sharepoint просто ужасен). Код, который я заимствовал и адаптировал ниже:

$(document).ready(function() {
        var soapEnv =
            "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \
                <soapenv:Body> \
                     <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
                        <listName>Metric_Audit</listName> \
                        <viewFields> \
                            <ViewFields> \
                <FieldRef Name='ReportName' /> \
                <FieldRef Name='Metric Name' /> \
                           </ViewFields> \
                        </viewFields> \
                    </GetListItems> \
                </soapenv:Body> \
            </soapenv:Envelope>";

        $.ajax({
            url: "http://teamspace.intranet.group/sites/CSI/ID/DB/_vti_bin/lists.asmx",
            type: "POST",
            dataType: "xml",
            data: soapEnv,
            complete: Result,
            contentType: "text/xml; charset=\"utf-8\""
        });
    });


    function Result(xData, status) {
        $(xData.responseXML).find("z\\:row").each(function() {
            var liHtml = "<li>" + $(this).attr("ows_ReportName") + "</li>";
            $("#MetricsUL").append(liHtml);
        });
    }
});

<ul id="MetricsUL"/> 

Заполняет список, как и должно, но все элементы имеют имя undefined. Я пытался удалить пробелы и т.д. безрезультатно, и когда я изменяю список на список «задач», он работает просто отлично.

Смотрел на это для AGES. Любые советы, которые вы можете предложить, будут очень благодарны! Я уверен, что это что-то маленькое, что я просто не могу работать!

Спасибо!

Ответы [ 2 ]

4 голосов
/ 28 ноября 2010

Вы подтвердили, что ссылаетесь на правильные имена полей?

Запрос CAML, который вы определили в soapEnv, требует использования полей внутренних имен, а не их отображаемых имен. Я гарантирую, Metric Name не правильно; это, вероятно, что-то вроде Metric_x0020_Name или похожее.

Как вы определяете внутренние имена ваших полей? Есть несколько способов.

Позвольте мне представить вам замечательную утилиту под названием U2U CAML Query Builder . Это должно быть в каждом наборе инструментов разработчика SharePoint. Запустите его, укажите его в нужном списке (подключитесь через веб-службу SharePoint, если вы не на сервере), и это позволит вам создавать запросы CAML, используя отображаемые имена полей, но генерировать правильный базовый CAML для вы. Он также отлично подходит для создания сложных фильтров и логической логики, а также позволяет выполнять запрос и получать немедленную обратную связь.

Другой подход к получению имени поля состоит в том, чтобы перейти к настройкам списка, затем нажать на имя интересующего вас поля. Проверьте свой URL и найдите параметр строки запроса с именем &Field; это разгласит внутреннее имя поля. Это значение будет URL Encoded, если вы используете Internet Explorer (простой онлайн-декодер может помочь расшифровать значение), но если вы используете Firefox, вы увидите значение без кода.

Вставьте правильные имена полей в ваш запрос CAML и передайте ему еще один поворот.

0 голосов
/ 29 ноября 2010

В вашей функции Result добавьте alert(xData.responseXML.xml);, чтобы убедиться, что вы получаете атрибут ows_ReportName.

Возможно, его имя пишется немного по-другому (они чувствительны к регистру).В качестве альтернативы, попробуйте ows_Title, чтобы увидеть, возвращает ли он определенные данные.Если это так, вы возвращаете XML, он просто не может найти ReportName в качестве допустимого столбца в возвращаемых данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...