AYUDA: Visual basic y Exchange

16/10/2005 - 17:43 por José Enrique Aguado | Informe spam
Me llamo José Enrique y programo Visual Basic. Hace poco me han pedido hacer
un servicio NT que consulte los buzones de las personas, mire sus citas y si
alguna concuerda con el momento actual entonces envie información a otras
aplicaciones por UDP. Mi problema es que el programa mira todo bien la
primera vez, la segunda vez da error de operation failed en diferentes
métodos y la tercera vez que intenta acceder a los buzones casca y finaliza.
El código es el siguiente: (para hacer login utilizo una cadena de conexion
y como base el nombre del servidor Exchange y el nombre del usuario en
Exchange).

Agradeceria si alguien pudiese ayudarme porque estoy desesperado y no veo el
fallo.
Gracias.

El codigo es el siguiente

While not g_bFin ( g_Fin será True cuando el usuario de la aplicación
detenga el servicio)
For i=0 to iUsers-1
bCheck = bCheckMailbox(ExchangeAlias(i))
next
lTime = Timer
While Timer <= lTime + 30000
DoEvents
Wend
Wend

Function bCheckMailBox(BVal cAlias as string) as Boolean

(declaracion de variables)


On Error Goto ErrorPoint:

Set ObjSesion = new Session
ObSesion.Logon cAlias
Set ObjCalendar objSession.GetDefaultFolder(MAPI.CdoDefaultFolderCalendar)
Set ObjColAppointments = objCalendar.Messages
Set ObjFilter = ObjColAppointments.Filter
objFilter.Fields.Add CdoPR_START_DATE, Now-7
objFilter.Fields.Add CdoPR_END_DATE, Now+7

cNow = Format$(Now,"yyyymmdd hhnnss")
For each ObjAppointment in ObjColAppointments
cState = ObjAppointment.BusyStatus
cStartDate = Format$(ObjAppointmen.StartDate,"yyyymmdd hhnnss")
cEndDate = Format$(ObjAppointment.EndDate,"yyyymmdd hhnnss")
If cStartDate <= cNow And cEndDate>=Now then
cUserState = cState
cUserStart = cStartDate
cUserEnd = cEndDate
Exit for
endIf
Next
Set ObjCalendar = Nothing
Set objColAppointments = Nothing
Set ObjFilter = Nothing
ObjSession.Logout

bCheckMailBox = True

Exit Function

ErrorPoint:
bCheckMailBox = False
Set ObjCalendar = Nothing
Set objColAppointments = Nothing
Set ObjFilter = Nothing
ObjSession.Logout
End Function
 

Leer las respuestas

#1 Miguel Angel Campos
17/10/2005 - 09:21 | Informe spam
Hola José Enrique,

no voy a intentar resolver tu problema por que no he tratado mucho con
Exchange, pero tengo una duda muy grande con respecto a lo que estas
haciendo:
Dices que tienes que hacer un servicio NT que revise varias cuentas de
correos, y si se produce algo relevante realice una tarea. Según el código
que has mostrado, deduzco que estas utilizando VB6.0, pero desde esta
versión no es posible realizar un servicio de Windows NT, así que no se como
vas a terminar el trabajo.
Por otro lado creo que existe otra alternativa mejor a hacer un "ping" cada
cierto tiempo para ver si ha cambiado algo en un buzón de correo, es posible
programar add-in para Exchange que permiten un tratamiento de los correos o
eventos producidos en el servidor. Como te he comentado ántes no he
trabajado mucho con este producto, así que te doy una dirección de la
versión Exchange 2000 que explica distintas posibilidades de interacturar
con el servidor:
http://msdn.microsoft.com/library/d..._cmpts.asp

Espero que encuentres algo interesante, lo que si te anticipio es que casi
seguro tienes que utilizar C++ para hacer cualquiera de estas cosas.

Un Saludo,

Miguel Angel Campos
MCAD.NET

"José Enrique Aguado" escribió en el mensaje
news:
Me llamo José Enrique y programo Visual Basic. Hace poco me han pedido
hacer
un servicio NT que consulte los buzones de las personas, mire sus citas y
si
alguna concuerda con el momento actual entonces envie información a otras
aplicaciones por UDP. Mi problema es que el programa mira todo bien la
primera vez, la segunda vez da error de operation failed en diferentes
métodos y la tercera vez que intenta acceder a los buzones casca y
finaliza.
El código es el siguiente: (para hacer login utilizo una cadena de
conexion
y como base el nombre del servidor Exchange y el nombre del usuario en
Exchange).

Agradeceria si alguien pudiese ayudarme porque estoy desesperado y no veo
el
fallo.
Gracias.

El codigo es el siguiente

While not g_bFin ( g_Fin será True cuando el usuario de la aplicación
detenga el servicio)
For i=0 to iUsers-1
bCheck = bCheckMailbox(ExchangeAlias(i))
next
lTime = Timer
While Timer <= lTime + 30000
DoEvents
Wend
Wend

Function bCheckMailBox(BVal cAlias as string) as Boolean

(declaracion de variables)


On Error Goto ErrorPoint:

Set ObjSesion = new Session
ObSesion.Logon cAlias
Set ObjCalendar > objSession.GetDefaultFolder(MAPI.CdoDefaultFolderCalendar)
Set ObjColAppointments = objCalendar.Messages
Set ObjFilter = ObjColAppointments.Filter
objFilter.Fields.Add CdoPR_START_DATE, Now-7
objFilter.Fields.Add CdoPR_END_DATE, Now+7

cNow = Format$(Now,"yyyymmdd hhnnss")
For each ObjAppointment in ObjColAppointments
cState = ObjAppointment.BusyStatus
cStartDate = Format$(ObjAppointmen.StartDate,"yyyymmdd hhnnss")
cEndDate = Format$(ObjAppointment.EndDate,"yyyymmdd hhnnss")
If cStartDate <= cNow And cEndDate>=Now then
cUserState = cState
cUserStart = cStartDate
cUserEnd = cEndDate
Exit for
endIf
Next
Set ObjCalendar = Nothing
Set objColAppointments = Nothing
Set ObjFilter = Nothing
ObjSession.Logout

bCheckMailBox = True

Exit Function

ErrorPoint:
bCheckMailBox = False
Set ObjCalendar = Nothing
Set objColAppointments = Nothing
Set ObjFilter = Nothing
ObjSession.Logout
End Function




Preguntas similares