O3 How To - Ideasoft
Transcripción
O3 How To - Ideasoft
1. O3 How To . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Consultas y Análisis con O3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 Curva de Lorenz y Paretto (80-20) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2 Expresiones calculadas del usuario (las más usadas) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.3 Regresión y correlación lineal entre dos variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.4 Rangos en expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 How To O3 Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 ¿Cómo aumentar la memoria de Reporting.bat? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2 HowTo agregar totales en un crosstab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3 HowTo Configurar el envío automático por mail de un reporte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.4 HowTo Crear reporte con columnas variables según parámetro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.5 HowTo crear reporte usando fechas relativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.6 How To Efectuar cálculos con elementos de filas contiguas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.7 HowTo efectuar cálculos con valores de distintas tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.8 HowTo Modificar configuración para que el Report corra en 32bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.9 HowTo ordenar fechas en reporte con numero variable de columnas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.10 HowTo Parametrizar un Conjunto de Datos de tipo XML (Data Set XML) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.11 HowTo utilizar links en un reporte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.12 O3 Report - Ubicación de drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 How To O3 Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 HowTo formato de mail enviado por regla simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2 HowTo Imprimiento la tabla con los mismos colores mostrados en pantalla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 How To O3 Scorecard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.1 Ayudas en scorecard web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.2 HowTo Formatear números en los tableros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.3 Reconstruir un Scorecard desde la linea de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5 How To O3 GIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.1 O3 GIS - Cliente Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.2 O3 GIS - Definir Gradiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.3 O3 GIS - Funcionamiento y configuración del módulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.4 O3 GIS - Modificar Nivel de Zoom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.5 O3 GIS - Scorecard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.6 O3 GIS - Shapefiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6 How To O3 Portal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.1 Cómo modificar la Lista de Componentes del O3Portal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.2 Customización de O3 Portal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.3 HowTo Conectarse al O3webportal mediante ssl (https) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.4 HowTo Conectarse al portal mediante ssl (https) O3 anteriores a 5.0.050 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.5 HowTo definir reglas con fechas relativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.6 HowTo eliminar al modo edición en al portal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.7 HowTo Utilizando Build Now! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.8 Login anónimo en O3 Portal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.9 Múltiples O3 Web con distinto L&F . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.10 Personalización de los Bookmarks del Portal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.11 Personalización gráfica del portal 4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.12 Personalización gráfica del portal 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7 How To Instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.1 Como instalar en Windows 2003? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.2 How To Cambiar plataforma de O3 a 64 bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.3 HowTo Correr JBoss con JVM 1.5 de IBM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.4 How To instalación de licencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.5 HowTo Instalar O3 cambiando el directorio temporal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.6 HowTo Instalar O3 en Suse 10.x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.7 HowTo Instalar O3 multiplataforma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.8 HowTo JBoss como Servicio en Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.9 How To migrar versiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.10 Instalación manual de JBoss como servicio en Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.11 Respaldar la Instalación de O3PS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8 Configuración de O3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.1 ¿Cómo cambiar los data sources de O3 y Enterprise Portal? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.2 Configuracion de firewall en versión mayor o igual a O3v4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.3 Configurando O3 a través de un Firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.3.1 Configuración de firewall en versión menor a O3v4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.4 Configurando O3 a través de un NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.5 Configurando O3 a través de un Proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.6 Eligiendo Idioma, Región, Zona Horaria para O3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.7 HowTo configurar programaciones con base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.8 HowTo O3 Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.8.1 Generacion de formularios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.8.2 O3 Process & eMail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.8.2.1 Ejemplo mail formato html . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.8.2.2 Ejemplo mail formato texto plano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.8.2.3 Objetos y macros disponibles usando Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.8.3 Publicacion formulario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.8.4 Web menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6 7 7 10 10 12 12 12 14 15 19 21 24 24 25 27 29 31 31 31 32 33 33 34 35 37 37 41 42 49 50 52 54 54 55 58 60 61 62 63 64 66 69 74 75 77 77 77 79 80 84 84 85 86 86 87 87 88 88 90 91 92 93 96 98 100 102 102 103 104 105 106 107 107 1.8.9 HowTo O3 Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.10 HowTo Seguridad de O3 en LDAP y Active Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.11 HowTo Server con multiples tarjetas de red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.12 Instalando O3 Portal en otros servidores Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.13 Memory Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.13.1 HowTo patch Jboss, problemas de consumo de memoria con Jboss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.14 O3 How-to Optimizacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.14.1 HowTo Optimizar los tiempos de construcción en el builder y designer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.14.2 O3 Redundancy Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.15 Single Sign-On . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.15.1 Problemas con CAS ejecutando detrás de un firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.15.2 Single Sign On de O3 con aplicaciones existentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9 How To Eportal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.1 Guía de administración de Liferay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.2 HowTo Agregar Mapas de Google . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.3 HowTo cambiar apariencia de la página de bienvenida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.4 HowTo cambiar la base hypersonic por otra base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.4.1 Migrar Liferay a Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.5 HowTo crear una nueva comunidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.6 HowTo crear una nueva organización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.7 HowTo Crear usuario administrador en una comunidad del Enterprise Portal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.8 How To definir administrador por comunidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.9 HowTo Definir permisos sobre páginas en ePortal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.10 HowTo donde almacena los documentos e imágenes eportal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.11 HowTo drill across en eportal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.12 HowTo ePortal y localhost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.13 HowTo exportar e importar una comunidad en eportal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.14 HowTo importar páginas de otra comunidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.15 HowTo instalar nuevo tema de apariencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.16 HowTo Instalar nuevo theme Default en ePortal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.17 HowTo Instalar plantillas en el Enterprise Portal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.18 HowTo Login Anónimo en ePortal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.19 HowTo ocultar el panel de control a usuarios anónimos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.20 HowTo ocultar menuItem Páginas públicas (0) en eportal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.21 HowTo personalizar una comunidad en eportal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.22 HowTo Quitar Mi Comunidad en ePortal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.23 Organizaciones vs. Comunidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.10 How To O3 AdmServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.10.1 Cómo usar una nueva Base de Datos para RBAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.10.2 Definición y Permisos de Usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.10.3 HowTo Acceso y Configuración Página de Ayuda de un Cubo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.10.4 HowTo cambiar password al usuario system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.10.5 Migración O3Server.cfg a Base de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11 How To JBoss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.1 Cambiar o deshabilitar la password de la jmx-console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.2 HowTo Aumentando el nivel de log del O3 Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.3 HowTo Cambiar el puerto 8080 en JBoss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.4 HowTo cambiar el timeout de la sesión de O3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.5 HowTo - Cambio de puertos del Servidor de O3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.6 HowTo configurar el Servicio de Mail de JBoss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.7 HowTo encriptar las passwords de las fuentes de datos (en gral, bases de datos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.8 HowTo Monitorear uso de memoria del JBoss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.9 HowTo ocultar o modificar la pagina de inicio de JBoss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.10 HowTo patch para problemas de consumo de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.11 HowTo Workaround problema nombre del server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.12 O3 Consideraciones de Seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.12 Diseño de modelos multidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.12.1 Cómo se usan los distintos métodos de agregación para saldos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.12.2 Tips de Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.12.2.1 Agregando datos de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.12.2.2 Comparando los valores de un día respecto al promedio de los últimos N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.12.2.3 Customizando las plantillas de páginas en ePortal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.12.2.3.1 Accediendo a bases de datos desde BeanShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.12.2.4 Definición de Medida Derivada de tipo 'Count Distinct' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.12.2.5 Operando en tablas con cantidades variables de filas y columnas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.12.2.6 SaldosAMovimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.13 How To O3 Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.13.1 ¿Cómo hacer para que browser -debug escriba en el log, para clientes en los que se instaló por javaws? . . . . . . . . . . . . 1.13.2 HowTo Accediendo a cubos de MSAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.14 How To O3 Designer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.14.1 Drivers JDBC más utilizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.14.1.1 HowTo Crear Conexiones a MySQL sin que cargue todos los datos a memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.14.1.2 Service Pack para Relativity v 11.00 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.14.2 HowTo Accediendo a datos de Lotus Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.14.3 HowTo Accediendo archivos DBF y Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 110 113 114 114 116 116 118 119 121 121 121 124 124 124 125 125 131 131 133 133 134 134 138 140 140 140 143 145 145 148 150 150 151 152 153 153 154 154 155 156 156 157 160 160 162 163 163 163 166 168 168 169 170 171 171 172 172 173 174 175 177 177 179 182 183 185 185 186 186 186 192 192 193 193 1.14.4 HowTo Envio de mail con servidor SMTP que requiere TLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.14.5 How to Utilizando drivers ODBC de 32 bits en SO de 64 bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.14.6 How To Utilizando drivers ODBC para archivos de texto (ASCII) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.14.7 Usando la función debug() para ver expresiones calculadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.15 How To O3 Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.15.1 Cambio de directorio temporal - Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.15.2 How To Generar log de la construcción del cubo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.15.3 HowTo pasar parámetros al builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.15.4 HowTo pasar una password encriptada como parámetro a builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.16 How To O3 en Base de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.16.1 Exportación de RBAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.16.2 How To Cambiar data sources de O3 y Enterprise Portal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.16.3 How To Migrar O3Server.cfg a Base de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.16.4 How To Usar una nueva Base de Datos para RBAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 195 196 199 200 200 200 201 202 203 203 203 204 207 O3 How To Los HowTo aquí presentados son documentos que describen alternativas y procedimientos para activar distintos mecanismos del producto o para lograr soluciones específicas para escenarios particulares. How To - Instalación Como instalar en Windows 2003? How To Cambiar plataforma de O3 a 64 bits HowTo Correr JBoss con JVM 1.5 de IBM How To instalación de licencias HowTo Instalar O3 cambiando el directorio temporal HowTo Instalar O3 en Suse 10.x HowTo Instalar O3 multiplataforma HowTo JBoss como Servicio en Linux How To migrar versiones Instalación manual de JBoss como servicio en Windows Respaldar la Instalación de O3PS How To - Configuración ¿Cómo cambiar los data sources de O3 y Enterprise Portal? Configuracion de firewall en versión mayor o igual a O3v4.3 Configurando O3 a través de un Firewall Configurando O3 a través de un NAT Configurando O3 a través de un Proxy Eligiendo Idioma, Región, Zona Horaria para O3 HowTo configurar programaciones con base de datos HowTo O3 Process HowTo O3 Properties HowTo Seguridad de O3 en LDAP y Active Directory HowTo Server con multiples tarjetas de red Instalando O3 Portal en otros servidores Web Memory Management O3 How-to Optimizacion Single Sign-On How To - JBoss Cambiar o deshabilitar la password de la jmx-console HowTo Aumentando el nivel de log del O3 Server HowTo Cambiar el puerto 8080 en JBoss HowTo cambiar el timeout de la sesión de O3 HowTo - Cambio de puertos del Servidor de O3 HowTo configurar el Servicio de Mail de JBoss HowTo encriptar las passwords de las fuentes de datos (en gral, bases de datos) HowTo Monitorear uso de memoria del JBoss HowTo ocultar o modificar la pagina de inicio de JBoss HowTo patch para problemas de consumo de memoria HowTo Workaround problema nombre del server O3 Consideraciones de Seguridad How To - O3 en Base de Datos Exportación de RBAC How To Cambiar data sources de O3 y Enterprise Portal How To Migrar O3Server.cfg a Base de Datos How To Usar una nueva Base de Datos para RBAC Diseño de modelos multidimensionales Cómo se usan los distintos métodos de agregación para saldos Tips de Diseño Consultas y Análisis con O3 Curva de Lorenz y Paretto (80-20) Expresiones calculadas del usuario (las más usadas) Rangos en expresiones Regresión y correlación lineal entre dos variables How To - O3 AdmServer Cómo usar una nueva Base de Datos para RBAC Definición y Permisos de Usuarios HowTo Acceso y Configuración Página de Ayuda de un Cubo HowTo cambiar password al usuario system Migración O3Server.cfg a Base de Datos How To - O3 Designer Drivers JDBC más utilizados HowTo Accediendo a datos de Lotus Notes HowTo Accediendo archivos DBF y Excel HowTo Envio de mail con servidor SMTP que requiere TLS How to Utilizando drivers ODBC de 32 bits en SO de 64 bits How To Utilizando drivers ODBC para archivos de texto (ASCII) Usando la función debug() para ver expresiones calculadas How To - O3 Browser ¿Cómo hacer para que browser -debug escriba en el log, para clientes en los que se instaló por javaws? HowTo Accediendo a cubos de MSAS How To - O3 Builder Cambio de directorio temporal - Builder How To Generar log de la construcción del cubo HowTo pasar parámetros al builder HowTo pasar una password encriptada como parámetro a builder How To - O3 Rules HowTo formato de mail enviado por regla simple HowTo Imprimiento la tabla con los mismos colores mostrados en pantalla How To - O3 Scorecard Ayudas en scorecard web HowTo Formatear números en los tableros Reconstruir un Scorecard desde la linea de comandos How To - O3 Report ¿Cómo aumentar la memoria de Reporting.bat? HowTo agregar totales en un crosstab HowTo Configurar el envío automático por mail de un reporte HowTo Crear reporte con columnas variables según parámetro HowTo crear reporte usando fechas relativas How To Efectuar cálculos con elementos de filas contiguas HowTo efectuar cálculos con valores de distintas tablas HowTo Modificar configuración para que el Report corra en 32bits HowTo ordenar fechas en reporte con numero variable de columnas HowTo Parametrizar un Conjunto de Datos de tipo XML (Data Set XML) HowTo utilizar links en un reporte O3 Report - Ubicación de drivers How To - O3 GIS O3 GIS - Cliente Web O3 GIS - Definir Gradiente O3 GIS - Funcionamiento y configuración del módulo O3 GIS - Modificar Nivel de Zoom O3 GIS - Scorecard O3 GIS - Shapefiles How To - O3 Portal Cómo modificar la Lista de Componentes del O3Portal Customización de O3 Portal HowTo Conectarse al O3webportal mediante ssl (https) HowTo Conectarse al portal mediante ssl (https) O3 anteriores a 5.0.050 HowTo definir reglas con fechas relativas HowTo eliminar al modo edición en al portal HowTo Utilizando Build Now! Login anónimo en O3 Portal Múltiples O3 Web con distinto L&F Personalización de los Bookmarks del Portal Personalización gráfica del portal 4.3 Personalización gráfica del portal 5 How To - Eportal Guía de administración de Liferay HowTo Agregar Mapas de Google HowTo cambiar apariencia de la página de bienvenida HowTo cambiar la base hypersonic por otra base HowTo crear una nueva comunidad HowTo crear una nueva organización HowTo Crear usuario administrador en una comunidad del Enterprise Portal How To definir administrador por comunidad HowTo Definir permisos sobre páginas en ePortal HowTo donde almacena los documentos e imágenes eportal HowTo drill across en eportal HowTo ePortal y localhost HowTo exportar e importar una comunidad en eportal HowTo importar páginas de otra comunidad HowTo instalar nuevo tema de apariencia HowTo Instalar nuevo theme Default en ePortal HowTo Instalar plantillas en el Enterprise Portal HowTo Login Anónimo en ePortal HowTo ocultar el panel de control a usuarios anónimos HowTo ocultar menuItem Páginas públicas (0) en eportal HowTo personalizar una comunidad en eportal HowTo Quitar Mi Comunidad en ePortal Organizaciones vs. Comunidades Consultas y Análisis con O3 Consultas y Análisis con O3 Guías y material de ayuda con respecto al uso de O3 para realizar consultas y análisis sobre modelos multidimensionales. Secciones Secciones Curva de Lorenz y Paretto (80-20) — Presenta una forma de obtener un análisis de distribución de una variable en una población aproximándose a una curva de Lorenz Expresiones calculadas del usuario (las más usadas) Regresión y correlación lineal entre dos variables — Se muestra cómo graficar la regresión lineal entre dos variables y cómo apreciar el coeficiente de correlación, tanto a partir de la gráfica como mediante una columna calculada. Rangos en expresiones — Esta funcionalidad introducida en la versión 5.4 permite referenciar, en las expresiones de la grilla de O3 Performance Suite, subrangos de los datos recorridos por las direcciones. Curva de Lorenz y Paretto (80-20) Cómo crear la curva de Lorenz con O3 Presenta una forma de obtener un análisis de distribución de una variable en una población aproximándose a una curva de Lorenz Ejemplo: Se desea analizar los porcentajes de ventas acumuladas por vendedor a través de la curva de Lorenz (población: vendedores; variable a controlar: unidades vendidas) 1. En una grilla ubicar la dimensión vendedor en las columnas y la medida unidades vendidas en las filas. 2. Ordenar los vendedores en forma ascendente segúna la medida corriente (unidades vendidas) 3. Agregar una columna calculada que halle, para cada vendedor el porcentaje que representan sus ventas en el total y luego lo acumule. La fórmula es: ([group]/[group,root])*100. En la sección de formato se puede elegir Porcentaje En la ventana de Modificar Función, abrir la opción Avanzado. Hacer clic en la casilla Acumular para, y en el combo seleccionar "Eje". (Ver imagen: ) 4. La vista queda de la siguiente forma: Excluir de la vista la medida original de unidades vendidas (con botón derecho en la fila de la medida Unidades vendidas, hacer clic en Excluir de la vista) 5. Pasar al modo gráfico, eligiendo la opción gráfico de líneas Se llega a un gráfico como el que se muestra a continuación. Como se puede ver, el gráfico se aproxima al análisis de la curva de Lorenz, pero no está completo, pues no determina en qué percentil se ubica la población. A su vez, estaría faltando encontrar una forma de graficar la recta de equidistribución. Con esta misma secuencia de pasos es posible lograr un análisis de Paretto: qué porcentaje de las ventas es acumulada por el 20% de los vendedores que venden más. qué porcentaje de las ventas es acumulada por el restante 80% de los vendedores. (Se llama análisis de Paretto pues fue Paretto quien observó empíricamente que se daba una relación 20%-80%: el primer 20% de la población acumula el 80% de una variable, mientras que el otro 80% de la población acumula el 20% restante de dicha variable) Expresiones calculadas del usuario (las más usadas) share ([group]/[group,root])*100 partial share (según la anidación en filas) ([group]/[group, group.parent])*100 share de la primera columna (Valor(0)/[group.leaf(0),root])*100 Suma de las apariciones de un elemento dado de dimensión "DIMENSION" @Sum_i(Etiqueta([this.leaf(i)],"DIMENSION")=="PP"? [this.leaf(i) ]: 0) Si deseamos totalizar los valores de la medida "Units Sold", cuando la vista presenta esta y otras medidas anidadas podemos utilizar la siguiente expresión. Notar que en este caso el nombre de la dimensión correspondiente a las medidas se debe referenciar como "<measures>": @Sum_i(Label([this.Etiqueta(i)],"<measures>")=="Units Sold" ? [this.leaf(i)]: 0) Ejemplo: En esta vista se tienen dos columnas calculadas: Unidades y Costo. Donde Unidades se calcula como: @Sum_i(Etiqueta([this.leaf(i)],"<measures>")=="Unidades" ? [this.leaf(i)]: 0) Costo se calcula como: @Sum_i(Etiqueta([this.leaf(i)],"<measures>")=="Costo" ? [this.leaf(i)]: 0) En algunos casos no se requiere sumar las ocurrencias de un elemento, sino comprobar que se encuentre en la vista y en función de ello efectuar cierto cálculo: Etiqueta([this.leaf(0)], "En plazo")=="SI" ? (["SI"]/[this])*100 : 0 En este ejemplo se controla la existencia del elemento "SI" en una dimensión de nombre "En plazo", calculando el % de este elemento con respecto al total. Contar elementos cuando su valor es distinto a cero Supongamos que tenemos una vista donde vemos los productos vendidos en los últimos 3 años. Los productos estan en las filas y años como columnas. Queremos saber, cuántos productos se vendieron en cada año. La expresión predefinida "Cantidad" no sirve puesto que cuenta también aquellas productos que tuvieron 0 ventas en un año determinado. La siguiente fórmula resuelve el cálculo (como fila calculada): @Sum_i([this.leaf(i)]==0?0:1) Cálculos con elementos no visibles La opción excluir vista o exclude form view sobre un elemento de la grilla, permite quitarlo de la vista, pero que siga participando en las expresiones calculadas que se agreguen en forma de fila o columna. En el caso de expresiones definidas por el usuario, consideremos el siguiente ejemplo: La expresión Expr es una suma del elemento Mountain Bikes + Route Bikes. Al excluir el cualquiera de los dos elementos (columnas) el valor de la expresión Expr no se ve afectado. La sintaxis requerida para expresiones donde eventualmente se pueden llegar a excluir elementos es: [root."Mountain Bikes"]+[root."Route Bikes"] En caso de tener una tabla o grilla con dimensiones anidadas se deberá especificar el camino absoluto a los elementos, al momento de definir la expresión. Si se requiere mostrar alguno de los elementos excluidos, se tiene la opción mostrar o unhide, con click botón derecho sobre la etiqueta de la dimensión (nombre de la columna o fila). Las expresiones predefinidas disponibles en O3 (suma, promedio, máximo, mínimo, cantidad, etc.) actúan sobre los elementos visibles en la grilla, por lo que su resultado se ve afectado al excluir alguno de los elementos que participan en el cálculo. Cálculos de Promedio excluyendo valores cero Supongamos que tenemos una vista en la cual se calcula el promedio de unidades vendidas, pero algunos de los valores de la medida son ceros, por ejemplo: La suma de las unidades es 5+6+51=62 por lo que su promedio sin considerar los valores cero sería 62/3=21. Como se está tomando en cuenta una fila más con valor cero el promedio difiere 62/4=16: Para evitar esto y que nuestro cálculo excluya los ceros, más allá que se muestren o no los valores en la vista, definimos una expresión "PromSinValorCero" con la siguiente sintaxis: count=@Sum_i(Valor(i)!=0?1:0); count==0?0:([this]/count) Luego de aplicar la fórmula antes definida obtenemos como resultado el promedio correcto: Referenciar subrangos en una expresión Rangos en expresiones Refereniar a elemento anterior y/o siguiente en grilla Ver Tutorial de uso de expresiones Fisrt y Previous Regresión y correlación lineal entre dos variables Se muestra cómo graficar la regresión lineal entre dos variables y cómo apreciar el coeficiente de correlación, tanto a partir de la gráfica como mediante una columna calculada. ¿Cómo graficar una regresión lineal entre dos variables? Conformar una vista que tenga en las filas las dos variables (medidas) a estudiar y en las columnas la variable que identifica cada observación (por ejemplo tiempo, número de encuesta, individuo, etc.) Pasar al modo gráfico eligiendo la opción Líneas Dispersión XY Si se desea ver la recta que más se ajusta a los datos, dirigirse a Opciones y elegir Mostrar regresión lineal. En las referencias de la gráfica se verá la ecuación de dicha recta. Para ver el r^2, nuevamente en Opciones, elegir Desplegar correlación. En las referencias de la gráfica se verá, debajo de la ecuación de la recta, el valor del r^2 ¿Cómo calcular la correlación r (coeficiente de Pearson)? Se puede utilizar la grilla de la vista anterior (en las filas las dos variables (medidas) a estudiar y en las columnas la variable que identifica cada observación) Agregar una columna calculada con una expresión creada por el usuario: Corr([this,"nombre de la medida 1"],[this,"nombre de la medida 2"]) Al crear el cálculo editar la sección de formato indicando la cantidad de decimales (como mínimo 2) para poder apreciar el resultado El nombre en inglés de la función Corr es Pearson Vínculo entre r2 y Pearson r^2 = Pearson^2 (por aspectos teóricos relacionados con el coeficiente de correlación dirigirsa a esta página) Rangos en expresiones Esta funcionalidad introducida en la versión 5.4 permite referenciar, en las expresiones de la grilla de O3 Performance Suite, subrangos de los datos recorridos por las direcciones. Ejemplo 1 Se presenta la necesidad de conocer el promedio transcurrido de ventas de los últimos 12 meses, se aplica para ello el agregar una columna calculada Promedio Ventas. Prom(["Litros Vendidos",root.range(0,currentLeaf())]) Ejemplo 2 Se requiere hacer el siguiente cálculo C: Products Units Sold Discount C Prod1 A1 B1 C1=AVG(A1) Prod2 A2 B2 C2=AVG(A1:A2) Prod3 A3 B3 C3=AVG(A1:A3) Es decir que en cada celda C se promedia los valores de la columna "Units Sold" hasta la fila actual inclusive. Solución Con el nuevo soporte de rangos la expresión C puede definirse como: Avg(["Units Sold", root.range(0, currentLeaf())]) Notar que para el cálculo de C se están recorriendo los valores del otro eje (las columnas en este caso), los cálculos normalmente recorrerían en este caso la misma fila, es por eso que el operador range se utiliza en la segunda especificación de la dirección, también por eso se utiliza el término root para referirse a la columna completa (sino se referiría solamente a la fila actual). Otros ejemplos Pueden especificarse otros valores para los límites del rango: Ejemplo Descripción Evita la primer fila ["Litros Vendidos", root.range(1, currentLeaf())] Incluye desde la primer fila hasta la fila anterior a la actual ["Litros Vendidos", root.range(0, currentLeaf() 1)] ["Litros Vendidos", root.range(1)] El segundo argumento del operador range es opcional, en este caso se especifica el rango desde la segunda fila inclusive hasta el final Especifica el rango desde la fila actual (inclusive) hasta el final ["Litros Vendidos", root.range(currentLeaf())] Especifica la última fila size=@Cant_i(1); Valor(size 1) How To O3 Report Ayudas y explicaciones de cómo realizar operaciones con el componente O3Report ¿Cómo aumentar la memoria de Reporting.bat? HowTo agregar totales en un crosstab HowTo Configurar el envío automático por mail de un reporte HowTo Crear reporte con columnas variables según parámetro HowTo crear reporte usando fechas relativas How To Efectuar cálculos con elementos de filas contiguas HowTo efectuar cálculos con valores de distintas tablas HowTo Modificar configuración para que el Report corra en 32bits HowTo ordenar fechas en reporte con numero variable de columnas HowTo Parametrizar un Conjunto de Datos de tipo XML (Data Set XML) HowTo utilizar links en un reporte O3 Report - Ubicación de drivers ¿Cómo aumentar la memoria de Reporting.bat? 1. Si no existe, crear archivo o3Reporting.ini en el directorio o3.rcp dentro de la instalación de O3 (<o3>/o3.rcp). 2. Agregar el siguiente contenido: -vmargs -Xmx512m -XX:PermSize=128m 3. En caso de requerirse mas memoria, modificar el valor del -Xmx. HowTo agregar totales en un crosstab Contexto Agregar subtotales y totales por filas o columnas utilizando el objeto crosstab. Agregando Totales Cómo ejemplo utilizaremos el siguiente crosstab: 1. Para agregar un SubTotal o Total, se debe seleccionar la celda, luego clickear sobre el ícono muestra en la figura: 2. Se despliega el siguiente panel: y seleccionar Totals, cómo se donde observamos 2 pestañas que nos indican dónde ubicar los subtotales o totales (filas o columnas) en el diseño del reporte. 3. Marcar para el caso de SubTotales la(s) dimensión(es) de agrupación, y/o para los Totales (Grand Totals) la(s) medida(s). 4. Se agregan los totales en el reporte: Para agregar subtotales se deben tener 2 o más dimensiones anidadas en la celda inferior izquierda del crosstab. HowTo Configurar el envío automático por mail de un reporte Pasos para configurar el envió de mail 1. Ingresar al O3 Server Administrator con una cuenta de Administrador 2. Agregar Programación de la hora y días que se quiera enviar el reporte 3. Parados sobre el nodo "Programaciones" seleccionar "Distribución de Reportes" 4. 5. 6. 7. 8. 9. 10. 11. 12. Click en el botón de Agregar Se selecciona el reporte que se quiera programar del combo box de Reporte Se selecciona la programación de la hora que se va a enviar por mail el reporte del combo box de Programación Se escribe el email del destinatario y el asunto. El nombre del proceso se deja "Por Defecto" En el campo usuario se pone el admin Por último se escriben los parámetros obligatorios en el siguiente formato ¶m1=valor1¶m2=valor2.... Click en aceptar Click en Aplicar HowTo Crear reporte con columnas variables según parámetro Contexto La idea es crear un reporte donde las columnas a mostrar/ocultar se seleccionen por parámetros. Proceso Como ejemplo para crear el reporte, se utilizará como fuente de datos el cubo de vinos usando mdx, para representar la siguiente vista: 1. Definimos un Conjunto de datos (DataSource) de tipo mdx, con la siguiente consulta: SELECT {Measures.[Litros Vendidos], Measures.[Venta Neta], Measures.[Costo]} ON COLUMNS, {Vinos.Varietal.children} ON ROWS FROM Vinos WHERE (Fecha.[Año a la Fecha].[2008], Clientes.[Cuentas Pequeñas], Destinos.[Mercado Europeo]) 2. Agregamos un grupo de parámetros, donde se van agrupar tres parámetros: Litros vendidos, Venta neta y Costo. 2. Todos los parámetros deben ser definidos como requeridos y configurarse de la siguiente manera: Tipo de dato: Booleano (boolean) Mostrar Tipo: Casilla de verificación (check box) 3. Una vez definidos los parámetros, debemos vincular la selección de los mismos con las columnas a mostrar/ocultar. Para ello, se debe seleccionar cada columna y en las propiedades, seleccionar Visibilidad (visibility), marcando la opción Ocultar elemento (hide element), y dentro de está Para todas las salidas (for all inputs) y en expression escribir: params["LitrosVendidos"].value, params["VentaNeta"].value y params["Costo"].value respectivamente. De está manera estamos seteando incialmente la propiedad Visibildad en TRUE. Luego, al marcar el checkbox cuándo se ejecuta el reporte, el estado de la propiedad Visibilidad cambia al valor FALSE y la columna se oculta. 4. En caso de que el usuario oculte las 3 columnas, se puede agregar una etiqueta con un mensaje informativo, por ejemplo, "Se ocultaron todas las columnas del reporte". Está etiqueta, se debe definir fuera de la tabla, con la opción Ocultar elemento marcada y la siguiente expresión: if(params["LitrosVendidos"].value==true & params["VentaNeta"].value==true & params["Costo"].value==true) { false }else{ true } Es importante considerar el volúmen de información con el cuál se está trabajando, dado que el reporte definido de esta forma va a leer todos los datos indicados, sólo que algunos los ocultará. HowTo crear reporte usando fechas relativas Contexto Generar un reporte que se actualice de forma dinámica, una vez que cambie la fecha relativa utilizada en la vista. Crear Reporte 1. Definir un Data Source para una Vista O3. 2. Definir un DataSet. Cómo particularidad, la vista a utilizar, tendrá la fecha relativa en las filas en lugar de las columnas. De está forma se evita referenciar a una fecha concreta, la cual a futuro va a cambiar, generando errores al ejecutar el reporte. 3. Generamos un nuevo Data Cubes (Vinos) y los respectivos Groups (Dimensiones) y Summaries (Medidas), que utilizaremos en el 3. reporte. 4. Agregar un objeto CrossTab en el reporte. 5. Luego arrastramos los elementos que deseamos pertenezcan al reporte. La fecha relativa se debe posicionar en la celda superior derecha, la(s) dimensión(es) restante(s) en la celda inferior izquierda y la(s) medida(s) en la celda inferior derecha. Una vez se actualice la fecha relativa, el reporte se va actualizar sin necesidad de volver a generarlo o corregirlo. How To Efectuar cálculos con elementos de filas contiguas Contexto Este how to explica cómo realizar cálculos con elementos de filas contiguas de un reporte. Aplica a reportes con cualquiera de las fuentes de datos disponibles. El operador Previous de O3 permite obtener el valor de un elemento de una celda (fila o columna) inmediatamente anterior. Esto es útil por ejemplo para definir una expresión calculada en una vista de O3 que calcule la variación de una medida con respecto al valor anterior de la misma. (["Litros Vendidos"]-["Litros Vendidos", previous])/["Litros Vendidos", previous]*100 Cuando se utiliza una vista como fuente de datos de un reporte, las expresiones calculadas que contenga en forma de filas o columnas no son tomadas como elementos del data set, por lo que debemos calcularlas directamente en la tabla en el reporte. Ejemplo Se tiene el siguiente reporte, definido con la vista anterior como data set. Se requiere agregar un elemento que calcule la diferencia % de los litros vendidos cada mes, con respecto al mes anterior. Para esto se debe agregar un objeto grid y dentro del mismo una tabla con los elementos del data set: 1. En el método beforeOpen del dataset definir e inicializar variable en 0: 2. En el método onCreate del binding Measures_Litros Vendidos cargar variable con el valor de la celda: Con esto se tendrá la variable myvar cargada con el valor de cada instancia del objeto Measures_Litros Vendidos. Esto produce que la variable se actualice con el valor que se escribe en cada fila del reporte. 3. Agregar columna a la derecha de la tabla actual e insertar un objeto Data en el detail de la tabla (fila de detalle). Este se define como: Display Name Variacion Data Type Integer Expression if(myvar==0){ 0; }else{ (BirtMath.subtract(dataSetRow["Measures_Litros Vendidos"], myvar)/myvar)*100 } Esta expresión devuelve 0 si el valor de la variable es 0 (por ejemplo en la fila 1 del reporte). Si no es 0, entonces se efectúa el cálculo de la variación %: se resta a la medida Litros Vendidos el valor de la variable (que aún contiene el valor de la fila anterior para la medida Litros Vendidos), se divide entre el valor de la variable y se multiplica por 100. 4. Ejecutar el reporte. Resultado: HowTo efectuar cálculos con valores de distintas tablas Contexto Efectuar cáclulos con elementos de diferentes tablas. Las tablas por definición permiten iterar entre elementos de un dataset, aunque también pueden definirse para otro uso, sin asociarlas a ningún dataset. Cuando una tabla está asociada a un dataset éste es único. Una tabla no puede asociarse a más de un dataset al mismo tiempo. Cuando se requiere la operación entre elementos (valores) de tablas independientes una primera alternativa puede ser la definición de un joint dataset que permita tener en un único dataset y por lo tanto tabla, todos los valores que se requieren para operar. Si esto no es posible, se tiene una segunda alternativa que es el uso de variables en el reporte. Ejemplo Suma de subtotales de dos tablas independientes, a desplegarse en una tercera tabla. Se tienen dos tablas con 2 columnas cada una: fecha y valor. Se quiere sumar el total de la primera con el total de la segunda tabla y mostrarlo en una tercera tabla. El uso de variables supone la definición e inicialización de las mismas, y luego calcular su suma en una tabla separada. Los pasos necesarios son: 1. 2. 3. 4. Definir datasource del tipo necesario según el tipo de fuente de datos (O3 view, mdx, etc.). Definir datasets correspondientes a las 2 primeras tablas, de las cuales se extraerá su total (Tabla1 y Tabla2). Agregar las tablas al layout del reporte. Agregar un elemento aggregation en la footer row de cada tabla, de forma de obtener los subtotales. Si se quiere, es posible ocultarlos con la propiedad visibility en hide. 5. Seleccionar cada aggregation en cada tabla (de a uno por vez) y en la solapa script (a la derecha de Layout y Master Page), seleccionar en el combo script el método onCreate. Allí escribir lo siguiente: Para aggregation de Tabla1 //inicializa variable subtotal1 y le asigna el valor del elemento aggregation: var subtotal1=this.getValue(); // define variable global subtot1 y le asigna el valor de la variable subtotal1. reportContext.setPersistentGlobalVariable("subtot1", subtotal1); Para aggregation de Tabla2 var subtotal2=this.getValue(); reportContext.setPersistentGlobalVariable("subtot2", subtotal2); Con esto se está seteando 2 variables globales, de forma que queden disponibles para ser utilizadas desde cualquier otro elemento del reporte. 6. Crear nueva tabla de 2 columnas, sin asociarle ningún dataset, esta es la Tabla3. En la segunda celda de la detail row agregar un elemento text y en el onCreate de éste se escribe lo siguiente: this.text = parseInt(reportContext.getPersistentGlobalVariable("subtot1")) + parseInt(reportContext.getPersistentGlobalVariable("subtot2")); Con esto se está convirtiendo a entero el valor de cada variable (puesto que inicialmente quedaron definidas como string), sumandolas entre si, y escribiendo la suma en el elemento text. Tener presente de acuerdo a los valores utilizados, que el parseInt puede ser insuficiente (usar parseFloat). Observaciones: En este ejemplo se optó por mostrar la suma final en un elemento text en una celda de una tabla (Tabla3). Perfectamente se puede mostrar directamente en un campo text ubicado en el layout del reporte. HowTo Modificar configuración para que el Report corra en 32bits Cambiar configuración en IdeaSoft->O3->bat editar el archivo Reporting.bat y dentro del archivo cambiar %JAVA HOME% por "C:\IdeaSOft\O3\jrex32" HowTo ordenar fechas en reporte con numero variable de columnas Contexto Se define un reporte con número variable de columnas, para el cual se utiliza una fecha relativa por ejemplo "Últimos 12 meses". Al visualizar el reporte la fecha muestra sus meses desordenadas cronológicamente, por ejemplo: 08 / 2004, 09 / 2004, 10 / 2003, 11 / 2003. Proceso Para lograr el orden correcto de las fechas se debe: 1. Editar el dataset , agregando una columna procesada de tipo fecha con la siguiente expresión: BirtStr.right(row["Fecha"], 4) donde row["Fecha"] es la fila con los datos de la fecha en formato String. La idea es extraer el valor año de los datos. 2. Definir un nuevo grupo en Data Cube y agregar la nueva columna. 3. Luego arrastramos el elemento (orden) en el reporte, para la celda superior derecha (número de columnas variables). 4. Marcar el elemento agregado como oculto para que no se visualice en el reporte. 5. Luego en las propiedades de cross tab nos dirigimos a la pestaña ordenar y agregamos la columna anteriormente definida. 5. Una vez concluido el proceso, nuestro reporte se debería visualizar de está manera: Las fechas se muestran correctamente ordenadas y se continuaran ordenando dinámicamente a medida que se vayan agregando nuevas columnas. HowTo Parametrizar un Conjunto de Datos de tipo XML (Data Set XML) Parametrizando Data Set XML El uso de parámetros asociados a las fuentes de datos XML está soportado por BIRT versión 2.5. Por el momento la distribución de O3 opera con una versión anterior de BIRT, por lo que es necesario bajar la versión BIRT 2.5 si se desean utilizar parámetros asociados a las fuentes XML Cómo definir un parámetro para un conjunto de datos XML 1. Agregar una Fuente de Datos XML 2. Agregar un Conjunto de Datos XML (Seleccionadno la opción de usar la fuente XML definida en la fuente de datos) 3. 3. En Row Mapping, seleccionar el Xpath Expression(Es la expresión que mapea las filas y columnas de la tabla. Es la dirección dentro del XML de lo que se quiere mostrar). 4. En Columns Mapping, Seleccionar las columnas que se quieren visualizar, de la tabla previamente seleccionada en Row Mapping 5. Por último, una vez definidos los pasos anteriores, pasamos a definir el parámetro para el conjunto de datos XML. Vamos a la parte de parámetros(ya deberíamos tenr un parámetro definido, sino, definirlo antes de hacer este paso), le ponemos un nombre al parámetro, y elegimos a que parámetro va a estar asociado. Luego, ir a Row Mapping, ver que es lo que queremos filtrar, si es el nodo padre para obtener todos los hijos, o si queremos obtener un hijo en especial. Nos paramos en el Xpath en donde queremos filtrar y luego del nombre del nodo escribir lo siguiente, por ejemplo .../book[@category = "{?param?}"/... . En el caso que se quiera hacer un filtro estático el cambio sería .../book[@category = "WEB"/... Ejemplos para entender Xpath Supongamos que tenemos el siguiente archivo XML <?xml version="1.0"?> <library> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author name=”Giada De Laurentiis” country=”it”/> <year>2005</year> </book> <book category="CHILDREN"> <title lang=”en”>Harry Potter</title> <author name=”J K. Rowling” country=”uk” /> <year>2005</year> </book> <book category="WEB"> <title lang="en">XQuery Kick Start</title> <author name=”James McGovern” country=”us” /> <author name=”Per Bothner” country=”us” /> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author name=”Erik T. Ray” country=”us” /> <year>2003</year> </book> <audio format=”CD” category=”MUSIC”> <title lang=”en”>Feels Like Home</title> <artist name=”Norah Jones” country=”us” /> <year>2005</year> </audio> </library> Tabla Xpath /library/book Columna Nombre Xpath Tipo de Dato 1 Category @Category String 2 Title title[@lang = "en"] String 3 Year year int 4 Author_1 author[ 1 ]/@name String 5 Author_2 author[ 2 ]/@name String En este ejemplo, la tabla de la expresión Xpath muestra todos los nodos "book", en este caso son 4. Cada uno de estos elementos esta mapeado en la tabla resultado. Las 5 columnas que salen de la tabla son evaluadas para cada nodo "book". El resultado de la tabla sería el siguiente: Category Title Year Author_1 Author_2 Cooking Every day Italian 2005 Giada De Laurentiis NULL Children Harry Potter 2005 J K. Rowling NULL Web XQuery Kick Start NULL James McGovern Per Bothner Web Learning XML 2003 Erik T. Ray NULL Ejemplo de parametrización XML HowTo utilizar links en un reporte BIRT permite agregar enlaces en reportes, de forma de hacerlos más interactivos. Estos enlaces pueden ser entre dos secciones de un reporte, desde un reporte hacia determinada sección de otro, o hacia contenido externo. Este how to explica cómo definir un enlace o link hacia contenido externo, por ejemplo un sitio web, haciendo referencia a su URI (Uniform Resource Identifier). Al definir enlaces, el elemento que actúa como link se conoce como elemento origen. Estos deben ser de tipo data, label, image o chart. El elemento hacia el que se define el enlace se conoce como elemento destino. En el ejemplo que se presenta a continuación el destino es un sitio web. 1. Insertar en el layout del reporte el elemento origen, en este caso de tipo label. Escribir el texto que se desee para el enlace (texto visible en el reporte). 2. 2. En el panel de propiedades del mismo, seleccionar la propiedad Hyperlink y presionar opciones, donde se tiene: En Select Hyperlink Type seleccionar URI. En Location escribir el enlace entre comillas, por ejemplo: "http://www.ideasoft.biz". Este será el elemento destino. Elegir el tipo de target, en este caso Blank pues se requiere abrir el sitio en una nueva solapa o ventana del navegador web que se está utilizando. De forma opcional, se puede escribir un tool tip para el enlace. 3. Guardar el reporte y exportarlo hacia el servidor si es necesario. Este es el uso más simple de link desde un elemento de un reporte. Existe otra forma de uso más interesante que es cuando en una tabla del reporte se deben escribir enlaces en cada fila o row, que dirigen hacia sitios o páginas html, diferentes para cada elemento. Utilizando el ReporteVentas distribuido como ejemplo con la instalación de O3, se pretende insertar un enlace por cada vendedor, que dirija hacia un sitio web particular de ese vendedor. Esto implica que en la fuente de datos utilizada para definir esta tabla, se tenga una URI para cada vendedor. Con esto el dato del link será parte del dataset utilizado para la tabla, y se podrá utilizar en cualquier parte de la misma. Los pasos a seguir son similares a los del primer ejemplo: 1. En la fila de encabezado del grupo de la tabla (table group - header) se inserta un elemento label. Se escribe el texto "Link" (sin comillas). 2. En el panel de propiedades de este elemento label se selecciona la propiedad Hyperlink. Luego en las opciones se selecciona tipo URI nuevamente. En este punto, en vez de escribir el destino del enlace, se deberá seleccionar desde el data set, en el editor de expresiones (botón fx): De esta forma, el texto del enlace será igual para todos los vendedores, pero el destino será específico de cada vendedor. 3. Guardar el reporte y exportarlo hacia el servidor si es necesario. O3 Report - Ubicación de drivers Para diseñar y ejecutar reportes con JDBC Data Sources (base de datos) es necesario disponer del driver correspondiente tanto en el puesto de desarrollo del reporte como en el servidor donde se corre el mismo. Por tal motivo los drivers deben instalarse en las siguientes ubicaciones: Para diseñar el reporte: <O3>/o3.rcp/plugins/org.eclipse.birt.report.data.oda.jdbc_2.3.0.v20080610/drivers Para ejecutar el reporte: <O3>/jboss/server/default/deploy/o3report.war/WEB-INF/platform/plugins/org.eclipse.birt.report.data.oda.jdbc_2.3 Tener presente en la carpeta /org.eclipse.birt.report.data.oda.jdbc_2.3.0.v20080610 que el contenido alfanumérico a continuación de .jdbc_ puede variar en las disintas versiones de O3PS How To O3 Rules Ayudas y explicaciones de cómo realizar operaciones con el componente O3Rules HowTo formato de mail enviado por regla simple HowTo Imprimiento la tabla con los mismos colores mostrados en pantalla HowTo formato de mail enviado por regla simple El siguiente código genera el contenido HTML del mail de notificación de una regla de O3, conteniendo: 1. Nombre de regla 2. Nombre de cubo 3. Grilla con los datos de la vista coloreada según los valores que no verifican la regla. La grilla se presenta con el mismo estilo con el que se despliega en el cliente web (o3portal) Su definición debe estar contenida en el cuerpo del mail enviado por la regla. Esto se hace editando la acción de mail deseada, y modificando el contenido de la opción "envío de mail" Contenido de mail de notificación de regla <html><head> $attachments.addJPGAttachments('cubeImages') <style> $cubeCSS </style> </head> <body align='center'> <h1>Rule Notification</h1> <h3>Rule: $ruleName</h3> <h3>Cube: $cubeName</h3> <br> #foreach ($html in $cubeHtmls) $html <br> #end <hr> #set ($count = 0) #foreach ($image in $cubeImages) <img src='cid:cubeImages[$count]'/> <br> #set($count = $count + 1) #end <hr> <!-$evaluationMessages --> </body> </html> HowTo Imprimiento la tabla con los mismos colores mostrados en pantalla Impresión de la Tabla en O3 Portal Esta sección explica como configurar los browsers soportados por Ideasoft O3 Portal, para que los reportes enviados a impresora desde los mismos incluyan las imágenes y colores de fondo. Esto aplica principalmente para la impresión de la grilla. La configuración depende del browser. A continuación se detallan los procedimientos para cada uno de los browsers soportados (Internet Explorer, Firefox, Safari) . Configure el que aplica para su caso. Internet Explorer Menú: Herramientas -> Opciones de Internet -> Opciones Avanzadas Bajo la categoría "Impresión", seleccionar la opción "Imprimir colores e imágenes de fondo". Firefox Menú: Archivo -> Imprimir En la solapa de Opciones, seleccionar la opción "Imprimir colores de fondo", "Imprimir imágenes de fondo". Impresión de la grilla en mail de reglas La impresión de reglas ha sido probada en los siguientes clientes de correo: Mozilla Thunderbird 2.0 Microsoft Outlook Express 6.0 En dichos clientes es necesario especificar por configuración si se imprimen on no los colores e imágenes de fondo. Configure el cliente que aplica en su caso. Mozilla Thunderbird Menú: Archivo -> Imprimir En la solapa de Opciones, seleccionar la opción "Imprimir colores de fondo", "Imprimir imágenes de fondo". Microsoft Outlook Express 6.0 La configuración se hace en Internet Explorer. En una ventana del mismo, realizar las siguientes acciones: Menú: Herramientas -> Opciones de Internet -> Opciones Avanzadas Bajo la categoría "Impresión", seleccionar la opción "Imprimir colores e imágenes de fondo". How To O3 Scorecard Ayudas y explicaciones de cómo realizar operaciones con el componente O3Scorecard Ayudas en scorecard web HowTo Formatear números en los tableros Reconstruir un Scorecard desde la linea de comandos Ayudas en scorecard web Cómo agregar un link de ayuda para cada indicador del scorecard La solución consisten en que para cada indicador aparecerá un link de "Ayuda". Al presionarlo se abrirá una nueva ventana conteniendo un documento con la ayuda. El documento puede estar en cualquier formato que el navegador pueda mostrar (html, doc, pdf, etc). debe además se ubicado en: dentro de la aplicacion web, o sea, dentro de tomcat/webapps/scorecard. la ubicación dentro del sitio web donde se encuentra el documento se formará de la siguiente forma: tomcat/webapps/scorecard/ base / nombre_tablero / nombre_documento base: sera configurable a nivel de la aplicacion web (archivo tomcat/webapps/scorecard/web-inf/webapp.properties) nombre_tablero: es el nombre del tablero nombre_documento: refiere al nombre del tablero y se especificara con el editor de scorecard como un dato mas del indicador, en la solapa General. El link de ayuda aparecera solo si se especifico el nombre del documento en el campo "documento de ayuda" del tablero con el editor. Un ejemplo del lugar donde queda el doc es : tomcat/webapps/scorecard/ayudas/Administracion y Finanzas/ayuda_indicador_Distributed_Energy.doc HowTo Formatear números en los tableros Formato de números El formato se utiliza para indicar como queremos ver el número, cuantos dígitos decimales y si queremos agruparlos. La siguiente es una tabla para indicar como se especifica el formato Símbolo Significado 0 Dígito # Dígito, se muestra cero si no hay un dígito . Separador decimal - Signo de menos , Separador para agrupar E Separa mantisa y exponente en notación científica Número Formato (outputMask=) Configuración Regional (outputMaskLocale=) Resultado 0.00 "0.00" "en" 0.00 0.00 "0.00" "es" 0,00 0.0 "0.0" "es" 0.0 0.0 "0.0" "es" 0,0 1000 ",###" "en" 1,000 1000 ",###" "es" 1.000 1000 ",###.0" "en" 1,000.0 1000 ",###.0" "es" 1.000,0 76.5 ",###.0'%'" "en" 76.5% 76.5% ",###.0'%'" "es" 76,5% Configuración Regional La configuración regional es la forma para indicar qué símbolos utilizar en el número al cual se le aplicó el formato deseado. Por ejemplo, para el número 1234 si le aplicamos el formato #,###.00 si la configuración regional es español lo veremos como 1.234,00. En cambio si la configuración es ingles lo veremos como 1,234.00 El valor conel cual lo vamos a configurar es uno de los siguientes: Valor Significado default se toma la configuración regional del servidor. user se toma la configuración regional definida por el cliente (por ejemplo cuando se loguea por la web) es español en ingles it italiano pt portugués Procedimiento A partir de la versión 5.0.050 existe en la interfaz gráfica la capacidad para indicar el formato y la configuración regional. Las versiones anteriores a la 5.0.050 solo soportan formato especificandolo de la siguiente manera: 1. Generar el tablero y guardarlo 2. Buscar el archivo de nombre igual al tablero pero que termina .bsDef 3. Abrir el archivo y buscar outputMask="0.0" (este es un atributo asociado a cada indicador, por lo que se deberá reemplazar en todos aquellos indicadores a los cuales se desee modificar el formato por defecto) 4. Remplazar por el formato deseado (ver tabla abajo de formatos) 5. Guardar el archivo 6. Generar el tablero Ejemplo 1: Supongamos que se quiere ver los números de la siguiente forma : 25,506.0 substituir por outputMask=",###.0 " La forma de configurar la configuración regional es parecida al del formateo del número: En la misma linea de outputMask="0.0" tenemos que poner outputMaskLocale="default" Reconstruir un Scorecard desde la linea de comandos Procedimiento para reconstruir un Scorecard desde la línea de comados En el directorio raiz de O3 hay una archivo O3BSCGenerator.properties, este archivo lo tamaremos como ejemplo para construir el nuevo .properties el archivo se ve así # O3 Scorecard Generator configuration File # CS Properties gclient.server.port gclient.server.name gclient.server.host gclient.singleSignOn = = = = 1099 O3Server localhost true # Sample entries for local scorecards #indicatorsXML = ${ideasoft.home}/files/VentasMundiales/VentasMundiales.bsDef #resultFileName = ${ideasoft.home}/files/VentasMundiales/VentasMundiales.bsDat # Sample entries for remote scorecards indicatorsXML = istore:scorecard/Ventas Mundiales resultFileName = istore:scorecard/Ventas Mundiales secFilePath = ${ideasoft.home}/files/VentasMundiales/VentasMundiales_User.properties como vemos hay 2 partes según querramos construir contra el server o en forma local Construcción contra el server modificaremos esta parte # Sample entries for remote scorecards indicatorsXML = istore:scorecard/Ventas Mundiales resultFileName = istore:scorecard/Ventas Mundiales secFilePath = ${ideasoft.home}/files/VentasMundiales/VentasMundiales_User.properties Supongamos que el Scorecard que queremos lo guardamos en el server con el nombre XXX debemos crear un archivo que le pondremos por ej: XXX_user.properties que contendrá los datos del usuario y password, el usuario puede ser cualquiera que tenga derechos de abrir una definición de scorecard, por lo general se pone el admin la clave se genera con el builder de la siguiente forma ./builder -encrypt clave_del_user cuando termine veremos algo del estilo LS38h9m6jd4= esa es nuestra clave encriptada que pondremos en el archivo XXX_user.properties la cual deberemos modificar como LS38h9m6jd4\= ya que hay que escapar el signo de igual El archivo de datos del usuario XXX_user.properties se verá así user = admin pass = LS38h9m6jd4\= El archivo de generación del scorecard el archivo BSC_XXX.properties se verá así: # O3 Scorecard Generator configuration File # CS Properties gclient.server.port gclient.server.name gclient.server.host gclient.singleSignOn = = = = 1099 O3Server localhost true # Sample entries for remote scorecards indicatorsXML = istore:scorecard/XXX resultFileName = istore:scorecard/XXX secFilePath = path_al archivo/XXX_user.properties Ejecutar la construcción en línea de comados ./bscgen path_al_archivo/BSC_XXX.properties Construcción local modificaremos esta parte # Sample entries for local scorecards #indicatorsXML = ${ideasoft.home}/files/VentasMundiales/VentasMundiales.bsDef #resultFileName = ${ideasoft.home}/files/VentasMundiales/VentasMundiales.bsDat supongamos que generamos un Scorecard de nombre XXX el archivo BSC_XXX.properties se verá así # O3 Scorecard Generator configuration File # CS Properties gclient.server.port gclient.server.name gclient.server.host gclient.singleSignOn = = = = 1099 O3Server localhost true # Sample entries for local scorecards indicatorsXML = path_al_archivo/XXX.bsDef resultFileName = path_al_archivo/XXX.bsDat Ejecutar la construcción en línea de comados ./bscgen path_al_archivo/BSC_XXX.properties How To O3 GIS Ayudas y explicaciones de cómo realizar operaciones con el componente O3GIS. O3 GIS - Cliente Web O3 GIS - Definir Gradiente O3 GIS - Funcionamiento y configuración del módulo O3 GIS - Modificar Nivel de Zoom O3 GIS - Scorecard O3 GIS - Shapefiles O3 GIS - Cliente Web Se describe cómo configurar O3 GIS para su uso mediante el Cliente Web, es decir, desde cualquier navegador Web. La ejecución Web del componente GIS requiere un componente adicional llamado GeoServer (componente de código abierto y sin costo), por razones de licenciamiento este componente no puede ser distribuido junto con O3 y por lo tanto debe ser descargado e instalado de forma independiente. En este componente deben declararse los layers del mapa que va a ser utilizados, de forma similar a como se declararon en el archivo XML de asociación. Instalación de GeoServer A continuación se presentan los pasos a seguir para instalar GeoServer: 1. Descargar war de GeoServer a. Ir al sitio de GeoServer: http://geoserver.org b. Ir a página de Downloads: http://geoserver.org/display/GEOS/Download c. Ir a página de All Release: http://geoserver.org/display/GEOS/All+Releases d. Seleccionar la versión a descargar (Testeada por IdeaSoft: GeoServer 2.0.0a). e. Seleccionar el link Web Archive de la versión oficial (Stable) de GeoServer. 2. Instalación GeoServer en el directorio jboss/server/default/deploy/gserver/geoserver.war bajo la instalación de O3. Para esto es recomendable: a. Detener el servidor de O3 si estaba en ejecución b. Crear un directorio con nombre geoserver.war bajo jboss/server/default/deploy/gserver c. Descomprimir el contenido del archivo geoserver-2.0.0a-war.zip en una carpeta temporal, entre los archivos descomprimidos se incluye geoserver.war. d. Descomprimir el contenido de geoserver.war en la carpeta jboss/server/default/deploy/gserver/geoserver.war, puede ser necesario renombrar el archivo geoserver.war a geoserver.zip, para poder utilizar la herramienta de descompresión. Configuración del mapa en GeoServer 1. Iniciar servidor JBoss de O3 2. Acceder a la url http://<host>:<port>/geoserver donde <host> y <port> corresponden al servidor y puerto de instalación de O3 respectivamente (por ejemplo http://localhost:8080/geoserver). 3. Logearse al sitio, ingresando como usuario/contraseña: admin/geoserver 3. Administración de usuarios y roles consulte el siguiente enlace: http://docs.geoserver.org/latest/en/user/security/sec_roles.html 4. Configurar Espacios de Trabajo, Almacén de Datos y Estilos a. Seleccionar el link Espacios de Trabajo, y luego el link Agregar un nuevo espacio de trabajo: Crear un Espacio de Trabajo con el Name o3 y URI http://<host>:<port>/o3portal donde <host> y <port> corresponden al servidor y puerto de instalación de O3 respectivamente. Atención En caso de que la URI del espacio de nombres sea correcta pero no válida para geoserver, sera necesario definir el espacio con otra URI, por ejemplo 'http://www.ideasoft.biz' y luego editarla con la URI anteriormente invalidada. b. Seleccionar el link Almacenes de Datos, y luego el link Agregar nuevo almacén para configurar los archivos shp (ShapeFiles) i. Elegir el valor 'Shapefile' en las opciones del campo Feature Data Set Description ii. Seleccionar en Espacio de trabajo o3 iii. Ingresar el valor countries en el campo Nombre del origen de datos iv. Ingresar en Parámetros de conexión la url donde está el archivo country.shp (por ej: file:data/worldcities/country.shp en caso que el archivo country.shp se encuentre ubicado en el directorio data/data/worldcities bajo el war de iv. GeoServer). También pueden estar ubicados en otro directorio/carpeta, referenciados en una ubicación absoluta del filesystem, por ej. file:/Ideasoft/gis/country.shp). c. Seleccionar el link Capas, y luego el link Agregar nuevo recurso i. Seleccionar nueva capa, indicando o3:countries en Agregar capa de ii. Elegir el link de country iii. Modificar country por countries iv. iv. En el campo SRS declarado, Buscar el valor 4326, elegirlo. v. Elegir el link Calcular desde los datos y luego Calcular desde el encuadre nativo vi. Pasar a la etiqueta de Publicación y verificar que el Estilo por defecto sea polygon vii. Hacer click en Guardar d. Los 7 pasos anteriores fueron necesarios para configurar el shapefile del layer de countries; se deben ejecutar análogamente para configurar el shapefile del layer de WorldCities: i. Utilizar worldcities ii. La ubicación de worldcities.shp iii. d. iii. worldcities como nombre y alias de la capa e. Para confirmar que los mapas fueron configurados correctamente, lo puede comprobar en la opción de Previsualización de capas. Configuración del mapa en O3 Se debe declarar la url interna del servidor para conexión con O3 Portal en el archivo GServer.properties (o custom), en la property gis.o3portal.url (por defecto el valor es http://localhost:8080/o3portal) O3 GIS - Definir Gradiente Contexto Se utiliza un gradiente de colores para representar los elementos geográficos en el mapa de acuerdo a su valor actual. Es posible definir múltiples gradientes y personalizar los colores que componen cada uno de los gradientes. En el mapa se puede desplegar una tabla con información de los rangos numéricos asignados a cada uno de los colores que forman el gradiente. Múltiples gradientes Se pueden definir los colores que participan del gradiente en el XML de mapeo del cubo a los layers del mapa, en este ejemplo se definen dos gradientes: <gisMappingDef> <mainDimension> . . . </mainDimension> <mapDef> . . . </mapDef> <gradients> <gradient name="Default"> <gradientColor>255, 0, 0</gradientColor> <gradientColor>255, 102, 0</gradientColor> <gradientColor>255, 153, 0</gradientColor> <gradientColor>255, 204, 0</gradientColor> <gradientColor>255, 255, 0</gradientColor> <gradientColor>255, 255, 153</gradientColor> </gradient> <gradient name="Green"> <gradientColor>204, 255, 204</gradientColor> <gradientColor>153, 255, 204</gradientColor> <gradientColor>0, 255, 204</gradientColor> <gradientColor>0, 204, 204</gradientColor> <gradientColor>0, 153, 153</gradientColor> <gradientColor>0, 102, 102</gradientColor> </gradient> </gradients> </gisMappingDef> Default Green Si no se define ningún gradiente en el XML, se utiliza uno por defecto, cuyos colores coinciden con los presentados en el ejemplo anterior con nombre "Default". La cantidad de colores en cada gradiente puede variar, sólo se restringe que como mínimo debe tener dos colores. Utilización En el ePortal se puede seleccionar, en el editor del portlet de GIS, el gradiente a utilizar cuando se despliegue. Detalle del gradiente Se puede desplegar una tabla que muestre los rangos numéricos asignados a cada uno de los colores que forman el gradiente. Esta tabla se activa con un botón de la toolbar, para el caso del portal se puede seleccionar su visualización por defecto en el editor del portlet de GIS. Escala Se puede activar la visualización de la escala (en kilómetros y millas) actual para el mapa, en el caso de O3Portal la escala se despliega siempre, en el caso de ePortal, se selecciona en el editor del portlet. Selección del tipo de visualización inicial En el portlet se puede seleccionar la visualización inicial entre: Series, Mínimo, Máximo y Gradiente. O3 GIS - Funcionamiento y configuración del módulo Se presenta el soporte de GIS introducido en la versión 5.2 de O3, presentando un ejemplo y a continuación detalles sobre el funcionamiento del módulo y su configuración. Ejemplo Este archivo contiene una versión modificada del cubo Demo para integrarse con el módulo GIS. Para ver el ejemplo seguir los siguientes pasos: 1. Descomprimir el archivo en algún directorio del sistema, por ejemplo /IdeaSoft/gis 2. Si el archivo se descomprime en un directorio diferente, o si la prueba se está realizando en Windows: Editar el archivo DemoGisMapping.xml Reemplazar las ocurrencias (2) de /Ideasoft/gis por la ubicación donde quedaron los archivos: <uri>file:/IdeaSoft/gis/country.shp</uri> <uri>file:/IdeaSoft/gis/worldcities.shp</uri> 3. Ejecutar el módulo O3 Browser 4. Abrir el cubo DemoGis.cube incluido en el zip mencionado anteriormente. 5. Seleccionar en el menú: Ventana -> Plug-ins -> GIS Plugin Se despliega una ventana con el mapa del mundo y se habilitan las siguientes características: Al seleccionar un elemento geográfico en O3 el mapa se centra en dicha ubicación Si se ubica la dimensión Location en las series, se puede seleccionar que se utilice el color de las series para representar los elementos geográficos (seleccionar el tercer botón de la barra de herramientas de GIS) El doble-click en un elemento geográfico del mapa realiza la selección tanto en el mapa como en el cubo. Cuando la dimensión geográfica (Location en este caso) no está ubicada en las series, sino que está ubicada en el eje X, se puede seleccionar Max o Min, con esta opción los elementos geográficos toman el color del elemento que le da el mayor (o menor) valor. Por ejemplo en la siguiente imagen el color de Brasil es rojo porque el tipo de cliente con más ventas es "Medium Accounts" y Canadá es azul porque la categoría con más ventas es "Minor Accounts". Ejecución en ambiente Web La ejecución del componente GIS en los módulos Web de O3: O3Portal y EPortal requiere la instalación de un componente adicional, en esta página se describen los pasos a seguir para instalar y configurar dicho componente. Ejecución en O3Portal Luego de instalado el componente GeoServer y confirmada la correcta configuración de los layers en dicho servidor, seguir estos pasos para visualizar el cubo en O3Portal: 1. Agregar el cubo DemoGis al servidor de O3, ejecutar el administrador (AdmServer), agregar el cubo y asociar los roles y permisos correspondientes. 2. Acceder al O3Portal (/o3portal) y abrir dicho cubo 3. Se habilita un botón "Plug-ins" junto a "Opciones", seleccionarlo y luego seleccionar "GIS Plugin" Se despliega una nueva ventana con el mapa, con las siguientes funcionalidades: Para acercar o alejar el mapa se puede utilizar la rueda de desplazamiento del mouse (Scroll Wheel) o presionar la tecla Shift mientras se arrastra el mouse manteniendo el botón izquierdo presionado para determinar la región a acercar. Para desplazar el mapa se arrastra el mouse manteniendo el botón izquierdo presionado. El click en un elemento realiza la selección (tanto en el mapa como en el cubo) y despliega la información asociada a dicho elemento (esta información es provista por el mapa). La selección de un elemento geográfico en la vista de O3 determina la selección del elemento en el mapa Barra de Herramientas de GIS en O3Portal La barra de herramientas de GIS se compone de 8 botones, tal como se muestra en la siguiente imagen: La funcionalidad de cada uno de los botones es la siguiente (por orden de izquierda a derecha en la barra de herramientas): Color de Series Si se ubica la dimensión geográfica en las series, al activar este botón se utilizan los colores de las series para representar los elementos geográficos en el mapa. Gradiente Si se ubica la dimensión geográfica en las series, al activar este botón se utiliza un gradiente de colores de amarillo a rojo para representar los elementos geográficos en el mapa de acuerdo a su valor actual. Mínimos/Máximos Cuando la dimensión geográfica no está ubicada en las series, sino que está ubicada en el eje X, en caso de seleccionar los botones de Mínimos o Máximos, los elementos geográficos toman el color del elemento que le da el menor o el mayor valor respectivamente. Tabla de Información Si se selecciona un elemento geográfico mediante un click estando este botón activado, se despliega una tabla con la información disponible del elemento geográfico en el mapa. La tabla puede ocultarse mediante un nuevo click que desactive el botón. Cuando el botón está activado se deshabilita la selección del elemento geográfico en el cubo. Caja de Selección Múltiple Al activar este botón, se puede crear una caja para seleccionar los elementos geográficos contenidos dentro de dicha región. En el caso de elementos geográficos en forma de polígonos, se seleccionan todos los elementos que intersecten con la caja dibujada. La caja de selección múltiple se dibuja desplazando el mouse con el botón izquierdo presionado hasta liberar el botón. Una vez dibujada una región, es posible seleccionar otra sin perder la anterior aplicando el mismo procedimiento pero manteniendo presionado la tecla Ctrl. Aplicar Selección Al presionar este botón se realiza la selección (tanto en el mapa como en el cubo) de los elementos geográficos marcados. Cancelar Selección Al presionar este botón se deseleccionan (tanto en el mapa como en el cubo) los elementos geográficos marcados. Notas La barra de herramientas con funcionalidad completa es compatible con los navegadores Internet Explorer 8 (con y sin vista de compatibilidad), y Mozilla Firefox 3.x. No se soportan las funcionalidades de selección múltiple en las versiones de Internet Explorer 6 y 7. Ejecución en EPortal El módulo GIS ofrece un portlet para la visualización de un mapa, el portlet permite la selección del cubo (o vista) a desplegar, de forma similar al portlet estándar de vista de O3, la restricción que se aplica es que el cubo seleccionado debe tener configurado el GIS, como es el caso del cubo DemoGis que se está usando de ejemplo. Para utilizar este portlet con el cubo DemoGis seguir los siguientes pasos: 1. Se asume que ya se realizaron los pasos para la visualización en O3 Portal, de lo contrario agregar el cubo DemoGis al servidor como se describe en ese punto. 2. Ingresar a EPortal (/eportal) con el usuario admin 3. Seleccionar la comunidad en la que se desea trabajar, por ejemplo: Mis Espacios Web / Default / Páginas Privadas 4. Agregar una nueva página llamada GIS, esto no es necesario pero facilita la visualización del ejemplo: 5. Agregar el portlet de GIS en la nueva página: Seleccionar "Añadir Portlet" en el meu del portal Seleccionar "O3 GIS Portlet" de la categoría "IdeaSoft O3" 6. Editar la configuración del portlet 7. Seleccionar el cubo DemoGis Se despliega el mapa del mundo, dado que los países no están en las series no se asignan colores a cada uno de los elementos geográficos. Para esto se puede generar la vista deseada en el O3Portal y seleccionarla en el Portlet. El portlet de GIS es compatible con el portlet de control, por lo tanto se puede agregar un portlet de control asociado a la dimensión geográfica (siguiendo las mismas instrucciones que para las vistas estándar), de esta manera al seleccionar un elemento geográfico en el portlet de control el mapa se centra en dicho elemento. Barra de Herramientas de GIS en EPortal La barra de herramientas de GIS en EPortal es la misma descripta para O3Portal, sin las funcionalidades de selección múltiple. Conceptos Básicos El componente GIS se basa en la realización de una asociación entre una dimensión de un cubo y un mapa (expresado como un conjunto de capas o "layers"). La asociación se realiza especificando para cada nivel de la dimensión: El layer del mapa asociado al nivel El atributo del mapa que se utiliza para realizar la asociación con el nivel del cubo El atributo del nivel de la dimensión (clave, etiqueta, etc.) que se asocia con el atributo del layer. Esta asociación se expresa actualmente en un archivo XML, el formato de dicho XML se presenta con un ejemplo: En este ejemplo se declara (bajo el elemento mainDimension) que la dimensión Location tiene dos niveles: Country y City, a su vez cada uno de estos niveles está asociado a un layer del mapa: Country con o3:countries** La asociación se realiza entre la etiqueta de la dimensión y el atributo CNTRY_NAME del layer City con o3:worldcities** La asociación se realiza entre la etiqueta de la dimensión y el atributo NAME del layer El atributo parentLayerAttributeName especifica que en el layer de las ciudades, el nombre del país se encuentra en el atributo CNTRY_NAME. Este atributo se utiliza al seleccionar un país, para dejar sólo visible las ciudades de ese país. Bajo el elemento mapDef/layers se especifican los layers que definen el mapa, el nombre especificado en cada uno de los layers debe coincidir con los nombres especificados en la asociación con el nivel de la dimensión. Para el nombre de cada layer debe utilizarse la sintaxis namespace:nombre_de_layer. El elemento uri especifica la ubicación del archivo shp que especifica el layer. El nodo maxExtent especifica, las coordenadas provistas en la configuración de la capa en GeoServer utilizadas en el entorno web (Encuadre Lat/Lon). En oportunidades de trabajar en MS Windows donde además los nombres de las dimensiones geográficas poseen caracteres especiales, puede suceder que no se reconozca correctamente la referencia. En dicho caso, corresponde sustituir dichos caracteres en el nombre de la dimensión en el XML anterior, por los caracteres interpretados por Java. Por ejemplo, los caracteres: á é í ó ú se sutituyen por: á é Ãó ú A los valores que provee Geoserver, se le deben quitar las comas y reemplazarlas por puntos, por ejemplo, 83,624 se debe configurar como 83.624 Asociación de un mapa a un cubo Especificación del plugin para el cubo El módulo de GIS está basado en el soporte de plugins en O3, es por ello que para poder asociar un mapa al cubo se debe especificar un archivo de definición de plugins. Supongamos que tenemos un cubo con nombre DemoGis.cube que tiene una dimensión geográfica Location (con las características presentadas en el XML anterior), en este caso se debe escribir un archivo de texto con nombre DemoGis.plugins (el archivo debe estar ubicado en el mismo directorio donde está el cubo, el nombre debe ser igual al nombre del cubo pero con extensión .plugins), con el siguiente contenido: En este archivo debe modificarse el valor del atributo mapping (en el ejemplo DemoGisMapping.xml) al nombre del archivo XML con la especificación de la asociación, este archivo también debe ubicarse en el mismo directorio donde se encuentra el archivo .cube. Especificación del archivo de asociación Como se describió previamente, la asociación de los layers del mapa a los niveles de la dimensión se realiza en un archivo XML, este archivo debe estar ubicado en el mismo directorio que el cubo y su nombre se especifica en el archivo .plugins. O3 GIS - Modificar Nivel de Zoom Contexto El módulo O3 GIS viene configurado con un nivel de zoom por default para visualizar los mapas. La idea es poder modificar este nivel para mejor la apariencia. Definir un nuevo nivel Para definir un nuevo nivel, se debe modificar el archivo gisPlugin.jsp. Este archivo se encuentra en dos ubicaciones dentro de la instalación de O3: <instal-O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/jsp/gis/ Si se desea modificar el nivel de visualización del mapa en el Portal. <instal-O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/portlet-servlets/ Si se desea modificar el nivel de visualización del mapa en O3 GIS Portlet de EPortal. Para ello se utiliza el método zoomTo(nivel) del objeto map, siendo nivel un número, por ejemplo map.zoomTo(5); Se debe agregar dentro de function unit() el método zoomTo() debajo de la línea: map.zoomToExtent(new OpenLayers.Bounds.fromString(<%="\"" + bounds + "\""%>)); Antes del cambio: function init() { ... if (bounds != null) { %> map.zoomToExtent(new OpenLayers.Bounds.fromString(<%="\"" + bounds + "\""%>)); <% } ... } Luego de agregar map.zoomTo: function init() { ... if (bounds != null) { %> map.zoomToExtent(new OpenLayers.Bounds.fromString(<%="\"" + bounds + "\""%>)); map.zoomTo(7); <% } ... } Escalas Nivel km mi map.zoomTo(5) 200 200 map.zoomTo(6) 100 100 map.zoomTo(7) 100 50 map.zoomTo(8) 50 20 map.zoomTo(9) 20 10 O3 GIS - Scorecard Se presenta mediante un ejemplo la integración de los componentes O3GIS & O3Scorecard. El objetivo del ejemplo es colorear el mapa de acuerdo al resultado de un determinado indicador, según su estado rojo, amarillo, verde o azul. Para facilitar su descripción se trabajará con un Ejemplo basado en el tablero de Ventas Mundiales disponible con la distribución de O3. Componentes de la solución 1. Tablero con la definición de los indicadores. 2. Modelo de análisis del resultado de los indicadores. 3. Mapa integrado al tablero. 1. Tablero con la definición de los indicadores Cualquier tablero desarrollado con O3 Scorecard puede ser utilizado de forma integrada a O3GIS para visualizar el resultado de sus indicadores según un mapa. El tablero se define de la forma habitual, sin consideraciones especiales salvo las siguientes: 1. Los indicadores que se desean visualizar en el mapa, debe estar detallados por una dimensión que presente elementos geográficos. 2. Para facilitar el desarrollo del modelo de análisis de resultados del indicador, se recomienda que todos aquellos indicadores que se deseen visualizar en el mapa, tenga la misma definición en cuanto a se definen con filtro (solapa Método asociada al indicador en la definición del tablero). 2. Modelo de análisis del resultado de los indicadores Se adjunta modelo para el ejemplo del tablero de Ventas Mundiales y fuente utilizada para definir los colores de acuerdo al estado de los indicadores. El modelo tiene por objetivo permitir la visualización en un mapa del estado de los indicadores. Se entiende que los indicadores son detallados por algún concepto geográfico. En el ejemplo de Ventas Mundiales, los indicadores se detallan por países. Es necesario desarrollar un modelo de análisis de resultados para cada tablero que se desee integrar a O3GIS. Medidas Valor: es el valor utilizado para medir el indicador, que es comparado contra la meta y tolerancia definidos. Dimensiones Indicador: contiene como elementos cada uno de los indicadores del tablero. Detalle: refiere al concepto por el cual se detalla cada indicador. Para que sea relevante en la integración con O3GIS, debe corresponder a un concepto geográfico. Filtro: refiere al filtro utilizado en la definición del indicador. Por lo general corresponde a elementos de la dimensión fecha Estado: valores posibles: rojo, amarillo, verde, azul Fuentes de datos El modelo utiliza las siguientes fuentes de datos: 1. resultado de la generación del tablero, de formato XML. Se adjunta modelo definido para el ejemplo de Ventas Mundiales 2. fuente de definición de colores para la dimensión estado. Se adjunta archivo de definicion Por más detalles en la utilización de fuentes XML como origen de la información al modelo puede consultar el siguiente link: Fuentes de datos XML Definición de la fuente que recoge el resultado del tablero Se asume que quién realiza estos pasos tienen conocimientos suficientes en el diseño de modelos multidimensionales con Ideasoft O3. Para definir el modelo de resultados del tablero se deben seguir los siguientes pasos: 1. Agregar una fuente de datos de formato XML a partir del bsDat correspondiente. Para ello se debe indicar la ubicación de dicho archivo en la solapa General. 2. Especificar el camino a partir del cual interesa referenciar los datos relevantes del tablero. Dicho camino se define en la solapa General, y es siempre el mismo. Se define como: 3. Definir los campos de la fuente de datos en la solapa Campos. La referencia de estos campos es relativa al camino seleccionado en paso anterior. A modo de ejemplo: el valor correspondiente al indicador se encuentran en el nivel indicado por el camino. Sin embargo, el campo que refiere al filtro (key2), se encuentra un nivel atras, mientras que el campo que refiere al nombre del indicador se encuentra 3 niveles atrás, en la agrupación del xml correspondiente. Se debe observar además que todos estas referencias son atributos, salvo el valor. Los atributos deben ser referenciados con el símbolo @ como prefijo. Se presenta a continuación la lista completa de campos requerida para la definición del modelo. Es importante notar que siempre es la misma: Vista para presentar coloreado de los indicadores en el mapa. Para poder visualizar el color del indicador en el mapa, se debe seleccionar una vista del modelo de análisis de resultados del tablero que tenga las características que se detallan y se presentan en la siguiente imagen. 1. si es en forma de gráfico de barras, por ejemplo, la dimensión que contiene elementos geográficos debe estar en el eje X, mientras que la dimensión que contiene el estado del indicador debe estar en el eje de las Series. 2. Se debe filtrar el indicador deseado (en la dimensión Indicador). 3. Se debe filtrar el elemento deseado de la dimensión Filtro, que corresponde al filtro definido asociado al indicador y que en general refiere a una fecha La siguiente imagen presenta un ejemplo tomado del cubo generado para el tablero de Ventas Mundiales. 3. Mapa integrado al tablero Para visualizar el estado de un indicador en un mapa, es necesario haber configurado en el componente O3GIS, la asociación entre el mapa y el cubo que resume el resultado del tablero, indicado en el paso anterior. Los pasos necesario para la configuración del mapa se detallan en el siguiente link: Definiciones en O3GIS O3 GIS - Shapefiles Contexto El formato ESRI Shapefile (SHP) es un en formato estándar vectorial de almacenamiento digital donde se guarda la localización de los elementos geográficos y los atributos asociados a ellos. Se utiliza para el intercambio de información geográfica entre Sistemas de Información Geográfica (GIS). Shapefiles Un shapefile es generado por varios archivos. El número mínimo requerido es de tres y tienen las siguientes extensiones: .shp - es el archivo que almacena las entidades geométricas de los objetos. .shx - es el archivo que almacena el índice de las entidades geométricas. .dbf - es el archivo que almacena la información de los atributos de los objetos. Los shapefiles se pueden descargar gratuitamente desde varios sitios, por ejemplo: http://www.diva-gis.org/gData http://www.gadm.org/country http://www.vdstech.com/map_data.htm http://www.mapcruzin.com/download-free-arcgis-shapefiles.htm http://www.mapasymapas.com.ar/descargar-shapefile.php http://intgis.montevideo.gub.uy Mapas disponibles para descarga: Visualización de Mapa Shapefile Descripción Continent Mapa de continentes con sus etiquetas en inglés. Countries Mapa de países con sus etiquetas en inglés. World Mapa de países con sus etiquetas en inglés. No incluye la Antártida. World Cities Ciudades mundiales con sus etiquetas en inglés. Continentes Mapa de continentes con sus etiquetas en español. Países Mapa de países con sus etiquetas en español. Uruguay Mapa de Uruguay con división departamental. Localidades Localidades de Uruguay. Info Para editar el contenido de las etiquetas asociadas con los datos del cubo, se abre el archivo .dbf con Open Office o Excel y se modifica la columna correspondiente. How To O3 Portal Ayudas y explicaciones de cómo realizar operaciones con el componente O3Portal. Cómo modificar la Lista de Componentes del O3Portal Customización de O3 Portal HowTo Conectarse al O3webportal mediante ssl (https) HowTo Conectarse al portal mediante ssl (https) O3 anteriores a 5.0.050 HowTo definir reglas con fechas relativas HowTo eliminar al modo edición en al portal HowTo Utilizando Build Now! Login anónimo en O3 Portal Múltiples O3 Web con distinto L&F Personalización de los Bookmarks del Portal Personalización gráfica del portal 4.3 Personalización gráfica del portal 5 Cómo modificar la Lista de Componentes del O3Portal Objetivo Dentro de las posibilidades de customización del O3Portal, está la de modificar la lista de componentes a acceder desde el O3Portal. Procedimiento 1. Editar el archivo <O3>\jboss\server\default\deploy\gserver\0o3.ear\o3portal.war\bookmarksPage.jsp 2. Analizando el archivo vamos a observar que se declaran secciones para cada uno de los componentes, por ejemplo para los Escritorios: <!-- Desktops --> 3. Comentar las secciones de los componentes que no deseamos se visualicen, interponiendo en la sección, el tag <%-- ... --%>. 4. Guardar el archivo Customización de O3 Portal El O3 Portal brinda varios mecanismos de customización en cuanto a su Look & Feel. El más sencillo es mediante la modificación de los estilos (css) utilizados. Esto permite modificar aspectos tales como colores, fuentes, bordes, etc. Un paso siguiente puede lograrse utilizando y customizando los tag libraries y el API disponible para reubicar los componentes gráficos en otros lugares e implementar los propios. Varios clientes ya han realizado customizaciones a diferentes niveles. Un ejemplo sencillo lo representa el cambio que realizó Bea (ex Fuego) para presentarle el sito a un prospecto Otro ejemplo más acabado fue el que realizamos para Eufores donde el sitio se pasó a colores en tonos de verde. Tanto los fondos, bordes, textos se modificaron pero también los íconos necesarios para dar un acabado similar. Finalmente el caso de mayor impacto gráfico y customización fue el realizado por Previtec, una empresa brasilera que diseñó el sitio desde cero para ajustarlo al estándar corporativo de sus páginas. Esta customización hace uso de los taglibs y del API para generar el sitio final. HowTo Conectarse al O3webportal mediante ssl (https) Para efectuar este proceso es necesario bajar el servidor JBoss Procedimiento Para versiones anteriores a la 5.0.050 hacer clik aquí 1. Ubicar la carpeta <O3>/jboss/server/default/deploy/jboss-web.deployer 2. Editar el archivo server.xml 3. Ubicar la siguiente sección <!-<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> --> 4. Descomentar el tag de modo que quede de la siguiente forma: <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> 5. Agregar al conector lo siguiente: 5. emptySessionPath="true" keystoreFile="${jboss.server.home.dir}/conf/llave_1.keystore" keystorePass="rmi+ssl" 6. Así debería quedar el Connector: <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" emptySessionPath="true" keystoreFile="${jboss.server.home.dir}/conf/<nombre_llave>.keystore" keystorePass="rmi+ssl" /> <nombre_llave>.keystore Es el nombre del archivo de claves Para generarlo ejecutar en una terminal: En Windows %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA -keystore <O3>\jboss\server\default\conf\nombre_llave.keystore En Linux $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA -keystore <O3>/jboss/server/default/conf/nombre_llave.keystore La primer clave que se solicita debe indicarse rmi+ssl, luego se llenan los datos como corresponda Para la última clave que se solicita se presionar la tecla ENTER 7. Editar el archivo web.xml del directorio <o3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/WEB-INF Buscar <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> <param-value>${request.prefix}/cas/proxyValidate</param-value> </init-param> y substituir por: <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> <param-value>http://localhost:8080/cas/proxyValidate</param-value> </init-param> 8. Para el caso de usar EPortal, se debe de editar el portal-ext.properties que se encuentra en el siguiente directorio: <o3>/jboss/server/default/deploy/liferay.war/WEB-INF/classes Buscar: cas.login.url=http://${o3.cas.server.host}/cas/login cas.logout.url=http://${o3.cas.server.host}/cas/logout?service=/eportal cas.server.name=${o3.cas.server.host} cas.validate.url=http://${o3.cas.server.host}/cas/proxyValidate y remplazar por cas.login.url=https://${o3.cas.server.host}/cas/login cas.logout.url=https://${o3.cas.server.host}/cas/logout?service=/eportal cas.server.name=${o3.cas.server.host} cas.validate.url=http://localhost:8080/cas/proxyValidate Buscar o3.cas.server.host=localhost:8080 Remplazar por o3.cas.server.host=localhost:8443 9. Reiniciar el jboss HowTo Conectarse al portal mediante ssl (https) O3 anteriores a 5.0.050 1. Ubicar la carpeta <O3>/jboss/server/default/deploy/jbossweb-tomcat55.sar 2. Editar el archivo server.xml 3. Ubicar la siguiente sección <Connector port="8080" address="$\{jboss.bind.address}" maxThreads="250" strategy="ms" maxHttpHeaderSize="8192" emptySessionPath="true" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"/> 4. Comentar el tag de modo que quede de la siguiente forma: <\!-- <Connector port="8080" address="$\{jboss.bind.address}" maxThreads="250" strategy="ms" maxHttpHeaderSize="8192" emptySessionPath="true" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"/> \--> 5. Ubicar la siguiente sección <\!-- <Connector port="8443" address="$\{jboss.bind.address}" maxThreads="100" strategy="ms" maxHttpHeaderSize="8192" emptySessionPath="true" scheme="https" secure="true" clientAuth="false" keystoreFile="$\{jboss.server.home.dir}/conf/llave_1.keystore" keystorePass="rmi+ssl" sslProtocol = "TLS" /> \--> 6. Descomentarla de modo que quede de la siguiente forma: <Connector port="8443" address="$\{jboss.bind.address}" maxThreads="100" strategy="ms" maxHttpHeaderSize="8192" emptySessionPath="true" scheme="https" secure="true" clientAuth="false" keystoreFile="$\{jboss.server.home.dir}/conf/<nombre_llave>.keystore" keystorePass="rmi+ssl" sslProtocol = "TLS" /> <nombre_llave>.keystore Es el nombre del archivo de claves Para generarlo ejecutar en una terminal: En Windows %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA -keystore <O3>\jboss\server\default\conf\nombre_llave.keystore En Linux $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA -keystore <O3>/jboss/server/default/conf/nombre_llave.keystore La primer clave que se solicita debe indicarse rmi+ssl, luego se llenan los datos como corresponda Para la última clave que se solicita se presionar la tecla ENTER 7. Agregar en la válvula de CAS (CASSingleSignOnValve) el atributo casValidate, cuyo valor debe ser "http://<host>:<puerto>/cas/proxyValidate", o sea la uri de cas NO HTTPS. 8. Sustituir <host> y <puerto>, teniendo en cuenta que el puerto es el de HTTP, no el de HTTPS. 9. Reiniciar el jboss HowTo definir reglas con fechas relativas Contexto Se desea crear una regla sobre una vista, en la cuál se tienen dos columnas que contienen una Fecha Relativa (por ejemplo, Mes Actual vs. Mes Año Anterior). La idea es, definir una expresión en el editor de expresiones sin utilizar la etiqueta de la columna. Workaround Se debe utilizar la función [root.leaf(índice)], siendo índice la posición de la columna en la vista comenzando por el valor 0. De está manera se evita utilizar la etiqueta del elemento y la vista se refresca dinamicamente al cambiar la fecha relativa. Está solución, se aplica tanto para O3 Portal como para O3 Browser. HowTo eliminar al modo edición en al portal Eliminar del portal la posibilidad de editar para un usuario diferente del administrador Información No es necesario bajar el jboss para realizar estos cambios Para hacer esto debemos editar el archivo que se encuentra en: <03>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/bookmarksPage.jsp en la línea 197 en adelante veremos <%--c:if test="${csClient.userPrivileges.adm}"--%> <td style="padding-right:10px;" align="left"> <a href="edit/switch-mode.jsp" class="links" target="_top"> <c:choose> <c:when test="${editMode}"> <fmt:message key='bookmarksPage.view.command' bundle='${lang}'/> </c:when> <c:otherwise> <fmt:message key='bookmarksPage.edit.command' bundle='${lang}'/> </c:otherwise> </c:choose> </a> </td> <%--/c:if--%> todo lo que debemos de hacer es descomentar de modo que quede así <c:if test="${csClient.userPrivileges.adm}"> <td style="padding-right:10px;" align="left"> <a href="edit/switch-mode.jsp" class="links" target="_top"> <c:choose> <c:when test="${editMode}"> <fmt:message key='bookmarksPage.view.command' bundle='${lang}'/> </c:when> <c:otherwise> <fmt:message key='bookmarksPage.edit.command' bundle='${lang}'/> </c:otherwise> </c:choose> </a> </td> </c:if> salvamos el archivo y en el browser actualizamos la página de bookmarks HowTo Utilizando Build Now! Contexto Existen escenarios en los cuales los usuarios necesitan actualizar la información de los datamarts, en lugar de esperar que el proceso de actualización lo haga en el momento pre-establecido. La funcionalidad Build Now permite ejecutar desde el cliente web la carga de un datamart a demanda, en el momento que el usuario lo requiere. Esta funcionalidad está disponible a partir de la versión 5.3 Configuración La funcionalidad de actualizar los cubos a demanda requiere definiciones que permiten identificar aquellos datamarts que podrán ser actualizados por los usuarios, así como los usuarios que podrán realizar dicha actualización. Esta configuración debe ser definida por el administrador de O3, siguiendo las siguientes indicaciones: 1. Se debe crear una carpeta que contenga todos los archivos de configuración para la actualización de los datamarts del servidor (archivos de extensión .srv). Estos archivos ya debieran existir, si los datamarts publicados en el servidor se actualizan de la manera apropiada (esto es, a través del comando builder, con el archivo <cubo>.srv como argumento). La nueva carpeta debe contener solo los .srv correspondientes a los datamarts que se desean actualizar a través de la nueva funcionalidad. 2. Modificar el archivo GServer.properties, que se encuentra en <O3_HOME>/jboss/server/default/ideasoft-o3/, agregando la siguiente información: Property Descripción Default o3.buildnow.user Indica el rol habilitado para solicitar/monitorear construcciones inmediatas Administrators o3.buildnow.srvPath Ubicación y nombre de la carpeta donde se localizan los archivos de configuración (srv), necesarios para lanzar la construcción inmediata de un datamart ejemplo: <O3_HOME>/jboss/server/default/ideasoft-o3/buildnow GServer.properties de ejemplo o3.buildnow.user=Administrators o3.buildnow.srvPath=/opt/IdeaSoft/O3/jboss/server/default/ideasoft-o3/buildnow Cómo se Ejecuta la actualización ? 1. Ingresar el O3Portal con un usuario comprendido en el rol definido para Build Now! (ej.: Administrators) 2. Ir al enlace Build Now! 3. Hacer click sobre la imagen de la derecha 4. Monitoreo de construcción. El usuario observará el estado de la construcción del datamart en el item Construcciones en Progreso 5. Al finalizar la carga del datamart, el usuario podrá acceder al análisis del mismo. Login anónimo en O3 Portal Configurando el O3 Portal para el ingreso anónimo El O3 portal, a partir de su versión 4.0 incluye la posibilidad de configurarlo para que realice el login en forma anónima. Esto permite configurar una cuenta de usuario para que realice la autenticación en forma automática sin que el usuario tenga que ingresar ningún dato. Para habilitar esta funcionalidad es necesario seguir los siguientes pasos: 1. Bajar el JBoss 2. Editar el archivo context.xml que se encuentra en la ruta <O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/WEB-INF con un editor de texto 3. Este archivo contiene una sección similar a la siguiente: <Context> <!-- Discomment the GuestUserValve to enable the anonymous login through the anonymous.jsp page --> <!--Valve className="com.ideasoft.sso.cas.tomcat.GuestUserValve" debug="0" userName="user" password="user" filteredPage="/anonymous.jsp"/--> </Context> 4. Descomentar la sección correspondiente al tag Valve 5. Configurar la cuenta de usuario que se desea utilizar (atributos userName y password de esta válvula) 6. Comentar el CAS para no hacer single sign on a. Versiones 4.3 i. Abrir el archivo <o3>jboss/server/default/deploy/jbossweb-tomcat55.sar/server.xml ii. Buscar la parte donde dice <!-- CAS SSO --> <Valve className="com.ideasoft.sso.cas.tomcat.CASSingleSignOnValve" debug="0" filteredApps="/o3process,/o3portal,/o3planner,/liferay"/> y cambiar a <!-- CAS SSO --> <!-<Valve className="com.ideasoft.sso.cas.tomcat.CASSingleSignO debug="0" filteredApps="/o3process,/o3portal,/o3planner,/liferay"/> --> nValve" b. Versiones 5.X i. Abrir el archivo <o3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/WEB-INF/webapp.properties ii. Buscar com.ideasoft.cas.filter.enabled=true y cambiar por com.ideasoft.cas.filter.enabled=false 7. Reiniciar el JBoss 8. Probar esta nueva configuración ingresando a la URL siguiente: http://<server>:8080/o3portal/anonymous.jsp Configurar el login anónimo para entrar directo a una página predeterminada Supongamos que queremos entra en forma directa a la vista del cubo demo SalesByLocation, su dirección es "http://localhost:8080/o3portal/viewdesktop.jsp?cmnd=open&source=Demo%2FSalesByLocation%23_public" Procedimiento 1. Bajar el Jboss 2. Editar el archivo Context.xml <Context> <!-- Discomment the GuestUserValve to enable the anonymous login through the anonymous.jsp page --> <Valve className="com.ideasoft.sso.cas.tomcat.GuestUserValve" debug="0" userName="user" password="user" filteredPage="/mi_pagina.jsp"/> <Valve className="com.ideasoft.sso.cas.tomcat.GuestUserValve" debug="0" userName="user" password="user" filteredPage="/mi_otra_pagina.jsp"/> </Context> Se pueden colocar tantas válvulas como se necesiten 1. Crear las páginas mi_pagina.jsp, mi_otra_página.jsp del siguiente modo en <O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war <!-- $Id: anonymous.jsp,v 1.3 2005/09/23 20:05:51 martin Exp $ --> <%@ include file="/nocache.jspf"%> <%-- To enable the anonymous login, uncomment de GuestUserValve in the file WEB-INF/context.xml --%> <%response.sendRedirect(request.getContextPath() + "/browser/showView.jsp?viewDesktop=true&source=Demo%2FSalesByLocation%23_public");%> 1. Salvar el archivo anterior como mi_pagina.jsp 2. Levantar el Jboss 3. ingresar en el navegador web http://<server>:8080/o3portal/mi_pagina.jsp Múltiples O3 Web con distinto L&F Multiples O3 Web con distinto L&F Objetivo En algunas circunstancias, es necesario poder ofrecer 2 o más entornos O3 Web, con Look & Feel totalmente diferentes para los distintos usuarios. Este HowTo establece los pasos para configurar 2 contextos O3 Web, cada uno con su L&F independiente. Esto se aplica a los Clientes Web de O3. En el caso de estar utilizando O3 Enterprise Portal, es posible crear distintos Portales utilizando los propios mecanismos de O3 Enterprise Portal. Características del modelo propuesto La forma de resolver el problema tiene las siguientes caracaterísticas: El que ambos sitios (o entornos Web) comparten las mismas licencias, por lo cual los ususarios son el total de usarios del sistema. Los 2 entornos comparten los cubos, pero es posible realizar una configuración alternativa, como se presenta más adelante en este mismo wiki. Configuración La solución consiste en hacer un deploy de un o3portal.war adicional (el nombre o3portal.war no debe confundirse con el componente O3 Enterprise Portal). Cada war podrá ser configurado con su propio L&F y también acceder a modelos multidimensionales diferentes. Procedimiento Para lograr el objetivo debemos relalizas los siguiente pasos. 1. Bajar el jboss 2. Pararnos en <o3>/jboss/server/default/deploy/gserver/0o3.ear 3. 3. Copiar la carpeta o3portal.war en el mismo directorio con otro nombre ej:o3portal_2.war 4. Copiar la carpeta o3cas.war en el mismo directorio con otro nombre ej:o3cas_2.war 5. editar el archivo <o3>/jboss/server/default/deploy/gserver/0o3.ear/META-INF/application.xml.// Buscar <module> <web> <web-uri>o3portal.war</web-uri> <context-root>/o3portal</context-root> </web> </module> y agegar de modo que quede así <module> <web> <web-uri>o3portal.war</web-uri> <context-root>/o3portal</context-root> </web> </module> <module> <web> <web-uri>o3portal_2.war</web-uri> <context-root>/o3portal_2</context-root> </web> </module> Buscar <module> <web> <web-uri>o3cas.war</web-uri> <context-root>/cas</context-root> </web> </module> y agegar para que quede así <module> <web> <web-uri>o3cas.war</web-uri> <context-root>/cas</context-root> </web> </module> <module> <web> <web-uri>o3cas_2.war</web-uri> <context-root>/cas2</context-root> </web> </module> 6. editar el archivo <o3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal_2.war/WEB-INF/web.xml Buscar el filtro <filter> <filter-name>checkLoginFilter</filter-name> <filter-class>com.ideasoft.cs.ejb.cas.filter.CASFilter</filter-class> <init-param> <param-name>logout_url</param-name> <param-value>/cas/logout</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name> <param-value>${request.prefix}/cas/login</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> <param-value>${request.prefix}/cas/proxyValidate</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name> <param-value>${request.serverName}</param-value> </init-param> </filter> cambiar por <filter> <filter-name>checkLoginFilter</filter-name> <filter-class>com.ideasoft.cs.ejb.cas.filter.CASFilter</filter-class> <init-param> <param-name>logout_url</param-name> <param-value>/cas2/logout</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name> <param-value>${request.prefix}/cas2/login</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> <param-value>${request.prefix}/cas2/proxyValidate</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name> <param-value>${request.serverName}</param-value> </init-param> </filter> 7. editar el archivo <o3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal_2.war/o3portal_2.war/logout.jsp Buscar if (isSSO) { response.sendRedirect("/cas/logout?service=" + request.getContextPath()); } else { response.sendRedirect(request.getContextPath() + "/"); } y cambiar por if (isSSO) { response.sendRedirect("/cas2/logout?service=" + request.getContextPath()); } else { response.sendRedirect(request.getContextPath() + "/"); } 8. reiniciar el jboss Haciendo que los usuarios solo entren y vean en el portal correcto Para lograr que un usario que solo debería ver los cubos de o3portal y no los de o3portal_2 procedemos a: 1. Agregar 2 roles, un se llamará portal_1 y el otro portal_2. 2. Luego le asignamos estos roles a los cubos que correspondan a cada portal. 3. Asignamos los roles creados a cada uno de los usuario que deban entrar a cada portal. Personalización de los Bookmarks del Portal Objetivo Información No es necesario bajar el jboss para realizar la mayoría de estos cambios Se decriben en esta página las personalizaciones básicas más frecuentes a realizar en el portal. Apagar el modo de EDICION para usuarios no administradores Eliminar marcadores de otros componentes Presentación del árbol de componentes Modificación de apertura de cubos Cambiar el logo en la página de bookmarks Ordenamiento de las vistas y cubos en el árbol de componentes Apagar el modo de EDICION para usuarios no administradores Como resultado de esta modificación se elimina el link "MODO EDICION" para aquellos usuarios que no pertenezcan a un rol de administración. De esta forma se evita que los usuarios puedan eliminar vistas u otros componentes desde el O3portal. Es imporntante recordar que para el caso de los componentes en general (salvo las vistas públicas) la posibilidad de modificación o eliminación es controlada a través de mecanismo de seguridad que definen permisos de Lectura o Escritura para cada cada uno de los componentes y de acuerdo al rol del usuario. Aún así, puede ser deseable en algunas instalaciones apagar el modo de edición. Para hacer esto debemos editar el archivo que se encuentra en: <03>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/bookmarksPage.jsp y buscar las siguientes líneas: <%--c:if test="${csClient.userPrivileges.adm}"--%> <td style="padding-right:10px;" align="left"> <a href="edit/switch-mode.jsp" class="links" target="_top"> <c:choose> <c:when test="${editMode}"> <fmt:message key='bookmarksPage.view.command' bundle='${lang}'/> </c:when> <c:otherwise> <fmt:message key='bookmarksPage.edit.command' bundle='${lang}'/> </c:otherwise> </c:choose> </a> </td> <%--/c:if--%> todo lo que debemos de hacer es descomentar de modo que quede así <c:if test="${csClient.userPrivileges.adm}"> <td style="padding-right:10px;" align="left"> <a href="edit/switch-mode.jsp" class="links" target="_top"> <c:choose> <c:when test="${editMode}"> <fmt:message key='bookmarksPage.view.command' bundle='${lang}'/> </c:when> <c:otherwise> <fmt:message key='bookmarksPage.edit.command' bundle='${lang}'/> </c:otherwise> </c:choose> </a> </td> </c:if> salvamos y actualizamos el portal Eliminar marcadores de ciertos componentes Los títulos de los marcadores de componentes distintos a Cubos y Vistas pueden ser eliminados, restringiendo la lista de marcadores a aquellos componentes que serán utilizados en una determinada instalación. Para hacer esto debemos editar el archivo que se encuentra en: <03>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/bookmarks-trees.jsp Veamos esto con un caso real, no queremos ver las Reglas Para esto buecamos en el editor de textos <!- Rules -> veremos algo así en el código: <!-- Rules --> <fmt:message key="bookmarksPage.rules" bundle="${lang}" var="bookmarksRules" /> <bsctf:containedTree treeModel="${rulesModel}" treeModels="${treeModels}" actionModels="${actionModels}" actionModel="${rulesActionModel}" treeModelInfos="${treeModelInfos}" rootIconName=".${ideasoft_themes_themePath}/bookmarks/images/bookmark-rule.gif" rootClosedIconName=".${ideasoft_themes_themePath}/bookmarks/images/bookmark-rule.gif" defaultLeafIcon=".${ideasoft_themes_themePath}/bookmarks/images/t_yellow.gif" rootCssClass="rootCssClass" defaultCssClass="defaultCssClass" rootLabel="${bookmarksRules}"> </bsctf:containedTree> todo lo que tenemos que hacer es comentar este pedazo de código con <%- -%> de modo que quede así: <%-<!-- Rules --> <fmt:message key="bookmarksPage.rules" bundle="${lang}" var="bookmarksRules" /> <bsctf:containedTree treeModel="${rulesModel}" treeModels="${treeModels}" actionModels="${actionModels}" actionModel="${rulesActionModel}" treeModelInfos="${treeModelInfos}" rootIconName=".${ideasoft_themes_themePath}/bookmarks/images/bookmark-rule.gif" rootClosedIconName=".${ideasoft_themes_themePath}/bookmarks/images/bookmark-rule.gif" defaultLeafIcon=".${ideasoft_themes_themePath}/bookmarks/images/t_yellow.gif" rootCssClass="rootCssClass" defaultCssClass="defaultCssClass" rootLabel="${bookmarksRules}"> </bsctf:containedTree> --%> salvamos y actualizamos el portal Presentación del arbol de componentes Es posible adecuar la presentación del arbol de componentes al momento de ingresar al portal, deterimando si el mismo se muestra en forma expandida o no. Para hacer esto debemos editar el archivo que se encuentra en: <03>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/bookmarksPage.jsp buscamos en el editor de textos expandMode veremos algo como esto <wt:extTree extTreeModel="${wtTreeModel}" actionNodeModel="${wtTreeModel}" name="istoreTree" openedIcon="jsp/viewer/images/scorecardViewerIcon.gif" closedIcon="jsp/viewer/images/scorecardViewerIcon.gif" leafIcon="jsp/viewer/images/scorecardViewerIcon.gif" openButtonIcon="images/o3portal/t-plus.gif" closeButtonIcon="images/o3portal/t-minus.gif" ignoreRootNode="true" drawCheckbox="false" leafCssClass="bookmark" subTreeCssClass="bookmark" saveVisibility="false" expandMode="2" <----------- acá lo que buscamos target="_top" subtreeIndent="22" rowHeight="20" contextRelativeUrls="false" /> expandMode puede tener los siguientes valores expandMode="1" - máximo nivel de expansión para todos los bookmarks expandMode="2" - muestra títulos + un primer nivel para todos los bookmarks expandMode="3" - solo títulos de bookmarks salvamos y actualizamos el portal Modificación de apertura de cubos En ciertos ambientes se desea que los usuarios tengan como punto de partida para el análisis un conjunto de vistas previamente definidas. Esta personalización elimina la posibilidad de acceder al cubo en forma directa. Además se puede modificar también la información asociada a los cubos y vistas, que refire a si las vistas son públicas o privadas, y fecha de actualización. Para hacer esto debemos editar el archivo que se encuentra en: <03>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/bookmarks-model.jsp buscamos Cubes & Views Tree en el editor de textos veremos algo como esto // Cubes Boolean Boolean Boolean Boolean & Views Tree showCubeTime = Boolean.TRUE; showViewSecurityLevel = Boolean.TRUE; cubeCreateLink = Boolean.FALSE; viewCreateLink = Boolean.TRUE; explicación de los parametros showCubeTime - muestra fecha y hora de actualización del cubo, TRUE=muestra, FALSE=no muestra showViewSecurityLevel - muestra si una vista es pública,privada, TRUE=muestra, FALSE=no muestra cubeCreateLink - habilta o no si se puede abrir el cubo directamente, TRUE=habilita, FALSE=no habilita viewCreateLink - habilta o no si se puede abrir la vista directamente, TRUE=habilita, FALSE=no habilita salvamos y actualizamos el portal Cambiar el logo en la página de bookmarks Se detalla a continuación cómo cambiar el logo de O3 que se muestra en la página inicial que contiene los marcadores. Para hacer esto debemos editar el archivo que se encuentra en: <03>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/header.jsp El tamaño del logo no debería de superar los 70 pixels de alto y de ancho no habría problemas, el mismo lo colocamos en la siguiente carpeta <O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/images Abrimos el archivo con un editor de texto y buscamos logo.gif, veremos algo así <a href="http://www.ideasoft.com.uy" target="_blank"><img src="images/logo.gif" hspace="0" vspace="0" border="0"/></a> cambiamos logo.gif por el nombre de nuestro logo, es importante incluir la terminación del archivo (gif,jpeg,etc) Si además no queremos que el logo sea un link dejamos así <img src="images/logo.gif" hspace="0" vspace="0" border="0"/> si por alguna razón nuestro logo no entra en 70 pixels de altura, deberemos modificar este otro archivo <03>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/index.jsp editamos y buscamos rows="70,*" encontraremos algo como esto <frameset rows="70,*" framespacing="0" border="0" frameborder="0"> lo que debemos de hacer es cambiar el valor 70 por el que corresponda a la altura de nuestro logo salvamos y actualizamos el portal Cambiar el logo de O3 de la página de bookmarks En forma análoga a la comentada en la sección anterior sobre el cambio de logo del header de la página de bookmark se puede cambiar el logo de O3: Para ello se debe editar el archivo: /jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/mainHeader.jsp En la línea 10 modificar la imagen deseada: <td width="50%"align="left"><img src="images/o3portal.gif" width="104" height="75"></td> Recordar agregar la imagen en la carpeta <O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/images Cambiar título "Mis Bookmarks" Para ello se debe editar el archivo: /jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/bookmarksPage.jsp cambiando la linea: <fmt:message key="bookmarksPage.header" bundle="${lang}" /> por el titulo deseado, por ejemplo "Mí Título": <label>Mí Título</label> Ordenamiento de las vistas y cubos en el árbol de componentes Atención Es necesario bajar el jboss para realizar estos cambios Es posible presentar el árbol de vistas y cubos en forma alfabética (default) o como lo armamos en el admserver. Para cambiar el comportamiento por defecto (ordenamiento alfabético) debemos crear un archivo nuevo en <O3>/jboss/server/default/ideasoft-o3 que le ponemos por nombre GServer_custom.properties En el mismo escribimos lo siguiente: <O3>/jboss/server/default/ideasoft-o3/GServer_custom.properties CubesAndViews.sort=FALSE salvamos y re-iniciamos el server Seleccionar un theme según el usuario que ingresa al sistema El siguiente código muestra como seleccionar el theme según el login name del usuario. <O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/i18n- init.jsp <% //initialize the theme String theme = csApplication.getContext().getProperty("ideasoft.themes.defaultTheme", "red"); session.setAttribute(THEME_SESSION_ATTRIBUTE, theme); session.setAttribute(THEME_PATH_SESSION_ATTRIBUTE, "/themes/" + theme); %> REEMPLAZAR POR: <% //initialize the theme String login = csClient.getUserLogin(); String theme; if ("user".equals(login)) { theme = "red"; } else if ("admin".equals(login)) { theme = "blue"; } else { theme = csApplication.getContext().getProperty("ideasoft.themes.defaultTheme", "red"); } session.setAttribute(THEME_SESSION_ATTRIBUTE, theme); session.setAttribute(THEME_PATH_SESSION_ATTRIBUTE, "/themes/" + theme); %> Si se quiere seleccionar mediante rol al que pertenece el usuario, utilizar la siguiente variante <% //initialize the theme String theme; com.ideasoft.cs.ClientRestrictions cr = csClient.getClientRestrictions(); if (cr.isUserInRole("Manager")) { theme = "red"; } else if (cr.isUserInRole("User")) { theme = "blue"; } else { theme = csApplication.getContext().getProperty("ideasoft.themes.defaultTheme", "red"); } session.setAttribute(THEME_SESSION_ATTRIBUTE, theme); session.setAttribute(THEME_PATH_SESSION_ATTRIBUTE, "/themes/" + theme); %> Ocultar el link de Logout Según el Rol del Usuario Realizar las siguientes modificaciones en los archivos header.jsp y desktopHeader.tag: Buscar el siguiente bloque de código: <O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/header.jsp | <a href="<%=request.getContextPath()%>/logout.jsp" target="_top" class="header"><fmt:message key="header.logout" bundle="${lang}"/></a> y reemplazar por: <O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/header.jsp <% boolean canEditBookmarks = csClient.isLoginOk() && csClient.getClientRestrictions().isUserInRole("Manager"); %> <% if (canEditBookmarks) { %> | <a href="<%=request.getContextPath()%>/logout.jsp" target="_top" class="header"><fmt:message key="header.logout" bundle="${lang}"/></a> <% } %> Buscar: <O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/WEB-INF/tags/o3/desktopHeader.tag | <a href="javascript:logout()" class="xtabOn"><fmt:message key="jtabs.logout" bundle="${lang_jdesktop}"/></a> y reemplazar por: <O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/WEB-INF/tags/o3/desktopHeader.tag <jsp:useBean id="csClient" scope="session" type="com.ideasoft.cs.ejb.web.CSClientBean"/> <% boolean canEditBookmarks = csClient.isLoginOk() && csClient.getClientRestrictions().isUserInRole("Manager"); %> <% if (canEditBookmarks) { %> | <a href="javascript:logout()" class="xtabOn"><fmt:message key="jtabs.logout" bundle="${lang_jdesktop}"/></a> <% } %> Personalización gráfica del portal 4.3 Objetivo: Cambiar colores del portal en la página de ingreso y página de marcadores Consideraciones previas Es importante saber si estamos usando el sistema single sign-on para determinar donde deberemos buscar las hojas de estilos ccs Este documento es válido para versiones 4.3.x en adelante para la versión 5 clique aquí Tener conocimientos básicos de CSS Cambiando la página de marcadores La página de marcadores tiene su hoja de estilos en <O3>/jboss/server/default/gserver/deploy/gserver/0o3.ear/o3portal.war/styles/portal-custom.css Advertencia! A efectos de poder llevar nuestras personalizaciones a una nueva versión, se recomienda hacer los cambios en el portal-custom.css y no en portal.css veamos algunos cambios descomentemos (sacar los /* */) de forma que quede así body { background-color: color: font-size: font-family: } #1571A2; #FFFFFF; 8pt; 'Verdana'; cambiamos background-color: #1571A2 para cambiar el color de fondo cambiamos color:#FFFFFF; cambiaremos el color de las letras el sistema de colores es el clásico RGB en notación Hex (255 = FF,0 = 00) Cambiando la página de ingreso Acá es importante saber si usamos o no CAS Ingreso sin CAS En este caso usamos el mimos css que para la página de bookmarks, solo que descomentamos .body-main { background-color: color: font-size: font-family: } #1571A2; #FFFFFF; 8pt; 'Verdana'; Ingreso con CAS debemos editar el archivo que se encuentra en <O3>/jboss/server/default/deploy/gserver/0o3.ear/o3cas.war/styles/portal-custom.css ahí descomentamos .body-main { background-color: color: font-size: font-family: } #1571A2; #FFFFFF; 8pt; 'Verdana'; Personalización gráfica del portal 5 Objetivo: Cambiar colores del portal en la página de ingreso y página de marcadores. A partir de la versión 5 se implementó para facilitar el cambio de colores y otro cambios de L&F la idea de temas. En este tutorial explicaremos como cambiar de tema, eligiendo algunos de los prearmados o definiendo uno propio, y personalizar el portal. Consideraciones previas Este documento es válido para versiones 5.1.xxx en adelante Tener conocimientos básicos de CSS Recomendamos el uso de Firefox junto con el complento Firebug. La combinación facilita el desarrollo de temas en dos aspectos: i) inspeccionar la página web del portal para encontrar el estilo CSS que se debe modificar, ii) modificar directamente la página para probar una modificación de estilo CSS. Temas pre armados La instalación de O3PS prevee los siguiente temas por defecto: red blue green grey red es el tema por defecto. para cambiar a otro tema basta con agregar un nuevo archivo GServer_custom.properties con una property (puede ser en cualquier lugar, por ej: al final del archivo), en <o3>/jboss/server/default/ideasoft-o3/GServer_custom.properties, siendo alguna de las siguientes: ideasoft.themes.defaultTheme = blue ideasoft.themes.defaultTheme = green ideasoft.themes.defaultTheme = red ideasoft.themes.defaultTheme = grey Advertencia! Para los temas pre armados se debe respetar el uso de mayúsculas y minúsculas. La herramienta es Case Sensitive. Reiniciar Jboss Una vez que se hizo ésto el cambio a otro tema prearmado consisten en cambiar el nombre del color en el archivo .properties y refrescar (no es necesario reiniciar el jboss) Creando un nuevo tema : Violeta A lo efectos de ejemplificar el proceso vamos a crear un nuevo tema que se llamará Violeta. Pasos a seguir: 1. Copiar la carpeta <o3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/themes/red en el mismo lugar y la re nombramos como Violeta. 2. Copiar la carpeta <o3>/jboss/server/default/deploy/gserver/0o3.ear/o3cas.war/themes/red en el mismo lugar y la re nombramos como Violeta. 3. Avisarle al O3Server que use este nuevo tema, para ello en <o3>/jboss/server/default/ideasoft-o3/GServer_custom.properties agregamos la siguiente property ideasoft.themes.defaultTheme = Violeta 4. Cambiar al nuevo nombre los css, en: <o3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/themes/Violeta/common/css copiar el archivo red.css y re nombrarlo como Violeta.css Cambiar las clases dentro de Violeta.css. Editemos Violeta.css y cambiamos todos los .red por .Violeta <o3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/themes/Violeta/jdesktop/css modificar el nombre red.css por Green.css Cambiar las clases dentro de Violeta.css. Editemos Violeta.css y cambiamos todos los .red por .Violeta Si seguimos estos pasos habremos creado un nuevo tema Violeta. Vemos ahora como cambiar algunos estilos Cambiando estilos en el nuevo tema Como podemos ver la carpeta de temas tiene varias sub carpetas que ordenan y facilitan los cambios. En su mayoría lo que contienen son las imágenes correspondientes. El archivo más importante es <o3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/themes/Violeta/common/css/Violeta.css, en el tenemos la mayoria de estilos que se aplicarán al o3portal. El otro archivo importante es <o3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/themes/Violeta/jdesktop/css/common/Violeta.css, donde tenemos la mayoría de los estilos que controlan al portal un vez que abrimos un cubo. Reiniciar Jboss How To Instalación Ayudas y explicaciones de cómo realizar instalaciones de O3. Como instalar en Windows 2003? How To Cambiar plataforma de O3 a 64 bits HowTo Correr JBoss con JVM 1.5 de IBM How To instalación de licencias HowTo Instalar O3 cambiando el directorio temporal HowTo Instalar O3 en Suse 10.x HowTo Instalar O3 multiplataforma HowTo JBoss como Servicio en Linux How To migrar versiones Instalación manual de JBoss como servicio en Windows Respaldar la Instalación de O3PS Como instalar en Windows 2003? Atención A partir de la versión 4.0.600 este procedimiento no es necesario El instalador no reconoce que esta en una plataforma Windows 2003, por lo que no se ejecuta correctamente. La solución es forzarle la plataforma con la property "os.name", con el valor "Windows 2000" Procedimiento: Para hacer esto hay que seguir los siguientes pasos: 1. 2. 3. 4. Renombrar el el O3Setup.exe a O3Setup.exe.zip Descomprimir este archivo en una carpeta temporal Editar el archivo O3Setup.lax con editor de texto Agregar la siguiente línea al final del archivo: os.name=Windows 2000 respetando mayúsculas y espacios 5. Guardar los cambios 6. Ejecutar O3Setup.exe (que se encuentra junto al O3Setup.lax) How To Cambiar plataforma de O3 a 64 bits Contexto Dado que las versiones actuales de O3 están disponibles para arquitecturas 32 bits, en caso de tener un servidor de 64 bits, será necesario cambiar de plataforma. Proceso de cambio de plataforma 1. Bajar la maquina virtual de 64 bits acorde al sistema operativo desde el sitio oficial de Sun: http://java.sun.com/javase/downloads/index.jsp. 2. Seleccionar Download JRE: 3. En la siguiente página se solicita la plataforma de la JRE, por ejemplo Windows x64 y se debe marcar "I agree...". El resto de los datos son opcionales: 4. En la pantalla siguiente saldrá un resumen del archivo a bajar: 4. 5. 6. 7. 8. 9. Seleccionar el checkbox y hacer click sobre el .exe para comenzar la descarga. Desempacar la máquina virtual. Renombrar el directorio <o3>/jre a <o3>/jrex32. Crear directorio <o3>/jre. Copiar las carpetas lib y bin desde donde se desempaco la jvm de 64 bits a la carpeta <o3>/jre. Una vez realizado estos pasos, al levantar jboss ya estará operando en modo 64 bits. Es muy probable que se tengan que volver activar las licencias. Si el servidor se levanta en consola (jboss.bat o jboss.sh) al comienzo de la ejecución se mostrará el mensaje: Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_18-b02, mixed mode), con la version correspondiente al JRE. HowTo Correr JBoss con JVM 1.5 de IBM IMPORTANTE: Este HowTo sólo es válido para correr Jboss con JVM1.5 de IBM, y que no precisen del workflow. Cuando se editen los archivo xml, prestar especial atención en no cambiar nigún tag, no agregar espacios delante que ya no estén, y en especial en los de encabezados En el caso de tener una máquina de 64bits es necesario bajar la máquina virtual para 64bits, la de 32 bits no funciona correctamente en una máquina de 64 PROCEDIMIENTO: 1. 2. 3. 4. 5. detener el Jboss. ir a la carpeta donde se instaló O3. desde ahí ir a la subcarpeta jboss/server/default/deploy . buscar los siguientes archivos :ear-deployer.xml , ejb-deployer.xml , naming-service.xml , los cuales editaremos. EDITAR ear-deployer.xml buscar <attribute name="CallByValue">true</attribute> y pasarlo a <attribute name="CallByValue">false</attribute> buscar <attribute name="Isolated">true</attribute> y pasarlo a <attribute name="Isolated">false</attribute> 1. EDITAR ejb-deployer.xml buscar <attribute name="CallByValue">true</attribute> y pasarlo a <attribute name="CallByValue">false</attribute> (línea 231 del .xml) 1. EDITAR naming-service.xml buscar <attribute name="CallByValue">true</attribute> y pasarlo a <attribute name="CallByValue">false</attribute> 1. ir a la carpeta jboss/server/default/deploy/gserver 2. RENOMBRAR la carpeta 1jwf.ear ej: renombrar como #1jwf.ear 3. levantar el Jboss nuevamente. How To instalación de licencias Instalación y Activación Para activar las licencias deberá estar logueado como administrador o root del equipo. El proceso de activación de licencias es el siguiente: 1. Ejecutar O3 Browser o cualquier otro módulo que se vaya a utilizar. Se muestra el siguiente diálogo: 2. Presionar el botón de "Agregar Nueva Licencia" e ingresar los datos de la misma. Se muestra el siguiente diálogo: 3. Ingresar el texto de la licencia, por ejemplo: licensedTo=Cliente key=xxxxxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxx 4. 5. 6. 7. Presionar el botón Aceptar. Seleccionar la licencia que se acaba de ingresar de la tabla. Presionar el botón de "Activar Licencia", Elegir la activación en línea. Se muestra el siguiente diálogo: 7. 8. Configurar las opciones de conexión si fuera necesario (proxy, usuario, etc). 9. Presionar Finalizar, y luego Aceptar para concluir el proceso. Sobre la Activación en Línea Si se cuenta con una conexión a internet es mucho mejor utilizar la activación en línea en lugar de la activación manual porque es más rápido y requiere menos intervención del usuario. Cuando se elije la activación en línea, el Administrador de Licencias se conecta con IdeaSoft para solicitar el código de activación y el mismo se instala en forma automática. Por ello es que en algunos casos es necesario configurar las opciones de conexión. Esta configuración es similar a la que se hace en los navegadores de internet para que se pueda acceder a las páginas de Internet y lo que se debe especificar son los detalles del servidor proxy o firewall que generalemente se instala en las empresas como mecanismo de seguridad. Muchos de estos servidores además requieren autenticación. De ahí que también es posible configurar el usuario y la contraseña para estos servidores. Estos datos los puede proporcionar el Administrador de la red. En el caso de que la activación en línea no funcione porque no se pueda establecer una conexión con el servidor, se debe elegir "Activación Manual" y presionar siguiente. Se muestra el siguiente diálogo: Presionar Crear eMail, copiar contenido que se muestra en el dialogo y envíar a la casilla que se indica. Instalación de licencias sin terminal gráfica En el caso de instalar en un servidor que no disponga de terminal gráfica, es posible realizar la instalación y activación de las licencias en forma manual. Más detalles pueden encontrarse en Instalación y Activación de licencias por línea de comando Instalación de licencias en versiones anteriores a O3 5.0 Si su versión del producto es anterior, por favor consultar el proceso aquí HowTo Instalar O3 cambiando el directorio temporal IMPORTANTE: Este procedimiento fue probado con exito en la instalación con winXP y GNU/Linux, NO FUNCIONA EN LA INSTALACIÓN MULTIPLATAFORMA - al instalar de la forma java -jar <Directorio>O3Setup.jar en la pruebas realizadas no cambió el directorio temporal Procedimiento para plataforma WinXP 1. Abrir una consola DOS 2. Definir la variable de ambiente TMP SET TMP=C:\MiCarpeta 3. Ejectutar O3Setup.exe desde la línea de comando para que tome la nueva variable de ambiente Procedimiento para plataforma GNU/Linux 1. Abrir una consola 2. Defenir la variable de entorno IATEMPDIR IATEMPDIR=/<Nuevo_directorio>;export IATEMPDIR 3. Ejectutar O3Setup.bin desde la línea de comando para que tome la nueva variable de ambiente HowTo Instalar O3 en Suse 10.x PROBLEMA: Al intentar la instalación con el O3Setup.bin que está en la carpeta Linux, nos da error, no es posible la instalación. Esto se debe a que hay unas librerias que en la versión 10.x de suse no están por lo cual el instalador falla. Hay 2 posibles soluciones: Solución 1 Copiar a nuestro hd la carpeta del cd CDROM_Installers/Disk1/InstData/Suse10/VM/O3Setup.bin y ejecutar este .bin Solución 2 Hacer la instalación multiplataforma tal cual se describe en el manual En este caso se debe de tener en cuenta que hay que tener instalda la JVM HowTo Instalar O3 multiplataforma Consideraciones previas En que casos hacer la instalación multiplataforma: Cuando ya se tiene una JVM en la computadora y no se quiere agregar la que instala O3 por defecto Cuando para el sistema operativo que tenemos no hay instalador disponible (para GNU/Linux y Windows hay instaladores) Requerimientos para la instalación Es necesario para hacer la instalación multiplataforma disponer de la JVM en su computadora Recomendamos poner especial cuidado ver si la versión que tenemos es la adecuada al sistema operativo, por ej ver si es de 64bits o 32bits En la línea de comados escribir java -version y se obtiene algo como java version "1.5.0_06" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05) Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing) La version debe de ser mayor o igual a 1.5 para las versiones de O3 iguales a 4.2.x Visitar el sitio de sun para bajar la JVM Instalación En el CD de instalación copiar el archivo /Java/O3Setup.jar al directorio que deseamos (puede ser un temporal ya que luego se puede borrar el O3Setup.jar) como administradores del sistema en una consola escribir <path_a_jvm>/java -jar <directorio_O3Setup.jar>/O3Setup.jar si no se posee interfaz gráfica java -jar <directorio_O3Setup.jar>/O3Setup.jar -i console si se usa la jvm del sistema solo hacer java -jar <directorio_O3Setup.jar>/O3Setup.jar Continuar con la instalación en forma normal Luego de terminar la instalación Quedan por arreglar algunos archivos El archivo <O3>/sh/settings.sh o <O3>/bat/settings.bateditarlo con un editor de texto cualquiera buscar: JVMPATH=$INSTALL_DIR/jre JVM=$JVMPATH/bin/java comentar esas líneas y agregar #JVMPATH=$INSTALL_DIR/jre #JVM=$JVMPATH/bin/java JVM=<path_a_jvm>/java NOTA: si la JVM es la del sitema solo poner JVM=java Cambios para el Jboss En caso de usar el Jboss se requiere cambiar también algunos archivos más Buscar <O3>/sh/jboss.sh o <O3>/bat/jboss.bat y editarlo con cualquier editor de texto Dentro del archivo buscar CLASSPATH=. # Uncomment this line and change the location of the JDK JAVA_HOME="$INSTDIR/../jre" y substituir por JAVA_HOME=<path_al_directorio_de _jvm> en general este path debe de ser hasta llegar al directorio donde estan entre otras carpetas bin del jvm y por último buscar <O3>/jre/lib/Tool.jar y agregarlo en <path_al_directorio_de _jvm>/lib , si no existe /lib crearlo HowTo JBoss como Servicio en Linux Una vez instalado y en funcionamiento O3, realizar los siguientes pasos: 1.En caso que nuestro sistema inicie en runlevel 3 (sistemas basados en debian lo hacen en runlevel 2), en la carpeta /etc/init.d/rc3.d crear un link simbólico al srcipt /etc/init.d/jbossservice.sh de nombre S99o3JBossservice y otro de nombre K99o3JBossservice La línea de comando para crear S99o3JBossservice es la siguiente parado en /etc/init.d/rc3.d ln -s <O3_HOME>/sh/jbossservice.sh S99o3JBossservice ln -s <O3_HOME>/sh/jbossservice.sh K99o3JBossservice El numero "99" que figura en el nombre indica el orden de inicialización del script al iniciarGNU/Linux, puede ser cualquier número, pero tiene que ser el mismo en ambos links. 2. Repetir el paso 2 si quisieramos que además Jboss iniciara en otro runlevel por ejemplo 5 (típico en Suse por ej) 3. Ahora sólo resta probar que funciona. Para eso, reiniciar GNU/Linux, levantar por ejemplo un O3Browser y abrir un cubo del servidor. How To migrar versiones Dependiendo de la versión de O3 que se desea migrar el proceso presenta algunas variantes. Es importante verificar exactamente cuál es la versión que se desea migrar y seguir las instrucciones de acuerdo al siguiente cuadro. Versión anterior Versión Nueva Instrucciones O3 5.x O3 5.x.x Ver Instrucciones O3 5.0 o 5.1.x O3 5.2 Ver Instrucciones O3 4.3.x O3 5.0.x Ver Instrucciones O3 4.1.x o 4.2.x O3 5.0.x Ver Instrucciones Consideraciones de Interés Consideraciones a tener en cuenta al pasar configuración a Base de Datos Instalación manual de JBoss como servicio en Windows A continauación se detallan las instrucciones para instalar el JBoss distribuido con O3 como servicio en plataformas Microsoft (NT, W2000, WXP, W2003) Si bien esto no es necesario ya que este paso es ejecutado por el instalador, se han detectado casos en los que es necesaria su ejecución manual, por ejemplo en algunas instalaciones sobre W2003 Primera solución Ir a la carpeta : <o3>\UninstallerData\resource ejecuta el comando invoker de la siguiente forma: invoker install service_name service_label executable [start_type [interactive priority]] parámetros que le vamos a pasar 1. 2. 3. 4. 5. 6. service_name the name used internally by the SCM service_label the display name that appears in the Services Control Panel. For multiple words, put them in double quotes. executable the full path to the EXE start_type (manual, automatic, or disabled) the service startup type (defaults to manual) interactive (true or false) can the service interact with the desktop? (defaults to false) priority (low, normal or high) set the priority of the service process (defaults to normal) Para una instalación típica esto quedaría de la siguiente forma: C:\Ideasoft\O3\UninstallerData\resource>invoker.exe install O3JBoss "O3JBoss Application Server" "C:\IdeaSoft\O3\bin\JBoss.exe -zglaxservice O3JBoss" automatic false normal Para desinstalar el servicio alcanza con ejecutar: C:\Ideasoft\O3\UninstallerData\resource>invoker.exe remove "O3JBoss Application Server" Segunda solución Para ello se debe bajar el zip JBossService.zip incluido en esta página que contiene el ejecutable que permite instalar y ejecutar el servicio. Luego seguir los siguientes pasos: 1. 2. 3. 4. Copiar los archivos que están en el zip en la carpeta <O3 HOME>\bin Abrir una consola DOS Ubicarse en la carpeta <O3 HOME>\bin Ejecutar lo siguiente: JBossService -install El servicio queda instalado. Para desinstalar el servicio alcanza con ejecutar JBossService -remove Respaldar la Instalación de O3PS Ante la necesidad de reinstalar el O3PS, y conociendo que la instalación suele durar unos minutos, pero su puesta a punto puede tener un tiempo muy variable de minutos a horas; como así mismo a las vistas, escritorios, reglas y otros elementos que hayamos definido y diseñado, nos es importante tener un respaldo. En algunos casos, determinados progamas de respaldo se interrumpen ante el bloqueo que el O3Server tiene sobre algunos archivos. Por lo tanto, presentamos los directorios y archivos necesarios a respaldar, y que con solo la instalación del O3PS y restauración de estos archivos y directorios tendremos funcionando el O3Server sin inconvenientes. Directorios y Archivos a respaldar Teniendo en cuenta que <O3> es el path donde está instalado el O3PS: <O3>/bat <O3>/bin <O3>/jboss/server/default/ideasoft-o3/server <O3>/jboss/server/default/ideasoft-o3/O3Server.cfg <O3>/jboss/server/default/ideasoft-o3/GServer.properties <O3>/jboss/server/default/data/hypersonic/default.script <O3>/classes/jdbc <O3>/jboss/server/default/lib <O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/ <O3>/jboss/server/default/deploy/mail-service.xml <O3>/jboss/server/default/conf/jboss-service.xml <O3>/jboss/server/default/deploy/liferay.war/WEB-INF/classes/portal-ext.properties Agregar a esta lista aquellos archivos y/o directorios que por alguna configuración particular hayan sido modificados por el usuario. Si se tiene en base de datos la información del admserver y/o los usuarios El datasource que está en <o3>/jboss/server/default/gserver/gserver-???-ds.xml Si se cambió el puerto del tomcat <O3>/jboss/server/default/deploy/jboss-web.deployer/server.xml Si hubiera sido personalizada para conectarse con un servidor LDAP: El xml correspondiente que está en <O3>jboss\server\default\ideasoft-o3\config\rbac Configuración de O3 Configuración de O3 Documentos con guías para la configuración de O3 en distintos escenarios. Secciones Secciones ¿Cómo cambiar los data sources de O3 y Enterprise Portal? Configuracion de firewall en versión mayor o igual a O3v4.3 Configurando O3 a través de un Firewall Configurando O3 a través de un NAT Configurando O3 a través de un Proxy Eligiendo Idioma, Región, Zona Horaria para O3 HowTo configurar programaciones con base de datos HowTo O3 Process HowTo O3 Properties HowTo Seguridad de O3 en LDAP y Active Directory HowTo Server con multiples tarjetas de red Instalando O3 Portal en otros servidores Web Memory Management O3 How-to Optimizacion Single Sign-On ¿Cómo cambiar los data sources de O3 y Enterprise Portal? Uso Este wiki aplica únicamente a instalaciones de O3 5.0 y posteriores que tienen almacenada la configuración de O3 y Enterprise Portal en base de datos (distinta de Hypersonic) y se requiere mover dichas bases a otro servidor. Por el contrario, si lo que se requiere es migrar instalaciones completas de O3, dirgirse a: Migración entre Versiones de O3. Contexto Configuración de O3 y de Enterprise Portal almacenadas en base de datos. Si surge la necesidad de cambiar de servidor de base de datos de un equipo a otro, se deberán migrar los datos y cambiar también los data sources de O3 para que apunten a la nueva ubicación de las bases de O3 y de Enterprise Portal. Procedimiento Resumen: 1. Mover las bases O3 y O3EP. 2. Detener servidor de O3. 3. Cambiar data source de O3. 4. Cambiar data source de Enterprise Portal. 5. Iniciar servidor de O3. Se detalla el procedimiento asumiendo que la base de datos que contiene la configuración de O3 se llama O3, y la que contiene la configuración del Enterprise Portal se llama O3EP. 1. Mover las bases O3 y O3EP (tablas, datos, etc) con el migrador que provea el propio servidor de base de datos. Mantener el nombre original de las bases para simplificar el procedimiento. 2. Detener servidor de O3. 3. Cambiar data source de O3. En <Instalación O3>\jboss\server\default\deploy\gserver se encuentra el archivo gserver-hsql-ds.xml (este nombre puede haber cambiado si ya se trabajaba con otra base de datos, por ejemplo gserver-sqlserver-ds.xml). Copiar el archivo y al original agregarle un # (de forma que quede respaldado como #gserver-hsql-ds.xml). Editar la copia con cualquier editor de texto. Se puede utilizar como ejemplo de consulta el archivo <Instalación O3>\jboss\docs\examples\jca\mssql-ds.xml. Los tags a modificar son: <connection-url> Indica la url del servidor de base de datos, incluye ip o nombre del servidor, puerto de conexión habitual y nombre de la base de datos. Ejemplo para SQL Server: <connection-url>jdbc:sqlserver://localhost:1433;DatabaseName=O3</connection-url> <driver-class> Clase para conexión jdbc a la base de datos. Ejemplo para SQL Server: <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class> <user-name> Usuario para efectuar la conexión, con permisos de lectura sobre la base de datos. <password> Contraseña del usuario. NO se debe modificar el tag <jndi-name>. 4. Cambiar datasource de Enterprise Portal. Los pasos son similares a los de O3, pero el data source se encuentra en el directorio <Instalación O3>\jboss\server\default\deploy, con el nombre liferay-hsqldb-ds.xml (o similar). Respaldar el archivo original agregandole # al nombre y modificar la copia. Se puede utilizar como ejemplo de consulta el archivo <Instalación O3>\jboss\docs\examples\jca\mssql-ds.xml. Los tags a modificar son: <connection-url> Ejemplo para SQL Server: <connection-url>jdbc:sqlserver://localhost:1433;DatabaseName=O3EP</connection-url> <driver-class> la misma que se utilizó para O3. <user-name> Usuario para efectuar la conexión, con permisos de lectura sobre la base de datos. <password> Contraseña del usuario 5. Iniciar el servidor de O3. Configuracion de firewall en versión mayor o igual a O3v4.3 Los puertos que hay que abrir en un firewall a partir de la version 4.3 de O3 son los siguientes: Puerto Descripción 1099 JNDI 1098 JNDI 3455 EJB3 3873 EJB3 a través de RMI 4446 JWF 5744 RMI IdeaSoft 8080 TOMCAT 8093 JMS 14000 jboss messaging Si se desea usar O3 con el portal unicamente, se debe de abrir solo el puerto 8080, los restantes no son necesarios abrirlos en el firewall Se deden agregar las siguientes properties al <O3>/jboss/server/default/ideasoft-o3/GServer_custom.properties de O3 de modo que quede fijo el puerto para RMI Ideasoft: ideasoft.server.rmi.socketfactory=true ideasoft.server.rmi.serversocket.port=5744 A partir de la versión 5.3.000 se debe editar el archivo <O3>/jboss/server/default/ports-bindings.xml y buscar para el juego de puertos (01-02-03...) la parte de jboss messaging, dentro de esa parte buscar <attribute name="callbackTimeout">10000</attribute> y modificar <attribute name="callbackTimeout">10000</attribute> <attribute name="secondaryBindPort">14000</attribute> En el caso de cambiar la configuración de bindings del JBoss , cambiar en el firewall estos puertos: Descripción Ports-01 Ports-02 Ports-03 Ports-04 Ports-05 JNDI 1199 1299 1399 1499 1599 JNDI 1198 1298 1398 1498 1598 EJB3 3555 3655 3755 3855 3955 EJB3 a través de RMI 3973 4073 4173 4273 4373 JWF 4546 4646 4746 4846 4946 TOMCAT 8180 8280 8380 8480 8580 JMS 8193 8293 8393 8493 8593 El puerto 5744 no se cambia automáticamente por el archivo de bindings, sino que su valor se especifica en el archivo GServer_custom.properties El puerto 14000 no cambia se debe agregar la línea con el puerto en el ports-bindings.xml Indicación temporal para la version 4.3.beta3 Es necesario modificar el port-bindings, para cambiar el acceso remoto de socket a rmi, para el caso de ports-01 debe quedar asi: <service-config name="jboss.remoting:type=Connector,name=DefaultEjb3Connector,handler=ejb3" delegateClass="org.jboss.services.binding.AttributeMappingDelegate"> <delegate-config> <attribute name="InvokerLocator">rmi://${jboss.bind.address}:3973/?registryPort=3555</attribute> </delegate-config> <binding port="3973"/> </service-config> Configurando O3 a través de un Firewall Configurando O3PS a través de un Firewall Be Careful Para versiones menores a la 4.3 hacer clic aquí Los puertos que hay que abrir en un firewall a partir de la version 4.3 de O3 son los siguientes: Puerto Descripción 1099 JNDI 1098 JNDI 3455 EJB3 3873 EJB3 a través de RMI 4446 JWF 5744 RMI IdeaSoft 8080 TOMCAT 8093 JMS 14000 jboss messaging Nota Si se desea usar O3 con el portal únicamente, se debe de abrir solo el puerto 8080, los restantes no son necesarios abrirlos en el firewall Se deden agregar las siguientes properties al <O3>/jboss/server/default/ideasoft-o3/GServer_custom.properties de O3 de modo que quede fijo el puerto para RMI Ideasoft: ideasoft.server.rmi.socketfactory=true ideasoft.server.rmi.serversocket.port=5744 A partir de la versión 5.3.000 se debe editar el archivo <O3>/jboss/server/default/ports-bindings.xml y buscar para el juego de puertos (01-02-03...) la parte de jboss messaging, dentro de esa parte buscar <attribute name="callbackTimeout">10000</attribute> y modificar <attribute name="callbackTimeout">10000</attribute> <attribute name="secondaryBindPort">14000</attribute> En el caso de cambiar la configuración de bindings del JBoss , cambiar en el firewall estos puertos: Descripción Ports-01 Ports-02 Ports-03 Ports-04 Ports-05 JNDI 1199 1299 1399 1499 1599 JNDI 1198 1298 1398 1498 1598 EJB3 3555 3655 3755 3855 3955 EJB3 a través de RMI 3973 4073 4173 4273 4373 JWF 4546 4646 4746 4846 4946 TOMCAT 8180 8280 8380 8480 8580 JMS 8193 8293 8393 8493 8593 El puerto 5744 no se cambia automáticamente por el archivo de bindings, sino que su valor se especifica en el archivo GServer_custom.properties El puerto 14000 no cambia se debe agregar la línea con el puerto en el ports-bindings.xml Indicación temporal para la version 4.3.beta3 Es necesario modificar el port-bindings, para cambiar el acceso remoto de socket a rmi, para el caso de ports-01 debe quedar asi: <service-config name="jboss.remoting:type=Connector,name=DefaultEjb3Connector,handler=ejb3" delegateClass="org.jboss.services.binding.AttributeMappingDelegate"> <delegate-config> <attribute name="InvokerLocator">rmi://${jboss.bind.address}:3973/?registryPort=3555</attribute> </delegate-config> <binding port="3973"/> </service-config> Configuración de firewall en versión menor a O3v4.3 Cómo funciona el Servidor O3 con jboss requiere de cinco puertos TCP/IP diferentes para establecer la comunicación entre el Servidor y los componentes Cliente. Tres de ellos son fijos, el 1099, 1098 usados por O3, y el puerto 4444 por jboss. Los otros puertos TCP/IP son puertos escogidos en forma dinámica y al azar. Esto significa que el O3 Server escoge dos puertos disponibles cuando es iniciado. Para establecer la comunicación a través de un Firewall, O3 debe ser configurado de tal forma que estos dos puertos sean conocidos de antemano. Esto es necesario para poder configurar el Firewall correctamente habilitando estos puertos para que la comunicación sea exitosa. Cómo configurar el O3 Server El O3 Server debe ser configurado mediante la especificación de las siguientes propiedades del sistema Nombre de la propiedad Descripción ideasoft.server.rmi.serversocket.port Indica el puerto que deberá ser utilizado para establecer la conexión con el Servidor. Este puerto es en realidad el primer puerto que será elegido. Si el O3 Server requiere de nuevos puertos tomará el puerto a continuación y así sucesivamente. Esto significa que es recomendable habilitar este puerto así como un pequeño rango a continuación de éste en el Firewall ideasoft.server.callbacks.port Indica el puerto que será utilizado por el O3 Server para los callbacks. Esto ocurre cuando el O3 Server debe enviar un mensaje hacia el cliente ideasoft.server.rmi.socketfactory Habilita o deshabilita el conjunto anterior de propiedades. Esta propiedad tiene el valor "false" por defecto y debe ser cambiado a "true" para permitir la comunicación a través de un Firewall ideasoft.server.rmicallbacks Habilita o deshabilita los callbacks utilizando RMI. Esta propiedad tiene el valor "true" por defecto y debe ser cambiado a "false" para permitir la comunicación a través de un Firewall Estas propiedades deben ser especificadas en el archivo llamado GServer.properties que se encuentra en la ruta <O3>/jboss/Server/default/ideasoft-o3. Para versiones 3.x este archivo se encuentra directamente en la raiz de la instalación del O3 Server A continuación se muestra un ejemplo de cómo quedaría el archivo GServer.properties ideasoft.server.rmi.serversocket.port=4744 ideasoft.server.callbacks.port=4555 ideasoft.server.rmi.socketfactory=true ideasoft.server.rmicallbacks=false Adicionalmente, la siguiente propiedad debe ser especificada para indicar el nombre que deberán utilizar las herramientas del cliente para ubicar al O3 Server java.rmi.server.hostname=www.ideasoft.biz Notar que el valor indicado en esta propiedad es simplemente un ejemplo. En un caso real su valor deberá ser igual a la dirección IP o nombre de la máquina servidor donde se encuentra el O3 Server Con este ejemplo mostrado arriba, el Firewall deberá ser configurado para que los puertos 1099, 1098, 4444, 4555 y 4744 estén habilitados. Estos puertos deberán ser abiertos sólo para accesos de entrada. El servidor no intenta conexiones directas a los clientes. Tal como se indica en los párrafos anteriores, estas propiedades deben ser indicadas en el archivo GServer.properties que se encuentra en la raíz de la instalación del O3 Server. Esto es válido para versiones 3.0 o posteriores. Versiones anteriores de O3 requieren que estos valores se indiquen en un archivo llamado o3server.properties. Este archivo no se incluye con O3 y debe ser creado. (notar que el nombre es sensible a mayúsculas y minúsculas) Nota A pesar que la propiedad java.rmi.server.hostname no está directamente relacionada con la ejecución de O3 a través de un Firewall, normalmente los servidores donde se instala O3 poseen 2 direcciones IP (una interna para la Intranet y otra externa para Internet).Este tipo de situaciones requieren que se indique esta propiedad para asegurarse que el O3 Server procesa los pedidos de los clientes en forma correcta. De no indicarse, al momento de iniciar el O3 Server elige una de estas direcciones IP y sólo aceptará pedidos a dicha dirección, rechazando el resto de los pedidos.Es importante recalcar que la dirección IP o nombre que se indique en esta propiedad debe corresponder a una dirección accesible tanto desde fuera (Internet) como desde adentro (Intranet). Esto se logra configurando correctamente el DNS. Configurando O3 a través de un NAT Situación Es bastante común que el servidor de O3 no sea la máquina que está expuesta a la red, usualmente está detrás de un firewall. El problema se plantea cuando queremos entrar en forma remota al server, por ejemplo para administralo o navegar cubos con el O3Browser. Para lograr esto debemos hacer NAT de los puertos de O3. Para el O3Web no es necesario este trabajo de configuración. Consideraciones previas Dado la complejidad de la configuración, es necesario que O3 trabaje en el juego de puerto por defecto, no pudiendose cambiar o otro juego sin un trabajo bastante complicado que escapa a este tutorial. Procedimiento Bajar el jboss Editar el archivo <o3>/jboss/server/default/conf/jboss-service.xml y Buscar (en instalaciones nueva debería esta aprox línea 190) <mbean code="org.jboss.services.binding.ServiceBindingManager" name="jboss.system:service=ServiceBindingManager"> <attribute name="ServerName">ports-default</attribute> <attribute name="StoreURL">${jboss.server.home.url}/port-bindings.xml</attribute> <attribute name="StoreFactoryClassName">org.jboss.services.binding.XMLServicesStoreFactory</attribute> </mbean> Comentar todo, con esto hacemos que JBoss use el juego de puertos por defecto <!--mbean code="org.jboss.services.binding.ServiceBindingManager" name="jboss.system:service=ServiceBindingManager"> <attribute name="ServerName">ports-default</attribute> <attribute name="StoreURL">${jboss.server.home.url}/port-bindings.xml</attribute> <attribute name="StoreFactoryClassName">org.jboss.services.binding.XMLServicesStoreFactory</attribute> </mbean--> Editar el archivo <o3>/jboss/server/default/deploy/ejb3.deployer/META-INF/jboss-service.xml Buscar: <mbean code="org.jboss.remoting.transport.Connector" name="jboss.remoting:type=Connector,name=DefaultEjb3Connector,handler=ejb3"> <depends>jboss.aop:service=AspectDeployer</depends> <attribute name="InvokerLocator">rmi://${jboss.bind.address}:3873</attribute> <handlers> <handler subsystem="AOP">org.jboss.aspects.remoting.AOPRemotingInvocationHandler</handler> </handlers> </mbean> Comentamos <!--mbean code="org.jboss.remoting.transport.Connector" name="jboss.remoting:type=Connector,name=DefaultEjb3Connector,handler=ejb3"> <depends>jboss.aop:service=AspectDeployer</depends> <attribute name="InvokerLocator">rmi://${jboss.bind.address}:3873</attribute> <handlers> <handler subsystem="AOP">org.jboss.aspects.remoting.AOPRemotingInvocationHandler</handler> </handlers> </mbean--> Cortamos y pegamos el siguinete código acontinuación del anterior: <!-- The following is sample configuration for modifying the Connector--> <mbean code="org.jboss.remoting.transport.Connector" name="jboss.remoting:type=Connector,name=DefaultEjb3Connector,handler=ejb3"> <depends>jboss.aop:service=AspectDeployer</depends> <attribute name="Configuration"> <config> <invoker transport="rmi"> <attribute name="numAcceptThreads">1</attribute> <attribute name="maxPoolSize">300</attribute> <attribute name="clientMaxPoolSize" isParam="true">50</attribute> <attribute name="timeout" isParam="true">0</attribute> <attribute name="serverBindAddress">${jboss.bind.address}</attribute> <attribute name="serverBindPort">3873</attribute> <!-- líneas agregadas--> <attribute name="clientConnectAddress">mi_webaddress.com</attribute> <attribute name="clientConnectPort">3873</attribute> <!-- líneas agregadas--> <attribute name="backlog">200</attribute> </invoker> <handlers> <handler subsystem="AOP">org.jboss.aspects.remoting.AOPRemotingInvocationHandler</handler> </handlers> </config> </attribute> </mbean> El valor de mi_webaddess.com debe ser el nombre (DNS) con que se ve nuestro sitio Editar el archivo <o3>/jboss/server/default/deploy/jms/uil2-service.xml Buscar: <mbean code="org.jboss.mq.il.uil2.UILServerILService" name="jboss.mq:service=InvocationLayer,type=UIL2"> <!-- The server chain --> <depends optional-attribute-name="Invoker">jboss.mq:service=Invoker</depends> <!-- JNDI binding --> <attribute name="ConnectionFactoryJNDIRef">ConnectionFactory</attribute> <!-- JNDI binding for XA --> <attribute name="XAConnectionFactoryJNDIRef">XAConnectionFactory</attribute> <!-- The bind address --> <attribute name="BindAddress">${jboss.bind.address}</attribute> <!-- The bind port --> <attribute name="ServerBindPort">8093</attribute> <!-- The ping period in millis --> <attribute name="PingPeriod">60000</attribute> <!-- Whether tcp/ip does not wait for buffer fills --> <attribute name="EnableTcpNoDelay">true</attribute> <!-- Used to disconnect the client on the serverside if there is no activity --> <!-- Ensure this is greater than the ping period --> <attribute name="ReadTimeout">120000</attribute> <!-- Used to disconnect the client on the clientside if there is no activity --> <!-- Ensure this is greater than the ping period --> <attribute name="ClientReadTimeout">120000</attribute> <!-- The size of the buffer (in bytes) wrapping the socket --> <!-- The buffer is flushed after each request --> <attribute name="BufferSize">2048</attribute> <!-- Large messages may block the ping/pong --> <!-- A pong is simulated after each chunk (in bytes) for both reading and writing --> <!-- It must be larger than the buffer size --> <attribute name="ChunkSize">1000000</attribute> </mbean> Agregar un linea <mbean code="org.jboss.mq.il.uil2.UILServerILService" name="jboss.mq:service=InvocationLayer,type=UIL2"> <!-- The server chain --> <depends optional-attribute-name="Invoker">jboss.mq:service=Invoker</depends> <!-- JNDI binding --> <attribute name="ConnectionFactoryJNDIRef">ConnectionFactory</attribute> <!-- JNDI binding for XA --> <attribute name="XAConnectionFactoryJNDIRef">XAConnectionFactory</attribute> <!-- The bind address --> <attribute name="BindAddress">${jboss.bind.address}</attribute> <!-- The bind port --> <attribute name="ServerBindPort">8093</attribute> <!-- The ping period in millis --> <attribute name="PingPeriod">60000</attribute> <!-- Whether tcp/ip does not wait for buffer fills --> <attribute name="EnableTcpNoDelay">true</attribute> <!-- Used to disconnect the client on the serverside if there is no activity --> <!-- Ensure this is greater than the ping period --> <attribute name="ReadTimeout">120000</attribute> <!-- Used to disconnect the client on the clientside if there is no activity --> <!-- Ensure this is greater than the ping period --> <attribute name="ClientReadTimeout">120000</attribute> <!-- The size of the buffer (in bytes) wrapping the socket --> <!-- The buffer is flushed after each request --> <attribute name="BufferSize">2048</attribute> <!-- Large messages may block the ping/pong --> <!-- A pong is simulated after each chunk (in bytes) for both reading and writing --> <!-- It must be larger than the buffer size --> <attribute name="ChunkSize">1000000</attribute> <!-- líneas agregada--> <attribute name="ConnectAddress">mi_webadddess.com</attribute> <!-- líneas agregada--> </mbean> Criterio identico para mi_webaddress Debemos hacer que la máquina se vea así misma con mi_webaddress pare el caso de estar GNU/Linux editar el /ete/hosts de modo que tenga la siguiente línea ip_del_server DNS_externo(mi_webaddess) Abrir en el firewall y hacer NAT de los siguientes puertos: Puerto Descripción 1099 JNDI 1098 JNDI 3455 EJB3 3873 EJB3 a través de RMI 4446 JWF 5744 RMI IdeaSoft 8093 JMS Levantar el JBoss Configurando O3 a través de un Proxy Configurando para ver O3 detrás de un proxy Atención este wiki es válido solo para versiones 5.x Problema Al intentear loguerno desde internet, llegamos a la página de logueo, pero luego de compeltar los datos y apretar entrar nos devuelve una página en blanco. Solución El problema se da con el CAS (single sign on). Precisamos decirle dende se tiene que buscar a si mismo, para ello editamos el archivo <o3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/WEB-INF/web.xml buscar <filter> <filter-name>checkLoginFilter</filter-name> <filter-class>com.ideasoft.cs.ejb.cas.filter.CASFilter</filter-class> <init-param> <param-name>logout_url</param-name> <param-value>/cas/logout</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name> <param-value>${request.prefix}/cas/login</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> <param-value>${request.prefix}/cas/proxyValidate</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name> <param-value>${request.serverName}</param-value> </init-param> </filter> remplazar <param-value>${request.prefix}/cas/proxyValidate</param-value> por <param-value>http://localhost:8080/cas/proxyValidate</param-value> Atención Cambiar el puerto al que corresponda si se hizo cambio de puerto Si tenemos el componente REPORT Si tenemos licenciado el Report deberemos además hacer lo mismo pero en el archivo: <o3>/jboss/server/default/deploy/o3report.war/WEB-INF/web.xml Si tenemos el componente ePortal Si tenemos licenciado el ePortal deberemos además hacer lo mismo pero en el archivo: <o3>/jboss/server/default/deploy/liferay.war/WEB-INF/classes/portal-ext.properties buscar cas.validate.url=http://${o3.cas.server.host}/cas/proxyValidate y cambiar por cas.validate.url=http://localhost:8080/cas/proxyValidate el puerto poner el que corresponda Eligiendo Idioma, Región, Zona Horaria para O3 Configurando el idioma, región y zona horaria de la interfaz gráfica de O3 Todos los componentes de O3 incluyen soporte de múliples idiomas. Cuando se ejecuta O3 se determina el idioma y región indicado en la configuración regional de la máquina (comunmente llamada locale) y en el caso de ser alguno de los idiomas indicados antes O3 se ajusta en forma automática para dicho idioma. En el caso de los separadores de miles y decimales Java y en consecuencia O3 toma para la configuración de los mismos la región, sin importar los definidos por nostros. Por lo cual si queremos cambiar esto deberemos de hacerlo por properties. Sin embargo, es posible configurar en forma manual cuál de los idiomas utilizar y como son los separadores de miles y decimeles. Esta tablita muestra los idiomas soportados junto con su identificador. Idioma Identificador Español es Inglés en Portugués pt Italiano it Esta otra muestra las regiones que definen los separadores de miles y decimeles Región Separadores Identificador Uruguay miles - punto decimales - coma uy Mexico miles - coma decimales - punto mx Para cambiar el valor de Time Zone cuando Java no interpreta el definido en el Sistema Operativo. Dependiendo de la forma en que se ejecuta O3 (ejecutables de la carpeta bin, o scripts de la carpeta bat/sh) se deben seguir las siguientes instrucciones: Usando scripts de la carpeta bat o sh (windows o linux respectivamente) Cada módulo de O3 cuenta con un script en la carpeta bat o sh que se utiliza para ejecutarlo. Estos archivos incluyen una sección en la que se definen una serie de variables de ambiente que son luego utilizadas como parámetros del proceso java que ejecuta el módulo de O3. No es necesario cambiar o poner las 2 properties, dependerá de las necesidades Ejemplo para archivos .bat Por ejemplo para configurar el O3 Browser se debe localizar la siguiente sección del archivo Browser.bat rem Add Application System Properties set PROPERTIES=%PROPERTIES% -mx200M A esta sección se le debe agregar una nueva línea de modo que quede de la siguiente forma rem set set set set Add Application System Properties PROPERTIES=%PROPERTIES% -mx200M PROPERTIES=%PROPERTIES% -Duser.language=XX PROPERTIES=%PROPERTIES% -Duser.region=YY PROPERTIES=%PROPERTIES% -Duser.timezone=ZZ Donde XX corresponde al identificador del idioma Donde YY corresponde al identificador de región Donde ZZ corresponde al valor de la zona horaria Ejemplo para archivos .sh Por ejemplo para configurar el O3 Browser se debe localizar la siguiente sección del archivo Browser.sh # Add Application System Properties PROPERTIES="$PROPERTIES -mx200M" A esta sección se le debe agregar una nueva línea de modo que quede de la siguiente forma # Add Application System Properties PROPERTIES="$PROPERTIES -mx200M" PROPERTIES="$PROPERTIES -Duser.language=XX" PROPERTIES="$PROPERTIES -Duser.regiom=YY" PROPERTIES="$PROPERTIES -Duser.timezone=ZZ" Donde XX corresponde al identificador del idioma Donde YY corresponde al identificador de región Donde ZZ corresponde al valor de la zona horaria Usando ejecutables de la carpeta bin De forma similar al caso anterior, módulo de O3 cuenta con un ejecutable en la carpeta bin acompañado por un archivo con extensión .lax que sirve para configurarlo. Para configurar el idioma de cada uno de estos módulos es necesario localizar la línea similar a la siguiente: lax.nl.java.option.additional=-Xmx100m -Djava.library.path=C:\\IdeaSoft\\O3\\classes\\bin y agregarle la configuración del idioma -Duser.language=XX donde XX y/o la región -Duser.region=YY donde YY corresponde al identificador del región; y/o la zona horaria -Duser.timezone=ZZ donde ZZ corresponde al valor de la zona horaria. Esta línea quedará entonces de la siguiente forma: lax.nl.java.option.additional=-Xmx100m -Duser.language=XX -Duser.region=YY -Duser.timezone=ZZ -Djava.library.path=C:\\IdeaSoft\\O3\\classes\\bin Para el jboss.sh En el caso del jboss.sh la modificación es diferente, buscar las siguientes líneas JAVA_OPTS="-server -Xms128m -Xmx512m" JAVA_OPTS="$JAVA_OPTS -XX:MaxPermSize=128m" JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true" y agregarles : JAVA_OPTS="-server -Xms128m -Xmx512m" JAVA_OPTS="$JAVA_OPTS -XX:MaxPermSize=128m" JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true" JAVA_OPTS="$JAVA_OPTS -Duser.language=XX" JAVA_OPTS="$JAVA_OPTS -Duser.region=YY" Para cuando se baja por JWS Procedimiento: 1. 2. 3. 4. 5. 6. 7. ir al directorio donde está instalado O3 de ahí ir al directorio jboss/server/default/deploy/gserver/Oo3.ear localizar el archivo o3-installer-X.X.XXX.war y renombrarlo ej #o3-installer-X.X.XXX.war (puede variar el número de acuerdo a la versión) crear ahí mismo una carpeta con el nombre o3-installer-X.X.XXX.war descomprimir el archivo o3-installer-X.X.XXX.war en la carpeta creada localizar el archivo o3-installer.jnlp, y abrirlo con un editor de texto agregar las siguientes property en la parte correspondiente (casi al final del archivo) <property name="user.language" value="XX"> </property> <property name="user.region" value="YY"> </property> <property name="user.timezone" value="ZZ"> </property> 8. reiniciar el jboss y volver a correr la aplicación HowTo configurar programaciones con base de datos Escenario Se quiere usar una base de datos para la persistencia de los proceso de Workflow de la herramienta O3 y persistencia de usuarios. Estamos en una instalación nueva. Procedimiento 1. 2. 3. 4. Instalar O3PS Levantar el AdmServer Colocar licencias Ir al Wizard de migración y elegir Usar una base distinta a la incluida en O3. a. Elegir el Motor de BD adecuado b. Completar datos y testar la conexión, puede que para algunas bases de datos haya que proveer el driver correspondiente. El driver se debe colocar en 2 lugares: * en <o3>classes/jdbc * en <o3>/jboss/server/default/lib c. Apretar el botón de siguiente d. Apretar el botón de siguiente nuevamente e. En la última pantalla elegimos Habilitar el uso de la base de datos 5. En caso de elegir MySQL como motor hay que hacer una corrección para evitar un bug del driver, editar el ds de mysql, debería estar en <o3>/jboss/server/default/deploy/gserver/gserver-mysql-ds.xml.Dejar <connectinon-url> del siguiente modo: <connection-url>jdbc:mysql://Nombre_del_server:3306/base_de_o3?useOldAliasMetadataBehavior=true</connection-url> 6. Para el caso de estar en la versión 5.1.100: a. Entrar mysql y cambiar en la tabla cubebuilderdef el id que se autonumérico b. Entrar mysql y cambiar en la tabla namedcron el id que se autonumérico c. Entrar mysql y cambiar en la tabla reportcastdef el id que se autonumérico 7. Levantar jboss 8. Ir al browser Archivo->Procesos->Abrir Proceso a. Elegir carpeta <o3>/files/Process b. Elegir archivo CronBuilder.xml y aceptar 9. Ir Publicación->Enviar definición al servidor (hay que haber elegido la ventana con el proceso) 10. Ir de nuevo a Publicación->cambiar estado, hay que cambiarlo a testing 11. Ir de nuevo a Publicación->cambiar estado, hay que cambiarlo a producción 12. Ir Archivos->Procesos->Bandeja de entrada 13. 13. Estando en la bandeja de entrada ir a Pendientes->crear instancia del proceso a. elegir el cronbuilder 14. Repetir pasos 8 a 11 para el O3Builer.xml, no hay que crear una instancia del O3Builder ya que el CronBuilder se encargará de ello. Con esto quedaría todo pronto para empezar a crear crons para la construcción de cubos Administrando los procesos Los procesos creados deben ser administrados desde 2 componentes del browser Bandeja de entrada WAdmin Bandeja de entrada Para abrir la bandeja Archivos->Procesos->Bandeja de entrada En la imagen vemos que hay 1 tarea pendiente en la parte izquierda, pero en la medida que coloquemos diferente cubos/reportes para construir/enviar aparecerán otras tareas pendientes. Builder schedule Esta tarea es la encargada de cada 10 minutos chequea que no se haya agregado otro cubo/reporte para crearle la instancia correspondiente. Cuando nos paramos en esta tarea pendiente vemos que su actividad actual es Wait for expiration. Supongamos que en el admserver le decimos que el cubo Demo se va a construir en forma automática, luego de aplicar veríamos esto en la bandeja de entrada. La construcción del cubo demo es ahora una tarea pendiente más (Process Executor). Si nos paramos en esta tarea veremos que esta Wait for execution. Esto es que está esperando ser realizada. WAdmin Este componente nos permite ver todos los procesos y sus estados respectivos, además nos permite cambiar esos estados. En Archivos->Procesos->WAdmin Para buscar el proceso la forma más fácil es filtrando, para ello apretamos el botón con una lupa que esta en la parte "Definición del proceso". Nos aparecerá la pantalla que se ve en la imagen de arriba. Seleccionamos el proceso u1- Producción dentro de O3Builder. y aceptamos Luego apretamos el botón de buscar Veremos una lista del estilo: Como ya dijéramos se ven todo los proceso, los pendientes, los cerrados, etc. En la imagen se ve uno pendiente y dos cerrados. Cancelar un proceso pendiente Si por alguna razón quisiéramos cancelar el proceso pendiente (estado en Proceso) debemos cliquearlo y luego apretar el botón GoTo de la barra de herramientas. Se despliega una pantalla con un combo activity, elegir final activity Activar un proceso cerrado Del mismo modo si quisiéramos activar un proceso cerrado, seleccionamos en el combo Initial Activity Hacer que CronBuilder se ejecute antes de los 10 minutos Muchas vecese queremos estar seguros que la construcción de un cubo quedó agendada y no queremos esperar a que el cron builder espere el tiempo establecido. Para ello en definición de procesos elegimos cron builder y luego buscamos. Lo seleccionamos y apretamos el botón GoTo de la barra de herramientas. Elegimos la actividad show attrs. Si nos fijamos el id del trabajo, luego de elegir la actividad deberá cambiar. Podemos ahora verificar en la bandeja de entrada que se ha agregado la construcción del nuevo cubo. HowTo O3 Process Ideasoft O3 Process How-To ¿Cómo configurar y enviar un mail desde un proceso? ¿Cómo generar formularios y usarlos desde un proceso? ¿Cómo publicar un formulario? ¿Cómo modificar el menu web? Generacion de formularios ¿Cómo generar formularios? A continuación se describen en un ejemplo los pasos necesarios para generar un formulario ( form) y utilizarlo desde una actividad del proceso. Notar que como resultado de estos pasos, se genera automáticamente un formulario que contiene todos los atributos declarados en el proceso. En este ejemplo se presenta la creación y uso de un formulario que es definido por el usuario. Crear y publicar proceso Se crea un proceso de nombre "Creditos". Se marca el proceso (checkbox "Usar formulario generado por defecto") para que cuando no se indique lo contrario se utiliza el formulario generado propio del proceso. Se defininen los siguientes atributos cliente, fecha e importe. Archivo XML de definicion del proceso. Mapa o dibujo con el flujo del proceso. Crear formulario (interfaz) por defecto A partir del proceso crear un form por defecto, este form sirve como template para diseñar el form definitivo. Salvar en el servidor formulario diseñado En este ejemplo al form se le agrega un combo box. El objetivo de este comboBox es que el usuario en la actividad del proceso "Autorizar" tome la decisión de si autoriza o rechaza el credito. El comboBox esta definido de tipo string, tiene los valores "aceptar"/"rechazar" que serán utilizados en la decision del proceso, y se mapea al atributo "decision" del proceso. Archivo XML de definicion del formulario. Luego de tener diseñado el formulario el mismo se salva en el servidor, para este ejemplo se le pone el nombre de FormDecision. Publicar formulario Una vez diseñado y salvado el formulario, el mismo se publica, en este paso es donde se generan los componentes y estructuras en el servidor para poder mas tarde ejecutar el formulario. Usar formulario desde actividad del proceso En la actividad "Autorizar" del proceso, se setea en el agente de open de la actividad que abra el el formulario "FormDecision" En la misma actividad de "Autorizar" el proceso toma una decisión según la elección que haya realizado el usuario. decision = completeAttributes.get("decision"); Log.notice("Creditos.autorizar.complete() decision=" + decision); if ("aceptar".equals(decision)) { completeResult.setNextActivityName("Otorgar Credito"); } else if ("rechazar".equals(decision)) { completeResult.setNextActivityName("Notificar rechazo"); } else { throw new WFException("La decisión tomada [" + decision + "] no es válida"); } Si la decision es aceptar el flujo continua en la actividad "Otorgar Credito", si la decision es rechachar el flujo continua en la actividad automática "Notificar rechazo" Ejecutar proceso Crear instancia de proceso / Iniciar autorización del credito Creando la instancia se inicia el flujo de Creditos, y la instancia de proceso deja pendiente un workitem en la primera actividad del proceso, la primera actividad del proceso de Creditos es "Autorizar". Utilizando el cliente desktop primero hay que elegir el proceso de creditos, y segundo presionar el boton de create que efectivamente crea (o inicia) la intancia en el proceso. Completar workitem / Autorizar crédito La autorización del crédito se realiza en la actividad "Autorizar". Esta autorización puede realizarse por la bandeja de entrada en el desktop. O3 Process & eMail Envío de mail en O3 Process Configuración del servicio de mail de JBoss Envío de correo desde el proceso Configuración del Mail O3 Process envía mail a través de JBoss. Para configurar el envío de mail se debe editar el siguiente archivo: <installDir>/jboss/server/default/deploy/mail-service.xml Usuario de correo y password En los atributos <attribute name="User">nobody</attribute> <attribute name="Password">password</attribute> colocar en User el nombre de usuario del correo. Por ejemplo, si la casilla desde la cual se mandarán correos es o3server@mi_dominio.com, el User será o3server En password se escribe la clave de acceso al SMTP/POP3 en caso de ser necesaria, con lo cual esta parte del XML quedaría: <attribute name="User">o3server</attribute> <attribute name="Password">mi_password</attribute> Configurar servidor SMTP Colocar el host o ip del servidor de SMTP en el attributo value de la siguiente línea <property name="mail.smtp.host" value="smtp.nosuchhost.nosuchdomain.com"/> Configurar cuenta válida Colocar una cuenta de correo válida del servidor SMTP configurado anteriormente. Poner la dirección de correo en el atributo value de la siguiente línea: <property name="mail.from" value="[email protected]"/> Configuración adicional Si con la configuración anterior se tienen problemas de envio de mail, puede ser necesario agregar la siguiente propiedad de manera adicional. En el archivo, <installDir>jboss\server\default\ideasoft-jwf\GServer_custom.properties agregar la línea: ideasoft.mail.sender=<dirección de correo del remitente de los correos> Envío de correo desde el proceso Los mails se escriben en O3 Process apoyado en el motor de templates Velocity, de Apache. Por ejemplo: $attrs.nro_orden escribe en el asunto o el cuerpo del mail el atributo nro de orden de la instancia de proceso Objetos y macros Velocity Se ofrece un conjunto de objetos y macros Velocity que permiten confeccionar las distintas partes que componen un mensaje de correo electrónico. Ejemplos En el proceso Mails.xml se encuentran actividades con ejemplos de envío de mail en los eventos de after complete. Estos ejemplos se explican en los siguientes links: Ejemplo mail formato texto plano Ejemplo mail formato html Ejemplo mail formato html Ejemplo de mail en formato html El siguiente ejemplo muestra el envio de un mail en formato html. #getLogins("Administrators") Envia el mail a todos los usuarios del role "Administrators" #include("styles.css") Incluye en el cuerpo del mail el CSS stylesheet (colores, formatos, etc) ubicado en "ideasoft-jwf/config/templates" Ejemplo mail formato texto plano Mail en formato texto plano Este ejemplo muestra el envio de un mail en texto plano. Donde el proceso tiene como atributos de la instancia: login_solicitante, cod_orden, nro_orden, cliente e importe. Para: $attrs.login_solicitante En el campo "Para" puede ir: una direccion de correo, el login de un usuario, un atributo con el login de un usuario (como el caso de este ejemplo), o la invocación a una macro velocity que devuelve los logins de los usuarios de un role dado, como en el ejemplo: Ejemplo mail formato html Objetos y macros disponibles usando Velocity Objetos disponibles en el header y body de los mails Nombre del objeto Descripción attrs Contiene todos los atributos de una instancia de proceso. Representa la interface IAttributeSet. formatter Permite formatear y setear valores por defecto para el formato de tipos numéricos o fecha. Es una instancia de la clase ObjectFormatter. Macros velocity de O3 Process Nombre de la macro Descripción getLogins(<<role name>>) Dado un nombre de rol retorna la lista de logins de los usuarios miembros del rol. showAttributes(<<titulo>> [<<lista atributos entre '"' separados por ','>>] <<nombre del link (opcional)>> <<parametros del link (opcional)>>) Muestra una tabla html con la lista de atributos dada. También puede mostrar un link a la bandeja de entrada, la dirección del link se configura por la propiedad velocity.indexFullPath en ideasoft-jwf/GServer_custom.properties. showHistory() Muestra la historia de la instancia en el proceso de workflow. Publicacion formulario Publicación de un formulario Supongamos que tenemos un formulario ya definido de nombre formUI.xml. 1. Primero debe salvarse (Save UI as/Guardar UI como) formUI.xml en el servidor (remote file), y 2. recién luego hacer el deploy form. Nota 1. El nombre de la tarea es la forma de identificarla en O3 Process. Cuando un script quiere hacer uso del formulario, debe invocar la tarea por este nombre. Nota 2. En este contexto, el término tarea se refiere a tarea de EDF y no se corresponde con ningún concepto de O3 Process que pueda ser un sinónimo (e.g. actividad y workitem). Para la creación de un formulario y su uso en un proceso ver este how-to. Web menu ¿Cómo modificar el menu web? El siguiente ejemplo muestra como agregar en el menu web de O3 Process, un link para crear una intancia de proceso y un link para consultar la bandeja de pendientes para un proceso dado. El menu una vez modificado quedará asiEl ejemplo se basa en un proceso llamado "Creditos" que esta publicado en el servidor, en estado testing o producción. El menu se determina a partir del archivo XML edfContext.xml, el cual se encuentra en la instalación del servidor en: jboss/server/default/deploy/gserver/1jwf.ear/jwf.war/edf/context/edfContext.xml Para agregar un item de creación de instancias en el proceso de "Creditos", se deben agregar las siguientes lineas a edfContext.xml Dentro del elemento "units" agregar: <unit name="nuevoCredito" task="Creditos_v1_u1_default" label="Nuevo Credito"> <argument name="procDefName" value="Creditos" type="string"/> <argument name="toolInvocationAction" value="create" type="string"/> </unit> Dentro del elemento "menuTemplate" agregar: <interactionRef name="nuevoCredito"/> "Creditos_v1_u1_default" es el nombre del formulario por defecto que se genera con el proceso Para agregar un item de consulta de bandeja de entrada para el proceso de "Creditos", se deben agregar las siguientes lineas a edfContext.xml Dentro del elemento "units" agregar: <unit name="pendCreditos" task="jwfPending" label="Creditos Pendientes"> <argument name="procDefName" value="Creditos" type="string"/> </unit> Dentro del elemento "menuTemplate" agregar: <interactionRef name="pendCreditos"/> HowTo O3 Properties Dónde se definen las properties? Los distintos componentes leen un conjunto de propiedades de configuración (properties) al momento de comenzar la ejecución. Para cada componente existen uno o varios archivos donde se definien las properties. El caso más corriente es que exista un solo archivo asociado a cada componente creado por la propia instalación de O3. Los archivos de configuración generados por la instalación tienen el nombre formado de la siguiente manera: O3<nombre_componente>.properties Por ejemplo: O3Browser.properties, O3Designer.properties, O3Builder.properties, etc La ubicación por defecto de estos archivos es en la raíz de la instalación de O3. Pero también pueden encontrarse en el HOME del usuario (p.e. Documents and Settings\username). Además a veces se utilizan variantes en los nombres de los archvios para dejar en claro que son generados por el usuario, por ejemplo O3Browser_custom.properties Es importante entonces conocer el orden en que se leen estos archivos, lo que podemos obervar mirando el log al iniciar un componente. A continuación se muestra como ejemplo para observar el orden de lectura, la ejecución del O3Browser: Loading Application properties file from: C:\Ideasoft\O3\O3Browser.properties Loading Custom Application properties file from: C:\Ideasoft\O3\O3Browser_custom.properties Loading User properties file from: C:\Documents and Settings/user1/O3Browser_user.properties Loading Configuration from : C:\Documents and Settings\user1/O3Browser.properties En el caso del O3Browser, también se lee al final, el archivo de cofiguración o3connect.properties ubicado en el home del usuario A continuación se describen las properties más usadas. O3 Builder y O3 Designer Property Descripción Valor por defecto ideasoft.o3.designer.previewRecords Cantidad de tuplas en la Vista Previa del Designer 13 ideasoft.o3.designer.assistTimeOut Time out para el botón de Asistencia del Designer 10000 ideasoft.o3.designer.testTimeOut Time out para el botón de test del Designer 10000 ideasoft.o3.designer.autoFillTimeOut Time out para el botón de autoFill 10000 ideasoft.o3.recycledNodeName Permite cambiar la etiqueta del nodo Recycled Recycled ideasoft.o3.fillerNodeName Permite cambiar la etiqueta de los nodos Filler. Válido para dimensiones Formato y Arista Filler ideasoft.o3.fillerNodePropagateName Indica que los nodos Filler toman la misma etiqueta que sus padres. Válido para dimensiones Formato y Arista false o3.sql.useSystemProp Habilita o deshabilita el uso del System Properties para la conexión JDBC true o3.sql.useTransactionReadUncommited Fuerza o no TransactionIsolation de la conexión SQL a Connection.TRANSACTION_READ_UNCOMMITTED false gclient.server.port Puerto de conexión al repositorio remoto. En versión 4 y posteriores se sustituye por las Opciones de Conexión 1099 gclient.server.host Nombre del host para repositorio remoto. En versión 4 y posteriores se sustituye por las Opciones de Conexión localhost gclient.server.name Siempre lleva el mismo valor O3Server gclient.singleSignOn Evita pedir loguin por cada nueva conexión. Solo para versión 4 y posteriores true O3 Server Información útil El archivo GServer_custom.properties ubicado en:O3_INSTALL_DIR\jboss\server\default\ideasoft-o3 Property Descripción Valor por defecto ideasoft.o3.cache.maxsize Tamaño máximo de la cache de cada cubo medido en bloques 1000 o3.monitorPeriod Cantidad de tuplas procesadas entre logs 5000 ideasoft.o3.pool.totalMaxCache Tamaño máximo medido en bloques de la cache de cubos. La suma de los tamaños de cache de todos los cubos abiertos del servidor nunca supera esta cantidad 25000 istore.permission.default Define si los componentes almacenados en el repositorio remoto (istore) quedan visibles por defecto para los distintos roles. Para que deban ser autorizados explícitamente, debe asignarse valor false Se define en el archivo GServer_custom.properties true o3.views.defaultRestriction Restricción de que cada vista solo puede ser eliminada por el usuario que la creó. Se define en el archivo GServer_custom.properties owner -DBuilderQueue_maxSession Se modifica en el jboss.lax/jboss.sh. Define la cantidad maxima de procesos que serán consumidos de la cola de procesos. Esto es para cuando usamos el proceso de construcción autamática 1 o3.client.maxYSize Modifica la cantidad de filas máximas que devuelve el server. Se agrega en GServer_custom.properties Esta configuración se lee por consulta o por sesión, por lo que no es necesario reiniciar JBoss luego de modificar su valor, salvo que se esté utilizando por primera vez el GServer_custom.properties (es decir, que se esté creando dicho archivo) 5000 o3.client.maxXSize Modifica la cantidad de columnas máximas que devuelve el server. Se agrega en GServer_custom.properties. Ver comentario en property anterior 500 o3.lazyreport.maxXSize Modifica la cantidad máxima de columnas en el modo reporte 50 o3.force.restrictions.ranking Hace que se aplique rankings automaticos sin que el usuario lo indique expresamente (cuando el valor es true). Se agrega en GServer_custom.properties false o3.default.graphType Hace que por defecto se abra en formato grilla si vale 0 se agrega en GServer_custom.properties 1 o3.tcp.port Modifica el puerto en el que escucha O3 al report se agrega en GServer_custom.properties 7777 o3.accept.without.roles Si se especifica la siguiente propiedad se hace que una licencia concurrente tome a todos los usuarios como si pertenecieran al rol bi-* se agrega en jboss/server/default/ideasoft-o3/GServer_custom.properties true <session-timeout>60</session-timeout> Cambia el timeout de las sesiones web para O3 se modifica en <o3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/WEB-INF/web.xml el valor es en minutos 60 o3.config.dataBase Cambia la definición de la configuración de O3Server para que se guarde en base de datos en lugar de utilizar el archivo O3Server.cfg(cuando el valor es true). Se agrega en GServer_custom.properties false rbac.users.limit Modifica la cantidad de usuarios a mostrar en la lista desplegable de usuarios. Se agrega en AdmServerApp.properties 100 o3.metadata.cache.enabled Indica si se activa la metadata restringida para los clientes False o3.memberCache.size Máxima cantidad de elementos a disponer en el cliente por dimensión 20000 o3.metadata.client.maxChildren La cantidad máxima de hijos de un elemento que se transmiten al cliente. Si hay más hijos en el servidor, en el árbol de dimensiones presentado al usuario se indica mediante un "Más elementos ..." al final de los elementos desplegados. 500 o3portal.waitcube.time Tiempo máximo expresado en milisegundos destinado a la apertura de vistas de O3 30000 o3.reportMode.initial Establece el modo paginado por defecto. Está property se controla solo cuando se abren cubos. false Varios Property Descripción Valor por defecto allowEmptyPasswords Determina si se admiten passwords nulas cuando autenticamos contra un LDAP Hay que modificar el archivo <o3>/jboss/server/default/ideasoft-o3/config/rbac/JndiConfiguration-*.properties true HowTo Seguridad de O3 en LDAP y Active Directory Esta página explica cómo configurar el Servidor de O3 para utilizar un servidor LDAP o Active Directory como soporte para la definición de usuarios y roles, así como manejar la autenticación al sistema. Se asume que se tienen conocimientos básicos del protocolo LDAP, así como conocimientos de cómo configurar el servidor LDAP o Active Directory que se desea utilizar. Se presentan algunos ejemplos que deben tomarse simplemente como guía ya que las estructuras de directorios presentadas pueden variar dependiendo del servidor LDAP utilizado. Este instructivo se aplica a versiones 4.0.400 o posteriores La seguridad del O3 Server La seguridad del Servidor de O3 se basa sobre un módulo comúnmente conocido como RBAC (Role Based Access Control). Este módulo define un conjunto de repositorios que son los encargados de almacenar los diferentes elementos involucrados en la seguridad del servidor - usuarios, roles, atributos, asociaciones entre ellos, etc. Es posible elegir diferentes implementaciones de estos repositorios de modo que los datos puedan ser leídos desde diferentes servidores y utilizando tecnologías diferentes. O3 incluye una implementación de este módulo para poder conectarse a servidores de directorio tales como LDAP y Active Directory. Configurando el Servidor de O3 La elección de qué implementación de los repositorios de RBAC usar se realiza en el archivo GServer.properties que puede encontrarse en la carpeta <O3>/jboss/server/default/ideasoft-o3 Este archivo define un conjunto de properties que permiten indicar el repositorio que debe utilizarse. #RBAC Repositories Configuration #rbac.roleRepository = com.ideasoft.rbac.repository.impl.jndi.JndiRoleRepository #rbac.userRepository = com.ideasoft.rbac.repository.impl.jndi.JndiUserRepository #rbac.raAssignmentRepository = com.ideasoft.rbac.repository.impl.jndi.JndiRAAssignmentRepository #rbac.loginService = com.ideasoft.rbac.repository.impl.jndi.JndiLoginService La distribución de O3 incluye estas properties comentadas, tal como puede verse por los caracteres "#" al principio de cada línea. Para poder activar el uso de LDAP o Active Directory es necesario quitar esos caracteres del principio de cada línea de modo que queden de la siguiente forma: #RBAC Repositories Configuration rbac.roleRepository = com.ideasoft.rbac.repository.impl.jndi.JndiRoleRepository rbac.userRepository = com.ideasoft.rbac.repository.impl.jndi.JndiUserRepository rbac.raAssignmentRepository = com.ideasoft.rbac.repository.impl.jndi.JndiRAAssignmentRepository rbac.loginService = com.ideasoft.rbac.repository.impl.jndi.JndiLoginService Nota Si lo único que se desea es validar los usuarios contra LDAP o Active Directory, teniendo los roles definidos en la base de datos de O3, sólo deberá descomentarse las líneas que especifican el rbac.loginService y rbac.userRepository. Si no se habilita el rbac.userRepository todos los usuarios deberán existir tanto en LDAP como en la base de datos de O3. Además de habilitar el uso de implementaciones alternativas de los repositorios de RBAC, es necesario configurar una serie de parámetros que cada mecanismo (LDAP o Active Directory) requieren para su correcto funcionamiento. Estas configuraciones específicas para cada servidor se indican en un archivo adicional que se encuentra en la carpeta <O3>/jboss/server/default/ideasoft-o3/config/rbac El nombre del archivo de configuración a utilizar se indica también en el GServer.properties que puede encontrarse en la carpeta <O3>/jboss/server/default/ideasoft-o3 mediante la siguiente property: jndi.cfg.filename = JndiConfiguration-SunONE.properties La distribución de O3 incluye dos archivos de ejemplo JndiConfiguration-MS.properties y JndiConfiguration-SunONE.properties para Microsoft Active Directory y SunONE Directory Server respectivamente. Al final de este documento se pueden ver estos ejemplos. Estos archivos definen los siguientes parámetros: Parámetro Descripción java.naming.provider.url Indica la ruta al servidor donde se encuentran los repositorios. Esta ruta es de la forma ldap://<host>:<port> java.naming.factory.initial Indica el nombre de la clase java que implementa el Contexto Inicial. Este es un parámetro del sistema que no debe cambiarse a menos que se indique lo contrario. El valor por defecto de esta property es "com.sun.jndi.ldap.LdapCtxFactory" java.naming.security.authentication Indica el mecanismo de autenticación. Este es un parámetro del sistema que no debe cambiarse a menos que se indique lo contrario. El valor por defecto de esta property es "simple" browseUserDN Distinguished Name del usuario que utiliza el sistema para obtener las listas de usuarios, roles, etc. browseUserPassword.plain Contraseña del usuario indicado en el parámetro browseUserDN. El valor de esta property se ingresa como texto plano y una vez que el servidor se reinicia ésta es cambiada por la property browseUserPassword cuyo valor será encriptado en forma automática por el servidor roleDefAttributeID Nombre del atributo que deben tener las entradas en el directorio que representan roles roleDefValueAttributeID Valor que debe tener el atributo roleDefAttributeID para ser considerado un rol roleNameAttributeID Atributo que se va a utilizar para recuperar el nombre del rol roleSearchBaseDN DN a partir del cual se buscarán los roles userDefAttributeID Nombre del atributo que deben tener las entradas en el directorio que representan usuarios userDefValueAttributeID Valor que debe tener el atributo userDefAttributeID para ser considerado un usuario userNameAttributeID Atributo que se va a utilizar para recuperar el nombre del usuario userSearchBaseDN DN a partir del cual se buscarán los usuarios userRolesAttributeID Nombre del atributo multivaluado que contiene la lista de los roles que tiene asignado el usuario Nota Para el caso en que la lista de roles indicada por la property userRolesAttributeID sea una lista de DN (Distinguished Name) en lugar de los nombres de los roles directamente, es necesario especificar el atributo dereferenceRoleAttribute, el cual indica el atributo a partir del cual se va a obtener el nombre del rol. En este caso, el valor de dereferenceRoleAttribute y el de roleNameAttributeID deben coincidir para que funcione correctamente la asignación de roles a usuarios. Nota Para que la validación de usuarios sea exitosa es necesario que éstos tengan definidos el atributo "dn" Ejemplos de Archivos de Configuración Ejemplo de Archivo de configuración para Microsoft Active Directory #Microsoft - Active Directoy Configuation file allowEmptyPasswords = false java.naming.provider.url userRolesAttributeID dereferenceRoleAttribute = ldap://dataserver:389 = memberOf = cn #Browse user's DN (used to bind to the Directory) #Option 1: User Principal Name (username@domain) #browseUserDN = [email protected] #browseUserPassword.plain = ???????? #Option 2: DN (Distinguished Name) asumiendo en AD un usuario O3 User browseUserDN = CN=O3 User, CN=Users, DC=xxxxxxx,DC=xxx browseUserPassword.plain = ???????? #Roles's Entry definition roleDefAttributeID roleDefValueAttributeID roleNameAttributeID roleSearchBaseDN = = = = objectclass group cn ou=Roles, dc=radiusserver, dc=ideasoft, dc=com #User's Entry definition userDefAttributeID userDefValueAttributeID userNameAttributeID userSearchBaseDN = = = = objectclass user sAMAccountName cn=Users, dc=xxxxxxxx, dc=xxx Ejemplo de Archivo de configuración para SunONE Directory Server #Sun ONE Directory Server Configuation file java.naming.provider.url userRolesAttributeID dereferenceRoleAttribute = ldap://dataserver:51685 = nsrole = cn #Browse user's DN (used to bind to the Directory) browseUserDN = uid=admin, cn=directory administrators, dc=ideasoft browseUserPassword.plain = ???????? #Roles's Entry definition roleDefAttributeID roleDefValueAttributeID roleNameAttributeID roleSearchBaseDN = = = = objectclass ldapsubentry cn ou=People, dc=ideasoft #User's Entry definition userDefAttributeID userDefValueAttributeID userNameAttributeID userSearchBaseDN = = = = objectclass person uid ou=People, dc=ideasoft Ejemplo de Archivo de configuración para Apache DS java.naming.provider.url userRolesAttributeID = ldap://localhost:10389 = memberOf #Browse user's DN (used to bind to the Directory) browseUserDN = uid=admin,ou=users,o=ideasoft,dc=ideasoft,dc=com browseUserPassword.plain = ???????? #Role's Entry definition roleDefAttributeID roleDefValueAttributeID roleNameAttributeID roleSearchBaseDN = = = = objectclass group cn ou=Roles, o=ideasoft, dc=ideasoft, dc=com #User's Entry definition userDefAttributeID userDefValueAttributeID uderNameAttributeIs userSearchBaseDN = = = = objectClass person uid ou=users,o=ideasoft,dc=ideasoft,dc=com HowTo Server con multiples tarjetas de red Servidor con múltiples tarjetas de Red Situación Cuando se instala O3 en un entorno de red interna (LAN), comunmente los servidores cuentan con una única tarjeta de red y no se requiere ninguna configuración especial. Cuando O3 se instala en un servidor con múltiples tarjetas de red (por ejemplo en un equipo que es accedido desde la LAN y desde Internet), puede requerirse la configuración específica de elementos que indiquen en que direcciones IP se están brindando los servicios. Contexto El servidor de aplicaciones sobre el que corre O3 debe reconocer sobre que direcciones IP del servidor tiene publicado los servicios que expone. Cuando el equipo cuenta con una tarjeta única de red, normalmente no es necesario hacer ninguna configuración particular. En un entorno con múltiples tarjetas de red, es necesario configurar adecuadamente en que dirección IP están publicados los servicios. Esta configuración es a nivel del Servidor de aplicaciones. Síntomas Síntoma 1 El servidor de aplicaciones levanta y pone a O3 en funcionamiento bajo una de las posibles direcciones IP. Cuando las aplicaciones clientes de O3 corren localmente (en el host) o desde la subred en la que quedó publicado el Servidor de O3 el funcionamiento es normal. Cuando se accede desde la otra subred no se obtienen respuesta. Alternativas de Configuración La configuración correcta se basa en indicar al servidor que publique el servicio bajo una IP que sea accesible desde los puestos en los que se va a trabajar. Cuando O3 es accedido desde la LAN y desde Internet, esot significa que dicha dirección (o nombre), debe resolverse por DNS adecuadamente desde ambas redes. Alternativa 1: Mediante una propiedad se configura la IP donde está publicado O3 Mediante una propiedad se indica la IP donde el O3 Server está publiacdo. java.rmi.server.hostname=IP/NOMBRE_DEL_SERVER si estamos en GNU/Linux poner la propiedad en jboss.sh JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=IP/NOMBRE_DEL_SERVER" si estamos en Windows poner en el jboss.lax buscar lax.nl.java.option.additional=-XX:MaxPermSize=128m -Xrs -Xms128m -Xmx512m -Djava.awt.headless=true -Djava.library.path="C:\\IdeaSoft\\O3/classes/bin" y agregar lax.nl.java.option.additional=-XX:MaxPermSize=128m -Xrs -Xms128m -Xmx512m -Djava.awt.headless=true -Djava.library.path="C:\\IdeaSoft\\O3/classes/bin" -Djava.rmi.server.hostname=IP/NOMBRE_DEL_SERVER" Alternativa 2: Parámetro -b Para probar el parametro -b, se puede primero conrrer desde la consola de la siguiente forma en linux ./jboss.sh -b IP_DEL_SERVER en windows jboss.bat -b IP_DEL_SERVER Luega probames si nos resuelve el problema conectandonos con el admserver o el browser Si nos soluciona entonces podremos cambiar los archivos de arranque para que sea definitivo en linux editar el jboss.sh de modo que quede así: $INSTALL_DIR/jboss/bin/run.sh $* -b IP_DEL_SERVER en windows debemos editar el jboss.lax de modo que quede así: lax.command.line.args=-b IP DEL SERVER $CMD_LINE_ARGUMENTS$ Más información .... Instalando O3 Portal en otros servidores Web La instalación de O3 distribuye el O3 Portal preconfigurado para se ejecutado dentro de un JBoss, de hecho la instalación de O3 incluye una versión de JBoss para mayor comodidad Sin embargo en muchas organizaciones es necesario utilizar Servidores Web ya existentes con capacidades suficientes para ejecutar el O3 Portal Estos servidores deben contar con soporte para JSP 1.2 y estar ejecutando con Java 1.5 A continuación se describen las instrucciones para realizar la instalación en diferentes servidores Memory Management ¿Cómo aumentar la memoria de los módulos de O3? Aumentando memoria de módulos y servicios Todos los módulos de O3 (O3Browser, O3Designer, JBoss, etc.) están configurados para utilizar hasta cierta cantidad máxima de memoria. En general nunca pasan de ese máximo pero cuando esto sucede las aplicaciones muestran en el log el error: java.lang.OutOfMemoryError La solución consiste en configurar el módulo aumentándole esa cantidad de memoria máxima. Versión 5.3 y anteriores: La configuración es muy simple, en el caso de O3Browser alcanza con modificar el archivo de texto [o3]/bin/Browser.lax en la línea donde dice: lax.nl.java.option.additional=-Xmx200m -Djava.library.path.... cambiando el número 200 (que corresponde a 200 Mb de memoria) por el que se considere más conveniente. El cambio tendrá efecto la próxima vez que se inicie el módulo Para el resto de los módulos el cambio es análogo salvo que en lugar de modificar Browser.lax se debe modificar el .lax correspondiente. Por ejemplo: para el caso de O3Designer es Designer.lax, para el caso de JBoss es JBoss.lax (modificando aquí se le está aumentando la memoria al servicio JBoss), para el caso de Builder es Builder.lax, etc. Versión 5.4 y posteriores: La configuración es muy simple, en el caso de O3Browser alcanza con modificar el archivo de texto [o3]/bin/Browser.vmoptions en la línea donde dice: # ############ Memory Paremeters # -Xmx200m cambiando el número 200 (que corresponde a 200 Mb de memoria) por el que se considere más conveniente. El cambio tendrá efecto la próxima vez que se inicie el módulo Para el resto de los módulos el cambio es análogo salvo que en lugar de modificar Browser.vmoptions se debe modificar el .vmoptions correspondiente. Por ejemplo: para el caso de O3Designer es Designer.vmoptions, para el caso de O3JBoss es O3JBoss.vmoptions (modificando aquí se le está aumentando la memoria al servicio JBoss), para el caso de Builder es Builder.vmoptions, etc. Es importante saber que el cambio explicado tiene efecto solo cuando se arrancan los módulos de la forma habitual, es decir, ejecutando los archivos .exe de la carpeta o3/bin. Esto es equivalente a ejecutar los módulos desde el menú o desde los accesos directos dejados por el instalador. Limite de memoria de JBoss para plataformas de 32bits JBoss tiene un limite de memoria de 1400MB para plataformas de 32bits, este limite esta impuesto por el sistema operativo e incluye memoria de otros procesos. Esto implica que para plataformas de 32bits el parámetro máximo para JBoss es -Xmx1400. Para plataformas de 64bits se puede sobrepasar este limite al permitir el sistema operativo el uso de mayor cantidad de memoria. Aumentando memoria de scripts En el caso de ejecutar los módulos utilizando los scripts de la plataforma, es decir, los .bat de la carpeta [o3]/bat para el caso de Windows o los .shde la carpeta [o3]/sh para el caso de Linux, entonces en este caso la configuración se debe hacer en otro lugar. Por ejemplo, si se corre O3Builder ejecutando el script [o3]/bat/Builder.bat entonces el cambio se debe hacer en el mismo Builder.bat, en la línea: set PROPERTIES=%PROPERTIES% -mx200M cambiando el número 200 por el que se considere más conveniente. Si en el bat no se encuentra esta línea asi tal cual entonces buscar el texto -Xmx o -mx y modificar en ese lugar. Otra posibilidad es el caso de tomcat.bat y tomcat.sh que no tiene esta configuración en ningún lugar. En el caso de tomcat.bat agregar una línea: set JAVA_OPTS=%JAVA_OPTS% -Xmx200m después de la última línea similar. En el caso de tomcat.sh, modificar la linea: JAVA_OPTS="-Djava.awt.headless=true ...." ; export JAVA_OPTS insertando después de JAVA_OPTS=" el texto -Xmx200m, asi: JAVA_OPTS="-Xmx200m -Djava.awt.headless=true ...." ; export JAVA_OPTS HowTo patch Jboss, problemas de consumo de memoria con Jboss IMPORTANTE Condiciones que justifican el patch En entornos de trabajo donde el uso del portal es alto, y se nota una degradación del servicio y posterior caída del server. Condiciones que pueden agravar el comportamiento, la reconstrucción de muchos cubos en forma seguida. Soluciones al problema Hay 2 patch desarrolados por Idesoft para tomcat, según si la versión de O3 es menor a 4.1.x o mayor o igual que 4.1.x. Se debe de ser cuidadoso en no poner un patch por otro. Si su versión es 4.2.001 o posterior, el patch NO es necesario, ya esta incluido en la distribución de O3. Otras formas de detectar el problema Desde el admserver ver que los cubos que quedan abiertos por mas de media hora luego que se cerraron la sesiones. Ver el wiki "HowTo monitorear uso de memoria del Jboss" para aprender sobre cómo ver la memoria usada por jboss . PARCHEAR EL JBOSS 1. 2. 3. 4. 5. bajar el servidor jboss si lo tenemos corriendo pararse en el directorio de instalción de O3 desde ahí ir al directorio jboss/server/default/deploy/jbossweb-tomcat55.sar renombrar el archivo catalina.jar (ej #catalina.jar) agregar el archivo catalina.jar nuevo. Precaución con la versión del patch según el O3 instaldo tener en cuenta que los nombre bajados se les debe de renombrar como catalina.jar, no se debe de dejar el nombre con que se bajo. 6. reinicar el jboss BAJAR LOS ARCHIVOS Ir al tab de adjuntar y bajar el que corresponda a su versión VERIFICANDO LA ACTUALIZACIÓN Luego de conectarnos con cualquier aplicación al server en el log debería de aparacer INFO [[/o3portal]] Tomcat 5.5.9, accessCount patch by Ideasoft O3 How-to Optimizacion O3 How-to: Optimización de los tiempos de carga de los Modelos Multidimensionales Para optimizar los tiempos de carga con el builder ver este otro HowTo O3 How-to: Optimización de la apertura de Modelos Multidimensionales Este how-to se orienta a brindar información sobre la optimización de modelos multidimensionales para lograr mejor performance en las consultas realizadas por los usuarios y en particular a la gestión de redundancia. Cómo se mantiene la información en el cubo O3 mantiene la información "agregada" por el último nivel de cada dimensión. Veamos con un ejemplo que significa esto exactamente. Supongamos que se tiene un cubo con 3 dimensiones Fecha, Producto y Lugar, tal que cada una cuenta con los siguientes niveles de dimensión: Fecha: Fecha, Año, Mes, Día Producto: Producto, Familia, Código Lugar: Lugar, País, Zona, Ciudad En este caso O3 mantiene la información agregada según los niveles de dimensión Día, Código y Ciudad. Es decir que ante la consulta ¿cuánto se vendió el día 23/mar/2003 del producto con código "zapato0034" en la ciudad de "Montevideo"? O3 responde sin hacer ningún tipo de trabajo extra de agregación, se puede decir que responde en un solo paso y solo con el esfuerzo de recuperar del cubo esa información ya disponible. En cambio, ante la consulta ¿cuánto se vendió el día 23/mar/2003 de los productos de la familia "prendas de vestir" en la ciudad de "Montevideo"?, O3 debe recuperar del cubo todas y cada una de la ventas realizadas el día 23/marzo/2003 de los productos pertenecientes a la familia "prendas de vestir" en esa ciudad y luego agregarlas (hacer la suma) para obtener el resultado. Algo de terminología En el primer ejemplo se dice que O3 resolvió una consulta a nivel [Día,Codigo,Ciudad] (un niveles un vector de niveles de dimensión) utilizando la información ya agregada a nivel [Día,Código,Ciudad], es decir que utilizó información al mismo nivel de agregación, de ahí que la resolvió sin hacer agregación extra. En el segundo ejemplo O3 resolvió una consulta de nivel [Día,Familia,Ciudad] utilizando información ya agregada a nivel [Día,Código,Ciudad]. En este caso tuvo que hacer agregación extra porque el nivel de la consulta fue "mayor" ( * ) que el nivel de la información disponible. ( * )Se dice que un nivel [x0,....,xn] es mayor otro nivel [y0,..,yn] si xi >= yi para todo i de 0 a n. En este ejemplo, en la dimensión Producto, el nivel de dimensión Familia es "mayor" ( ** ) que el nivel de dimensión Código. ( ** ) Los niveles de dimensión se numeran desde las hojas hacia la raíz comenzando en cero. Por ejemplo en el caso de la dimensión Producto: Código tiene nivel 0, Familia 1, y Producto 3. Es en ese sentido que el nivel Familia es "mayor" que el nivel Código ¿Qué es la redundancia? Volviendo a la segunda consulta de ejemplo, supongamos que la cantidad de productos de la familia "prendas de vestir" es del orden de decenas o cientos de miles, y que además el día 23/mar/2003 en Montevideo se efectuaron ventas para todos ellos. Entonces, para responder a la consulta O3 va a recuperar del cubo los cientos de miles de ventas hechas ese día en esa ciudad y las va a sumar para obtener la respuesta. Dependiendo de la potencia de cálculo, la velocidad de disco, etc. la operación puede ser lenta. Si además es una consulta que se realiza con frecuencia, luego O3 va a hacer la agregación cada vez. Entonces sería deseable que O3 mantuviera la información también agregada por el nivel [Día,Familia,Ciudad], así podría responder a esa consulta en un solo paso y en un tiempo casi nulo. O3 puede agregar tal información extra en los cubos, a tal proceso se le llama "agregado de redundancia al cubo". Al nivel[Día,Familia,Ciudad] se le llama nivel de redundancia, y al nivel [Día,Código,Ciudad] se le llama nivel base (de redundancia). Por defecto todo cubo tiene la información ya agregada por el nivel base. En el ejemplo el cubo tiene información a nivel [Día,Código,Ciudad] (el nivel base) y a nivel de redundancia [Día,Familia,Ciudad]. Notar que la información agregada según el nivel de redundancia [Día,Familia,Ciudad] es información redundante ya que se puede calcular a partir de la información agregada según el nivel base [Día,Código,Ciudad], de ahí que al proceso se le llame "agregar redundancia". Notar también que el cubo con redundancia debe tener mayor tamaño que el cubo sin ella. ¿Cómo se resuelven las consultas cuando hay niveles de redundancia? Si se hace una consulta a nivel [Día,Familia,País] (Ej. ventas del día 24/dic/2003 de "prendas de vestir" en China) entonces la consulta se resolverá agregando la información del nivel [Día,Familia,Ciudad] y no del nivel base [Día,Codigo,Ciudad]. Sucede que [Día,Familia,País] >= [Día,Familia,Ciudad] y [Día,Familia, País] >= [Día,Codigo,Ciudad], pero evidentemente se resuelve mas rápido utilizando [Día,Familia,Ciudad]. Sucede que la cantidad de información agregada por [Día,Familia,Ciudad] es menor que la cantidad de información agregada del nivel [Día,Codigo,Ciudad]. En la práctica esto último se puede inspeccionar utilizando Redundancy Manager. RD puede decir cuantas "tuplas" tiene un nivel y cuantas el nivel a partir del cual este se construye. Veamos este último ejemplo ilustrado con vectores indicando la posición (o altura) de cada nivel en la dimensión. La consulta es a nivel [0,1,2], para resolverla se utiliza el nivel de redundancia [0,1,0] y no el nivel base [0,0,0]. Resumiendo, para resolver una consulta a nivel v se agrega la información del nivel de redundancia w tal que v >= w y w es el mayor nivel que cumple eso. Además, si v == w entonces la consulta se resuelve sin necesitad de hacer agregación extra. Un ejemplo que muestra cuando un nivel de redundancia no sirve para resolver una consulta Supongamos que la consulta es a nivel [2,0,1] (o sea [Año,Código,Zona]), ¿con qué nivel se resuelve? La respuesta es con el nivel [0,0,0], dado que [2,0,1] >= [0,0,0] y no pasa lo mismo con el nivel de redundancia existente [0,1,0] donde la consulta es inferior en la dimensión Producto. Si la consulta del ejemplo es lenta entonces se puede adicionar otro nivel de redundancia al cubo, por ejemplo [2,0,1], [1,0,1], [1,0,0] o [0,0,1]. El primero logra resolver la consulta en un solo paso pero todos pueden lograr una mejora en el tiempo de resolución. Algunas observaciones: primero, el cubo tiene ahora 2 niveles de redundancia además del nivel base, así que creció en tamaño, segundo, la cantidad de niveles posibles a adicionar en el caso de que una consulta lo necesite es grande y es muy fácil que se haga una consulta a la cual no le sirve ninguno. De hecho si se quiere que O3 responda a todas las consultas posibles en un solo paso, para un cubo con n dimensiones con c1,c2... cn niveles se necesitarían c1*c2*...*cn niveles de redundancia. Por ejemplo, un cubo medio con 8 dimensiones de 1,2,3,3,4,3,2 y 2 niveles necesitaría 864 niveles de redundancia, dependiendo del tipo de información del cubo esto podría hacer aumentar el tamaño y tiempo de construcción varias veces. Conclusiones El agregado de redundancia es una muy buena solución para mejorar los tiempos de consultas. Pero, adicionar redundancia a un cubo no es tarea simple, al hacerlo se aumenta el tamaño y el tiempo de construcción del cubo. En general, para lograr una buena mejora en los tiempos se debe: 1- Conocer los datos: sabiendo de antemano qué consultas son las más frecuentes y de ellas cuáles son las más lentas 2- Utilizar la información brindada por los cubos de estadísticas 3- Utilizar Redundancy Manager en forma sistemática para agregar niveles de redundancia, viendo en cada caso cuanto se mejora la relación entre el tamaño de información del nuevo nivel de redundancia y el nivel en el cual éste se apoya, si el nuevo nivel no mejora la relación entonces no se adiciona Nota: para que la Redundancia tenga sentido se necesita que la mayor cantidad de dimensiones posible tenga por lo menos mas de un nivel de dimensión, solo en ese caso la redundancia tiene un efecto positivo. HowTo Optimizar los tiempos de construcción en el builder y designer Consideraciones previas ¿Cuando es necesaria esta técnica? Esta técnica lo que mejora son los tiempos de construcción, no los relacionados con los tiempos de consultas que luego se hagan en O3, para este tipo de optimización ver el siguiente HowTo Por lo tanto esta optimización es adecuada cuando tenemos cubos cuya carga demora varias horas, estos son cubos con varios millones de tuplas. Resulta obvio también la necesidad en estos casos de que la máquina que construye sea adecuada: tenga la memoria suficiente (2 o 3 Gb de RAM) procesador rápido (cuanto más rápido mejor) OPTIMIZACIÓN ¿En que consiste la optimización de carga de datos? Consiste en avisarle de antemano al builder y/o designer que los datos van a ingresar ordenados por alguna de las dimensiones. Esto lleva a que O3 haga un mejor aprovechamiento de la cache de cubos. ¿Qué dimensiones usar para ordenar los datos? En principo puede ser cualquiera, pero para lograr mejores resultados debemos elegir aquellas que distribuyan mejor la información, por eso lo más habitual es usar la dimensión fecha. ¿Cómo lo hago? Veamos esto con un ejemplo: Supongamos un cubo con 4 dimensiones: Fecha, Zonas, Vendedores, Artículos La numeración de las dimensiones sería la siguiente : 0 Fecha 1 Zonas 2 Vendedores 3 Artículos A su vez supongamos que la dimensión Fecha tiene los siguientes niveles : Año, Mes, Día la numeración de los niveles es: 0 RAIZ 1 Año 2 Mes 3 Día y por último supongamos que los datos vienen ordenados en la consulta por fecha/día, esto lo logramos por ej con un ORDER BY en la cláusula SQL, si es un archivo de texto, deberemos ordenarlo al momento de generarlo por la columna necesaria. En el builder.sh buscamos la línea # Add Application System Properties PROPERTIES="$PROPERTIES -mx200M" y agregamos las siguientes líneas: # Add Application System Properties PROPERTIES="$PROPERTIES -mx200M" PROPERTIES="$PROPERTIES -Do3.split.dimension=0" PROPERTIES="$PROPERTIES -Do3.split.dimension.level=3" PROPERTIES="$PROPERTIES -Do3.split.dimension.redundancy=true" En el caso del builder.bat buscar la línea: rem Add Application System Properties set PROPERTIES=%PROPERTIES% -mx200M y agregamos las siguientes líneas: rem set set set set Add Application System Properties PROPERTIES=%PROPERTIES% -mx200M PROPERTIES=%PROPERTIES% -Do3.split.dimension=0 PROPERTIES=%PROPERTIES% -Do3.split.dimension.level=3 PROPERTIES=%PROPERTIES% -Do3.split.dimension.redundancy=true Debido a que alteramos estas propiedades, es buena idea cambiar el nombre del builder.sh/builder.bat a efectos de personalizarlo para ese cubo en especial y dejar el builder.sh/builder.bat sin tocar para las cargas generales que no necesiten de este procedimiento. Los mismos cambios pueden realizarse para el componente O3Designer, modificando los respectivos designer.sh/designer.bat O3 Redundancy Manager Cómo agregar redundancia con Redundancy Manager RedundancyManager es una aplicación que se ejecuta en línea de comandos y se utiliza para agregarle niveles de redundancia a un cubo construído previamente con O3Builder u O3Designer. El principal cometido de esta aplicación es permitir agregar la redundancia en un paso separado al de la construcción del cubo, esto permite repetir el proceso las veces que sea necesario hasta lograr optimizar el cubo sin necestiad de perder tiempo en reconstruirlo. Esta aplicación despliega además información util sobre los niveles de redundancia. Por ejemplo, muestra la cantidad de tuplas que tiene un nivel y sobre qué nivel fue construído, lo que permite tener una idea de si cierto nivel de redundancia mejora o no la performance del cubo Se encuentra en la carpeta bat(o sh) y se llama RedunMgr.bat. Se ejecuta pasandole como parametro el cubo y el comando de lo que se le quiere hacer. Ejecutandolo sin parametros muestra un listado de todos los comandos que acepta. Los niveles de redundancia primero se planifican, o sea que se agregan niveles al cubo para que después con otro comando realmente se construyan. Ejemplo 1 RedunMgr -cmnd=add -level="1,1,1,1,1" C:\IdeaSoft\o3\installations\O3_3.3.000\files\Demo.cube -debug planifica el nivel de redundancia [1,1,1,1,1] (o sea, nivel [Quarter,Line,Customer Type,Line,Team,Country]) en el cubo Demo.cube Ejemplo 2: RedunMgr -cmnd=show C:\IdeaSoft\o3\installations\O3_3.3.000\files\Demo.cube -debug Despligua en pantalla toda la informacion de redundancia del cubo Demo.cube El resultado del comando es: ..... Notificaci¾n: Phase: 0 Notificaci¾n: Base Level: 0 [ 0, 0, 0, 0, 0 ] Notificaci¾n: RedundancyLevel: 1 - [ 1, 1, 1, 1, 1 ] Generation: 5 dependOn: [ 0 ] Measures: [ T, T, T, T, T, T ] Base Measures: [ F, F, F, F, F, F ] Updated : [ null ] Empty: [ F, F, F, F, F, F ] Notificaci¾n: Status: planned ..... El log muestra que existe un nivel de redundancia de nombre "1" definido como [1,1,1,1,1] (fue el que se agrego en el Ejemplo 1). El nivel "1" depende de otro nivel de redundancia llamado "0" (el nivel de redundancia "0" existe en el cubo aunque el este no tenga redundancia, es el llamado nivel base, sobre el cual se resuelven todas las consultas del cubo cuando no tiene redundancia) El ninvel de redundancia "1" esta planificado. Ejemplo 3 RedunMgr -cmnd=updateAll C:\IdeaSoft\o3\installations\O3_3.3.000\files\Demo.cube -debug Construye todos los niveles de redundancia que esten planificados. Después de ejecutarlo el comando "show" muestra lo siguiente: Notificaci¾n: Phase: 0 Notificaci¾n: Base Level: 0 [ 0, 0, 0, 0, 0 ] Notificaci¾n: RedundancyLevel: 1 - [ 1, 1, 1, 1, 1 ] Generation: 5 dependOn: [ 0 ] Measures: [ T, T, T, T, T, T ] Base Measures: [ F, F, F, F, F, F ] Updated : [ T, T, T, T, T, T ] Empty: [ F, F, F, F, F, F ] Notificaci¾n: Status: running Notificaci¾n: Index ID: 1 TuplesCount: 518 Muestra dos cosas, el nivel está calculado (estado running) y tiene 518 tuplas. Esto último significa que en el peor caso para una consulta que se resuelva utilizando ese nivel de redundancia se recorreren 518 tuplas, esto es un indicador de la performance que tienen las consultas para resolverse con ese nivel de redundancia. Otras consideraciones: 1- No se pueden remover niveles de redudancia (a pesar de que aparece la opción en la ayuda del comando), solo se pueden suspender, pero la informacion sigue ahí (el tamaño del cubo se conserva) 2- El comando showCover muestra información sobre el nivel de redundancia "0" (nivel base) además de la información de los otros niveles de redundancia. Esto sirve para saber cuantas tuplas tiene el cubo. Resultado ejemplo de ejecutar showCover: Notificaci¾n: Cover: Notificaci¾n: RedundancyLevel: 0 - [ 0, 0, 0, 0, 0 ] Generation: 0 dependOn: [ ] Measures: [ T, T, T, T, T, T ] Base Measures: [ T, T, T, T, T, T ] Updated : [ T, T, T, T, T, T ] Empty: [ F, F, F, F, F, F ] Notificaci¾n: Status: running Notificaci¾n: Index ID: 0 TuplesCount: 1270 Notificaci¾n: Notificaci¾n: RedundancyLevel: 1 - [ 1, 1, 1, 1, 1 ] Generation: 5 dependOn: [ 0 ] Measures: [ T, T, T, T, T, T ] Base Measures: [ F, F, F, F, F, F ] Updated : [ T, T, T, T, T, T ] Empty: [ F, F, F, F, F, F ] Notificaci¾n: Status: running Notificaci¾n: Index ID: 1 TuplesCount: 518 Por mas información sobre Redundancia referirse al manual de Desarrollador en la sección de "Optimización de Consultas" Single Sign-On Single Sign-On en O3 La funcionalidad de Single sign-on (login único) entre los diferentes módulos web de O3 (O3Portal, EPortal, Report) se realiza mediante CAS. Secciones Secciones Problemas con CAS ejecutando detrás de un firewall Single Sign On de O3 con aplicaciones existentes — Este documento presenta una forma de integración con aplicaciones existentes (que realizan una validación previa del usuario) para que éstas redirijan a O3 incluyendo información de autenticación, que permita que el usuario no deba ingresar nuevamente las credenciales al acceder a los diferentes módulos web de O3. Problemas con CAS ejecutando detrás de un firewall Problemas con CAS ejecutando detrás de un firewall Cuando se utiliza O3 Portal detrás de un firewall puede ocurrir que luego de la pantalla de login aparezca una pantalla en blanco, esto es causado por un problema en el módulo de validación de CAS, que ocurre cuando el servidor no se puede conectar a si mismo con el nombre de host ingresado por el usuario en la URL del navegador. Es decir que esto ocurre si el usuario accede a 'http://www.company.com/o3portal' y el servidor O3 no puede acceder al host www.company.com en el puerto 80. Este problema se resuelve cambiando la declaración del filtro de CAS, en el archivo <O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/WEB-INF/web.xml, cambiando el valor del parámetro validateUrl como se muestra a continuación: <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> <param-value>http://localhost:8080/cas/proxyValidate</param-value> </init-param> donde 8080 debe ser reemplazado por el puerto en el que está ejecutando Tomcat. Single Sign On de O3 con aplicaciones existentes Single Sign On de O3 con aplicaciones existentes NOTA La funcionalidad descrita en este documento está disponible a partir de la versión 5.4.0-22 Introducción Si bien una forma de integrarse con el Single Sign On de O3 es la adaptación de la aplicación existente para que utilice el CAS de O3, en muchas oportunidades esto es demasiado complejo y se requiere una alternativa más simple. Este documento presenta una forma de integración con aplicaciones existentes (que realizan una validación previa del usuario) para que éstas redirijan a O3 incluyendo información de autenticación, que permita que el usuario no deba ingresar nuevamente las credenciales al acceder a los diferentes módulos web de O3. Single Sign On de aplicaciones externas con los módulos web de O3 Este mecanismo permite evitar la autenticación en los módulos web de O3, considerando que el usuario ya se encuentra autenticado en otra aplicación (aplicación X, de ahora en más). Características de la implementación Se utiliza un mecanismo de SSO basado en tickets. El ticket debe ser generado por la aplicación en la que se autentica el usuario y almacenado en una base de datos. El único requerimiento de dicha base de datos es que sea accesible por el servidor O3 a través de un driver JDBC. Los usuarios deben estar definidos en los dos sistemas (en la aplicación X y en O3). Dependiendo del repositorio de usuarios que la aplicación X utilice, se podrá integrar a O3 (por ejemplo LDAP), evitando tener que mantener la doble definición de usuarios. Funcionamiento del mecanismo de SSO 1. El usuario ingresa a la aplicación X, y en el momento que desea acceder al O3Portal se genera el ticket y se almacena en la base de datos (más adelante se propone el esquema de la tabla a utilizar). 2. Cuando la aplicación genera un link al O3Portal, éste lleva el ticket como argumento de la URL 3. O3 recibe el ticket y consulta la base de datos, para validar el ticket y obtener el nombre del usuario conectado 4. O3 es quien elimina de la base de datos el ticket inmediatamente después de ser validado el usuario. Base de datos Debe existir una tabla llamada SSO_TICKETS con los siguientes campos: Campo Tipo Descripción Ticket Varchar(100) Ticket_TS Timestamp Fecha y hora de creación del ticket UserName Varchar(50) Login del usuario conectado para MSsql server el tipo debe ser datetime Expiración Se utiliza el campo Ticket_TS para la validación del Ticket, es decir cuando O3 valida el Ticket además de verificar que existe un registro en la tabla, se asegura de que el tiempo de vida no sea mayor a un valor predeterminado, por defecto de un día. Esto se realiza para evitar que si no se eliminó correctamente un ticket no se permita el ingreso por tiempo indeterminado. El valor del tiempo de expiración se puede modificar a través de un parámetro. URL generada desde la aplicación externa La URL generada por la aplicación para redirigir a O3 debe llevar el parámetro "_externalTicket" con el valor del ticket generado por la aplicación y almacenado en la base de datos. Por ejemplo: http://localhost:8080/o3portal?_externalTicket=12345678 http://localhost:8080/eportal/group/default?_externalTicket=12345678 Características que debería cumplir el ticket generado por la aplicación El ticket puede ser cualquier texto pero es recomendable: Que sea único, en general se utiliza la hora de la máquina como uno de sus componentes para garantizar esa unicidad Que no sea fácil de generar, por ejemplo que no sea un número secuencial, que permitiría "adivinar" un valor válido Un ejemplo de una clase Java que puede ayudar a esta implementación es java.rmi.server.UID Configuración Configuración del acceso a base de datos en O3 Debe configurarse la base de datos que se utilizará para realizar la validación de los tickets. Ejemplo de DataSource para una base Postgres (jboss\server\default\deploy\gserver\ticket-ds.xml). <?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <jndi-name>TicketDS</jndi-name> <connection-url>jdbc:postgresql://localhost:5432/ticket</connection-url> <driver-class>org.postgresql.Driver</driver-class> <user-name>postgres</user-name> <password>postgres</password> <metadata> <type-mapping>PostgreSQL 7.2</type-mapping> </metadata> </local-tx-datasource> </datasources> En caso de que se trate de otra Base de Datos se debe de copiar el jar del driver en O3/jboss/server/default/lib y configurar el datasource con la url, driverClass, usuario y password adecuados. Script de creación de la tabla para Postgres CREATE TABLE sso_tickets ( ticket character varying(100) NOT NULL, ticket_ts timestamp without time zone NOT NULL, username character varying(50) NOT NULL, CONSTRAINT pk_sso_tickets PRIMARY KEY (ticket) ) Configuración de SSO en O3Portal Se debe de configurar el filtro de CAS para habilitar la recepción y validación de tickets desde aplicaciones externas. Para esto se deben descomentar las siguientes líneas en el archivo jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/WEB-INF/web.xml <init-param> <param-name>ticket.validator</param-name> <param-value>com.ideasoft.cs.ejb.ticket.DbTicketValidator</param-value> </init-param> <init-param> <param-name>dbticket.datasource</param-name> <param-value>java:/TicketDS</param-value> </init-param> Nombre de atributo Descripción ticket.validator El nombre de la clase Java utilizada para validar el ticket, para la validación contra base de datos presentada aquí debe utilizarse el valor presentado en el ejemplo dbticket.datasource Nombre JNDI del DataSource donde se declara el acceso a la base de datos que tiene la tabla con los tickets dbticket.expiration Tiempo para la expiración de los tickets expresada en segundos Configuración de SSO para EPortal Descomentar las siguientes propiedades del archivo jboss/server/default/deploy/liferay.war/WEB-INF/classes/portal-ext.properties: o3.autologin.validator=com.ideasoft.cs.ejb.ticket.DbTicketValidator dbticket.datasource=java:/TicketDS Valor por Defecto 86400 (un día) Se puede especificar también la propiedad dbticket.expiration de la misma manera que para la configuración de O3Portal How To Eportal Ayudas y explicaciones de cómo realizar operaciones con el componente Eportal. Guía de administración de Liferay HowTo Agregar Mapas de Google HowTo cambiar apariencia de la página de bienvenida HowTo cambiar la base hypersonic por otra base HowTo crear una nueva comunidad HowTo crear una nueva organización HowTo Crear usuario administrador en una comunidad del Enterprise Portal How To definir administrador por comunidad HowTo Definir permisos sobre páginas en ePortal HowTo donde almacena los documentos e imágenes eportal HowTo drill across en eportal HowTo ePortal y localhost HowTo exportar e importar una comunidad en eportal HowTo importar páginas de otra comunidad HowTo instalar nuevo tema de apariencia HowTo Instalar nuevo theme Default en ePortal HowTo Instalar plantillas en el Enterprise Portal HowTo Login Anónimo en ePortal HowTo ocultar el panel de control a usuarios anónimos HowTo ocultar menuItem Páginas públicas (0) en eportal HowTo personalizar una comunidad en eportal HowTo Quitar Mi Comunidad en ePortal Organizaciones vs. Comunidades Guía de administración de Liferay Contenido 1. 2. 3. 4. 5. 6. 7. 8. 9. Introduction Initial Setup Configuration Liferay Collaboration Suite Advanced Liferay Configuration Enterprise Configuration Maintaining A Liferay Portal Appendix: Documentation License Colophon Descargar documento: liferay-administrator-guide-5.2.pdf HowTo Agregar Mapas de Google Esta página describe los pasos para incorporar portlets que integran Mapas de Google con Datamarts en O3 Enterprise Portal. Pre-requisitos Como condición previa es necesario disponer de: Licenciamiento O3 Enterprise Edition Al menos un datamart publicado en el servidor O3 con una dimensión de ubicación gegráfica definida. En el cual se disponga de una vista tambien publicada en el servidor, cuyos elementos de un nivel de la mencionada dimensión geográfica permitan referenciarse en Google Maps Una cuenta de Google. Como ejemplo, basta con un datamart con un nivel de una dimensión cuyas etiquetas sean : Las Piedras, Canelones, Uruguay La Paz, Canelones, Uruguay Toledo, Canelones, Uruguay etc El nivel de detalle, ya sea países, ciudades, localidades, calles, etc es relativo a las necesidaes de análisis requeridas. Incluso podrían utilizarse las referencias geodésicas a un punto en el planeta si se buscara la ubicación exacta. Por ejemplo, los valores (-34.908951,-56.139643) identifican la ubicación exacta de IdeaSoft en Montevideo, referidas a las coordenadas: -34° 54' 32.22", -56° 8' 22.71" . Pasos a seguir Los pasos para incorporar un nuevo portlet en O3 Enterprise Portal son: 1 - Situarse en la página donde se requiere agregar el mapa, seleccionar Añadir Portlet de categoría Mashup -> Grid Portlet Allí se indica una vista de tipo Tabla del datamart O3 que haga referencia en el eje vertical a la dimensión geográfica y en el eje horizontal una columna con el valor de la medida que se desea visualizar en el mapa. La vista agregada se visualizará en forma similar a un típico portlet O3 View Portlet. 2- Obtener un código de uso del Google Maps API en: http://code.google.com/intl/es-UY/apis/maps/signup.html Allí se explican las condiciones de uso, las cuales no exigen pago para una utilización básica. Se debe indicar la URL donde va a ser utilizada: http://<nombreServidorO3>:<puertoO3> por ejemplo: http://serv01:8080 y a continuación se pide el ingreso con la cuenta google para finalmente obtener la clave 3 - Añadir un nuevo portlet, en esta oportunidad de categoría Mashup -> Google Maps Mashup. Se pide el ingreso de la clave obtenida y al aceptar se visualiza el mapa. HowTo cambiar apariencia de la página de bienvenida Contexto Personalizar la apariencia del portal. Procedimiento Para cambiar la apariencia de la página de bienvenida, es necesario modificar la página pública Welcome, que se encuentra bajo la comunidad Guest. Cambiar tema: 1. 2. 3. 4. 5. 6. Dirigirse a Panel de Control de eportal. Comunidades -> Acciones -> Administrar páginas Seleccionar la pestaña Páginas públicas. Seleccionar la página Welcome Seleccionar pestaña Apariencia. Cambiar tema. Cambiar imagen: 1. 2. 3. 4. 5. 6. Dirigirse a Panel de Control de eportal. Comunidades -> Acciones -> Administrar páginas Se desplegará un menú. Hacer clic en la solapa Configuración Hacer clic en la solapa Logo Hacer clic en Examinar y adjuntar el archivo con la imagen seleccionada Finalmente hacer clic en Guardar. HowTo cambiar la base hypersonic por otra base Contexto En ambientes de producción se recomienda utilizar una Base de Datos para almacenar información de configuración de componentes de O3, tales como el Enterprise Portal, la configuración del Servidor y los usuarios. La Base de Datos Hypersonic que va preconfigurada con O3 en su distribución, tiene por finalidad permitir una rápida puesta en funcionamiento de la instalación, tanto para aprendizaje, demostración y hasta desarrollo, pero para entornos de producción se recomienda la configuración de otra base de datos. Este HowTo describe como se hace el cambio de Base de Datos del Enterprise Portal (Liferay). Podemos distinguir 2 situaciones: Ya tenemos armado un sitio usando hypersonic y queremos migrar a otra base. No tenemos nada armado y queremos desde el vamos usar otra base Ambas situaciones tienen pasos en común y pasos específicos para cada situación 1- Elección de la base de datos Liferay funciona con varias bases de datos, nostros la hemos probado con exito en: MS-SQL MySQL Postgres Oracle pero hay otras posibildades de Bases, en http://downloads.sourceforge.net/lportal/liferay-portal-sql-5.1.2.zip se puede ver los tipos soportado de acuerdo a los scripts de creación de bases. Una vez que hayamos elegido la base, deberemos crear un base nueva y un usuario que sea dueño de la base o con permisos suficientes. A los efectos de este HowTo supondremos que usaremos MySQL, que creamos una base que se llamará liferay y un usario liferay con una password liferaykey El usuario liferay tiene solo derechos de SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE sobre la base liferay 2- Exportar la comunidad Si ya tenemos armado una/s comunidad/es debemos de exportarlas para luego importarlas en el eportal con la nueva base de datos 1. 2. 3. 4. 5. 6. 7. Loguearse como el administrador. Ir a Panel de Control. En la sección Portal ir a Comunidades. En el botón Acciones elegir Administrar Páginas. Eligiendo Páginas Públicas o Privadas, según el caso, ir a Exportar/Importar, guardar el archivo .lar clieando el botón Exportar. Repetir el proceso para cada comunidad. Bajar el Jboss al terminar de exportar la/s comunidad/es. 3- Cambiando el datasource de liferay Es necesario indicarle a liferay que usar para conectarse, para ello copiamos del directorio de ejemplos el datasource correspondiente a mysql. cp <o3>/jboss/docs/examples/jca/mysql-ds.xml <o3>/jboss/server/default/deploy/liferay-mysql-ds.xml Luego borramos el archivo <o3>/jboss/server/default/deploy/liferay-hsqldb-ds.xml y editamos <o3>/jboss/server/default/deploy/liferay-mysql-ds.xml Veremos algo como esto: <datasources> <local-tx-datasource> <jndi-name>MySqlDS</jndi-name> <connection-url>jdbc:mysql://mysql-hostname:3306/jbossdb</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>x</user-name> <password>y</password> <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name> <!-- should only be used on drivers after 3.22.1 with "ping" support <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connecti --> <!-- sql to call when connection is created <new-connection-sql>some arbitrary sql</new-connection-sql> --> <!-- sql to call on an existing pooled connection when it is obtained from pool MySQLValidConnectionChecker is preferred for newer drivers <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql> --> <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml --> <metadata> <type-mapping>mySQL</type-mapping> </metadata> </local-tx-datasource> </datasources> cambiamos <jndi-name>MySqlDS</jndi-name> <connection-url>jdbc:mysql://mysql-hostname:3306/jbossdb</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>x</user-name> <password>y</password> por <jndi-name>jdbc/LiferayPool</jndi-name> <connection-url>jdbc:mysql://localhost:3306/liferay</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>liferay</user-name> <password>liferaykey</password> Recuerde Recordar que usamos una base que se llama liferay, un usuario liferay 4- Iniciar el Jboss Una vez iniciado el Jboss, Liferay se encargara de crear las tablas en la base y precargarle algunos datos. 5- Abrir el eportal Colocamos en el navegador web http://localhost:8080/eportal y veremos algo como esto Debemos loguearnos con el usuario [email protected] (sugerido) y la password test veremos la siguiente pantalla 6- Recomponiendo el eportal ATENCIÓN No saltearse lo pasos que a continuación se detallan, o se corre el riesgo de no poder volver a entrar al eportal Agregando el usuario admin Vamos a al menú de opciones y elegimos Control panel (Panel de Control) Una vez en el Panel de control vamos a buscar a la izquierda la sección Portal Elegimos Users, luego Add (botón verde arriba al medio) y completamos como en la foto y apretamos salvar (botón a la derecha) Notar que deben coincidir el screen name con el nombre de logueo en O3, en este caso admin. Pero para otros usuarios se debe mantener que los nombres sean iguales. Luego ir a roles como muestra la imagen Apretamos el botón con una cruz verde (Selec) y se despliega una pantalla en la que podemos selecionar el rol administrator Luego volvemos a salvar (botón derecho abajos) Si queremos le podemos sacar el rol powerUser (no olvidar salvar luego de sacarlo!) Con esto ya tenemos a admin como administrador del eportal. Agregando portlet de loguin en la comunidad guest Arriba a la derecha debe haber un link que dice back to guest(volver a guest), lo cliqueamos y estaremos en la pantalla de inicio. Acá debemos sacar los 2 portlets y agregar uno nuevo, para ello vamos de nuevo al menú y elegimos agregar aplicación (add application) elegimos el portlet que esta en indefinidos (Undefined) Eportal Portlet y lo agregamos. Sacando el usuario test Nos deslogueamos y entramos con el usuario admin. Una vez logueados, vamos al menú->panel de control->usuarios Apretamos el botón de acciones correspondiente al usario test y lo desactivamos. Luego vamos a buscar (ver forma avanzada) y elegimos los usuario que no están activos. Nos vuelve a aparecer test, botón acciones->borrar. Creando la comunidad En el menú de la izquierda buscamos comunidades Luego en el botón verde con una cruz le decimos agregar, completamos el formulario. Agregando(importando) a la comunidad lo exportado al principio. En la lista de Comunidades elegimos la creada y en el botón de acciones->manejar páginas. Luego elegimos privadas y exportar/importar, a continuación importar, seleccionamos el archivo y no cambiamos ninguna de las opciones. Apretamos ver paginas y listo!! Migrar Liferay a Oracle Contexto La migración a una base de datos Oracle es un poco más complicada. Recomendamos leer este link http://www.atlassian.com/software/jira/docs/v3.13/databases/oracle.html. Luego decidan si quieren o no usar Oracle. El procedimiento es para plataformas GNU/Linux Procedimiento 1. Crear en Oracle un usuario y base de datos vacía, el usuario debe tener permisos suficientes para crear tablas (permisos de DBA) 2. Bajar o asegurarse que esté bajo el JBoss. 3. Copiar el convert.sh en <o3>/jboss/server/default/data/hypersonic El script solo corre en plataformas linux. 4. Correr el script pasandole como parámetro el nombre del la base ./convert.sh lportal.script Esto debería dejarnos un archivo portal-data-sample.vm en la misma carpeta hypersonic 5. Editar el archivo generado y borrarle las primeras líneas hasta llegar a los INSERT. Salvar el archivo. 6. Crear el siguiente esquemas de carpetas <o3>/jboss/server/default/deploy/liferay.war/WEB-INF/classes/com/liferay/portal/tools/sql/dependencies/ 7. Copiar el archivo generado por el script convert.sh a la carpetad dependencies. cd <o3>/jboss/server/default/data/hypersonic/ mv portal-data-sample.vm <o3>/jboss/server/default/deploy/liferay.war/WEB-INF/classes/com/liferay/portal/tools/sql/dependencies/ 8. Cambiar el data source de liferay para que apunte a Oracle Copiar el oracle-ds.xml de ejemplo que se adjunta y modificarle el usuario, password y datos de conexión 9. Modificar el archivo portal-ext.properties que se encuentra en <o3>/jboss/server/default/deploy/liferay.war/WEB-INF/classes Agregar al final schema.run.enabled=true schema.run.minimal=false hibernate.jdbc.batch_size=0 10. Si se usa oracle 11 agregar en el partal-ext.properties hibernate.dialect = org.hibernate.dialect.Oracle10gDialect hibernate.connection.release_mode=auto 11. Levantar el JBoss. 12. Verificar que se crearon y completaron con datos las tablas HowTo crear una nueva comunidad Contexto Las comunidades son un mecanismo que permiten agrupar usuarios de acuerdo a características comunes en cuanto a la información que manejan, los intereses que tienen o el tipo de trabajo que desempeñan. De esta forma es posible definir comunidades a las cuales luego se afilian los usuarios pudiendo de esta forma compartir las páginas definidas dentro de la comunidad. Definiendo una nueva comunidad La tarea de definición y mantenimiento de comunidades la realiza el Administrador el cual se identifica con la cuenta admin. 1. 2. 3. 4. Ingresar al portal con la cuenta de Administrador (admin). Dirigirse a Panel de Control->Comunidades. Presionar el botón de Añadir. Indicar el nombre de la comunidad y opcionalmente una descripción. El tipo de comunidad indica el nivel de seguridad que existe para afiliarse a la comunidad. En este caso Abierto es la opción adecuada. 5. Verificar que la comunidad está activa. 6. Presionar el botón de Guardar para crear la comunidad. Este paso debería mostrar la nueva comunidad creada en la lista de las comunidades existentes: Asignando Miembros a una Comunidad Una vez creada la comunidad, es necesario asignarle miembros para que puedan acceder a las páginas que dentro de ella se definan. El usuario que creó la comunidad queda automáticamente perteneciente a la comunidad bajo el rol de Comunity Owner. 1. En la lista de comunidades disponibles, presionar el botón de Acciones para dicha comunidad. Esto despliega la lista de acciones posibles: 2. 3. 4. 5. Seleccionar la acción de Asignar Miembros. Seleccionar el botón de Usuarios Disponibles. Dentro de la lista desplegada, seleccionar el o los usuarios deseados. Presionar el botón de Actualizar asignaciones. HowTo crear una nueva organización Contexto Las organizaciones son un mecanismo que permite agrupar a los usuarios en una estructura jerarquica. Representan la estructura lógica de la empresa o institución donde se utiliza el portal. Tiene una estructura jerárquica con tantos niveles como se desee. Ejemplos: departamentos, grupos, divisiones, empresas asociadas, proveedores, etc. Las organizaciones se dividen en 2 tipos: Organización normal: representa la estructura jerárquica de la compañía. Localización: representa lugares físicos donde opera la compañía. Definiendo una nueva Organización normal La tarea de definición y mantenimiento de organizaciones la realiza el Administrador el cual se identifica con la cuenta admin. 1. 2. 3. 4. 5. 6. Ingresar al portal con la cuenta de Administrador (admin). Dirigirse a Panel de Control->Organizaciones. Presionar el botón de Añadir. Indicar el nombre de la organización. Indicar el tipo de Organización normal. Presionar el botón de Guardar para crear la organización. Definiendo una nueva Localización La tarea de definición y mantenimiento de localizaciones la realiza el Administrador el cual se identifica con la cuenta admin. 1. 2. 3. 4. 5. 6. 7. Ingresar al portal con la cuenta de Administrador (admin). Dirigirse a Panel de Control->Organizaciones. Presionar el botón de Añadir. Indicar el nombre de la organización. Indicar el tipo de Localización. Seleccionar un País, y opcionalmente una Región. Presionar el botón de Guardar para crear la organización. HowTo Crear usuario administrador en una comunidad del Enterprise Portal Contexto La instalación de O3 Performance Suite ofrece dos usuarios definidos por defecto, uno de los cuales tiene el rol de ser administrador del servidor de O3. En el componente Enterprise Portal, este usuario es también administrador y puede crear nuevas comunidades y desarrollar así los componentes del portal que desee. Las organizaciones asignan responsabilidades a diferentes actores, por lo que en ocasiones es necesario separar el rol del administrador del servidor de O3, de aquél que puede administrar una comunidad en particular del Enterprise Portal. También es posible que distintas comunidades sean desarrolladas y administradas por diferentes usuarios. Para el componente Enterprise Portal, existen también un conjunto de roles predefinidos, que poseen permisos especiales para administrar comunidades. Un ejemplo es el rol Administrator que puede crear usuarios, roles, comunidades, asignar derechos sobre las mismas a otros usuarios, agregar portlets, etc. Este es el rol del usuario admin (usuario por defecto disponible al instalar O3). A continuación se describen los pasos necesarios para otorgar los permisos necesarios a un usuario que no pertenece al Rol Administrador, para que pueda desarrollar la comunidad deseada. Asignación de permisos para administrar portlets en una comunidad 1. Definir el usuario en el Enterprise Portal. 2. Definir un Rol de tipo Regular y asignarle dicho rol al usuario deseado. Los pasos que siguen definen cómo darle a este rol permisos para administrar portlets en una determinada comunidad: 3. Desde la página de administración del nuevo rol, seleccionar la opción "Define Permissions" que se encuentra en el menú "Action". 4. Presionar el boton "Add Portlet Permission": aparecerá la lista de todos los portlets para los cuales podrá administrar este rol. Repetir las siguientes acciones para cada uno de los portlets que se desean administrar a través del nuevo rol: a. Buscar y seleccionar el portlet deseado b. Para cada una de las 3 acciones posibles sobre el portlet, seleccionar el permiso correspondiente. Las acciones posibles son: i. View ii. Preferences iii. Configuration c. Indicar si el permiso es de tipo global o es para una determinada comunidad. Para definir le permiso global se debe seleccionar la opción "Enterprise". Para identificar una determinada comunidad se debe: d. seleccionar "community" y seleccionar la comunidad deseada How To definir administrador por comunidad Contexto Definir un usuario con las mismas características del admin, pero únicamente para la comunidad a la que pertenece. Proceso El procedimiento se aplica en las versiones O3 5.1.151 y anteriores. 1. Definir un nuevo usuario en eportal, o utilizar uno previamente definido. 2. Agregar usuario como miembro de una comunidad. Comunidades disponibles -> Acciones -> Asignar miembros 3. Asignar al usuario el rol Community Administrator. Comunidades disponibles -> Acciones -> Asignar roles de usuario 4. Seleccionar Community Administrator. 5. Buscar entre los usuarios disponibles y seleccionar el que se desea. Luego guardar presionando el botón Actualizar asignaciones. 6. Asignar al usuario el rol Community Owner. Comunidades disponibles -> Acciones -> Asignar roles de usuario 7. Seleccionar Community Owner. 8. Buscar entre los usuarios disponibles y seleccionar el que se desea. Luego guardar presionando el botón Actualizar asignaciones. El procedimiento se aplica en las versiones O3 5.2.004 y posteriores. 1. Definir un nuevo usuario en eportal, o utilizar uno previamente definido. Dirigirse a Panel de Control - Menú Usuarios 2. Agregar usuario como miembro de una comunidad. Dirigirse a Panel de Control - Menú Comunidades -> Acciones -> Asignar miembros 3. Asignar al usuario el rol Community Administrator Dirigirse a Panel de Control - Menú Comunidades -> Acciones -> Asignar roles de usuario 4. Seleccionar Community Administrator. 5. Buscar entre los usuarios disponibles y seleccionar el que se desea. Luego guardar presionando el botón Actualizar asignaciones. 6. Asignar al usuario el rol Community Owner. Dirigirse a Panel de Control - Menú Comunidades -> Acciones -> Asignar roles de usuario 7. Seleccionar Community Owner. 8. Buscar entre los usuarios disponibles y seleccionar el que se desea. Luego guardar presionando el botón Actualizar asignaciones. Ese usuario, dentro de esa comunidad tendrá permisos para agregar o quitar páginas, agregar o quitar portlets. HowTo Definir permisos sobre páginas en ePortal Confirmar versión para aplicar estas instrucciones Las indicaciones que se presentan en esta página corresponden a la versión 5.2 de O3 o posteriores. Para versiones anteriores, se utiliza otra versión para el portal (Liferay) que requiere otros pasos para restringir el acceso a las diferentes páginas. Contexto En las organizaciones es posible ofrecer distintos portales, a través del uso de comunidades. Para cada una de ellas, se definen los miembros (usuarios del portal) que tendrán acceso. Por otro lado, los portales se desarrollan a partir de un conjunto de páginas que se organizan de acuerdo a distintas necesidades y que ofrecen la información relevante de la forma más adecuada. En ocasiones los miembros de la comunidad acceden solo a un subconjunto de las páginas del portal, por lo que es necesario manejar restricciones en las páginas. Estas restricciones se implementan con el mecanismo de Roles Normales del Enterprise Portal. La idea entonces, es poder asignar permisos sobre las páginas en función de los roles normales definidos en ePortal. Proceso de definición de restricciones a las páginas Antes de iniciar el proceso de definición de permisos sobre las distintas páginas, es necesario cambiar la configuración del portal. Para ello se deben realizar los siguientes pasos: 1. Bajar el servidor. 2. Modificar la property portal-ext.properties ubicada en <O3>/jboss/server/default/deploy/liferay.war/WEB-INF/classes, comentando la siguiente línea: permissions.user.check.algorithm=2 utilizando el carácter #. #permissions.user.check.algorithm=2 3. Reiniciar el servidor. Luego del cambio, los permisos sobre los diferentes contenidos quedaran negados y se deberán ir habilitando para cada página y portlet. Ejemplo: Permisos para la página inicial de comunidad Guest (autenticación) Como resultado del cambio anterior, al ingresar a la página principal de eportal se muestra la siguiente pantalla, con el mensaje de error "Usted no tienen permiso de ver esta página". Esto ocurre debido a que el rol Guest no tiene permisos para visualizar la comunidad guest y sobre el portlet EportalPortlet. Tanto el rol como la comunidad guest, son los valores por defecto que se utilizan al acceder al portal, antes de autentificarse. Luego de realizado el cambio en la configuración, se puede comenzar la definición de permisos sobre las páginas de la comunidad: 1. Ingresar al portal como usuario administrador (admin según distribución de O3). 2. Ir a la opción “Administrar páginas” desde el menú principal. Editar página "Welcome" de la comunidad Guest A través del botón "Permisos", se llega a una pantalla como la que sigue, donde se debe asignar la opción “ver” para el rol Guest. Asignar permisos sobre la página "Welcome" de la comunidad Guest Luego debemos asignar permisos sobre el portlet EportalPortlet, que es el portlets de bienvenida que se despliega en la página inicial. Vamos a panel de control->Roles y seleccionamos Guest. Dentro del rol la pestaña Definir permisos->Añadir permisos de portlet. Aquí se debe elegir el portlet (en este caso EportalPortlet) establecer el ámbito (alcance del permiso, a nivel de todo el portal o de una determinada comunidad) y configuración. Luego guardamos los cambios. Definir permisos sobre EportalPortlet Luego de realizados los cambios, si volvemos a ingresar a la página principal se mostrará de manera correcta: Página Inicial eportal Una vez asignado el permiso de acceso para una página, se deberá otorgar permisos sobre cada uno de los portlet. En caso contrario se despliega el siguiente mensaje . "Lo siento, no tiene los roles necesarios para acceder a este portlet ". Si deseamos asignar permisos sobre los O3 Portlets, vamos a panel de control->Roles y elegimos el rol. Una vez seleccionado el rol, nos dirigimos a la pestaña Definir permisos->Añadir permisos de portlet. Los O3 Portlets se encuentran en la página 4/5 como muestra la imagen que sigue: Cómo definir permisos sobre O3 Portlets Ejemplo: Cambiar permisos a una página cualquiera de una comunidad arbitraria Los siguientes pasos, permiten ocultar la página de nombre 'Canales' para los usuarios del rol 'User' : 1. 2. 3. 4. 5. Ingresar al portal como usuario administrador (admin según distribución de O3). Dirigirse a la opción “Administrar páginas” desde el menú principal. Elegir la página que se desea ocultar del árbol de la comunidad que se visualiza a la izquierda. Dirigirse a Permisos y de-seleccionar la opción Ver del rol al cual se desea restringir el acceso. Enviar. Ejemplo: Asignar permisos a determinado usuario para modificar una página 1. 2. 3. 4. 5. 6. 7. 8. 9. Ingresar al portal como usuario administrador (admin según distribución de O3). Dirigirse a Panel de Control->Roles. Añadir un nuevo Rol de tipo Normal. Seleccionar el rol creado, y dirigirse a la pestaña Asignar miembros. Seleccionar un usuario disponible y presionar Actualizar Asignaciones. Dirigirse a la opción “Administrar páginas” desde el menú principal. Elegir la página que se desea del árbol de la comunidad que se visualiza a la izquierda. Dirigirse a Permisos y marcar las opciones Actualizar y Ver para el rol definido en el punto 2. Enviar. HowTo donde almacena los documentos e imágenes eportal Contexto Las distintas comunidades suelen utilizar diferentes contenidos, por medio de portlet como ser la biblioteca de documentos o el visor de contenidos web. La idea es conocer donde y como se almacenan estos documentos e imágenes. Documentos La biblioteca de documentos almacenan su contenido (por defecto) en la siguiente ubicación: <o3-install>/jboss/server/default/data/liferay/data/document_library/ Dentro de este directorio se genera una nueva carpeta con el código de la Company que posee el documento. En este directorio se crea una nueva carpeta con el código de la "folder" de Liferay donde está el documento. Está carpeta va a contener otro directorio con el nombre del documento en cuestión, donde se almacena el documento. Por ejemplo: <o3-install>/jboss/server/default/data/liferay/data/document_library/10097/12910/DLFE-1.pdf/ Los archivos se almacenan de acuerdo a cierta nomenclatura, tomando como referencia la versión del mismo, por ejemplo: la primera vez que subes el fichero se llama 1.0 si haces algún cambio y lo subes de nuevo se crea un nuevo fichero con el nombre 1.1 y así sucesivamente. Cada nuevo documento que se agregue, generara una nueva carpeta contenedora. Imágenes El visor de contenidos web utiliza una galería de imágenes, la cual almacena su contenido en base de datos (por defecto hypersonic). HowTo drill across en eportal Contexto Supongamos que tenemos dos cubos, uno de los cuales contiene entre otros datos información sobre pronósticos de venta de los departamentos de una empresa, mientras que el otro tiene información sobre ventas reales realizadas por esos mismos departamentos. Si la empresa quiere confrontar valores reales con los pronosticados para un departamento, puede hacerlo a través de una operación que se denomina drill across. Lo que hace posible esta operación es la existencia de la dimensión departamento que es idéntica para ambos cubos. Por eso se dice que los cubos tienen sus dimensiones departamento conformadas. Si elegimos un departamento en uno de los cubos, en el otro aparecerá ese mismo departamento y se podrá confrontar fácilmente los valores mencionados. Cómo se implementa en O3 1. Se define una vista de cada uno de los cubos de modo que cada una de ellas contenga la dimensión departamento y la medida de ventas respectiva (pronostico o valor real, según el caso). 2. Se incluyen ambas vistas en otros tantos O3 View Portlet de una página del ePortal. 3. Se define en esa misma página un O3 Control Portlet sincronizado con ambos cubos. En el nombre del cubo de este portlet ponemos el nombre de uno de los dos. Este portlet debe permitir seleccionar un departamento. Cómo se ejecuta 1. Se elige en el O3 Control Portletl un departamento. 2. En ambas vistas aparece solamente la fila que corresponde al departamento elegido junto con el valor de ventas correspondiente (pronóstico o valor real). 3. Si es necesario se pueden incluir en las vistas otras dimensiones y/o otras medidas, pero las mencionadas son esenciales para que el drill across funcione correctamente. Bibliografía Ralph Kimball – The soul of the Data Ewarehouse Part 2 Drill Across – 5 de abril de 2003 en www.intelligeententerprise.com HowTo ePortal y localhost Para efectuar este cambio es necesario bajar previamente el servidor. Problema Luego de la instalación completa de O3, el componente Enterprise Portal funciona si se abre un explorador de Internet en el propio equipo donde se instaló pero no desde otro. La razón es que se buscan las páginas referidas como 'localhost' como consecuencia de que al momento de la instalación no se definió correctamente la forma de referenciar dicho componente, o bien se realizó cambio de puertos posterior a la instalación. Solución Para solucionar este problema se debe modificar un archivo dentro de la instalación, para sustituir el valor 'localhost:8080' por el valor correcto (nombre o ip del servidor y puerto utilizado) Se debe editar el archivo de nombre portal-ext.properties que se encuentra en la ubicación: <O3DIR>\jboss\server\default\deploy\liferay.war\WEB-INF\classes donde O3DIR refiere a la raíz de la instalación de O3 En dicho archivo, se debe sustuir el valor de la siguiente property, asginando nombre de servidor y puerto utilizados: o3.cas.server.host=localhost:8080 HowTo exportar e importar una comunidad en eportal Contexto Respaldar comunidades en un medio físico utilizando la operación Exportar. Recuperar respaldos de comunidades desde un medio físico utilizando la operación Importar. Trabajar en diferentes ambientes (producción y desarrollo) utilizando comunidades en paralelo. Proceso Exportar: 1. Dirigirse a Panel de Control 2. Comunidades -> Acciones -> Administrar páginas 3. Seleccionar la pestaña Páginas públicas o privadas, en función de como esté estructurada la comunidad. 4. Seleccionar la pestaña Exportar/Importar 5. Seleccionar la pestaña Exportar (opción por defecto). 6. Seleccionar las opciones de exportación (permisos, tema, etc). 7. Presionar Exportar. 8. Guardar el archivo .lar que se genera. El archivo se almacena en el directorio por defecto establecido en la configuración del navegador para las descargas. Importar: La comunidad donde se van a importar los datos, debe estar creada previamente. 1. 2. 3. 4. 5. Dirigirse a Panel de Control Comunidades -> Acciones -> Administrar páginas Seleccionar la pestaña Páginas públicas o privadas, en función de como esté estructurada la comunidad. Seleccionar la pestaña Exportar/Importar. Seleccionar la pestaña Importar. 6. Cargar el archivo exportado .lar generado utilizando el botón Examinar. 7. Seleccionar las opciones de importación (permisos, tema, etc). 8. Presionar Importar. HowTo importar páginas de otra comunidad Contexto La idea es reutilizar el formato de algunas páginas creadas en otras comunidades. Esto debería ser posible simplemente con las operaciones exportar/importar, pero las mismas presentan algunas dificultades, por ejemplo, que se reemplacen páginas o se ubiquen en niveles incorrectos dentro de la estructura de la comunidad. Workaround Primero se debe tener en cuenta la cantidad de páginas que tiene la comunidad base (para nuestro ejemplo vamos a considerar 7). 1. Generar una copia de la comunidad de la cuál se desean extraer ciertas páginas, eliminando todas aquellas páginas que no sean de interés, y luego exportarla. 2. Descomprimir y editar el archivo .lar (cómo en nuestro ejemplo, la comunidad base tiene 7 páginas, los layout que se quieran agregar deberán continuar la numeración, a fin de evitar "pisar" páginas). 3. Editar el archivo manifest.xml, modificando todas las apariciones de layout-id="1" por layout-id="8" y el path="/groups/../layouts/1/layout.xml" por path="/groups/../layouts/8/layout.xml". Archivo Original: 3. <root> <header build-number="5203" export-date="lun, 04 abr 2011 10:01:58 -0300" type="layout-set" group-id="14209" private-layout="true" theme-id="o3default_WAR_eportalthemes" color-scheme-id="01"/> <layouts> <layout layout-id="1" path="/groups/14209/layouts/1/layout.xml"/> </layouts> <roles/> <portlets> <portlet portlet-id="71_INSTANCE_Do4c" layout-id="1" path="/groups/14209/portlets/71_INSTANCE_Do4c/14213/portlet.xml"/> <portlet portlet-id="com_ideasoft_o3_portlets_O3Portlet_WAR_o3portal_INSTANCE_2sFz" layout-id="1" path="/groups/14209/portlets/com_ideasoft_o3_portlets_O3Portlet_WAR_o3portal_INSTANCE_2sFz/14213/portlet.xml"/> <portlet portlet-id="15" layout-id="1" path="/groups/14209/portlets/15/14213/portlet.xml"/> <portlet portlet-id="25" layout-id="1" path="/groups/14209/portlets/25/14213/portlet.xml"/> </portlets> </root> Archivo Modificado: <root> <header build-number="5203" export-date="lun, 04 abr 2011 10:01:58 -0300" type="layout-set" group-id="14209" private-layout="true" theme-id="o3default_WAR_eportalthemes" color-scheme-id="01"/> <layouts> <layout layout-id="8" path="/groups/14209/layouts/8/layout.xml"/> </layouts> <roles/> <portlets> <portlet portlet-id="71_INSTANCE_Do4c" layout-id="8" path="/groups/14209/portlets/71_INSTANCE_Do4c/14213/portlet.xml"/> <portlet portlet-id="com_ideasoft_o3_portlets_O3Portlet_WAR_o3portal_INSTANCE_2sFz" layout-id="8" path="/groups/14209/portlets/com_ideasoft_o3_portlets_O3Portlet_WAR_o3portal_INSTANCE_2sFz/14213/portlet.xml"/> <portlet portlet-id="15" layout-id="8" path="/groups/14209/portlets/15/14213/portlet.xml"/> <portlet portlet-id="25" layout-id="8" path="/groups/14209/portlets/25/14213/portlet.xml"/> </portlets> </root> 4. Guardar. 5. Renombrar la carpeta ubicada dentro de ../groups/../layouts con el nuevo id, en este caso 8. 6. Editar el archivo layout.xml modificando todas las apariciones de layout-id="1" por layout-id="8". Archivo Original: <layout old-plid="14213" layout-id="1"> <parent-layout-id>0</parent-layout-id> ... </layout> Archivo Modificado: <layout old-plid="14213" layout-id="8"> <parent-layout-id>0</parent-layout-id> ... </layout> 7. Guardar. 8. Comprimir nuevamente como zip y renombrar como .lar 9. 9. Importar comunidad. Cómo resultado de este proceso, nuestra comunidad base ahora tendrá 8 páginas. HowTo instalar nuevo tema de apariencia Contexto Personalizar la apariencia de nuestro portal, para adecuarlo a nuestros gustos y necesidades. Proceso Este proceso debe ser efectuado por el administrador del eportal. Los archivos deben 1. 2. 3. 4. 5. 6. 7. Dirigirse a Panel de Control. Instalación de Plugins (menú abajo a la izquierda). Plugins de temas de apariencia (2da. pestaña del menú superior). Instalar más temas. Subir archivo (2da.pestaña del menú superior), utilizando Examinar -> buscando la ruta del archivo con extensión .war Presionar Instalar. Refrescar navegador. HowTo Instalar nuevo theme Default en ePortal Confirmar versión para aplicar estas instrucciones Este nuevo tema se aplica en aquellas versiones anteriores a O3 5.4. A partir de está versión ya viene incluido en la instalación. Contexto Se presenta un nuevo tema gráfico para nuestras páginas que modifica el que viene por defecto con la instalación. Entre otras mejoras, facilita el acceso desde el menú superior a las páginas del segundo nivel. Instalación El proceso es el siguiente: 1. Bajar el servidor. 2. Renombrar el archivo <InstalaciónO3>\jboss\server\default\deploy\gserver\eportalthemes.war (ejemplo eportalthemes_old.war). 3. Copiar y descomprimir el archivo zip, de forma que quede una carpeta como se muestra en la siguiente imagen (como resultado, donde antes teníamos un archivo .war, ahora tendremos una carpeta con el mismo nombre): 4. Reiniciar jboss, mientras tanto borrar la cache del navegador que utilice y reiniciarlo. Para volver al viejo tema, se debe bajar el servidor, eliminan el archivo eportalthemes.war y renombrar el archivo eportalthemes_old.war como estaba previamente. Default - RED Default - BLUE Default - GREEN Default - GREY HowTo Instalar plantillas en el Enterprise Portal Contexto Hay ocasiones en las cuales el conjunto de plantillas disponibles en Enterprise Portal para confeccionar nuestras páginas no se ajusta a nuestra necesidad. Para estos casos, existe la posibilidad de definir e instalar nuevas plantillas. Instalación Existen 2 formas de realizar la instalación de las nuevas plantillas: 1. Copiar los archivos con extensión war en: <install-o3>/jboss/server/default/deploy 2. Siguiendo los siguientes pasos: a. Ir a Panel de Control. b. Instalación de Plugins (menú abajo a la izquierda). c. Plugins de plantilla de página (3era. pestaña del menú superior). d. Instalar más plantillas de página. e. Subir archivo (2da.pestaña del menú superior).. En examinar -> buscar el archivo con extensión war de la plantilla. f. Presionar Instalar. g. Refrescar navegador. Nuevas Plantillas Diseño Descripción Archivo de instalación 3 columnas (30-50-20) layout-3-Columns_30_50_20.war 2 columnas (80-20) layout-2-columns-80-20.war 4 columnas (20-30-30-20) layout-4.war Superior: 2 columnas (30-70) Inferior: 1 columna (100) layout-2-1.war Superior: 1 columna (100) Medio: 2 columnas (75-25) Inferior: 1 columna (100) 1-2-1-columns.war Superior: 1 columna (100) Medio: 3 columnas (40-30-40) Inferior: 1 columna (100) 1-3-1-columns.war Superior: 2 columnas (50-50) Medio: 1 columna (100) Inferior: 2 columnas (50-50) 2-1-2-columns.war Superior: 3 columnas (40-30-40) 3-2-3-columns.war Medio: 2 columna (40-60) Inferior: 3 columnas (40-30-40) HowTo Login Anónimo en ePortal Login Anónimo en ePortal Describe el funcionamiento del login anónimo, los pasos necesarios para configurarlo, y como generar un parche a aplicar sobre la versión 5.2.004 de O3 que incluya este feature. Objetivo Los objetivos del Usuario anónimo en el eportal son: Permitir a usuarios que acceden al Enterprise Portal a trabajar en la comunidad Guest, sin necesidad de registrarse como usuarios. Permitirles logearse si así lo desean. Si se deslogean volver a trabajar como anónimos en la comunidad Guest. La funcionalidad completa de login anónimo está disponible a partir de la versión 5.3. Enfoque Mientras el usuario está como anónimo, trabaja con un usuario famoso contra el servidor O3. El usuario típicamente es guest pero puede ser configurado. Funcionamiento El login anónimo es un feature opcional en el Enterprise Portal. Por defecto se encuentra desactivado. Los portlets de O3, para funcionar, requieren una sesión autenticada del lado del servidor. Cuando el feature está habilitado, y el usuario no está autenticado en el Enterprise Portal, los portlets O3 hacen un login (automáticamente) con un usuario configurado para este fin (al cual llamaremos usuario "anónimo"). Esto plantea un nuevo escenario: el portal es accedido por un usuario anónimo. Luego, este usuario anónimo se autentica en el sistema (login tradicional). En este escenario, el sistema invalida la sesión o3 del usuario anónimo luego del login tradicional. En consecuencia, se evita que el usuario autenticado con el login tradicional siga viendo la sesión del usuario anónimo. Configuración Se debe especificar el usuario y password del usuario anónimo, en el archivo de configuración GServer.properties, que se encuentra en <O3_HOME>/jboss/server/default/ideasoft-o3/, agregando la siguiente información: Property Descripción Default o3.anonymous.user Indica el rol habilitado. guest o3.anonymous.password indica el password del rol habilitado. guest GServer.properties de ejemplo o3.anonymous.user=guest o3.anonymous.password=guest El feature de login anónimo se activa cuando se ha especificado la propiedad o3.anonymous.user. Una vez modificada la configuración del servidor, se deberá agregar el usuario guest en O3 ya sea a través del componente AdmServer o de Portal y asociarlo al rol de licenciamiento, por ejemplo User. Ver: Administrando Usuarios (Web) - Administrando Roles (Web) HowTo ocultar el panel de control a usuarios anónimos Contexto Algunos portales, principalmente de organismos públicos desarrollan sus comunidades utilizando páginas públicas limitando el acceso de administración y configuración solo a los usuarios administradores. La idea es ocultar el menú de acceso al eportal para los usuarios "anónimos", y que solo los usuarios con rol de administrador tengan acceso al panel de control a través de una url. Proceso 1. Bajar jboss. 2. Editar el archivo portal_normal.vm referente a la plantilla del tema (en este caso default), ubicado en: <o3-install>/jboss/server/default/deploy/gserver/eportalthemes.war/o3default/templates/ modificando la línea: #parse ("$full_templates_path/dock.vm") por lo siguiente: #if (($permissionChecker.isOmniadmin())||$permissionChecker.isCompanyAdmin($themeDisplay.getCompanyId())) #parse ("$full_templates_path/dock.vm") #end 3. Salvar los cambios 4. Reiniciar jboss. A partir del cambio los administradores deberán acceder a través de la siguiente url: por ejemplo: http://localhost:8080/eportal/c/portal/login (<nombre o ip del server>:<puerto>/eportal/c/portal/login) HowTo ocultar menuItem Páginas públicas (0) en eportal Contexto Se aplica para aquellas comunidades diseñadas solo con páginas privadas, que no utilizan páginas públicas. Está modificación oculta la opción del menú del usuario, solo en aquellos casos donde la cantidad de página públicas de una comunidad es cero. Proceso 1. Dirigirse a la ubicación <03_install>/jboss/server/default/deploy/liferay.war/html/taglib/ui/my_places y editar el archivo page.jsp agregando showPublicPlace = false if (publicLayoutsPageCount == 0) { if (organizationCommunity) { ... } showPublicPlace = false; } boolean showPrivatePlace = true; if (privateLayoutsPageCount == 0) { ... } 2. Refrescar navegador. Resultado Se oculta el menuItem Páginas públicas(0) para la comunidad Default: HowTo personalizar una comunidad en eportal Confirmar versión para aplicar estas instrucciones Las indicaciones que se presentan en esta página corresponden a la versión 5.2 de O3 o posteriores. Para versiones anteriores, se utiliza otra versión para el portal (Liferay) que requiere otro proceso de personalización. Contexto Personalizar la apariencia de las comunidades utilizando themes diseñados por la organización. Los cambios deben ser realizados por el usuario administrador. Instalación de nuevo tema de apariencia Los nuevos temas de apariencia quedaran instalados bajo la ubicación <o3-install>/jboss/server/default/deploy/<nombre del tema.war> 1. 2. 3. 4. 5. 6. 7. Dirigirse a Panel de Control. Instalación de Plugins (menú abajo a la izquierda). Plugins de temas de apariencia (2da. pestaña del menú superior). Instalar más temas. Subir archivo (2da.pestaña del menú superior), utilizando Examinar -> buscando la ruta del archivo con extensión .war Presionar Instalar. Refrescar navegador. Aplicar nuevo tema en una comunidad 1. 2. 3. 4. 5. Dirigirse a Panel de Control Comunidades -> Acciones -> Administrar páginas Seleccionar la pestaña Páginas públicas o privadas. Seleccionar pestaña Apariencia. Seleccionar un tema disponible. Modificar nuevo tema instalado 1. 2. 3. 4. 5. 6. Bajar el servidor. Descomprimir el archivo war o editarlo. Modificar css, imágenes, etc. Comprimir como war manteniendo la estructura de directorios. Reiniciar el servidor. Borrar cache y/o refrescar el navegador. Eliminar nuevo tema instalado Una vez eliminado el tema, aquellas comunidades o páginas que lo estaban utilizando, cambiaran automáticamente al tema default. 1. Bajar el servidor. 2. Eliminar el <nombre del tema.war> ubicado en <o3-install>/jboss/server/default/deploy/ 3. Reiniciar servidor. HowTo Quitar Mi Comunidad en ePortal Confirmar versión para aplicar estas instrucciones Las indicaciones que se presentan en esta página corresponden a la versión 5.2 de O3 o posteriores. Para versiones anteriores, se utiliza otra versión para el portal (Liferay) que requiere otros pasos para quitar "Mi Comunidad". Contexto Las comunidades son un mecanismo que permiten agrupar usuarios de acuerdo a características comunes en cuanto a la información que manejan, los intereses que tienen o el tipo de trabajo que desempeñan. Cada nuevo usuario que se defina, tendrá creada por defecto una comunidad denominada "Mi Comunidad", en la cual podrá definir nuevas páginas, agregar portlet, etc. La idea entonces, es poder quitar el acceso a la comunidad generada por defecto, y que los usuarios solo puedan tener acceso a la(s) comunidad(es) de la cual son miembros. Proceso para quitar "Mi Comunidad" Es necesario cambiar la configuración del portal. Para ello se deben realizar los siguientes pasos: 1. Modificar la property portal-ext.properties ubicada en <O3>/jboss/server/default/deploy/liferay.war/WEB-INF/classes, cambiando el valor true de las propiedades: layout.user.public.layouts.enabled=true layout.user.private.layouts.enabled=true por false, quedando definidas de la siguiente manera: layout.user.public.layouts.enabled=false layout.user.private.layouts.enabled=false 2. Reiniciar el servidor. Organizaciones vs. Comunidades Contexto Ambas soluciones son buenas para muchas situaciones y muchas veces hay pequeñas diferencias. Éstos son algunos de los beneficios para cada uno de los enfoques. Beneficios del uso de las Organizaciones Las organizaciones pueden ser estructuradas de manera jerárquica. Las organizaciones son administradas por el administrador del portal. Se adecuan mejor en estructuras externas que cambian con menos frecuencia. Beneficios del uso de las Comunidades Es posible delegar el permiso de crear nuevas comunidades, por lo que se adaptan de manera ágil con estructuras dinámicas y grupos que cambian con mucha frecuencia. Permiten facilitar la delegación de tareas dentro de una comunidad. Los usuarios pueden pertenecer a muchas comunidades. How To O3 AdmServer Ayudas y explicaciones de cómo realizar operaciones con el componente O3AdmServer. Cómo usar una nueva Base de Datos para RBAC Definición y Permisos de Usuarios HowTo Acceso y Configuración Página de Ayuda de un Cubo HowTo cambiar password al usuario system Migración O3Server.cfg a Base de Datos Cómo usar una nueva Base de Datos para RBAC A continuación se detallan los pasos para usar RBAC sobre un motor de base de datos diferente a Hypersonic. Los pasos indicados con el símbolo deben ejecutarse cada vez que se actualiza la versión del servidor ya que la actualización retorna las configuraciones descriptas en estos puntos a su estado por defecto Creación de la Base de Datos para RBAC (Ejemplo con Oracle) 1. Copiar el driver JDBC que se desea utilizar en las siguientes carpetas <O3>/classes/jdbc <O3>/jboss/server/default/lib 2. Iniciar el JBoss 3. Iniciar el AdmServer 4. En el editor de configuración del Servidor, indicar los datos correspondientes para la base de datos que se desea utilizar. Por ejemplo: Motor Oracle Driver oracle.jdbc.driver.OracleDriver URL jdbc:oracle:thin:@orion.ideasoft:1521:ORION Usuario y password Una cuenta válida Si desea configurar una base diferente, consulte: Configuración de drivers jdbc 5. Presionar el botón de creación de la base de datos (Generar Tablas) 6. Cerrar el AdmServer Actualizar el Data Source de JBoss para tomar el nuevo repositorio de usuarios 1. 2. 3. 4. 5. Bajar el JBoss Renombrar el archivo <O3>jboss\server\default\deploy\gserver\gserver-hsql-ds.xml de modo que se llame #gserver-hsql-ds.xml Copiar el archivo <O3>jboss\server\default\deploy\gserver#gserver-oracle-ds.xml de modo que se llame gserver-oracle-rbac-ds.xml Editar este último archivo renombrado (gserver-oracle-ancel-ds.xml) Modificar el contenido del tag <connection-url> con el siguiente contenido: <connection-url>jdbc:oracle:thin:@orion.ideasoft:1521:ORION</connection-url> 6. Modificar el contenido de los tags <user-name> y <password> con una cuenta válida Ingreso de los usuarios mínimos para el funcionamiento 1. 2. 3. 4. 5. Iniciar el JBoss Iniciar el AdmServer Ingresar con el usuario system de password system Dar de alta los siguientes usuarios user, con password user admin, con password admin 5. Al usuario admin agregarle los siguientes atributos isAdmin con valor booleano en TRUE runAsEnabled con valor booleano en TRUE 6. Dar de alta los siguientes roles User al que debe pertenecer el usuario user Manager al que debe pertenecer el usuario admin 7. Cerrar el AdmServer Definición y Permisos de Usuarios Atributos que determinan el comportamiento de los usuarios La definición de usuarios se realiza desde el componente O3Server Administrator, en el nodo Seguridad Para cada usuario pueden definirse distintos atributos que determinan el comportamiento del usuario. Existe un conjunto de atributos predefinidos, los cuales deben definirse teniendo en cuenta uso de mayúsculas y minúsculas. A continuación se enumeran los atributos más utilizados: Atributo Significado Valores posibles Rol o Usuario Comportamiento por Defecto canAddViews Si puede grabar vistas en el servidor booleano usuario Si el attr. no existe, el usuario puede grabar vistas isAdmin Indica que el usuario es administrador de O3 booleano usuario Si el attr. no existe, el usuario no es administrador runAsEnabled Responde a requerimientos de configuración cuando el servidor envía notificaciones a los usuarios, por ejemplo a través del servicio de envío de reglas. Permite que el usuario tome momentáneamente los permisos requeridos por el servicio en cuestión. No tiene ningún efecto sobre los permisos que el usuario utiliza al loguearse explícitamente al servidor booleano usuario falso Atributos que determinan el comportamiento de grupos de usuarios El atributo CanAddViews indica si se permite o se niega la posibilidad de salvar vistas en el servidor. En ocasiones, es necesario definir el comportamiento para un grupo de usuarios más que para cada usuario en particular. En este caso es ventajoso poder definir el comportamiento para los distintos roles del sistema y no solo para cada usuario. A partir de la versión 5 es posible definir este comportamiento por rol desde el menú de Administración de la interfaz web. Una vez seleccionado el modo Administración, se debe seleccionar la solapa "PERMISOS O3". Allí se verá la lista de roles definidos. Para cada rol se debe indicar 3 tipos de permisos para las vistas: Tipo de vistas Significado Valores Posibles Rol o Usuario Comportamiento por Defecto Pública Si puede grabar vistas públicas en el servidor Permitir Denegar No Especificado rol El valor No Especificado tendrá el comportamiento que indique el valor por defecto. El valor por defecto está visible al momento de definir estos permisos, y en general este valor es Permitir, pero puede ser modificado de Rol Si puede grabar vistas del mismo Rol en el servidor Permitir Denegar No Especificado rol El valor No Especificado tendrá el comportamiento que indique el valor por defecto. El valor por defecto está visible al momento de definir estos permisos, y en general este valor es Permitir, pero puede ser modificado Privada Si puede grabar vistas privadas en el servidor Permitir Denegar No Especificado rol El valor No Especificado tendrá el comportamiento que indique el valor por defecto. El valor por defecto está visible al momento de definir estos permisos, y en general este valor es Permitir, pero puede ser modificado Controles más específicos Si bien los atributos presentados anteriormente definen algunas carácterísticas generales del comportamiento de los usuarios, puede ser insuficiente para modelar ciertos comportamientos que se requieren con frecuencia. Algunos ejemplos de los comporntamientos se detallan a continuación. Cada usuario mantiene control de eliminación sobre las vistas creadas por él mismo. La situación se presenta cuando debemos decidir si permitimos a los usuarios almacenar sus propias vistas en el servidor. Si el acceso a la información es a través del cliente Web, será necesario habilitar el MODO EDICIÓN para que el usuario pueda modificar las vistas luego de creadas. En un esquema seguro de trabajo, es recomendable que en este escenario se agregue la restricción de que cada vista solo puede ser eliminada por el usuario que la creó. Para ello se debe agregar la siguiente cláusula en el archivo gserver_custom.properties o3.views.defaultRestriction=owner El archivo gserver_custom.properties se debe ubicar en el siguiente directorio: <O3_DIR>\jboss\server\default\ideasoft-o3 Tener en cuenta que dicho archivo no es creado por la instalación del producto, por lo que debe ser creado por el administrador de la instalación HowTo Acceso y Configuración Página de Ayuda de un Cubo INTRODUCCION A un cubo publicado mediante el O3 Server, es posible asignarle una Pagina de Ayuda del cubo, donde explicar los objetivos del mismo, su uso, alcance de algunas medidas, dimensiones, etc. Para ello debemos crear la misma en codigo de hypertexto (html, por ejemplo). PROCEDIMIENTO Luego de creada la pagina, por ejemplo Ventas.html, tenemos que asociar una URL al cubo desde al O3 AdmServer. En la pestaña General del Cubo, hay un campo Pagina de ayuda y en esa ventana asociar la URL, por ejemplo http://www.compania.com.uy/O3Help/Ventas.html. En el caso de no contar con un servidor web, se puede utilizar el mismo JBoss de la instalacion del O3 Performance Suite. 1. crear una carpeta O3Help (por ejemplo), en <O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/ 2. Considerando que la pagina se llama Ventas.html, el servidor es el 192.168.10.10, en la ventana del O3 AdmServer ingresar la siguiente URL http://192.168.10.10:8080/o3portal/O3Help/Ventas.html FORMAS DE USO DEL LADO DEL CLIENTE O3 BROWSER Acceder a la pagina de ayuda del cubo desde el menu Ayuda, Ayuda de Cubo. Se abrira el su Navegador Web con la pagina Ventas.html O3 PORTAL En el Barra de Herramientas del O3 Portal, hay un icono en forma de signo de interrogacion a la derecha, que al "cliquearlo" se abrira en otro Navegador la pagina Ventas.html CONSIDERACIONES 1. En el momento de migrar de version, tener en cuenta de respaldar y copiar esta carpeta. 2. Para que funcione correctamente en Unix, GNU/Linux; hay que prender una property indicando el path de acceso al Navegador Web que tenga instalado. Esto se hace agregando una linea al archivo <O3>/O3Browser.properties, por ejemplo: ideasoft.browser.navigator=/usr/bin/firefox {0} HowTo cambiar password al usuario system Contexto La instalación de O3, establece por defecto la definición de un usuario especial denominado 'system' para acceder al O3 Server Admninistrador. Este usuario se utiliza en aquellos casos en los cuales, por algún motivo no sé cuenta con los datos del usuario administrador. La idea de este howto es explicar el proceso para modificar su password. Proceso 1. Ingresar a O3 Server Admninistrador como administrador o en su defecto como usuario: system, password: system. 2. Posicionarse el cursor en el árbol. Está acción permite habilitar la opción que vamos a seleccionar en el paso siguiente. 3. Dirigirse al menú Archivo, opción Cambiar Contraseña de Usuario 'system'. Se despliega el siguiente dialogo: Contraseña Actual (por defecto) : system 4. Ingresar y confirmar la nueva contraseña. 5. Presionar aceptar para guardar la modificación. Se confirma el resultado de la operación: Migración O3Server.cfg a Base de Datos La finalidad de la migración del O3Server.cfg a base de datos es pasar toda la información que contiene (cubos publicados, vistas, etc.) a base de datos, y seguir trabajando desde allí. Los pasos para la migración son: 1. Creación o actualización de la base de datos. 2. Migración de los datos. 3. Configuración del O3Server para iniciarse con base de datos. 1- Actualización o creación de la Base de Datos. No es necesario que el Servidor O3 esté levantado a no ser que se quiera usar la base Hypersonic que viene en el jboss, conectandose por host:puerto. Iniciar el AdmServer y en la toolBar seleccionar "Herramientas -->Generador Esquemas Base de Datos". Esto muestra la siguiente ventana: Se configura la conexión a la base de datos: 1. Motor, las opciones posibles son SQL Server Microsoft, SQL Server Opta, Oracle, MySQL, PostgreSQL, HsqlDb, Derby, other. 2. Manejador (driver) a utilizar (debe tenerse el driver correspondiente en el servidor <InstalaciónO3>\jboss\server\default\lib) 3. Url completa a la base de datos (servidor, puerto de la base de datos, nombre de la misma, etc.). En caso de realizar la migración a una nueva base de datos, la misma debe estar creada de antemano. 4. Usuario y contraseña (que se guardará encriptada) para la base de datos. Además: Config datasource Se debe configurar <InstalaciónO3>\jboss\server\default\deploy\gserver\gserver-hsql-ds.xml, según la base de datos a la que se quiera exportar (salvo que se vaya a utilizar Hypersonic), se debe cambiar el contenido de los siguientes tags: <connection-url>, <driver-class>, <user-name> y <password>, y comentar <metadata>. Configuración inicial (original): Ejemplo para conexión a SQL Server: En este caso la configuración del archivo corresponde a indicar la URL, el driver, usuario, contraseña y comentar el tag indicado. Se deberá comentar la property hibernate.dialect = org.hibernate.dialect.HSQLDialect de <InstalaciónO3>\jboss\server\default\ideasoft-o3\GServer.properties si no se va a trabajar con Hypersonic, dejando hibernate.dialect = org.hibernate.dialect.SQLServerDialect si se va a utilizar SQL Server, por ejemplo. Luego se tiene 3 opciones: 1- Verificar la conexión a la base con el botón "Verificar Conexion". Si la conexión es satisfactoria se mostrará un mensaje como el siguiente: 2- En caso de que se quiera crear las tablas, se debe de presionar el botón con la etiqueta "Generar Tablas". Se mostrará el siguiente mensaje: 3- Si las tablas ya existen y lo que se quiere es actualizar la estructura de las mismas, se debe de presionar el botón con la etiqueta "Actualizar Tablas". Se crearán/actualizarán las tablas de RBAC, E2, jwf, y las necesarias para cubos, vistas, cubos-roles, cubos-perfiles, modelos, etc. 2- Migración de los datos. Luego de una actualización exitosa de la base de datos, se debe de proceder a migrar los datos del O3Server.cfg (cubos, vistas, etc.) a la base de datos. Para migrar los datos se debe: 1. Iniciar el O3 server y conectarse usando el AdmServer 2. Luego desde el AdmServer, seleccionar en la toolBar la opción "Herramientas --> Migrador de configuración del Servidor". Para realizar la migración se debe presionar el botón con la etiqueta "Migrar" y a continuación se mostrará en el área de "Mensajes de la migración" la información de qué se migró: 3. La última linea del mensaje está avisando que ya están disponibles los cubos como para comenzar a trabajar desde base de datos. 3- Configuración del O3 Server para levantar con Base de Datos. Luego de haber seguido los pasos anteriores se debe de bajar el servidor y editar el archivo GServer.properties para modificar la property o3.config.dataBase de <InstalaciónO3>\jboss\server\default\ideasoft-o3\GServer.properties, con el valor "true". Al levantar el servidor nuevamente este tomará la información que se guardó en la base de datos y toda nueva información sera guardada en este lugar. Como los usuarios admin y user están en RBAC, se deben crear manualmente en el AdmServer una vez que se migró a base de datos. Volver a trabajar con O3Server.cfg Como ya se mencionó a partir de O3 5.0 se almancena la configuración del servidor en base de datos, a diferencia de versiones anteriores donde la configuración era almacenada en el archivo O3Server.cfg Para facilitar la migración desde versiones anteriores se ofrece este mecanismo que tiene por resultado eliminar el uso del O3Server.cfg y pasar a adminsitrar en base de datos la información de cubos publicados y perfiles de acceso. De todas formas se aclara que si se necesita volver a la situación inicial, trabajando con O3Server.cfg, el procedimiento sería: 1. Apagar la property (o3.config.dataBase = false) que se define en el archivo Gserver.properties ubicado en <O3_DIR>\jboss\server\default\ideasoft-o3 2. Reiniciar el O3Server (Jboss). Los cambios hechos desde la migración (publicación de nuevos cubos, creación de nuevas vistas, etc.), no se verán reflejados en el O3Server.cfg. How To JBoss Ayudas y explicaciones de cómo realizar operaciones con el componente JBoss. Cambiar o deshabilitar la password de la jmx-console HowTo Aumentando el nivel de log del O3 Server HowTo Cambiar el puerto 8080 en JBoss HowTo cambiar el timeout de la sesión de O3 HowTo - Cambio de puertos del Servidor de O3 HowTo configurar el Servicio de Mail de JBoss HowTo encriptar las passwords de las fuentes de datos (en gral, bases de datos) HowTo Monitorear uso de memoria del JBoss HowTo ocultar o modificar la pagina de inicio de JBoss HowTo patch para problemas de consumo de memoria HowTo Workaround problema nombre del server O3 Consideraciones de Seguridad Cambiar o deshabilitar la password de la jmx-console Contexto La jmx-console es una herramienta que nos permite controlar el funcionamiento del JBoss. Por medio de esta podemos saber propiedades, cambiar valores, y hasta bajar el JBoss. Por esto es importante decidir si el acceso a la misma será restringido o no. Si se requiere, la jmx-console puede ser deshabilitada moviendo jmx-console.war desde <InstalaciónO3>/jboss/server/default/deploy hacia otro directorio. Es importante reservar ese war de forma de volver a habilitar en un futuro la jmx-console, colocandolo nuevamente en el mencionado directorio. Activar/desactivar el acceso a la jmx-console Para activar o desactivar el acceso debemos editar los siguientes archivos. 1 - <o3>/jboss/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml <jboss-web> <!-- Uncomment the security-domain to enable security. You will need to edit the htmladaptor login configuration to setup the login modules used to authentication users. <security-domain>java:/jaas/jmx-console</security-domain> --> </jboss-web> y descomentar para activar el control de acceso <jboss-web> <!-- Uncomment the security-domain to enable security. You will need to edit the htmladaptor login configuration to setup the login modules used to authentication users. --> <security-domain>java:/jaas/jmx-console</security-domain> </jboss-web> 2 - <o3>/jboss/server/default/deploy/jmx-console.war/WEB-INF/web.xml buscar la siguiente parte: <!-- A security constraint that restricts access to the HTML JMX console to users with the role JBossAdmin. Edit the roles to what you want and uncomment the WEB-INF/jboss-web.xml/security-domain element to enable secured access to the HTML JMX console. <security-constraint> <web-resource-collection> <web-resource-name>HtmlAdaptor</web-resource-name> <description>An example security config that only allows users with the role JBossAdmin to access the HTML JMX console web application </description> <url-pattern>/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>JBossAdmin</role-name> </auth-constraint> </security-constraint> --> y descomentar para activar el control de acceso <!-- A security constraint that restricts access to the HTML JMX console to users with the role JBossAdmin. Edit the roles to what you want and uncomment the WEB-INF/jboss-web.xml/security-domain element to enable secured access to the HTML JMX console. --> <security-constraint> <web-resource-collection> <web-resource-name>HtmlAdaptor</web-resource-name> <description>An example security config that only allows users with the role JBossAdmin to access the HTML JMX console web application </description> <url-pattern>/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>JBossAdmin</role-name> </auth-constraint> </security-constraint> 3 - por último cambiar el password del usuario admin editar el archivo <o3>/jboss/server/default/conf/props/jmx-console-users.properties admin=admin y cambiar a admin=mi_nueva_clave Sobre estos cambios al Servidor La aplicación de los ajustes recomendados en está página al Servidor de O3 no afectan los Servicios de Asistencia y Respaldo que una instalación concreta pudiera contar (según corresponda al modo de licenciamiento, plazo, servicios de asistencia, etc.), ya que se consideran cambios de configuración soportados. Hacemos esta aclaración en respuesta a consultas de nuestros clientes. HowTo Aumentando el nivel de log del O3 Server Cómo aumentar el nivel de log del servidor jboss Contexto El aumento del nivel de log ayuda a analizar situaciones, si bien genera gran cantidad de información y que su generación está optimizada y ocurre en forma asincrónica, puede afectar la operación en algunos entornos (consumo de espacio en disco, consumo de tiempo para generar el log). En consecuencia, se recomienda operar con un nivel de log reducido, y en caso de ser necesario activar la generación de log detallado. Por defecto, desde O3 5.0.050 en adelante, el log queda configurado para trabajar en forma reducida. Este how-to explica como activar una configuración alternativa de log de modo de producir un mayor nivel de detalle para analizar situaciones o problemas que se presenten. Procedimiento Sobreescribir el archivo <o3>/jboss/server/default/conf/jboss-log4j.xml con el archivo de configuración que se puede acceder mediante este link o renombrando el archivo jboss-log4j.xml a jboss-log4j-sin_debug.xml y el jboss.-log4j-debug.xml a jboss-log4j.xml Luego del cambio, es necesario que la hora de modificación del archivo se actualice. En Linux basta con usar el comando touch. touch jboss-log4j.xml En Windows, para actualizar la hora de modificación del archivo basta con editarlo y grabarlo. Una vez modificada la hora del archivo de configuración, en pocos minutos el Servidor tomará el cambio. Si estamos en consola veremos pasar el siguiente mensaje 13:28:08,537 INFO [Log4jService$URLWatchTimerTask] Configuring from URL: resource:jboss-log4j.xml Si revisamos el log (<o3>/jboss/server/default/log/server.log) veremos el siguiente mensaje 2008-09-10 13:28:08,537 INFO [Log4jService$URLWatchTimerTask] Configuring from URL: resource:jboss-log4j.xml [org.jboss.logging.Log4jService$URLWatchTimerTask] TR[Timer-0] En cualquier caso, una alternativa válida para asegurarse que el servidor tomó la nueva configuración es bajar y levantar el Servidor nuevamente. HowTo Cambiar el puerto 8080 en JBoss La configuración de puertos de JBoss puede especificarse en un archivo xml, lo que facilita su administración. Ejemplo: Cómo cambiar puerto 8080 La forma más fácil de cambiar el 8080 por otro puerto es modificar en el archivo: <jboss>/server/default/deploy/jbossweb-tomcat55.sar/server.xml en la siguiente línea y reiniciar el servidor: <Connector port="8080" address="${jboss.bind.address}" HowTo cambiar el timeout de la sesión de O3 Objetivo Hay instalaciones que por la cantidad de usuario que se conectan y luego no cierran su sesión terminan haciendo que el jboss de un out of memory. esto se debe a que el servidor no cierra hasta luego de una hora la sesión si esta no tiene más actividad. Para bajar este tiempo de espera seguir estos pasos: La configuracion del tiempo de expiracion de las sesiones web se hace en archivos web.xml de las aplicaciones dentro del servidor. o3portal jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/WEB-INF/web.xml eportal jboss/server/default/deploy/gserver/liferay.war/WEB-INF/web.xml En esos archivos hay que buscar algo de la forma: <session-config> <session-timeout>numero</session-timeout> </session-config> donde el numero es el tiempo en minutos de no operacion sobre una sesion para ser cerrada por el servidor. En o3portal sale configurado en 60 minutos y en eportal en 30 minutos. Modificando esos parametros podes bajar esos tiempos. HowTo - Cambio de puertos del Servidor de O3 Configuración de puertos del Servidor de O3 Contexto El O3 Server expone sus servicios mediante un conjunto de puertos de red (TCP network ports). Es necesario que estos puertos se encuentren disponibles en el equipo donde se instala el servidor de O3. Cuando dichos puertos no están disponibles (pe. están en uso por otra aplicación), es necesario realizar un cambio de configuración para indicarle a O3 un conjunto de puertos libres que puedan ser utilizados. Alcance del Documento Este documento describe los pasos necesarios para configurar los puertos utilizados por el O3 Server. Este documento se aplica a versiones 4.x o posteriores. Descripción El cambio de configuración de puertos debe realizarse coordinando varios elementos: Definición de nuevos puertos: Los nuevos puertos a utilizar se configuran a nivel del contenedor JEE de O3 que es JBoss AS. JBoss utiliza un conjunto de puertos para distintos servicios, entre ellos los que son relevantes para el funcionamiento de O3. Para facilitar su modificación, se dispone de conjuntos de puertos predefinidos, cada uno con un nombre asociado. Para modificar los puertos la forma recomendada es cambiar un conjunto de puertos por otro, indicando simplemente un nuevo nombre de conjunto de puertos. Ajustar puerto HSQL: Según el conjunto de puertos elegido para JBoss AS, se debe indicar a O3 el puerto bajo el que quedó disponible la BD HSQL. Esto no es necesario si se configuró una base de datos distinta a HSQL. Ajustar puerto HTTP (solo para Enterprise Portal): A partir de la versión 5, algunas ediciones incluyen un nuevo componente: O3 Enterprise Portal. El cambio de puerto debe ser reflejado también en la configuración de este componente. Según el conjunto de puertos elegido para JBoss AS, se debe indicar cual es el puerto HTTP que fue seleccionado y que debe ser utilizado también por el Enterprise Portal de O3. Los distintos conjuntos de puertos de JBoss AS se definen en un archivo llamado port-bindings.xml, que debe estar disponible en determinado directorio. En general no es necesaria su edición, ya que simplemente se elige un conjunto de puertos u otro según el nombre. El archivo port-bindings.xml puede ser consultadoaquí. El archivo port-bindings.xml define 5 grupos: *ports-default, ports-01, ports-02, ports-03, ports-04 y ports-05*. Es posible definir grupos adicionales con nuevos valores para los puertos, o modificar estos grupos. Servicio ports-default ports-01 ports-02 HTTP 8080 8180 8280 Naming 1099 1199 1299 HSQL 1701 1801 1901 Otros puertos utilizados 1098, 4444, 4445, 8083 1198, 8183, 4544,4545, 8183 1298, 4644, 4645, 8283 Procedimiento 1. Instalar el archivo de configuración de puertos Este archivo se llama port-binding.xml, una copia del mismo puede obtenerse aquí. El archivo debe guardarse en el siguiente directorio: <O3>/jboss/server/default/ . 2. Configuración de conjunto de puertos activo Mediante este paso se indica cual es el conjunto de puertos que JBoss utilizará, entre todos los definidos en el archivo port-binding.xml . Editar el archivo jboss-service.xml que se ubica en <O3>/jboss/server/default/conf/ y buscar la declaración del MBean: "jboss.system:service=ServiceBindingManager". La Figura muestra la sección del archivo que corresponde con la declaración de este MBean. <!-| | | | | | | | | | | | | Binding service manager for port/host mapping. This is a sample config that demonstrates a JBoss instances with a server name 'ports-01' loading its bindings from an XML file using the ServicesStoreFactory implementation returned by the XMLServicesStoreFactory. ServerName: The unique name assigned to a JBoss server instance for lookup purposes. This allows a single ServicesStore to handle mulitiple JBoss servers. StoreURL: The URL string passed to org.jboss.services.binding.ServicesStore during initialization that specifies how to connect to the bindings store. StoreFactory: The org.jboss.services.binding.ServicesStoreFactory interface implementation to create to obtain the ServicesStore instance. --> <mbean code="org.jboss.services.binding.ServiceBindingManager" name="jboss.system:service=ServiceBindingManager"> <attribute name="ServerName">ports-01</attribute> <attribute name="StoreURL">${jboss.server.home.url}/port-bindings.xml</attribute> <attribute name="StoreFactoryClassName"> org.jboss.services.binding.XMLServicesStoreFactory </attribute> </mbean> Si estuviera comentado el MBean, descomentarlo como se ve en la parte superior. Editar el archivo para asignar al atributo ServerName el nombre del conjunto de puertos a utilizar. En el ejemplo se activa el conjunto llamado ports-01. 2. Identificación del Puerto HSQL Si O3 Server es utilizado con la configuración almacenada sobre la base de datos HSQL embebida en JBoss, la siguiente configuración es necesaria. Modificar el archivo gserver-hsql-ds.xml que se encuentra en <O3>jboss/server/default/deploy/gserver <connection-url>jdbc:hsqldb:hsql://localhost:1701</connection-url> cambiar por <connection-url>jdbc:hsqldb:hsql://localhost:1801</connection-url> este valor 1801 es en caso que se haya elegido el set de puertos ports-01, si no el valor que corresponda. 3. Identificación del puerto HTTP Si se está utilizando O3 Enterprise Portal, es necesario indicar el nuevo puerto HTTP que se utilzará. Para ello se debe editar el archivo <O3>/jboss/server/default/deploy/liferay.war/WEB-INF/classes/portal-ext.properties donde figura o3.cas.server.host= se debe ingresar la ip/dns:port, donde el puerto (port) debe corresponderse con el puerto elegido previamente (configuración de puertos de JBoss). Por ejemplo, si se configuraron los puertos definidos mediante el archivo ports-01, se debe configurar este archivo de la siguiente forma: o3.cas.server.host=ip/dns:8180 Acceder al Servidor O3 desde O3 Desktop Client Luego del cambio de puertos, al acceder al servidor O3 desde el O3 Desktop es necesario indicar el puerto donde se encuentran los servicios de O3. El puerto a indicar es el Naming, que por defecto es 1099. Si el servidor es accedía en localhost, luego de activar ports-01 será accedido en localhost:1199. Atención si se está en un server sin posibilidad de acceder a una consola gráfica, buscar un directorio oculto .o3, y en el un archivo de nombre o3connect.properties cambiar la propertie gclient.server.port=1099 al valor que corresponda según el port definido HowTo configurar el Servicio de Mail de JBoss El servicio de mailer provisto por JBoss se configura a través del archivo <O3>/jboss/server/default/deploy/mail-service.xml A continuación se incluye un ejemplo de dicho archivo <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE server> <!-- $Id: mail-service.xml 31716 2005-06-01 06:20:43Z starksm $ --> <server> <!-- ==================================================================== --> <!-- Mail Connection Factory --> <!-- ==================================================================== --> <mbean code="org.jboss.mail.MailService" name="jboss:service=Mail"> <attribute name="JNDIName">java:/Mail</attribute> <attribute name="User">nobody</attribute> <attribute name="Password">password</attribute> <attribute name="Configuration"> <!-- Test --> <configuration> <!-- Change to your mail server prototocol --> <property name="mail.store.protocol" value="pop3"/> <property name="mail.transport.protocol" value="smtp"/> <!-- Change to the user who will receive mail <property name="mail.user" value="nobody"/> --> <!-- Change to the mail server --> <property name="mail.pop3.host" value="pop3.nosuchhost.nosuchdomain.com"/> <!-- Change to the SMTP gateway server --> <property name="mail.smtp.host" value="smtp.nosuchhost.nosuchdomain.com"/> <!-- Change to the address mail will be from --> <property name="mail.from" value="[email protected]"/> <!-- Enable debugging output from the javamail classes --> <property name="mail.debug" value="false"/> </configuration> <depends>jboss:service=Naming</depends> </attribute> </mbean> </server> En este archivo típicamente es necesario configurar varios parámetros como son: Usuario y Password Nombre o dirección IP del servidor SMTP (servidor de correo) Cuenta de correo que se utilizará como remitente de los correos enviados por O3 Usuario y Password El nombre de usuario y password para acceder al servidor de mail se configura en la siguiente sección <attribute name="User">nobody</attribute> <attribute name="Password">password</attribute> En estos atributos es necesario indicar como User el nombre de usuario del correo. Por ejemplo, si la casilla desde la cual se mandarán correos es o3server@mi_dominio.com, el User será o3server De forma similar, como Password debe indicarse la clave de acceso al SMTP/POP3 en caso de ser necesaria De esta forma el XML quedaría similar a esto: <attribute name="User">o3server</attribute> <attribute name="Password">mi_password</attribute> Nombre o IP del servidor de correo El nombre o IP del servidor de correo se indica en la sección siguiente: <!-- Change to the SMTP gateway server --> <property name="mail.smtp.host" value="smtp.nosuchhost.nosuchdomain.com"/> Advertencia Es necesario que la máquina donde está instaldo el O3 server pueda tener acceso al servidor SMTP Recomendación Hacer un telnet al puerto 25 de la IP/DNS del servidor de correos de modo de estar seguros que se encuentra accesible Cuenta remitente Finalmente resta indicar una cuenta de correo válida en el servidor de correos que se utilizará como remitente para los mails enviados. Esta cuenta se indica en la sigiuente sección: <!-- Change to the address mail will be from --> <property name="mail.from" value="[email protected]"/> En el ejemplo esta sección quedaría de la siguiente forma: <!-- Change to the address mail will be from --> <property name="mail.from" value="o3server@mi_dominio.com"/> Reinicio del server No es necesario reiniciar el jboss para que estos cambios tengan efecto Configuración con autentificación de usuario En el caso de necesitar autentificación de usuario, especialmente si necesitamos enviar a direcciones de correo electrónicas que no son del mismo dominio que el servidor de correos, se deberán agregar dos líneas antes de </configuration> <property name="mail.smtp.starttls.enable" value="true" /> <property name="mail.smtp.auth" value="true"/> Configuración para enviar vía SMTP Seguro Cuando debamos utilizar un servidor de correos via SMTP Seguro con autentificación deberemos realizar algunos cambios en el archivo mail-service.xml (se utiliza un ejemplo utilizando el servidor SMTP Seguro de gmail.com). <?xml version="1.0" encoding="UTF-8"?> <!-- $Id: mail-service.xml 62349 2007-04-15 16:48:15Z [email protected] $ --> <server> <!-- ==================================================================== --> <!-- Mail Connection Factory --> <!-- ==================================================================== --> <mbean code="org.jboss.mail.MailService" name="jboss:service=Mail"> <attribute name="JNDIName">java:/Mail</attribute> <attribute name="User">USUARIO</attribute> <attribute name="Password">PASSWORD</attribute> <attribute name="Configuration"> <!-- A test configuration --> <configuration> <!-- Change to your mail server prototocol --> <property name="mail.store.protocol" value="pop3"/> <property name="mail.transport.protocol" value="smtp"/> <!-- Change to the user who will receive mail --> <property name="mail.user" value="[email protected]"/> <!-- Change to the mail server --> <property name="mail.pop3.host" value="pop.gmail.com"/> <!-- Change to the SMTP gateway server --> <property name="mail.smtp.host" value="smtp.gmail.com"/> <property name="mail.smtp.starttls.enable" value="true" /> <property name="mail.smtp.socketFactory.class" value="javax.net.ssl.SSLSocketFactory" /> <!-- The mail server port --> <property name="mail.smtp.port" value="465"/> <property name="mail.smtp.socketFactory.port" value="465" /> <!-- Change to the address mail will be from <property <property <property <property --> name="mail.from" value="[email protected]"/> name="mail.smtp.user" value="[email protected]"/> name="mail.smtp.password" value="PASSWORD"/> name="mail.smtp.auth" value="true"/> <!-- Enable debugging output from the javamail classes --> <property name="mail.debug" value="false"/> </configuration> </attribute> <depends>jboss:service=Naming</depends> </mbean> </server> HowTo encriptar las passwords de las fuentes de datos (en gral, bases de datos) Consultar: http://community.jboss.org/wiki/EncryptingDataSourcePasswords HowTo Monitorear uso de memoria del JBoss IMPORTANTE: Tener el Jboss corriendo MONITOREO DE LA MEMORIA USADA POR Jboss En un navegador de páginas web debemos de colocar la dirección direccion_del_server:8080 lo cual nos abrirá la página por defecto que nos permite administrar parte del Jboss 1. vamos al link JMX Console,una vez dentro de la página Ctrl F (buscar) jboss.system, ahí hacemos click type=ServerInfo 2. de nuevo Ctrl F (buscar) java.lang.String listMemoryPools() apretamos el botón Invoke 3. en esa página buscamos Pool: Tenured Gen (Heap memory) explicación de lo que vemos ahí: Peak Usage : init:119341056, used:80167064, committed:133550080, max:477233152 Current Usage : init:119341056, used:67784800, committed:133550080, max:477233152 |------------------| committed:127,36Mb +---------------------------------------------------------------------+ |///////// | | max:455,12Mb +---------------------------------------------------------------------+ |--------| used:64,64Mb Peak Usage - valores máximos (picos) de uso, pedido (committed) y memoria máxima que se dispone Current Usage - valores actuales de uso, pedido de memoria y memoria máxima que se dispone La gráfica nos muestra estos valores: committed (en este ejemplo 127.36Mb) maxímo que se puede usuar (en este ejemplo 455.12Mb) y el valor actual (en este ejemplo 64.64Mb) en caso de que jboss llegue al máximo se corre el riesgo de tener una caida del server, por lo cual es bueno chequear estos valores, y de ser necesario corregir la memoria asignada al Jboss Para ver como cambián lo valores se pude cargar un cubo en el portal o en el browser y en la página del monitoreo hacer F5 o reload VER ADEMÁS el artículo Memory Management HowTo ocultar o modificar la pagina de inicio de JBoss Contexto Este HowTo explica cómo ocultar o modificar la página de inicio de jboss, a la que se accede en http://servidor:8080. Esta página se genera con el index.html, que se encuentra en: <InstalaciónO3>\jboss\server\default\depoly\jboss-web-depolyer\ROOT.war Por ser un archivo html, su edición es relativamente sencilla. Las modificaciones habituales a este archivo son: 1. Deshabilitar la jmx-console (ver: Cambiar o deshabilitar la password de la jmx-console) 2. Ocultar todos los links, dejando título, etc. Para esto comentar o eliminar los links (tags href) a continuación de JBoss Online Resources y/o JBoss Management. 3. Dejar la página en blanco. Eliminar todo el contenido de la página, desde <head> hasta </head> y desde <body> hasta </body> inclusive. 4. Redireccionar a otro sitio, por ejemplo al O3 Portal. Eliminar todo el contenido, igual que en la opción anterior, y agregar tag: <meta http-equiv="Refresh" content="5; url=http://servername:8080/o3portal"> HowTo patch para problemas de consumo de memoria IMPORTANTE Condiciones que justifican el patch En entornos de trabajo donde el uso del portal es alto, y se nota una degradación del servicio y posterior caída del server. Condiciones que pueden agravar el comportamiento, la reconstrucción de muchos cubos en forma seguida. Soluciones al problema Hay 2 patch desarrolados por Idesoft para tomcat, según si la versión de O3 es menor a 4.1.x o mayor o igual que 4.1.x. Se debe de ser cuidadoso en no poner un patch por otro. Si su versión es 4.2.001 o posterior, el patch NO es necesario, ya esta incluido en la distribución de O3. Otras formas de detectar el problema Desde el admserver ver que los cubos que quedan abiertos por mas de media hora luego que se cerraron la sesiones. Ver el wiki "HowTo monitorear uso de memoria del Jboss" para aprender sobre cómo ver la memoria usada por jboss . PARCHEAR EL JBOSS 1. 2. 3. 4. 5. 6. bajar el servidor jboss si lo tenemos corriendo pararse en el directorio de instalción de O3 desde ahí ir al directorio jboss/server/default/deploy/jbossweb-tomcat55.sar renombrar el archivo catalina.jar (ej #catalina.jar) agregar el archivo catalina.jar nuevo. Precaución con la versión del patch según el O3 instaldo tener en cuenta que los nombre bajados se les debe de renombrar como catalina.jar, no se debe de dejar el nombre con que se bajo. 6. reinicar el jboss BAJAR LOS ARCHIVOS Ir al tab de adjuntar y bajar el que corresponda a su versión VERIFICANDO LA ACTUALIZACIÓN Luego de conectarnos con cualquier aplicación al server en el log debería de aparacer INFO [[/o3portal]] Tomcat 5.5.9, accessCount patch by Ideasoft HowTo Workaround problema nombre del server Problema Cuando se generan reglas, o desktop en el browser y luego se quieren ver desde el portal, las reglas no se pintan y los desktop no se ven generando un error workaround Ir a /<O3>/jboss/server/default/deploy/gserver/0o3.ear/o3portal.war/WEB-INF y buscar el archivo webapp.properties Cambiar gclient.server.host = localhost gclient.server.host = nombre_del_servidor por O3 Consideraciones de Seguridad Consideraciones de Seguridad sobre el acceso a través de Internet a O3 La exposición del servidor de O3 a Internet abre un conjunto de riesgos de seguridad, como ocurre con cualquier aplicación, este artículo analiza diferentes escenarios de seguridad y le asigna diferentes niveles de recomendación: Escenario Descripción Web con Proxy Consiste en utilizar herramientas adicionales para permitir el acceso desde Internet a un servidor de O3 (ubicado por ejemplo en una DMZ). Se lo utiliza para exponer el servicio a internet permitiendo el acceso por ej. a http://www.servidor_empresarial.com/o3portal Recomendación , incluso cuando servidor_empresarial no es el que contiene a O3 Puerto 8080 expuesto a Internet Consiste en exponer el puerto 8080 a internet a través de una tercera máquina. Por ejemplo con un firewall delante haciendo NAT Máquina expuesta a internet Consiste en tener la máquina sin ningún tipo de protección conectada a internet Para cada uno de estos escenarios se realizan las siguientes recomendaciones, algunas de ellas están basadas en sugerencias de seguridad de JBoss: http://community.jboss.org/wiki/SecureJboss Web con Proxy Este mecanismo es el recomendado ya que brinda la mayor seguridad, dado que se accede desde internet sólo a la funcionalidad permitida. En este caso se utiliza un servidor Web con capacidad de proxy (por ejemplo Apache o IIS ) se recomiendo para este caso el uso de un módulo que haga de puente entre el servidor web y el tomcat (el más recomendado es JK Mount). Se debe hacer proxy de las siguientes aplicaciones Web de O3: /o3portal /cas /eportal /o3report Puerto 8080 expuesto a Internet En este caso se exponen todas las aplicaciones Web publicadas en el servidor JBoss de O3 a internet (por ejemplo realizando NAT en un firewall), por lo tanto deben tomarse las siguientes medidas: Cambiar la password de la consola JMX (jmx-console): Cambio de password en el caso que estemos en la versión > 5.2.004 ir directo al punto 3 ya que solo se necesita cambiar la password. Eliminar "invokers" de JBoss: http://community.jboss.org/wiki/RemoveTheInvokers Deshabilitar la característica de RMIClassLoading de JBoss: http://community.jboss.org/wiki/RMIClassLoadingService En futuras versiones estas últimas características serán deshabilitadas en el JBoss utilizado en O3. Máquina expuesta a Internet Este caso es altamente contraindicado, expone a todos los servicios del servidor y no sólo a O3 a ataques externos. Si a pesar de esta indicación, se utiliza este mecanismo, se deben seguir todas las recomendaciones de la siguiente página de JBoss: http://community.jboss.org/wiki/SecureJboss, tener en cuenta que con este mecanismo sólo se asegura el servidor JBoss de O3 pero no los demás servicios disponibles en la máquina Sobre estos cambios al Servidor La aplicación de los ajustes recomendados en está página al Servidor de O3 no afectan los Servicios de Asistencia y Respaldo que una instalación concreta pudiera contar (según corresponda al modo de licenciamiento, plazo, servicios de asistencia, etc.), ya que se consideran cambios de configuración soportados. Hacemos esta aclaración en respuesta a consultas de nuestros clientes. Diseño de modelos multidimensionales Ayudas y explicaciones de cómo realizar diseños de modelos multidimensionales. Cómo se usan los distintos métodos de agregación para saldos Tips de Diseño Cómo se usan los distintos métodos de agregación para saldos Método de Agregación para Saldos O3 ofrece un conjunto de mecanismos de agregación orientados a tomar información en función de la disponibilidad de la misma con respecto a una dimensión de tipo fecha. Este mecanismo es el adecuado cuando se hace una consulta y se quiere obtener la informaicón más actualizada con respecto a la fecha que está siendo consultada. A continuación se describen para un caso los tres mecanismos disponibles, el tercero Primero/Ultimo con datos fue introducido en la versión 5.0 Para estos ejemplos, se presenta cual es la información disponible en un modelo multidimensional para tres artículo y para la medida Stock Disponible. En los tres casos se muestra el resultado de consultar a nivel de Mes. Primero/Último (first/last member in dimension) Nos trae los datos para el primer/último período sin importar si tiene datos o no. Veamos con un ejemplo, en este caso un stock de 3 artículos Artículo 20/1 22/1 23/1 24/1 25/1 26/1 27/1 28/1 29/1 30/1 31/1 último Art.1 4 2 8 10 15 Art.2 4 2 8 10 15 Art.3 7 2 4 10 1 1 25 10 5 6 12 12 0/nan 1 21 10 5 0/nan Si los datos no tuvieran valor para el último día del mes, el resultado de la consulta sería todo 0/nan. Artículo 20/1 22/1 23/1 24/1 25/1 26/1 27/1 28/1 29/1 30/1 Art.1 4 2 8 10 15 1 25 10 5 6 Art.2 4 2 8 10 15 Art.3 7 2 4 10 1 31/1 Último 0/nan 0/nan 1 21 10 5 0/nan Primero/Último dinámico (dinamic first/last) Nos trae los datos para el primer/último período en el cual hubieron datos. Para ejemplificar, volviendo al caso del stock mercaderías. Al pedir el stock a fin de mes me retornarían no solo los productos que se movieron ese día, sino los de días anteriores que tuvieron movientos. Nótese que para elementos diferentes se traen datos de fechas diferentes Artículo 20/1 22/1 23/1 24/1 25/1 26/1 27/1 28/1 29/1 30/1 31/1 Último Dinámico Art.1 4 2 8 10 15 1 25 10 5 6 12 12 Art.2 4 2 8 10 15 Art.3 7 2 4 10 1 1 21 10 5 Artículo 20/1 22/1 23/1 24/1 25/1 26/1 27/1 28/1 29/1 30/1 Art.1 4 2 8 10 15 1 25 10 5 6 Art.2 4 2 8 10 15 Art.3 7 2 4 10 1 15 5 31/1 Último Dinámico 6 15 1 21 10 5 5 Primero/Último con datos (First/Last with data) Nos trae los datos para el primer/último período en el cual para algún elemento al menos existen datos, de nuevo supongamos el caso del stock. Notese que en este caso para el día 31 no hay datos pero si para el día 30 (art.1) Artículo 20/1 22/1 23/1 24/1 25/1 26/1 27/1 28/1 29/1 30/1 31/1 Último con Datos Art.1 4 2 8 10 15 1 25 10 5 6 12 12 Art.2 4 2 8 10 15 Art.3 7 2 4 10 1 1 21 10 3 5 Artículo 20/1 22/1 23/1 24/1 25/1 26/1 27/1 28/1 29/1 30/1 Art.1 4 2 8 10 15 1 25 10 5 6 Art.2 4 2 8 10 15 Art.3 7 2 4 10 1 0/nan 1 21 10 3 5 Tips de Diseño de Modelos Multidimensionales Descripción 31/1 Último con Datos 6 0/nan Tips de Diseño Tip 0/nan 5 Convirtiendo Saldos en Movimientos Este tip surgió del análisis de un proyecto en un Banco para el cual se tenían los saldos mes a mes y era necesario obtener los movimientos mensuales a partir de dichos saldos. Si bien una solución podría haber sido realizar consultas anidadas que realizaran varias pasadas por los datos para realizar los ajustes, este tip permite obtener el mismo resultado en forma más eficiente y elegante utilizando mecanismos de O3. Cortesía de Luis Berretta y Nicolás Palombo Agregando Datos de Entrada Este tip expresa un mecanismo para incorporar datos que no existen en las fuentes de datos y que su uso es exclusivo para la construcción de un cubo O3. Es una alternativa siempre que la generación de un archivo txt y la creación de una tabla específica resulten incómodos. Customizando las plantillas de páginas en ePortal En este tip se comenta una alternativa para cambiar las proporciones de las plantillas de páginas por defecto con el objetivo de cubrir requerimientos específicos de diseño de páginas. Accediendo a bases de datos desde BeanShell Se incluye en este tip codigo BeanShell para acceder directamente a bases de datos permitiendo un mayor control sobre las fuentes de datos. Operando en tablas con cantidades variables de filas y columnas Es común la necesidad de referenciar filas o columnas en fórmulas a para generar vistas particulares. Pero, ¿qué pasa si es necesario referenciar las filas o columnas en base a su ubicación y la cantidad de columnas o filas es dinámica?. La solución viene por recordar la utilidad de la funcion Cant() aplicada a un ejemplo donde se calculan variaciones diarias de saldos contables a pesar que no existen saldos en fines de semana y feriados. Comparando los valores de un día respecto al promedio de los últimos N Este tip surgió del análisis de alternativas para ofrecer la comparación de ventas de un día respecto al promedio de venta de los últimos 60 días. Agregando datos de entrada Agregando datos de entrada En diversas ocasiones necesitamos incorporar al modelo O3 un catálogo ó una codificación que no existe en ninguna fuente de datos. En la mayoría de los casos la solución que encontramos es generar un archivo txt o incluso crear una tabla en la BD para que el cubo se ajuste a las necesidades. Pero es cierto que ambas alternativas pueden generarnos inconvenientes, la ubicación del archivo, la posibilidad de poder crear una tabla, etc. Este tip de diseño introduce una nuevo tipo de fuente de datos que ofrece una excelente alternativa al problema. El nuevo tipo de fuente de datos se identifica con el nodo de etiqueta "Script". El mismo no requiere configuración de ningún tipo por lo que simplemente se deben agregar las fuentes de datos deseadas. A continuación se ofrecen algunos ejemplos de fuentes de datos generados a través de scripts: ArrayList list = new ArrayList(); list.add(new Object[]{0, "Activos"}); list.add(new Object[]{1, "Pasivos"}); iterator = list.iterator(); Esta consulta nos permite tener una fuente de datos con los valores: 0 Activos 1 Pasivos Ejemplo de datos de entrada de tipo fecha ArrayList list = new ArrayList(); list.add(new Object[]{new Date(2008-1900, 0, 1)}); iterator = list.iterator(); Esta consulta nos permite tener una fuente de datos con los valores: 01/01/2008 El año es base 1900, el mes es base 0 (0 es enero, 1 febrero, etc) y el dia es normal. El orden de los argumentos es: año, mes, dia A partir del uso de scripts como consultas, se comprende que su potencial permite realizar procedimientos mucho más complejos y elaborados. En la medida que sean útiles dichas implementaciones se pueden incorporar a esta página como nuevos ejemplos. Comparando los valores de un día respecto al promedio de los últimos N Situación Esta tip de diseño trata de mostrar diferentes alternativas disponibles en distintas versiones de O3 al momento de resolver la comparación de valores de un día respecto al promedio de los valores de los últimos 5 días por ejemplo. Tomamos el caso de importes vendidos como se detalla en el siguiente cuadro y evaluamos las distintas posibilidades de comparación de las ventas del día lunes 20/dic respecto al promedio de venta de los últimos 5 días. Soluciones De manera práctica se presentan distintos enfoques/soluciones relativos al caso, y a su vez se ofrecen elementos para mejorar la comprensión de algunas nuevas funcionalidades de O3. Alternativa 1 Una primer alternativa corresponde a utilizar una fecha relativa para identificar los últimos 5 días y agregar una fila calculadas en O3 Browser que muestre el promedio de los valores. Dependiendo si ocultamos ó no los "ceros" se calcula el promedio correspondiente. Esta alternativa es directa, está disponible en todas las versiones de O3, pero tiene limitantes en la medida que exige la visualización de todos los días del período y hace complejo el uso de los valor del último día y el promedio en apertura por dimensiones y en potenciales expresiones calculadas o reglas. Alternativa 2 Una segunda alternativa corresponde a utilizar una nueva medida derivada de Acumulación por Fecha de tipo "smoothed". En la definición de la medida basta con indicar el período de 5 días. Esta alternativa, también disponible en versiones 4 y 5 de O3 permite visualizar no sólo el promedio de los últimos 5 días respecto a la última fecha, sino también la evolución histórica del promedio de los últimos 5, lo que puede ser fácilmente graficado en O3. Notar que la medida de tipo smoothed considera la totalidad de los días independientemente de la existencia ó no de datos al momento de realizar el promedio. Por ello, el cálculo del promedio responde a: Promedio en Ultimos 5 días calendario = Importe de venta en últimos 5 días / 5 días = 900 / 5 = 180 El análisis con O3 Browser permite obtener cuadros y gráficos como los siguientes: Sin embargo, puede que no sea lo ideal dado que en ciertas circunstancias puede ser requerido evitar que el promedio de los últimos 5 días considere los días sin ventas. Alternativa 3 Una tercer alternativa intenta mostrar otro enfoque para la solución en donde se corrige el promedio sin días de venta. Consiste en agregar una nueva fuente de datos al modelo referida a una lista de los días de venta, por ejemplo realizando una consulta SQL del estilo "select distinct fecha, 1 as días from ventas...". Y agregar una nueva medida llamada "Días de Venta" que sume el valor 1 por cada día de venta y cuyo alcance sea total sobre la dimensión fecha pero constante para el resto de las dimensiones. Luego, basta con definir una medida derivada que divida el importe de venta entre la cantidad de días, para obtener el promedio buscado donde no participen los días domingo. Por tanto, tal como puede apreciarse en las imágenes, el cálculo responde a: Promedio en Últimos 4 días de venta = Importe de venta en últimos 5 días / 4 días de venta = 900 / 4 = 225 Para hacer uso de ésta solución se definen las fechas relativas correspondientes a distintos períodos, por ejemplo Últimos 5, 10, 15 o 30 días por ejemplo y se obtienen los promedios correspondientes a cada período con tal sólo cambiar la fecha relativa utilizada. Si además fuese necesario disponer de la fecha del último día, por ejemplo para comparar el valor del día con el promedio, puede agregarse una nueva medida básica con fecha especial de agregación de último dinámico en la dimensión fecha. Con ello logramos tener en la misma grilla e valor de último día y el promedio de los últimos 5 días sin contar el día sin ventas. La ventaja de esta solución radica en utilizar las mismas medidas y sólo variar la fecha relativa para comparar distintos períodos. Sin embargo dicha ventaja hace que perdamos la posibilidad de graficar la evolución histórica de los promedios como lo teníamos con el smooth. Alternativa 4 La siguiente alternativa disponible a partir de la versión 5.3 de O3 intenta satisfacer la potencialidad del smooth y a su vez evitar los días sin ventas en el cálculo del promedio. Para ello hay que definir las medidas "Días de Venta" propuesta en la alternativa 3 y dos nuevas medidas derivadas de acumulación por fecha por nivel superior indicando "Acumular últimos períodos hasta el actual". Una de dichas medida debe considerar la medida básica de importes de venta mientras que la otra hace referencia a la medida básica de días de venta. En ambas medidas se indica el mismo período, por ejemplo 5 días. En estas medidas puede justificarse declarar que sean ocultas a los usuarios finales. Por último se agrega una nueva medida derivada que divide las anteriores (Acumulado de importes / Acumulado de días) obteniendo el promedio. La medida resultante permite el análisis histórico de la evolución de los promedios, sin contar los días sin ventas y permitiendo la comparación con las ventas diarias históricas. Observar que utilizando una nueva funcionalidad de la versión 5.4 de O3 podemos indicar a la medida promedio como secundaria, y en tal caso ocultar del gráfico los cálculos correspondientes a los días domingo. La gráfica resultante de evolución histórica del promedio se visualiza a continuación. Customizando las plantillas de páginas en ePortal El uso de un numero limitado de plantillas de páginas en el ePortal permite estandarizar el diseño, mejorando la usabilidad. De lo contrario el usuario se debe enfrentar patrones de diseño muy disimiles a lo largo de las diferentes páginas de los portales. Existen ciertas situaciones, como páginas de inicio, gráficos o tablas especiales, donde las plantillas de páginas disponibles no permiten lograr el efecto de diseño requerido para facilitar su comprensión. En lugar de agregar nuevas plantillas de página, es posible modificar las proporciones de las planillas disponibles utilizando las propiedades de estilo de cada página. Las proporciones de las plantillas disponibles por defecto están configuradas utilizando estilos y debido a que la propiedad de estilo en cada pagina sobrescribe los estilos del tema, es posible cambiar las proporciones de las plantillas en cada página. Para ello es necesario conocer el diseño y estilo de cada plantilla para modificar la propiedad correcta. En general las plantillas disponibles están diseñadas a partir de tablas, donde las celdas que condenaran los porlets poseen identificadores (id) de la forma column-1, column-2, etc.. También utilizan el clasificador de estilo (class) lfr-column y dependiendo del tamaño se utilizan los clasificadores thirty, fifty, seventy, twenty, sixty, etc.. Por ejemplo para modificar el ancho por defecto de la primer columna a un 30% de la pantalla se incluye la siguiente linea en la propiedad css de la página: #column-1 { width: 30% } En forma alternativa es posible también cambiar el clasificador de tamaño incluyendo la siguiente linea: .sixty { width: 20% } En conclución modificando los estilos de cada página se dispone de un mayor control sin definir nuevas plantillas. Accediendo a bases de datos desde BeanShell A partir de la version 5 es posible incluir en los modelos de O3 fuentes de datos definidas desde scripts de BeanShell. Este lenguaje permite en particular utilizar jdbc para acceder a bases de datos desde el script obteniendo de esta forma un mayor control sobre las fuentes de datos en la construcción. Con el siguiente codigo se muestra como acceder a la base de datos Hypersonic incluida en la distribución. import import import import java.sql.DriverManager; org.hsqldb.jdbcDriver; java.sql.SQLException; java.sql.*; db_url = "jdbc:hsqldb:hsql://localhost:1701"; driver = "org.hsqldb.jdbcDriver"; user = "sa"; password = ""; sql_statement = "SELECT * FROM VINOS_VENTAS;"; ArrayList list = new ArrayList(); try { Class.forName(driver); Connection con = DriverManager.getConnection(db_url,user,password); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(sql_statement); while (rs.next()) { list.add(new Object[]{rs.getDate("FECHA"),rs.getInt("VINOCOD"),rs.getDouble("LITROS")}); } stmt.close(); con.close(); } catch ( e ) { e.printStackTrace(); } iterator = list.iterator(); Con el siguiente codigo se muestra como acceder a una base de datos SQL Server Express. import import import import java.sql.DriverManager; org.hsqldb.jdbcDriver; java.sql.SQLException; java.sql.*; db_url = "jdbc:sqlserver://infogen01\\SQLEXPRESS;DatabaseName=Master"; driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; user = "sa"; password = "qapmoc8"; sql_statement = "select * from dbo.spt_values;"; ArrayList list = new ArrayList(); try { Class.forName(driver); Connection con = DriverManager.getConnection(db_url,user,password); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(sql_statement); while (rs.next()) { list.add(new Object[]{rs.getString("name"),rs.getInt("number")}); } stmt.close(); con.close(); } catch ( e ) { e.printStackTrace(); } iterator = list.iterator(); Definición de Medida Derivada de tipo 'Count Distinct' Definición La finalidad de una medida derivada de tipo 'Count distinct' es contar elementos distintos de un nivel de una dimensión, que tengan valor para una medida básica dada. Para crear una medida de tipo 'Count Distinct' se agrega una nueva medida declarándola como derivada (pestaña 'General'), y se selecciona la opción 'Contar Distintos'. Luego se debe elegir la dimensión, y el nivel de la dimensión sobre el cual se contarán los elementos distintos. Finalmente se debe elegir la medida básica. La siguiente imagen muestra la creación en el modelo de 'Ventas Mundiales' de una medida de nombre 'Contar Distintos Clientes' de tipo 'Count Distinct', que cuenta elementos distintos del nivel 'Cliente' en la dimensión 'Clientes' que tienen valores en la medida de 'Unidades Vendidas' (para contar clientes distintos que han vendido algún producto). Ejemplo de Uso Retomando la medida de tipo 'Count Distinct' vista en la sección anterior, que refleja la cantidad de clientes distintos que han vendido algún producto, veamos un ejemplo de su uso para fijar ideas. Supongamos que queremos estudiar la cantidad de clientes de un país a los cuales se vendió un producto en particular, en este caso, clientes del país 'Estados Unidos' a los que se han vendido el producto 'Espárragos'. Para ésto, cruzamos la dimensión 'Ubicación' a nivel de 'País' con la dimensión 'Productos', estudiando la medida 'Contar Distintos Clientes', resultando que son 9 los clientes de 'Estados Unidos' compradores de 'Espárragos' (ver imágen inferior). Si bajamos un nivel a 'Ciudad' en la dimensión 'Ubicación', se puede ver como se distribuyen por ciudad los clientes distintos compradores de 'Espárragos' (por ej. en la ciudad de Chicago existen 3 clientes distintos compradores, ver imágen inferior). Es de notar que como era de esperar la suma total de los clientes distintos de cada ciudad es mayor a 9, que era el total de clientes distintos en el país. Lo que ocurre es que en distintas ciudades se ha vendido el producto al mismo cliente (ciertos clientes cuentan con sedes en varias ciudades), por lo que al estudiar a nivel de país se cuentan clientes distintos, no se acumulan distintas sedes del mismo cliente (ver imágen inferior). Operando en tablas con cantidades variables de filas y columnas Es común la necesidad de referenciar filas o columnas en fórmulas a para generar vistas particulares. Pero ¿qué pasa si es necesario referenciar las filas o columnas en base a su ubicación y la cantidad de columnas o filas es dinámica? La idea general, es recordar que disponemos de la función Cant() y que el resultado de la misma puede ser utilizada como índice en la propia expresión. Veamos un ejemplo: Se requiere conocer la variación del Saldo de cada Residencia, como la diferencia del último saldo respecto al saldo del día anterior. Solución: Elaborar una vista de O3 que diariamente muestre los últimos días, y en particular calcule la variación de los últimos 2. Como primer paso, necesitamos una fecha relativa con refinamiento por día donde elegimos arbitrariamente que tome los "Ultimos 7 días". Una vez en la tabla, ubicamos la dimensión de elementos (en éste ejemplo Residencias) en el eje vertical y la fecha relativa recién indicada (Ultimos 7 días) en el eje horizontal. Teniendo en cuenta que debemos realizar una Exploración Avanzada con Nivel Día sobre dicha fecha relativa para que la vista directamente nos muestre los días. Sucede que la cantidad de días no tiene porqué ser 7, ya que no dispongo de saldos durante los fines de semana y feriados. Por lo cual, la vista puede devolverme una cantidad dinámica de columnas y necesito realizar la diferencia de las 2 últimas, para obtener la variación solicitada. En la siguiente imágen se muestra la vista: La cual se logra definiendo una nueva función (llamada VARIACION en el ejemplo) basada en la expresión abajo indicada y obteniendo el resultado esperado. aux=Entero(Cant([this])); [this.leaf(aux-1)]-[this.leaf(aux-2)] SaldosAMovimientos Calculando Movimientos a partir de Saldos Este tip de diseño pretende solucionar la siguiente situación: Se tiene una fuente de datos que presenta el saldo de una cuenta para cada mes. Estos saldos además se van acumulando dentro del semestre, es decir que tanto Enero como Julio tienen como saldo el monto efectivamente movilizado en ese mes. El resto de los meses presenta la acumulación de los meses anteriores dentro del semestre. La siguiente tabla ilustra esta situación, donde se agregó la columna Movimiento que debe calcularse a partir del Saldo Mes Saldo Movimiento 1 10 10 2 15 5 3 17 2 4 20 3 5 18 -2 6 21 3 7 17 17 8 11 -6 9 7 -4 10 22 15 11 31 9 12 27 -4 Si bien una alternativa es realizar el cálculo los movimientos directamente en la consulta de los saldos mediante consultas anidadas, estas requieren varias pasadas sobre los datos. En primer lugar es necesario resaltar las características de esta situación El monto del Movimiento para cada mes se calcula como el Saldo del mes corriente menos el Saldo del mes anterior Para los meses de Enero y Julio el Saldo y el Movimiento coinciden Considerando estas características es posible encontrar una solución más eficiente y elegante utilizando mecanismos de O3 de la siguiente forma: Por cada registro leido de la consulta de Saldos, se generan datos para el mes indicado en el registro (mes corriente) y para el mes siguiente. El monto asociado al mes corriente coincide con el Saldo, y para el mes siguiente se le asigna el Saldo con signo cambiado. Sería como "restar" el Saldo. Con esta solución cada registro de la consulta de Saldos genera 2 tuplas en el cubo tal como se ilustra en la siguiente tabla: Mes Saldo Mes Valor 1 10 1 2 10 -10 2 15 2 3 15 -15 3 17 3 4 17 -17 4 20 4 5 20 -20 5 18 5 6 18 -18 6 21 6 7 21 0 7 17 7 8 17 -17 8 11 8 9 11 -11 9 7 9 10 7 -7 10 22 10 11 22 -22 11 31 11 12 31 -31 12 27 12 1 27 0 Notar los ceros que se muestran en rojo que son generados debido a que los saldos se acumulan dentro del semestre por lo que para los meses de Enero y Julio no deben realizarse ajustes. De esta forma una vez construido el cubo la columna que figura en la tabla como Valor presentará el movimiento en cada mes ya que se obtiene como el saldo corriente menos el saldo del mes anterior. La mejor forma de implementar esto en un modelo de O3 es de la siguiente forma: 1. Se define la consulta de Saldos tal como se lo haría para construir la medida de Saldos con la salvedad que se le indica que construye 2 Tuplas por Registro 2. Se construyen dos campos virtuales, uno para calcular la Fecha y otro para calcular el Valor que se le asignará a la medida Movimiento. Los campos virtuales serían de la siguiente forma: Campo Virtual para la Fecha mes=Month(FechaParaMensual); año=Year(FechaParaMensual); mesSig=(mes==12) ? 1 : mes+1; añoSig=(mes==12) ? año+1 : año; Choose(TN, FechaParaMensual, Date(1,mesSig,añoSig)) Campo Virtual para el Valor mes=Month(FechaParaMensual); ultimoMes=Month(Date(1,12,2007)); Ajuste=((mes==ultimoMes) || (mes==12) || (mes==6)) ? 0 : -SaldoParaMensual; (TN==2 && Ajuste==0) ? Skip() : Choose(TN, SaldoParaMensual, Ajuste) Estos dos campos virtuales son los que hacen el truco de generar los Saldos corridos ajustados por signo que permiten calcular los movimientos. Estas expresiones tienen además algunas particularidades que se marcaron en rojo y esto se debe a que el campo para calcular el Valor no debe generar valores para meses para los cuales no existe un saldo, es decir que si los saldos existen hasta el mes de Agosto, no se deberá calcular el ajuste para el mes de Setiembre o éste presentaría un movimiento negativo incorrecto. Con estos ajustes se detecta el último mes (que en este ejemplo se dejó fijo como una constante) y se saltea el procesamiento del registro cuando se trata del ajuste y de un mes que no corresponde calcular. Si bien en este ejemplo se definió el último mes como una constante en la expresión, es posible hacer algo más realista a través de una consulta sobre la tabla de Saldos que devuelva un único registro con la máxima fecha. Esta consulta luego puede convertirse en tabla local para recuperar dicho valor desde el campo virtual. A modo de ejemplo se anexan unos archivos que ilustran este tip Archivo Descripción Saldos.mdl Modelo de ejemplo que implementa este Tip de Diseño Saldos.cube Cubo construido con datos de ejemplo. Este cubo incluye el Saldo y el Movimiento obtenidos de la fuente de datos, así como el Movimiento calculado a partir del mecanismo indicado en esta página usando los Saldos Saldos.txt Fuente de datos para los Saldos. Incluye la columna de Movimientos para poder comparar dicho valor con el calculado con el mecanismo indicado en esta página Parametros.txt Fuente auxiliar para ejemplificar el mecanismo de comparación con la última fecha. Este archivo debería reemplazarse por una consulta del estilo SELECT 'UltimaFecha' AS Parametro, MAX(Fecha) AS Valor FROM Saldo Saldos.xls Planilla Excel utilizada para generar los datos para este ejemplo How To O3 Browser Ayudas y explicaciones de cómo realizar operaciones con el componente O3Browser. ¿Cómo hacer para que browser -debug escriba en el log, para clientes en los que se instaló por javaws? HowTo Accediendo a cubos de MSAS ¿Cómo hacer para que browser -debug escriba en el log, para clientes en los que se instaló por javaws? IMPORTANTE: esto es válido para las versiones <= 4.1.300 ya que las posteriores quedará solucionado Procedimiento: 1. 2. 3. 4. 5. 6. 7. ir al directorio donde está instalado O3 de ahí ir al directorio jboss/server/default/deploy/gserver/Oo3.ear localizar el archivo o3-installer-4.1.300.war y renombrarlo ej #o3-installer-4.1.300.war (puede variar el número de acuerdo a la versión) crear ahí mismo una carpeta con el nombre o3-installer-4.1.300.war descomprimir el archivo o3-installer-4.1.300.war en la carpeta creada localizar el archivo o3-installer.jnlp, y abrirlo con un editor de texto sobre el final del archivo deberías de encontrar algo como esto <application-desc main-class="com.ideasoft.app.AppMain"> <argument>ideasoft.o3.browser.BrowserLauncher</argument> <argument>-debug</argument> </application-desc> 8. insertar: <argument>-logfile=.o3/Jws/log/browser.log</argument> de modo que quede asi: <application-desc main-class="com.ideasoft.app.AppMain"> <argument>ideasoft.o3.browser.BrowserLauncher</argument> <argument>-debug</argument> <argument>-logfile=.o3/Jws/log/browser.log</argument> </application-desc> 9. reiniciá el jboss y volvé a correr la aplicación 10. los log del browser quedarán en una carpeta dentro del usuario .o3/Jws/log/browser.log HowTo Accediendo a cubos de MSAS Contexto: O3 v4, SQL server 2000 Para acceder a cubos generados con Microsoft Analysis Services, hay que usar una URL de la forma: mdx://<nombre maquina>[/<nombre proveedor>]/<nombre de la bd>/<nombre del cubo> <nombre de la maquina> donde se encuentra el Analysis Services <nombre del proveedor> no es obligatorio, se asume MSOLAP <nombre de la bd> nombre de la base de datos en el Analysis Services Hay que tomar en cuenta que MSAS es "case sensitive", segun pruebas realizadas, no es lo mismo: mdx://deimos/O3 Demo/Demo que mdx://deimos/O3 Demo/demo, o mdx://deimos/O3 demo/Demo siendo "deimos" el nombre de la maquina donde reside el servidor de Analysis Services (MSAS), que es case insensitive, "O3 Demo" el nombre del catalogo o base de datos donde residen los cubos y "Demo" el nombre del cubo En caso de que el browser de O3 no pueda abrir cubos de MSAS haciendo referencia a problemas con la operacion Open de algo relacionado a "ado", se sugiere intentar alguno de los siguientes pasos: - si tiene instalado el cliente completo de MSAS, apliquele el service pack 3 que se encuentra bajo SQL2000 ->servicepack3 -> microsoft -> sql2kasp3.exe - si solo quiere el minimo requerido, desinstale (quite el software) el cliente MSAS o el Pivot Table Service (PTS). Luego instale el PTS service pack 3 que se encuentra bajo SQL2000 ->servicepack3 -> AnalysisServicesClient -> PTS -> ptsfull.exe How To O3 Designer Ayudas y explicaciones de cómo realizar operaciones con el componente O3Studio. Drivers JDBC más utilizados HowTo Accediendo a datos de Lotus Notes HowTo Accediendo archivos DBF y Excel HowTo Envio de mail con servidor SMTP que requiere TLS How to Utilizando drivers ODBC de 32 bits en SO de 64 bits How To Utilizando drivers ODBC para archivos de texto (ASCII) Usando la función debug() para ver expresiones calculadas Drivers JDBC más utilizados La que sigue es una lista de drivers JDBC usados con mayor frecuencia. Para cada uno se especifica el nombre de la clase y la sintaxis para su URL jdbc. Importante: Recordar cómo se divide la URL jdbc para colocarla en la definición de la conexión en O3Designer. Dada la url jdbc:<sub-protocol>:<driver & database specific parameters>, luego en el panel de conexión se coloca lo siguiente: Protocolo: <sub-protocol> Parámetros: <driver & database specific parameters> Por ejemplo, la url de MySql jdbc:mysql://{hostIP | hostName}:port/database se dividiría así: Protocolo: mysql Parámetros: //{hostIP | hostName}:port/database Para conocer mas en detalle cómo definir conexiones a otras Bases de Datos recomendamos consultar el documento que se adjunta a esta página (solo disponble versión en inglés). Oracle Informix Microsoft SQL Server JTurbo Inetdae MySQL Essentia Postgres DB2 AS400 DB2 UDB Relativity Firebird DBF y Excel ORACLE Clase: oracle.jdbc.driver.OracleDriver URL: jdbc:oracle:thin:@{hostIP | hostName}:port:SID Default port: 1521 Ejemplo en O3Designer: Cambio en driver de Oracle A partir de la versión del driver para Oracle 11, no existe más la clase oracle.jdbc.driver.OracleDriver. Se debe usar la clase oracle.jdbc.OracleDriver en su lugar. Los drivers para la version 10g ya traen las 2 versiones de la clase, asi que se debe hacer el cambio desde ahora. Problemas con el idioma del puesto cliente al conectarse a Oracle Hemos experimentado inconvenientes al chequear la conexión a Oracle desde O3Studio, utilizando el driver ojdbc14.jar. El problema se visualiza a través del siguiente error: "ORA-00604 "error ocurred at recursive SQL leel"... ORA-12705 "cannot access NLS data files or invalid environment". Otra situación donde es necesario aplicar la misma solución se detectó en consultas SQL utilizando driver ojdbc6 sobre Oracle 11g, en las cuales no se resuelven las conversiones numéricas y se visualiza el siguiente error: "ORA-01722: número no válido". Solución: Modificar el Regional Setting en el puesto cliente, seteando Estándares y Formatos: Inglés (Estados Unidos) y Ubicación: Estados Unidos. Por ejemplo, indicando -Duser.language=en -Duser.region=US en las componentes de O3Studio. Problemas con la zona horaria del puesto cliente al conectarse a Oracle Hemos experimentado inconvenientes al chequear la conexión o verificar un modelo desde O3Studio, utilizando diferentes driver. El problema se visualiza a través del siguiente error: "ORA-01882: timezone region not found". Solución: Sí los componentes O3Designer, y O3Builder se ejecutan utilizando los archivos .exe, se debe agregar la siguiente property en los archivos Designer.lax, Builder.lax (versiones <= 5.3), o Designer.vmoptions, Builder.vmoptions (versiones >= 5.4): -Duser.timezone="GMT-3" Sí se ejecutan utilizando los archivos .sh, se deben editar (designer.sh, builder.sh) y agregar la siguiente property: PROPERTIES="$PROPERTIES -Duser.timezone=GMT-3" Sí se ejecutan utilizando los archivos .bat, se deben editar (Designer.bat, Builder.bat) y agregar la siguiente property: set PROPERTIES=%PROPERTIES% -Duser.timezone=GMT-3 INFORMIX Clase: com.informix.jdbc.IfxDriver URL: jdbc:informix-sqli://{hostIP | hostName}:port[/database]:INFORMIXSERVER= serverName;[user=user;password=password][;name=value[;name=value]...] Default port: 1533 Ejemplo en O3Designer: Driver: com.informix.jdbc.IfxDriver Protocolo: informix-sqli Parámetros: //{hostIP | hostName}:port[/database]:INFORMIXSERVER= serverName;[user=user;password=password][;name=value[;name=value]...] Microsoft SQL-SERVER SQL-SERVER 2000 y 2005 La informacion siguiente es para el driver distribuido con O3, implementado por el archivo sqljdbc-1.0.809.102.jar, ubicado en el directorio <O3>\classes\jdbc. Clase: com.microsoft.sqlserver.jdbc.SQLServerDriver URL: jdbc:sqlserver://{hostIP | hostName}[;DatabaseName =value[;property=value]...] Default port: 1433 Ejemplo en O3Designer: La informacion siguiente es para el driver distribuido por Microsoft, que consiste en los archivos msbase.jar, mssqlserver.jar y msutil.jar (deben estar instalados en <O3>\classes\jdbc). Clase: com.microsoft.jdbc.sqlserver.SQLServerDriver URL: jdbc:microsoft:sqlserver://{hostIP | hostName}[;DatabaseName =value[;property=value]... Default port: 1433 Ejemplo en O3Designer: Driver: com.microsoft.jdbc.sqlserver.SQLServerDriver Protocolo: microsoft:sqlserver Parámetros: //{hostIP | hostName}[;DatabaseName =value[;property=value]... Clase: connect.microsoft.MicrosoftDriver URL: jdbc:ff-microsoft://{hostIP | hostName}:port/database Ejemplo en O3Designer: Driver: connect.microsoft.MicrosoftDriver Protocolo: ff-microsoft Parámetros: //{hostIP | hostName}:port/database Por defecto SQL Server 2005 Express no tiene conectividad por TCP/IP disponible luego de la instalación. Es necesario ir al SQL Server Configuration Manager. Bajo SQL Server 2005 Network Configuration, click en Protocols for SQLEXPRESS, click on TCP/IP para dejarlo disponible. Para configurar un puerto en particular y deshabilitar la asignación dinámica, se debe ir al nodo TCP/IP, botón derecho sobre "IPAll" y abrir sus Propiedades. Se deja en blanco el valor de "TCP Dynamic Ports" y se adjudica el "TCP Port" al puerto que se crea conveniente. Lo más usual es utilizar el puerto 1433 ó el puerto 1593. JTurbo Clase: com.ashna.jturbo.driver.Driver URL: jdbc:JTurbo://{hostIP | hostName}:port/database Ejemplo en O3Designer: Driver: com.ashna.jturbo.driver.Driver Protocolo: JTurbo Parámetros: //{hostIP | hostName}:port/database Inetdae Clase: com.inet.tds.TdsDriver URL: jdbc:inetdae://{hostIP | hostName}:port?database=database Ejemplo en O3Designer: Driver: com.inet.tds.TdsDriver Protocolo: inetdae Parámetros: //{hostIP | hostName}:port?database=database MySQL Clase: com.mysql.jdbc.Driver URL: jdbc:mysql://{hostIP | hostName}:port/database Default port: 3306 Ejemplo en O3Designer: En el caso de utilizar versiones recientes de MySQL donde el autollenado de los campos no resuelve los alias definidos en las consultas, se sugiere agregar el parámetro useOldAliasMetadataBehavior con valor verdadero como parte de la URL de conexión. Ejemplo: //hostName:3306/DataBase?useOldAliasMetadataBehavior=true Memoria Ante incovenientes en consumo de memoria ver el siguiente How To Essentia Clase: intersoft.jdbc.EssentiaDriver URL: jdbc:essentia://{hostIP | hostName}:port/schema Default port: 1700 Ejemplo en O3Designer: Driver: intersoft.jdbc.EssentiaDriver Protocolo: essentia Parámetros: //{hostIP | hostName}:port/schema POSTGRES Clase: com.postgresql.Driver org.postgresql.Driver URL: jdbc:postgresql://{hostIP | hostName}:port[/database] Default port: 5432 Ejemplo en O3Designer: Driver: com.postgresql.Driver Protocolo: postgresql Parámetros: //{hostIP | hostName}:port[/database] Caso especial: PIQL (driver postgres-ideafix), el driver es el de postgres con la única diferencia que se publica puerto por defecto en el puerto 7120 Para el uso de un gran volumen de registros se recomienda pasarle dos parámetros al driver para una mayor eficiencia y performance (consulta se consuma en un cursor): autocommit=FALSE y un FetchSize mayor a 0. A partir de la versión de 5.0.040 se pueden indicar estos valores en la configuración avanzada de los parámetros de la conexión. DB2 as400 Clase: com.ibm.as400.access.AS400JDBCDriver URL: jdbc:as400://{hostIP | hostName}/libreria Ejemplo en O3Designer: Driver: com.ibm.as400.access.AS400JDBCDriver Protocolo: as400 Parámetros: //{hostIP | hostName}/libreria DB2 UDB Clase: com.ibm.db2.jcc.DB2Driver URL: jdbc:db2://{hostIP|hostName}:port/database Default port: 50000 Ejemplo en O3Designer: Driver: com.ibm.db2.jcc.DB2Driver Protocolo: db2 Parámetros: //{hostIP|hostName}:port/database RELATIVITY Clase: relativity.jdbc.Driver URL: jdbc:relativity://{hostIP | hostName}:1583/ODBC Ejemplo en O3Designer: NOTA IMPORTANTE: Agregarle a builder.bat y designer.bat la siguiente linea: set PROPERTIES=%PROPERTIES% -Do3.sql.useSystemProp=false Si se va a correr los que estan en <o3>/bin ... agregarle la siguiente linea tanto a Designer.lax como a Builder.lax: o3.sql.useSystemProp=false En GNU/Linux, UNIX, AIX (entre otros) a los builder.sh, designer.sh : PROPERTIES="$PROPERTIES -Do3.sql.useSystemProp=false" Service Pack para Relativity 11.00 FIREBIRD Clase: org.firebirdsql.jdbc.FBDriver URL: jdbc:firebirdsql://{hostIP|hostName}:port/path_to_database Default port: 3050 Ejemplo en O3Designer: Driver: org.firebirdsql.jdbc.FBDriver Protocolo: firebirdsql Parámetros: //{hostIP|hostName}:port/path_to_database Accediendo archivos DBF y EXCEL Ver notas en sección HowTo Accediendo archivos DBF y Excel HowTo Crear Conexiones a MySQL sin que cargue todos los datos a memoria Al ejecutar una consulta con el driver jdbc de MySQL el comportamiento normal es que devuelve la información luego de terminada la consulta a la BD. En el caso de extraer una gran cantidad de información se podrá llegar al límite de la memoria virtual asignada al proceso y devolvernos un Java Heap Memory. La solución a este inconveniente es solicitarle al driver que no cargue los datos en memoria y lo devuelva. Esta solución está en devolvernos los datos de a uno (row by row) y aplicable para la versión de O3 BI 5.4.022 Procedimiento Se debe copiar el _o3p-HD-4582.jar a la carpeta classes de la instalación. Adicionalmente se debe activar la property o3.jdbc.mysql.rowbyrow=true en el archivo O3Builder.properties u O3Designer.properties, segun corresponda. Notificación Se debe visualizar el siguiente mensaje en el log del componente actuante MySQL Statement created to read row-by-row Referencias: http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-implementation-notes.html Service Pack para Relativity v 11.00 Ante el reporte de un error en el comportamiento del Data Server de Relativity 11.00, utilizando tanto el driver JDBC como ODBC, en donde no se podian acceder a algunas de las tablas de una consulta SQL, Liant presenta un Service Pack y la forma de obtenerlo. Se transcribe lo recibido del Proveedor. Below are instructions for downloading and installing the Relativity v11.00 service pack: 1) ftp ftp.liant.com 2) Login with anonymous, using your email address as the password. 3) cd pub/rel/outgoing 4) binary 5) get reldbsrv1100SP1LNX.zip 6) bye 7) Unzip reldbsrv1100SP1LNX.zip. The password is 'Aug21'. Extract the contained file reldbsrv1100SP1LNX.tar. 8) Binary ftp reldbsrv1100SP1LNX.tar to the RelRM11.00 directory on the machine running the Data Server. 9) Login as root to the machine running the Data Server. 10) Change directory to the RelRM11.00 directory. 11) mkdir save 12) mv reldbsrv save 13) mv reldbsrv.rm save 14) mv relfm_rm.o save 15) mv srvstrrm.o save 16) tar xvf reldbsrv1100SP1LNX.tar 17) ln reldbsrv.rm reldbsrv 18) ./STOP 19) If the Data Server is configured to automatically restart, then the STOP command should report that it has restarted. If the Data Server is not configured to automatically restart, restart it with the command ./RUN. The patched Data Server should now be running. HowTo Accediendo a datos de Lotus Notes Accediendo a datos de Lotus Notes Con tal propósito existe un driver ODBC llamado NotesSQL que permite extraer información de Notes y Domino. Este driver permite que aplicaciones que soportan el protocolo ODBC (como es el caso de O3) puedan leer y actualizar la información almacenada en bases de datos de Domino (archivos .nsf) Más información sobre este driver, así como instrucciones de cómo bajarlo se pueden encontrar en la siguiente dirección: http://www-142.ibm.com/software/sw-lotus/products/product4.nsf/wdocs/notessqlhome HowTo Accediendo archivos DBF y Excel Como forma alternativa al uso de JDBC-ODBC Bridge, se provee un driver JDBC propio que permite el acceso a datos de hojas de cálculo Excel y archivos DBase. El mismo se encuentra en la librería idrivers-<version>.jar que se distribuye con el producto (su ubicación es <O3_DIR>/classes/jdbc Estos drivers JDBC tienen limitaciones importantes: se permiten sólo consultas a la base de datos. no se permite realizar proyecciones en las consultas (lista de campos en el select) no se puede filtrar datos en la consulta (los select no permiten where). en el caso de dbase, solo se reconocen algunos tipos de datos: C (character), D (Date), N (Numeric) y F (Float). Básicamente, en ambos drivers la única consulta permitida es "select * from nombre-de-tabla", y ambos reconocen "nombre-de-tabla" como una consulta válida y equivalente a "select * from nombre-de-tabla". DBase Clase: com.ideasoft.db.drivers.dbf.DBFDriver URL: jdbc:dbf:<path_to_directory> donde path_to_directory es un camino absoluto a una carpeta conteniendo los archivos .dbf. Los nombres de esos archivos (sin la extension .dbf) son usados como nombres de tablas en las consultas. Por ejemplo, en O3Designer, hay que poner lo siguiente: Driver: com.ideasoft.db.drivers.dbf.DBFDriver Protocolo: dbf Parámetros: /opt/data Si existe un archivo /opt/data/catalogo.dbf, la consulta "select * from catalogo", o simplemente "catalogo", traera todos los datos contenidos en el archivo. Excel Clase: com.ideasoft.db.drivers.xls.XLSDriver URL: jdbc:xls:<path_to_excel_file>[;titlesLine=x][;titlesColumn=y] donde path_to_excel_file es un camino absoluto a el archivo excel, x es la linea de titulos e y es la columna donde comienzan los títulos. Por omisión, se toman como valor titlesColumn=1 y titlesLine=1. Notese que la columna se indica numéricamente, si la tabla comienza en la columna "B", debe ponerse titlesColumn=2. El driver de Excel utiliza los nombres de las hojas como nombres de tabla de base de datos. En cada hoja busca una tabla cuya primera linea este compuesta de strings, que tomara como los nombres de los campos. Se puede indicar en la URL cual es la tabla (en caso de haber mas de una) con los argumentos titlesLine y titlesColumn. Por ejemplo, en O3Designer, hay que poner lo siguiente: Driver: com.ideasoft.db.drivers.xls.XLSDriver Protocolo: xls Parámetros: /opt/data/datos.xls Cómo tratar los campos de tipo fecha Es importante notar que a pesar de que en la planilla de cálculo se haya formateado un campo para presentarlo como fecha, sigue siendo un valor numérico, por lo que el driver devuelve a O3 un número y no una fecha. Es necesario definir un campo virtual que transforme dicho valor numérico en una fecha. Para ello se deben seguir los siguientes pasos: 1. El campo definido en la fuente de datos correspondiente a la fecha, debe ser declarado de tipo "Integer". Sea valor_fecha dicho campo 2. Se debe definir un campo virtual, de tipo "Date", de nombre fecha_vf con la siguiente expresión: SumarDia(Fecha(1,1,1900),valor_fecha) 3. Definir la dimensión de tipo fecha, asociando el virtual fecha_vf En este caso, el campo debe ser leído como un entero. Atención La configuración del driver en O3Designer, debe realizarse como Consultas SQL. HowTo Envio de mail con servidor SMTP que requiere TLS Entorno: Muchas veces la cuenta de correo a utilizarse esta en un servidor externo, ej: gmail. Esto hace que la configuración por defecto del envió de mails configurado no sirva. Configuración para el envío de mail con TLS Si está en una versión de O3 menor o igual a la 5.4.022 bajar el archivo _o3p-mailsmtps.jar e instalarlo en <o3>/classes. 1. Editar el archivo <o3>O3Builder.properties, agregar al final mail.useSystemProp=true mail.smtp.starttls.enable=true mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory mail.smtp.port=465 mail.smtp.socketFactory.port=465 mail.debug=false 2. Configurar el Designer en el tab acciones a construir: Servidor SMTP para enviar correo mi_cuenta:mi_clave@mi_servidor_de_correo. Ej. para gmail: [email protected]:[email protected] notar que para este caso hay 2 @, esto se debe a que gmail el usuario es [email protected] How to Utilizando drivers ODBC de 32 bits en SO de 64 bits En instalaciones de O3PS en Sistemas Operativos de 64 bits, ejecutando el O3PS con java de 64 bits, puede ocurrirnos de que tengamos que utilizar drivers ODBC de 32 bits en la extracción de datos. Para ello el O3Builder y/o O3Designer tendrán que correr con java 32 bits. Los drivers ODBC solo se pueden acceder con ejecutables en la misma arquitectura. En el caso de que querramos correr algunos módulos con java 64 bits y otros con java 32 bits, debemos: Tener instaladas ambas máquinas virtuales. Modificar en los archivos .lax que jvm correrá cada módulo, en la siguiente sección: # # # LAX.NL.CURRENT.VM ----------------the VM to use for the next launch lax.nl.current.vm=..\\jre\\bin\\java.exe Para utilizar los archivos .bat deberá crear una copia del settings.bat (por ejemplo: settings_32.bat), y modificar la linea que da valor a JMMPATH: @echo off set set set set INSTALL_DIR=C:\IdeaSoft\O3 JVMPATH=%INSTALL_DIR%\jre JAVA_HOME=%JVMPATH% JVM=%JAVA_HOME%\bin\java.exe Luego modificar la primer linea del archivo .bat: @call settings.bat IF NOT EXIST "%JVM%" GOTO NOT_FOUND Tener activadas las licencias para ambas jvm. Configuración ODBC en Windows de 64 bits Observar que en plataformas Windows de 64 bits, la configuración de las fuentes de datos ODBC de 32 bits y 64 bits se invoca con ejecutables diferentes. La versión de 32-bit del Odbcad32.exe se ubica en la carpeta %systemdrive%\Windows\SysWoW64. La versión de 64-bit del Odbcad32.exe se ubica en la carpeta %systemdrive%\Windows\System32. Es la que se invoca por el panel de control. En la mayoría de los casos, para lograr conectarnos satisfactoriamente desde O3 es necesario configurar el odbc con la versión 32 bits (ubicada en SysWoW64) y utilizar en las componentes O3Builder y O3Desginer la jvm de 32 bits tal cual se explica anteriormente en ésta página. How To Utilizando drivers ODBC para archivos de texto (ASCII) En algunas oportunidades nos encontramos ante el uso de fuentes de datos que son archivos planos de texto (ASCII), archivos *.txt *.csv, por ejemplo. Y que además no deseamos extraer toda la información sino parte de ella, y utilizar consultas sql. En las instalaciones del Sistema Operativo MS-Windows viene instalado un driver ODBC para el uso de estos archivos. Se desarrolla a continuación los pasos a seguir para la utilización de este driver ODBC. Pasos a seguir para la utilización de un driver ODBC para archivos de texto Administrador de orígenes de datos ODBC A través del Panel de Control accedemos al Administrador de orígenes de datos ODBC y agregamos un nuevo origen de datos en DSN de Sistema. Configuración ODBC Seleccionamos el directorio donde están los archivos de texto (fuentes de datos). Abrimos las opciones presionando el botón OPCIONES y luego el botón DEFINIR FORMATO; donde indicaremos un archivo de texto que nos informe del formato, para una correcta extracción de los datos. Tenga presente el número de filas a explorar (numero de campos) y el tipo de formato del archivo (delimitado por comas, por tabuladores, personalizado, etc). Luego de indicar lo necesario para que lea correctamente el archivo, presionamos el botón ESTIMAR, y se completará la ventana de la derecha. Si en la primer línea del archivo de texto están los nombres de los campos y así lo indicáramos en la casilla de activación correspondiente, los ingresaría; en caso contrario las nombra con los nombres de F1 a F_n_ (siendo n el número de campos encontrado). Damos aceptar hasta cerrar. Verificación y/o modificación del archivo Schema.ini En el directorio indicado se crea un archivo Schema.ini, donde está la información del contenido del archivo de texto a extraer información. Además de lo indicado en el punto anterior sobre el nombre de los campos, en algunas oportunidades el ESTIMADOR del driver no toma la información que deseamos, por lo que recomendamos editar el archivo, verificarlo y si así lo necesita modificarlo. En nuestro caso de ejemplo además de verificar si adoptó el tipo de dato que corresponde, debemos modificar los nombres de los campos F1 a Fn por el verdadero; y salvamos el archivo. Extracción por consulta sql Finalizado los pasos anteriores podemos aplicar la extracción de datos con una consulta sql, indicando los campos que necesitamos, con filtros (where) y condiciones. Usando la función debug() para ver expresiones calculadas ¿Dónde podemos usar la función? En el designer al crear campos virtuales podemos usar la función debug(String) En el builder, nos muestra que valores toma un expresión en el momento de la construcción En el browser cuando creamos expresiones, por ejemplo para hacer algún cálculo en una columna ¿Cuando usar la función debug()? Un problema común en el uso de campos virtuales es que la expresión aparenta no hacer correctamente el cálculo. Determinar cual es el problema implica saber cuales son los valores utilizados por la expresión al ser evaluada por O3. La función debug() sirve para este fin. La función debug(String) muestra en el log el valor del texto, campo o variable que se le pase como parámetro. Esto permite ver en el log generado por la aplicación el valor que tiene un elemento usado en una expresión al momento de ser evaluada la misma. Ejemplo: Suponiendo que la siguiente expresión determina el valor de un campo virtual de tipo String: cantidad < 1000 ? "MENOR_MIL" : "SUPERIOR" Esta expresión retorna el valor "MENOR_MIL" si el campo "cantidad" es menor a 1000 y sino retorna "SUPERIOR" Para analizar que es lo que trae el campo de entrada "cantidad", se la puede puede redefinir de la siguiente manera: debug("--> " + cantidad); cantidad < 1000 ? "Menor" : "Mayor" En el log aparecería el siguiente texto: .... Debug: --> 25 Debug: --> 23 .... Suponiendo que en vez de ser el campo de entrada un double es un String, sería conveniente ponerlo de la siguiente manera para analizar si el valor trae espacios en blanco. debug("[" + nombre + "]"); NOTA : Actualmente esta función no figura en la ayuda del editor de expresiones. NOTA : El log generado por defecto se encuentra en la carpeta (Instalación de O3)/logs en los archivos Designer.log, Builder.log y Browser.log para Designer, Builder y Browser respectivamente. Activar la función debug() El uso de esta funcíon necesita que se encienda una property en los archivos .properties que se encuentran el directorio donde se instaló O3 Para ello según donde sea necesario inspeccionar (browser,designer o builder) deberemos crear un archivo O3Browser_user.properties, O3Desginer_user.properties, o O3Builer.properties Colocar en dicho archivo debug = true salvarlo. al volver a correr el browser, designer o builder en los archivo log o en la consola si se corrió con -debug, se verán los valores que toma la expresión de la cual se quiere saber su contenido. How To O3 Builder Ayudas y explicaciones de cómo realizar operaciones con el componente O3Builder. Cambio de directorio temporal - Builder How To Generar log de la construcción del cubo HowTo pasar parámetros al builder HowTo pasar una password encriptada como parámetro a builder Cambio de directorio temporal - Builder Problema Es común en las instalciones donde se particiona el disco destinar una para tmp. Durante la genereción del los cubos se emplea dicho directorio en forma temporal, en casos que esta espacio este muy lleno no será posible la construcción. Solución Editar el archivo builder.sh buscar: PROPERTIES="$PROPERTIES -mx1024M" y agregar PROPERTIES="$PROPERTIES -mx1024M" PROPERTIES="$PROPERTIES -Djava.io.tmpdir=/tmpX" dondo tmpX es cualquier directorio que queramos How To Generar log de la construcción del cubo Contexto La idea es generar logs del proceso de construcción que nos permitan en caso de que ocurra algún problema identificar sus posibles causas. Procedimiento El ejecutable para O3Builder se encuentra en la carpeta bin de la instalación de O3, y en script en la carpeta bat (instalación MS-Windows) o sh (instalación Linux). Al ejecutar O3Builder utilizamos la siguiente sintaxis (recordar que O3Builder puede ejecutarse con archivos .mdl, .cube o .srv): builder.sh ./builder.sh -debug -logfile=/<DIR donde se guardara el log>/mi_cubo.log <DIR archivo srv/archivo.srv> ./builder.sh -debug -logfile=/<DIR donde se guardara el log>/mi_cubo.log <DIR archivo mdl/archivo.mdl> ./builder.sh -debug -logfile=/<DIR donde se guardara el log>/mi_cubo.log <DIR archivo cube/archivo.cube> builder .bat builder.bat -debug -logfile=\<DIR donde se guardara el log>\mi_cubo.log <DIR archivo srv\archivo.srv> builder.bat -debug -logfile=\<DIR donde se guardara el log>\mi_cubo.log <DIR archivo mdl\archivo.mdl> builder.bat -debug -logfile=\<DIR donde se guardara el log>\mi_cubo.log <DIR archivo cube\archivo.cube> Builder .exe Builder.exe -debug -logfile=\<DIR donde se guardara el log>\mi_cubo.log <DIR archivo srv\archivo.srv> Builder.exe -debug -logfile=\<DIR donde se guardara el log>\mi_cubo.log <DIR archivo mdl\archivo.mdl> Builder.exe -debug -logfile=\<DIR donde se guardara el log>\mi_cubo.log <DIR archivo cube\archivo.cube> . HowTo pasar parámetros al builder Consideraciones previas Es usual querer parametrizar el modelo de modo que al momento de su construcción se pueda cambiar algún valor sin tener que hacer cambios en el mismo,Sobre todo si la construción se hace desde el buider Procedimiento en la pantalla se ve que agregamos un parametro para su posterior uso al parametro File_param_1 le dimos el valor "valor_1" pero le podrian haber dado otro nombre y otro valores (cambiar el tipo al que corresponda) luego creamos un archivo con cualquier editr de texto y le agregamos File_param_1=nuevo_valor Guardamos el archivo con el nombre que deseamos: param.cfg NOTA: el archivo debe de tener la terminación .cfg Ahora al construir desde al builder pasamos la siguiente línea de comado ./builder.sh /<DIR_cubos>/mi_cubo.cube -is=mi_imputset -cfg=param.cfg o para el builder .bat builder.bat \<DIR_cubos>\mi_cubo.cube -is=mi_imputset -cfg=param.cfg Listo ahora cuando quiéramos cambiar el parámetro solo tocamos el valor del archivo HowTo pasar una password encriptada como parámetro a builder INPORTANTE: Esta funcionalidad solo esta disponible para el campo password de la conexion a la base de datos. Se debe de construir el cubo con el builder pasandole -cfg=nombre_archivo.cfg, donde nombre_archico contiene el listado de parámetro, en particular nuestra password Procedimiento: 1. En el modelo se debe definir un parametro de la forma nombre_parametro.pwd 2. Ese parametro se va a usar en el campo password de la conexion a la base de datos asi: $nombre_parametro.pwd$, esto no lo veremos pues el campo nos pone "*********" por lo cual debemos de ser cuidadosos al escribir 3. Generar la password encriptada en la consola ejecutamos builder -encrypted mi_password, obteniendo algo del estilo Notice: O3Builder Complete version: 3.3.000 aadbZegrI3U= 4. Armado del nombre_archivo.cfg con un editor de texto creamos un archivo nuevo y le agregamos nombre_parametro.pwd = aadbZegrI3U= 5. salvamos 6. construimos el cubo desde la consola builder -cfg=nombre_archivo.cfg cubo.mdl How To O3 en Base de Datos Ayudas y explicaciones de cómo realizar instalaciones de O3 con base de datos. Exportación de RBAC How To Cambiar data sources de O3 y Enterprise Portal How To Migrar O3Server.cfg a Base de Datos How To Usar una nueva Base de Datos para RBAC Exportación de RBAC ¿Cuando hay que migrar las tabla RBAC? Como es sabido existe una recomendación de no usar HSQL com backend para O3 en ambiente de producción. El problema del que trata este wiki es que pasa cuando comencé a trabajar en HSQL y decidimos pasar a usar una base de datos como puede ser Postgrsql/MySQL/MS-SQL/Oracle. Luego de usar el wizard del Admserver y hacer que O3 trabaje contra otra base de datos, nos encontramos con la sorpresa que perdimos los usuarios. Talend. Para hacer la exportación de esta tabla usaremos una herramienta opensource llamada Talend (visitar el sitio) Procedimiento para realizar la exportación. 1. Bajar el correspondiente a la base de datos: RBAC_Converter_PostgreSQL_1.0.zip RBAC_Converter_MySQL_1.0.zip RBAC_Converter_MSSQL_1.0.zip 2. Descompactar el archivo. 3. Editar el archivo DBparameters.properties acorde a nuestras necesidades. 4. Bajar el Jboss. 5. Correr el wizard del admserver para setear la base de datos a usar. 6. Correr en línea de comandos el .bat/.sh 7. Levantar el JBoss. How To Cambiar data sources de O3 y Enterprise Portal Uso Este wiki aplica únicamente a instalaciones de O3 5.0 y posteriores que tienen almacenada la configuración de O3 y Enterprise Portal en base de datos (distinta de Hypersonic) y se requiere mover dichas bases a otro servidor. Por el contrario, si lo que se requiere es migrar instalaciones completas de O3, dirgirse a: Migración entre Versiones de O3. Contexto Configuración de O3 y de Enterprise Portal almacenadas en base de datos. Si surge la necesidad de cambiar de servidor de base de datos de un equipo a otro, se deberán migrar los datos y cambiar también los data sources de O3 para que apunten a la nueva ubicación de las bases de O3 y de Enterprise Portal. Procedimiento Resumen: 1. Mover las bases O3 y O3EP. 2. Detener servidor de O3. 3. Cambiar data source de O3. 4. Cambiar data source de Enterprise Portal. 5. Iniciar servidor de O3. Se detalla el procedimiento asumiendo que la base de datos que contiene la configuración de O3 se llama O3, y la que contiene la configuración del Enterprise Portal se llama O3EP. 1. Mover las bases O3 y O3EP (tablas, datos, etc) con el migrador que provea el propio servidor de base de datos. Mantener el nombre original de las bases para simplificar el procedimiento. 2. Detener servidor de O3. 3. Cambiar data source de O3. En <Instalación O3>\jboss\server\default\deploy\gserver se encuentra el archivo gserver-hsql-ds.xml (este nombre puede haber cambiado si ya se trabajaba con otra base de datos, por ejemplo gserver-sqlserver-ds.xml). Copiar el archivo y al original agregarle un # (de forma que quede respaldado como #gserver-hsql-ds.xml). Editar la copia con cualquier editor de texto. Se puede utilizar como ejemplo de consulta el archivo <Instalación O3>\jboss\docs\examples\jca\mssql-ds.xml. Los tags a modificar son: <connection-url> Indica la url del servidor de base de datos, incluye ip o nombre del servidor, puerto de conexión habitual y nombre de la base de datos. Ejemplo para SQL Server: <driver-class> Clase para conexión jdbc a la base de datos. Ejemplo para SQL Server: <user-name> Usuario para efectuar la conexión, con permisos de lectura sobre la base de datos. <password> Contraseña del usuario. NO se debe modificar el tag <jndi-name>. 4. Cambiar datasource de Enterprise Portal. Los pasos son similares a los de O3, pero el data source se encuentra en el directorio <Instalación O3>\jboss\server\default\deploy, con el nombre liferay-hsqldb-ds.xml (o similar). Respaldar el archivo original agregandole # al nombre y modificar la copia. Se puede utilizar como ejemplo de consulta el archivo <Instalación O3>\jboss\docs\examples\jca\mssql-ds.xml. Los tags a modificar son: <connection-url> Ejemplo para SQL Server: <driver-class> la misma que se utilizó para O3. <user-name> Usuario para efectuar la conexión, con permisos de lectura sobre la base de datos. <password> Contraseña del usuario 5. Iniciar el servidor de O3. How To Migrar O3Server.cfg a Base de Datos La finalidad de la migración del O3Server.cfg a base de datos es pasar toda la información que contiene (cubos publicados, vistas, etc.) a base de datos, y seguir trabajando desde allí. Los pasos para la migración son: 1. Creación o actualización de la base de datos. 2. Migración de los datos. 3. Configuración del O3Server para iniciarse con base de datos. 1- Actualización o creación de la Base de Datos. No es necesario que el Servidor O3 esté levantado a no ser que se quiera usar la base Hypersonic que viene en el jboss, conectandose por host:puerto. Iniciar el AdmServer y en la toolBar seleccionar "Herramientas -->Generador Esquemas Base de Datos". Esto muestra la siguiente ventana: Se configura la conexión a la base de datos: 1. Motor, las opciones posibles son SQL Server Microsoft, SQL Server Opta, Oracle, MySQL, PostgreSQL, HsqlDb, Derby, other. 2. Manejador (driver) a utilizar (debe tenerse el driver correspondiente en el servidor <InstalaciónO3>\jboss\server\default\lib) 3. Url completa a la base de datos (servidor, puerto de la base de datos, nombre de la misma, etc.). En caso de realizar la migración a una nueva base de datos, la misma debe estar creada de antemano. 4. Usuario y contraseña (que se guardará encriptada) para la base de datos. Además: Config datasource Se debe configurar <InstalaciónO3>\jboss\server\default\deploy\gserver\gserver-hsql-ds.xml, según la base de datos a la que se quiera exportar (salvo que se vaya a utilizar Hypersonic), se debe cambiar el contenido de los siguientes tags: <connection-url>, <driver-class>, <user-name> y <password>, y comentar <metadata>. Configuración inicial (original): Ejemplo para conexión a SQL Server: En este caso la configuración del archivo corresponde a indicar la URL, el driver, usuario, contraseña y comentar el tag indicado. Se deberá comentar la property hibernate.dialect = org.hibernate.dialect.HSQLDialect de <InstalaciónO3>\jboss\server\default\ideasoft-o3\GServer.properties si no se va a trabajar con Hypersonic, dejando hibernate.dialect = org.hibernate.dialect.SQLServerDialect si se va a utilizar SQL Server, por ejemplo. Luego se tiene 3 opciones: 1- Verificar la conexión a la base con el botón "Verificar Conexion". Si la conexión es satisfactoria se mostrará un mensaje como el siguiente: 2- En caso de que se quiera crear las tablas, se debe de presionar el botón con la etiqueta "Generar Tablas". Se mostrará el siguiente mensaje: 3- Si las tablas ya existen y lo que se quiere es actualizar la estructura de las mismas, se debe de presionar el botón con la etiqueta "Actualizar Tablas". Se crearán/actualizarán las tablas de RBAC, E2, jwf, y las necesarias para cubos, vistas, cubos-roles, cubos-perfiles, modelos, etc. 2- Migración de los datos. Luego de una actualización exitosa de la base de datos, se debe de proceder a migrar los datos del O3Server.cfg (cubos, vistas, etc.) a la base de datos. Para migrar los datos se debe: 1. Iniciar el O3 server y conectarse usando el AdmServer 2. Luego desde el AdmServer, seleccionar en la toolBar la opción "Herramientas --> Migrador de configuración del Servidor". Para realizar la migración se debe presionar el botón con la etiqueta "Migrar" y a continuación se mostrará en el área de "Mensajes de la migración" la información de qué se migró: 3. La última linea del mensaje está avisando que ya están disponibles los cubos como para comenzar a trabajar desde base de datos. 3- Configuración del O3 Server para levantar con Base de Datos. Luego de haber seguido los pasos anteriores se debe de bajar el servidor y editar el archivo GServer.properties para modificar la property o3.config.dataBase de <InstalaciónO3>\jboss\server\default\ideasoft-o3\GServer.properties, con el valor "true". Al levantar el servidor nuevamente este tomará la información que se guardó en la base de datos y toda nueva información sera guardada en este lugar. Como los usuarios admin y user están en RBAC, se deben crear manualmente en el AdmServer una vez que se migró a base de datos. Volver a trabajar con O3Server.cfg Como ya se mencionó a partir de O3 5.0 se almancena la configuración del servidor en base de datos, a diferencia de versiones anteriores donde la configuración era almacenada en el archivo O3Server.cfg Para facilitar la migración desde versiones anteriores se ofrece este mecanismo que tiene por resultado eliminar el uso del O3Server.cfg y pasar a adminsitrar en base de datos la información de cubos publicados y perfiles de acceso. De todas formas se aclara que si se necesita volver a la situación inicial, trabajando con O3Server.cfg, el procedimiento sería: 1. Apagar la property (o3.config.dataBase = false) que se define en el archivo Gserver.properties ubicado en <O3_DIR>\jboss\server\default\ideasoft-o3 2. Reiniciar el O3Server (Jboss). Los cambios hechos desde la migración (publicación de nuevos cubos, creación de nuevas vistas, etc.), no se verán reflejados en el O3Server.cfg. How To Usar una nueva Base de Datos para RBAC A continuación se detallan los pasos para usar RBAC sobre un motor de base de datos diferente a Hypersonic. Los pasos indicados con el símbolo deben ejecutarse cada vez que se actualiza la versión del servidor ya que la actualización retorna las configuraciones descriptas en estos puntos a su estado por defecto Creación de la Base de Datos para RBAC (Ejemplo con Oracle) 1. Copiar el driver JDBC que se desea utilizar en las siguientes carpetas <O3>/classes/jdbc <O3>/jboss/server/default/lib 2. Iniciar el JBoss 3. Iniciar el AdmServer 4. En el editor de configuración del Servidor, indicar los datos correspondientes para la base de datos que se desea utilizar. Por ejemplo: Motor Oracle Driver oracle.jdbc.driver.OracleDriver URL jdbc:oracle:thin:@orion.ideasoft:1521:ORION Usuario y password Una cuenta válida Si desea configurar una base diferente, consulte: Configuración de drivers jdbc 5. Presionar el botón de creación de la base de datos (Generar Tablas) 6. Cerrar el AdmServer Actualizar el Data Source de JBoss para tomar el nuevo repositorio de usuarios 1. 2. 3. 4. 5. Bajar el JBoss Renombrar el archivo <O3>jboss\server\default\deploy\gserver\gserver-hsql-ds.xml de modo que se llame #gserver-hsql-ds.xml Copiar el archivo <O3>jboss\server\default\deploy\gserver#gserver-oracle-ds.xml de modo que se llame gserver-oracle-rbac-ds.xml Editar este último archivo renombrado (gserver-oracle-ancel-ds.xml) Modificar el contenido del tag <connection-url> con el siguiente contenido: <connection-url>jdbc:oracle:thin:@orion.ideasoft:1521:ORION</connection-url> 6. Modificar el contenido de los tags <user-name> y <password> con una cuenta válida Ingreso de los usuarios mínimos para el funcionamiento 1. 2. 3. 4. Iniciar el JBoss Iniciar el AdmServer Ingresar con el usuario system de password system Dar de alta los siguientes usuarios user, con password user admin, con password admin 5. Al usuario admin agregarle los siguientes atributos isAdmin con valor booleano en TRUE runAsEnabled con valor booleano en TRUE 6. Dar de alta los siguientes roles User al que debe pertenecer el usuario user Manager al que debe pertenecer el usuario admin 7. Cerrar el AdmServer