2016-10-07 6 views
2

共有予定表(Glen ScalesのEWS - Access All Shared Calendarsに従っています)をすべて取得しようとしていますが、「共有予定表」の下のフォルダそれはフランス語で、「共通の見解」がローカライズされるべきかどうかはわかりませんが、私はそうは思わない)。EWS - 共有予定表にアクセスするアイテム/予定

同僚が数人の予定でカレンダーを作成し、それを私と共有し、テストのために最大の権限(所有権)を与えました。

(C#/ PowerShellの)この共有カレンダー内のアイテム/予定にはどのようにアクセスしますか?

さらに詳しい情報: Folder.Bindを使用することをお勧めしますが、呼び出しが例外を生成します:

 ExchangeService service = new ExchangeService(ExchangeVersion.ExchangeVersion); 
     service.Credentials = new WebCredentials("login", "****"); 
     service.Url = new Uri("https://.../ews/exchange.asmx"); 

     try { 
     FolderId cfolderid = new FolderId(WellKnownFolderName.Calendar, "[email protected]"); 
     Folder TargetFolder = Folder.Bind(service, cfolderid);  

     Console.WriteLine("target folder = " + TargetFolder); 
     } catch (Exception ex){ 
      Console.WriteLine(ex.ToString()); 
     } 

Microsoft.Exchange.WebServices.Data.ServiceResponseException: Le dossier spécifié est introuvable dans la banque d'informations.           
    à Microsoft.Exchange.WebServices.Data.ServiceResponse.InternalThrowIfNecessary()                      
    à Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()                       
    à Microsoft.Exchange.WebServices.Data.ExchangeService.BindToFolder(FolderId folderId, PropertySet propertySet)               
    à Microsoft.Exchange.WebServices.Data.ExchangeService.BindToFolder[TFolder](FolderId folderId, PropertySet propertySet)             
    à Microsoft.Exchange.WebServices.Data.Folder.Bind(ExchangeService service, FolderId id)                     
à ConsoleApplication.Program.Main(String[] args) 

補遺:私はグレンのコード、コメントとして示す痕跡で再開。 WlinkAddressBookEIDAがnullです。

static Dictionary<string, Folder> GetSharedCalendarFoldersA(ExchangeService service, String mbMailboxname) 
{ 
    Dictionary<String, Folder> rtList = new System.Collections.Generic.Dictionary<string, Folder>(); 

    FolderId rfRootFolderid = new FolderId(WellKnownFolderName.Root, mbMailboxname); 
    FolderView fvFolderView = new FolderView(1000); 
    SearchFilter sfSearchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Common Views"); 
    FindFoldersResults ffoldres = service.FindFolders(rfRootFolderid, sfSearchFilter, fvFolderView); 
    if (ffoldres.Folders.Count == 1) 
    { 

     PropertySet psPropset = new PropertySet(BasePropertySet.FirstClassProperties); 
     ExtendedPropertyDefinition PidTagWlinkAddressBookEID = new ExtendedPropertyDefinition(0x6854, MapiPropertyType.Binary); 
     ExtendedPropertyDefinition PidTagWlinkFolderType = new ExtendedPropertyDefinition(0x684F, MapiPropertyType.Binary); 
     ExtendedPropertyDefinition PidTagWlinkGroupName = new ExtendedPropertyDefinition(0x6851, MapiPropertyType.String); 

     psPropset.Add(PidTagWlinkAddressBookEID); 
     psPropset.Add(PidTagWlinkFolderType); 
     ItemView iv = new ItemView(1000); 
     iv.PropertySet = psPropset; 
     iv.Traversal = ItemTraversal.Associated; 

     SearchFilter cntSearch = new SearchFilter.IsEqualTo(PidTagWlinkGroupName, "Calendriers partagés"); // localized 
     FindItemsResults<Item> fiResults = ffoldres.Folders[0].FindItems(cntSearch, iv); 
     Console.WriteLine("fiResults TotalCount = " + fiResults.TotalCount) ; // OK -> 1 
     foreach (Item itItem in fiResults.Items) 
     { 
      Console.WriteLine("itItem Subject = " + itItem.Subject); // OK, my coworker shared calendar 
      Console.WriteLine("itItem Id = " + itItem.Id); // Id but not the one expected! 

       object WlinkAddressBookEIDA = null; 
       itItem.TryGetProperty(PidTagWlinkAddressBookEID, out WlinkAddressBookEIDA); 
       Console.WriteLine("WlinkAddressBookEIDA = " + WlinkAddressBookEIDA + " is null ? " + (WlinkAddressBookEIDA == null)); // KO -> WlinkAddressBookEIDA = is null ? True 

      try{[...] 

答えて

4

I can't find if "Common Views" should is localized either, I don't think so)

それはあなたが持っている人のEmailAddressのを知っている場合のいずれかの方法

A coworker created a calendar with a few appointments, shared it with me and gave me maximum permissions (ownership) for testing. How do you access the Items/Appointments within this shared calendar (in C#/PowerShell)?

を教えてくれますどのNon_IPMサブフォルダを参照するEWSEditorを使用することができますする必要はありませんカレンダーを共有した後、MailboxのFolderIdオーバーロードを使用して直接バインドします。たとえば、

 FolderId cfolderid = new FolderId(WellKnownFolderName.Calendar, "[email protected]"); 
     Folder TargetFolder = Folder.Bind(service, cfolderid); 
+0

ありがとうございましたeverythin gはEWSおよびhttp://gsexdev.blogspot.fr/に関連し、対応する時間がかかります。私はhttps://github.com/gscales/Powershell-Scripts/blob/master/ScriptArchive/AccessSharedContacts.zipに適応しようとしました。私はいつもFolder.Bindからの例外で終わります。Microsoft.Exchange.WebServices.Data.ServiceResponseException:Le dossierspécifiéest introuvable dans la banque d'informations。申し訳ありませんが、ローカライズされており、翻訳が難しいです。私はおおよそ "インフォメーションストア内のフォルダを見つけることができません"と思います。しかし、私はOutlookで "Calendrierspartagés"( "共有カレンダー")の下に表示されています。 – jgran

+0

私に許可の問題のように聞こえるのは、フォルダに直接バインドできますか?おそらく、EWSを使ってテストバインドを実行して、アクセス許可が正しいことを確認してみてください。 –

+0

ありがとう!私は同僚に自分のワークステーションからフォルダID( "AAMkA ... AH0fOoAAA =")を求めました。 EWSeditorで共有カレンダーに接続できました。その後、私はPowerShellで成功裏に再試行しました。良い! $ folderId =新規オブジェクトFolderId( "AAMkA ... AH0fOoAAA ="); $ folder = [calendarFolder] :: Bind($ service、$ folderId); $ iv =新規オブジェクトItemView(1000); $ calendarView =新しいオブジェクトCalendarView($ from、$ to); $ folder.FindAppointments($ calendarView);.したがって、アクセス許可は正しいものでした。それでも、C#コードの上からカレンダーIDを取得するにはどうすればよいですか? – jgran

関連する問題