10

作为“EWS 托管 API 新手”,我在查找有关创建和管理任务的示例和文档时遇到了一些问题。

我已经成功地为自己创建了一个任务,没有任何问题。但是,我真的需要能够做到以下几点 - 如果有人能给我任何指示,我会非常感激......

  1. 创建一个任务并将其分配给另一个用户。
  2. 能够在将任务分配给该用户时询问该任务的状态(完成百分比等)。
  3. 随时更新任务笔记。

提前感谢您的任何指点!

4

6 回答 6

3

这篇文章中的代码对我有用

为后代粘贴代码:

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;

    }
于 2011-02-02T19:39:57.320 回答
2

另一个选项设置为使用 ExchangeService ImpersonatedUserId 属性来模拟将被分配任务的用户。在创建任务之前模拟用户,它应该在他们的任务文件夹中创建。

于 2010-10-01T17:13:34.957 回答
2

我一直在研究这个,我不确定是否可以使用托管 API。

我已经使用四个示例用户文件夹设置了一个系统,并且一个中央管理员用户对每个用户的邮箱具有委派访问权限。当我尝试使用 API 查找文件夹时,我只能找到我在创建服务对象时提供的凭据的用户的文件夹。

我还使用了自动生成的代理对象(只选择了 API 来尝试帮助),并且我使用以下过程为另一个用户创建任务(这可以正常工作......):

  1. 以中央管理员帐户连接到服务器。
  2. 像为您自己的帐户一样创建任务对象。
  3. 创建对要将项目发送到的用户的 Tasks 文件夹的引用。
  4. 创建一个 CreateItemRequest 对象以传递给服务器,并将步骤 2 和 3 中的两项添加到请求中

发送请求时,会在目标用户的文件夹中创建项目。

我希望这个序列在托管 API 中是可能的,但它似乎不起作用。

只要有机会,我会继续努力,但我还有其他关于我正在努力的约会的问题。我认为这个序列可能会帮助其他人寻找,以防他们有更多的运气。

抱歉,我目前无法提供更多信息

于 2010-07-09T11:25:08.253 回答
1

不幸的是,您不能设置 Task.DisplayTo 属性。我建议 EWS 仍然不支持将任务分配给其他人(请参阅帖子),并且为了获得您需要的功能,您必须在用户的 Tasks 文件夹中创建该项目您想将其分配给(这与分配不同,您将在自己的文件夹中进行分配)

虽然我有这个功能与代理类一起使用,但我还没有让它与托管 API 一起使用。我假设您可以使用 FindFolder 方法来检索受让人的任务文件夹,然后在那里创建项目,但我会看看,并在我有工作版本时更新。

关注此空间 ;-)

于 2010-07-09T08:37:09.753 回答
0

EWS 当前不支持分配任务检查此链接

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

于 2013-02-28T15:10:12.530 回答
0

我最近一直在研究这个并且有以下几点:

我正在运行一个控制台应用程序,它将建立一个流连接来检查到达邮箱的新电子邮件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

于 2016-09-19T15:50:43.400 回答