MS CRM 2011: функция аудита и обновления через веб-службу IOrganizationService

мы планируем использовать функцию аудита CRM 2011, чтобы отслеживать, кто изменил какое приусадебное поле для пары объектов. Но что произойдет, если вы обновите сущность через IOrganizationService?

Например, предположим, что в вашей системе есть адресная сущность с City="London" и Street="Baker Street". Теперь в вашем коде вы создаете объект сущности (поздняя привязка) для этого адреса. Вы устанавливаете его GUID, City="London" но Street="Downing Street"! Теперь вы вызываете IOrganizationService.Update для этой сущности. Будет ли функция аудита знать, что улица изменилась, а город нет? Или он скажет мне, что Город изменился, хотя на самом деле это не так?


person Rocko    schedule 15.03.2011    source источник


Ответы (1)


аудит выберет неизмененные поля, которые были отправлены как часть сообщения об обновлении. Например, следующий код приведет к тому, что в записи аудита будет записано изменение атрибута lastname, несмотря на то, что отправленное значение идентично значению в базе данных. Другими словами, аудит выполняется на уровне сообщений и без фактического сравнения значений с базой данных (что, как я понимаю, было бы достаточно затратным мероприятием).

var connection = CrmConnection.Parse("Url=http://localhost/acme;");
var service = new OrganizationService(connection);

// create new entity
Entity e = new Entity("contact");
e["firstname"] = "Foo";
e["lastname"] = "Bar";
Guid id = service.Create(e);

// change just the first name and submit unchanged last name as well
e = new Entity("contact");
e["contactid"] = id;
e["firstname"] = "FooChanged";
e["lastname"] = "Bar";
service.Update(e);

// remove the entity
service.Delete("contact", id);

Надеюсь, это поможет.
Джордж

person georged    schedule 31.03.2011
comment
Точно - важно, чтобы клиентский код только отправлял изменения. Помимо ненужного аудита, вы также можете непреднамеренно активировать пользовательские плагины, если отправляете поля, которые на самом деле не изменились. - person Josh Painter; 05.08.2011