SharePoint で JavaScript オブジェクトモデルを使用して、ユーザー プロファイル プロパティを取得するRetrieve user profile properties by using the JavaScript object model in SharePoint

SharePoint JavaScript オブジェクト モデルを使用して、ユーザー プロパティとユーザー プロファイル プロパティをプログラムによって取得する方法を説明します。Learn how to retrieve user properties and user profile properties programmatically by using the SharePoint JavaScript object model.

SharePoint のユーザー プロパティとユーザー プロファイル プロパティとはWhat are user properties and user profile properties in SharePoint?

ユーザー プロパティとユーザー プロファイル プロパティは、表示名、電子メール、肩書き、その他のビジネス情報や個人情報など、SharePoint ユーザーに関する情報を提供します。クライアント側の API では、 PersonProperties オブジェクトとその userProfileProperties プロパティから、これらのプロパティにアクセスします。 userProfileProperties プロパティにはすべてのユーザー プロファイル プロパティが含まれていますが、 PersonProperties オブジェクトには一般的に使われるプロパティ ( accountNamedisplayNameemail など) が含まれていて、より簡単にアクセスできます。User properties and user profile properties provide information about SharePoint users, such as display name, email, title, and other business and personal information. In client-side APIs, you access these properties from the PersonProperties object and its userProfileProperties property. The userProfileProperties property contains all user profile properties, but the PersonProperties object contains commonly used properties (such as accountName, displayName, and email) that are easier to access.

PeopleManager オブジェクトには、JavaScript オブジェクト モデルを使用してユーザー プロパティとユーザー プロファイル プロパティの取得に使用できる、次のメソッドが含まれています。The PeopleManager object includes the following methods that you can use to retrieve user properties and user profile properties by using the JavaScript object model:

クライアント UPI からのユーザー プロファイル プロパティは読み取り専用です (プロファイルのイメージは除きます。これは PeopleManager.setMyProfilePicture メソッドを使用することで変更できます)。他のユーザー プロファイル プロパティを変更するには、サーバー オブジェクト モデルを使用する必要があります。ユーザー プロファイルの操作の詳細については、「 SharePoint のユーザー プロファイルの操作」を参照してください。User profile properties from client APIs are read-only (except the profile picture, which you can change by using the PeopleManager.setMyProfilePicture method). If you want to change other user profile properties, you must use the server object model. For more information about working with user profiles, see Work with user profiles in SharePoint.

注意

クライアント側の UserProfile オブジェクトは、サーバー側のバージョンのようにすべてのユーザー プロパティを含んでいるわけではありません。The client-side UserProfile object doesn't contain all of the user properties as the server-side version. ただし、クライアント側のバージョンでは、現在のユーザーの個人用サイトを作成するメソッドを提供しています。However, the client-side version does provide the methods for creating a personal site for the current user. それを取得するには、ProfileLoader.getUserProfile メソッドを使用します。To retrieve it, use the ProfileLoader.getUserProfile method.

SharePoint JavaScript オブジェクト モデルを使用してユーザー プロパティを取得するために開発環境をセットアップする際の前提条件Prerequisites for setting up your development environment to retrieve user properties by using the SharePoint JavaScript object model

JavaScript オブジェクト モデルを使用してユーザー プロパティを取得するアプリケーション ページを作成するには、以下のものが必要となります。To create an application page that uses the JavaScript object model to retrieve user properties, you'll need:

  • 現在のユーザーとターゲット ユーザーに対して作成されたプロファイルがある SharePointSharePoint with profiles created for the current user and a target user

  • Visual Studio 2012Visual Studio 2012

  • Office Developer Tools for Visual Studio 2013Office Developer Tools for Visual Studio 2013

  • 現在のユーザーのユーザー プロファイル サービス アプリケーションにアクセスするための フル コントロール接続権限Full Control connection permissions to access the User Profile service application for the current user

Visual Studio 2012 でのアプリケーション ページの作成Create the application page in Visual Studio 2012

  1. SharePoint を実行しているサーバーで Visual Studio を開き、[ファイル][新規作成][プロジェクト] の順に選択します。On the server running SharePoint, open Visual Studio and choose File, New, Project.

  2. [新しいプロジェクト] ダイアログ ボックスで、上部のドロップダウン リストから [.NET Framework 4.5] を選択します。In the New Project dialog box, choose .NET Framework 4.5 from the drop-down list at the top of the dialog box.

  3. [ テンプレート] リストで、[ Office/SharePoint] を展開し、[ SharePoint ソリューション] カテゴリを選択し、[ SharePoint プロジェクト] テンプレートを選択します。In the Templates list, expand Office/SharePoint, choose the SharePoint Solutions category, and then choose the SharePoint Project template.

  4. プロジェクトに「UserProfilesJSOM」という名前を付け、[ OK] ボタンを選択します。Name the project UserProfilesJSOM, and then choose the OK button.

  5. [ SharePoint カスタマイズ ウィザード] ダイアログ ボックスに、ターゲットの SharePoint サイトの URL を入力し、[ ファーム ソリューションとして配置する]、[ 完了] ボタンの順に選択します。In the SharePoint Customization Wizard dialog box, enter the URL to your target SharePoint site, choose Deploy as a farm solution, and then choose the Finish button.

  6. [ ソリューション エクスプローラー] で 「UserProfilesJSOM」プロジェクトのショートカット メニューを開き、SharePoint「レイアウト」マップ フォルダーを追加します。In Solution Explorer, open the shortcut menu for the UserProfilesJSOM project, and then add a SharePoint "Layouts" mapped folder.

  7. レイアウト フォルダーで、UserProfilesJSOM フォルダーのショートカット メニューを開いて、UserProfiles.aspx という名前の新しい SharePoint アプリケーション ページを追加します。In the Layouts folder, open the shortcut menu for theUserProfilesJSOM folder, and then add a new SharePoint application page namedUserProfiles.aspx.

    注: この記事のコード例は、ページ マークアップでカスタム コードを定義していますが、ページ用に Visual Studio が生成する分離コード クラス ファイルは使用しません。Note: The code examples in this article define custom code in the page markup but do not use the code-behind class file that Visual Studio creates for the page.

  8. UserProfiles.aspx ページのショートカット メニューを開いて、[スタートアップ アイテムとして設定] を選択します。Open the shortcut menu for the UserProfiles.aspx page, and then choose Set as Startup Item.

  9. UserProfiles.aspx ページのマークアップでは、"Main"の asp:Content タグ内に次のコードを貼り付けます。このコードは、クエリ結果を表示する span コントロール、SharePoint JavaScript クラス ライブラリ ファイルを参照する SharePoint:ScriptLink コントロール、カスタム ロジックを含めるための script タグを追加します。In the markup for the UserProfiles.aspx page, paste the following code inside the "Main" asp:Content tags. This code adds a span control that displays the results of the query, SharePoint:ScriptLink controls that reference SharePoint JavaScript class library files, and script tags to contain your custom logic.

<span id="results"></span><br />
<SharePoint:ScriptLink ID="ScriptLink1" name="SP.js" runat="server"
    ondemand="false" localizable="false" loadafterui="true" />
<SharePoint:ScriptLink ID="ScriptLink2" name="SP.UserProfiles.js" runat="server"
    ondemand="false" localizable="false" loadafterui="true" />
<script type="text/javascript">
    // Replace this comment with the code for your scenario.
</script>
  1. ユーザー プロファイル プロパティを取得するロジックを追加するには、 script タグに囲まれたコメントを次のシナリオのいずれかのコード例と置き換えます。To add logic to retrieve user profile properties, replace the comment between the script tags with the code example from one of the following scenarios:

  2. アプリケーション ページをテストするには、メニューバーで [ デバッグ]、[ デバッグ開始] の順に選択します。web.config ファイルを変更するように求められた場合は、[ OK] ボタンをクリックします。To test the application page, on the menu bar, choose Debug, Start Debugging. If you're prompted to modify the web.config file, choose the OK button.

コード例: SharePoint JavaScript オブジェクト モデルで、PersonProperties オブジェクトとその userProfileProperties プロパティからユーザー プロファイル プロパティを取得するCode example: Retrieving user profile properties from the PersonProperties object and its userProfileProperties property in the SharePoint JavaScript object model

次のコード例は、 PersonProperties オブジェクトとその userProfileProperties プロパティをクエリすることで、ターゲット ユーザーのユーザー プロファイル プロパティを取得する方法を示しています。この例では以下の方法を示します。The following code example shows how to get user profile properties for a target user by querying the PersonProperties object and its userProfileProperties property. It shows how to:

注意

アプリケーション ページの作成」の手順で UserProfiles.aspx に追加した script タグの間に次のコードを貼り付けます。Paste the following code between the script tags that you added to the UserProfiles.aspx file in the Create the application page procedure. コードを実行する前に、domainName\\userName プレースホルダー値を置換してください。Replace the domainName\\userName placeholder value before you run the code. (このコード例では、分離コード クラス ファイルは使用しません。)(This code example does not use the code-behind class file.)


var personProperties;

// Ensure that the SP.UserProfiles.js file is loaded before the custom code runs.
SP.SOD.executeOrDelayUntilScriptLoaded(getUserProperties, 'SP.UserProfiles.js');

function getUserProperties() {

    // Replace the placeholder value with the target user's credentials.
    var targetUser = "domainName\\userName";

    // Get the current client context and PeopleManager instance.
    var clientContext = new SP.ClientContext.get_current();
    var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);

    // Get user properties for the target user.
    // To get the PersonProperties object for the current user, use the
    // getMyProperties method.
    personProperties = peopleManager.getPropertiesFor(targetUser);

    // Load the PersonProperties object and send the request.
    clientContext.load(personProperties);
    clientContext.executeQueryAsync(onRequestSuccess, onRequestFail);
}

// This function runs if the executeQueryAsync call succeeds.
function onRequestSuccess() {

    // Get a property directly from the PersonProperties object.
    var messageText = " \\"DisplayName\\" property is "
        + personProperties.get_displayName();

    // Get a property from the UserProfileProperties property.
    messageText += "<br />\\"Department\\" property is "
        + personProperties.get_userProfileProperties()['Department'];
    $get("results").innerHTML = messageText;
}

// This function runs if the executeQueryAsync call fails.
function onRequestFail(sender, args) {
    $get("results").innerHTML = "Error: " + args.get_message();
}

コード例: SharePoint JavaScript オブジェクト モデルの getUserProfilePropertiesFor メソッドを使用してユーザー プロファイル プロパティのセットを取得するCode example: Retrieving a set of user profile properties by using the getUserProfilePropertiesFor method in the SharePoint JavaScript object model

次のコード例では、 getUserProfilePropertiesFor メソッドを使用して、ターゲット ユーザーの指定された一連のユーザー プロファイル プロパティの値を取得します。この例では、以下の方法を示します。The following code example retrieves the values for a specified set of user profile properties for a target user by using the getUserProfilePropertiesFor method. It shows how to:

  • 取得するターゲット ユーザーとユーザー プロファイル プロパティを指定する UserProfilePropertiesForUser オブジェクトを作成します。この例では、 PreferredName プロパティと Department プロパティを取得します。Create a UserProfilePropertiesForUser object that specifies the target user and the user profile properties to retrieve. This example gets the PreferredName property and the Department property.

  • getUserProfilePropertiesFor メソッドを使用し、 UserProfilePropertiesForUser オブジェクトで渡すことで、指定されたプロパティの値を取得します (1 つのユーザー プロファイル プロパティの値だけを取得するには、 getUserProfilePropertyFor メソッドを使用します)。Get the values of the specified properties by using the getUserProfilePropertiesFor method and passing in the UserProfilePropertiesForUser object. (To retrieve the value for only one user profile property, use the getUserProfilePropertyFor method.)

  • 返されたプロパティの値の配列から値を取得します。Get the values from the returned array of property values.

注意

アプリケーション ページの作成」の手順で UserProfiles.aspx に追加した script タグの間に次のコードを貼り付けます。Paste the following code between the script tags that you added to the UserProfiles.aspx file in the Create the application page procedure. コードを実行する前に、domainName\\\\userName プレースホルダー値を置換してください。Replace the domainName\\\\userName placeholder value before you run the code. (このコード例では、分離コード クラス ファイルは使用しません。)(This code example does not use the code-behind class file.)


var userProfileProperties;

// Ensure that the SP.UserProfiles.js file is loaded before the custom code runs.
SP.SOD.executeOrDelayUntilScriptLoaded(getUserProperties, 'SP.UserProfiles.js');

function getUserProperties() {

    // Replace the placeholder value with the target user's credentials.
    var targetUser = "domainName\\\\userName";

    // Get the current client context and PeopleManager instance.
    var clientContext = new SP.ClientContext.get_current();
    var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);

    // Specify the properties to retrieve and target user for the 
    // UserProfilePropertiesForUser object.
    var profilePropertyNames = ["PreferredName", "Department"];
    var userProfilePropertiesForUser = 
        new SP.UserProfiles.UserProfilePropertiesForUser(
            clientContext,
            targetUser,
            profilePropertyNames);

    // Get user profile properties for the target user.
    // To get the value for only one user profile property, use the
    // getUserProfilePropertyFor method.
    userProfileProperties = peopleManager.getUserProfilePropertiesFor(
        userProfilePropertiesForUser);

    // Load the UserProfilePropertiesForUser object and send the request.
    clientContext.load(userProfilePropertiesForUser);
    clientContext.executeQueryAsync(onRequestSuccess, onRequestFail);
}

// This function runs if the executeQueryAsync call succeeds.
function onRequestSuccess() {
    var messageText = "\\"PreferredName\\" property is " 
        + userProfileProperties[0];
    messageText += "<br />\\"Department\\" property is " 
        + userProfileProperties[1];
    $get("results").innerHTML = messageText;
}

// This function runs if the executeQueryAsync call fails.
function onRequestFail(sender, args) {
    $get("results").innerHTML = "Error: " + args.get_message();
}

関連項目See also