2010-11-24 12 views
1

ハロー、がSharePoint2010クライアントOM/ECMAScriptの現在のユーザー

取得私はかなり簡単だろうと思った何かをしたいと思います:
は はECMAScriptのでSharePoint2010クライアントOMを使用して、現在のユーザーのログイン名を取得します。ここで
が私のコードです:

 var currentcontext = new SP.ClientContext.get_current(); 
    var currentweb = currentcontext.get_web(); 
    currentcontext.load(currentweb); 
    var currentuser = currentweb.get_currentUser(); 
    currentcontext.load(currentuser); 
    var loginName = currentuser.get_loginName(); 

最後の行は、例外をスロー: は、「プロパティまたはフィールドが初期化されていないことが要求されていないか、要求が実行されていないことをする必要があるかもしれません。明示的に要求されました。
しかし、なぜですか?私は 'currentuser'を読み込んだので、なぜ 'プロパティやフィールド'が初期化されていないのですか?

答えて

5

ユーザーを最初に取得し、ユーザーではなくWebを読み込む必要があります。

次は動作するはずです:

var currentcontext = new SP.ClientContext.get_current(); 
var currentweb = currentcontext.get_web(); 
currentcontext.load(currentweb); 
var currentuser = currentweb.get_currentUser(); 
currentuser.retrieve(); 
currentcontext.load(currentweb); 
var loginName = currentuser.get_loginName(); 

さらに良い例えば、非同期クエリを使用して、次のチュートリアルを確認します。ここ SharePoint 2010 ECMAScript - How to know logged in user information

+0

ありがとうございます!しかし、あなたのコードでも同じ例外がスローされます:-(User.retrieve()メソッドは文書化されていますか?MSDNでは見つかりませんでした! – user4531

+1

あなたは例外について正しくあります。チュートリアルの例を抜き出す –

5

をexecuteQueryAsyncとのより完全な例です。

SP.SOD.executeOrDelayUntilScriptLoaded(runMyCode, "SP.js"); 
function runMyCode() { 
    var ctx = new SP.ClientContext.get_current(); 
    var web = ctx.get_web(); 
    ctx.load(web); 
    var user = web.get_currentUser(); 
    user.retrieve(); 
    ctx.executeQueryAsync(
     function() { 
        //only in the success case you can work with user login 
      doSomethingWithUserLogin(user.get_loginName()); 
     }, 
     function (data) { 
      //notify the failure 
    }); 
} 
関連する問題