设置与房间

时间:2016-08-12 18:23:48

标签: c# .net exchange-server exchangewebservices

我对EWS和Exchange一般都很陌生,所以不确定什么是最好的方法。

背景

我正在尝试设置有关房间的配置信息。我希望EWS API为我提供了一个Room对象,我可以添加ExtendedProperties,但是,似乎房间只是一个电子邮件地址。

然后我看到每个房间都有CalendarFolder与之关联,所以我现在正尝试在CalendarFolder中设置房间配置,这是下面原始问题所指的。

原始问题

我正在尝试使用:

CalendarFolder进行简单更新
var folderId = new FolderId(WellKnownFolderName.Calendar, new Mailbox(roomEmail.Address));
var myCalendar = CalendarFolder.Bind(service, folderId, PropertySet.FirstClassProperties);

myCalendar.DisplayName += "Updated";
myCalendar.Update();

然而,当我致电.Update()时,我得到了" 由于无效的属性值,文件夹保存操作失败。"

我认为问题可能与myCalendar没有日历文件夹在服务器上具有的所有属性有关。因此,当我更新对象时,它只发送导致验证错误的部分对象。

我如何更新CalendarFolder

经过进一步研究

我也偶然发现了以下内容,这确实有效:

FindFoldersResults root = service.FindFolders(WellKnownFolderName.Calendar, new FolderView(500));

foreach (var folder in root.Folders)
{
     folder.DisplayName = "confRoom1";
     folder.Update();
}

我确定这两种方法之间存在差异,但我不了解使用不同查询方法获得的文件夹之间的差异:

new FolderId(WellKnownFolderName.Calendar, new Mailbox(roomEmail.Address));
var myCalendar = CalendarFolder.Bind(service, folderId, PropertySet.FirstClassProperties);

service.FindFolders(WellKnownFolderName.Calendar, new FolderView(500));

哪种方法可以为我提供正确的CalendarFolder,我可以为房间设置ExtendedProperties

1 个答案:

答案 0 :(得分:1)

  
    

我确定这两种方法之间存在差异,但我不了解使用不同查询方法获得的文件夹之间的差异:

         

new FolderId(WellKnownFolderName.Calendar,new Mailbox(roomEmail.Address));     var myCalendar = CalendarFolder.Bind(service,folderId,PropertySet.FirstClassProperties);     和

         

service.FindFolders(WellKnownFolderName.Calendar,new FolderView(500));

  

第一个绑定到邮箱中的默认日历文件夹,第二个绑定默认日历文件夹中的子文件夹。您可以重命名默认日历文件夹中的子文件夹,因为它们是用户创建的。您不能重命名邮箱中的默认日历文件夹,因为它是一个特殊的文件夹。如果你想设置一个扩展属性(你可以在一个特殊的文件夹上做,那么很容易定义并设置它),例如

ExtendedPropertyDefinition MyCustomProp = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "MyCustomProp", MapiPropertyType.String);

CalendarFolder CalendarFolder = CalendarFolder.Bind(service,new FolderId(WellKnownFolderName.Calendar, "user@domain.com"));
CalendarFolder.SetExtendedProperty(MyCustomProp, "My Value");
CalendarFolder.Update();

你想要得到的值你必须定义一个propertySet,告诉exchange在你绑定或使用FindItems时返回该值(默认情况下Exchange不会返回你的属性),例如

PropertySet MyPropSet = new PropertySet(BasePropertySet.FirstClassProperties);
MyPropSet.Add(MyCustomProp);
CalendarFolder = CalendarFolder.Bind(service, new FolderId(WellKnownFolderName.Calendar, "mailbox@domain.com"),MyPropSet);
Object PropValue = null;
if (CalendarFolder.TryGetProperty(MyCustomProp, out PropValue)) 
{
    Console.WriteLine(PropValue);
}