将SharePoint SOAP与jQuery GetListItems一起使用 - 简单但无法解决!

时间:2010-11-26 17:24:48

标签: ajax sharepoint soap jquery

我正在尝试将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"/> 

它会填充列表,但所有项目的名称都是“未定义”。我尝试删除空格等无济于事,当我将列表更改为“任务”列表时,它的工作正常。

为AGES盯着这个。任何你可以建议的提示都会非常感激!我确定这是一件小事,我无法解决这个问题!

谢谢!

2 个答案:

答案 0 :(得分:4)

您是否确认您引用了正确的字段名称?

您在soapEnv中定义的CAML查询需要使用字段'内部名称,而不是其显示名称。我保证Metric Name不对;它可能类似于Metric_x0020_Name或类似的东西。

如何确定字段的内部名称?有几种方法。

让我向您介绍一个名为U2U CAML Query Builder的实用工具。这应该在每个SharePoint开发人员的工具箱中。启动它,将其指向正确的列表(如果您不在服务器上,则通过SharePoint Web服务连接),它将允许您使用字段的显示名称构建CAML查询,但生成正确的基础CAML您。它也非常适合构建复杂的过滤器和布尔逻辑,而且它可以让你运行查询并获得即时反馈。

获取字段名称的另一种方法是导航到列表设置,然后单击您感兴趣的字段的名称。检查您的URL并查找名为&Field的查询字符串参数;它将泄露该字段的内部名称。如果您正在使用Internet Explorer,则此值将为URL编码(简单的online decoder可以帮助解密该值),但如果您使用Firefox,则会看到未编码的值。

将正确的字段名称插入CAML查询并再次进行旋转。

答案 1 :(得分:0)

在结果函数上添加alert(xData.responseXML.xml);以确保您获得ows_ReportName属性。

也许它的名字拼写略有不同(它们区分大小写)。或者,尝试ows_Title以查看它是否返回已定义的数据。如果是这样,您将获得XML,它无法在返回的数据中找到ReportName作为有效列。