2016-08-12 51 views
5

我對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()我得到「文件夾保存操作失敗,原因是無效的物業價值

我認爲這個問題可能與有關不具有日曆文件夾在服務器上具有的所有屬性。所以當我更新對象時,它只會發送導致驗證錯誤的部分對象。

我該如何去更新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); 

哪種方法會給我正確的CalendarFolder在那裏我可以設置ExtendedProperties的房間嗎?

+0

您有任何新的見解嗎?建議的答案是否有效? – lokusking

回答

1

我敢肯定,有兩種方法之間的差異,但我不明白,我開始使用不同的查詢方式的文件夾之間的區別:

新FolderId(WellKnownFolderName。日曆,新郵箱(roomEmail.Address)); var myCalendar = CalendarFolder.Bind(service,folderId,PropertySet.FirstClassProperties); 和

service.FindFolders(WellKnownFolderName。日曆,新的FolderView(500));

第一綁定到默認日曆文件夾中的一個信箱,第二得到默認的日曆文件夾中的子文件夾。您可以重命名默認日曆文件夾中的子文件夾,因爲它們是用戶創建的。您不能重命名郵箱中的默認日曆文件夾,因爲它的特殊文件夾。如果你想設置的擴展屬性(你可以在一個特殊的文件夾,然後做很容易只是定義它,並將其設置),例如

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

CalendarFolder CalendarFolder = CalendarFolder.Bind(service,new FolderId(WellKnownFolderName.Calendar, "[email protected]")); 
CalendarFolder.SetExtendedProperty(MyCustomProp, "My Value"); 
CalendarFolder.Update(); 

你想要得到的是價值,你必須定義一個屬性集,告訴交換什麼當您綁定或使用FindItems時,返回該值(默認情況下Exchange不會返回您的屬性)例如

PropertySet MyPropSet = new PropertySet(BasePropertySet.FirstClassProperties); 
MyPropSet.Add(MyCustomProp); 
CalendarFolder = CalendarFolder.Bind(service, new FolderId(WellKnownFolderName.Calendar, "[email protected]"),MyPropSet); 
Object PropValue = null; 
if (CalendarFolder.TryGetProperty(MyCustomProp, out PropValue)) 
{ 
    Console.WriteLine(PropValue); 
} 
+0

我已經添加了我正在嘗試完成的解釋。 –