Filtrar compromissos recorrentes e pesquisar por uma cadeia de caracteres no assunto
Este exemplo filtra compromissos recorrentes que se encontram em um intervalo de datas específico em uma pasta de Calendário, e pesquisa de duas maneiras pela cadeia de caracteres "office" no assunto.
Exemplo
Para filtrar compromissos recorrentes, este exemplo de código usa o conjunto Items em vez do objeto Table, porque o objeto Table retorna apenas compromissos da série mestre e não inclui itens recorrentes na pasta. Para incluir compromissos recorrentes ao chamar o método Find(String) ou Restrict(String), o exemplo de código define a propriedade IncludeRecurrences do conjunto Items e classifica compromissos na pasta por sua propriedade Start. Em seguida, usa uma consulta Jet para especificar as datas de início e término para as recorrências.
Depois de obter um conjunto Items de itens de compromisso recorrentes que ocorrem dentro do intervalo de datas especificado, o exemplo de código executa mais duas pesquisas usando consultas DAV de Pesquisa e Localização (DASL). A primeira pesquisa usa Items.Find, FindNext e a palavra-chave like para procurar itens que tenham "office" como uma subcadeia de caracteres no assunto. A segunda pesquisa usa o método Items.Restrict e o ci_startswith palavra-chave pesquisar itens que tenham assuntos começando com "office".
Se usar o Visual Studio para testar este exemplo de código, adicione primeiro uma referência ao componente da biblioteca de objetos do Microsoft Outlook 15.0 e especifique a variável do Outlook quando importar o namespace Microsoft.Office.Interop.Outlook. A instrução Imports ou using não deve vir diretamente antes de funções no exemplo de código, mas deve ser adicionada antes da declaração Class pública. The following lines of code show how to do the import and assignment in Visual Basic and C#.
Imports Outlook = Microsoft.Office.Interop.Outlook
using Outlook = Microsoft.Office.Interop.Outlook;
Private Sub SearchRecurringAppointments()
Dim appt As Outlook.AppointmentItem = Nothing
Dim folder As Outlook.Folder = _
CType(Application.Session.GetDefaultFolder( _
Outlook.OlDefaultFolders.olFolderCalendar), _
Outlook.Folder)
' Set start value
Dim startTime As DateTime = New DateTime(2006, 8, 9, 0, 0, 0)
' Set end value
Dim endTime As DateTime = New DateTime(2006, 12, 14, 0, 0, 0)
' Initial restriction is Jet query for date range
Dim filter1 As String = "[Start] >= '" & startTime.ToString("g") _
& "' AND [End] <= '" & endTime.ToString("g") & "'"
Dim calendarItems As Outlook.Items = folder.Items.Restrict(filter1)
calendarItems.IncludeRecurrences = True
calendarItems.Sort("[Start]")
' Must use 'like' comparison for Find/FindNext
Dim filter2 As String
filter2 = "@SQL=" & _
Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & _
" like '%Office%'"
' Create DASL query for additional Restrict method
Dim filter3 As String
If (Application.Session.DefaultStore.IsInstantSearchEnabled) Then
filter3 = "@SQL=" & _
Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " _
ci_startswith 'Office'"
Else
filter3 = "@SQL=" & _
Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " _
like '%Office%'"
End If
' Use Find and FindNext methods
appt = CType(calendarItems.Find(filter2), Outlook.AppointmentItem)
While Not (appt Is Nothing)
Dim sb As StringBuilder = New StringBuilder()
sb.AppendLine(appt.Subject)
sb.AppendLine("Start: " & appt.Start)
sb.AppendLine("End: " & appt.End)
Debug.WriteLine(sb.ToString())
' Find the next appointment
appt = CType(calendarItems.FindNext(), Outlook.AppointmentItem)
End While
' Restrict calendarItems with DASL query
Dim restrictedItems As Outlook.Items = _
calendarItems.Restrict(filter3)
For Each apptItem As Outlook.AppointmentItem In restrictedItems
Dim sb As StringBuilder = New StringBuilder()
sb.AppendLine(apptItem.Subject)
sb.AppendLine("Start: " & apptItem.Start)
sb.AppendLine("End: " & apptItem.End)
sb.AppendLine()
Debug.WriteLine(sb.ToString())
Next
End Sub
private void SearchRecurringAppointments()
{
Outlook.AppointmentItem appt = null;
Outlook.Folder folder =
Application.Session.GetDefaultFolder(
Outlook.OlDefaultFolders.olFolderCalendar)
as Outlook.Folder;
// Set start value
DateTime start =
new DateTime(2006, 8, 9, 0, 0, 0);
// Set end value
DateTime end =
new DateTime(2006, 12, 14, 0, 0, 0);
// Initial restriction is Jet query for date range
string filter1 = "[Start] >= '" +
start.ToString("g")
+ "' AND [End] <= '" +
end.ToString("g") + "'";
Outlook.Items calendarItems = folder.Items.Restrict(filter1);
calendarItems.IncludeRecurrences = true;
calendarItems.Sort("[Start]", Type.Missing);
// Must use 'like' comparison for Find/FindNext
string filter2;
filter2 = "@SQL="
+ "\"" + "urn:schemas:httpmail:subject" + "\""
+ " like '%Office%'";
// Create DASL query for additional Restrict method
string filter3;
if (Application.Session.DefaultStore.IsInstantSearchEnabled)
{
filter3 = "@SQL="
+ "\"" + "urn:schemas:httpmail:subject" + "\""
+ " ci_startswith 'Office'";
}
else
{
filter3 = "@SQL="
+ "\"" + "urn:schemas:httpmail:subject" + "\""
+ " like '%Office%'";
}
// Use Find and FindNext methods
appt = calendarItems.Find(filter2)
as Outlook.AppointmentItem;
while (appt != null)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(appt.Subject);
sb.AppendLine("Start: " + appt.Start);
sb.AppendLine("End: " + appt.End);
Debug.WriteLine(sb.ToString());
// Find the next appointment
appt = calendarItems.FindNext()
as Outlook.AppointmentItem;
}
// Restrict calendarItems with DASL query
Outlook.Items restrictedItems =
calendarItems.Restrict(filter3);
foreach (Outlook.AppointmentItem apptItem in restrictedItems)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(apptItem.Subject);
sb.AppendLine("Start: " + apptItem.Start);
sb.AppendLine("End: " + apptItem.End);
sb.AppendLine();
Debug.WriteLine(sb.ToString());
}
}