none
SPServiceでユーザーの部署名などのプロファイルを取得する方法 RRS feed

  • 質問

  • 初めまして。現在sharepoint2013開発の勉強中ですが、初心者ですのでどうか宜しくお願い致します。

    リストのNewFormとEditFormで、フィールドで選択された人、または現在のユーザーの上司名、部署名を自動でフィールドに入力する方法を探しています。近いもので下の二つのサイトを見つけました。

    http://idea.tostring.jp/?p=1376

    https://msdn.microsoft.com/en-us/library/office/jj920104.aspx

    一つ目のサイトにあるコードは、どの部分に入れ込んだらよいのでしょうか?

    二つ目のサイトの

    var targetUser = "domainName\\userName";

    この部分は、どのように取得したらよいのでしょうか?

    理想は、フォームのSaveボタンを押すか、ページがロードされる際に自動で入力されるように設定したいです。

    一つ目のサイトのコードは、コンテンツエディタに入れ込んでみましたが何も表示されませんでした。(JqueryとSPServiceをダウンロードして参照した後に)

    二つ目のサイトのコードは、sharepoint designer2013で指定の箇所に入れてみましたが、ドメインとユーザーネームの取得方法がわからないため、先に進めずにいます。

    これはコンテンツエディタ内に挿入ではだめですか?初心者すぎてお恥ずかしい質問ですが、どうかよろしくお願いいたします。

    2016年6月9日 23:19

回答

  • GUI 的にフィールドに値を入れるカスタマイズであれば、SPUtility.js を利用するのがお手軽かと思います。

    SPUtility.js
    https://sputility.codeplex.com/

    もともとは Codeplex で公開されていましたが、現在は GitHub へ移っています。

    https://github.com/kitmenke/sputility

    試してみたところ、最新の 0.14.2 はちょっとバグがあるようでしたので、0.14.1 で試してみました。下記から入手できます。

    SPUtility.js version 0.14.1
    https://github.com/kitmenke/sputility/releases/tag/v0.14.1

    この SPUtility 0.14.1 の利用を前提に、現在のユーザーの部署名や上司をフィールドへフォームを開いたときに格納する JavaScript を書いてみました。

    <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-2.2.3.min.js"></script>
    <script type="text/javascript" src="/sites/teamsite/Shared%20Documents/sputility.min.js"></script>
    <script type="text/javascript">
    function setFieldsValue(){
    	function setFields(vProperties){
    		SPUtility.GetSPField('Department').SetValue(vProperties["Department"]);
    		
    		var manager = vProperties["Manager"].split("|");
    		//SPUtility.GetSPField('タイトル').SetValue(manager[manager.length-1]);
    		SPUtility.GetSPField('Manager').SetValue(manager[manager.length-1]);
    	}
    	
    	SP.SOD.executeFunc('userprofile', 'SP.UserProfiles', function(){
    		var clientContext = new SP.ClientContext.get_current();
    		var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);
    		var myProperties = peopleManager.getMyProperties();
    
    		clientContext.load(myProperties);
    		clientContext.executeQueryAsync(
    			function(sender, args){
    				//成功時
    				var vProperties = myProperties.get_userProfileProperties();
    				setFields(vProperties);
    			},function(sender, args){
    				//失敗時
    				alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
    			});
    	});
    }
    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', setFieldsValue);
    </script>

    コードは、引用いただいた一つ目のサイトのコードを基にフィールドへ値を格納するように処理を付け加えたものです。function setFields の中にある GetSPField で指定しているのが、値を入れる列名で、ここは環境に合わせて書き換える必要があります。

    こちらのコードをコンテンツエディタなどを利用し、NewForm や EditForm へ挿入してください。今回のコードでは、上司の値がクレームIDの値で返ってくる想定でメールアドレスを抜き出すように文字列操作をしていますが、ここも環境によって処理を変える必要があるかもしれません。

    SharePoint の JavaScript カスタマイズの肝になるのは、executeFunc などの関数の呼び出し方です。下記の記事にまとまっていますので参考になるかと思います。

    http://idea.tostring.jp/?p=1899

    • 回答の候補に設定 佐伯玲 2016年6月13日 4:03
    • 回答としてマーク 佐伯玲 2016年6月27日 2:54
    2016年6月12日 9:19

すべての返信

  • GUI 的にフィールドに値を入れるカスタマイズであれば、SPUtility.js を利用するのがお手軽かと思います。

    SPUtility.js
    https://sputility.codeplex.com/

    もともとは Codeplex で公開されていましたが、現在は GitHub へ移っています。

    https://github.com/kitmenke/sputility

    試してみたところ、最新の 0.14.2 はちょっとバグがあるようでしたので、0.14.1 で試してみました。下記から入手できます。

    SPUtility.js version 0.14.1
    https://github.com/kitmenke/sputility/releases/tag/v0.14.1

    この SPUtility 0.14.1 の利用を前提に、現在のユーザーの部署名や上司をフィールドへフォームを開いたときに格納する JavaScript を書いてみました。

    <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-2.2.3.min.js"></script>
    <script type="text/javascript" src="/sites/teamsite/Shared%20Documents/sputility.min.js"></script>
    <script type="text/javascript">
    function setFieldsValue(){
    	function setFields(vProperties){
    		SPUtility.GetSPField('Department').SetValue(vProperties["Department"]);
    		
    		var manager = vProperties["Manager"].split("|");
    		//SPUtility.GetSPField('タイトル').SetValue(manager[manager.length-1]);
    		SPUtility.GetSPField('Manager').SetValue(manager[manager.length-1]);
    	}
    	
    	SP.SOD.executeFunc('userprofile', 'SP.UserProfiles', function(){
    		var clientContext = new SP.ClientContext.get_current();
    		var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);
    		var myProperties = peopleManager.getMyProperties();
    
    		clientContext.load(myProperties);
    		clientContext.executeQueryAsync(
    			function(sender, args){
    				//成功時
    				var vProperties = myProperties.get_userProfileProperties();
    				setFields(vProperties);
    			},function(sender, args){
    				//失敗時
    				alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
    			});
    	});
    }
    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', setFieldsValue);
    </script>

    コードは、引用いただいた一つ目のサイトのコードを基にフィールドへ値を格納するように処理を付け加えたものです。function setFields の中にある GetSPField で指定しているのが、値を入れる列名で、ここは環境に合わせて書き換える必要があります。

    こちらのコードをコンテンツエディタなどを利用し、NewForm や EditForm へ挿入してください。今回のコードでは、上司の値がクレームIDの値で返ってくる想定でメールアドレスを抜き出すように文字列操作をしていますが、ここも環境によって処理を変える必要があるかもしれません。

    SharePoint の JavaScript カスタマイズの肝になるのは、executeFunc などの関数の呼び出し方です。下記の記事にまとまっていますので参考になるかと思います。

    http://idea.tostring.jp/?p=1899

    • 回答の候補に設定 佐伯玲 2016年6月13日 4:03
    • 回答としてマーク 佐伯玲 2016年6月27日 2:54
    2016年6月12日 9:19
  • こんにちは、shizukix さん
    フォーラムオペレータの佐伯 玲 です。

    OTA Hirofumiさんから詳細なアドバイスがお寄せいただけておりましたので私のほうから「回答としてマーク」とさせていただきますね。
    ご確認いただけましたらその後の状況などこちらのスレッドへお寄せ下さい。

    宜しくお願い致します。

    TechNet Community Support 佐伯 玲

    2016年6月27日 2:54