以编程方式查询SharePoint列表

时间:2013-07-31 01:25:08

标签: c# javascript .net sharepoint navbar

使用代码与SharePoint交互的最佳方式是什么?试图找出正确的区域追求而不浪费时间。 C#? JavaScript的?

现在我只是想创建一个SharePoint列表驱动的Web部件...它基本上会创建一个导航栏,并且该导航栏上的名称/链接将显示在我的SharePoint上已配置列表。

3 个答案:

答案 0 :(得分:1)

您可以将C#用于您的webpart功能。创建一个空项目,然后将webpart(非可视webpart)添加到项目中。使用C#对象模型查询SPList对象,然后执行foreach循环以将值吐出到导航栏中。

当您必须使用解决方案的不同版本号更新功能时,会出现C#的痛苦。除非您在功能升级过程中表现出色,否则这是非常好的以前版本的webpart实例卡在WP区域中,无论它们存储在哪个ASPX中。我将我的解决方案保留在1.0版本,然后在功能描述中记下版本号,该版本号显示在“站点设置”的功能列表中。

您可以将JavaScript用于您的网络部件功能。创建一个空项目,然后将webpart(非可视webpart)添加到项目中。在特定导航列表上调用Web服务以获取getitems。 Visual Studio将为列表所在的SP站点创建一个强名称类,该类存储该站点中所有列表的定义。如果导航列表发生更改,请刷新Web服务并更新此强名称类。

当您的Web部件运行时,Web服务将以登录的用户身份运行。因此要么确保所有访问者都具有查看权限,要么建立AD服务帐户来调用Web服务。一旦你的Javascript返回XML,使用像Lync到XML的parcer来获取数据并将HTML吐出到导航栏。

更多的是关于舒适的偏好而不是更好的偏好。如果您使用的是SharePoint 2013,请创建SP应用程序而不是服务器场功能。然后,您只能使用JavaScript和Web服务。

答案 1 :(得分:1)

你可以使用lists.asmx web服务和javascript,下面是我用来查询SharePoint列表的代码。

var url = document.URL;
if(url.indexOf("https://") != -1)
{
    var urllink = document.location.href.replace("https://","");
    var prefix = "https://";
}
else
{
    var urllink = document.location.href.replace("http://","");
    var prefix = "http://";
}   
var link = (urllink.split("/"))[0];

$(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>Web Pages</listName> \
                    <viewFields> \
                        <ViewFields> \
                           <FieldRef Name='Title' /> \
                       </ViewFields> \
                    </viewFields> \
                </GetListItems> \
            </soapenv:Body> \
        </soapenv:Envelope>";

    $.ajax({
        url: prefix+link+"/_vti_bin/lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        complete: processResult,
        contentType: "text/xml; charset=\"utf-8\""
    });
});

var names = new Array();
var href = new Array();
var iterator;

function processResult(xData, status) {
    $(xData.responseXML).find("z\\:row, row").each(function() {

    names.push($(this).attr('ows_Title'));
    href.push($(this).attr('ows_FileRef'));

    });
}

答案 2 :(得分:0)

我无法访问Sharepoint的后端(IT限制),所以我只是自动化使用JavaScript来完成这类任务,并且它适用于Sharepoint Web服务。

我已经创建了一个JavaScript API,我认为它非常有用且易于使用:SharepointPlus

否则,有一些替代方案,如热门SPServices

所以我说这取决于你的需求,限制,技能以及最后你想要做的事情的复杂性。