CrmService.Update方法不适用于某些属性

时间:2011-10-16 15:52:08

标签: c# dynamics-crm-4

这是我的问题: 我想要做的就是使用webservice更新Crm 4中的“联系人”实体。

这是我的代码:

CrmService eatupCrmService = CrmInteraction.InitializeCrmService();
contact updatedDelegate = new contact();
CeatupCrmService.Key contactPrimaryKey = new CeatupCrmService.Key();
contactPrimaryKey.Value = delegateId;
updatedDelegate.contactid = contactPrimaryKey;
updatedDelegate.address2_postalcode = delegateDetails.ContactDetailsPhysicalAddressCode;
eatupCrmService.Update(updatedDelegate);

我使用InitializeCrmService()来检索并且它有效。 更新address2_postalcode属性时,出现以下错误:

  

“服务器无法处理请求。”

,除了Detail \ InnerText:

  

“0x80040216发生意外错误。平台”。

如果我更改代码以更新其他属性,请说我尝试更新mobilephone属性 而不是address2_postalcode它没有任何例外抛出。

一旦我尝试更新address2_postalcode,我就会收到该错误。 Crm中的address2_postalcode数据类型为nvarchar,其分配的值(delegateDetails.ContactDetailsPhysicalAddressCode)属于c#的string类型。

任何人都知道为什么会发生这种情况?

3 个答案:

答案 0 :(得分:2)

同样的错误和情况发生在我身上,因为我做了一个SSIS dts来从平面文件加载CRM中的联系人,以不支持的方式,我忘了填写CustomerAddressBase表。在“正确”填充此表(每个联系人两行)后,View CustomerAddress(address1_addressid和address2_addressid)的属性不为null。如果您不知道如何填写此表(CustomerAddressBase),只需直接创建一个与CRM中填写的地址字段的新联系人,然后转到SQL Server管理工作室,通过查询,您可以查看并了解字段的填充方式。

希望它有所帮助,

亚历

答案 1 :(得分:1)

在尝试理解为什么会发生这种错误之后,我试图成功了。

当我开始处理这个项目时,客户指示我只使用特定联系人进行测试,因为我们直接在生产环境中工作。 (客户端还没有开发环境)

在执行一些数据库查询以将此联系人与其他人进行比较后(更新仅对测试联系人失败)我注意到我的联系人的address2_addressid属性为NULL。

然后我在 Customization \ Customize 实体下进入CRM并打开了联系人实体。在属性下,我按类型排序,发现该联系人有3 primarykey个属性:contactidaddress1_addressidaddress2_addressid

测试联系人的address1_addressidaddress2_addressid字段为NULL,这导致CRM Web服务抛出 0x80040216发生意外错误。我试图更新任何地址字段时出现平台错误。

我不知道为什么这个联系人将这些ID设置为NULL,我问并且创建联系人的人没有解释这可能发生的原因。我想这仍然是一个谜,但至少我现在已经得到了我得到的错误的答案,我可以在我的代码中满足这一点。

答案 2 :(得分:0)

我不知道它可以工作...... 我认为你必须做CrmService.Create(联系),然后使用返回的Guid你可以执行更新...

更新不起作用,因为您在联系人实体上设置的ID的记录在数据库中不存在...

contact updatedDelegate = new contact(); 

CeatupCrmService.Key contactPrimaryKey = new CeatupCrmService.Key();

您可以执行以下操作:

crmService eatupCrmService = CrmInteraction.InitializeCrmService();
        contact updatedDelegate = new contact();
        updatedDelegate.address2_postalcode = delegateDetails.ContactDetailsPhysicalAddressCode;
        Guid cId = eatupCrmService.Create(updatedDelegate);
        updatedDelegate.contactid = new Key(cId);
        //set more fields if you want
        eatupCrmService.Update(updatedDelegate);//update record

希望我帮助过你。