我想使用数值更新实体实例中的字段。我看到的所有例子(比如这一个)都是基于检索实例、更改实例然后存储在DB中的范例。这看起来效率很低,而且代码看起来很糟糕,而且不必要地长。
是否有更新实体的较短方法?
我有以下数据:
- 名称为String(一个是lead,另一个是*new_holder*)
- guid为guid
- 值为int
- 字段名称为"字符串">
所以,我试着这样开始。
DynamicEntity entity = new DynamicEntity("new_holder");
TargetUpdateDynamic update = new TargetUpdateDynamic();
update.Entity=entity;
问题是,我不确定如何处理要存储的数据。
是否应将Add()作为属性?还是直接在袋子里写?
entity.Properties.Add(...); entity["field name"] = ...;
我该如何对待身份?我真的需要使用那么长的语法吗?
Guid guid = ...; Lookup lookup = new Lookup("new_holder", guid); LookupProperty lookupProperty = new LookupProperty("id", lookup); entity.Properties.Add(lookupProperty);
在声明查找时,我是否假设类型正确?
Lookup lookup1 = new Lookup("lead", guid1); Lookup lookup2 = new Lookup("new_holder", guid2);
在声明查找属性时,我是否假设字段名正确?或者我应该使用new_holderid、holder_uid或除了id之外的任何其他东西吗?
LookupProperty lookupProperty = new LookupProperty("id", lookup);
如果您已经拥有记录的Guid,则不需要首先检索实体。
我没有CRM 4.0环境来测试,但是:
1) 如果你想给一个属性赋值,不需要先检查(和添加)属性,只需写:
entity["field name"] = ...;
但我不确定这是否也适用于主id字段
2) 标识不是Lookup
类型,而是Key
类型,因此如果您的实体是new_holder
,则id字段是new_holderid
:
entity["new_holderid"] = new Key(guid);
因为我无法检查这个语法是否有效,所以你可以总是写:
entity.Properties.Add(new KeyProperty("new_holderid", new Key(guid)));
3) 如果要分配int
,则需要使用CrmNumber
:
entity["fieldname"] = new CrmNumber(5);
完整示例:
DynamicEntity entity = new DynamicEntity("new_holder");
entity.Properties.Add(new KeyProperty("new_holderid", new Key(guid)));
entity["field name"] = new CrmNumber(5);
TargetUpdateDynamic update = new TargetUpdateDynamic();
update.Entity = entity;
UpdateRequest request = new UpdateRequest();
request.Target = update;
UpdateResponse response = (UpdateResponse)service.Execute(request);
正如我之前所写的,我没有CRM 4.0实例,但你可以尝试代码并检查哪种语法有效