Dynamics crm 2011 MS CRM 2011:通过IOrganizationService Web服务审核功能和更新

Dynamics crm 2011 MS CRM 2011:通过IOrganizationService Web服务审核功能和更新,dynamics-crm-2011,Dynamics Crm 2011,我们计划使用CRM 2011的审计功能来跟踪谁为几个实体更改了哪个内场。 但是,如果通过IOrganizationService更新实体,会发生什么情况 例如,假设您的系统中有一个addres实体,带有City=“London”和Street=“Baker Street”。现在,在代码中为该地址创建一个实体对象(后期绑定)。您可以设置它的GUID,City=“London”但是Street=“Downing Street”!现在您可以调用此实体的ioOrganizationService.Upd

我们计划使用CRM 2011的审计功能来跟踪谁为几个实体更改了哪个内场。 但是,如果通过
IOrganizationService
更新实体,会发生什么情况

例如,假设您的系统中有一个addres实体,带有
City=“London”
Street=“Baker Street”
。现在,在代码中为该地址创建一个实体对象(后期绑定)。您可以设置它的GUID,
City=“London”
但是
Street=“Downing Street”
!现在您可以调用此实体的
ioOrganizationService.Update

审计功能是否会意识到街道已经改变,但城市没有改变?或者他会告诉我该城市的名称已更改,而事实并非如此吗?

审计提取作为更新消息一部分提交的未更改字段。例如,以下代码将导致审计记录记录对lastname属性的更改,尽管提交的值与数据库中的值相同。换句话说,审计是在消息级别执行的,没有实际将值与数据库进行比较(据我所知,这将是一项非常昂贵的工作)

var connection=CrmConnection.Parse(“Url=http://localhost/acme;");
var服务=新组织服务(连接);
//创建新实体
实体e=新实体(“联系人”);
e[“firstname”]=“Foo”;
e[“lastname”]=“Bar”;
Guid id=service.Create(e);
//只更改名字,并提交不变的姓氏
e=新实体(“联系人”);
e[“联系人id”]=id;
e[“firstname”]=“FooChanged”;
e[“lastname”]=“Bar”;
服务.更新(e);
//删除实体
服务。删除(“联系人”,id);
希望这有帮助。

George

没错-客户端代码只提交更改很重要。除了不必要的审核之外,如果您提交的字段没有真正更改,您还可能无意中触发自定义插件。