Reputation: 409
I have tried to use extended properties on appointments with EWS, but I can not seem to find the appointments again. The set property part is equal to the one shown in this question:
How to Update an Appointment from Exchange Web Service Managed API 2.0 in ASP.NET
When I try to retrieve the appointment, I have followed these examples:
http://msdn.microsoft.com/en-us/uc14trainingcourse_5l_topic3#_Toc254008129 http://msdn.microsoft.com/en-us/library/exchange/dd633697(v=exchg.80).aspx
But I never get any appointments returned when I make a lookup.
Here is the code for the lookup:
ItemView view = new ItemView(10);
// Get the GUID for the property set.
Guid MyPropertySetId = new Guid("{" + cGuid + "}");
// Create a definition for the extended property.
ExtendedPropertyDefinition extendedPropertyDefinition =
new ExtendedPropertyDefinition(MyPropertySetId, "AppointmentID", MapiPropertyType.String);
view.PropertySet =
new PropertySet(
BasePropertySet.IdOnly,
ItemSchema.Subject,
AppointmentSchema.Start,
AppointmentSchema.End, extendedPropertyDefinition);
SearchFilter filter = new SearchFilter.Exists(extendedPropertyDefinition);
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, filter,
view);
Any help is greatly appreciated.
Edit: When I try to create the property like the documentation shows:
http://msdn.microsoft.com/en-us/library/exchange/dd633654(v=exchg.80).aspx
It fails because its a Guid im adding as property value. :-/
Edit again: Just tried getting all appointments for today, and getting the property from the appointment I just created, and it says the same as I stored, without the {}, so it must be somthing with the filter.
Edit once again* It has somthing to do with
ExtendedPropertyDefinition extendedProperty = new ExtendedPropertyDefinition(
if I use:
new ExtendedPropertyDefinition(
DefaultExtendedPropertySet.Appointment,
"AppointmentID",
MapiPropertyType.String);
It finds all the appointments with properties, but if I search for a specific one:
Guid MyPropertySetId = new Guid("{" + cGuid + "}");
ExtendedPropertyDefinition extendedProperty =
new ExtendedPropertyDefinition(
MyPropertySetId,
"AppointmentID",
MapiPropertyType.String);
Then nothing is found.
Upvotes: 6
Views: 13587
Reputation: 957
here's a samplecode how to create an appointment with the customid and find it after saving:
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
service.AutodiscoverUrl("[email protected]");
ExtendedPropertyDefinition def = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "AppointmenId", MapiPropertyType.String);
Guid testid = Guid.NewGuid ();
Appointment appointment = new Appointment(service);
appointment.Subject = "Test";
appointment.Start = DateTime.Now.AddHours(1);
appointment.End = DateTime.Now.AddHours(2);
appointment.SetExtendedProperty(def, testid.ToString());
appointment.Save(WellKnownFolderName.Calendar);
SearchFilter filter = new SearchFilter.IsEqualTo(def, testid.ToString());
FindItemsResults<Item> fir = service.FindItems(WellKnownFolderName.Calendar, filter, new ItemView(10));
hope this helps you...
Upvotes: 22
Reputation: 2617
Here is an example of putting the guid as extension property and getting the appointment based on the guid.
private static readonly PropertyDefinitionBase AppointementIdPropertyDefinition = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "AppointmentID", MapiPropertyType.String);
public static PropertySet PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, AppointementIdPropertyDefinition);
//Setting the property for the appointment
public static void SetGuidForAppointement(Appointment appointment)
{
try
{
appointment.SetExtendedProperty((ExtendedPropertyDefinition)AppointementIdPropertyDefinition, Guid.NewGuid().ToString());
appointment.Update(ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToNone);
}
catch (Exception ex)
{
// logging the exception
}
}
//Getting the property for the appointment
public static string GetGuidForAppointement(Appointment appointment)
{
var result = "";
try
{
appointment.Load(PropertySet);
foreach (var extendedProperty in appointment.ExtendedProperties)
{
if (extendedProperty.PropertyDefinition.Name == "AppointmentID")
{
result = extendedProperty.Value.ToString();
}
}
}
catch (Exception ex)
{
// logging the exception
}
return result;
}
Upvotes: 0
Reputation: 957
You search the inbox for appointments. There you will never find them. Try to search in the Calendar instead.
Upvotes: 0