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

时间:2015-01-28 15:22:41

标签: exchange-server exchangewebservices ewsjavaapi

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

我搜索的日历文件夹被委派给我认证的服务用户的作者权限,它包含该服务用户作为其作者的约会。

我使用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>

故障的痕迹&#39;响应:

<?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似乎有点相关,但仅此而已。

1 个答案:

答案 0 :(得分:2)

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