2011-03-15 60 views
1

我们计划使用CRM 2011的审计功能来跟踪谁已更改了哪些实体的内部实体。 但是如果您通过IOrganizationService更新实体会发生什么情况?MS CRM 2011:通过IOrganizationService webservice审计功能和更新

例如,假设您的系统中有一个地址为City="London"Street="Baker Street"的地址实体。现在在你的代码中为这个地址创建一个实体对象(延迟绑定)。您设置了它的GUID,City="London"但是Street="Downing Street"!现在您可以致电IOrganizationService.Update了解此实体。 审计功能是否意识到街道已经改变,但城市还没有?或者他会告诉我,这个城市实际上并没有改变?

回答

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); 

希望这有助于。
George

+0

准确地说 - 客户端代码只提交更改很重要。除了不必要的审计之外,如果您提交的字段没有真正改变,您也可能无意中触发自定义插件。 – 2011-08-05 02:46:51