2017-11-02 14 views
0

元々誰か他の人が書いたコードの一部が突然停止してしまいました。ExchangeServiceが突然共有カレンダーを表示しない

コードは、別のアカウントから共有カレンダーを見つけ、その中のイベントを取得する予定ですが、この共有カレンダーまたは共有カレンダーは検出されません。

私はカレンダーを共有しているアカウントにアクセスできないが、別のアカウントからカレンダーを共有しようとしましたが、どちらも表示されませんでしたが、スクリプトで使用されているアカウントでカレンダーを作成すると、 。 共有カレンダーは、アカウントにログインしても表示されます。イベントを作成して表示することができます。

私は交換の知識は限られていますが、私はこのスクリプトが必要です。

私は同じような問題で既に答えられた質問を見回し、いくつかの解決策を試しましたが、これまでに働いたことがなく、他の問題や知識の不足によって妨げられていませんでした。

私が認識しているこの目的のために変更されたものはありません。また、アカウントの所有者は、私がカレンダーへの完全なアクセス権を持ち、彼らの最後に何も変わっていないと主張しています。だから私はなぜこれが突然動作を停止するのか分かりません。

説明のため、エラーはありません。 try-catchは起動せず、スクリプトはフォルダのリストをページに出力します。 このリストには、サイトに表示されている共有カレンダーが含まれていないという問題があります。

const string EWSUrl = @"https://outlook.office365.com/ews/exchange.asmx"; 

const string EmailAdre = "myEmail"; 
const string EmailPass = "myPassword"; 
const string EmailDomi = "domi"; 
const string EmailCale = "targetAccount"; 

const int calFolderLimit = 200; // Limit on folder search 
const int calMaxItemsReturned = 500; // Max limit cal fetch 
const int calMonthLimit = 12; // How many months to fetch 
const int calMonthBack = 1; // Update how many days back 

// Tries to find one of this 
const string calFolderName = "Ekonomi Årskalender"; 
const string calFolderID = "AQMkAGU5NTdjYTE5LTZiNWMtNDYzMi05MWQ4LWQ5MDcyMgA1YjMwMTYALgAAA5ukgsUdw+BFjn7iHZ02H3gBAM/bOclCwmFEsqKa2vRsw2EAAAIBWQAAAA=="; 

const string EWSUrl = @"https://outlook.office365.com/ews/exchange.asmx"; 

const string EmailAdre = "myEmail"; 
const string EmailPass = "myPassword"; 
const string EmailDomi = "domi"; 
const string EmailCale = "targetAccount"; 

const int calFolderLimit = 200; // Limit on folder search 
const int calMaxItemsReturned = 500; // Max limit cal fetch 
const int calMonthLimit = 12; // How many months to fetch 
const int calMonthBack = 1; // Update how many days back 

// Tries to find one of this 
const string calFolderName = "Ekonomi Årskalender"; 
const string calFolderID = "AQMkAGU5NTdjYTE5LTZiNWMtNDYzMi05MWQ4LWQ5MDcyMgA1YjMwMTYALgAAA5ukgsUdw+BFjn7iHZ02H3gBAM/bOclCwmFEsqKa2vRsw2EAAAIBWQAAAA=="; 

protected string syncCalendar(HttpContext context) 
{ 
    string response = ""; 
    try 
    { 
     // CONNECT TO EXCHANGE 
     ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1); 
     service.Credentials = new WebCredentials(EmailAdre, EmailPass, EmailDomi); 
     service.TraceEnabled = true; 
     service.TraceFlags = TraceFlags.All; 

     service.EnableScpLookup = true; 
     service.AcceptGzipEncoding = true; 
     service.Url = new Uri(EWSUrl); 

     // Find Folder 
     FolderView folderView = new FolderView(calFolderLimit); 
     folderView.Traversal = FolderTraversal.Deep; 
     folderView.PropertySet = new PropertySet(FolderSchema.FolderClass, FolderSchema.DisplayName, FolderSchema.TotalCount, FolderSchema.ParentFolderId); 

     FindFoldersResults folders = service.FindFolders(new FolderId(WellKnownFolderName.Root), folderView); 

     foreach (var myFolder in folders.Folders) 
     { 
      if (myFolder is CalendarFolder && (myFolder.DisplayName == calFolderName || myFolder.Id.ToString() == calFolderID)) 
      { 
       //Doing stuff with matched calendar folder 
       //Print name for debugging 
       response += "<div>" + myFolder.DisplayName + "</div>"; 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     response += "[ERROR]<p>" + ex.Message + "<p/><p>" + ex.StackTrace + "</p>"; 
    } 
    return response; 
} 
+0

よく動作しないのは何ですか?何かエラーがありますか? – musefan

+0

いいえ、私はそれを言及していた場合は、エラーはありません。スクリプトは共有カレンダーを返しません。 私はこれについての説明を投稿に追加しました。 – Forecaster

答えて

1

あなたが投稿したこのコードは、元の作者に話をしないと意味がありません。 "== AQMkAGU5NTdjYTE5LTZiNWMtNDYzMi05MWQ4LWQ5MDcyMgA1YjMwMTYALgAAA5ukgsUdw + BFjn7iHZ02H3gBAM/bOclCwmFEsqKa2vRsw2EAAAIBWQAAAA"

のconst文字列calFolderID =を見てみましょう。

ハードコードされたフォルダのews FolderIdのように見えますか?このような素晴らしいアイデアではない。たとえば、メールボックスがOnPremからOffice365に移行された場合、FolderIdはコードを壊すだろう(最初の場所で動作したとしたら)。すでにフォルダのEWSフォルダIDをお持ちの場合

ただし、コードの残りの部分はredudantで、あなただけ例えば

 FolderId fldId = new FolderId("AQMkAGU5NTdjYTE5LTZiNWMtNDYzMi05MWQ4LWQ5MDcyMgA1YjMwMTYALgAAA5ukgsUdw+BFjn7iHZ02H3gBAM/bOclCwmFEsqKa2vRsw2EAAAIBWQAAAA=="); 
     Folder myFolder = Folder.Bind(service, fldId); 

しかし、最も可能性が高いとしてフォルダIDに結合することによって、同じことを行っている可能性あなたがアクセスしたいFolderIdはおそらくバインドしたいカレンダーがあるターゲットメールボックスを開いて新しいfolderIdをつかんですぐに修正する唯一の方法を変更しました。 EWSEditor https://ewseditor.codeplex.com/を使用すると、コードを書く必要なく取得できます。一旦あなたがクイックフィックスを働かせたら、私はあなたがそれを将来中断するのを止めるために全部書き直すことを提案するでしょう。

関連する問題