1 Introducción En la actualidad en las grandes empresas podemos encontrar un DBA (Administrador de Bases de Datos) el cual cuenta con las herramientas y conocimientos para una correcta administración del motor de base implementada en su respectiva organización y bajo la cual se encuentran desarrolladas sus aplicaciones. Pero en las pequeñas y medianas empresas no existe una persona especializada en Bases de Datos, sino que muchas de las veces existen una o varias personas que realizan múltiples tareas dentro del Departamento de Sistemas, y ello concurre a que no se pueda obtener un excelente rendimiento de la Dase de Datos que se administre, realizándose simplemente tareas básicas y elementales aprendidas en las aulas de la universidad o leídas en un libro al momento de cursar la materia de Bases de Datos. También se da que un DBA, siempre que ocurra algún problema con la Base de datos, ya sea por respaldo o restauración de datos, este deba conectarse a través de alguna herramientas de acceso remoto como son: Teamviewer, LogMeIn, Real VNC y otros, para poder dar asistencia en las eventualidades ocurridas cuando él no se encuentra en el lugar de los hechos, siempre y cuando ambos equipos que existen en los extremos del acceso remoto cuenten con la herramienta instalada localmente. Es allí que surge el inconveniente en caso de no se cuente con los medios para el acceso remoto, que el DBA o profesional de Sistemas, deba trasladarse personalmente al lugar de los hechos. 2 Capítulo I MANUAL TECNICO 3 Introducción El propósito de todo manual técnico es proporcionar la información necesaria y suficiente, para guiar al profesional del área de Sistemas, tanto el Analista como el Programador, para su revisión y conocimientos de cómo fue analizado, diseñado y programado este prototipo de aplicación y poder en cualquier momento poder realizar una actualización a partir de la información contenida, y así adaptarla mas a los requerimientos de la empresa que implemente esta aplicación. Adicionalmente, se describe detalladamente las características físicas y técnicas de cada elemento que se utiliza en esta aplicación. 4 Diagrama General del Flujo del Sistema Aquí se representa de manera gráfica el flujo de datos a través del sistema de información. También se puede visualizar el procesamiento de datos de manera simplificada o detallada. Realizar este tipo de diagramas es muy común entre los diseñadores, ya que con ello dibujan un contexto a nivel de diagramas, en el que primero muestra la interacción entre el sistema y las entidades externas. Gráfico No. 1. Diagrama de Flujo del Sistema. PC - Cuenta de Correo Celular Elaborado: Alberto C. Arreaga C. Fuente: Diseño del prototipo de la aplicación. Base de Datos 1 Aplicación Base de Datos 2 5 Diagrama de Flujo de Datos Gráfico No. 2. Diagrama de Flujo de Datos. Envío de correo ¿Existe cuenta de correo? NO Ignorar el contenido del SI ¿Esta correcto Usuario y Contraseña? NO Emitir mensaje de usuario y contraseña inválidas SI Revisión Contenido de correo ¿Existe Palabra Reservada? NO No ejecuta tarea alguna SI Ejecuta la tarea correspondiente ¿Tarea Realizada? NO Envía mensaje de error de la tarea SI Confirmación del estado de la ejecución de la tarea Envío de mensaje al correo a la cuenta Elaborado: Alberto C. Arreaga C. Fuente: Diseño del prototipo de la aplicación. 6 Diagrama de Casos de Usos Configuración Este proceso consiste en la configuración inicial de los parámetros o variables para el desenvolvimiento de la aplicación. Este es uno de los escenarios más importantes ya que si los parámetros no está completamente correctos y registrados, el proceso de lectura de correo y ejecución de las tareas de respaldo y/o restauración, no lograrán los objetivos esperados. Gráfico No. 3. Caso de Uso de Configuración. Configuración de parámetros iniciales Elaboración: Alberto Arreaga C. Fuente: Diseño del prototipo de la aplicación. 7 Envío de correo Este proceso consiste en el envío del mensaje del correo en el formato establecido, desde la cuenta de correo permitida para el procesamiento de la tarea. Este escenario consiste en que el administrador envíe sus solicitudes a través de la cuenta de correo, conforme el formato de la tarea a realizar que se definió. Gráfico No. 4. Caso de Uso de Envío de Correo. Envió de correo a la cuenta Elaboración: Alberto Arreaga C. Fuente: Diseño del prototipo de la aplicación. 8 Recepción de correo Este proceso consiste en la lectura de los correos desde la cuenta de la aplicación y que procesará los mensajes recibidos de la cuenta permitida, revisar el contenido del mensaje y el posterior procesamiento de la respectiva tarea. Gráfico No. 5. Caso de Uso de Recepción de Correo. Lectura de correo desde la cuenta Revisión del cuerpo del mensaje Elaborado: Alberto C. Arreaga C. Fuente: Diseño del prototipo de la aplicación. Envío de la tarea de ejecución a la base de datos 9 Ejecución de tareas Este proceso se encarga de la ejecución de la tarea de respaldo o restauración, de la base, una vez que ha cumplido todas las exigencias para su final procesamiento. En este escenario empieza una vez que ha sido comprobado el formato de tarea, pasa a realizar la correspondiente tarea solicitada, ya sea esta la de realizar un respaldo de la base o restaurar una base de datos. Gráfico No. 6. Casos de Uso de Ejecución de tareas. Ejecución de tareas de Respaldo Elaboración: Alberto Arreaga C. Fuente: Diseño del prototipo de la aplicación. 10 Descripción de los Escenarios Configuración de la aplicación Tabla No. 1. Escenario de Configuración correcta. Nombre 1.1.- Configuración de la aplicación Configurar parámetros de la aplicación Objetivo El administrador del sistema deberá parametrizar variables iniciales para la Descripción ejecución de la aplicación. • Configurar la cuenta de correo a la que se envía las respuestas. Datos • La misma cuenta servirá para leer las instrucciones a realizar. específicos • Configuración de las bases sobre las cuales se ejecutaran tareas de respaldos. Intervalo Sólo presente. Estabilidad Alta El desenvolvimiento de la aplicación depende de la correcta configuración Comentario de los parámetros iniciales. Elaboración: Alberto C. Arreaga C. Fuente: Etapa de diseño de la aplicación. 11 Configuración de la aplicación Incorrecta Tabla No. 2. Escenario de Configuración Incorrecta. Nombre 1.2.- Configuración de la aplicación Incorrecta. Configurar parámetros incorrectos de la aplicación. Objetivo En el caso de que el administrador del sistema parametrice las variables Descripción iniciales erroneamente, la ejecución de la aplicación no será confiable al momento de realizar las tareas de respaldos. Datos • Configurar la cuenta de correo equivocada o mal descrita. • Mala descripción del nombre del Servidor de Datos. • Mala elección de las bases sobre las cuales se ejecutaran tareas de específicos respaldos. • Mala asignación de usuario y clave para que pueda ejecutar las tareas de respaldo vía correo electrónico. Intervalo Sólo presente. Estabilidad Alta El desenvolvimiento de la aplicación depende de la correcta configuración Comentario de los parámetros iniciales. Elaboración: Alberto C. Arreaga C. Fuente: Etapa de diseño de la aplicación. 12 Envío de Correo Tabla No. 3. Caso de uso del Envío de correo. Nombre 2.1.- Envío de Correo Envío del correo con una determinada instrucción para la generación Objetivo de los respaldos de la base. Descripción El envío del correo deberá incluir una palabra clave dentro del cuerpo del mensaje, la cual será procesa para luego ser enviada la instrucción de ejecución sobre los respaldos. Datos • Envío del correo por parte del DBA. específicos • Dentro del correo se enviará una palabra clave para la ejecución de la tarea. • Esperar la confirmación de la recepción y ejecución de la tarea. Intervalo Sólo presente. Estabilidad Alta Comentario Se deberá tener en cuenta las palabras reservadas para el lenguaje SQL, que son conocidas por un DBA. Elaboración: Alberto C. Arreaga C. Fuente: Etapa de diseño de la aplicación. 13 Recepción de Correo Válido Tabla No. 4. Caso de uso de la recepción. Nombre 3.1.- Recepción de Correo Válido Leer el correo desde una cuenta determinda en la configuración de los Objetivo parámetros iniciales. Descripción Recibir el correo de una cuenta determinada, procesar el contenido del mensaje para evaluar la palabra reservada que dará paso a la ejecución de una tarea de respaldo. Datos • Lectura del mensaje desde la aplicación. específicos • Procesar el contenido del mensaje. • Envío de la instrucción para la ejecución de la respectiva tarea de respaldo. Intervalo Sólo presente. Estabilidad Alta Comentario Una vez que se procesa el contenido del mensaje se dará paso a la ejecución de la tarea de respaldo. Elaboración: Alberto C. Arreaga C. Fuente: Etapa de diseño de la aplicación. 14 Lectura de Correo con mensaje invalido Tabla No. 5. Caso de uso lectura de correo. Nombre 3.2- Lectura de Correo con mensaje invalido Leer el contenido del correo de la cuenta con un mensaje que no Objetivo va a realizar tarea alguna. Descripción Al recibir el correo con el contenido del mensaje no válido para la ejecución de alguna tarea de respaldo, se ignorará el mensaje. Datos • Revisar el contenido del mensaje. específicos • Comprobar la existencia de palabras reservadas. • Ignorar el correo. Intervalo Sólo presente. Estabilidad Alta Comentario No se enviará ninguna respuesta ya que al no existir las palabras reservadas para la ejecución de tareas no se debe notificar. Elaboración: Alberto C. Arreaga C. Fuente: Etapa de diseño de la aplicación. 15 Ejecución de Tareas sin error Tabla No. 6. Caso de Uso de ejecución de tarea. Nombre 4.1.- Ejecución de Tareas sin error Ejecutar la correspondiente tarea de respaldo, según el contenido Objetivo del mensaje leído. Descripción Ejecutar la tarea de respaldo sobre el motor de la base de datos. Datos específicos • Ejecución de los respaldos de datos como: • Respaldos completos. • Respaldos diferenciales. • Respaldos del archivo log. • Respaldos de los Archivos de datos y Grupos de datos Intervalo Sólo presente. Estabilidad Alta Una vez procesada la tarea de respaldo se enviará un correo de Comentario confirmación de la tarea, caso contrario el estado de la ejecución de la tarea. Elaboración: Alberto C. Arreaga C. Fuente: Etapa de diseño de la aplicación. 16 Ejecución de Tareas con error Tabla No. 7. Caso de uso al ejecutar una tarea con error Nombre 4.2.- Ejecución de Tareas con error Confirmar la no ejecución de la tarea por error en el proceso, Objetivo según sea el caso. Descripción Se ejecuta un mensaje de error desde la Base de Datos. Datos • Ejecutar el servicio de mensaje desde SQL Server. • Envío de mensaje descriptivo sobre el error producido al específicos ejecutar la tarea. • Guardar una bitácora del error ocurrido. Intervalo Sólo presente. Estabilidad Alta Una vez procesada la ejecución de la tarea y esta no se pueda Comentario realizar, se enviará un mensaje de correo sobre dicha tarea no realizada. Elaborado: Alberto C. Arreaga C. Fuente: Etapa de diseño de la aplicación. 17 Diagrama de Objetos Ejecutar la Tarea de Respaldo o Restauración Gráfico No. 7. DIO Ejecución de tarea. Conexión Comprobar conexión con la base Elaborado: Alberto C. Arreaga C. Fuente: Diseño del prototipo de la aplicación. Mail Leer y comprobar la cuenta Respaldos Verificar y ejecutar tarea de respaldo 18 Conexión con la Base de Datos Gráfico No. 8. DIO de conexión con la Base de Datos. Conexión Mail Comprobar conexión con la base No existe comunicación con Servidor de Datos Elaborado: Alberto C. Arreaga C. Fuente: Diseño del prototipo de la aplicación. Respaldos 19 Lectura de Mensajes de la Cuenta de Correo Gráfico No. 9. DIO de Lectura de mensaje. Conexión Comprobar conexión con la base Mail Respaldos Leer y comprobar la cuenta Ignorar lectura de mensaje Elaborado: Alberto C. Arreaga C. Fuente: Diseño del prototipo de la aplicación. 20 Envío de confirmación o Mensaje de Error Gráfico No. 10. DIO de Envío de mensaje. Conexión Comprobar conexión con la base Mail Leer y comprobar la cuenta Elaborado: Alberto C. Arreaga C. Fuente: Diseño del prototipo de la aplicación. Respaldos Verificar y ejecutar tarea de respaldo Envía mensaje de error en la ejecución de la tarea 21 Diagrama de Clases Clase para el Registro de las Variables La clase Registro está desarrollada para el acceso a los variables de registros que se necesitan tener guardadas para el buen desenvolvimiento de la aplicación. Esta clase no ayudará a poder obtener los datos en cualquier instancia en que se requiera el contenido del valor de cualquiera de las claves de la aplicación. Tabla No. 8. Clase Registro. DclsRegistro Tipo Func_ConsultarValor Público Func_CrearNuevaClave Público Func_EliminarClave Público Func_EliminarValor Público Func_EstablecerValor Público QueryValueEx Privado SetValueEx Privado GetRegErrorText Privado Elaborado: Alberto C. Arreaga C. Fuente: Clase DclsRegistro. 22 Clase para la Conexión con la Base de Datos La clase Conexión está desarrollada para crear la conexión hacia el Servidor de Base de Datos existente, así poder abrir y cerrar esta conexión en cualquier momento en que se vaya a ejecutar las tareas por la aplicación. Tabla No. 9. Clase Conexión. DclsConexion Tipo Func_ConexionServidorDB Público Proc_AbrirConexionDB Público Proc_CerrarConexion Público Errores Público sCadConexion Público adoConexion Público sNomServidorDB Público sNombreDB Público sUsuarioDB Público sContraseñaDB Público sTipoConexionDB Público Elaborado: Alberto C. Arreaga C. Fuente: Clase DclsConexion. 23 Clase para la Conexión con la Cuenta de Correo La clase OsPop3 es componente desarrollado por la empresa OstroSoft, con el objetivo de recuperar mensajes de correo electrónico mediante programación. Funciona para cuentas de correos con servidores POP3. Soporta correo electrónico seguro (TLS / SSL), correo electrónico (MIME) archivos adjuntos, correo HTML, cabeceras personalizadas, objetos incrustados. La versión utilizada es para Visual Basic 6.0. (Mas sobre este componente en el Anexo 1 de este Tomo II). Gráfico No. 11. Diagrama de la Clase OSPOP3. Header Attachmentt OsPOP3 Email Message Elaborado: Alberto C. Arreaga C. Fuente: http://www.ostrosoft.com/. MessageListEntry Session 24 Clases del OSPOP3 La clase Sesion es la de mayor jerarquía dentro del componente OSPOP3, con relación a las demás clases sque conforman el componente, ya que mantiene la conexión directa con el servidor de correo, a través de la cual se recupera las estadísticas del buzón de entrada de la cuenta de correo, así como también la lista de mensajes que los recupera y/o los elimina. Tabla No. 10. Clase Session. Session Métodos Tipo OpenPOP3 Público ClosePOP3 Público GetMessageList Público DeleteMessage Público GetMailboxSize Público GetMessage Público GetMessageCount Público GetMessageHeaders Público ResetSession Público State Público MailboxSize Público MessageCount Público DeleteMessage Público Elaborado: Alberto C. Arreaga C. Fuente: http://www.ostrosoft.com/POP3_component.asp 25 La clase Email se encarga del encabezado cada uno de los mensajes que llegan al buzón, es decir del nombre y dirección del correo de quien remite el mensaje y los destinatarios. Tabla No. 11. Clase Email. Email Métodos Tipo Name Público Address Público Elaborado: Alberto C. Arreaga C. Fuente: http://www.ostrosoft.com/POP3_component.asp La clase MessageListEntry contiene el tamaño del mensaje la posición del mensaje según la llegada al buzón y el código del mensaje, que identifican los mensajes dependiendo de su número ordinal del servidor de correo, es decir el UIDL. Tabla No. 12. Clase MessageListEntry. MessageListEntry Métodos Tipo UIDL Público ID Público Size Público Elaborado: Alberto C. Arreaga C. Fuente: http://www.ostrosoft.com/POP3_component.asp 26 La clase Header se encarga del encabezado del mensaje, su contenido y valor. Tabla No. 13. Clase Header. Header Métodos Tipo Name Público Values Público Elaborado: Alberto C. Arreaga C. Fuente: http://www.ostrosoft.com/POP3_component.asp La clase Message devuelve en sus 2 funciones el contenido una vez analizado el mensaje de correo electrónico. Tabla No. 14. Clase Message. Message Métodos Tipo Save Público Sender.Name Público Sender.Address Público Recipients Público RecipientsCC Público UIDL Público Headers Público Body Público Elaborado: Alberto C. Arreaga C. Fuente: http://www.ostrosoft.com/POP3_component.asp 27 La clase Attachment se encarga de recoger los datos acerca de los archivos adjuntos, nombre del archivo, el cuerpo, el tipo de archivo adjunto debido al intercambio de información a través del internet, es decir el MIME, el tipo de codificación de los datos adjuntos Tabla No. 15. Clase Attachment. Attachment Métodos Tipo Save Público AttachmentName Público Body Público Filename Público ContentType Público ContentTransferEncoding Público ContentDisposition Público Elaborado: Alberto C. Arreaga C. Fuente: http://www.ostrosoft.com/POP3_component.asp 28 Diccionario de Datos Un diccionario de datos es un conjunto de metadatos que contiene las características lógicas y puntuales de los datos que se van a utilizar en el sistema que se programa, incluyendo nombre, descripción, alias, contenido y organización. Identifica los procesos donde se emplean los datos y los sitios donde se necesita el acceso inmediato a la información, se desarrolla durante el análisis de flujo de datos y auxilia a los analistas que participan en la determinación de los requerimientos del sistema, su contenido también se emplea durante el diseño. En un diccionario de datos se encuentra la lista de todos los elementos que forman parte del flujo de datos de todo el sistema. Los elementos mas importantes son flujos de datos, almacenes de datos y procesos. El diccionario de datos guarda los detalles y descripción de todos estos elementos. 29 Tabla No. 16. Diccionario de Datos. Objeto Module ClassModule Project Form MDIForm Abrev. mod cls pry frm mdi Objeto Public Private Const Function Sub ClsRegistro ClsConexion String Integer Long Control Boolean Error Object Abrev. g l const Func Proc oClsR oClsC s i l c b err obj Elaborado: Alberto C. Arreaga C. Fuente:Herramienta Visual Basic 6.0. Objeto SmartMenuXP Toolbar XPButton Label StatusBar ListView Frame Skin Timer PictureBox TextBox SSTab ComboBox CheckBox Line CommandButton Abrev. smn tlb cmd lbl stb lvw fme skn tmr pbx txt sst cmb chk lne cmd 30 Procedimientos y Funciones Función Func_ConsultarValor Se encuentra dentro de la clase DclsRegistro. Recibe 3 parámetros, el nombre de la carpeta principal del Editor de Registro (HKEY_CURRENT_USER), el directorio o ruta donde se encuentra el conjunto de valores de la clave (Software\TesisGrado\Proyecto2010), dentro de esta clave se encuentran las subclaves (Conexión, Correo, Parametro, Respaldo, Seguridad), y por último el nombre del valor. Devuelve el contenido o información del valor de la clave que se solicita. Public Function Func_ConsultarValor(lClave As Long, sNombre_Clave As _ String, sNombre_valor As String) Dim lHandle_Clave As Long Dim vValor As Variant Dim lRet As Long lRet = RegOpenKeyEx(lClave, sNombre_Clave, 0, KEY_ALL_ACCESS, lHandle_Clave) lRet = QueryValueEx(lHandle_Clave, sNombre_valor, vValor) ConsultarValor = Mid(Trim(vValor), 1, Len(vValor) - 1) RegCloseKey (lHandle_Clave) End Function 31 Función Func_ EstablecerValor Se encuentra dentro de la clase DclsRegistro. Recibe 5 parámetros, el nombre de la carpeta principal del Editor de Registro (HKEY_CURRENT_USER), el directorio o ruta donde se encuentra el conjunto de valores de la clave (Software\TesisGrado\Proyecto2010), dentro de esta clave se encuentran las subclaves (Conexión, Correo, Parametro, Respaldo, Seguridad), el nombre del valor, el contenido o información a guardar en el valor, y el tipo de valor (Alfanumérico, Binario, DWord, Cadena múltiple). Establece un valor en el contenido o información del valor de la clave que se envía. Public Function EstablecerValor(lClave As Long, sNombre_Clave As String, _ sNombre_Valor As String, vEl_Valor As Variant, lTipo_Valor As Long) Dim lRet As Long Dim lHandle_Clave As Long lRet = RegOpenKeyEx(lClave, sNombre_Clave, 0, KEY_ALL_ACCESS, lHandle_Clave) lRet = SetValueEx(lHandle_Clave, sNombre_Valor, lTipo_Valor, vEl_Valor) RegCloseKey (lHandle_Clave) End Function 32 Función Func_ CrearNuevaClave Se encuentra dentro de la clase DclsRegistro. Recibe 2 parámetros, el nombre de la carpeta principal del Editor de Registro (HKEY_CURRENT_USER), el directorio o ruta donde se grabará la clave (Software\TesisGrado\Proyecto2010), mas el nombre de la subclave (Conexión, Correo, Parametro, Respaldo, Seguridad). Crea la subclave que se envía. Public Function CrearNuevaClave(lClave As Long, sNombre_Clave As String) Dim sHandle_Clave As Long Dim sRet As Long sRet = RegCreateKeyEx(lClave, sNombre_Clave, 0&, vbNullString, _ REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, _ sHandle_Clave, sRet) RegCloseKey (sHandle_Clave) End Function 33 Función Func_ConexionServidorDB Se encuentra dentro de la clase DclsConexion. En esta función se realiza el puente de conexión hacia la base de datos dependiendo de la autenticación (Autenticación Windows o Autenticación SQL) que se registro en la configuración de las variables. Public Function Func_ConexionServidorDB() As Boolean On Error GoTo fin sCadConexion = "" If sTipoConexionDB = "SQLS" Then sCadConexion = sCadConexion & "Provider=SQLOLEDB.1;" sCadConexion = sCadConexion & "Data Source=" & sNomServidorDB & ";" sCadConexion = sCadConexion & "User ID =" & sUsuarioDB & ";" sCadConexion = sCadConexion & "Password=" & sContraseñaDB & ";" sCadConexion = sCadConexion & "DataBase=" & sNombreDB ElseIf sTipoConexionDB = "WIND" Then sCadConexion = sCadConexion & "Provider=SQLOLEDB.1;" sCadConexion = sCadConexion & "Data Source=" & sNomServidorDB & ";" sCadConexion = sCadConexion & "User ID =;" sCadConexion = sCadConexion & "Password=;" sCadConexion = sCadConexion & "DataBase=" & sNombreDB End If 34 sCadConexion = sCadConexion & "DataBase=" & sNombreDB End If Set adoConexion = New ADODB.Connection adoConexion.ConnectionString = sCadConexion adoConexion.ConnectionTimeout = 0 adoConexion.CommandTimeout = 0 adoConexion.Open Func_ConexionServidorDB = True Exit Function fin: msgERROR = msgERROR + " " + Err.Description Func_ConexionServidorDB = False End Function Procedimiento Proc_AbrirConexionDB Se encuentra dentro de la clase DclsConexion. En esta función sirve para abrir la conexión una vez que se armó la cadena de conexión. 35 Public Sub Proc_AbrirConexionDB() On Error GoTo fin adoConexion.ConnectionString = sCadConexion adoConexion.Open adoConexion.ConnectionString, "", "" Exit Sub fin: msgERROR = msgERROR + " " + Err.Description End Sub Procedimiento Proc_CerrarConexion Se encuentra dentro de la clase DclsConexion. En esta función sirve para cerrar la conexión una vez que se haiga realizados las sentencias con la base de datos. Public Sub Proc_CerrarConexion() On Error GoTo fin adoConexion.Close Exit Sub fin: msgERROR = msgERROR + " " + Err.Description End Sub 36 Función Func_ConsultaParametros Se encuentra dentro del Proyecto pryCorreo. Recibe 2 parámetros: el número de la posición subclave, y el nombre del valor o entrada de registro a consulta. Devuelve el contenido o información del valor a consulta. Public Function fg_ConsultaParametros(sNumClave As Integer, _ sValor As String) As String fg_ConsultaParametros = "" Select Case sNumClave Case 1: sClave = "": sClave = const_Clave1 Case 2: sClave = "": sClave = const_Clave2 Case 3: sClave = "": sClave = const_Clave3 Case 4: sClave = "": sClave = const_Clave4 Case 5: sClave = "": sClave = const_Clave5 End Select fg_ConsultaParametros = Trim(oclsRegistro.ConsultarValor _ (HKEY_CURRENT_USER, const_Directorio + sClave, sValor)) End Function 37 Función Func_ GrabarParametros Se encuentra dentro del Proyecto pryCorreo. Recibe 3 parámetros: el número de la posición subclave, el nombre del valor o entrada de registro a consulta y el contenido o información del valor. Devuelve un valor verdadero sí la acción es registrada correctamente. Public Function fg_GrabarParametros(sNumClave As Integer, _ sValor As String, sDatoValor As String) As Boolean Dim sClave As String Select Case sNumClave Case 1: sClave = "": sClave = const_Clave1 Case 2: sClave = "": sClave = const_Clave2 Case 3: sClave = "": sClave = const_Clave3 Case 4: sClave = "": sClave = const_Clave4 Case 5: sClave = "": sClave = const_Clave4 End Select Call oclsRegistro.CrearNuevaClave(HKEY_CURRENT_USER, _ const_Directorio + sClave) Call oclsRegistro.EstablecerValor(HKEY_CURRENT_USER, _ const_Directorio + sClave, sValor, sDatoValor, REG_SZ) End Function 38 Función Func_ ExtraeCadena Se encuentra dentro del Proyecto pryCorreo. Recibe 3 parámetros: la cadena en que se buscara un determinado valor o dato entre los símbolos, carácter o símbolo inicial que hace de limite, carácter o símbolo final que hace de límite. Devuelve un valor verdadero sí la acción es registrada correctamente. Public Function fg_ExtraeCadena(sCadena As String, _ sCaracterIni As String, sCaracterFin As String) Dim iPosicionIni As Integer Dim iPosicionFin As Integer fg_ExtraeCadena = "" iPosicionIni = InStr(1, sCadena, sCaracterIni) iPosicionFin = InStr(1, sCadena, sCaracterFin) If iPosicionIni > 0 And iPosicionFin > 0 Then fg_ExtraeCadena = Mid(sCadena, iPosicionIni + 1, _ iPosicionFin - iPosicionIni - 1) End If End Function 39 Función Func_Validar_Correo Se encuentra dentro del Proyecto pryCorreo. Recibe 1 parámetros: la cuenta de correo electrónico. Devuelve un valor verdadero sí el formato de la cuenta es correcta. Public Function Func_Validar_Correo(ByVal Email As String) As Boolean Dim strTmp As String Dim n As Long Dim sEXT As String MensajeError = "" Func_Validar_Correo = True sEXT = Email Do While InStr(1, sEXT, ".") <> 0 sEXT = Right(sEXT, Len(sEXT) - InStr(1, sEXT, ".")) Loop If Email = "" Then Func_Validar_Correo = False MensajeError = MensajeError & "No se indicó ninguna dirección" _ & " de " & "mail para verificar!" & vbNewLine ElseIf InStr(1, Email, "@") = 0 Then Func_Validar_Correo = False MensajeError = MensajeError & "La dirección de email con " _ & "contiene el signo @" & vbNewLine 40 ElseIf InStr(1, Email, "@") = 1 Then Func_Validar_Correo = False MensajeError = MensajeError & "El @ No puede estar al " _ & " principio" & vbNewLine ElseIf InStr(1, Email, "@") = Len(Email) Then Func_Validar_Correo = False MensajeError = MensajeError & "El @ no puede estar al final" _ & " de la dirección" & vbNewLine ElseIf Func_Valida_Extension(sEXT) = False Then Func_Validar_Correo = False MensajeError = MensajeError & "LA dirección no tiene un " _ & "dominio válido, " MensajeError = MensajeError & "por ejemplo : " & vbNewLine MensajeError = MensajeError & ".com, .net, .gov, .org, .edu, " _ & ".biz, .tv etc.. " & vbNewLine ElseIf Len(Email) < 6 Then Func_Validar_Correo = False MensajeError = MensajeError & "La dirección no puede ser " _ & "menor a 6 caracteres." & vbNewLine End If strTmp = Email 41 Do While InStr(1, strTmp, "@") <> 0 n=1 strTmp = Right(strTmp, Len(strTmp) - InStr(1, strTmp, "@")) Loop If n > 1 Then Func_Validar_Correo = False MensajeError = MensajeError & "Solo puede haber un @ en " _ & "la dirección de email" & vbNewLine End If Dim pos As Integer pos = InStr(1, Email, "@") If Mid(Email, pos + 1, 1) = "." Then Func_Validar_Correo = False MensajeError = MensajeError & "El punto no puede estar " _ & "seguido del @" & vbNewLine End If If MensajeError <> "" Then MsgBox MensajeError, vbCritical End If End Function 42 Función Func_Ultimas_Claves Se encuentra dentro del Proyecto pryCorreo. Esta función es llamada al momento de realizar el cambio de contraseña, verifica si la nueva contraseña está entre las últimas 5 anteriores contraseñas utilizadas. Recibe 1 parámetro: la nueva contraseña que se va a cambiar. Devuelve un valor verdadero en caso de existir la clave entre las últimas 5 anteriormente usadas. Public Function Func_Ultimas_Claves(sClaveNueva As String) _ As Boolean Dim iIndice As Integer Dim sClaveAnte As String Dim sVariable As String Func_Ultimas_Claves = False iIndice = 5 sClaveNueva = fg_CifrarCaracter(Trim(sClaveNueva), _ sCaracterClave, True) For iIndice = 1 To iIndice sVariable = "Contraseña0" & CStr(iIndice) sClaveAnte = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave5, sVariable)) 43 sClaveAnte = fg_CifrarCaracter(Trim(sClaveAnte), _ sCaracterClave, True) If sClaveAnte = sClaveNueva And sClaveAnte <> "" Then Func_Ultimas_Claves = True Exit Function End If Next iIndice End Function Procedimiento Proc_Registro_Hitorial_Clave Se encuentra dentro del Proyecto pryCorreo. Este procedimiento es llamada al momento de que se realiza el cambio de contraseña, guarda el historial moviendo de posición las anteriores contraseñas. Recibe la nueva clave. Public Sub Proc_Registro_Hitorial_Clave(sClaveNueva As String) Dim iIndice As Integer Dim sVariableAnte As String Dim sVariableDesp As String Dim sClaveAnte As String For iIndice = 4 To 1 Step -1 44 sVariableAnte = "Contraseña0" & CStr(iIndice) sVariableDesp = "Contraseña0" & CStr(iIndice + 1) sClaveAnte = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave5, sVariableAnte)) Call oclsRegistro.CrearNuevaClave(HKEY_CURRENT_USER, _ const_Directorio + const_Clave5) Call oclsRegistro.EstablecerValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave5, sVariableDesp, sClaveAnte, REG_SZ) Next iIndice Call oclsRegistro.CrearNuevaClave(HKEY_CURRENT_USER, _ const_Directorio + const_Clave5) sClaveNueva = modFuncionesVarias.fg_CifrarCaracter(sClaveNueva, _ sCaracterClave, False) Call oclsRegistro.EstablecerValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave5, "Contraseña01", sClaveNueva, _ REG_SZ) End Sub 45 Función Func_AvisoCambioClave Se encuentra dentro del Proyecto pryCorreo. Esta función es llamada cuando la clave del usuario está por caducar, dando aviso los n días que tiene para que pueda cambiar la clave. Public Function Func_AvisoCambioClave() Dim sFechaActual As String Dim sFechaCambio As String Dim sFechaAviso As String Dim nDiasExpira As Integer Dim nDiasVigencia As String Dim nDiasPorcAviso As String sFechaActual = Format(Date, "yyyy/mm/dd") nDiasVigencia = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave5, "DiasVigencia")) sFechaCambio = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave5, "FechaCambio")) sFechaAviso = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave5, "FechaAviso")) 46 nDiasExpira = DateDiff("d", sFechaCambio, sFechaActual) + 1 nDiasPorcAviso = nDiasVigencia * 0.5 nDias = nDiasVigencia - nDiasExpira If nDiasExpira > nDiasPorcAviso Then If sFechaAviso <> sFechaActual Then MsgBox "La Contraseña caduca dentro de " & CStr(nDias) _ & " Días", vbCritical, "SISTEMAS" Call oclsRegistro.CrearNuevaClave(HKEY_CURRENT_USER, _ const_Directorio + const_Clave5) Call oclsRegistro.EstablecerValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave5, "FechaAviso", sFechaActual, _ REG_SZ) End If End If End Function 47 Función Func_EnvioCorreo Se encuentra dentro del Proyecto pryCorreo. Esta función es llamada cuando se envía la respuesta a la cuenta de correo sobre la petición solicitada a realizar en la base de datos. Recibe 2 parámetros: el mensaje que se enviará, y el nombre del archivo adjunto, este parámetro es opcional. Public Sub Func_EnvioCorreo(sMensaje As String, _ Optional sArchivoAdjunto As String = "") Dim sFecha As String Dim sHora As String sFecha = Format(Date, "yyyymmdd") sHora = Format(Time, "hhMM") Screen.MousePointer = vbHourglass With frmSession.sendmail1 .SMTPHostValidacion = VALIDATE_HOST_NONE .ValidarEmail = VALIDATE_SYNTAX .Delimitador = ";" .FromDisplayName = "Aplicativo Respaldos " & sFecha & "-" & sHora .Remitente = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave2, "CorreoAdm")) 'txtFrom.Text .SMTPHost = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave2, "ServidorCCS")) 'txtServer.Text 48 .Destinatario = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave3, "CuentaDBA")) 'txtTo.Text .Asunto = "Respuesta a su Requerimiento" 'txtSubject.Text .Mensaje = sMensaje 'txtMsg.Text If sArchivoAdjunto <> "" Then .Adjunto = sArchivoAdjunto Else .Adjunto = "" End If .Prioridad = Baja .UsarLoginSMTP = True .Usuario = "proyecto.mnas" 'txtUserName Dim sCadena As String sCadena = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave2, "ContraseñaAdm")) 'txtPassword .Password = fg_CifrarCaracter(sCadena, sCaracterClave, True) .Codificacion = MIME_ENCODE .EnviarEmail End With Screen.MousePointer = vbDefault End Sub 49 Función Func_ProcesaCorreo Se encuentra dentro del Proyecto pryCorreo. Esta función es llamada cuando se va a procesar todo el contenido mensaje desde la bandeja de entrada, se encarga de que el mensaje tenga un mensaje. Public Function Func_ProcesaCorreo() Dim m As OSPOP3.Message Dim h As OSPOP3.Header Dim s Dim nd As Node Dim e As OSPOP3.Email Dim a As OSPOP3.Attachment Dim iCount As Integer Dim i As Integer Dim j As Integer On Error GoTo err_handler With frmSession .tvw.Nodes.Clear i = .lvwMessages.SelectedItem.Text 50 If .bHeadersOnly Then Set m = frmSession.oSession.GetMessageHeaders(i) Else Set m = frmSession.oSession.GetMessage(i) End If .tvw.Nodes.Add , , "m" & i, "message " & i .tvw.Nodes.Add "m" & i, tvwChild, "m" & i & "from", "from" .tvw.Nodes.Add "m" & i & "from", tvwChild, , "name: " _ & m.Sender.Name .tvw.Nodes.Add "m" & i & "from", tvwChild, , "address: " _ & m.Sender.Address .tvw.Nodes.Add "m" & i, tvwChild, "m" & i & "to", "to" For Each e In m.Recipients Set nd = .tvw.Nodes.Add("m" & i & "to", tvwChild, , "recipient") .tvw.Nodes.Add nd.Index, tvwChild, , "name: " & e.Name .tvw.Nodes.Add nd.Index, tvwChild, , "address: " & e.Address Next .tvw.Nodes.Add "m" & i, tvwChild, "m" & i & "cc", "cc" For Each e In m.RecipientsCC Set nd = tvw.Nodes.Add("m" & i & "cc", tvwChild, , "recipient") .tvw.Nodes.Add nd.Index, tvwChild, , "name: " & e.Name .tvw.Nodes.Add nd.Index, tvwChild, , "address: " & e.Address 51 Next .tvw.Nodes.Add "m" & i, tvwChild, "m" & i & "subject", "subject" .tvw.Nodes.Add "m" & i & "subject", tvwChild, , m.Subject .tvw.Nodes.Add "m" & i, tvwChild, "m" & i & "date", "date" .tvw.Nodes.Add "m" & i & "date", tvwChild, , m.DateSent .tvw.Nodes.Add "m" & i, tvwChild, "m" & i & "ContentType", _ "Content-Type" .tvw.Nodes.Add "m" & i & "ContentType", tvwChild, , m.ContentType .tvw.Nodes.Add "m" & i, tvwChild, "m" & i & "ContentTransferEncoding", _ "Content-Transfer-Encoding" .tvw.Nodes.Add "m" & i & "ContentTransferEncoding", tvwChild, _ , m.ContentTransferEncoding .tvw.Nodes.Add "m" & i, tvwChild, "m" & i & "char", "Charset" .tvw.Nodes.Add "m" & i & "char", tvwChild, , m.Charset .tvw.Nodes.Add "m" & i, tvwChild, "m" & i & "UIDL", "UIDL" .tvw.Nodes.Add "m" & i & "UIDL", tvwChild, , m.UIDL .tvw.Nodes.Add "m" & i, tvwChild, "m" & i & "h", "headers" For Each h In m.Headers .tvw.Nodes.Add "m" & i & "h", tvwChild, "m" & i & h.Name, h.Name For Each s In h.Values .tvw.Nodes.Add "m" & i & h.Name, tvwChild, , s Next 52 Next If Not .bHeadersOnly Then .tvw.Nodes.Add "m" & i, tvwChild, "m" & i & "body", "body" tvw.Nodes.Add "m" & i & "body", tvwChild, , m.Body If Func_ProcesaMensaje(m.Body) Then MsgBox "mensaje correcto", vbInformation, "Mensaje Sistemas" Else MsgBox "mensaje incorrecto", vbInformation, "Mensaje Sistemas" End If End If End With err_handler: If Err.Number <> 0 Then MsgBox "Error " & Err.Number & ": " & Err.Description End Function Función Func_ProcesaMensaje Se encuentra dentro del Proyecto pryCorreo. Esta función es llamada cuando se va a procesar el mensaje del correo leído, se encarga de procesar la tarea contenida en el cuerpo del mensaje. Es aquí donde dependiendo de la tarea y de la seguiradad de dicho mensaje, se conecta a la base para ejecutar la correspondiente tarea enviada. 53 Public Function Func_ProcesaMensaje(sMensaje As String) As Boolean Dim sCadena As String Dim sCadenaPermiso As String Dim sNombreRespaldo As String Dim sCadenaBase As String Dim sCadenaTarea As String Dim sCadenaArchivo As String Dim sCadenaArchivo2 As String Dim sCadenaModo As String Dim sCadenaFecha As String Dim sTipoConsulta As String Dim adoRcdset As New ADODB.Recordset On Error GoTo eMensaje Dim sqlQuery As String Dim sMensajeErr As String Dim sDirRespaldo As String Dim sArchivo As String Dim sPosCaracter As Integer Dim sUsuarioPermiso As String Dim sContraseñaPermiso As String Dim sCadenaTipoFrecuncia As String Dim sCadenaIntervaloFrecuencia As String 54 Dim sCadenaTipoSubFrecuencia As String Dim sCadenaIntervaloSubFrecuencia As String Dim sCadenaFechaDesde As String Dim sCadenaFechaHasta As String Dim sCadenaHoraDesde As String Dim sCadenaHoraHasta As String sTipoConsulta = "" Func_ProcesaMensaje = False If sMensaje = "" Then Exit Function Func_ProcesaMensaje = False sMensajeCorreo = Trim(UCase(sMensaje)) sMensajeCorreo = Trim(Replace(sMensajeCorreo, Chr(13), Chr(32), _ 1, -1, vbTextCompare)) sMensajeCorreo = Trim(Replace(sMensajeCorreo, Chr(10), Chr(32), _ 1, -1, vbTextCompare)) sCadenaPermiso = Func_ExtraeBloque("Usuario", ":", ".") If sCadenaPermiso <> "" Then sPosCaracter = InStr(1, sCadenaPermiso, sCaracterClave, _ vbTextCompare) sUsuarioPermiso = Mid(sCadenaPermiso, 1, sPosCaracter - 1) sContraseñaPermiso = Mid(sCadenaPermiso, sPosCaracter + 1, _ Len(sCadenaPermiso)) 55 Else sPosCaracter = 0 sUsuarioPermiso = "" sContraseñaPermiso = "" End If Dim sUsuario As String Dim sClave As String sUsuario = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave3, "UsuarioApl")) sClave = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave3, "ContraseñaApl")) sClave = fg_CifrarCaracter(sClave, sCaracterClave, True) If sUsuarioPermiso = UCase(sUsuario) And _ sContraseñaPermiso = sClave Then sCadenaBase = Func_ExtraeBloque("BASE", ":", ".") If sCadenaBase = "" Then GoTo eMensaje sCadenaTarea = Func_ExtraeBloque("TAREA", ":", ".") If sCadenaTarea = "" Then GoTo eMensaje sCadenaModo = Func_ExtraeBloque("MODO", ":", ".") If sCadenaModo = "" And sCadenaTarea <> "LISTARESPALDO" _ Then GoTo eMensaje sCadenaArchivo = Func_ExtraeBloque("Archivo", ":", ".") 56 sCadenaArchivo2 = Func_ExtraeBloque("Archivo", ":", ".") If sCadenaArchivo = "" And sCadenaArchivo2 = "" And _ sCadenaModo = "RESTAURAR" Then GoTo eMensaje sCadenaFecha = Func_ExtraeBloque("FECHA", ":", ".") If sCadenaFecha = "" And sCadenaTarea = "LISTARESPALDO" _ Then GoTo eMensaje sCadenaTipoFrecuncia = Func_ExtraeBloque("TipoFrecuencia", _ ":", ".") If sCadenaTipoFrecuncia = "" And sCadenaTarea <> _ "TAREAPROGRAMADA" Then GoTo eMensaje sCadenaIntervaloFrecuencia = Func_ExtraeBloque _ ("IntervaloFrecuencia", ":", ".") If sCadenaIntervaloFrecuencia = "" And sCadenaTarea <> _ "TAREAPROGRAMADA" Then GoTo eMensaje sCadenaTipoSubFrecuencia = Func_ExtraeBloque _ ("TipoSubFrecuencia", ":", ".") If sCadenaTipoSubFrecuencia = "" And sCadenaTarea <> _ "TAREAPROGRAMADA" Then GoTo eMensaje sCadenaIntervaloSubFrecuencia = Func_ExtraeBloque _ ("IntervaloSubFrecuencia", ":", ".") If sCadenaIntervaloSubFrecuencia = "" And sCadenaTarea <> _ "TAREAPROGRAMADA" Then GoTo eMensaje 57 sCadenaFechaDesde = Func_ExtraeBloque("FechDesde", ":", ".") If sCadenaFechaDesde = "" And sCadenaTarea <> "TAREAPROGRAMADA" _ Then GoTo eMensaje sCadenaFechaHasta = Func_ExtraeBloque("FechHasta", ":", ".") sCadenaHoraDesde = Func_ExtraeBloque("HoraDesde", ":", ".") If sCadenaHoraDesde = "" And sCadenaTarea <> "TAREAPROGRAMADA" _ Then GoTo eMensaje sCadenaHoraHasta = Func_ExtraeBloque("HoraHasta", ":", ".") Dim sContraseña As String oclsConexion.sNomServidorDB = Trim(oclsRegistro.ConsultarValor _ (HKEY_CURRENT_USER, const_Directorio + const_Clave1, _ "ServidorDB")) oclsConexion.sUsuarioDB = Trim(oclsRegistro.ConsultarValor _ (HKEY_CURRENT_USER, const_Directorio + const_Clave1, "UsuarioDB")) sContraseña = Trim(oclsRegistro.ConsultarValor _ (HKEY_CURRENT_USER, const_Directorio + const_Clave1, _ "ContraseñaDB")) oclsConexion.sContraseñaDB = fg_CifrarCaracter(sContraseña, _ sCaracterClave, True) oclsConexion.sTipoConexionDB = Trim(oclsRegistro.ConsultarValor _ (HKEY_CURRENT_USER, const_Directorio + const_Clave1, _ "TipoCuenta")) 58 Call oclsConexion.Func_ConexionServidorDB Dim sAnio As String Dim sMes As String Dim sDia As String Dim sHora As String Dim sMinutos As String Dim sFecha As String Dim sTiempo As String sFecha = Date sTiempo = Time sAnio = Format(Year(Date), "0000") sMes = Format(Month(Date), "00") sDia = Format(Day(Date), "00") sHora = Format(Hour(sTiempo), "00") sMinutos = Format(Minute(sTiempo), "00") sDirRespaldo = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave4, "RutaRespaldo")) sqlQuery = "" If sCadenaTarea = "LISTARESPALDO" Then sTipoConsulta = "RETORNA" sqlQuery = " sp_ReporteListadoRespaldos '" & sCadenaBase & _ "','" & sCadenaFecha & "' " 59 ElseIf sCadenaTarea = "RESPALDO" Then If sCadenaModo = "COMPLETO" Then sNombreRespaldo = sAnio + sMes + sDia sqlQuery = " sp_RespaldoCompleto '" & sCadenaBase & "','" & _ sDirRespaldo & "','" & sNombreRespaldo & "' " ElseIf sCadenaModo = "DIFERENCIAL" Then sNombreRespaldo = sAnio + sMes + sDia + sHora + sMinutos sqlQuery = " sp_RespaldoDiferencial '" & sCadenaBase & "','" _ & sDirRespaldo & "','" & sNombreRespaldo & "' " End If sTipoConsulta = "RETORNAD" ElseIf sCadenaTarea = "RESTAURAR" Then sArchivo = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave4, "RutaRespaldo")) If sCadenaModo = "COMPLETO" Then If Func_ValidaRespaldoExista(sArchivo, sCadenaArchivo + _ ".bak") Then sqlQuery = " sp_RestauracionCompleta '" & sCadenaBase & _ "','" & sDirRespaldo & "','" & sCadenaArchivo & "' " Else sCadena = "El archivo de respaldo no existe o no " _ & "se encuentra disponible en la ruta determinada" 60 sTipoConsulta = "ERRARCHIVO" End If ElseIf sCadenaModo = "COMPLETODIFERENCIAL" Then If Func_ValidaRespaldoExista(sArchivo, sCadenaArchivo + _ ".bak") And Func_ValidaRespaldoExista(sArchivo, _ sCadenaArchivo2 + ".bak") Then sqlQuery = " sp_RestauracionConDiferencial '" & _ sCadenaBase & "','" & sDirRespaldo & "','" & _ sCadenaArchivo & "','" & sCadenaArchivo2 & "'" Else sCadena = "El archivo(s) de respaldo no existen o no " _ & "se encuentran disponibles en la ruta determinada" sTipoConsulta = "ERRARCHIVO" End If End If ElseIf sCadenaTarea = "TAREAPROGRAMADA" Then If sCadenaFechaHasta = "" Then sCadenaFechaHasta = "9999/12/31" End If If sCadenaHoraHasta = "" Then sCadenaHoraHasta = "23-59-59" End If 61 sqlQuery = "" sqlQuery = " sp_CreacionTareaProgramada '" & sCadenaBase & _ "','" & sDirRespaldo & "','" & sNombreRespaldo & "'" sqlQuery = sqlQuery & ",'" & sCadenaFechaDesde & "','" & _ sCadenaFechaHasta & "','" & sCadenaHoraDesde & "','" & _ sCadenaHoraHasta & "'," sqlQuery = sqlQuery & CInt(sCadenaTipoFrecuncia) & "," & _ CInt(sCadenaIntervaloFrecuencia) & "," & CInt _ (sCadenaTipoSubFrecuencia) & "," & CInt _ (sCadenaIntervaloSubFrecuencia) & "" sTipoConsulta = "" ElseIf sCadenaTarea = "TAREAPROGDETENER" Then sCadenaFechaHasta = Format(Now, "yyyy/mm/dd") sCadenaHoraHasta = Format(Time, "HH:MM:SS") sqlQuery = "" sqlQuery = " sp_DetenerTareaProgramada '" & sCadenaModo & "','" _ & sCadenaFechaHasta & "','" & sCadenaHoraHasta & "'" sTipoConsulta = "" End If If sTipoConsulta = "" Then oclsConexion.adoConexion.Execute sqlQuery sCadena = "Ejecucion realizada correctamente: " & sqlQuery 62 sArchivo = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave3, "ArchivoAuditoria")) Call Proc_RegErroresArchivo(sCadena, sArchivo) Call Func_EnvioCorreo(sCadena) sCadena = "" sTipoConsulta = "" Func_ProcesaMensaje = True ElseIf sTipoConsulta = "RETORNAD" Then oclsConexion.adoConexion.Execute sqlQuery sCadena = "Ejecucion realizada correctamente: " & sqlQuery sArchivo = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave3, "ArchivoAuditoria")) Call Proc_RegErroresArchivo(sCadena, sArchivo) sCadena = "" sCadena = sCadenaBase & " - " & sCadenaBase & sNombreRespaldo _ & " - " & sCadenaModo Call Func_EnvioCorreo("Ejecucion realizada correctamente: " & _ Chr(13) & "Base-Nombre-Tipo" & Chr(13) & sCadena) sTipoConsulta = "" sArchivo = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave3, "ArchivoConsulta")) Call Proc_RegErroresArchivo(sCadena, sAnio + sMes + "-" + _ 63 sCadenaBase + sArchivo) sCadena = "" sTipoConsulta = "" Func_ProcesaMensaje = True ElseIf sTipoConsulta = "RETORNA" Then Set adoRcdset = oclsConexion.adoConexion.Execute(sqlQuery) sCadena = "Ejecucion realizada correctamente: " & sqlQuery sArchivo = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave3, "ArchivoAuditoria")) Call Proc_RegErroresArchivo(sCadena, sArchivo) sCadena = "" Dim sRutaArchivo As String sRutaArchivo = Trim(oclsRegistro.ConsultarValor _ (HKEY_CURRENT_USER, const_Directorio + const_Clave3, _ "RutaArchError")) + "\" + sAnio + sMes + "-" + sCadenaBase _ + Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave3, "ArchivoConsulta")) Call Func_EnvioCorreo("Ejecucion realizada correctamente", _ sRutaArchivo) sCadena = "" sTipoConsulta = "" Func_ProcesaMensaje = True 64 ElseIf sTipoConsulta = "ERRARCHIVO" Then sCadena = "Ejecucion no realizada: " & sCadena sArchivo = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave3, "ArchivoErrores")) Call Proc_RegErroresArchivo(sCadena, sArchivo) Call Func_EnvioCorreo(sCadena) sCadena = "" sTipoConsulta = "" Func_ProcesaMensaje = True End If oclsConexion.adoConexion.Close Call oclsRegistro.CrearNuevaClave(HKEY_CURRENT_USER, _ const_Directorio + const_Clave3) Call oclsRegistro.EstablecerValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave3, "UltimoCorreoLeido", sMsmUidl, _ REG_SZ) With frmSession .oSession.DeleteMessage .lvwMessages.SelectedItem.Text .lvwMessages.ListItems.Remove .lvwMessages.SelectedItem.Index End With Exit Function Else 65 sMensajeErr = "" sMensajeErr = sMensajeErr + ": No se puedo procesar mensaje: " + _ sMensaje sMensajeErr = sMensajeErr + ": No supero la validación de " & _ "seguridad: " sArchivo = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave3, "ArchivoErrores")) Call Proc_RegErroresArchivo(sMensajeErr, sArchivo) Call oclsRegistro.CrearNuevaClave(HKEY_CURRENT_USER, _ const_Directorio + const_Clave2) Call oclsRegistro.EstablecerValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave2, "UltimoCorreoLeido", _ sMsmUidl, REG_SZ) Exit Function End If sMensajeErr = "" sMensajeErr = sMensaje + ": Error al Ejecutar: " + sqlQuery sArchivo = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave3, "ArchivoErrores")) Call Proc_RegErroresArchivo(sMensajeErr, sArchivo) adoRcdset.Close Func_ProcesaMensaje = True 66 Exit Function eMensaje: Call Func_EnvioCorreo("Ejecucion no se realizo correctamente: " & _ sqlQuery) sMensajeErr = "" sMensajeErr = sMensaje & ": Error al Ejecutar: " & sqlQuery & _ vbCrLf sArchivo = Trim(oclsRegistro.ConsultarValor(HKEY_CURRENT_USER, _ const_Directorio + const_Clave3, "ArchivoErrores")) Call Proc_RegErroresArchivo(sMensajeErr, sArchivo) adoRcdset.Close Func_ProcesaMensaje = False End Function 67 Descripción de las Herramientas MS Visual Basic 6.0 Esta herramienta de programación que ofrece una plataforma gráfica para realizar interfaces que utilicen las características del Sistema Operativo Windows, dando al usuario una atractiva interface y que pueda relacionar con los otros programas del sistema que este brinda. Se escogió Visual Basic, como plataforma de trabajo para el desarrollo de la interface, debido a la experiencia obtenida programando aplicaciones, además porque ofrece gran facilidad en el manejo de sus herramientas, un uso mínimo de las líneas de código. Entre las ventajas que presenta este lenguaje de programación esta su facilidad para programar aplicaciones de cierta complejidad para Windows. 68 MS SQL Server 2005 Este motor de base de datos está diseñado para ayudar a las empresas a enfrentar desafíos como la necesidad de tomar decisiones más rápidas y más orientadas a datos, la necesidad de aumentar la productividad y flexibilidad del personal de desarrollo. SQL Server es una solución de datos global, integrada y de extremo a extremo que habilita a los usuarios en toda su organización mediante una plataforma más segura, confiable y productiva para datos empresariales y aplicaciones de BI. SQL Server 2005 provee herramientas sólidas y conocidas a los profesionales de IT, así como también a trabajadores de la información, reduciendo la complejidad de la creación, despliegue, administración y uso de aplicaciones analíticas y de datos empresariales en plataformas que van desde los dispositivos móviles hasta los sistemas de datos empresariales. A través de un conjunto global de características, la interoperabilidad con sistemas existentes y la automatización de tareas rutinarias, SQL Server 2005 ofrece una solución completa de datos para empresas de todos los tamaños. 69 Cuenta de Correo A través de una cuenta de correo el Administrador de Bases de Datos podrá enviar peticiones a la aplicación la cual se encargará a su vez de ejecutar la instrucción correspondiente en la petición, y recibir la confirmación de la ejecución de determinada tarea. Sistema Operativo Desde cualquier sistema operativo basado en Windows, ya sea este XP, Vista, 7, Server 2000/2003/2008. 70 Capítulo IV MANUAL DE USUARIO 71 Introducción Este proyecto fue desarrollado basado en la necesidad de una nueva forma de conexión remota entre el DBA o profesional de Sistemas, que necesita poder resolver problemas con respecto a los respaldos y restauraciones de Bases de Datos, para poder resolver situaciones que se llegasen a presentar sobre todo cuando él se encuentra fuera de su área de trabajo. Mediante este prototipo de aplicación se podrá a través de un formato de mensaje enviar un correo para realizar una tarea determinada como respaldo o restauración de una base de datos que se necesite realizar. Inicio de Sesión Grafico No. 12. Pantalla de Inicio de Sesión Elaborado: Alberto C. Arreaga C.. Fuente: Programa. 72 Para ingresar al sistema se debe ingresar el usuario, que se configura inicialmente al instalar la aplicación, seguido de la contraseña. Una vez autenticado el usuario y la contraseña, se podrá tener acceso al sistema prototipo. Cambio de Contraseña Grafico No. 13. Pantalla Inicio de Sesión, cambio de contraseña. Elaborado: Alberto C. Arreaga C.. Fuente: Programa. Podemos realizar el cambio de contraseña cada que se crea necesario, o cuando este pronto a caducar el tiempo de vigencia de la clave vigente. Para proceder al cambio de la contraseña se accede desde la pantalla de inicio de sesión, en el botón Cambiar Contraseña la cual dará acceso al Cambio de Contraseña. Para ello se requiere de digitar la contraseña actual o anterior, y digitar la 73 contraseña nueva. Por asuntos de seguridad se requiere la confirmación de la contraseña nueva. Una vez que registrado los campos requeridos, se procede a grabar. Para el cambio de la contraseña no se podrá utilizar las últimas 5 contraseñas utilizadas anteriormente, esto se realiza por asuntos de seguridad. Pantalla Principal Grafico No. 14. Pantalla principal. Elaborado: Alberto C. Arreaga C.. Fuente: Programa. 74 Esta es la pantalla principal o Menú principal del prototipo de la aplicación, contiene las 3 opciones Configuración, Proceso y Ayuda. Podemos acceder mediante: • El menú. • Los botones de acceso. • Las teclas de acceso. Configuración Dentro de esta opción tenemos 3 pestañas de ingreso de parámetros, para el correcto desenvolvimiento de la aplicación. La primera pestaña es la de configuración de correo, en la cual se ingresará: La cuenta de correo, cuenta de la aplicación, donde se leerán los mensajes enviados por el administrador del Departamento de Sistemas, debe ser de un Proveedor de correo con servidor de correo POP3 y SMTP, como los es Yahoo. La contraseña, la misma que se definió al crear la cuenta de correo, del proveedor elegido. 75 Grafico No. 15. Pantalla de Registro de parámetros. Elaborado: Alberto C. Arreaga C.. Fuente: Programa. Tipo de cuentas, en este caso el servidor de correo POP3. Servidor Entrante, la dirección del servidor entrante, de acuerdo al proveedor de correo elegido. Así también como el número de puerto del servidor entrante utilizado para la comunicación. 76 Servidor Saliente, la dirección del servidor saliente, de acuerdo al proveedor de correo elegido. Así también como el número de puerto del servidor saliente utilizado para la comunicación. Cuenta de correo destino, la cuenta de correo desde la cual se enviarán los mensajes y la de la cual solo se aceptará correos entrantes, para el procesamiento del mensaje. Autenticación, el tipo de autenticación del servidor de datos de MS Sql Server 2005. Servidor de datos, nombre del servidor de datos en el cual se encuentra la o el grupo de bases y sobre la cual se hará las tareas de respaldo y restauración. Usuario, en caso de que la autenticación sea mediante SQL, se deberá especificar el usuario permitido para las tareas a realizar sobre el servidor. Contraseña, la contraseña asignada al usuario del servidor de base. Respaldos En esta pantalla se configurará los directorios donde se tendra guardados los respaldos generados desde la aplicción, así como también los directorios de los archivos de errores, 77 el cual grabará el tipo de error ya sea por conexion a la cuenta en la lectura y envío, como error en la conexión con el servidor de base de datos y errores en el emnsaje de ejecución Grafico No. 16. Pantalla de Configuración de Respaldos. Elaborado: Alberto C. Arreaga C.. Fuente: Programa. de la tarea de respaldo o restauración. Los archivos de auditorias, contendrán las sentencias que se ejecutan correctamente para poder saber en que tiempo se ejecuto la tarea sobre la base. Los archivos de consulta, que contienen el listado de los respaldos generados desde la aplicación por cada base existente, para ser enviada en el momento en que se la solicite y basarse en ella para una restauración. 78 Seguridades Grafico No. 17. Panalla de Configuración de seguridades. Elaborado: Alberto C. Arreaga C.. Fuente: Programa. En esta pestaña, se registrará variables de seguridad en cuanto a usuario ante la recepción de una tarea, vigencia de la contraseña, y direcciones de respaldos de los archivos. Usuario, el usuario permitido al que se le podrá realizar la ejecución o procesamiento de las tareas recibidas por correo. Contraseña, del usuario permitido. 79 Vigencia de la Contraseña, días de vigencia que tendrá una clave, para proceder al cambio de contraseña. Proceso El proceso consiste en la lectura de los mensajes de correo de la bandeja de entrada de la cuenta de correo de la aplicación ([email protected]), y mostrarlos en la bandeja de entrada de la aplicación, para poder procesar uno a uno según el orden de llegada. Una vez que los correos se encuentran en la bandeja de entrada, serán procesados para ejecutar la correspondiente tarea. Grafico No. 18. Pantalla de Recepción de mensajes de correo. Elaborado: Alberto C. Arreaga C.. Fuente: Programa. 80 Una vez procesado el mensaje según el estado de la resolución de la tarea esta se guardará en un archivo de texto, ya sea para auditoría, error, o consulta de listado. Ayuda Grafico No. 19. Pantalla de Ayuda de la aplicación. Elaborado: Alberto C. Arreaga C.. Fuente: Programa. La aplicación consta de una ayuda rápida dentro de la cual se explica cada uno de los procesos, así como también el significado de algunos términos y la bibliografía en la cual se basó el desarrollo de la aplicación. 81 Formato de mensajes de correo Grafico No. 20. Pantalla de Envío de Correo desde Gmail. Elaborado: Alberto C. Arreaga C.. Fuente: Programa. Para el envio de los mensajes de correo hacia la cuenta de correo de la aplicación, estos deberán seguir un formato, según, la tarea a realizar deberan cumplir con los requisitos de solicitud de datos enviados para poder ejecutar la tarea respectiva, caso contrario se ignorará la tarea y se enviará un mensaje de error, debido a la falta de parámetros. Estos formatos constarán en su primera línea con el nombre del usuario de la aplicación y la contraseña, esto par poder autenticar la tarea a ejecutar, y comprobar que el usuario 82 que envía es el encargado de la aplicación, ya que la clave la actualizará cada cierto tiempo y es el quien sabrá en ese momento la clave de ejecución de la tarea. Gráfico No. 21. Tareas de la aplicación. Completa Tareas de Respaldo Diferencial Completa Tarea de Restauración Completa y Diferencial Conaulta de Listado de Respaldos Creación Trabajos Programados Modificación Eliminación Elaborado: Alberto C. Arreaga C. Fuente: Codificación de la aplicación. 83 Formatos de Tarea Respaldo Completo Usuario: administra&456. Base: AdmDemo. Tarea: Resapldo. Modo: Completo. Este formato consta en la etiqueta Usuario con el nombre del usuario (administra) seguido del símbolo & y aontinuación la clave del usuario (456). En la etiqueta Base, irá el nombre de la base de datos a la cual se le realizará el respaldo (AdmDemo). En la eiqueta Tarea, la tarea a realizar (Respaldo). Y finalmente en la etiqueta modo, la forma como se realizará el respaldo (Completo). Formatos de Tarea Respaldo Diferencial Usuario: administra&456. Base: AdmDemo. Tarea: Resapldo. Modo: Diferencial. Este formato consta en la etiqueta Usuario con el nombre del usuario (administra) seguido del símbolo & y aontinuación la clave del usuario (456). En la etiqueta Base, irá 84 el nombre de la base de datos a la cual se le realizará el respaldo (AdmDemo). En la eiqueta Tarea, la tarea a realizar (Respaldo). Y finalmente en la etiqueta modo, la forma como se realizará el respaldo (Diferencial). Formatos de Tarea Restauración Completa Usuario: administra&456. Base: AdmDemo. Tarea: Restaurar. Modo: Completo. Archivo: AdmDemo20100721. Este formato consta en la etiqueta Usuario con el nombre del usuario (administra) seguido del símbolo & y aontinuación la clave del usuario (456). En la etiqueta Base, irá el nombre de la base de datos dqe lq que se le realizará la restauración (AdmDemo). En la eiqueta Tarea, la tarea a realizar (Restaurar). En la etiqueta Modo, la forma como se realizará la restauración (Completo), ya que se utilizará un solo archivo para resturar. Y finalmente en la etiqueta Archivo, el nombre de archivo de respaldo que tomará como referencia para resturar la base de datos a la fecha que se generó (AdmDemo20100721). 85 Formatos de Tarea Restauración Completo y Diferencial Usuario: administra&456. Base: AdmDemo. Tarea: Restaurar. Modo: CompletoDiferencial. Archivo: AdmDemo20100721. Archivo2: AdmDemo201007211914. Este formato consta en la etiqueta Usuario con el nombre del usuario (administra) seguido del símbolo & y aontinuación la clave del usuario (456). En la etiqueta Base, irá el nombre de la base de datos dqe lq que se le realizará la restauración (AdmDemo). En la eiqueta Tarea, la tarea a realizar (Restaurar). En la etiqueta Modo, la forma como se realizará la restauración (CompletoDiferencial), esta vez se utilizará 2 archivo para resturar. En la etiqueta Archivo, el nombre de archivo de respaldo completo que tomará como referencia para resturar la base de datos a la fecha que se generó (AdmDemo20100721). Y finalmente en la etiqueta Archivo2 el nombre de archivo de respaldo diferencial hasta el cual se desea restaurar la base de datos. Esto suele darse cuando solo queremos que se restauren los datos de la base hasta cierto tiempo. 86 Formatos de Listado de Respaldo Usuario: administra&456. Base: AdmDemo. Tarea: ListaRespaldo. Fecha: 2010/07/21. Este formato consta en la etiqueta Usuario con el nombre del usuario (administra) seguido del símbolo & y aontinuación la clave del usuario (456). En la etiqueta Base, irá el nombre de la base de datos a la cual se le realizará el respaldo (AdmDemo). En la eiqueta Tarea, la tarea a realizar (ListaRespaldo). Y finalmente en la etiqueta Fecha, la fecha a la que se desea los respaldos (2010/07/21). Formatos de Creación de Tareas Programadas Este formato consta en la etiqueta Usuario con el nombre del usuario (administra) seguido del símbolo & y aontinuación la clave del usuario (456). En la etiqueta Base, irá el nombre de la base de datos a la cual se le realizará el respaldo (AdmDemo). En la eiqueta Tarea, la tarea a realizar (TareaProg). En la etiqueta Modo irá completo en referencia al respaldo a realizar en la tarea programada. En la etiqueta TipoFrecuencia, se refiere a la frecuencia con la que se dará la tarea (4: Diaria). 87 Usuario: administra&456. Base: AdmDemo. Tarea: TareaProg. Modo: Completo. TipoFrecuencia: 4. IntervaloFrecuencia: 1. TipoSubFrecuencia: 8. IntervaloSubFrecuencia: 3. FechDesde: 2010/09/01. FechHasta: . HoraDesde: 07-00-00. HoraHasta: 19-00-00. 88 ANEXOS Tomo II 89 OstroSoft - Componente POP3 (OSPOP3) Descripción Componente OstroSoft POP3 (OSPOP3) es un archivo para recuperar mensajes de correo electrónico mediante programación. Funciona con cuentas POP3. Soporta correo electrónico segura (TLS / SSL), correo electrónico (MIME) archivos adjuntos, correo HTML, cabeceras personalizadas, objetos incrustados. Componente permite recuperar y eliminar mensajes de correo electrónico de servidor de correo POP3, estado del buzón de verificación, los mensajes de analizar recuperar mediante programación y lenguajes de script de apoyo. NET y COM. La nueva versión añade soporte para conexiones seguras (SSL / TLS). La nueva versión soporta todos los métodos y las propiedades de una versión anterior, pero no es compatible con versiones anteriores, ya que se basa en una tecnología diferente (. NET frente componente COM). Actualización de 3.0.1 incluye correcciones para la recuperación de archivos adjuntos grandes, restablecer la sesión y la propiedad. Contraseña. Además, se añaden ejemplos de código para VB.NET, Visual Basic 6 y C #. Dentro de las próximas semanas vamos a proporcionar el código de ejemplo para los lenguajes de programación más y entornos. 90 Biblioteca de COM para recuperar mensajes de correo electrónico del servidor de correo POP3, comprobar el estado del buzón, el análisis de los mensajes recuperados desde Visual Basic 6 y otros programas y lenguajes de scripting, soporte COM. Licencias Cuadro No. 17. Licencias de Componente OSPOP3 Tipo Licencia Licencia no comercial Valor free libre El uso ilimitado para el desarrollo de 1 aplicaciones no comerciales. Desarrollador de licencia $19.00 Para un solo programador para desarrollar y 2 distribuir una aplicación comercial único. Licencia de servidor $59.00 Para su uso en una aplicación comercial, 3 instalado en un único servidor. Empresa de licencia $139.00 Para los programadores dentro de una empresa para desarrollar y distribuir un número 4 ilimitado de aplicaciones comerciales. Elaborado: Alberto C. Arreaga C.. Fuente: http://www.ostrosoft.com/. 91 BIBLIOGRAFIA 92 Bibliografía Libros Revisión de las fases para el desarrollo de un sistema, Ingeniería de Software, un enfoque práctico, 5ta. Edición, Roger S. Pressman. Revisión del Desarrollo de Diagramas de Caso de Uso, Tesis de Grado T-7, Portal Inteligente, Febrero 18 del 2005, desarrollada por J. Rodríguez, A. Agana, D. Del Pino, F. Fernández. Revisión del Desarrollo del Manual Técnico, Proyecto de Grado PG-116, Portal de Ventas de Supermercado por Internet manejando Pedidos y Listas de Compras recurrentes por Usuario, Febrero 7 del 2008, desarrollado por E. Avilés, E. Loaiza, B. Macías. Revisión del Desarrollo del Manual de Usuario, Proyecto de Grado PG-276, Desarrollo de un Sistema de Votaciones Electrónicas, Mayo 17 del 2010, desarrollada por A. Vásquez, A. Aroni, S. Rosales. 93 Publicaciones Ley de Comercio Electrónico, Firmas Electrónicas y Mensajes de Datos, Congreso Nacional del Ecuador, Ley 2002-67 (Registro Oficial 557-S, 17-IV-2002). Direcciones Web Componente OSPOP3.dll, que permite recuperar y eliminar mensajes de correo electrónico de un servidor de correo POP3. http://www.ostrosoft.com Ayuda sobre código de la herramienta utilizada, MS Visual Basic 6.0: http://www.recursosvisualbasic.com.ar Ayuda sobre código de la herramienta utilizada, MS Visual Basic 6.0: http://www.foro.vb-mundo.com Ayuda sobre código de la herramienta utilizada, MS Visual Basic 6.0: http://www.canalvisualbasic.net 94 Ayuda sobre código de la herramienta utilizada, MS Visual Basic 6.0: http://www.elguille.info/vb/default.aspx Ayuda sobre desarrollo de una tesis: http://www.monografias.com Sentencias de Respaldo, ayuda cobre los comandos para lograr un respaldo: http://msdn.microsoft.com/es-es/library/ms186865%28v=SQL.90%29.aspx Sentencias de Restauración, ayuda sobre los comandos para lograr una restauración: http://msdn.microsoft.com/es-es/library/ms186858%28v=SQL.90%29.aspx