2014-01-07 12 views

Antwort

24

Hier ist der Code, der für mich gearbeitet:

<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> 
+0

sehr nützlich für die Erfassung der Web-Benutzerinformationen. – GoldBishop

+1

Wenn Sie SP2010 wie mich verwenden, wird es nicht für Sie arbeiten, da '_spPageContextInfo.webAbsoluteUrl' nicht auf SP2010 funktioniert. prüfe [hier] (http://sympmarc.com/2013/03/26/using-_spappe-contextinfo-to-determine-the-current-sharepoint-context-in-script) – mohsenof

+0

Das hat auch bei mir funktioniert, danke! Ich konnte das ClientContext-Objekt nicht verwenden, da es keine Fehler ausgelöst hat, aber der JS-Prozess wurde für die Erstellung des ClientContext blockiert. – Alex

4

Sie können die SharePoint-JSOM verwenden, um die Kontoinformationen Ihres aktuellen Benutzers abzurufen. Dieser Code (wenn er als Snippet im Webpart des Skripteditors hinzugefügt wird) öffnet nur den Anzeige- und Kontonamen des Benutzers im Browser - Sie sollten alles weitere in gotAccount hinzufügen, um den Namen im gewünschten Format zu erhalten.

<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> 

Siehe SP.UserProfiles.PersonProperties Dokumentation in MSDN für weitere Informationen.

+0

Vielleicht ist es nur mich, aber ich konnte das nicht mit ClientWebApps arbeiten. Begann mit einer sauberen Weste und bestätige erneut. Für welche Bereitstellungsmuster wäre dieses Design am besten geeignet? In Bezug auf Auto, SharePoint oder Provider gehostet WebApps. – GoldBishop

+0

Dieser Code wurde für einen Webpart für einen Skript-Editor geschrieben - versuchen Sie, dasselbe in einer App für SharePoint zu implementieren? In diesem Fall wäre der Code ein wenig anders, da Sie nicht den gleichen Kontext haben wie ein Skript-Editor-Webpart. –

+0

Eigentlich konnte ich den Benutzer von einer WebApp abrufen, genau wie der Skript-Editor. Der Kontext sollte immer der gleiche sein, hängt nur davon ab, welche Tür du öffnest, um sie zu bekommen. Stellen Sie sich den Kontext genauso vor wie das EF-Kontext-Framework. Andere Probleme im Zusammenhang mit WebApp und domainübergreifend haben. Back borgte diese Entwicklung und implementierte ein WebPart, um zu bekommen, was ich brauche, bis wir die x-Domain auflösen können. – GoldBishop

16

ich einen viel einfacheren Weg gefunden, dauert es nicht einmal SP.UserProfiles.js verwenden. Ich weiß nicht, ob es für jeden Einzelfall gilt, aber es lohnt sich, es zu teilen.

//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(":(");}); 

Anyways, dank Ihre Antworten, habe ich ein wenig mit Userprofiles zu mischen, auch wenn es für meinen Fall nicht wirklich notwendig ist.

1

U Javascript verwenden können, dass so achive:

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);  

} 
11

Wie dies etwa:

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

Vielen Dank. – avrahamcool

8

Wenn Sie in einer Sharepoint-Seite sind benutzen Sie einfach:

_spPageContextInfo.userId; 
+0

Die Anfrage war, den Benutzernamen zu erhalten. Dies gibt nur die Benutzer-ID zurück. – Peter

+0

Wenn Sie ein Skript-Editor-Webpart verwenden, können Sie einfach _spPageContextInfo.userDisplayName oder _spPageContextInfo.userDisplayName verwenden, um den Benutzernamen oder die E-Mail-Adresse abzurufen. – jdgregson

0

Sie kann die Funktion unten verwenden, wenn Sie die ID des Benutzers kennen:

oder Sie können versuchen

var listURL = _spPageContextInfo.webAbsoluteUrl + "/_api/web/currentuser"; 
0

diesen Code versuchen ..

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()); 
    } 

}

+0

Erwägen Sie, eine kleine Erklärung mit dem Code hinzuzufügen. – Alexei

0

Um aktuelle Benutzer Informationen zu erhalten:

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); 
}); 
Verwandte Themen