I have written this code to find the total duration of all appointments of a specified category within a specified time range:
private readonly MAPIFolder _timing;
private int CalculateTotalDuration(DateTime start, DateTime end, string category)
{
string filter = String.Format(
"([Start] >= '{0:g}') AND ([End] <= '{1:g}') AND ([Categories] = '{2}')",
start, end, category);
return _timing.Items.Restrict(filter).Cast<AppointmentItem>().
Sum(appt => appt.Duration);
}
This code results in the following exception when used with Russian version of Outlook (I did not test it with English version though):
System.Runtime.InteropServices.COMException was unhandled
Message=Условие неверно.
Source=Microsoft Outlook
ErrorCode=-2147352567
StackTrace:
at Microsoft.Office.Interop.Outlook._Items.Restrict(String Filter)
...
When I replace [Categories]
with [Категории]
, i.e.
string filter = String.Format(
"([Start] >= '{0:g}') AND ([End] <= '{1:g}') AND ([Категории] = '{2}')",
start, end, category);
it works with Russian version of Outlook. But obviously it will not work with other languages.
How to filter Outlook appointments by category in a multilanguage way?
Try to use a SQL query (prefix the query with "@SQL=") and use the DASL name for the Categories - http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/Keywords/0x0000101F
or urn:schemas:mailheader:keywords
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With