作爲「EWS託管API新手」,我在查找有關創建和管理任務的示例和文檔時遇到了一些問題。使用Exchange Web服務(EWS)管理API爲其他用戶創建任務
我設法爲自己創建了一個沒有問題的任務。然而,我真的需要能夠做到以下幾點 - 如果任何人都可以給我任何指針,我真的很感激它...
- 創建一個任務,並將其分配給另一個用戶。
- 能夠詢問該任務的狀態(完成百分比等),同時將其分配給該用戶。
- 隨時更新任務的註釋。
預先感謝任何指針!
作爲「EWS託管API新手」,我在查找有關創建和管理任務的示例和文檔時遇到了一些問題。使用Exchange Web服務(EWS)管理API爲其他用戶創建任務
我設法爲自己創建了一個沒有問題的任務。然而,我真的需要能夠做到以下幾點 - 如果任何人都可以給我任何指針,我真的很感激它...
預先感謝任何指針!
不幸的是,你不能設置Task.DisplayTo屬性。我建議EWS不支持將任務分配給其他人(see post),並且爲了獲得您需要的功能,您必須在用戶的任務文件夾中創建該項目想將其分配到(這是分配,你會從自己的文件夾做不同)
雖然我有這個功能與代理類的工作,我不尚未有它與託管API工作。我假設你可以使用FindFolder方法來檢索受讓人的任務文件夾,然後在那裏創建該項目,但是我會看一看,並在我有一個工作版本時進行更新。
關注此空間;-)
我一直在考慮看看這個,我不知道這是可能的使用管理API。
我有一個系統設置使用四個樣本用戶文件夾,並與委派訪問的每個用戶的郵箱的中央管理員用戶。當我嘗試使用API查找文件夾時,我只能找到創建服務對象時提供的憑據的用戶的文件夾。
我也在使用自動生成的代理對象(只提取了API來嘗試和幫助),並且我使用以下過程爲另一個用戶創建任務(此工作正常...):
當發送請求時,該項目被在目標用戶的文件夾中創建。
我希望這個序列可能在託管API中,但它似乎不起作用。
我會繼續做這個工作,因爲我有機會,但我已經與我的工作和約會等問題。我想這個順序可能會幫助其他人尋找,以防他們有更多的運氣。
對不起我不能在此刻
真的很感謝你的幫助 - 我會添加一個Web引用並且自己也玩一下。如果我得到任何地方,會讓你知道嗎? – 2010-07-09 14:02:49
代碼示例轉儲將很有用...即使不完整(僅包含2,3和4)。 – Seph 2011-11-02 12:19:44
另一種選擇是設置使用ExchangeService ImpersonatedUserId屬性來冒充誰將會被分配任務的用戶提供任何更多的信息。在創建任務之前模擬用戶,並且應該在他們的任務文件夾中創建它。
在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;
}
的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
感謝您尋找到這對我來說 - 這是非常非常感謝!我熱切地等待着你的迴應... – 2010-07-09 10:53:01