Foros

 
ForumForumForos DNNForos DNNDesarrolloDesarrolloAplicacion para Programador de Tareas Dnn Aplicacion para Programador de Tareas Dnn
Anterior Anterior
 
Siguiente Siguiente
Nuevo Mensaje
 21/01/2010 14:26
 

Por un lado tengo un modulo creado para DotNetNuke. La función del modulo es la de verificar si determinadas url’s están activas, en caso contrario envía un reporte de las url’s caídas a una cuenta de mail definida también en dicho modulo. Básicamente se cargan direcciones web al modulo, el modulo comprueba que sea una url valida (es decir que tenga el siguiente formato: http://xxxxx.xxx), luego procede a verificar si esta activa. Además de verificar si esta activa puede verificar la existencia de alguna porción de código, por ej.: imagen-oculta.gif con el fin de asegurar que la url este activa y funcionando correctamente, ya que puede estar activa pero estar siendo hackeada con lo cual el contenido no será el correspondiente. Esto ultimo es opcional.

En caso detectar que la url no esta activa o bien esta activa pero el elemento buscado (por ej.: imagen-oculta.gif) no se encuentra envía un reporte por correo electrónico, esta dirección de correo se define en la configuración del modulo.
Por otro lado, para evitar tener el navegador abierto con la pagina que contiene el modulo para que este se ejecute, se pensó en volcar esta funcionalidad a una dll e ingresarla en el programador de tareas de DotNetNuke. El programador de tareas de DotNetNuke permite ejecutar aplicaciones sin depender del navegador. Lo que se hace es una vez creado el archivo .dll (y ubicado en la carpeta bin de la instalación DNN) se ingresan los parámetros de este archivo en el programador de tareas, se definen algunos parámetros mas como ser tiempo entre una ejecución y otra, periodicidad de ejecución, etc.).
Hasta ahora se logro crear la dll y configurarla correctamente en el programador de tareas de DNN, realiza la comprobación de una url y reporta en caso de encontrarla con fallos. El inconveniente que surge es la obtención de los datos ingresados a través del modulo para así poder procesarlos. Hasta ahora no se pudo realizar esto. Como las funciones utilizadas en el modulo no son las mismas para la dll, se pensó en acceder a los datos directamente desde las tablas correspondientes en la base de datos. Lo ideal es utilizar lo que esta definido en el web.config de la instalación. Igualmente a modo de pruebas se intento conectar colocando la línea de conexión en el archivo dll copiando la línea que figura en el web.config, también se intento obtener una línea de conexión valida creando un nuevo proyecto y agregando un connectionstring en la Settings del proyecto, ahí se configuro a que servidor apunta, que base de datos y que autenticación se usa, después se copio esto al código de la dll. Todo esto sin resultados.
Estas son algunas de las variantes que se uso para el string de conexión, solo para probar a conectar directamente, de igual manera esta el ejemplo en los adjuntos:
sCnn ="Data Source=DAVID-E7971C50E;Initial Catalog=DotNetNuke;Integrated Security=True";
string sSel = "SELECT * FROM YourComany_LinkChecker";
sCnn ="Data Source= .\SQLExpress;Initial Catalog=DotNetNuke;Integrated Security=True";
string sSel = "SELECT * FROM YourComany_LinkChecker";
sCnn ="Data Source= DAVID-E7971C50E\SQLExpress;Initial Catalog=DotNetNuke;Integrated Security=True";
string sSel = "SELECT * FROM YourComany_LinkChecker";
Nuevo Mensaje
 21/01/2010 15:31
 

no entiendo bien cual es el problema, desde el planificador podeis referenciar el espacio de nombres del módulo que guarda los datos y utilizar todas las clases públicas que exponga el mismo.

Igualmente, si configurais el programador desde el módulo podreis agregarle valores de configuración a voluntad, de este modo podrás luego recuperarlos en el planificador. A ver si te sirve éste ejemplo...

Crear un programador desde la configuración del módulo (o desde cualquier otro lugar) y asignarle valores de configuración que luego podremos reutilizar desde la ejecución del planificador:

Private Function AddScheduler1() As Integer
Try
Dim objScheduleItem As New ScheduleItem
objScheduleItem.TypeFullName = "ACS.PyramidMap.Refresh_RETS_DAT, ACS.PyramidMap"
If txtTimeLapse.Text = "" Or txtTimeLapse.Text = "0" Or txtTimeLapse.Text = "-1" Then
objScheduleItem.TimeLapse = Null.NullInteger
Else
objScheduleItem.TimeLapse = Convert.ToInt32(txtTimeLapse.Text)
End If
objScheduleItem.TimeLapseMeasurement = drpTimeLapseMeasurement.SelectedItem.Value
If txtRetryTimeLapse.Text = "" Or txtRetryTimeLapse.Text = "0" Or txtRetryTimeLapse.Text = "-1" Then
objScheduleItem.RetryTimeLapse = Null.NullInteger
Else
objScheduleItem.RetryTimeLapse = Convert.ToInt32(txtRetryTimeLapse.Text)
End If
objScheduleItem.RetryTimeLapseMeasurement = drpRetryTimeLapseMeasurement.SelectedItem.Value
objScheduleItem.RetainHistoryNum = 10
objScheduleItem.AttachToEvent = "None"
objScheduleItem.CatchUpEnabled = False
objScheduleItem.Enabled = chkEnabledScheduler.Checked
objScheduleItem.ObjectDependencies = ""
objScheduleItem.Servers = ""
If (Me.MRIS_ScheduleID <> Null.NullInteger) Then
If (SchedulingProvider.Instance().GetSchedule(Me.MRIS_ScheduleID) Is Nothing) Then
objScheduleItem.ScheduleID = SchedulingProvider.Instance().AddSchedule(objScheduleItem)
Else
objScheduleItem.ScheduleID = Me.MRIS_ScheduleID
SchedulingProvider.Instance().UpdateSchedule(objScheduleItem)
End If
Else
objScheduleItem.ScheduleID = SchedulingProvider.Instance().AddSchedule(objScheduleItem)
End If
If Not SchedulingProvider.Instance().GetScheduleItemSettings(Me.MRIS_ScheduleID).Item("PortalID") Is Nothing Then
SchedulingProvider.Instance().GetScheduleItemSettings(Me.MRIS_ScheduleID).Item("PortalID") = Me.PortalSettings.PortalId.ToString()
Else
SchedulingProvider.Instance().AddScheduleItemSetting(objScheduleItem.ScheduleID, "PortalID", Me.PortalSettings.PortalId.ToString())
End If
If Not SchedulingProvider.Instance().GetScheduleItemSettings(Me.MRIS_ScheduleID).Item("ModuleID") Is Nothing Then
SchedulingProvider.Instance().GetScheduleItemSettings(Me.MRIS_ScheduleID).Item("ModuleID") = Me.ModuleId.ToString()
Else
SchedulingProvider.Instance().AddScheduleItemSetting(objScheduleItem.ScheduleID, "ModuleID", Me.ModuleId.ToString())
End If
If Not SchedulingProvider.Instance().GetScheduleItemSettings(Me.MRIS_ScheduleID).Item("TabModuleID") Is Nothing Then
SchedulingProvider.Instance().GetScheduleItemSettings(Me.MRIS_ScheduleID).Item("TabModuleID") = Me.TabModuleId.ToString()
Else
SchedulingProvider.Instance().AddScheduleItemSetting(objScheduleItem.ScheduleID, "TabModuleID", Me.TabModuleId.ToString())
End If
Return objScheduleItem.ScheduleID
Catch exc As Exception
ProcessModuleLoadException(Me, exc)
End Try
End Function

Para recuperar estos valores sigue este ejemplo:

Dim portalID As Integer = Convert.ToInt32(Me.ScheduleHistoryItem.GetSetting("PortalID"))
Dim moduleID As Integer = Convert.ToInt32(Me.ScheduleHistoryItem.GetSetting("ModuleID"))
Dim TabModuleID As Integer = Convert.ToInt32(Me.ScheduleHistoryItem.GetSetting("TabModuleID"))
Dim objModuleController As New ModuleController, Continuar As Boolean = False
Dim settings As Hashtable = objModuleController.GetTabModuleSettings(TabModuleID)
Dim PortalCtrl As New PortalController
Dim PortalInfo As PortalInfo = PortalCtrl.GetPortal(portalID)

Y a partir de ahí, puedes utilizar la configuración de tu módulo a voluntad. También puedes llamar a cualquier procedimiento importando su espacio de nombres o especificándolo completamente, por ejemplo, si tienes un procedimiento en tu DataProvider que sea GetAllUrls(moduleid) podrías hacer ésto:

Dim MisURLs as list(of MyTipo)=MiEspacioDeNombres.MiModulo.GetAllUrls(moduleID)

Observa que líneas antes hemos recuperado el id del módulo a través del GetSetting del scheduler.

Espero que te sirva.

Anterior Anterior
 
Siguiente Siguiente
ForumForumForos DNNForos DNNDesarrolloDesarrolloAplicacion para Programador de Tareas Dnn Aplicacion para Programador de Tareas Dnn

En total, tenemos 1098 nuevo(s) hilo(s) y 5265 nuevo(s) mensaje(s)
Los hilos más populares han estado en ¿por que?
Los hilos más activos han estado en no veo el portal desde los pc's de la red

Más activos


UserTotalPosts
jmaldonadom 1101
anonymous 798
javier 488
Faco 395
hiunkeru 184
vitolo 182
Guillaume 168
ccolonia 159
dormio 157
elijo_otroo 138
sonsai 84
Dreamvk 67
tirillos 48
vte_torres 47
oskr226 46

Últimos Mensajes...