Freigeben über


Arbeiten mit ausgeblendeten Ordnern mithilfe von EWS in Exchange

Erfahren Sie, wie Sie mithilfe der verwalteten EWS-API oder EWS in Exchange einen Ordner ausblenden und nach ausgeblendeten Ordnern suchen.

Mit einer Ausnahme sind Ordner im Stammverzeichnis eines Exchange-Postfachs (die Nicht-IPM-Unterstruktur) für den Benutzer ausgeblendet. Umgekehrt sind alle Ordner in Der MsgFolderRoot (der IPM-Unterstruktur) für den Benutzer sichtbar. Wie blenden Sie also einen Ordner unter msgFolderRoot aus? Das ist nicht so schwierig – es kommt nur auf eine Eigenschaft an, die erweiterte Eigenschaft PidTagAttributeHidden (0x10F4000B). Wenn diese Eigenschaft auf TRUE festgelegt ist, blendet Outlook oder ein anderer Client, der die Eigenschaft verwendet, um die Sichtbarkeit des Ordners zu bestimmen, den Ordner in der Ansicht des Benutzers aus. Da es sich hierbei um eine erweiterte Eigenschaft handelt, ist die Verwendung komplexer als die durchschnittliche Ordnereigenschaft. Daher führt Sie dieser Artikel durch die wichtigsten Szenarien.

Tabelle 1. Verwaltete EWS-API-Methoden und EWS-Vorgänge zum Arbeiten mit ausgeblendeten Ordnern

Aufgabe EWS Managed API-Methode EWS-Vorgang
Ausblenden eines Ordners
Folder.Bind gefolgt von Folder.Update
GetFolder gefolgt von UpdateFolder
Suchen nach ausgeblendeten Ordnern
FindFolders
FindFolder

Fragen Sie sich, was die einzige Ausnahme ist – also, welcher Ordner im Stammverzeichnis für Benutzer sichtbar ist? Es ist der Finder-Ordner (auch bekannt als SearchFoldersWellKnownFolder-Enumerationswert oder der SearchfoldersDistinguishedFolderId-Elementwert ), der die Suchordner der Benutzer enthält. Im Ordner Finder erstellte Suchordner sind für Outlook-Benutzer sichtbar. Wenn Sie einen Suchordner erstellen müssen, der für Benutzer nicht sichtbar ist, verschieben Sie ihn unter den Stammordner, um ihn auszublenden. Im Gegensatz zu anderen Ordnern blendet das Festlegen der PidTagAttributeHidden-Eigenschaft auf true keinen Suchordner im Ordner Finder aus.

Ausblenden eines Ordners mithilfe der verwalteten EWS-API

Sie können einen vorhandenen Ordner zu einem ausgeblendeten Ordner machen, indem Sie die erweiterte PidTagAttributeHidden-Eigenschaft in true ändern. Erstellen Sie zunächst eine erweiterte Eigenschaftsdefinition für die Eigenschaft. Verwenden Sie als Nächstes die Bind-Methode , um zum Ordner zu gelangen, aktualisieren Sie dann den Wert der PidTagAttributeHidden-Eigenschaft auf true, und verwenden Sie die Update-Methode , um die Änderungen zu speichern.

In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt für den Postfachbesitzer ist, dass der Benutzer bei einem Exchange-Server authentifiziert wurde und dass folderId eine gültige Folder.Id ist, die den auszublendenden Ordner identifiziert.

private static void MakeHidden(FolderId folderId, ExchangeService service)
{
    // Create an extended property definition for the PidTagAttributeHidden property.
    ExtendedPropertyDefinition isHiddenProp = new ExtendedPropertyDefinition(0x10f4, MapiPropertyType.Boolean);
    PropertySet propSet = new PropertySet(isHiddenProp);
    // Bind to a folder and retrieve the PidTagAttributeHidden property.
    Folder folder = Folder.Bind(service, folderId, propSet);
    // Set the PidTagAttributeHidden property to true.
    folder.SetExtendedProperty(isHiddenProp, true);
    // Save the changes.
    folder.Update();
}

Ausblenden eines Ordners mithilfe von EWS

Sie können EWS verwenden, um einen vorhandenen Ordner zu einem ausgeblendeten Ordner zu machen, indem Sie die erweiterte Eigenschaft PidTagAttributeHidden in true ändern. Verwenden Sie zunächst den GetFolder-Vorgang , um zum Ordner zu gelangen, und rufen Sie dann die PidTagAttributeHidden-Eigenschaft ab, indem Sie das ExtendedFieldURI-Element einschließen und den PropertyTag-Wert auf 4340 und den PropertyType-Wert auf Boolean festlegen.

Dies ist auch die XML-Anforderung, die die verwaltete EWS-API sendet, wenn Sie die Bind-Methode verwenden, um einen Ordner abzurufen, bevor Sie ihn zu einem ausgeblendeten Ordner machen.

Der FolderId-Wert wird aus Gründen der Lesbarkeit gekürzt.

<?xml version="1.0" encoding="utf-8"?>
<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="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
  </soap:Header>
  <soap:Body>
    <m:GetFolder>
      <m:FolderShape>
        <t:BaseShape>IdOnly</t:BaseShape>
        <t:AdditionalProperties>
          <t:ExtendedFieldURI PropertyTag="4340"
                              PropertyType="Boolean" />
        </t:AdditionalProperties>
      </m:FolderShape>
      <m:FolderIds>
        <t:FolderId Id="IQywAAAA==" />
      </m:FolderIds>
    </m:GetFolder>
  </soap:Body>
</soap:Envelope>

Der Server antwortet auf die GetFolder-Anforderung mit einer GetFolderResponse-Nachricht , die den ResponseCode-ElementwertNoError enthält, der angibt, dass der Ordner erfolgreich abgerufen wurde. Die Antwort enthält auch einen Wert für extendedProperty. In diesem Beispiel wird der Wert auf false festgelegt, was bedeutet, dass der Ordner derzeit nicht ausgeblendet ist.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15"
                         MinorVersion="0"
                         MajorBuildNumber="898"
                         MinorBuildNumber="23"
                         Version="V2_10"
                         xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="http://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:GetFolderResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
                         xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:GetFolderResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:Folders>
            <t:Folder>
              <t:FolderId Id="IQywAAAA=="
                          ChangeKey="AQAAABYAAAD32nSTjepyT63rYH17n9THAAAAABED" />
              <t:ExtendedProperty>
                <t:ExtendedFieldURI PropertyTag="0x10f4"
                                    PropertyType="Boolean" />
                <t:Value>false</t:Value>
              </t:ExtendedProperty>
            </t:Folder>
          </m:Folders>
        </m:GetFolderResponseMessage>
      </m:ResponseMessages>
    </m:GetFolderResponse>
  </s:Body>
</s:Envelope>

Um den Wert von ExtendedProperty in true zu ändern, verwenden Sie den UpdateFolder-Vorgang . Schließen Sie die Elemente ExtendedProperty, ExtendedFieldURI und Value für die erweiterte Eigenschaft PidTagAttributeHidden ein, und legen Sie das Value-Element auf true fest, um den Ordner auszublenden.

Dies ist auch die XML-Anforderung, die die verwaltete EWS-API sendet, wenn Sie die Update-Methode verwenden, um einen Ordner zu aktualisieren, um ihn zu einem ausgeblendeten Ordner zu machen.

<?xml version="1.0" encoding="utf-8"?>
<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="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
  </soap:Header>
  <soap:Body>
    <m:UpdateFolder>
      <m:FolderChanges>
        <t:FolderChange>
          <t:FolderId Id="IQywAAAA=="
                      ChangeKey="AQAAABYAAAD32nSTjepyT63rYH17n9THAAAAABED" />
          <t:Updates>
            <t:SetFolderField>
              <t:ExtendedFieldURI PropertyTag="4340"
                                  PropertyType="Boolean" />
              <t:Folder>
                <t:ExtendedProperty>
                  <t:ExtendedFieldURI PropertyTag="4340"
                                      PropertyType="Boolean" />
                  <t:Value>true</t:Value>
                </t:ExtendedProperty>
              </t:Folder>
            </t:SetFolderField>
          </t:Updates>
        </t:FolderChange>
      </m:FolderChanges>
    </m:UpdateFolder>
  </soap:Body>
</soap:Envelope>

Der Server antwortet auf die UpdateFolder-Anforderung mit einer UpdateFolderResponse-Nachricht , die den ResponseCode-ElementwertNoError enthält, der angibt, dass der Ordner erfolgreich aktualisiert wurde und jetzt ausgeblendet ist.

Suchen aller ausgeblendeten Ordner mithilfe der verwalteten EWS-API

Sie können alle ausgeblendeten Ordner unter einem übergeordneten Ordner finden, indem Sie eine erweiterte Eigenschaftendefinition für die erweiterte Eigenschaft PidTagAttributeHidden erstellen und dann die FindFolders-Methode verwenden, um Ordner mit einem PidTagAttributeHidden-Wert zu suchen, der auf true festgelegt ist. In diesem Beispiel wird msgFolderRoot, auch als Oberster Informationsspeicher oder IPM-Unterstruktur bezeichnet, als übergeordneten Ordner verwendet, unter dem gesucht werden soll.

In diesem Beispiel wird davon ausgegangen, dass der Dienst ein gültiges ExchangeService-Objekt für den Postfachbesitzer ist und dass der Benutzer bei einem Exchange-Server authentifiziert wurde.

private static void FindHiddenFolders(ExchangeService service)
{
    // Create an extended property definition for the PidTagAttributeHidden property.
    ExtendedPropertyDefinition isHiddenProp = new ExtendedPropertyDefinition(0x10f4, MapiPropertyType.Boolean);
    // Create a folder view to retrieve up to 100 folders and 
    // retrieve only the PidTagAttributeHidden and the display name.
    FolderView folderView = new FolderView(100);
    folderView.PropertySet = new PropertySet(isHiddenProp, FolderSchema.DisplayName);
    // Indicate a Traversal value of Deep, so that all subfolders are retrieved.
    folderView.Traversal = FolderTraversal.Deep;
    // Find all hidden folders under the MsgFolderRoot.
    // This call results in a FindFolder call to EWS.
    FindFoldersResults findFolder = service.FindFolders(WellKnownFolderName.MsgFolderRoot,
            new SearchFilter.IsEqualTo(isHiddenProp, true), folderView);
    // Display the folder ID and display name of each hidden folder.
    foreach (Folder folder in findFolder)
    {
        Console.WriteLine("FolderId: {0}", folder.Id);
        Console.WriteLine("DisplayName: {0}", folder.DisplayName);
        Console.WriteLine("\r\n");
    }
}

Suchen aller ausgeblendeten Ordner mithilfe von EWS

Sie können EWS verwenden, um alle ausgeblendeten Ordner unter einem vorhandenen Ordner zu suchen, indem Sie den FindFolder-Vorgang aufrufen und nach Ordnern suchen, deren erweiterte PidTagAttributeHidden-Eigenschaft auf true festgelegt ist. Schließen Sie dazu eine IsEqualTo-Einschränkung ein, die nach dem ExtendedFieldURI-Element für die PidTagAttributeHidden-Eigenschaft (PropertyTag-Wert auf 4243 und den PropertyType-Wert auf Boolean) sucht, wie in der folgenden Anforderung gezeigt. In diesem Beispiel wird msgFolderRoot, auch als Oberster Informationsspeicher oder IPM-Unterstruktur bezeichnet, als übergeordneten Ordner verwendet, unter dem gesucht werden soll.

Dies ist auch die XML-Anforderung, die die verwaltete EWS-API sendet, wenn Sie die FindFolders-Methode verwenden, um alle ausgeblendeten Ordner zu finden.

<?xml version="1.0" encoding="utf-8"?>
<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="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
    <t:TimeZoneContext>
      <t:TimeZoneDefinition Id="Central Standard Time" />
    </t:TimeZoneContext>
  </soap:Header>
  <soap:Body>
    <m:FindFolder Traversal="Deep">
      <m:FolderShape>
        <t:BaseShape>IdOnly</t:BaseShape>
        <t:AdditionalProperties>
          <t:ExtendedFieldURI PropertyTag="4340"
                              PropertyType="Boolean" />
          <t:FieldURI FieldURI="folder:DisplayName" />
        </t:AdditionalProperties>
      </m:FolderShape>
      <m:IndexedPageFolderView MaxEntriesReturned="100"
                               Offset="0"
                               BasePoint="Beginning" />
      <m:Restriction>
        <t:IsEqualTo>
          <t:ExtendedFieldURI PropertyTag="4340"
                              PropertyType="Boolean" />
          <t:FieldURIOrConstant>
            <t:Constant Value="true" />
          </t:FieldURIOrConstant>
        </t:IsEqualTo>
      </m:Restriction>
      <m:ParentFolderIds>
        <t:DistinguishedFolderId Id="msgfolderroot" />
      </m:ParentFolderIds>
    </m:FindFolder>
  </soap:Body>
</soap:Envelope>

Der Server antwortet auf die FindFolder-Anforderung mit einer FindFolderResponse-Nachricht , die den ResponseCode-ElementwertNoError enthält, der angibt, dass die Ordnersuche erfolgreich war, sowie alle ausgeblendeten Ordner unter dem Stammnachrichtenordner.

Die FolderId-Werte werden aus Gründen der Lesbarkeit gekürzt.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15"
                         MinorVersion="0"
                         MajorBuildNumber="898"
                         MinorBuildNumber="23"
                         Version="V2_10"
                         xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="http://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:FindFolderResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
                          xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:FindFolderResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootFolder IndexedPagingOffset="6"
                        TotalItemsInView="6"
                        IncludesLastItemInRange="true">
            <t:Folders>
              <t:ContactsFolder>
                <t:FolderId Id="IBHgAAAA=="
                            ChangeKey="AwAAABYAAAD32nSTjepyT63rYH17n9THAAAAAACz" />
                <t:DisplayName>{06967759-274D-40B2-A3EB-D7F9E73727D7}</t:DisplayName>
                <t:ExtendedProperty>
                  <t:ExtendedFieldURI PropertyTag="0x10f4"
                                      PropertyType="Boolean" />
                  <t:Value>true</t:Value>
                </t:ExtendedProperty>
              </t:ContactsFolder>
              <t:ContactsFolder>
                <t:FolderId Id="IBHwAAAA=="
                            ChangeKey="AwAAABYAAAD32nSTjepyT63rYH17n9THAAAAAAC7" />
                <t:DisplayName>{A9E2BC46-B3A0-4243-B315-60D991004455}</t:DisplayName>
                <t:ExtendedProperty>
                  <t:ExtendedFieldURI PropertyTag="0x10f4"
                                      PropertyType="Boolean" />
                  <t:Value>true</t:Value>
                </t:ExtendedProperty>
              </t:ContactsFolder>
              <t:ContactsFolder>
                <t:FolderId Id="IBIQAAAA=="
                            ChangeKey="AwAAABYAAAD32nSTjepyT63rYH17n9THAAAAAADO" />
                <t:DisplayName>GAL Contacts</t:DisplayName>
                <t:ExtendedProperty>
                  <t:ExtendedFieldURI PropertyTag="0x10f4"
                                      PropertyType="Boolean" />
                  <t:Value>true</t:Value>
                </t:ExtendedProperty>
              </t:ContactsFolder>
              <t:ContactsFolder>
                <t:FolderId Id="IBHQAAAA=="
                            ChangeKey="AwAAABYAAAD32nSTjepyT63rYH17n9THAAAAAACa" />
                <t:DisplayName>Recipient Cache</t:DisplayName>
                <t:ExtendedProperty>
                  <t:ExtendedFieldURI PropertyTag="0x10f4"
                                      PropertyType="Boolean" />
                  <t:Value>true</t:Value>
                </t:ExtendedProperty>
              </t:ContactsFolder>
              <t:Folder>
                <t:FolderId Id="HAAAAA=="
                            ChangeKey="AQAAABYAAAD32nSTjepyT63rYH17n9THAAAAAACS" />
                <t:DisplayName>Conversation Action Settings</t:DisplayName>
                <t:ExtendedProperty>
                  <t:ExtendedFieldURI PropertyTag="0x10f4"
                                      PropertyType="Boolean" />
                  <t:Value>true</t:Value>
                </t:ExtendedProperty>
              </t:Folder>
              <t:Folder>
                <t:FolderId Id="IQywAAAA=="
                            ChangeKey="AQAAABYAAAD32nSTjepyT63rYH17n9THAAAeZIBf" />
                <t:DisplayName>TestFolder</t:DisplayName>
                <t:ExtendedProperty>
                  <t:ExtendedFieldURI PropertyTag="0x10f4"
                                      PropertyType="Boolean" />
                  <t:Value>true</t:Value>
                </t:ExtendedProperty>
              </t:Folder>
            </t:Folders>
          </m:RootFolder>
        </m:FindFolderResponseMessage>
      </m:ResponseMessages>
    </m:FindFolderResponse>
  </s:Body>
</s:Envelope>

Nachdem Sie Ordner ausgeblendet oder ausgeblendet haben, können Sie die Ordnerhierarchie abrufen oder die Ordnerhierarchie synchronisieren. Die Beispiele, die zeigen, wie Sie eine Ordnerhierarchie mithilfe der verwalteten EWS-API abrufen oder eine Ordnerhierarchie mithilfe von EWS abrufen , geben auch an, welche Ordner in der Hierarchie ausgeblendet sind.

Siehe auch