lunes, 6 de abril de 2015

Agregar menu Css3 en Genexus

En este post, les quiero compartir mi experiencia agregando un menu css3 a mi aplicacion desde Genexus partiendo de un menu css prediseñado.

Dejo en claro primeramente que hay varias formas de hacer la integracion, yo use un poco de HTML desde genexus para hacer la carga de los items del menu y para referenciar al css que contenia el estilo del menu.
Otra forma podria haber sido crear un user control (mas practico en caso que trabajen en equipo o quieran cargar los items dinamicamente, usando sdts por ejemplo)

En la pagina http://cssmenumaker.com/ pueden encontrar varios menus prediseñados, en donde podran descargar tanto el css como un ejemplo de como cargar el menu desde su pagina HTML.

En este ejemplo vamos a usar el menu opera-drop-down-menu


Si siguen el link, van a encontrar en la pagina, la opcion Download Source.


Lo que descargarian en este ejemplo seria un .rar que contiene un css llamado style.css y un html de nombre index.html.

En archivo index.html tienen un ejemplo de como cargar el menu y como referenciar al style.css.

Pueden fijarse que desde el <head> tendriamos que hacer referencia al css, la linea que hace referencia en el ejemplo seria la siguiente:
<link rel="stylesheet" href="styles.css">
Y pueden fijarse que en el <body> del html se cargan justamente los items del menu junto con los enlaces de cada item.
Ejemplo:
<li><a href='#'><span>Home</span></a></li>
Los items del menu estan dentro de un div que hace referencia al id='cssmenu' definido en el css. No quiero entrar mucho en detalle en cuanto a la definicion del html ni del css ya que la idea principal mostrales una forma de integrar dicho menu dentro de un webpanel genexus o en la propia masterpage.

Referenciar el archivo css desde un webpanel

Lo primero que tienen que hacer, y es fundamental, es referenciar al css desde su webpanel, dijimos que eso lo hariamos dentro del <head> del html.
Como el editor html de genexus solamente permite trabajar sobre en body, entonces vamos a utilizar la propiedad del form  HeaderRawHTML en el evento start.
Entonces quedaria de la sgte manera:
Form.HeaderRawHTML = '<link rel="stylesheet" 
href="/KBJavaEnvironment/static/Resources/Spanish/styles.css">'
Fijense que el styles.css debe estar en el direcorio /static/Resources/Spanish/ de su kb, pueden cambiar la ruta, lo importante es referenciarlo bien y que el styles.css este alojado fisicamente en el directorio referenciado.
Luego cuando generen su aplicacion el mismo styles.css lo estaria llevando en su tomcat por ejemplo si estan protitipando con java.

Cargar los items del menu

Ahora tenemos que trabajar sobre el body de nuestro Web Panel.
La forma mas sencilla, copiar el contenido del body que se encuentra dentro del archivo de ejemplo descargado "index.html" y pegarlo en el editor HTML de Genexus del webPanel.


A partir de ahi podemos editar las opciones que se encuentran dentro de las etiquetas <span> </span> y las URLS colocarla dentro de <a href="">
Ejemplo:
 <li><a  href="/JavaEnvironment/servlet/com.ejemplo.principal"><span>Inicio</span></a>

Ejecutar la Aplicacion, ingresar al web Panel y podran visualizar el menu dentro de su webPanel.


Abajo se muestra el mismo menu agregado como component dentro de la masterPage de la app, con algunas modificaciones realizadas en el css para adaptar mejor al tema de la aplicacion.


lunes, 2 de febrero de 2015

Instalando Jboss 7 Final + Java JDK en CentOS

Comenzemos con los Requerimientos:

JBoss AS 7 requiere java JDK 1.6 o superior, yo estaria utilizando el JDK 1.7

El jdk lo pueden descargar desde http://www.oracle.com/technetwork/es/java/javase/downloads/index.html

Especificamente la version 7 esta disponible desde el sgte enlace:
Java JDK 7

Para mi centos x64 estaria utilizando

Linux x64135.63 MB   jdk-7u71-linux-x64.tar.gz

Como ya lo quiero descargar directamente en mi servidor, hare un wget dentro del directorio /opt
Si lo descargan desde algun browser, necesitaran aceptar los acuerdos de licencia del software, de igual manera si lo descargan con wget y para ello deben utilizar el parametro AuthParam.
Una manera de conseguir un valor valido del parametro es desde un navegador, aceptar los acuerdos de licencia, iniciar la descarga y cancelarla.
Una vez cancelada la descarga pueden obtener la url completa con el paramatro AuthParam haciendo clic derecho en el archivo cancelado y copiar direccion de enlace



Obtendrian una url similar a la que muestro a continuacion
http://download.oracle.com/otn-pub/java/jdk/7u71-b14/jdk-7u71-linux-x64.tar.gz?AuthParam=1420222715_80b03f490b70cb11fbc0391297fc8b5c

Desde la terminal de Linux de nuestro servidor entonces hariamos
# cd /opt/
# wget http://download.oracle.com/otn-pub/java/jdk/7u71-b14/jdk-7u71-linux-x64.tar.gz?AuthParam=1420222715_80b03f490b70cb11fbc0391297fc8b5c
Renombrar
# mv jdk-7u71-linux-x64.tar.gz?AuthParam=1420222715_80b03f490b70cb11fbc0391297fc8b5c jdk-7u71-linux-x64.tar.gz
Descomprimir
# tar xzf  jdk-7u71-linux-x64.tar.gz
Como segundo paso, instalar java utilizando alternatives.
# cd /opt/jdk1.7.0_72/ 
# alternatives --install /usr/bin/java java /opt/jdk1.7.0_72/bin/java 2 
Verificar la instalacion
# alternatives --config java
Si se instalo correctamente, tendran una salida similar a la sgte:
Hay 1 programa que proporciona 'java'.

Seleccion           Comando
*+1                     /opt/jdk1.7.0_71/
Ahora instalaremos javac y los comandos jar
# alternatives --install /usr/bin/jar jar /opt/jdk1.7.0_72/bin/jar 2 
# alternatives --install /usr/bin/javac javac /opt/jdk1.7.0_72/bin/javac 2 
# alternatives --set jar /opt/jdk1.7.0_72/bin/jar
 # alternatives --set javac /opt/jdk1.7.0_72/bin/javac
Ahora podemos verificar la version de java activa en el sistema
# java -version

Instalacion JBOSS.

Comenzar descargando Jboss Application Server 7.

Las distribuciones pueden ser obtenidas desde http://jbossas.jboss.org/downloads
wget 'http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.tar.gz'
Extraer la distribucion descargada en un directorio del sistema de archivos.

Yo lo instalare en /opt/jboss
#cd /opt/jboss
# tar xzf  jboss-as-7.1.1.Final.tar.gz
Jboss tiene 2 modos de operacion: Standalone y Domain.
Documentacion https://docs.jboss.org/author/display/AS71/Documentation

Iniciando JBoss Application Server 7

Para iniciar AS 7 utilizando la configuracion del web profile por default "modo standalone", cambiarse al directorio $JBOSS_HOME/bin
./standalone.sh

A continuacion desde cualquier browser pueden ingresar a http://localhost:9990/

Si desean acceder a la consola desde otro equipo remotamente deben editar standalone.xml y modificar el valor 127.0.0.1 por el deseado.

El archivo lo pueden encontrar en /opt/jboss/standalone/configuration
<interfaces>
    <interface name="management">
        <inet-address value="127.0.0.1"/>
    </interface>
    <interface name="public">
       <any-ipv4-address/>
    </interface>
</interfaces>

Fuentes:
http://tecadmin.net/steps-to-install-java-on-centos-5-6-or-rhel-5-6/
https://docs.jboss.org/author/display/AS71/Documentation







miércoles, 14 de enero de 2015

Genexus Environment

Environments en Genexus.

Un environment es un lugar para almacenar los detalles de implementacion del sistema, por ejemplo, el lenguaje de programacion utilizado para generar la aplicacion y la informacion de la base de datos.

En genexus es posible definir varios Environments lo cual permitira tener diferentes implementaciones de una sola aplicacion.

Cuando se crea por primera vez una base de concimiento, en el dialogo de creacion, Genexus solicita al usuario seleccionar un environment por defecto (Ej. Java Environment, C# Environment, Ruby Environment etc.)


Una vez creada la base de conocimiento, pueden verificar y/o modificar la informacion del environment creado como tambien pueden agregar nuevos environments.
Para ello deben ir desde el Knowledge Base Navigator a la seccion de Preferences.


Alli visualizaran su environment por defecto ('Java Environment' El que seteamos cuando creamos la base de conocimiento) 
Si necesitan agregar nuevos Environments basta con hacer clic derecho sobre el environment activo y seleccionar la opcion New Environment.
Alli se les abrira un dialogo que pedira la informacion de su nuevo Environment, como por ejemplo el lenguaje y el Datasource (pueden ser totalmente distintos al seleccionado en el environment anterior)


A continuacion se muestra una imagen de ejemplo donde tenemos varios environments creados en una base de conocimiento:


Solo un Environment puede estar activo a la vez. En el ejemplo tenemos activo el Environment 'Java Environment' que me lo indica con un icono verde parecido al icono del Run. Significando que cada vez que genere y reorganize mi aplicacion, genexus va a tomar los valores seteados en ese environment. En este caso va a generar en Java y sobre el DataStore SQL server, en el datastore tendria que estar configurado tambien toda la informacion de la base de datos y del servidor sobre el cual quieren impactar su modelo.

Cuando quieran trabajar sobre otro environment deben posicionarse en dicho environment + clic derecho + Set As Current Environment. Con esto ahora cada vez que especifiquen, generen o impacten su modelo, lo estarian haciendo sobre el nuevo environment en el lenguaje y en el datastore seteado en dicho environment.

El environment se recomienda crear no solo cuando se quiere trabajar con otro lenguaje y/o datastore, tambien (y es altamente recomendable) crear un nuevo Environment si por ejemplo como desarrollador tenemos acceso al servidor de desarrollo como al servidor de produccion. En ese caso lo ideal seria entonces tener un Environment Produccion (donde el datastore por ejemplo ya estaria configurado sobre el servidor de produccion) y para desarrollo otro Environment (que este configurado apuntando al servidor de desarrollo).

Un error común con el que me suelo encontrar principalmente con desarrolladores que estan empezando a trabajar con Genexus, es el de tener seteado solamente 1 Environment, configurar el datastore apuntando a un servidor de desarrollo (por ejemplo su servidor de DBMS local) y luego cuando necesitan reorganizar el servidor de produccion simplemente cambian en el mismo enviroment la configuracion del servidor.
Esto esta MAL porque por defecto los environment guardan de forma independiente  el estado de la reorganizacion. Cada vez que impactamos la base de datos, genexus verifica si no hay reorganizacion pendiente, si la hay realiza la reorganizacion y si no no la hace. Luego si hacemos un nuevo cambio desde Genexus que implique reorganizar de nuevo la base de datos se pierde el ultimo script de reorganizacion (porque ya lo aplico) y genera el nuevo script correspondiente al nuevo cambio que necesita hacer.
Entonces si en algun momento en el mismo Environment cambiamos la base de datos o apuntamos a otro servidor, el environment solamente va a tratar de aplicar la ultima reorganizacion en caso que haya pendiente y si no, nisiquiera va a reorganizar.
Como resultado final podriamos tener distinta la estructura de mi base de datos desarrollo con la de produccion y podriamos tener inconsistencia en nuestra aplicacion.

Por eso se recomienda separar mis areas de desarrollo y produccion en Environemnts distintos.

Lo mismo se aplica si desarrollan una aplicacion para distintas empresas, primero porque se tendra configuraciones distintas, y segundo porque van a tener que separar los estados de reorganizacion. 
Entonces se recomienda configurar un environment distinto por empresa en donde en cada environment van a configurar los detalles de implementacion correspondientes.



Mas info: http://wiki.genexus.com/commwiki/servlet/hwiki?Category%3AEnvironments,