我们计划使用CRM 2011的审核功能来跟踪谁更改了几个实体的内场。
但是,如果您通过IOrganizationService
更新实体会发生什么?
例如,假设您的系统中有一个带有City="London"
和Street="Baker Street"
的地址实体。现在,在您的代码中,您将为此地址创建一个实体对象(后期绑定)。您设置了GUID,City="London"
,但Street="Downing Street"
!现在,您为此实体调用IOrganizationService.Update
。
审计部门是否会意识到街道已经改变但是纽约市还没有改变?或者他会告诉我,城市已被改变,而事实上并非如此?
答案 0 :(得分:3)
审核将选取作为更新消息的一部分提交的未更改字段。例如,以下代码将导致审计记录记录对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);
希望这有帮助。
乔治