无法从EWS联系人

时间:2018-03-19 20:04:09

标签: ews-javascript-api

我使用ews-javascript-api管理交换服务器上的EWS联系人。

我试图通过删除电子邮件地址来更新联系人对象。

我已经跟着this blog post了,它让我大部分都在那里。但是,当我删除EmailAddress1的ExtendedProperty时,由于HTTP 500从EWS soap请求返回以更新联系人,因此ews-javascript-api会抛出异常。查看SOAP请求,我可以看到有一个空的FieldURI,这是响应错误所抱怨的。

这是我的肥皂要求

<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/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">
<soap:Header>
    <t:RequestServerVersion Version="Exchange2010_SP2"></t:RequestServerVersion>
</soap:Header>
<soap:Body>
    <m:UpdateItem MessageDisposition="SaveOnly" ConflictResolution="AutoResolve">
        <m:ItemChanges>
            <t:ItemChange>
                <t:ItemId Id="AAMkADczNzM2MTM4LTZmNWItNDBhYy05ZjcwLWUxMDc3ZDY2NjFiMABGAAAAAAC3bTmWRbrTRqYt+VZXGp68BwD5r6sZ7j5YSprMfvM2gaMkAAAAAAAQAAD5r6sZ7j5YSprMfvM2gaMkAAB4CjURAAA=" ChangeKey="EQAAABYAAAD5r6sZ7j5YSprMfvM2gaMkAAB4CkS4"></t:ItemId>
                <t:Updates>
                    <t:SetItemField>
                        <t:FieldURI FieldURI="contacts:DisplayName"></t:FieldURI>
                        <t:Contact>
                            <t:DisplayName>Craig </t:DisplayName>
                        </t:Contact>
                    </t:SetItemField>
                    <t:SetItemField>
                        <t:FieldURI FieldURI="contacts:GivenName"></t:FieldURI>
                        <t:Contact>
                            <t:GivenName>Craig</t:GivenName>
                        </t:Contact>
                    </t:SetItemField>
                    <t:DeleteItemField>
                        <t:FieldURI></t:FieldURI>
                    </t:DeleteItemField>
                    <t:DeleteItemField>
                        <t:FieldURI FieldURI="contacts:MiddleName"></t:FieldURI>
                    </t:DeleteItemField>
                    <t:DeleteItemField>
                        <t:FieldURI FieldURI="contacts:Surname"></t:FieldURI>
                    </t:DeleteItemField>
                </t:Updates>
            </t:ItemChange>
        </m:ItemChanges>
    </m:UpdateItem>
</soap:Body>

这是肥皂回应

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
    <s:Fault>
        <faultcode
            xmlns:a="http://schemas.microsoft.com/exchange/services/2006/types">a:ErrorSchemaValidation
        </faultcode>
        <faultstring xml:lang="en-US">The request failed schema validation: The required attribute 'FieldURI' is missing.</faultstring>
        <detail>
            <e:ResponseCode
                xmlns:e="http://schemas.microsoft.com/exchange/services/2006/errors">ErrorSchemaValidation
            </e:ResponseCode>
            <e:Message
                xmlns:e="http://schemas.microsoft.com/exchange/services/2006/errors">The request failed schema validation.
            </e:Message>
            <t:MessageXml
                xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
                <t:LineNumber>1</t:LineNumber>
                <t:LinePosition>1037</t:LinePosition>
                <t:Violation>The required attribute 'FieldURI' is missing.</t:Violation>
            </t:MessageXml>
        </detail>
    </s:Fault>
</s:Body>

最后这里是javascript api抛出的例外。

"Exception
at UpdateItemRequest../node_modules/ews-javascript-api/js/Core/Requests/ServiceRequestBase.js.ServiceRequestBase.ProcessWebException (https://sr1.genband.com/genlync/bundle-electron.js:44707:36)
at https://sr1.genband.com/genlync/bundle-electron.js:45557:41
at <anonymous>"

最后,我提到我可以删除电子邮件地址,而无需使用以下功能删除任何扩展属性。

response.EmailAddresses._setItem(ews.EmailAddressKey.EmailAddress1, address.value);

然而,问题是,虽然它看起来有效,但如果我尝试在Outlook界面上编辑该联系人,我会收到有关某些属性不匹配的错误。看起来如果我在删除电子邮件时不删除这些扩展属性,那么它们会留在原因并导致其他客户端出现问题。

1 个答案:

答案 0 :(得分:0)

这应该适用于0.9.3版本,可从当前ews-javascript-api@next开始的0.9.3-dev.1开始。

相关问题