2010-07-09 143 views
9

作爲「EWS託管API新手」,我在查找有關創建和管理任務的示例和文檔時遇到了一些問題。使用Exchange Web服務(EWS)管理API爲其他用戶創建任務

我設法爲自己創建了一個沒有問題的任務。然而,我真的需要能夠做到以下幾點 - 如果任何人都可以給我任何指針,我真的很感激它...

  1. 創建一個任務,並將其分配給另一個用戶。
  2. 能夠詢問該任務的狀態(完成百分比等),同時將其分配給該用戶。
  3. 隨時更新任務的註釋。

預先感謝任何指針!

回答

1

不幸的是,你不能設置Task.DisplayTo屬性。我建議EWS不支持將任務分配給其他人(see post),並且爲了獲得您需要的功能,您必須在用戶的任務文件夾中創建該項目想將其分配到(這是分配,你會從自己的文件夾做不同)

雖然我有這個功能與代理類的工作,我不尚未有它與託管API工作。我假設你可以使用FindFolder方法來檢索受讓人的任務文件夾,然後在那裏創建該項目,但是我會看一看,並在我有一個工作版本時進行更新。

關注此空間;-)

+0

感謝您尋找到這對我來說 - 這是非常非常感謝!我熱切地等待着你的迴應... – 2010-07-09 10:53:01

2

我一直在考慮看看這個,我不知道這是可能的使用管理API。

我有一個系統設置使用四個樣本用戶文件夾,並與委派訪問的每個用戶的郵箱的中央管理員用戶。當我嘗試使用API​​查找文件夾時,我只能找到創建服務對象時提供的憑據的用戶的文件夾。

我也在使用自動生成的代理對象(只提取了API來嘗試和幫助),並且我使用以下過程爲另一個用戶創建任務(此工作正常...):

  1. 連接到服務器爲中心的管理員帳戶。
  2. 與您自己的帳戶一樣創建任務對象。
  3. 創建對要發送項目的用戶的任務文件夾的引用。
  4. 創建CreateItemRequest對象傳遞給服務器,並從步驟2和3的兩個項目添加到請求

當發送請求時,該項目被在目標用戶的文件夾中創建。

我希望這個序列可能在託管API中,但它似乎不起作用。

我會繼續做這個工作,因爲我有機會,但我已經與我的工作和約會等問題。我想這個順序可能會幫助其他人尋找,以防他們有更多的運氣。

對不起我不能在此刻

+0

真的很感謝你的幫助 - 我會添加一個Web引用並且自己也玩一下。如果我得到任何地方,會讓你知道嗎? – 2010-07-09 14:02:49

+0

代碼示例轉儲將很有用...即使不完整(僅包含2,3和4)。 – Seph 2011-11-02 12:19:44

2

另一種選擇是設置使用ExchangeService ImpersonatedUserId屬性來冒充誰將會被分配任務的用戶提供任何更多的信息。在創建任務之前模擬用戶,並且應該在他們的任務文件夾中創建它。

3

this post的代碼爲我工作

粘貼代碼爲後人:

public string CreateTaskItem(string targetMailId) 
    { 

     string itemId = null; 

     task.Subject = "Amit: sample task created from SDE and EWS"; 

     task.Body = new BodyType(); 

     task.Body.BodyType1 = BodyTypeType.Text; 

     task.Body.Value = "Amit created task for you!"; 

     task.StartDate = DateTime.Now; 

     task.StartDateSpecified = true; 



     // Create the request to make a new task item. 

     CreateItemType createItemRequest = new CreateItemType(); 

     createItemRequest.Items = new NonEmptyArrayOfAllItemsType(); 

     createItemRequest.Items.Items = new ItemType[1]; 

     createItemRequest.Items.Items[0] = task; 

     /** code from create appointment **/ 

     DistinguishedFolderIdType defTasksFolder = new DistinguishedFolderIdType(); 

     defTasksFolder.Id = DistinguishedFolderIdNameType.tasks; 
     defTasksFolder.Mailbox = new EmailAddressType(); 

     defTasksFolder.Mailbox.EmailAddress = targetMailId; 

     TargetFolderIdType target = new TargetFolderIdType(); 

     target.Item = defTasksFolder; 



     createItemRequest.SavedItemFolderId = target; 


     try 

     { 

      // Send the request and get the response. 

      CreateItemResponseType createItemResponse = _esb.CreateItem(createItemRequest); 



      // Get the response messages. 

      ResponseMessageType[] rmta = createItemResponse.ResponseMessages.Items; 



      foreach (ResponseMessageType rmt in rmta) 

      { 

       ArrayOfRealItemsType itemArray = ((ItemInfoResponseMessageType)rmt).Items; 

       ItemType[] items = itemArray.Items; 


       // Get the item identifier and change key for each item. 

       foreach (ItemType item in items) 

       { 


//the task id 

        Console.WriteLine("Item identifier: " + item.ItemId.Id); 


//the change key for that task, would be used if you want to track changes ... 
        Console.WriteLine("Item change key: " + item.ItemId.ChangeKey); 

       } 

      } 

     } 

     catch (Exception e) 

     { 

      Console.WriteLine("Error Message: " + e.Message); 

     } 

     return itemId; 

    } 
0

的Ive最近看到這個,並有以下幾點:

我運行,這將建立一個流連接檢查郵箱到達新的電子郵件爲[email protected]

static void Main(string[] args) 
{ 
    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013); 
    WebCredentials wbcred = new WebCredentials("userone", "password", "mydomain"); 
    service.Credentials = wbcred; 

    Console.WriteLine("Attempting to autodiscover Url...");     
    service.AutodiscoverUrl("[email protected]", RedirectionUrlValidationCallback); 

    EWSConnection.SetStreamingNotifications(service); 

    Console.ReadKey(); 
    Environment.Exit(0); 
} 

EWSConnection靜態類控制檯應用程序的外觀鬆散這樣的:

public static void SetStreamingNotifications(ExchangeService service) 
{ 
    _service = service; 

    try 
    {  var subscription = service.SubscribeToStreamingNotifications(
      new FolderId[] { WellKnownFolderName.Inbox }, 
      EventType.NewMail);  

     StreamingSubscriptionConnection connection = new StreamingSubscriptionConnection(service, 5); 

     connection.AddSubscription(subscription); 
     connection.OnNotificationEvent += new StreamingSubscriptionConnection.NotificationEventDelegate(OnEvent); 

     connection.Open(); 

     _subscription = subscription; 
     _subscriptionConnection = connection; 

     Console.WriteLine($"Connection Open:{connection.IsOpen}"); 
    } 

    catch (Exception ex) 
    { 
     Console.WriteLine(ex); 
    } 
} 

有了這個,你可以看到我已經訂閱了OnNotificationEvent,而我的OnEvent方法將在新郵件到達時被調用。當新郵件到達此郵箱時,我需要創建一個任務並根據ToAddress屬性的內容將其分配給相關人員。

private static void CreateTask(NotificationEvent notification, RecievedMail recievedMail) 
     { 
      try 
      { 
       Console.WriteLine("Attempting to create task"); 

       Microsoft.Exchange.WebServices.Data.Task task = new Microsoft.Exchange.WebServices.Data.Task(_service); 

       task.DueDate = DateTime.Now.AddDays(7); 
       task.Body = recievedMail.Body; 
       task.Subject = recievedMail.Subject; 

       string targetSharedEmailAddress = null; 

       if (recievedMail.ToAddress.ToString() == "humanresources <SMTP:[email protected]>") 
       { 
        targetSharedEmailAddress = "[email protected]";      
       }       

       task.Save(new FolderId(WellKnownFolderName.Tasks,targetSharedEmailAddress)); // 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex); 
      } 
     } 

首先,你可以看到,我嘗試添加我想要的任務在task.Save方法要創建的人,但有一次我去的Outlook與新創建的任務互動,車主仍userone,也就是說憑證的人被用來連接到服務,這對我來說是一個問題,因爲我需要任務所有者爲usertwo

這是通過刪除targetSharedEmailAddress變量並改爲使用ExchangeServer對象的ImpersonatedUserId屬性來完成的。

if (recievedMail.ToAddress.ToString() == "humanresources <SMTP:[email protected]>") 
    { 
     _service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "[email protected]");   
    } 

https://msdn.microsoft.com/en-us/library/office/dd633680(v=exchg.80).aspx

相關問題