C# 使用Dynamics CRM 2011 SDK和C更新帐户#

C# 使用Dynamics CRM 2011 SDK和C更新帐户#,c#,dynamics-crm-2011,C#,Dynamics Crm 2011,我正在使用Dynamics CRM 2011 C#SDK从我的内部部署DynamicCRM 2011中写入和读取数据 我现在从这个基本的例子开始 因此,创建新帐户或联系人并将其写入Dynamics似乎没有问题,其工作原理如下: var companyTest = new Xrm.Account { Name = "Company Test1", AccountNumber = "1", Address1_Country = "D", Address1_City = "M",

我正在使用Dynamics CRM 2011 C#SDK从我的内部部署DynamicCRM 2011中写入和读取数据

我现在从这个基本的例子开始

因此,创建新帐户或联系人并将其写入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();
Guid accountId = new Guid(""); // account id here
var companyTestUpdate = new Xrm.Account
{
  Id = accountId,
  AccountNumber = "2"
};

xrm.UpdateObject(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的书籍或视频课程,我将不胜感激。

在您的示例中,您使用的是早期绑定和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,如下所示:

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();
Guid accountId = new Guid(""); // account id here
var companyTestUpdate = new Xrm.Account
{
  Id = accountId,
  AccountNumber = "2"
};

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

如果您刚开始使用CRM SDK和CRUD操作,我建议您使用late bound和
IOOrganizationService
而不是
XrmContext
,这会更简单。

非常感谢。在进行更新之前,我不得不使用它:xrm.Attach(companyTestUpdate);在此处找到:我建议不要使用XrmServiceContext进行更新,因为即使属性没有更改,它也可能触发工作流。最好直接使用IOrganizationService进行更新。此外,如果您刚开始,最好看看如何使用测试框架来保持您的定制尽可能健壮,如一个在Git上。@Jordi我要做一个关于XrmVirtual UG的单元测试的演讲。我计划展示我们的两个框架。太好了!:)这会在任何地方播出吗?很高兴见到你。现在要睡觉了,现在是凌晨2点。我也想知道。)