【问题标题】:Update Account using Dynamics CRM 2011 SDK and C#使用 Dynamics CRM 2011 SDK 和 C# 更新帐户
【发布时间】:2016-02-05 17:32:27
【问题描述】:

我正在使用 Dynamics CRM 2011 C# SDK 从我的本地 DynamicsCRM 2011 写入和读取数据。

我目前从https://msdn.microsoft.com/en-us/library/gg695803%28v=crm.5%29.aspx的这个基本示例开始

因此,创建新帐户或联系人并将其写入 Dynamics 似乎没有问题,并且工作方式如下:

var companyTest = new Xrm.Account
{
  Name = "Company Test1",
  AccountNumber = "1",
  Address1_Country = "D",
  Address1_City = "M",
  Telephone1 = "12345678",
  EMailAddress1 = "oldmail@gg.com"
};

 xrm.AddObject(companyTest);
 xrm.SaveChanges();

现在我不完全了解如何更改我创建的帐户的某些信息。

所以我尝试了这个:

var companyTest = new Xrm.Account
{
  Name = "Company Test1",
  AccountNumber = "1",
  Address1_Country = "D",
  Address1_City = "M",
  Telephone1 = "12345678",
  EMailAddress1 = "newmail@gg.com" // change the email for instance
};

xrm.UpdateObject(companyTest);
xrm.SaveChanges();

但在执行此操作时出现以下错误:'System.InvalidOperationException'

我该如何正确地做到这一点?

另外,如果有人可以推荐有关 DynamicsCRM SDK 的书籍或视频课程,我将不胜感激。

【问题讨论】:

    标签: c# dynamics-crm-2011


    【解决方案1】:

    在您的示例中,您使用早期绑定和 XrmContext 来添加和修改帐户。

    如果您已经在上下文中拥有该帐户(这意味着您在创建它之后立即执行更新,您只需要更改 companyTest 中的值:

    var companyTest = new Xrm.Account
    {
      Name = "Company Test1",
      AccountNumber = "1",
      Address1_Country = "D",
      Address1_City = "M",
      Telephone1 = "12345678",
      EMailAddress1 = "oldmail@gg.com"
    };
    
     xrm.AddObject(companyTest);
     xrm.SaveChanges();
    
    companyTest.AccountNumber = "2";
    xrm.UpdateObject(companyTest);
    xrm.SaveChanges();
    

    如果您正在更新尚未在上下文中的记录,则需要提供记录的 ID,如下所示:

    Guid accountId = new Guid(""); // account id here
    var companyTestUpdate = new Xrm.Account
    {
      Id = accountId,
      AccountNumber = "2"
    };
    
    xrm.UpdateObject(companyTest);
    xrm.SaveChanges();
    

    如果您刚开始使用CRM SDK和CRUD操作,我建议使用后期绑定和IOrganizationService而不是XrmContext,这样更容易。

    【讨论】:

    • 非常感谢。我必须在进行更新之前使用它:xrm.Attach(companyTestUpdate);在这里找到它:stackoverflow.com/questions/11455592/…
    • 我建议不要使用 XrmServiceContext 进行更新,因为即使属性没有更改,它也可能触发工作流。最好直接使用 IOrganizationService 。另外,如果您刚开始,最好看看使用测试框架来保持您的自定义尽可能健壮,例如 Git 上的this
    • @Jordi 我将针对 XrmVirtual UG 进行单元测试。我计划展示我们的两个框架。
    • 太棒了! :) 会在任何地方播出吗?很高兴看到。现在要睡觉了,这里是凌晨 2 点。
    • 我也想知道)
    猜你喜欢
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多