exchange-server - EWS FindItem 调用返回不正确的 EffectiveRights 值

标签 exchange-server exchangewebservices ewsjavaapi

我正在使用 FindItem 调用从 Exchange Web 服务 (EWS) 获取项目(约会)。获取的属性是项目 ID 和 EffectiveRights。 EffectiveRights 属性通常不包含正确的值。然而,有时值是正确的(使用相同的代码),但我不知道是什么原因造成的。

我正在搜索的日历文件夹已将作者权限委托(delegate)给我通过身份验证的服务用户,它包含该服务用户是其作者的约会。

我正在使用 ews-java-api库和响应跟踪显示这不是解析错误。

用于检索项目的代码:

ItemView view = new ItemView(100);
PropertySet propertySet = new PropertySet();
propertySet.add(ItemSchema.Id);
propertySet.add(ItemSchema.EffectiveRights);
view.setPropertySet(propertySet);

FolderId folderId = new FolderId(WellKnownFolderName.Calendar, Mailbox.getMailboxFromString(targetSmtpAddress));
FindItemsResults<Item> items = service.findItems(folderId, filter, view);

Item firstItem = items.getItems().get(0);
firstItem.getEffectiveRights(); // Returns NONE, READ. This is incorrect.

Item bindItem = Item.bind(service, firstItem.getId()); // 
bindItem.getEffectiveRights(); // Returns NONE, READ, MODIFY, DELETE. This is correct.

请求轨迹:

<?xml version="1.0" encoding="utf-8"?>
<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:FindItem Traversal="Shallow">
            <m:ItemShape>
                <t:BaseShape>IdOnly</t:BaseShape>
                <t:AdditionalProperties>
                    <t:FieldURI FieldURI="item:ItemId"></t:FieldURI>
                    <t:FieldURI FieldURI="item:EffectiveRights"></t:FieldURI>
                </t:AdditionalProperties>
            </m:ItemShape>
            <m:IndexedPageItemView MaxEntriesReturned="1000" Offset="0" BasePoint="Beginning"></m:IndexedPageItemView>
            <m:Restriction>
                <t:And>
                    <t:IsEqualTo>
                        <t:ExtendedFieldURI PropertySetId="039b4d91-2f03-44da-887c-aad704243ba8" PropertyName="SyncId" PropertyType="String"></t:ExtendedFieldURI>
                        <t:FieldURIOrConstant>
                            <t:Constant Value="syncID:330"></t:Constant>
                        </t:FieldURIOrConstant>
                    </t:IsEqualTo>
                    <t:IsGreaterThanOrEqualTo>
                        <t:FieldURI FieldURI="calendar:Start"></t:FieldURI>
                        <t:FieldURIOrConstant>
                            <t:Constant Value="2015-01-28T13:53:38Z"></t:Constant>
                        </t:FieldURIOrConstant>
                    </t:IsGreaterThanOrEqualTo>
                </t:And>
            </m:Restriction>
            <m:ParentFolderIds>
                <t:DistinguishedFolderId Id="calendar">
                    <t:Mailbox>
                        <t:EmailAddress>TARGETUSER@SMTP.ADDRESS</t:EmailAddress>
                    </t:Mailbox>
                </t:DistinguishedFolderId>
            </m:ParentFolderIds>
        </m:FindItem>
    </soap:Body>
</soap:Envelope>

“错误”响应的踪迹:

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header>
        <h:ServerVersionInfo MajorVersion="14" MinorVersion="3" MajorBuildNumber="224" MinorBuildNumber="2" Version="Exchange2010_SP2" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
    </s:Header>
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <m:FindItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
            <m:ResponseMessages>
                <m:FindItemResponseMessage ResponseClass="Success">
                    <m:ResponseCode>NoError</m:ResponseCode>
                    <m:RootFolder IndexedPagingOffset="1000" TotalItemsInView="1868" IncludesLastItemInRange="false">
                        <t:Items>
                            <t:CalendarItem>
                                <t:ItemId Id="AAMkAGVlZmVlY2JjLTcxOTItNDBkYi1hOTljLTkwZjQwZjE4MTU1NQBGAAAAAADZ8IosQv76QbxS0r8FeFzgBwB25IsPmJcKTaP6zvCUqaybAAAAoIe5AAB25IsPmJcKTaP6zvCUqaybAABcSsgnAAA=" ChangeKey="DwAAABYAAAB25IsPmJcKTaP6zvCUqaybAABcS6ER"/>
                                <t:EffectiveRights>
                                    <t:CreateAssociated>false</t:CreateAssociated>
                                    <t:CreateContents>false</t:CreateContents>
                                    <t:CreateHierarchy>false</t:CreateHierarchy>
                                    <t:Delete>false</t:Delete>
                                    <t:Modify>false</t:Modify>
                                    <t:Read>true</t:Read>
                                    <t:ViewPrivateItems>false</t:ViewPrivateItems>
                                </t:EffectiveRights>
                            </t:CalendarItem>
                            <t:CalendarItem>
                                <t:ItemId Id="AAMkAGVlZmVlY2JjLTcxOTItNDBkYi1hOTljLTkwZjQwZjE4MTU1NQBGAAAAAADZ8IosQv76QbxS0r8FeFzgBwB25IsPmJcKTaP6zvCUqaybAAAAoIe5AAB25IsPmJcKTaP6zvCUqaybAABcSsglAAA=" ChangeKey="DwAAABYAAAB25IsPmJcKTaP6zvCUqaybAABcS6EN"/>
                                <t:EffectiveRights>
                                    <t:CreateAssociated>false</t:CreateAssociated>
                                    <t:CreateContents>false</t:CreateContents>
                                    <t:CreateHierarchy>false</t:CreateHierarchy>
                                    <t:Delete>false</t:Delete>
                                    <t:Modify>false</t:Modify>
                                    <t:Read>true</t:Read>
                                    <t:ViewPrivateItems>false</t:ViewPrivateItems>
                                </t:EffectiveRights>
                            </t:CalendarItem>

                            <!-- MORE ITEMS HERE... -->

                        </t:Items>
                    </m:RootFolder>
                </m:FindItemResponseMessage>
            </m:ResponseMessages>
        </m:FindItemResponse>
    </s:Body>
</s:Envelope>

我已经找到了this blog post这似乎有些相关,但仅此而已。

最佳答案

FindItems 从文件夹的目录表中加载值,而不是从项目本身加载值。很多时候,对于像 EffectiveRights 这样的计算属性,使用简单的方法来填充表以给出近似值。似乎这就是这里发生的事情。代码中的注释提到在绑定(bind)到项目(从项目本身加载值)后该值是正确的。

关于exchange-server - EWS FindItem 调用返回不正确的 EffectiveRights 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28195941/

相关文章:

java - 如何确定 ActiveSync for Exchange 中 XML 标记的 WBXML 值?

exchangewebservices - EWS 约会 ID。独特的?

java - Exchange Web 服务 GetAttachment 不会流式传输到磁盘

java - Exchange Web 服务获取消息消息 ID

c++ - 需要用 C++ 检查 Exchange 服务器的收件箱

email - 启用 TLS 的后果

sharepoint - 使用 OAuth2S2SClient 获取 AccessToken 返回 "Token Request failed"?

java - 如何在java中使用ews从电子邮件中获取 "To"信息

java - Exchange Web 服务通过 "Message-ID" header 查找 EmailMessage

.net - 使用 .net 从 Exchange 服务器获取收件箱邮件