设置与房间相关的ExtendedProperties

And*_*NET 5 .net c# 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();
Run Code Online (Sandbox Code Playgroud)

但是,当我打电话时,.Update()我得到" 由于无效的属性值导致文件夹保存操作失败 ".

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

我该如何更新CalendarFolder

经过进一步研究

我也偶然发现了以下内容:

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

foreach (var folder in root.Folders)
{
     folder.DisplayName = "confRoom1";
     folder.Update();
}
Run Code Online (Sandbox Code Playgroud)

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

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

service.FindFolders(WellKnownFolderName.Calendar, new FolderView(500));
Run Code Online (Sandbox Code Playgroud)

哪种方法会给我正确的CalendarFolder位置,我可以设置ExtendedProperties房间?

Gle*_*les 1

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

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

service.FindFolders(WellKnownFolderName.Calendar,新的F​​olderView(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();
Run Code Online (Sandbox Code Playgroud)

您想要获得该值,您必须定义一个 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);
}
Run Code Online (Sandbox Code Playgroud)