这是我的问题: 我想要做的就是使用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
类型。
任何人都知道为什么会发生这种情况?
答案 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
个属性:contactid
,address1_addressid
和address2_addressid
。
测试联系人的address1_addressid
和address2_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
希望我帮助过你。