Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SharePoint 2013使用JavaScript获取当前用户_Javascript_Sharepoint_Sharepoint 2013 - Fatal编程技术网

SharePoint 2013使用JavaScript获取当前用户

SharePoint 2013使用JavaScript获取当前用户,javascript,sharepoint,sharepoint-2013,Javascript,Sharepoint,Sharepoint 2013,如何在脚本编辑器web部件中使用JavaScript获取当前用户名?您可以使用SharePoint JSOM获取当前用户的帐户信息。此代码(作为脚本编辑器web部件中的代码段添加时)将在浏览器中弹出用户的显示和帐户名-您需要在gotAccount中添加任何其他内容,以获得所需格式的名称 <script type="text/javascript" src="/_layouts/15/SP.js"></script> <script type="text/javasc

如何在脚本编辑器web部件中使用JavaScript获取当前用户名?

您可以使用SharePoint JSOM获取当前用户的帐户信息。此代码(作为脚本编辑器web部件中的代码段添加时)将在浏览器中弹出用户的显示和帐户名-您需要在
gotAccount
中添加任何其他内容,以获得所需格式的名称

<script type="text/javascript" src="/_layouts/15/SP.js"></script>
<script type="text/javascript" src="/_layouts/15/SP.UserProfiles.js"></script>
<script type="text/javascript">

  var personProperties;

  SP.SOD.executeOrDelayUntilScriptLoaded(getCurrentUser, 'SP.UserProfiles.js');

  function getCurrentUser() {
    var clientContext = new SP.ClientContext.get_current();
    personProperties = new SP.UserProfiles.PeopleManager(clientContext).getMyProperties();
    clientContext.load(personProperties);
    clientContext.executeQueryAsync(gotAccount, requestFailed);
  }

  function gotAccount(sender, args) {
    alert("Display Name: "+ personProperties.get_displayName() + 
        ", Account Name: " + personProperties.get_accountName());
  }

  function requestFailed(sender, args) {
    alert('Cannot get user account information: ' + args.get_message());
  }

</script>

var个人属性;
SP.SOD.executeOrderLayintlScript已加载(getCurrentUser,'SP.UserProfiles.js');
函数getCurrentUser(){
var clientContext=new SP.clientContext.get_current();
personProperties=new SP.UserProfiles.PeopleManager(clientContext.getMyProperties();
加载(personProperties);
executeQueryAsync(gotAccount,requestFailed);
}
函数gotAccount(发送方,参数){
警报(“显示名称:”+personProperties.get_displayName()+
,帐户名:“+personProperties.get_accountName());
}
函数requestFailed(发送方,参数){
警报('无法获取用户帐户信息:'+args.get_message());
}

有关更多信息,请参阅MSDN中的文档。

以下是适用于我的代码:

<script src="/SiteAssets/jquery.SPServices-2013.02a.js" type="text/javascript"></script>
<script src="/SiteAssets/jquery.js" type="text/javascript"></script>

<script type="text/javascript">
  var userid= _spPageContextInfo.userId;
  var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + userid + ")";
  var requestHeaders = { "accept" : "application/json;odata=verbose" };
  $.ajax({
    url : requestUri,
    contentType : "application/json;odata=verbose",
    headers : requestHeaders,
    success : onSuccess,
    error : onError
  });

  function onSuccess(data, request){
    var loginName = data.d.Title;
    alert(loginName);
  }

  function onError(error) {
    alert("error");
  }
</script>

var userid=_spPageContextInfo.userid;
var requestUri=\u spPageContextInfo.webAbsoluteUrl+“/\u api/web/getuserbyid(“+userid+”);
var requestHeaders={“accept”:“application/json;odata=verbose”};
$.ajax({
url:requestUri,
contentType:“application/json;odata=verbose”,
headers:requestHeaders,
成功:一旦成功,
错误:onError
});
成功时的功能(数据、请求){
var loginName=数据d.标题;
警报(登录名);
}
函数onError(错误){
警报(“错误”);
}

我找到了一种更简单的方法,它甚至不使用SP.UserProfiles.js。我不知道它是否适用于每个人的具体情况,但绝对值得分享

//assume we have a client context called context.
var web = context.get_web();
var user = web.get_currentUser(); //must load this to access info.
context.load(user);
context.executeQueryAsync(function(){
    alert("User is: " + user.get_title()); //there is also id, email, so this is pretty useful.
}, function(){alert(":(");});

不管怎么说,多亏了你的回答,我才稍微融入了UserProfiles,尽管这对我来说并不是必需的。

你可以使用javascript实现如下目的:

function loadConstants() {

    this.clientContext = new SP.ClientContext.get_current();
    this.clientContext = new SP.ClientContext.get_current();
    this.oWeb = clientContext.get_web();
    currentUser = this.oWeb.get_currentUser();  
    this.clientContext.load(currentUser);
      completefunc:this.clientContext.executeQueryAsync(Function.createDelegate(this,this.onQuerySucceeded), Function.createDelegate(this,this.onQueryFailed));


}

//U must set a timeout to recivie the exactly user u want:

function onQuerySucceeded(sender, args) {

    window.setTimeout("ttt();",1000);
}
function onQueryFailed(sender, args) {

    console.log(args.get_message());
}

//By using a proper timeout, u can get current user :

function ttt(){ 

    var clientContext = new SP.ClientContext.get_current();
    var groupCollection = clientContext.get_web().get_siteGroups();
    visitorsGroup = groupCollection.getByName('OLAP Portal Members');

    t=this.currentUser .get_loginName().toLowerCase();

    console.log ('this.currentUser .get_loginName() : '+ t);      

}
这个怎么样:

$.getJSON(_spPageContextInfo.webServerRelativeUrl + "/_api/web/currentuser")
.done(function(data){ 
    console.log(data.Title);
})
.fail(function() { console.log("Failed")});

如果您在SharePoint页面中,只需使用:

_spPageContextInfo.userId;

如果您知道用户的id,可以使用以下功能:

function getUser(id){
var returnValue;
jQuery.ajax({
 url: "http://YourSite/_api/Web/GetUserById(" + id + ")",
 type: "GET",
 headers: { "Accept": "application/json;odata=verbose" },
 success: function(data) {
       var dataResults = data.d;
       alert(dataResults.Title);
  }
});
}
或者你可以试试

var listURL = _spPageContextInfo.webAbsoluteUrl + "/_api/web/currentuser";
请尝试此代码

function GetCurrentUsers() {

    var context = new SP.ClientContext.get_current();
    this.website = context.get_web();
    var currentUser = website.get_currentUser();
    context.load(currentUser);
    context.executeQueryAsync(Function.createDelegate(this, onQuerySucceeded), Function.createDelegate(this, onQueryFailed));
   function onQuerySucceeded() {

       var currentUsers = currentUser.get_title();
       document.getElementById("txtIssued").innerHTML = currentUsers;

    }

    function onQueryFailed(sender, args) {
        alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());
    }   

}

要获取当前用户信息:

jQuery.ajax({
    url: _spPageContextInfo.webServerRelativeUrl + "/_api/web/currentuser",
    type: "GET",
    headers: { "Accept": "application/json;odata=verbose" }
}).done(function( data ){
    console.log( data );
    console.log( data.d.Title );
}).fail(function(){
    console.log( failed );
});

我必须使用XML,通过添加内容编辑器Web部件将以下内容放入内容编辑器Web部件中,编辑Web部件,然后单击编辑源按钮并粘贴到其中:

<input type="button" onclick="GetUserInfo()" value="Show Domain, Username and Email"/> 

<script type="text/javascript">
function GetUserInfo() {

$.ajax({
    type: "GET",
    url: "https://<ENTER YOUR DOMAIN HERE>/_api/web/currentuser",
    dataType: "xml",

    error: function (e) {
        alert("An error occurred while processing XML file" + e.toString());
        console.log("XML reading Failed: ", e);
    },

    success: function (response) {
        var content = $(response).find("content");
        var spsEmail = content.find("d\\:Email").text();
        var rawLoginName = content.find("d\\:LoginName").text();
        var spsDomainUser = rawLoginName.slice(rawLoginName.indexOf('|') + 1);
        var indexOfSlash =  spsDomainUser.indexOf('\\') + 1;
        var spsDomain = spsDomainUser.slice(0, indexOfSlash - 1);
        var spsUser = spsDomainUser.slice(indexOfSlash);
        alert("Domain: "  + spsDomain + " User: " + spsUser + " Email: " + spsEmail);
    }
});
}

</script>

您可以使用sp页面上下文信息:


\u spPageContextOnfo.userLoginName

对于获取Web用户信息非常有用。如果您像我一样使用SP2010,它将不适用于您,因为
\u spPageContextInfo.webAbsoluteUrl
不适用于SP2010。检查一下这个对我也有用,谢谢!我无法使用ClientContext对象,因为它没有触发任何错误,但是JS进程被阻止创建ClientContext。我收到了这个JS错误。未捕获引用错误:L_Menu_BaseUrl未定义如果您使用的是脚本编辑器Web部件,您可以使用
\u spPageContextInfo.userDisplayName
\u spPageContextInfo.userDisplayName
来获取用户名或电子邮件地址。可能是我自己,但我无法将其用于ClientWebApp。从一张干净的石板开始,并且令人肃然起敬。此设计最适合哪些部署模式?关于自动、SharePoint或提供商托管的web应用程序。此代码是为脚本编辑器web部件编写的--您是否尝试在SharePoint应用程序中实现相同的功能?如果是这样的话,代码可能会有点不同,因为您不会拥有与脚本编辑器web部件相同的上下文。实际上,我能够从web应用程序获取用户,与脚本编辑器一样。上下文应该总是一样的,只是取决于你打开哪扇门才能得到它。像EF上下文框架一样考虑上下文。有其他问题,与WebApp和跨域相关。在解决x域问题之前,我需要一个Web部件来完成我所需要的工作。这是一种正确的方法,可以在以后获得添加到用户配置文件中的自定义属性。使用
personProperties.get_userProfileProperties()
获取包含所有属性的完整对象,包括使用getter函数无法获取的自定义属性。请求是获取用户名。这只返回用户id。如果您使用的是脚本编辑器Web部件,您可以使用.SPPAECOTEXTIFO.U.DeSerDePosiNd或OSPPARECONTCONTIFO.USEDISPLAYND来获取用户名或电子邮件地址。一些属性不取决于您的SPS版本:请考虑考虑添加一个小的说明以及代码。如何获取上下文?SP.clitValue.GET-CurrTurn();
var userid= _spPageContextInfo.userId;
var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + userid + ")