我想使用带有XML的Exchange Web Services SOAP API更新我的交换联系人。 我已经(煞费苦心地)想出如何更新除电话号码以外的所有我想要的属性。
我遵循用于更新EmailAddresses的模式(因为它们都是索引字段)。以下是我的XML请求示例:
<t:SetItemField>
<t:IndexedFieldURI FieldURI="contacts:PhoneNumber" FieldIndex="BusinessPhone"/>
<Contact xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
<PhoneNumbers>
<Entry key="BusinessPhone">888-777-6666</Entry>
</PhoneNumbers>
</Contact>
</t:SetItemField>
这是我从Exchange收到的错误消息:
发生内部服务器错误。操作失败。,Key &#39; PHONENUMBERS&#39;找不到类型 &#39; Microsoft.Exchange.Services.Core.Types.ContactItemType&#39;
看到此操作的XML基本上没有记录,我怀疑我是否错误地为PhoneNumber格式化XML。
对于使用EWS Managed API 2.0的任何人,您是否可以执行此操作并跟踪XML输出,以便我可以看到它是如何正确完成的?
非常感谢任何其他导致解决方案的信息!
谢谢
答案 0 :(得分:1)
看到此操作的XML基本上没有记录,我怀疑我是否错误地为PhoneNumber格式化XML。
MSDN上的所有XML元素都有完整的文档https://msdn.microsoft.com/en-us/library/office/aa580675(v=exchg.150).aspx,协议文档也有相当全面的覆盖https://msdn.microsoft.com/en-us/library/cc425499(v=exchg.80).aspx
根据您的要求,我可以重现您需要修复的错误,只需将K大写,例如
<Entry key="BusinessPhone">888-777-6666</Entry>
到
<Entry Key="BusinessPhone">888-777-6666</Entry>
SOAP(或至少它在EWS中的实现方式)特别围绕元素的情况和顺序。这是为我工作的修改后的SOAP
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2013_SP1" />
</soap:Header>
<soap:Body>
<m:UpdateItem MessageDisposition="SaveOnly" ConflictResolution="AlwaysOverwrite">
<m:ItemChanges>
<t:ItemChange>
<t:ItemId Id="A...A=" ChangeKey="EQA....Z" />
<t:Updates>
<t:SetItemField>
<t:IndexedFieldURI FieldURI="contacts:PhoneNumber" FieldIndex="BusinessPhone"/>
<Contact xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
<PhoneNumbers>
<Entry Key="BusinessPhone">888-777-6666</Entry>
</PhoneNumbers>
</Contact>
</t:SetItemField>
</t:Updates>
</t:ItemChange>
</m:ItemChanges>
</m:UpdateItem>
</soap:Body>
</soap:Envelope>