Создание задач для других пользователей с использованием управляемого API веб-служб Exchange (EWS) - PullRequest
10 голосов
/ 09 июля 2010

Будучи «новичком в управляемом API EWS», у меня возникли некоторые проблемы с поиском примеров и документации по созданию и управлению задачами.

Мне удалось создать задачу для себя без проблем.Тем не менее, мне действительно нужно иметь возможность сделать следующее - если бы кто-нибудь мог дать мне какие-либо указатели, я был бы очень признателен ...

  1. Создать задачу и назначить ее другому пользователю.
  2. Уметь запрашивать состояние этой задачи (процент выполнения и т. Д.), Пока она назначена этому пользователю.
  3. Обновлять примечания к задаче в любое время.

Заранее спасибо за любые указатели!

Ответы [ 6 ]

3 голосов
/ 02 февраля 2011

код в у меня этот пост работал

Вставка кода для потомков:

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;

    }
2 голосов
/ 01 октября 2010

Устанавливается другая опция, используйте свойство ExchangeService ImpersonatedUserId для олицетворения пользователя, которому будет назначено задание. Выдайте себя за пользователя перед созданием задачи, и она должна быть создана в папке «Задачи».

2 голосов
/ 09 июля 2010

Я посмотрел на это, и я не уверен, что это возможно с помощью управляемого API.

У меня настроена система с использованием четырех примеров пользовательских папок и пользователя центрального администратора с делегированным доступом к каждому из почтовых ящиков этого пользователя.Когда я пытаюсь найти папки с помощью API, я могу найти только папки пользователя, чьи учетные данные я предоставляю при создании объекта службы.

Я также использую автоматически сгенерированные прокси-объекты (только взял API, чтобы попытаться помочь) и использую следующий процесс для создания задачи для другого пользователя (это работает правильно ...):

  1. Подключитесь к серверу в качестве учетной записи центрального администратора.
  2. Создайте объект задачи так же, как для своей учетной записи.
  3. Создайте ссылку на задачипапка пользователя, которому вы хотите отправить элемент.
  4. Создайте объект CreateItemRequest для передачи на сервер и добавьте два элемента из шагов 2 и 3 в запрос

Когда запрос отправлен, элемент создается в папке целевого пользователя.

Я надеялся, что эта последовательность может быть возможной в управляемом API, но, похоже, она не работает.

Я буду продолжать работать над этим, как только у меня будет возможность, но у меня есть другие проблемы с назначениями, над которыми я также работаю.Я подумал, что последовательность может помочь кому-то еще искать, если им повезет больше.

Извините, я не могу предоставить больше информации на данный момент

1 голос
/ 09 июля 2010

К сожалению, вы не можете установить свойство Task.DisplayTo. Я хотел бы предположить, что EWS все еще не поддерживает назначение задач другим ( см. Пост ) и что для получения требуемой функциональности вам необходимо создать элемент в Папка Tasks пользователя, которому вы хотите назначить его (это отличается от назначения, которое вы сделали бы из своей собственной папки)

Хотя эта функция работает с прокси-классами, она еще не работает с управляемым API. Я бы предположил, что вы можете использовать метод FindFolder, чтобы получить папку задач уполномоченного, а затем создать элемент там, но я посмотрю и обновлю, когда у меня будет рабочая версия.

Смотри это место; -)

0 голосов
/ 19 сентября 2016

Я изучал это совсем недавно и имею следующее:

Я запускаю консольное приложение, которое настроит потоковое соединение для проверки новых писем, поступающих в почтовый ящик для userOne@myDomain.com

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("userone@mydomain.com", 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:humanresources@myDomain.com>")
                {
                    targetSharedEmailAddress = "usertwo@mydomain.com";                    
                }                          

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

Сначала вы можете видеть, что я пытался добавить человека, для которого нужно создать задачу, в методе task.Save, однако, как только я перешел в Outlook для взаимодействия с вновь созданной задачей, владелец все еще был userone т. е. человек, который использовал учетные данные для подключения к службе, для меня это была проблема, поскольку мне нужно, чтобы владельцем задачи было usertwo.

Это было достигнуто путем удаления переменной targetSharedEmailAddress и использования свойства ImpersonatedUserId объекта ExchangeServer.

 if (recievedMail.ToAddress.ToString() == "humanresources <SMTP:humanresources@mydomain.com>")
     {
         _service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "usertwo@mydomain.com");         
     } 

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

0 голосов
/ 28 февраля 2013

EWS в настоящее время не поддерживает назначение задач Проверьте эту ссылку

http://social.msdn.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/2d1d88dc-9b79-4c0c-b438-cc04ff60286f

...