Filtrage et affichage des propriétés calculées pendant l’énumération des éléments d’un dossier
Cet exemple montre comment filtrer et afficher des propriétés calculées lors de l’énumération d’éléments dans un dossier.
Exemple
Remarque
L’exemple de code suivant est un extrait de programmation d’Applications pour Microsoft Office Outlook 2007.
L’objet Table représente un ensemble de données d’élément à partir d’un objet Folder ou Search . L’objet Row représente des lignes de données dans une table. L’objet Columns représente les propriétés de la table. Vous pouvez ajouter certaines propriétés à l’objet Table à l’aide de la méthode Add(String) de l’objet Columns . Vous pouvez filtrer certaines propriétés à l’aide de la méthode Restrict(String) de l’objet Table . Cependant, certaines propriétés ne peuvent pas être ajoutées à l’objet Table à l’aide de Columns.Add, ni être filtrées à l’aide de la méthode Restrict. Le tableau suivant indique si les propriétés sont prises en charge pour l’objet Table lorsque vous utilisez la méthode Columns.Add ou la méthode Restrict.
Propriété |
Pour Columns.Add |
Pour Restrict |
---|---|---|
Propriétés binaires telle que EntryID. |
Prise en charge par propriété intégrée ou espace de noms. |
Non prise en charge. Outlook générera une erreur. |
Propriétés Body, dont Body et HTMLBody, et représentation d’espace de noms de ces propriétés, dont PR_RTF_COMPRESSED. |
La propriété Body est prise en charge à condition qu’uniquement les 255 premiers octets de la valeur soient stockés dans un objet Table. Les autres propriétés qui représentent le contenu de corps de texte en HTML ou RTF ne sont pas prises en charge. Étant donné que seuls les 255 premiers octets du Body sont retournés, si vous voulez obtenir tout le contenu du corps d’un élément texte ou HTML, utilisez l’EntryID de l’élément dans la méthode GetItemFromID(String, Object) pour obtenir l’objet d’élément. Récupérez ensuite toute la valeur du Body via l’objet d’élément. |
Seule la propriété Body représentée dans le texte est prise en charge dans un filtre. Cela signifie que la propriété doit être référencée dans un filtre DASL (DAV Searching and Locating) sous la forme urn:schemas:http-mail:textdescription, et vous ne pouvez filtrer sur aucune des balises HTML du corps. Pour améliorer les performances, utilisez les mots clés de l’indexeur du contexte dans le filtre de façon à établir des correspondances avec les chaînes du corps. |
Propriétés de l’ordinateur, telles que AutoResolvedWinner et BodyFormat. |
Non prise en charge. |
Non prise en charge. |
Propriétés à valeurs multiples, telles que Categories, Children, Companies, et VotingOptions. |
Prise en charge. |
Prise en charge à condition que vous puissiez créer une requête DASL en utilisant la représentation d’espace de noms. |
Propriétés qui retournent un objet, telles que Attachments, Parent, Recipients, RecurrencePattern, et UserProperties. |
Non prise en charge. |
Non prise en charge. |
Le tableau suivant répertorie les propriétés connues comme étant non valides qui ne peuvent pas être ajoutées à l’objet Table à l’aide de Columns.Add. Si vous tentez d’ajouter une propriété de cette liste, Outlook générera une erreur.
AutoResolvedWinner |
BodyFormat |
Classe |
Sociétés |
ContactNames |
DLName |
DownloadState |
FlagIcon |
HtmlBody |
InternetCodePage |
IsConflict |
IsMarkedAsTask |
MeetingWorkspaceURL |
MemberCount |
Permission |
PermissionService |
RecurrenceState |
ResponseState |
Saved |
Messages envoyés |
Envoyé |
TaskSubject |
Non lus |
VotingOptions |
Bien que certaines propriétés calculées ne peuvent pas être ajoutées à la colonne définie pour un tableau, l’exemple de code suivant contourne cette restriction. GetToDoItems utilise une requête DASL pour limiter les éléments qui apparaissent dans l'objet Table. Si la propriété calculée a une représentation d'espace de noms, celle-ci peut être utilisée pour créer une requête DASL qui limite le retour par l'objet Table de lignes pour une valeur spécifiée de la propriété calculée. GetToDoItems obtient des éléments dans la Boîte de réception où la valeur de la propriété IsMarkedAsTask est égale à true, puis affecte des valeurs à certaines propriétés de tâche, telles que TaskSubject, TaskDueDate, TaskStartDate et TaskCompletedDate. Enfin, ces propriétés sont écrites sur les écouteurs de trace de la collection Listeners.
Si vous utilisez Visual Studio pour tester cet exemple de code, vous devez d’abord ajouter une référence au composant Bibliothèque d’objets Microsoft Outlook 15.0 et spécifier la variable lorsque vous importez l’espace de noms Microsoft.Office.Interop.Outlook. L’instruction using ne doit pas se produire juste avant les fonctions de l’exemple de code, mais doit être ajoutée avant la déclaration publique. La ligne de code suivante montre comment effectuer l’importation et l’affectation dans C#.
using Outlook = Microsoft.Office.Interop.Outlook;
private void GetToDoItems()
{
// Obtain Inbox
Outlook.Folder folder =
Application.Session.GetDefaultFolder(
Outlook.OlDefaultFolders.olFolderInbox)
as Outlook.Folder;
// DASL filter for IsMarkedAsTask
string filter = "@SQL=" + "\"" +
"http://schemas.microsoft.com/mapi/proptag/0x0E2B0003"
+ "\"" + " = 1";
Outlook.Table table =
folder.GetTable(filter,
Outlook.OlTableContents.olUserItems);
table.Columns.Add("TaskStartDate");
table.Columns.Add("TaskDueDate");
table.Columns.Add("TaskCompletedDate");
// Use GUID/ID to represent TaskSubject
table.Columns.Add(
"http://schemas.microsoft.com/mapi/id/" +
"{00062008-0000-0000-C000-000000000046}/85A4001E");
while (!table.EndOfTable)
{
Outlook.Row nextRow = table.GetNextRow();
StringBuilder sb = new StringBuilder();
sb.AppendLine("Task Subject: " + nextRow[9]);
sb.AppendLine("Start Date: "
+ nextRow["TaskStartDate"]);
sb.AppendLine("Due Date: "
+ nextRow["TaskDueDate"]);
sb.AppendLine("Completed Date: "
+ nextRow["TaskCompletedDate"]);
sb.AppendLine();
Debug.WriteLine(sb.ToString());
}
}