Разработка
18
Окт
6

Программное изменение пользовательских настроек

Изменить личные настройки пользователей могут только сами пользователи. У администраторов нет стандартного централизованного инструмента по массовому редактированию всех пользователей (правда есть сторонние инструменты). Но если Вам нужно, например, для нового подразделения массово задать часовой пояс у всех его пользователей, то можете воспользоваться примерно таким кодом:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Client;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Runtime.Serialization;

namespace userSettings
{
    class Program
    {
        static void Main(string[] args)
        {
            // Подключаемся к CRM
            ClientCredentials credentials = new ClientCredentials();
            credentials.Windows.ClientCredential = new System.Net.NetworkCredential("Administrator", "1qaz@WSX", "D2011");
            Uri uri = new Uri("http://crm2011:5555/superfirma/XRMServices/2011/Organization.svc");
            OrganizationServiceProxy proxy = new OrganizationServiceProxy(uri, null, credentials, null);
            proxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
            IOrganizationService service = (IOrganizationService)proxy;

            // Запрашиваем текущищие настройки
            QueryByAttribute query = new QueryByAttribute("usersettings");
            query.AddAttributeValue("systemuserid", new Guid("8990174E-9881-E011-8FD5-000C29CDB72E"));
            query.ColumnSet = new ColumnSet("timezonecode", "uilanguageid", "paginglimit");
            EntityCollection userSettingsСoll = service.RetrieveMultiple(query);
            Entity userSettings = userSettingsСoll.Entities[0];

            Console.WriteLine("Текущие настройки.");
            Console.WriteLine("Код временной зоны: " + userSettings["timezonecode"]);
            Console.WriteLine("Код языка: " + userSettings["uilanguageid"]);
            Console.WriteLine("Количество записей в представлении: " + userSettings["paginglimit"]);

            // Обновление настроек пользователя
            userSettings["timezonecode"] = 256;
            userSettings["uilanguageid"] = 1033;
            userSettings["paginglimit"] = 100;

            service.Update(userSettings);

            Console.WriteLine("\nНастройки обновлены.");
            Console.WriteLine("\nPress <Enter> to exit.");
            Console.ReadLine();
        }
    }
}

Здесь происходит следующее:

  • Подключаемся к CRM;
  • Запрашиваем личные настройки одно конкретного Пользователя;
  • Обновляем настройки.



Комментарии (6)
  • Родион 18.10.2012

    Здравствуйте, вопрос вообще не по теме:)
    Перестал работать календарь обслуживания. Просто вместо него написано, произошла ошибка и все. Никак не описывается с чем ошибка.
    Есть мысли из-за чего такое может произойти? Вообще с чем это может быть связано.
    Спасибо.

  • slivka_83 18.10.2012

    Здрасьте.
    Не встречался с таким — вообще с календарем почти не работал.
    В качестве профилактичской меры можно попробовать выполнить починку системы (если нет неподдерживаемой кастомизации) и/или установить последний ролап.

  • Виталий 18.10.2012

    Здравствуйте! А подскажите пожалуйста о «сторонних инструментах», о которых упоминается в статье.

  • Виталий 18.10.2012

    Спасибо! Вы когда-нибудь пользовались этими приложениями? На сколько я понимаю все они ограниченные и нестабильные (2 приложения в beta-тестировании).

  • slivka_83 18.10.2012

    Пробовал в тетстовой среде. На продакшене юзаnm не доводилось.

*

code