【问题标题】:Update a field of an existing instance更新现有实例的字段
【发布时间】:2026-01-22 07:35:01
【问题描述】:

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

有更新实体的更短的方法吗?

我有以下数据:

  • 名称为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_guid 还是除了 id 之外的其他任何东西?

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

【问题讨论】:

    标签: c# plugins dynamics-crm-4


    【解决方案1】:

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

    【讨论】:

    • 太棒了,G!我明天在工作中试一试,然后将其作为正确答案进行检查。如果所有这些都可以直接奏效,我认为你也应该得到一些赏金。让我回复你。
    • 出于某种原因我不能赏金你。该链接没有出现在我的屏幕上... :(
    • @KonradViltersten 别担心,重要的是你解决了 :)
    最近更新 更多