Compartilhar via


Dynamics CRM 2011 SDK: ユーザー設定情報を取得する

みなさん、こんにちは。

今日は開発者の方向けの情報として、Microsoft Dynamics CRM
ユーザーの設定の取得、更新についてのサンプルを紹介します。

UsetSettings エンティティ

Microsoft Dynamics CRM では、各ユーザーの設定を管理者が
一括して参照する機能がありません。しかし全ユーザーの設定
の参照や更新を行いたいという要望は多くあります。

ユーザーの設定は UserSettings エンティティに格納されており、
SDK を利用してデータを取得、更新することが可能です。

参照: UserSettings エンティティ メタデータ
https://msdn.microsoft.com/ja-jp/library/gg328438.aspx

サンプルコード

今回は、サンプル: タイム ゾーン情報の取得を利用します。
https://msdn.microsoft.com/ja-jp/library/hh547406.aspx

1. Visual Studio で sdk\samplecode\cs\businessdatamodel\
businessmanagement\businessmanagement.sln を開きます。

2. プロジェクトのプロパティより、スタートアップ オブジェクトに
WorkingWithTimeZones を指定します。
image

3. WorkingWithTimeZones.cs を開きます。

4. 65行目 から 70 行目までをコメントアウトします。

5. 63行目 の RetrieveCurrentUsersSettings(); の次の行に以下の
コードを差し込みます。

Console.WriteLine("LocaleId: " + _localeId + " TimeZoneCode: " + _timeZoneCode);

6. プログラムを実行します。必要な接続情報を入力します。

7. 以下のように、接続したユーザーのロケールとタイムゾーン
が表示されます。

image

サンプルコードの変更

では次に、このサンプルコードを発展させて、全ユーザー名と
タイムゾーンの情報を表示してみます。

以下のメソッドをクラスに追加します。

private void RetrieveAllUsersSettings()
{
    // 有効でかつライセンスがあるユーザーのみ取得
    var users = _serviceProxy.RetrieveMultiple(
        new QueryExpression(SystemUser.EntityLogicalName)
        {
            ColumnSet = new ColumnSet("fullname"),
            Criteria = new FilterExpression
            {
                Conditions =
                {
                    new ConditionExpression("isdisabled", ConditionOperator.Equal, false),
                    new ConditionExpression("islicensed", ConditionOperator.Equal, true)
                }
            }
        }).Entities;

    // それぞれのユーザーの設定を確認
    foreach (SystemUser user in users)
    {
        var userSettings = _serviceProxy.RetrieveMultiple(
        new QueryExpression(UserSettings.EntityLogicalName)
        {
            ColumnSet = new ColumnSet("localeid", "timezonecode"),
            Criteria = new FilterExpression
            {
                Conditions =
                {
                    new ConditionExpression("systemuserid", ConditionOperator.Equal, user.SystemUserId)
                }
            }
        }).Entities[0].ToEntity<UserSettings>();

        // 結果を画面に表示
        Console.WriteLine("UserName: " + user.FullName + " LocaleId: " + _localeId + " TimeZoneCode: " + _timeZoneCode);
    }
}

こちらのメソッドを実行することで、各ユーザーのロケールと
タイムゾーン情報を取得することが出来ます。

まとめ

後は取得する列の追加、削除や結果をどこに表示するか、また更新
できる列については更新する等の機能を追加することが可能です。

- Dynamics CRM サポート 中村 憲一郎