C# CrmService.Update方法对某些属性无效

C# CrmService.Update方法对某些属性无效,c#,dynamics-crm-4,C#,Dynamics Crm 4,这是我的问题: 我只想使用webservice更新Crm 4中的“联系人”实体 这是我的代码: CrmService eatupCrmService = CrmInteraction.InitializeCrmService(); contact updatedDelegate = new contact(); CeatupCrmService.Key contactPrimaryKey = new CeatupCrmService.Key(); contactPrimaryKey.Value

这是我的问题: 我只想使用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\u postalcode
属性时,出现以下错误:

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

除了详细信息\InnerText之外:

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

如果我更改代码以更新另一个属性,则假设我尝试更新
mobilephone
属性 它不是
address2\u postalcode
,而是在不引发任何异常的情况下工作

只要我尝试更新
address2\u postalcode
,我就会得到那个错误。Crm中的
address2\u postalcode
数据类型为
nvarchar
,分配给它的值(
delegateDetails.ContactDetailsPhysicalAddressCode
)为c#的
字符串类型


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

我不知道它能起什么作用。。。 我认为您必须执行CrmService.Create(contact),然后使用返回的Guid执行更新

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

contact updatedDelegate = new contact(); 
CeatupCrmService.Key contactPrimaryKey=新的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

但愿我能帮助你。

经过多次尝试,试图理解为什么会发生此错误,我终于成功了

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

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

然后,我在Customization\Customize Entities下转到CRM,并打开了联系人实体。在属性下,我按类型排序,看到联系人有3个
primarykey
属性:
contactid
address1\u addressid
address2\u addressid

测试联系人的
address1\u addressid
address2\u addressid
字段为空,这导致CRM web服务抛出0x80040216。出现意外错误。平台我尝试更新任何地址字段时出错


我不知道为什么这个联系人的ID设置为空,我问,而创建联系人的人没有解释这是怎么发生的。我想这仍然是一个谜,但至少我现在对我所遇到的错误有了答案,我可以在我的代码中解决这个问题。

同样的错误和情况也发生在我身上,因为我使用SSIS dts从平面文件以不受支持的方式加载CRM中的联系人,并且我忘记填写CustomerAddressBase表。“正确”填写此表(每个联系人两行)后,视图CustomerAddress的属性(address1\u addressid和address2\u addressid)变为非空。如果您不知道如何填写此表(CustomerAddressBase),只需直接创建一个新联系人,并在CRM中填写地址字段,然后转到SQL Server management studio,通过查询您可以查看并了解字段的填写方式

希望它能帮助别人


亚历克斯

谢谢你的回复。在更新联系人实体的“address2\u postalcode”属性之前,我已经尝试获取联系人实体,但不幸的是,我得到了相同的错误。我做了一个RetrieveMultiple请求来获取联系人(作为一个动态实体),但它也不起作用。。。您可以尝试启动SQL事件探查器,以便在执行操作时准确查看发生了什么。我想不出其他任何东西……我运行了SQL Profiler,在update SQL语句中找不到字段(address2\u postalcode)。如果我尝试udpate“mobilephone”属性,那么我可以在profiler中看到它。也许这是Crm web服务的某种序列化问题,我不知道。。。昨晚23:00之前一直在尝试不同的解决方法,但还是没能成功。我正在考虑使用旧的Web服务(“),并尝试以旧的方式更新它:(如前所述,我已经在检索联系人实体,以便正确分配contactid。address1_addressid和address2_addressid ID为空,这是导致更新失败的原因。所有其他现有联系人都设置了这些GUID。