SSO en Firefox

La activación del SSO con Active directory, permite a los usuarios de Internet Explorer y Chrome acceder directamente a Atlas SBI sin necesidad de autenticarse. Sin embargo, los usuarios de Firefox continuan recibiendo la solicitud de usuario y contraseña.



Básicamente para poder trabajar con SSO (Single Sign On) en Firefox tenemos que configurar el navegador para que acepte la URL del dominio al cual nos conectamos.

Primero tenemos que acceder a la configuración interna del navegador, escribiendo en la barra del navegador la frase about:config, tal y como se muestra en la imagen



Una vez dentro de la configuración buscaremos la preferencia siguiente:

network.automatic-ntlm-auth.trusted-uris


y dando doble click añadiremos la url a la cual pertenece nuestro dominio.


De esta manera tan sencilla podremos acceder al sistema unificado de sesión SSO. 

Para finalizar, hay que tener en cuenta que Firefox usará las credenciales de Windows del usuario que esté utilizando el ordenador. 



Leer más »

Cambios en la creación de gráficos en informes pdf

En la versión 11 de Atlas SBI ha habido cambios en la creación y definición de gráficos que afectan no sólo a los controles de tipo Char, sino también a los gráficos dentro de los informes PDF.



En el artículo Creación de un report PDF explicamos como crear un report PDF que incluía un gráfico para cada uno de los vendedores.

Este artículo muestra únicamente la parte de creación del gráfico una vez ya tenemos creado el esqueleto del informe.




Artículos relacionados:
Creación de un report PDF
Formato de las etiquetas de los gráficos con la versión 11
Leer más »

Formato de las etiquetas en la versión 11

A partir de la versión 11.01.1000 y superiores de Atlas SBI se ha implementado una nueva manera de tratar las etiquetas de las series de una manera más clara y sencilla. En este articulo vamos a mostrar donde se encuentra esta funcionalidad ahora.



Como hemos comentado en versiones antiguas de Atlas SBI (por debajo de la 11.xx) la funcionalidad de dar formato a los valores de la serie se hacia desde el apartado Series en la propiedad de Configuración de puntos:



A partir de la versión 11, se define directamente en el apartado Etiquetas, en concreto en la pestaña Configuración de Puntos. El procedimiento es Elegir el patrón a utilizar (generalmente el valor, pero opcionalmente el nombre de la serie o el argumento) y la cadena de formato del valor.




Leer más »

Creación dinámica de paletas de colores

En la nueva versión de Atlas SBI (11.03.1000) se ha implementado una nueva funcionalidad en el control de gráficos, la cual hará que se pueda seleccionar el color de cada serie dentro de la query. De manera que con los colores seleccionados en la query se genera una paleta de colores en tiempo real para usarla en el gráfico.


Primero, dentro de la query, crearemos una columna, en nuestro caso de nombre 'Color', donde asignaremos un color dependiendo de las necesidades que tengamos.




Seguidamente en la pestaña Propiedades asignaremos a la variable Color la columna creada anteriormente:




De esta manera podremos definir los colores de las series a partir de una configuración guardada en base de datos.

Cabe destacar que el formato del color ha de ser un string con el código RGB en hexadecimal comenzando siempre por '#'. Por supuesto, aunque en el ejemplo estemos definiendo el color mediante una fórmula, dicho color puede ser un campo de la base de datos


Leer más »

SSO con cualquier aplicación .NET

En el artículo anterior "Sigle Sign-On (SSO) en Atlas SBI" vimos como activar el sigle sign on para que Atlas SBI delegara la autenticación en Active Directory. El SSO con Active Directory permite delegar la identificación del usuario conectado al Directorio Activo de Windows.

Esta solución es muy válida en entornos corporativos donde se centraliza la información de seguridad en el Active Directory de Windows. Sin embargo, para aplicaciones que afecten a múltiples organizaciones o que tengan una seguridad propia no es apropiado.

En este artículo veremos como activar el single sign on entre dos aplicaciones .Net para que cualquiera de ellas pueda autenticar un usuario, de manera que cuando un usuario ya se haya identificado en una de ellas, no se le vuelva a solicitar la contraseña al acceder a la otra.

El video siguiente muestra el resultado final del proceso, de manera que se puede comprobar cómo autenticándonos en una de las aplicaciones, automáticamente hacemos login en la otra.



Cabe destacar que para poder utilizar esta técnica con Atlas SBI (y posiblemente con otras aplicaciones) es necesario que los usuarios estén dados de alta con el mismo Id en ambas aplicaciones.

Configuración del SSO


El método consiste, básicamente, en utilizar las mismas claves de máquina (machine key) para que las cookies de sesión se compartan entre aplicaciones.

En primer lugar debemos generar una clave única para la primera aplicación (o simplemente ir a la configuración de IIS y copiar la clave actual de dicha aplicación y la clave de encriptación.




Seguidamente iremos a la configuración de Claves de equipo (Machine Key) en el otro servidor web y copiaremos las claves de Máquina y de encriptación que copiamos del proyecto anterior.



Éste procedimiento se puede realizar también mediante la configuración directa de los archivos web.config de cada una de las aplicaciones.



Por último, debemos configurar que los formularios de login guarden la información con el mismo nombre de cookie, para ello modificaremos la línea <forms> del archivo web.config para asignar un nombre de cookie.

<forms loginUrl="~/LoginForm.aspx" protection="All" timeout="120" name="miNombreCookie"/>

Otros artículos SSO en Atlas SBI


Enlaces sobre Machine Key y SSO en .Net


Leer más »

Solución error clausula CASE en Oracle


Cuando trabajamos con ORACLE (en el resto de SGBD no ocurre) y la consulta que utilizamos para obtener los datos de nuestro control contiene clausulas "Complejas" como por ejemplo sub selects o clausulas "CASE" en el Group By, en el momento de generar columnas se produce un error.


Problema

Por ejemplo, si tenemos esta consulta a interrogar a una base de datos oracle:
select DEPARTMENT_ID as "IDDepartamento"
, CASE WHEN HIRE_DATE < '01/01/2010' THEN 'veterano' ELSE 'novel' END as "Antiguedad"
, SUM(SALARY) as "Salario"
from EMPLOYEES
GROUP BY DEPARTMENT_ID
, CASE WHEN HIRE_DATE < '01/01/1990' THEN 'veterano' ELSE 'novel' END

podemos apreciar que no hay ningún error de sintaxis y, de hecho, la consulta se ejecuta correctamente, sin embargo cuando pedimos Generar Columnas aparece el siguiente error.


Esta situación se repite siempre que se consulta la estructura de datos resultante de la ejecución de las queries, por ejemplo al generar las columnas o seleccionar columnas para cálculos periódicos, joins in memory, etc...

De hecho, el error se produce cuando se intenta generar el esquema de la tabla resultante utilizando las apis de generación de esquema de Oracle.

Solución

La solución a este error pasa simplemente por poner paréntesis en la clausula CASE del SELECT, tal y como se muestra a continuación:
select DEPARTMENT_ID as "IDDepartamento"
, (CASE WHEN HIRE_DATE < '01/01/2010' THEN 'veterano' ELSE 'novel' END) as "Antiguedad"
, SUM(SALARY) as "Salario"
from EMPLOYEES
GROUP BY DEPARTMENT_ID
, (CASE WHEN HIRE_DATE < '01/01/1990' THEN 'veterano' ELSE 'novel' END)

De esta manera tan simple el driver de Oracle es capaz de analizar el esquema resultante y conseguimos solucionar un problema reportado en algunas ocasiones.
Leer más »

Controlar página de error en Single SignOn


Cuando se activa el Single SignOn sobre Active directory, para todos aquellos usuarios que no estén dados de alta en Atlas SBI, aparece un mensaje de error de sistema que no aclara mucho el motivo del mismo.



En este artículo vamos a explicar cómo personalizar las páginas de errores que se muestran en AtlasSBI, ya sean provocadas por un error en SSO o por otro tipo de error, por ejemplo 404 (página no disponible).


Primero crearemos tres páginas HTML, dos para controlar los errores más comunes (el 403 y el 404), y otra adicional para controlar los errores genéricos (por supuesto el procedimiento se puede extender para controlar cualquier tipo de error). En nuestro ejemplo los llamaremos respectivamente 403.html, 404.html y generico.html.

La creación de las páginas se puede hacer con cualquier editor estándar y podemos hacerla tan simple o compleja como queramos, en función del la información que deseemos facilitar al usuario.

En nuestro caso de ejemplo error 403 es una simple archivo html que informa del error:
<html>
 <head>     
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />     
  <title>Error 403</title> 
 </head>
 <body>
  <header>
   <div>
    <p>No dispone de permisos suficientes para acceder a esta página</p>
   </div>
  </header>  
  <section>
                        
  </section>
  <footer> 
   <p>Copyright 2019 Mi organitzación</p> 
  </footer>
 </body>
</html>

Una vez creados estos archivos, los ubicaremos en la ruta siguiente:
C:\inetpub\wwwroot\AtlasSBI\Private\Errors

siendo 'Errors' una carpeta creada para ubicar estos archivos.

Seguidamente abriremos al archivo de configuración de la instancia de AtlasSBI dentro de nuestro server y modificaremos y añadiremos unas lineas.

1. Buscaremos a la linea donde tenemos la siguiente directiva:
<customErrors mode="RemoteOnly" />

y añadiremos el siguiente atributo indicando la ruta del archivo html de error genérico:
<customErrors mode="RemoteOnly"  defaultRedirect="/AtlasSBI/Private/Errors/generico.html"/>

2. Ahora, si queremos cambiar las páginas de errores utilizadas por parte de ASP.NET a la hora de mostrar un error 403 o 404 añadiremos las siguientes lineas dentro de la directiva  <system.webServer>
<system.webServer>
<!-- Custom Error Page -->
 <httpErrors errorMode="Custom" >
  <remove statusCode="404" subStatusCode="-1" />
  <error statusCode="404" path="/AtlasSBI/Private/Errors/404.html" responseMode="Redirect" />
  <remove statusCode="403" subStatusCode="-1" />
  <error statusCode="403" path="/AtlasSBI/Private/Errors/403.html" responseMode="Redirect" />  
 </httpErrors>
</system.webServer> 

Si analizamos por encima el código podremos ver que estamos sobre-escribiendo las páginas del error 403 y 404 que vienen por defecto asignando la ruta de las páginas personalizadas.


Otros artículos sobre SSO con Atlas SBI


Leer más »

Definir conexiones a Bases de datos en AtlasSBI



En este artículo vamos a repasar cómo crear las conexiones a orígenes de datos más comunes que un usuario de Atlas SBI puede llegar a necesitar.


SQL SERVER

La conexión a SQL se realiza de manera nativa. En el proveedor de conexión será obligatorio poner  SQLSERVER y en la definición de esquema SQLServerGeneric.

Un ejemplo de cadena de conexión seria el siguiente:

Data Source=(local);Initial Catalog="NombreBD";User Id=usuario;Password=usuario;



MySQL

La conexión a MySQL se realiza utilizando el proveedor ODBC, por lo que es necesario instalar el controlador ODBC para MySQL. Una vez instalado, en el proveedor de conexión se tendrá que elegir ODBC y en la Definición de Esquema seleccionaremos SQLServerGeneric

Un ejemplo de cadena de conexión seria el siguiente:

Driver={MySQL ODBC 5.1 Driver}; Server=192.168.200.122; Port=3306; Database=pgconocimiento; User=XXXXXXXXXX; Password=ZZZZZ ;Option=3;charset=utf8



ORACLE

La conexión a Oracle se realiza utilizando el proveedor OLEDB, por lo que es necesario instalar el controlador OLEDB para Oracle. Una vez instalado, en el proveedor de conexión se tendrá que elegir ORACLE mientras que en la Definición de Esquema elegiremos OracleGeneric.

Opcionalmente podemos establecer la conexión utilizando OleDB u ODBC, en cuyo caso, es mejor elegir como Definición de Esquema OracleOLEDBGeneric u OracleODBCGeneric respectivamente.

Un ejemplo de cadena de conexión seria el siguiente:

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=XXXX)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=YYYYYY)));User Id=username;Password=password;



EXCEL

La conexión a Excel se realiza utilizando el proveedor OLEDB u ODBC, dependiendo si está instalado ya en la máquina o no. En el siguiente ejemplo la conexión se realiza via ODBC. En el proveedor de conexión se tendrá que elegir ODBC.

Un ejemplo de cadena de conexión para ODBC seria el siguiente:

Driver={Microsoft Excel Driver (*.xls)}; DriverId=790; Dbq=C:\AtlasSBIExcel\libro1.xls; DefaultDir=C:\AtlasSBIExcel\;


ANALYSIS SERVICES

La conexión a SQL se realiza de manera nativa. En el proveedor de conexión será obligatorio poner  MSOLAP.

Un ejemplo de cadena de conexión seria el siguiente:

Provider=MSOLAP; Persist Security Info=False; User ID=DOMAIN\Username; Initial Catalog=Adventure Works DW 2008R2 SE; Data Source=192.168.1.xxx; Location=192.168.1.xxx; Password=XXXXXXX



También tenemos una serie de artículos que explican la conexión a bases de datos NoSQL:






Leer más »

Representación de cuartiles con BoxPlot


Boxplot es un tipo de gráfico que permite visualizar de forma fácil la distribución de valores de una serie o categoría.



Atlas SBI no dispone de un tipo concreto para generar este tipo de gráficos, sin embargo podemos crear un gráfico de tipo Boxplot definiendo dos series.

En este artículo vamos a ver como realizar un gráfico Boxplot para analizar la distribución de los precios de venta de cursos de las diferentes oficinas de una empresa.

Puedes encontrar más información sobre como se calcula e interpreta un Boxplot en nuestro artículo Diagrama BoxPlot o en Wikipedia

Obtención de los datos

Nuestra consulta tendrá cuatro Pasos/Steps (consulta como crear steps aquí)
  1. DatabaseQuery: Calculará los cuartiles y el RIC de cada una de las categorías, 
  2. DatabaseQuery: Calculará el máximo, mínimo, la media y la desviación estándar de cada categoría, 
  3. JoinInMemory: Une en una tabla los dos pasos anteriores (como hacer joins in memory),
  4. ExpressionColumn: Calculamos los límites superior e inferior a partir del RIC 
El motivo por el cual no hacemos el cálculo de los cuartiles y el resto de cálculos estadísticos en una única sentencia, es por que para calcular el máximo, mínimo, media y desviación estándar es necesario que la cláusula Select tenga un Group By por oficina, mientras que la función percentile_disc que calcula los cuartiles no puede llevar group by.

Calculo de cuartiles


Para calcular los cuartiles utilizaremos la función Percentile_disc de SQL Server (Oracle también dispone de esta función aunque con palabras clave y opciones algo distintas. Con la siguiente sentencia calculamos los tres cuartiles (25%, 50% o mediana y 75%, así como la diferencia entre el primer y tercer cuartil (RIC), que utilizaremos en el cuarto paso para calcular los límites superior e inferior.

Select Distinct Oficina
  ,PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY TotalInscripcion) 
     OVER (PARTITION BY Oficina) AS Q1Cont  
  ,PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY TotalInscripcion) 
     OVER (PARTITION BY Oficina) AS MedianCont  
  ,PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY TotalInscripcion) 
     OVER (PARTITION BY Oficina) AS Q3Cont  
  ,PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY TotalInscripcion) 
     OVER (PARTITION BY Oficina) 
  - PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY TotalInscripcion) 
     OVER (PARTITION BY Oficina) As RIC
From InscripcionesCurso
Where Estado = 'RESERVA' or Estado = 'OVERBOOKING'

Cálculo de máximo y mínimo


El cálculo del máximo y el mínimo es necesario para calcular los límites superior e inferior del BoxPlot, y de paso calculamos otros cálculos estadísticos como la media o la desviación estándar que pueden darse como información adicional en el drill-down del gráfico.

Select Oficina
  ,Max(TotalInscripcion) as Maximo
  ,Min(TotalInscripcion) as Minimo
  ,Avg(TotalInscripcion) as Media
  ,Stdev(TotalInscripcion) as DesvSTD
From InscripcionesCurso
Where Estado = 'RESERVA' or Estado = 'OVERBOOKING'
Group By Oficina

Unión de la tabla

En el tercer paso unimos las dos tablas en una nueva mediante un InMemory Join, uniendo por los campos "Oficina".



Cálculo del limite superior e inferior


Finalmente con un paso tipo Expression column calculamos el límite inferior definido como el máximo entre el valor mínimo y la resta de 1,5 veces el RIC al primer cuartil, con la siguiente fórmula
iif([Q1Cont]-(1.5*[RIC])<[Minimo],[Minimo],[Q1Cont]-(1.5*[RIC]))

y el límite superior que se define como el mínimo entre el máximo valor y la suma de 1,5 veces el RIC al tercer cuartil.
iif([Q3Cont]+(1.5*[RIC])>[Maximo], [Maximo], [Q3Cont]+(1.5*[RIC]))

Definición del gráfico

Una vez tenemos la fuente de datos con toda la información necesaria, diseñaremos el gráfico, para ello crearemos dos series: Caja y Mediana


Para la caja elegiremos el tipo Vela que nos dará la caja y los bigotes, mientras que para la mediana elegimos el tipo Barra de Rango que permite dibujar una barra que empieza fuera del valor 0.



Ligar datos

Para ambas series, en la sección Ligar datos, elegiremos la oficina como argumento, lo que variará será la definición del valor, que en la serie Cajas definiremos, asignando al Bajo el campo Inferior, al Cierre el campo Q3Cont, al apertura el Q1Cont y al Mayor el campo Inferior.


Mientras que a la mediana, en ambos valores seleccionaremos el campo MedianCont, con lo que conseguiremos que nuestra barra quede limitada a una línea.


Vista Series

Finalmente, en el apartado vista de las series acabaremos de dar formato a nuestras series,  quitando la reducción y ajustando el grosor para la serie Caja


y ampliando la anchura a 0,5 en la serie mediana (o en su defecto hasta que coincida con el ancho de la caja).


Finalmente podemos quitar la leyenda para que no muestre información confusa



Leer más »

Lo más visto