9

Là một "Người mới sử dụng API được quản lý EWS", tôi đang gặp một số vấn đề trong việc tìm kiếm các ví dụ và tài liệu về cách tạo và quản lý Công việc.Tạo nhiệm vụ cho người dùng khác bằng API được quản lý Exchange Web Services (EWS)

Tôi đã tự mình tạo một tác vụ mà không gặp sự cố. Tuy nhiên, tôi thực sự cần phải có thể làm như sau - nếu có ai có thể cho tôi bất kỳ con trỏ nào tôi thực sự đánh giá cao nó ...

  1. Tạo một nhiệm vụ và gán nó cho người dùng khác.
  2. Có thể thẩm vấn trạng thái của tác vụ đó (phần trăm hoàn thành, vv) trong khi nó được gán cho người dùng đó.
  3. Cập nhật ghi chú về tác vụ bất kỳ lúc nào.

Xin cảm ơn trước cho bất kỳ con trỏ nào!

Trả lời

1

Thật không may, bạn không thể đặt thuộc tính Task.DisplayTo. Tôi sẽ đề nghị rằng vẫn là trường hợp EWS không hỗ trợ giao nhiệm vụ cho người khác (see post) và để có được chức năng bạn yêu cầu, bạn phải tạo mục trong thư mục Nhiệm vụ của người dùng mà bạn muốn gán nó cho (điều này khác với việc gán, mà bạn sẽ làm từ thư mục của riêng bạn)

Trong khi tôi có chức năng này làm việc với các lớp proxy, tôi chưa có nó làm việc với API được quản lý. Tôi sẽ giả định rằng bạn có thể sử dụng phương thức FindFolder để truy xuất thư mục nhiệm vụ của người được chỉ định và sau đó tạo mục đó, nhưng tôi sẽ xem và cập nhật khi tôi có phiên bản làm việc.

Xem không gian này ;-)

+0

Cám ơn nhìn vào điều này đối với tôi - nó rất nhiều đánh giá cao! Tôi háo hức chờ đợi phản hồi của bạn ... –

2

Tôi đã xem xét điều này và tôi không chắc chắn rằng có thể sử dụng API được quản lý.

Tôi đã thiết lập hệ thống bằng bốn thư mục người dùng mẫu và người dùng quản trị viên trung tâm có quyền truy cập được ủy quyền vào từng hộp thư của người dùng đó. Khi tôi cố gắng tìm các thư mục bằng cách sử dụng API, tôi chỉ có thể tìm thấy các thư mục của người dùng mà tôi cung cấp thông tin đăng nhập khi tạo đối tượng dịch vụ.

Tôi cũng đang sử dụng đối tượng proxy được tạo tự động (chỉ chọn API để thử và trợ giúp) và tôi sử dụng quy trình sau để tạo tác vụ cho người dùng khác (hoạt động chính xác ...):

  1. Kết nối với máy chủ dưới dạng tài khoản quản trị trung tâm.
  2. Tạo đối tượng nhiệm vụ như bạn làm cho tài khoản của riêng bạn.
  3. Tạo tham chiếu đến thư mục Công việc của người dùng mà bạn muốn gửi mục.
  4. Tạo một đối tượng CreateItemRequest để vượt qua các máy chủ, và thêm hai mục từ bước 2 và 3 để yêu cầu

Khi yêu cầu được gửi, mục được tạo ra trong thư mục của người dùng mục tiêu.

Tôi hy vọng rằng chuỗi này có thể có trong API được quản lý, nhưng dường như nó không hoạt động.

Tôi sẽ tiếp tục làm việc trên đó khi tôi có cơ hội, nhưng tôi có các vấn đề khác với các cuộc hẹn mà tôi đang làm việc trên là tốt. Tôi nhận ra rằng chuỗi có thể giúp bất kỳ ai khác tìm kiếm, trong trường hợp họ có nhiều may mắn hơn.

Sorry i cant cung cấp bất kỳ thông tin hơn tại thời điểm

+0

Thực sự đánh giá cao sự giúp đỡ của bạn với điều này - Tôi sẽ thêm một tham chiếu web và có một chơi với nó bản thân mình, quá. Sẽ cho bạn biết nếu tôi nhận được anywehere? !! –

+0

một kết xuất mẫu mã sẽ hữu ích ... ngay cả khi không hoàn thành (chỉ với 2,3 và 4). – Seph

2

Một lựa chọn khác được thiết lập sử dụng tài sản ExchangeService ImpersonatedUserId để mạo danh người dùng sẽ được giao nhiệm vụ. Mạo danh người dùng trước khi tạo nhiệm vụ và nó sẽ được tạo trong thư mục Nhiệm vụ của họ.

3

Các mã trong this post làm việc cho tôi

đang dán cho hậu thế:

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 được xem xét điều này gần đây hơn và có các thông tin sau:

Tôi đang chạy một ứng dụng Console này sẽ thiết lập một kết nối trực tuyến để kiểm tra email mới đến trong hộp thư cho [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 lớp tĩnh của tôi trông lỏng lẻo như thế này:

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); 
    } 
} 

Với điều này, bạn có thể thấy tôi đã đăng ký OnNotificationEvent và lần lượt phương pháp OnEvent của chúng tôi sẽ được gọi khi một email mới đến. Khi một email mới đến hộp thư này, tôi có một yêu cầu để tạo một nhiệm vụ và gán nó cho người có liên quan, dựa trên những gì thuộc tính 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); 
      } 
     } 

Lúc đầu bạn có thể thấy rằng tôi đã cố gắng thêm người mà tôi muốn công việc được tạo ra cho trong phương pháp task.Save, tuy nhiên một khi tôi đã đi vào Outlook để tương tác với nhiệm vụ mới được tạo ra, chủ sở hữu vẫn còn userone, tức là người có thông tin đăng nhập được sử dụng để kết nối với dịch vụ, đây là vấn đề đối với tôi khi tôi cần chủ sở hữu nhiệm vụ là usertwo.

Điều này được thực hiện bằng cách xóa biến số targetSharedEmailAddress và thay vào đó sử dụng thuộc tính ImpersonatedUserId của đối tượng ExchangeServer.

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

Các vấn đề liên quan