2010-12-01 32 views
7

Ya no puedo ignorar los rebuznos de mis usuarios. Quieren un sistema de programación de tareas y en algún momento tengo que entregarlo. Estaba pensando en crear lo mío (no puede ser difícil), pero los usuarios tendrían dos sistemas de administración de tareas uno al lado del otro, ya que usan Outlook para lo mismo.Técnicas para integrar una aplicación de intranet ASP.NET con el calendario de Outlook

En cuanto a la integración de calendario/tareas de Outlook, dos enfoques posibles se me ocurrió:

1) El uso de JavaScript y Automatización

Me parece recordar que es posible hacer la automatización en JavaScript.

PROS:

  • que he hecho antes de la automatización.

CONTRA:

  • automatización es horrible!
  • Algunos persistencia (Outlook entidades) es responsabilidad de código de cliente, y el resto del responsabilidad del lado del servidor código. Esto se siente horrible.
  • Posibles problemas de seguridad/
    bloqueo del departamento de TI.

2) utilizan algún API .NET para interactuar con Exchange Server directamente

La intranet utiliza inicio de sesión único, así que espero que debería hacer que los problemas de seguridad más fácil.

PROS:

  • Todo el código persistencia sería del lado del servidor.

CONTRA:

  • que ni siquiera saben que existe una API .

Como siempre, me gusta apoyarme en los hombros de los gigantes. ¿Alguien que haya pisado este camino antes me puede dar una guía?

+0

supongo con JavaScript Automatización quiere decir JScript (Windows Scripting Host) y OLE? Si es así, probablemente no funcionará en un navegador y requiere que Outlook esté instalado en las computadoras para que OLE esté disponible. –

+0

Acabo de recordar que hace muchos años pude obtener JavaScript para hacer la automatización básica de (creo) Word. Sí, Outlook debería estar instalado en la computadora, pero es la computadora del usuario, por lo que sería. – David

Respuesta

7

Recientemente hicimos el mismo tipo de integración para nuestra aplicación de intranet usando el Exchange Web Services Managed API. Esa sería una forma de proceder para la segunda opción. Nunca he probado lo mismo usando JavaScript, así que no tengo idea de eso.

Con respecto a la consulta del comentario 1: necesitaría un solo usuario de AD que utilizará para suplantar y trabajar en la cuenta de otros usuarios.Por favor refiérase a la siguiente ejemplo:

Digamos que tengo una cuenta Dir activo llamado fabrikam\myappname con contraseña [email protected]

void CreateFolder(string targetUserEmail) { 
    string appName = "myappname"; 
    string appPassword = "[email protected]"; 
    string emailDomain = "fabrikam"; 
    string appEmail = string.Format("{0}@{1}.com", appName, emailDomain); 

    ExchangeService service = new ExchangeService(); 
    service.Credentials = new NetworkCredential(appName, appPassword, emailDomain); 
    service.AutodiscoverUrl(appEmail); 

    service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, targetUserEmail); 

    Folder newFolder = new Folder(service); 
    newFolder.DisplayName = "TestFolder1"; 

    newFolder.Save(WellKnownFolderName.Inbox); 
} 

No echa un artículo Configuring Exchange Impersonation hacer suplantación de trabajo.

Espero que ayude.

+0

Esto se ve perfecto. Si no te importa que te lleve más lejos, ¿qué necesito saber sobre Joe Bloggs antes de poder comenzar a usar la API para agregar cosas a su calendario? ¿Necesito su contraseña de Active Directory (esto obviamente sería muy problemático). Además, ¿la API me permitirá, como desarrollador, ver la información del calendario para cualquier persona? ¿O puedo (o la gente de TI) configurar 'niveles' de acceso? Solo estoy pensando en lo difícil que sería persuadir a los jefes de las empresas. Necesito esta herramienta si también significa que puedo leer sus calendarios y correos electrónicos. – David

+0

@David: actualicé mi respuesta según su comentario. –

+0

Gracias CC, eso es inmensamente útil. – David

0

Si por alguna razón no desea habilitar la suplantación (dado que es global) también puede hacer que cada usuario comparta su calendario con su perfil que ejecuta la aplicación (appName en la muestra de CodeCanvas). Una vez que dan su permiso apropiado (leer/escribir/editar) se puede agregar citas a su calendario de este modo:

myappointment = new Appointment(service); 
myappointment.Subject = "subject"; 
myappointment.Body = "body"; 
myappointment.Start = myStartTime; 
myappointment.End = myStartTime.AddHours(1); 
myMailbox = new Mailbox("[email protected]"); 
myFolder = new FolderId(WellKnownFolderName.Calendar, myMailbox); 
myappointment.Save(myFolder, SendInvitationsMode.SendToNone); 
/* get the appointment id so your app can access it later to update or delete */ 
myexchangeid = myappointment.Id.UniqueId; 
Cuestiones relacionadas