Acessando horário selecionado no calendário do Outlook
Olá pessoal, estive conversando com um parceiro Microsoft que eu atendo e eles estavam tendo problemas para acessar as informações de data e hora marcadas no calendário do Outlook, fiz alguns testes para ajudá-los e abaixo mostro as minhas conclusões.
Infelizmente o Outlook não possui uma API para este tipo de consulta. Se você tentar buscar os itens selecionados no calendário recebe como retorno uma coleção vazia, o que tem sentido, de fato não existe mesmo nenhum compromisso selecionado, apenas horários vagos na agenda, concordam? ;)
Se você tentar criar um compromisso via API, ele também não será criado na data selecionada no calendário. A saída neste caso é enganar o Outlook criando um novo compromisso através do botão correspondente na toolbar. O código para isto está abaixo:
private object myMissing = System.Reflection.Missing.Value;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
AddCommandBar();
}
private void AddCommandBar()
{
var myExplorer = this.Application.ActiveExplorer();
var myCommandBar = myExplorer.CommandBars["Standard"];
var myButton = (Office.CommandBarButton)myCommandBar.Controls.Add(Office.MsoControlType.msoControlButton, myMissing, myMissing, 2, 1);
myButton.Caption = "Buscar Data Selecionada";
myButton.Style = Office.MsoButtonStyle.msoButtonCaption;
myButton.Click += new Office._CommandBarButtonEvents_ClickEventHandler(myButton_Click);
myCommandBar.Visible = true;
myCommandBar.Enabled = true;
myCommandBar.Position = Office.MsoBarPosition.msoBarTop;
}
private void myButton_Click(CommandBarButton Ctrl, ref bool CancelDefault)
{
var explorer = Application.ActiveExplorer();
if (explorer != null)
{
var folder = explorer.CurrentFolder;
if (folder.DefaultItemType == Microsoft.Office.Interop.Outlook.OlItemType.olAppointmentItem)
{
var cb = explorer.CommandBars.FindControl(myMissing, 1106, myMissing, myMissing);
if (cb != null)
{
cb.Execute();
var appointment = (Outlook._AppointmentItem)Application.ActiveInspector().CurrentItem;
appointment.Close(Microsoft.Office.Interop.Outlook.OlInspectorClose.olDiscard);
var informacoes = string.Format("Inicio: {0}\n Fim: {1}",
appointment.Start.ToString(),
appointment.End.ToString());
System.Windows.Forms.MessageBox.Show(informacoes);
}
}
}
}
Fica a dica para quem precisar e até a próxima.
Comments
- Anonymous
March 25, 2009
PingBack from http://blog.a-foton.ru/index.php/2009/03/26/acessando-horario-selecionado-no-calendario-do-outlook-2/