次の方法で共有


ユーザー プロファイル プロパティ読み取り/更新サンプル アドイン (SharePoint)

UserProfile.Manipulation.CSOM サンプルは、特定のユーザーのユーザー プロファイル プロパティを読み取って更新する方法を示しています。 このサンプルは、プロバイダー ホスト型アドインを使用して以下の操作を実行します。

  • ユーザーのすべてのユーザー プロファイル プロパティを読み取って表示します。
  • 単一値を持つユーザー プロファイル プロパティを更新します。
  • 複数値を持つユーザー プロファイル プロパティを更新します。

このソリューションは、以下の操作を行う場合に使用します。

  • ユーザーのユーザー プロファイル プロパティに対してデータの読み書きを実行します。
  • ユーザー プロファイル プロパティの値を使用して SharePoint を個人用設定します。

注:

このコード サンプルは Office 365 でのみ実行できます。

はじめに

まず、UserProfile.Manipulation.CSOM サンプル アドインを、GitHub 上の Office 365 Developer Patterns and Practices プロジェクトからダウンロードします。

注:

この記事で提供されるコードは、明示または黙示のいかなる種類の保証なしに現状のまま提供されるものであり、特定目的への適合性、商品性、権利侵害の不存在についての暗黙的な保証は一切ありません。

シナリオ 1 を実行する前に、以下の作業を行います。

  1. Office 365 サイトの上部にある自分のプロファイル画像を選択して、[自己紹介] を選択します。

    [自己紹介] が選択された状態のユーザー プロファイル ページのスクリーンショット

  2. [自己紹介] ページで、[プロファイルの編集] を選択します。

  3. [自己紹介] に、I work at Contoso と入力します。

  4. [すべて保存して閉じる] を選択します。

シナリオ 3 を実行する前に、以下の作業を行います。

  1. サイトの上部にある自分のプロファイル画像を選択して、[自己紹介] を選択します。
  2. [自己紹介] ページで、[プロファイルの編集] を選択します。
  3. [詳細の編集] で、[詳細] を選択します。
  4. [スキル] に、C#, JavaScript と入力します。
  5. [すべて保存して閉じる] を選択します。

UserProfile.Manipulation.CSOM サンプル アドインを使用する

このサンプルを実行すると、以下の図に示すプロバイダー ホスト型アドインが起動します。

UserProfile.Manipulation.CSOM アプリの開始ページのスクリーンショット

このコード サンプルには、3 つのシナリオが含まれています。

シナリオ 以下の方法を説明
1 アプリを実行しているユーザーのユーザー プロファイル プロパティをすべて読み取ります。
2* 単一値を持つユーザー プロファイル プロパティを更新します。
3* 複数値を持つユーザー プロファイル プロパティを更新します。

注:

このシナリオは、Microsoft 365 でのみサポートされています。

シナリオ 1: すべてのユーザー プロファイル プロパティの読み取り

[シナリオ 1 の実行] を選択すると、アドインは現在のユーザーのユーザー プロファイル プロパティをすべて読み取ってから、以下の図に示すように、ユーザー プロファイル データを [現在のユーザー プロファイル プロパティ] に表示します。

現在のユーザーのプロファイル プロパティ データのスクリーンショット

[シナリオ 1 の実行] を選択すると、CodeSample1.aspx.cs 内の btnScenario1_Click メソッドが呼び出され、以下のタスクが実行されます。

  • PeopleManager を使用して、現在のユーザーのユーザー プロファイル プロパティをすべて取得します。
  • PersonProperties.UserProfileProperties の反復処理を実行して、テキスト ボックス内にユーザー プロファイル プロパティの値を一覧表示します。
protected void btnScenario1_Click(object sender, EventArgs e)
{
  var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);

  using (var clientContext = spContext.CreateUserClientContextForSPHost())
  {
    // Get the people manager instance and load current properties.
    PeopleManager peopleManager = new PeopleManager(clientContext);
    PersonProperties personProperties = peopleManager.GetMyProperties();
    clientContext.Load(personProperties);
    clientContext.ExecuteQuery();

    // Output user profile properties to a text box.
    txtProperties.Text = "";
    foreach (var item in personProperties.UserProfileProperties)
    {
      txtProperties.Text += string.Format("{0} - {1}{2}", item.Key, item.Value, Environment.NewLine);
    }
  }
}

シナリオ 2: 単一値を持つユーザー プロファイル プロパティの更新

シナリオ 2 では、単一値を持つユーザー プロファイル プロパティの更新方法を示します。 以下の図に示すように、このアドインを実行しているユーザーの [自己紹介] ユーザー プロファイル プロパティの現在の値は I work at Contoso です。

シナリオ 2 のスタート ページのスクリーンショット

[自己紹介] ユーザー プロファイル プロパティの値を更新するには、[新しい自己紹介の値] ボックスに I am a software engineer at Contoso と入力して、[シナリオ 2 の実行] を選択します。 コードにより、[自己紹介] プロパティの値が I am a software engineer at Contoso に更新されます。

以下の図に示すように、このアドインは [自己紹介の現在の値][自己紹介] ユーザー プロファイル プロパティの新しい値に更新します。

更新された [自己紹介] ユーザー プロファイル プロパティのスクリーンショット

[シナリオ 2 の実行] を選択すると、CodeSample2.aspx.cs 内の btnScenario2_Click メソッドが呼び出され、以下の操作が実行されます。

  • PeopleManager を使用して、現在のユーザーのユーザー プロファイル プロパティを取得します。
  • HTML でユーザーが入力したテキストの書式を設定します。
  • 以下の 3 つのパラメーターを受け入れる SetSingleValueProfileProperty を使用して、AboutMe ユーザー プロファイル プロパティの値を更新します。
    • ユーザー プロファイルを更新する対象のユーザーのアカウント名。
    • ユーザー プロファイル プロパティ名 (このシナリオでは AboutMe)。
    • HTML 形式のプロパティ値 (このシナリオでは I am a software engineer at Contoso)。
protected void btnScenario2_Click(object sender, EventArgs e)
{
  var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);

  using (var clientContext = spContext.CreateUserClientContextForSPHost())
  {
    // Get the people manager instance and initialize the account name.
    PeopleManager peopleManager = new PeopleManager(clientContext);
    PersonProperties personProperties = peopleManager.GetMyProperties();
    clientContext.Load(personProperties, p => p.AccountName);
    clientContext.ExecuteQuery();

    // Convert entry to HTML.
    string updatedValue = (txtAboutMe.Text).Replace(Environment.NewLine, "");

    // Update the AboutMe property for the user using account name from the user profile.
    peopleManager.SetSingleValueProfileProperty(personProperties.AccountName, "AboutMe", updatedValue);
    clientContext.ExecuteQuery();
  }
}

注:

カスタム ユーザー プロファイル プロパティを使用する場合は、ユーザーが編集できるようにプロパティを構成します。 このシナリオで使用する手法を、カスタム ユーザー プロファイル プロパティで使用できます。

シナリオ 3: 複数値を持つユーザー プロファイル プロパティの更新

シナリオ 3 では、複数値を持つユーザー プロファイル プロパティの更新方法を示します。 以下の図は、シナリオ 3 の開始ページを示しています。 [スキルの現在の値] には、アプリを実行しているユーザーのスキルが表示されます。 このスキルは、そのユーザーの SPS-Skills ユーザー プロファイル プロパティから読み込まれます。

シナリオ 3 のスタート ページのスクリーンショット

このアドインから SPS-Skills ユーザー プロファイル プロパティに新しいスキルを追加するには、以下の操作を実行します。

  1. HTML5 と入力してから、[スキルの追加] を選択します。
  2. 「ASP.NET」と入力し、[スキルの 追加] を選択します。
  3. [シナリオ 3 の実行] を選択します。
  4. [スキルの現在の値] にユーザーのスキルの新しい一覧が表示されていることを確認します。
  5. ユーザーの SPS-Skills ユーザー プロファイル プロパティにスキルの新しい一覧が表示されていることを確認します。

[シナリオ 3 の実行] を選択すると、CodeSample3.aspx.cs 内の btnScenario3_Click メソッドが呼び出され、以下の操作が実行されます。

  • PeopleManager を使用して、現在のユーザーのユーザー プロファイル プロパティを取得します。
  • リスト ボックスに表示されるスキルの一覧を読み取ります。
  • 以下の 3 つのパラメーターを受け入れる SetMultiValuedProfileProperty を使用して、SPS-Skills ユーザー プロファイル プロパティに新しいスキルを保存します。
    • ユーザー プロファイルを更新する対象のユーザーのアカウント名。
    • ユーザー プロファイル プロパティ名 (SPS-Skills)。
    • プロパティ値 (文字列オブジェクトからなる List として)。
  protected void btnScenario3_Click(object sender, EventArgs e)
{
  var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);

  using (var clientContext = spContext.CreateUserClientContextForSPHost())
  {
    // Get the people manager instance and initialize the account name.
    PeopleManager peopleManager = new PeopleManager(clientContext);
    PersonProperties personProperties = peopleManager.GetMyProperties();
    clientContext.Load(personProperties, p => p.AccountName);
    clientContext.ExecuteQuery();

    // Collect the user's skills from the list box in order to update the user's profile.
    List<string> skills = new List<string>();
    for (int i = 0; i < lstSkills.Items.Count; i++)
    {
        skills.Add(lstSkills.Items[i].Value);
    }

    // Update the SPS-Skills property for the user using account name from the user's profile.
    peopleManager.SetMultiValuedProfileProperty(personProperties.AccountName, "SPS-Skills", skills);
    clientContext.ExecuteQuery();

    // Refresh the values.
    RefreshUIValues();
  }
}

関連項目