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类型。

有人知道为什么会发生这种情况吗?

CrmService.更新方法对某些属性不起作用

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

希望它能帮助到别人,

亚历克斯

经过多次尝试,我终于明白了为什么会出现这个错误。

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

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

然后我进入CRM Customization'Customize Entities,打开联系人实体。在属性下,我按类型排序,看到触点有3个primarykey属性:contactid, address1_addressidaddress2_addressid

测试联系人的address1_addressidaddress2_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

希望我能帮到你。