トップ回答者
SharePoint Online アンケートフォーム内でのClientContext取得ができません

質問
-
お世話になります。
SharePoint Online のアンケートリストの入力フォーム内で、回答者の氏名を取得したいと思っております。
NewForm.aspx にスクリプトエディタでJavaScriptを作成し、以下のコードでユーザプロファイルを取得しようとしていますが、SP.ClientContext が undefined になり、値が取得できません。
function getMyProfileProperty(strPropName){
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();
userName = vProperties[strPropName];
alert(userName);
},function(sender, args){
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
});
});
}ExecuteOrDelayUntilScriptLoaded(function() {getMyProfileProperty("LastName");}, "sp.js");
コード自体に間違いはないようで、カスタムリストの NewForm.aspx に同じコードを入れた場合には正常に動作しました。
また今回問題になっているフォームでも、URLに NewForm.aspx?ToolPaneView=2 として編集画面で開いた場合は正常に動作します。アンケートフォームのテンプレートに、何か必要なモジュールが取り込まれていないようにも思えますが、解決策はありますでしょうか?
どうぞよろしくお願いいたします。
2017年6月17日 12:13
回答
-
こちらのSharePoint Online環境でも試してみたのですが、少々動きが異なりますね。
こちらでは、アンケートのNewForm.aspxにスクリプトエディタをはりつけて、上記コードを入れてみたところ、アンケート入力画面表示時、getMyProfilePropertyが呼ばれない現象となりました。
この現象においては、
ExecuteOrDelayUntilScriptLoaded(function() {getMyProfileProperty("LastName");}, "sp.js");
の直前に、
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function(){});
を、入れることで、画面表示時にユーザー名が取得できております。
そちらの環境と状況が異なるので、なんとも言えませんが、上記の対応で動きは変わりますでしょうか。
- 回答としてマーク naa03675 2017年6月21日 7:08
2017年6月21日 5:16
すべての返信
-
無理やりですが、
SP.SOD.executeFunc('userprofile', 'SP.UserProfiles', function(){
の前に、この1行を入れることで、改善されますでしょうか。
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function(){});
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年6月21日 0:36
2017年6月20日 6:04 -
ありがとうございます。
試したところ、Internet Explorer11では、ご教示いただいた
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function(){});
を追加し、その後ろにダミーの alert関数を入れた場合に、意図した値を取得することができました。
タイミングの問題があるようで、alert関数を外すと やはりClientContextの取得に失敗します。
また、実際にどこまで影響があるかわからないのですが、デバッガで起動した場合に
O365Shell.d=function(){if(O365Shell.a.z){O365.Log.WriteShellLog(175164,1,1,0); 後略
の部分で「未定義または NULL 参照のプロパティ 'z'は取得できません」というエラーが出るようになりました。
これは当方で作成したものではなく、フォームにあらかじめ設定されたスクリプトです。
IEでは上記のような動きでしたが、FireFoxとChromeでは残念ながら効果がありませんでした。
カスタムリストのフォームであれば、最初の質問でアップロードしたスクリプトは、FireFoxでもChromeでも動作しています。
よろしくお願いいたします。
- 編集済み naa03675 2017年6月21日 7:09
2017年6月21日 3:45 -
こちらのSharePoint Online環境でも試してみたのですが、少々動きが異なりますね。
こちらでは、アンケートのNewForm.aspxにスクリプトエディタをはりつけて、上記コードを入れてみたところ、アンケート入力画面表示時、getMyProfilePropertyが呼ばれない現象となりました。
この現象においては、
ExecuteOrDelayUntilScriptLoaded(function() {getMyProfileProperty("LastName");}, "sp.js");
の直前に、
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function(){});
を、入れることで、画面表示時にユーザー名が取得できております。
そちらの環境と状況が異なるので、なんとも言えませんが、上記の対応で動きは変わりますでしょうか。
- 回答としてマーク naa03675 2017年6月21日 7:08
2017年6月21日 5:16