更新现有实例的字段



我想使用数值更新实体实例中的字段。我看到的所有例子(比如这一个)都是基于检索实例、更改实例然后存储在DB中的范例。这看起来效率很低,而且代码看起来很糟糕,而且不必要地长。

是否有更新实体的较短方法?

我有以下数据:

  • 名称为String(一个是lead,另一个是*new_holder*)
  • guid为guid
  • 值为int
  • 字段名称为"字符串">

所以,我试着这样开始。

DynamicEntity entity = new DynamicEntity("new_holder");
TargetUpdateDynamic update = new TargetUpdateDynamic();
update.Entity=entity;

问题是,我不确定如何处理要存储的数据。

  1. 是否应将Add()作为属性?还是直接在袋子里写?

    entity.Properties.Add(...);  
    entity["field name"] = ...;
    
  2. 我该如何对待身份?我真的需要使用那么长的语法吗?

    Guid guid = ...;  
    Lookup lookup = new Lookup("new_holder", guid);
    LookupProperty lookupProperty = new LookupProperty("id", lookup);
    entity.Properties.Add(lookupProperty);
    
  3. 在声明查找时,我是否假设类型正确?

    Lookup lookup1 = new Lookup("lead", guid1);  
    Lookup lookup2 = new Lookup("new_holder", guid2);
    
  4. 在声明查找属性时,我是否假设字段名正确?或者我应该使用new_holderidholder_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实例,但你可以尝试代码并检查哪种语法有效

最新更新