首页 > 解决方案 > 将 {Sharepoint.LoginName} 添加到 sharepoint 2010 中 URL 中的查询字符串

问题描述

这真的很简单。我想在 sharepoint 2010 aspx 页面上创建一个链接 [ https://SomeOtherServer.com/subsite/appPage.aspx?Username=SharepointUserName] 。

我已经尝试过使用 javascript,并且不得不加载 5 个 JS 文件,但它仍然在 new SP.ClientContext(siteUrl)

我的另一个选择是编写一个名为 UrlAppender 的 Web 部件并在服务器端进行。

但这一切对我来说似乎很荒谬。必须有一个简单的方法来做到这一点。

标签: sharepoint

解决方案


我猜你指的是当前用户,对吧?

即使创建服务器端组件(控件、Web 部件、其他东西)的选项没有任何问题,我也会推荐客户端方法。

1.SharePoint 2010 CSOM API

在大多数情况下,不需要显式加载 SharePoint JS 库,SP.SOD.executeFunc函数应该可以解决问题:

确保加载包含指定函数的指定文件,然后运行指定的回调函数。

在您的情况下sp.js,库需要加载:

SP.SOD.executeFunc("sp.js", "SP.ClientContext", () => {
   //sp.js has been loaded..  
});

例子

SP.SOD.executeFunc("sp.js", "SP.ClientContext", () => {

    var ctx = SP.ClientContext.get_current();   
    var currentUser = ctx.get_web().get_currentUser();
    ctx.load(currentUser);
    ctx.executeQueryAsync(
    function(){
       var link = `https://SomeOtherServer.com/subsite/appPage.aspx?Username=${currentUser.get_loginName()}`; 
       console.log(link);
    }, 
    function(sender,args){
        console.log(args.get_message());    
     });
});

2.SharePoint 2010 REST接口

另一个选项来考虑对 SharePoint 库没有任何依赖关系的情况。

以下示例演示如何通过用户 ID_spPageContextInfo属性检索用户详细信息(在 SharePoint 2010 中,每个页面都会生成一个所谓的上下文信息对象并_spPageContextInfo.userId返回当前用户 ID)

var url = `${_spPageContextInfo.webAbsoluteUrl}/_vti_bin/ListData.svc/UserInformationList(${_spPageContextInfo.userId})`;    
fetch(url, {
     method: 'GET', 
     headers: {
      'Accept': 'application/json;odata=verbose',
     },
     credentials: 'same-origin'
})
.then((response) => response.json())
.then( data =>{
   var link = `https://SomeOtherServer.com/subsite/appPage.aspx?Username=${data.d.UserName}`; 
   console.log(link);
})
.catch(err =>{
  console.log(err);
});

推荐阅读