sábado, 30 de junio de 2012

Configurar Modelo Prototipo/Producción Web con Tomcat + Java + SQL Server en Genexus 9.0


·         Software a Instalar:
o   JavaSE 7 [http://www.oracle.com/technetwork/java/javase/downloads/index.html]
o   SQL Server
o   ApacheTomcat 6.0.35 [http://tomcat.apache.org/download-60.cgi]

·         Crear carpeta del sistema web en C:\pahtInstallTomcat\webapps\<nombre carpeta>
·         Dentro de la carpeta <nombre carpeta>, crear la carpeta static
·         Dentro de la carpeta <nombre carpeta>, crear la carpeta META-INF y dentro de esta carpeta debe crear o copiar el archivo context.xml
·         Dentro de la carpeta <nombre carpeta>, crear la carpeta  WEB-INF
·         Dentro de la carpeta WEB-INF crear o copiar el archivo web.xml
·         Dentro de la carpeta WEB-INF crearla carpeta classes y lib.
·         Dentro de la carpeta lib copiar las librerías
o   gxclassr.zip
o   GxUtils.jar;
o   iText.jar;
o   jtds-1.2.jar;
o   jtds-1.2.5.jar;
o   gxclassr.jar

·         En el modelo Prototipo del proyecto, configurar las siguientes opciones de Properties
Blob local store path: /temp/
Servlet directory: C:\pahtInstallTomcat\webapps\<nombre carpeta>\WEB-INF\classes
Temp media directory: /temp
Static content base URL: /static
Static content directory seen from client: C:\pahtInstallTomcat\webapps\<nombre carpeta>\static
·         En el modelo Prototipo del proyecto, configurar las siguientes opciones de DBMS Options
Access technology to set: JDBC
JDBC driver: jTDS Driver (Type 4)
Database name: myDataBase
Server name: myServer
Server TCP/IP port: 1433
User id: myuser
User password: mypass
SQL server versión:

·         En el modelo Prototipo del proyecto, configurar las siguientes opciones de Execution
Platform: Sun SDK
Classpath: gxclassr.zip;GxUtils.jar;.;iText.jar;jtds-1.2.jar;jtds-1.2.5.jar;gxclassr.jar;C:\ pahtInstallTomcat\lib\servlet-api.jar
Compiler Path: C:\Program Files\Java\jdk1.7.0_01\bin\javac.exe
Make Path: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\nmake.exe
Interpreter Path: C:\Program Files\Java\jdk1.7.0_01\bin\java.exe
Web aplication base URL: http://127.0.0.1:8080/<nombre carpeta>/servlet/
En esta misma ventana botón Advanced
Use default browser: marcado
Viewer path para GUI: C:\Program Files\Java\jdk1.7.0_01\bin\appletviewer.exe

viernes, 29 de junio de 2012

Como obtener la ruta fisica y la url web


Ruta fisica de la aplicacion en genexus

&miRutaWin=GetPathApp.udp()

el valor que devuelve es la ruta fisica de la aplicacion

generador java
C:\Tomcat 6.0\webapps\miAppJavaEnvironment

generador c sharp
C:\Models\mimodelo\CSharpModel\web

Url web de la aplicacion en genexus

&miUrlapp=GetUrlApp.udp()
el valor que devuelve es la url base de la aplicacion

generador java
http://localhost:8080/appJavaEnvironment/

generador c sharp
http://localhost/app.NetEnvironment/


Aqui pueden descargar el xpz con los procedimiento
https://docs.google.com/open?id=0B72G0BdzutieS2tvMlpCRlJjWXM

jueves, 28 de junio de 2012

MD5 en Genexus

MD5

recibe una cadena y devuelve el valor en md5
Aqui pueden descargar el xpz con el procedimiento
https://docs.google.com/open?id=0B72G0BdzutieeWV0Tm1vSnBmY3c

funciona para el generador Java y c sharp

UUID

recibe una cadena y la devuelve en el formato UUID en forma canónica
(grupos de 8,4,4,4,12, por ejemplo 550e8400-e29b-41d4-a716-446655440000).

Aqui pueden descargar el xpz con el procedimiento
https://docs.google.com/open?id=0B72G0BdzutieV0tkcGRVeDEwc0U

funciona para el generador Java y c sharp

miércoles, 27 de junio de 2012

Usar Librerias Externas en Genexus

Para usar librerias externas en genexus, mediante la directiva csharp y java


para poder usar una libreria el modelo con el generador de .net,  se debe agregar en la propiedad Complier Flag:      /r:NombreLibreria

en el caso de java se pone la libreria en la propiedad classpath del generador java

una vez que se tiene la referencia  a la libreria se puede acceder a las clases como se muestra acontinuacion en los ejemplos

Ejemplo de uso de la directiva csharp
csharp MiNameSpace.miClase oMiObjeto= new MiNameSpace.miClase();

csharp try

csharp {

csharp [!&miVariable!] = 1;
csharp oMiObjeto.miMetodo([!&miVariable!]);
csharp }

csharp catch { }

csharp [!
&Result!] = oMiObjeto.MetodoDos();

Ejemplo de uso de la directiva java

java mipaquete.miClase oMiObjeto= new mipaquete.miClase();
java try

java {

java [!&miVariable!] = 1;
java    oMiObjeto.miMetodo([!&miVariable!]);

java }

java catch { }

java [!
&Result!] = oMiObjeto.MetodoDos();

viernes, 15 de junio de 2012

Usar la Propiedad Datasource for Web Based Applications

JDBC Datasource en Tomcat 6

Configurar Modelo java en genexus

Cambiar la Propiedad :
"Use datasource for web based applications" a true
al poner la propiedad en true te activa otra propiedad
"JDBC datasource" = java:comp/env/jdbc/testsql

Configurar archivo \conf\context.xml de tu instalacion del tomcat
Agregar el siguiente codigo antes de la etiqueta "</Context>"

<Resource name="jdbc/testsql"
 auth="Container"
 type="javax.sql.DataSource"
 driverClassName="net.sourceforge.jtds.jdbc.Driver"
 url="jdbc:jtds:sqlserver://yourServerName:1433/yourDBName"
 username="yourUserName"
 password="yourPassword"
 maxActive="8"
 maxIdle="4"  />

ó

 <Resource name="jdbc/testsql"
auth="Container"
type="javax.sql.DataSource"
maxActive="300"
maxIdle="300"
maxWait="10000"
username="yourUserName"
password="yourPassword"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://yourServerName:1433/yourDBName" />

Los campos marcados en negrita deberan ser reemplazados por la información de su conexión de datos en particular.
El nombre del recurso puede ser cualquier persona, este es un ejemplo

Configurar el archivo \webapps\yourWebapp\web-inf\web.xml

Agregar el siguiente codigo antes de la etiqueta </web-app>
<resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/testsql</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
</resource-ref>

Copiar el driver
Copiar el driver (jtds1-2.jar) o (jtds-1.2.5.jar) a la carpeta \webapps\yourWebapp\web-inf\lib\
nota: yo uso el driver jtds-1.2.5.jar por que por alguna razon en mi modelo no me funciona correctamente el driver jtds1-2.jar


Con MySQL
<Resource name="jdbc/testsql"
auth="Container"
type="javax.sql.DataSource"
maxActive="300"
maxIdle="300"
maxWait="10000"
username="yourUserName"
password="yourPassword"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javatest" />

Driver: mysql-connector-java-5.1.11-bin.jar

nota: siempre deben checar que el driver sea el correcto

Referencias
Data Source

Ejemplo basico HttpClient

Genexus y Whois API
En este ejemplo vamos a provechar para obtener datos de un dominio registrado como la fecha de expiracion del dominio mediante una "API WebService" "Whois API"
como nota: se deben de registrar a la pagina del api para poder usarla con usuario y contraseña

Variables Definidas
   &StatusCode       Numeric   
   &result       LongVarchar   
   &HttpClient       HttpClient   

Se define el url que accede a el API Whois y Se Ejecuta el URL
&HttpClient.Host= 'www.whoisxmlapi.com/whoisserver/WhoisService?domainName=aquivaDominio&username=aquivaUsuario&password=aquiPassword&outputFormat=XML'
&HttpClient.Execute('GET','')

Una vez que se ha ejecutado obtenemos el status HTTP
&StatusCode = &HttpClient.StatusCode
El resultado en una cadena la obtemos asi:
&result = &HttpClient.ToString() //devuelve el string del xml
Si el resultado lo queremos directamente a un archivo se hace de la siguiente forma:
&HttpClient.ToFile('mixml.xml') //devuelve el xml en un archivo

Leer un Elemento de un XML
Supongamos que necesito saber la fecha de vigencia de un dominio, se obtendra leyendo el xml devuelto en &result = &HttpClient.ToString()  de la siguiente forma:

&XMLReader.OpenFromString(&result)
&XMLReader.ReadType(1,'createdDateNormalized')
&Vigencia = &XMLReader.Value

Autentificarse a un Servidor  Proxy con Genexus
Siguiendo en el ejemplo descrito en la parte superior, si ademas de acceder al url del api para obtenr el xml, deben pasar por un Proxy, bueno la solucion es muy simple solo hay que agregar lo siguiente a nuestra variable &HttpClient, este codigo debe ir antes de &HttpClient.Execute
&UserProxy = 'usuario'
&PassProxy = 'pass'
&AdressProxy = 'http://10.65.0.43:8080'
&HttpClient.AddProxyAuthentication(0,&AdressProxy,&UserProxy,&PassProxy)

&HttpClient.Host= 'www.whoisxmlapi.com/whoisserver/WhoisService?domainName=aquivaDominio&username=aquivaUsuario&password=aquiPassword&outputFormat=XML'
&HttpClient.Execute('GET','')

Ejemplo Completo
Procedimiento para obtener la fecha de vigencia
Variables Definidas
&StatusCode Numeric
&result LongVarchar
&HttpClient HttpClient
&UrlStringUrlString
&domainNamevarchar
&usernamevarchar
&password varchar
&outputFormat varchar
&AdressProxyvarchar
&UserProxyvarchar
&PassProxyvarchar
&XMLReaderXMLReader
&Vigenciavarchar

Rules:
parm(in:&UserProxy, in:&PassProxy, in:&AdressProxy, in:&username, in:&password, in:&domainName, in:&outputFormat, out:&Vigencia);

Source:
&UrlString = 'www.whoisxmlapi.com/whoisserver/WhoisService?domainName=' + &domainName
&UrlString += &username=' + &username + '&password=' + &password + '&outputFormat='+&outputFormat
&HttpClient.AddProxyAuthentication(0,&AdressProxy,&UserProxy,&PassProxy)
&HttpClient.Host= &UrlString
&HttpClient.Execute('GET','')
&result = &HttpClient.ToString()
&StatusCode = &HttpClient.StatusCode
&XMLReader.OpenFromString(&result)
&XMLReader.ReadType(1,'createdDateNormalized')
&Vigencia = &XMLReader.Value
&Vigencia=TRIM(&Vigencia.Replace(" UTC",""))

descargar ejemplo xpz

Referencias:
whois-api-doc
HttpClient Data Type
XMLReader Data Type

Consumir Web Service:
http://wiki.gxtechnical.com/commwiki/servlet/hwiki?WSDL+Import+Wizard,
http://wiki.gxtechnical.com/commwiki/servlet/hwiki?External+Object%3A+WSDL+%28Web+Service%29,

Consumir Web Service Seguros:
http://wiki.gxtechnical.com/commwiki/servlet/hwiki?Consumir+servicios+web+bajo+https+y%2Fo+autenticaci%C3%B3n,
http://www.genexus.com/noticias/leer-noticia/consumir-servicios-web-bajo-https-y-o-autenticacion?es

jueves, 14 de junio de 2012

Como Convertir XML a XSD

Se puede usando una herramienta que viene con el visual Studio 2008 que se encuentra en:
Menu Inicio/Microsoft Visual Studio 2008/Visual Studio Tools/Símbolo del sistema de Visual Studio 2008

comando xsd:
xsd file.xdr [/outputdir:directory][/parameters:file.xml]
xsd file.xml [/outputdir:directory] [/parameters:file.xml]
xsd file.xsd {/classes | /dataset} [/element:element]
             [/enableLinqDataSet] [/language:language]
                          [/namespace:namespace] [/outputdir:directory] [URI:uri]
                          [/parameters:file.xml]
xsd {file.dll | file.exe} [/outputdir:directory] [/type:typename [...]][/parameters:file.xml]

Ejemplo:
xsd c:\Temp\WhoisService.xml /outputdir:C:\Temp\
esta instruccion generara el archivo WhoisService.xsd

miércoles, 13 de junio de 2012

Debug Genexus Generador Java

Error HTTPClient.HTTPConnection.setTcpNoDelay(Z)V
Para poder usar el debug de genexus en Evolution I U7
Se tiene que quitar las siguientes librerias de la carpeta "lib"
GXWS.jar
GXWS-Launcher.jar