CrmService.更新方法对某些属性不起作用
本文关键字:属性 不起作用 更新 新方法 CrmService | 更新日期: 2023-09-27 18:11:18
这是我的问题:我想做的就是使用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
类型。
有人知道为什么会发生这种情况吗?
同样的错误和情况也发生在我身上,因为我做了一个SSIS dts以不支持的方式从平面文件加载CRM中的联系人,并且我忘记填充CustomerAddressBase表。"正确"填写该表(每个联系人两行)后,View CustomerAddress(address1_addressid和address2_addressid)的属性不再为空。如果你不知道如何填写这个表(CustomerAddressBase),只需直接创建一个新的联系人,并在CRM中填写地址字段,然后转到SQL Server管理工作室,通过查询,你可以看到并知道字段是如何填写的。
希望它能帮助到别人,
亚历克斯经过多次尝试,我终于明白了为什么会出现这个错误。
当我开始在这个项目上工作时,客户指示我只使用一个特定的联系人进行测试,因为我们直接在生产环境上工作。(客户端还没有开发环境)
在进行一些数据库查询以比较此联系人与其他联系人(更新仅针对测试联系人失败)之后,我注意到我的联系人的address2_addressid
属性为NULL。
primarykey
属性:contactid
, address1_addressid
和address2_addressid
。
测试联系人的address1_addressid
和address2_addressid
字段为NULL,这导致CRM web服务抛出0x80040216发生意外错误。平台在我尝试更新任何地址字段时出错。
我不知道为什么这个联系人将这些id设置为NULL,我问,创建联系人的人没有解释这是如何发生的。我想这将仍然是一个谜,但至少我现在有一个答案,我得到的错误,我可以在我的代码中满足这一点。
我不知道它是怎么工作的…我认为你必须执行CrmService.Create(contact),然后使用返回的Guid执行更新…
更新不起作用,因为您在联系人实体上设置的Id记录在数据库中不存在…
contact updatedDelegate = new contact();
CeatupCrmService。键contactPrimaryKey = new creatupcrmservice .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
希望我能帮到你。