更新现有实例的字段

时间:2014-03-02 18:23:33

标签: c# plugins dynamics-crm-4

我想使用数值更新实体实例中的字段。我见过的所有示例(例如this one)都基于检索实例,更改实例然后存储在数据库中的范例。这似乎效率低下,而且代码看起来很讨厌而且不必要很长。

是否有更短的方式来更新实体?

我有以下数据:

  • 名称为 String (一个是 lead ,另一个是* new_holder *)
  • 指导 Guid
  • 值为 int
  • 字段名称为“String”

所以,我试着这样开始。

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

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

  1. 我应该添加()作为属性吗?或者只是写进包里?

    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. 在声明lookup属性时,我是否假设了正确的字段名称?或者我应该使用 new_holderid holder_guid 或除 id 以外的任何其他内容?

    LookupProperty lookupProperty = new LookupProperty("id", lookup);
    

1 个答案:

答案 0 :(得分:2)

如果您已拥有记录的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实例,但您可以尝试代码并检查哪种语法有效