Servicios Profesionales (consultoras que apoyan el proyecto Mundo Support GX)

Para informarse sobre las soluciones y servicios en:
 - Genexus Software Factory.
 - Búsqueda, Selección & Outsourcing de RRHH.
 - Gerenciamiento externo de Proyectos.
 - Asistencia técnica.
 - Software ERP.

Click Aquí o escriba a mundosupport@gmail.com.

         
             

Bienvenido a Mundo Support

Te damos la bienvenida a Mundo Support GX!!!!!

Como usuario visitante podrás consultar libremente los artículos y comentarios publicados; además de escribir comentarios que aporten y enriquezcan a los artículos.

Si deseas redactar artículos, entradas o consultas te invitamos a que nos escribas a mundosupport@gmail.com y recibirás un correo invitándote a ser redactor contribuyente.

Gracias y esperamos contribuir en tu camino por el mundo Genexus y la programación.



lunes, 6 de octubre de 2008

XLS.Varios - Ampliar funciones en creación de documentos excel

Se desea generar documentos excel con mayores detalles de look y funcionalidad desde Genexus.

Algunos de los requerimientos son: colorear celdas, definir bordes de las celdas, insertar filas, insertar fórmulas....

Dado que las funciones propias de Genexus no lo permiten, una alternativa para lograrlo, es incluir macros que realicen las funciones deseadas e invocarlas pasándo los parámetros necesarios, ej:

&ExcelDocument.RunMacro( 'InsertarFila',2 )
&ExcelDocument.RunMacro( 'ColoresCelda',2,5,2 )

Etc...


Este es el código fuente del modulo Visual Basic del archivo excel del cual se invocarán las macros.

Sub InsertarFila(Fila As Integer)
Row = Trim(Str(Fila)) + ":" + Trim(Str(Fila))
Rows(Row).Select
Selection.Insert Shift:=xlDown, copyOrigin:=xlFormatFromRightOrBelow
End Sub


Sub ColoresCelda(RangoCeldas As String, ColorFondo As Integer, ColorTexto As Integer)

' FormatoCelda Macro

'Selecciono Celda
Range(RangoCeldas).Select
'Color Fondo
With Selection.Interior
.ColorIndex = ColorFondo
.Pattern = xlSolid
End With

'Color Texto
Selection.Font.ColorIndex = ColorTexto
End Sub

Sub BordesCelda(RangoCeldas As String, TipoBorde As Integer)


If TipoBorde = 0 Then

'Bordes transparentes
Range(RangoCeldas).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

End If


If TipoBorde = 1 Then

'Bordes linea Fina
Range(RangoCeldas).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

End If

If TipoBorde = 2 Then

'Bordes linea gruesa
Range(RangoCeldas).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With

End If
End Sub

Sub BorrarFila(Fila As Integer)
Row = Trim(Str(Fila)) + ":" + Trim(Str(Fila))
Rows(Row).Select
Selection.Delete
End Sub

XLS.Varios - Insertar fórmula en una celda al generar archivo excel

Para insertar un fórmula en una celda de un archivo excel generado con Genexus utilizar la siguiente sentencia:

&ExcelDocument.Cells(1,5).Text = '=IF(C1>10,1,2)'

Criterio:
- Poner la instrucción en Inglés.
- Poner comas en lugar de punto y comas para separar.

miércoles, 23 de julio de 2008

C-Tree.Varios - Vincular aplicación Genexus con base de datos c-tree plus.

En esta oportunidad el motivo de la entrada es otro.

No voy a escribir sobre como hacer algo sino que voy a dejar planteada una inquietud, tal vez, alguno de los visitantes la ha resuelto.

Se tiene la necesidad de vincular una aplicación generada en Genexus 9.0 con generador Visual Basic con una aplicación que utiliza base de datos c-tree plus de Faircom.

Por el momento el vínculo se realiza mediante el intercambio de archivos planos.

El ideal sería poder acceder directamente desde la aplicación Genexus a las tablas c-tree mediante ODBC u otra alternativa.

En caso de que alguien haya logrado esto o este teniendo el mismo problema/necesidad será bienvenido el comentarios.

Tanto con algún tipo de solución o si tiene el mismo problema para estar en contacto y encontrar una solución.

Saludos y hasta la próxima.

viernes, 9 de mayo de 2008

XLS.Varios - Al abrir archivo con excel los números aparecen en notación científica (exponencial)

Problema: números aparecen en notación científica (exponencial) en documento excel en archivo generado desde Genexus.

Este archivo es generado como una archivo con Tags HTML y grabado con extensión xls.

Que es el formato científico:
El formato Científico muestra un número en notación exponencial, sustituyendo parte del número con E+n, donde E (que significa Exponente) multiplica el número anterior por 10 a la enésima potencia. Por ejemplo, un formato científico con dos decimales muestra 12345678901 como 1.23E+10, que es 1,23 veces 10 a la décima potencia.

Respuesta:
La respuesta es que excel utiliza el formato General.

El formato General usa la notación exponencial para los números grandes (de 12 dígitos o más).

Para quitar la notación exponencial en los números grandes, puede aplicar un formato numérico diferente, como Número. Esto es en forma manual.

Otra alternativa es agregar algún caracter (apóstrofe, # o lo que sea) al tag html que contienen el número para que excel lo tome como texto.

El html quedaría así:

<Table>
<Tr>
<Td>'123456789011111</td>
<Td>'123456789011111</td>

</Tr>
</Table>


y se vería como la Imagen 1.



Por otro lado si lo que se desea mostrar son número de tarjeta de crédito, podría grabarse el número con los espacios intermedios. De esa forma excel lo entiende como caracter y lo muestra bien.

El html quedaría así:


<Table>
<Tr>
<Td>1234 5678 9011 1111</td>
<Td>1234 5678 9011 1111 </td>

</Tr>
</Table>



Y se vería como la Imagen 2.



Por lo menos con esto queda claro el motivo por el cual sucede esto, y solo resta encontrar otras alternativas de solución si esta no satisface.

Bienvenidos comentarios para resolver este tema!

View in english http://worldsupport.blogspot.com/2008/05/xlsvarios-when-opening-file-with-excel.html

lunes, 5 de mayo de 2008

Web.Varios - Como cerrar ventana del objeto llamador













Una forma es incluir el siguiente código js:

<script >
try {
var op = window.opener;
op.opener = self;
op.close();
}
catch(e)
{}
</script>

Incluirlo en un textblock o variable con Formato HTML, y asignarlo en el start del objeto web llamado.



Web.Error - Timeout en Websession con .NET

Luego de pasar un determinado tiempo las variables websession pierden su valor. Esto se debe a que caducan, por defecto tienen un timeout de 20 minutos, pero este valor puede ser configurable.

Para modificarlo editar el web.config y setear en la seccion de configuration/system.web:
<sessionState mode="InProc"
cookieless="false"
timeout="20"/>
el default es 20 minutos.

Mas informacion en http://www.microsoft.com/technet/treeview/default.asp?url=/technet/prodtechnol/windowsserver2003/proddocs/deployguide/iisdg_net_mshe.asp

En w2003Server es posible configurar el timeout por directorio virtual. para ello en las propiedades del directorio virtual, configurar tab virtualdirectory\Configuration\options\Enabled Session State

Nota: en la documentacion la seccion session state se cierra con </sessionState>, pero lo corecto es sin cerrarlo, algo como
<sessionState mode="InProc" stateConnectionString="tcpip=27.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false" timeout="20" />


Configuring ASP.NET Applications to Use the Appropriate Session

StateYou can configure ASP.NET session state persistence in the <sessionState> section of the Machine.config file for all of the ASP.NET applications on the Web server, or you can configure it in the Web.config file for each ASP.NET application. If the <sessionState> section of the Web.config file for an ASP.NET application is empty, the session state configuration for the application is inherited from the <sessionState> section of the Machine.config file.

If the <sessionState> section does not exist in the Machine.config file or the Web.config file, the following is the default session state behavior:

The session time-out value for an ASP.NET session state is 20 minutes.
The session state is maintained within all of the applications running in the same application pool.
The session state is only maintained on the local Web server (where the session state mode attribute is set to InProc), not across multiple servers in a Web farm.
In addition to the configuration settings that are specific to the mode you selected for maintaining session state, the following attributes need to be configured:

The cookieless attribute. This attribute determines whether or not the session identifier is transferred between the Web server and the client by using cookies. When the cookieless attribute is set to True, cookies are not used to convey session identifiers. When the cookieless attribute is set to False, cookies are used to convey session identifiers. The default setting is False.
The timeout attribute. This attribute specifies the number of minutes that a session is considered valid. When the time specified in the timeout attribute expires, the session is disconnected. The default time-out limit is 20 minutes.
Configure the session state settings in the <sessionState> section for the mode that you selected.

Session state is maintained in-process
To maintain session state in-process, you can either delete the <sessionState> section or configure the <sessionState> section in the Machine.config file or the Web.config file.

The following is an example of the configuration when maintaining session state in-process:

<configuration>
<system.web>
<sessionState
mode="InProc"
cookieless="true"
timeout="20"
</sessionState>
</system.web>
</configuration>
Session state is maintained out-of-process with the ASP.NET state service
To configure ASP.NET to maintain session state with the ASP.NET state service, modify the following attributes in addition to the mode attribute:

The stateConnectionString attribute. This attribute specifies the IP address and port number where the ASP.NET state service is running. The format for this attribute is "tcpip=server:port", where server is the IP address or host name of the server, and port is the TCP port number that the ASP.NET state service is configured to use. The default port number is 42424.
The stateNetworkTimeout attribute. This optional attribute specifies the length of time, in seconds, that the TCP/IP network connection between the Web server and the server running the ASP.NET state service can be idle before the session is abandoned. The default time-out limit is 10 seconds.
The following is an example of the configuration when maintaining session state out-of-process with the ASP.NET state service:

<configuration>
<system.web>
<sessionState
mode="StateServer"
cookieless="true"
timeout="20"
stateConnectionString="tcpip=127.0.0.1:42424"
stateNetworkTimeout=”10”
</sessionState>
</system.web>
</configuration>
Session state is maintained out-of-process with a computer running Microsoft SQL Server
To configure ASP.NET to maintain session state with a computer running SQL Server, modify the sqlConnectionString attribute in addition to the mode attribute. The sqlConnectionString attribute specifies the ODBC data connection string used for establishing the connection to the computer running SQL Server.

The format for the sqlConnectionString attribute is "data source=odbc_connection_string", where odbc_connection_string is any valid ODBC data connection string that is valid for the computer running SQL Server. For more information about creating ODBC data connection strings for Microsoft SQL Server, see the MSDN Online link on the Web Resources page at http://www.microsoft.com/windows/reskits/webresources, and then search for "How to allocate handles and connect to SQL Server (ODBC)".

The following is an example of the configuration when maintaining session state out-of-process with a computer running SQL Server:

<configuration>
<system.web>
<sessionState
mode="SQLServer"
cookieless="true"
timeout="20"
sqlConnectionString="data source=localhost;
Integrated Security=SSPI;
Initial Catalog=northwind"
</sessionState>
</system.web>
</configuration>


 

Web.Error - SQL Server does not exist or access denied.

Se puede dar el error mencionado al querer acceder a una base de datos SQL Server desde una aplicación Web .NET con ADO.NET como método de conexión. Generalmente este problema se da al ejecutar una aplicación Web, no con las aplicaciones Win. Además se da al querer ejecutar la aplicación Web, no con la reorganización, porque aunque la aplicación sea Web, la reorganización es una aplicación Win.


Si se está en las condiciones antes mencionadas, a continuación se mencionan varios puntos para verificar, y algunas soluciones.

**** En las DBMS Options de GX: ****
- En la propiedad Server Name usar la IP en lugar de usar el nombre del servidor.
- Chequear que el nombre de la base de datos haya quedado correctamente escrito en Database Name
- En el archivo web.config agregar el impersonate y configurar el usuario de red junto con el dominio, esto es, dentro de la sección <system.web> del web.config agregar la siguiente línea:
<identity impersonate="true" username="dominio\usuario" password="password"/>

- Si el SQL Server está en distinta máquina que el servidor Web, entonces se puede verificar esto: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q315159
Entonces para eso, se puede cambiar el web.config de la siguiente manera:
Cambiar la línea
<add key="Connection-Default-Opts" value=";Integrated Security=no;" /> por
<add key="Connection-Default-Opts" value=";Integrated Security=no;Network Library =dbmssocn" />

Esto hace que se comunique via TCP/IP con la BD. Aunque se puede configurar desde la opción SQL Server / Client Network Utility / Alias agregándolo en el web.config también tendría que funcionar.

**** En el Enterprise Manager, donde está dada de alta la instancia del servidor SQL Server remoto, verificar los siguientes puntos: ****
- Botón derecho sobre el nombre de la instancia / Properties / Security / Ver si en Authentication está seleccionado: SQL Server and Windows
- Por defecto si no se especifica nada en las "Additional connection string attributes" intenta conectarse al puerto 1433, ver si está configurado ese puerto, Properties de la instancia / General / Network configuration / Marcar TCP/IP y dentro de los Enabled protocols / Properties debe decir 1433
- La instancia debe tener el mismo nombre que la máquina donde está el SQL Server, es decir la instancia que se ve en el Enterprise Manager no puede tener distinto nombre que la máquina remota donde está instalado el SQL Server.

Si se está haciendo una conexión a un SQL Server pero a otro puerto que no sea el default de SQL Server (1433) se debe especificar en las DBMS OPTIONS en la propiedad "Server Name": SERVER,PORT y en la propiedad:
"Additional connection string attributes" no se debe especificar nada.

Puede ser que haya un firewall y no se tenga el puerto definido en la instancia habilitado, para saber esto se puede hacer un telnet al servidor indicando el puerto, por ejemplo desde una ventana de comandos ejecutar:
telnet <nombre de servidor> 1433
si no da ningún mensaje se accede bien al servidor, si se da un error es porque no está habilitado el puerto 1433, en ese caso hay que habilitarlo.

Hay más puntos para verificar en: http://support.microsoft.com/?id=328306

**** Para chequear que la instancia del SQL Server está correcta, se pueden ejecutar las siguientes sentencias desde el Query Analizer (esto puede estar mal si se renombró en algún momento la instancia del SQL Server): ****
1 - Check sp_helperserver at SQL Query Analyzer: it should return one row with id =0 and name= instance name. Check 'select @@servername' at SQL Query Analyzer: if it returns the same instance name, go to step B; otherwise:
2 - drop the wrong instance name and add the correct name:
a - sp_dropserver 'old_name', 'droplogins'
b - go
c - sp_addserver 'new_name', 'local'
d - go
3 - Restart SQL server service and check 'select @@servername' again.

Más info en: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q303774

**** En el Directorio Virtual: ****
En este caso hay 3 máquinas involucradas, la del cliente, la del servidor de base de datos y la del servidor Web. Cuando se usa la autenticación por defecto en el directorio virtual, las credenciales para autenticar sirven sólo en una conexión, o sea, no se delegan (saltan sólo una vez). El problema es que para conectarse al servidor web se autentica con un token que luego no sale el de la maquina que tiene el servidor de base de datos, sino que sale el token del usuario con el que se logueó el ASPNET.
Si funciona si el servidor web está en la misma máquina que el cliente.
Una solución es usar un mecanismo de autenticación que soporte delegación, puede ser basic o kerberos. Lo que hay que tener en cuenta en estos casos es que el usuario y password van “clear text”.

Para esto seguir los siguientes pasos:
- Cambiar en el IIS, en el directorio virtual, que se conecte con Basic Authentication, ahi se van a habilitar 2 campos, para agregar el dominio y el realm. También hay que deshabilitar el Anonymous Access (primer check). Esto se configura en el directorio virtual / botón derecho / propiedades / Tab directory security / botón Edit / marcar el check basic authentication y desmarcar el Anonymous Access.
Cuando se ejecute el web panel va a aparecer una ventana para ingresar el usuario y password, habría que usar los mismo que se usan para conectarse a la red.
También en este caso se tiene que configurar el impersonate en el web.config con el usuario de red <dominio>\usuario y password. Luego de esto reiniciar el IIS.

Documento que explica como configurar esto: http://support.microsoft.com/default.aspx?scid=kb;en-us;810572

La explicación anterior también puede aplicarse cuando hay un firewall instalado en el servidor de base de datos y hace que no llegue el usuario a la base de datos, en ese caso también se pueden seguir los pasos mencionados arriba y ver si el usuario llega correctamente.

**** Para saber que usuario está llegando a la base de datos, seguir los siguiente pasos: ****
- En el Enterprise Manager, donde está definida la instancia del servidor de base de datos, seleccionar la opción: Management/Current Activity/Process Info. Ahi aparecen todos los procesos que estás ejecutando y que usuario se utiliza para la conexión de cada base de datos. Seguramente el proceso que tenga el número mayor es el que se está usando para esta conexión. Ver que usuario que aparece ahí.

miércoles, 23 de abril de 2008

Sql.Varios - Cambiar owner de tablas BD

Para cambiar el owner de las tablas de la BD realizar lo siguiente:

1) Ejecutar la siguiente sentencia desde el Query Analizer de SQLServer
conectado a la base restaurada: select 'exec sp_changeobjectowner ''pep.' +
name + ''', ''dbo''' + nchar(10) + 'GO' from sysobjects where xtype = 'U'
Esto genera las distintas sentencias para cambiarle el owner a todas las tablas
de la base de datos.

2) Copiar el resultado de la sentencia anterior (son sentencias Sql) y pegarlo en el Query Analizer y ejecutar.

Listo.

Web.Varios - Embeber archivo Flash en WebPanel

Para introducir un componente flash en un Web Panel: 

a) 
definir una variable de tipo Long Var Char de tamaño suficiente para almacenar el texto que se describe a continuación.
b) 
Dicha variable debe estar en el form y tener la propiedad Format con el valor HTML.

Para Internet Explorer:

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0
,0" ID=menu WIDTH=150 HEIGHT=409> <PARAM NAME=movie
VALUE="URLPELICULAFLASH"><PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor
VALUE=#000000></OBJECT>


Fuente: ayuda GX.


Otro ejemplo


<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0" width="500" height="350">
<param name=movie value="archivo.swf">
<param name=quality value=high>
<embed src="archivo.swf" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="500" height="350">
</embed>
</object>


Para ver la explicación ir a http://www.desarrolloweb.com/articulos/codigo-html-mostrar-pelicula-flash.html


 

Web.Varios - Redireccionar de un webpanel a otro webpanel o url (Splash)

Se desea desplegar un webpanel y después de cierto tiempo ejecutar un redirect a otro web panel o a cualquier otra URL.

Agregar el siguiente codigo en el webpanel:

Event Start
tb.Caption = 'Redireccionando en 1o segundos.'
Form.MetaEquiv.AddItem("Refresh", "10; URL=http://www.google.com")
EndEvent // Start

Fuente: ayuda de Gx.

Web.Varios - Tags en el Web.Config

1) Identity impersonate

Esto permite que los objetos web corran con el usuario que el IIS le pasa a la plataforma .net, de lo contrario, los procesos corren con la cuenta “machine” (usuario ASP.NET).


Se especifica dentro de la sección System.Web con el tag
<identity impersonate="true" />


Consideraciones:
-  Reportes PDF: En caso de tener identity impersonate="true" el usuario que ejecuta en el IIS de la página debe tener derecho de escritura sobre el "C:\Documents and Settings\<nombre del webserver>\<ASPNET\Local Settings\Temp" con IIS 5 o superior. Si se esta con IIS 6.0 o superior (windows 2003) se deben dar permisos sobre el directorio C:\Windows\Temp\...\iTextdotNET. (pero el mismo es configurable) .
De lo contrario da un error Access to the path "C:\DOCUME~1\ARMIN-NB\ASPNET\LOCALS~1\Temp\e8ebd99f-17de-4447-83f8-35769f67bd23\iTextdotNET”


2) Http Execution Timeout
Existe una forma de configurar el timeout de los requests en aplicaciones .Net (tanto aplicaciones Web como aplicaciones tres capas hosteadas en el IIS)  

En aplicaciones Web si el request de una página demora más de 90 segundos se enviará un mensaje de Request Timeout al browser.


Para que no den timeout se deberá crear en la seccion System.Web del archivo web.config lo siguiente: 

<httpRuntime  executionTimeout="<segs>"/>


3) Personalizar paginas de error.


Ver http://mundosupport.blogspot.com/2008/02/webvarios-pginas-de-error.html


 


 

martes, 22 de abril de 2008

Web.PDF - Generar reporte PDF.

Para generar un reporte como PDF


a) utilizar la regla 'output_file' de la siguiente forma: output_file("test.pdf", "pdf");


b) setear la propiedad CALL PROTOCOL = http.


c) el reporte o procedimiento debe ser main.


Recuerde tener instalado el Acrobat en el cliente.


En el entorno de desarrollo verificar que se cumple con los requerimientos de acuerdo a la versión de Gx, generador  y upgrades instalados generador. (ejemplo: tener instalador el jsharp).

lunes, 14 de abril de 2008

Web.Varios - Abrir reporte (PDF) en una nueva ventana

Se desea abrir un reporte PDF o un WebPanel en una nueva ventana del explorador con la posibilidad de pasarle parámetros.


Para ello:


1) En el webpanel llamador


Event Txt_Btn_Confirmar.Click
url = link(RReportePdf1)
call(HOpen,&amp;url)
EndEvent


2) En un nuevo Web Panel


Crear un web panel de nombre Open que reciba por parámetro una &amp;url, tenga un
text block de nombre AAAA con la propiedad format = HTML y en el evento start
programe lo siguiente:


Event Start
&WindowsId = Random() * 100000
AAAA.caption = '<script language="JavaScript">window.open("' + trim(&url) +
'","' + Trim(Str(&WindowsId)) +
'","target=_top,top=10,left=10,width=400,height=300 ,scrollbars=yes,menubar=no,toolbar=no,resizable=yes,directories=no");'
+ 'history.back();</script>
'
EndEvent // Start

sábado, 12 de abril de 2008

Web.VB - Puesta en producción de objetos Web VB generados como WebClasses

Tuvimos que realizar la puesta en producción de una aplicación ASP realizada con Genexus 7.5 y generador VB en un servidor con sistema operativo Windows 2003 Server Standard Edition e Internet Information Server (IIS 6.0) .

Estos son algunos de los items que aprendimos de la ayuda de GX y son verdaremente importantes para lograr la puesta en producción:

1) Compilación
Compilar la aplicación desde VB (no desde Genexus).

2) Setup
Armar el programa de Setup mediante Genexus Setup Wizard e instalar en el servidor desde este.

3) Configuración del DCOMCNFG

El diálogo de configuración de los permisos de DCOM en Windows XP o 2003 no es igual
que en el resto de los sistemas operativos.

A continuación se detallan los pasos a seguir:

- Ejecutar DCOMCNFG desde el Run de Windows
- Abrir Component Services/Computers/My Computer y darle boton derecho a My Computer y Properties.
- Ahí están las opciones que aparecían en el DCOMCNFG viejo. En particular hay que ir a COM Security y allí en la sección Access Permissions darle al botón Edit Default.
Los usuarios que deben tener permisos deben ser: Everyone (esto habilita permisos a todo el mundo para largar procesos COM para todas las aplicaciones) y el usuario anónimo (IUSR_) que es el que ejecuta los Web Panels.

Alternativamente se puede hacer algo más seguro:

- Ejecutar un archivo de extensión .reg con la siguiente información:

REGEDIT4

[HKEY_CLASSES_ROOT\CLSID\{70F214BA-94E2-4bdf-8F30-32CB4A905E4D}] @="VB ASP Debugging"

[HKEY_CLASSES_ROOT\CLSID\{70F214BA-94E2-4bdf-8F30-32CB4A905E4D}\LocalServer32] @="vb6.exe" [HKEY_CLASSES_ROOT\AppID\vb6.exe] "AppId"="{70F214BA-94E2-4bdf-8F30-32CB4A905E4D}"

- Resetear la máquina y después correr dcomcnfg.
- Ir a Component Services\Computers\My Computer\DCOM Config y ahí buscar "VB ASP Debugging" y darle botón derecho/Properties. - Ahí ir a Security y en la parte de Launch Permissions elegir Cutomize y Edit y agregar a Everyone.

Nota: Es necesario configurar el DCOM porque si no los objetos web generados con visual basic presentan el error Access is denied

4) Controlar que se tengan las siguientes dlls:

MSVBVM60.DLL
MSWCRUN.DLL

Si no las tenés se pueden copiar a mano al windows/system (o similar según el sistema operativo) y registrarlas o incliuirlas en el Setup de instalación de la app.

5) Configuración IIS

Cuando se trabaja con aplicaciones Web VB, y se utiliza un servidor Windows 2003 para poner en producción las aplicaciones, se tiene que tener en cuenta que algunas configuraciones varían con respecto a los demás sistemas operativos.

Configuración del Application Protection En Windows 2003
la configuración del Application Protection, que hasta el momento se configuraba en cada directorio virtual, seleccionando uno de los valores: Low (IIS Process) Medium (Pooled) High (Isolated) en Windows 2003 se debe configurar en:

- Presionar boton derecho del mouse sobre la opcion Web Sites (Sitios Web)
- Seleccionar el Tab Service (Servicio)
- La primer opcion de ese Tab es Isolation Mode
- Marcar el Check Run WWW service in IIS 5.0 Isolation Mode (Ejecutar el Servicio WWW en el modo aislado de IIS 5.0).

Errores que se pueden dar al ejecutar la aplicación

- HTTP Error 404- File or Directory not found Esto es porque por defecto las aplicaciones Web no vienen habilitadas en el IIS de Windows 2003 Server, para poder habilitar las aplicaciones seguir los pasos que se mencionan en el siguiente artículo de MS: http://support.microsoft.com/default.aspx?scid=kb;en-us;315122

6) Problemas al ejecutar Web Panels VB usando usuario anonimo

Por más que el usuario anónimo tenga todos los permisos necesarios para ejecutar los Web Panels, se dan estos errores.
Es un error que los Web Panels no funcionen con el usuario anónimo definido por el IIS, pero para solucionar el problema se tienen la siguiente SOLUCION ALTERNATIVA:

Cambiar el usuario que ejecuta los Web Panels por otro usuario con todos los permisos necesarios para poder ejecutar Web Panels, pero que no sea el anónimo. De esa forma todo funciona bien y los errores arriba mencionados no se dan.

7) Importante

Al hacer cambios en el IIS, en los permisos de usuario o en alguna dll o .asp y si el problema persiste, reiniciar el servidor.

Es todo por ahora.

martes, 4 de marzo de 2008

Genexus.Capacitación - Ejercicios, preguntas y prácticas para ejercitarse. Entrega V

Práctica Nº 5

1) Crear un procedure que reemplace el código de localidad del archivo de
clientes por el valor 2, siempre y cuando el código de cliente sea > 10.
2) Crear un WP que haga lo mismo que el WP de clientes, sin poner atributos
en el subfile.
3) El mismo WP, hacer que la carga de los registros se haga primero en una
colección y de ahí pase a las variables.
4) Crear un WP que simule el comportamiento de la Trn de clientes.

Genexus.Capacitación - Ejercicios, preguntas y prácticas para ejercitarse. Entrega IV

Práctica Nº 4

Llamados entre objetos.
- Explicar los conceptos de pasaje de parámetros por valor y por referencia.
- En el WP, reemplazar el llamado a la transacción por varios llamados que diferencien el modo (altas, bajas, modificaciones, display).
- En el WP, en el llamado al reporte agregar los parámetros desde…hasta. Asegurarse de que el reporte considere dichos parámetros.
- En el WP agregar el llamado a un reporte que muestre una ficha de un cliente determinado. Dicho reporte debe salir únicamente por pantalla.
- Explicar conceptos de tabla base y tabla extendida.
- En el WP agregar un evento que llame a un reporte que se ocupe de exportar el contenido de la tabla extendida a Excel.
- Agregar otro botón que se ocupe de importar el contenido de una planilla Excel.

Genexus.Capacitación - Ejercicios, preguntas y prácticas para ejercitarse. Entrega III

Práctica Nº 3

Reporte.
- Crear un reporte que muestre los registros de la tabla con sus relaciones.
- Definir header y footer.
- En el WP agregar un evento que llame al reporte, sin parámetros.
- Implementar la posibilidad de salida por pantalla, impresora o rtf, a elección del usuario.
- Explicar la diferencia entre un report y un procedure.
- Explicar los conceptos de:
a) Variables
b) Atributos
c) Dominios
d) SDT
e) Basar en

Genexus.Capacitación - Ejercicios, preguntas y prácticas para ejercitarse. Entrega II

Práctica Nº 2

Creación del modelo de prototipo.
1) Crear el modelo de prototipo.
2) Probar distintos valores de las preferencias de la sección User Interface.
3) Explicar y dar ejemplos de uso de las siguientes funciones:
Null()
Nullvalue()

Work Panel.
0) Explicar las diferencias entre un work panel y una transacción.
1) Crear un WP que muestre, en una grilla, los datos de la tabla con sus relaciones.
2) Incluír un filtro desde…hasta código de cliente.
3) En el WP agregar un evento que llame a la transacción, sin parámetros de ninguna clase.
4) Asegurarse de que al volver de la misma la grilla refleje los cambios que se hubieran producido en la tabla.
5) Incluír algún jpg (botón/form) y algún shortcut (botón).
6) Utilizar la regla Color, condicionando el color según el valor de algún atributo.
7) En el WP mostrar fecha y hora.

Genexus.Capacitación - Ejercicios, preguntas y prácticas para ejercitarse. Entrega I

Aquí presentamos la primera entrega de una guía de ejercicios prácticos y teóricos. Estos ejercicios pueden ser utilizados para apoyar el aprendizaje de aquellos que se inician con Genexus.

Práctica Nº 1
Creación de base de conocimiento.
1) Crear una base de conocimiento nueva.
2) Determinar un valor adecuado para cada una de las preferencias del modelo en Diseño.
3) Explicar las diferencias entre los siguientes conceptos:
a) Base de conocimientos
b) Modelo
c) Diseño
d) Prototipo
e) Producción

Transacción.
1) Dada el siguiente conjunto de datos, definir la/s tablas adecuada/s para contenerlo:
a) Nombre del cliente.
b) Domicilio (calle, número, piso, depto u oficina, localidad, código postal, provincia).
c) Teléfonos del cliente.
d) Contacto.
e) Posición frente al IVA
f) C.U.I.T (carácter de 13).
g) Observaciones.

2) Aplicar validaciones para que los datos principales no queden vacíos.
3) Agregar un evento ‘Detalles’ que, para cada atributo de la transacción, explique brevemente al usuario el contenido a ingresar.
4) Agregar un evento ‘Datos curiosos’, donde se informe lo siguiente:
a) Cartel: ‘La razón social del cliente nnn es Xxxxxx.’
b) Cartel: ‘Los caracteres 11 a 20 del domicilio son xxxxxxxxxx.’
c) Cartel: ‘El doble del número de CUIT es nnnnnnnnnnn.’
d) Cartel: ‘La razón social tiene nn caracteres.’
e) Cartel: ‘El código de cliente es 0000NNNN.’ (relleno con ceros a la izquierda).

Web.Varios - Embeber editor HTML en WebObjects Entrega 2

Se desea abrir un reporte PDF o un WebPanel en una nueva ventana del explorador con la posibilidad de pasarle parámetros.


Para ello:


1) En el webpanel llamador


Event Txt_Btn_Confirmar.Click
   &amp;url = link(RReportePdf1)
   call(HOpen,&amp;url)
EndEvent


2) En un nuevo Web Panel


Crear un web panel de nombre Open que reciba por parámetro una &amp;url, tenga un text block de nombre AAAA con la propiedad format = HTML y en el evento start programe lo siguiente:


Event Start
  WindowsId = Random() * 100000
  AAAA.caption = '<script language="JavaScript">window.open("' + trim(&url) +
    '","' + Trim(Str(&WindowsId)) +
  '","target=_top,top=10,left=10,width=400,height=300    ,scrollbars=yes,menubar=no,toolbar=no,resizable=yes,directories=no");'
    + 'history.back();</script>
  '
EndEvent // Start

lunes, 11 de febrero de 2008

Web.Net - Puesta en producción de sitio realizado con generador net (c#, genexus 9.0)

Para realizar la puesta en producción de los objetos desarrollados con Genexus 9.0 y generador Net c# en un IIS es necesario copiar al servidor:

- El directorio bin del modelo (donde se encuentran las dlls de cada objeto)

- Los java script ( *.js)

- Las imágenes, htmls, *.css y cualquier contenido estático deseado

- El archivo Web.config

Más información y requisitos del servidor en el Manual del generador Net Genexus 9.0 http://www.gxtechnical.com/gxdlsp/pub/home.htm?genexus/csharp/docum/manuals/9.0/manualnet90.htm

sábado, 9 de febrero de 2008

Web.Varios - Embeber editor HTML en WebObjects Entrega 1

En entorno web, algo que aumenta la potencia de nuestros web objects es ofrecerle al usuario la posibilidad de ingresar texto enriquecido como lo haría trabajando con un editor de texto.

El tema en cuestión es como llevarlo a la práctica con Genexus.

Para lograr esto, se puede debe incorporar a los webpanels y web transactions un editor html que permitirá dar formato, colores, insertar imágenes, tablas, vinetas y otras.

Hasta el momento encontré dos que pueden ser incorporados libremente a nuestros proyectos:

1) FCK Editor
2) TinyMCE

Un ejemplo de como llevarlo a adelante usando el FCK Editor puede encontrarse en el Wiki de Genexus: http://wiki.gxtechnical.com/commwiki/servlet/hwiki?Incluir+FCKEditor+en+tus+web+objects



Para utilizar la segunda alternativa (TinyMCE) estuve haciendo unas pruebas y voy a ingresar una próxima entrada con los comentarios que surgan y un ejemplo de implementación.

viernes, 8 de febrero de 2008

Herramientas.Almacenamiento - Almacenamiento de Archivos Online Gratis

Existen varias alternativas que ofrecen almacenamiento gratis online.

Siempre es útil tener alguna disponible para realizar backup o tener al alcance archivos.

Esta se llama XDrive (es de AOL) y ofrece 5 GB.

http://www.xdrive.com/

Para verla traducida al castellano:

http://www.google.es/translate?u=http%3A%2F%2Fwww.xdrive.com%2Fstorage.jsp&langpair=en%7Ces&hl=es&ie=UTF8

Herramientas.Oficina - Herramienta online que permite crear, compartir y editar hojas de cálculo, documentos de texto y presentaciones

Buscando material para un desarrollo encontré esta herramienta de Google muy interesante que se llama Google Docs => http://www.google.com/google-d-s/intl/es/tour1.html

Básicamento consiste en una herramienta online que permite trabajar con (crear, modificar, compartir) planillas de cálculo, documentos de texto y presentaciones.

Es gratuita y para utilizarla solo necesitás una cuenta google.

Para mas info revisá el link.

En fin, a mi me ayudo.

jueves, 7 de febrero de 2008

VisualBasic.FTP - Aplicación Visual Basic para trabajar con servidor FTP

Una alternativa para trabajar y comunicarse con un servidor FTP que permite realizar consultas, subidas y descargas es basarse en el siguiente ejemplo que se puede encontrar en:

http://support.microsoft.com/kb/195653/es

Es posible integrar y/o aprovechar en un objeto Genexus el ejemplo logrando una funcionalidad interesante.

En la url mencionada podrás encontrar un archivo llamado Vbsmpftp.exe que contiene los fuentes visual basic 6.

Entre otros el ejemplo muestra:
• Cómo enumerar un directorio y obtener info del archivo.
• Cómo cargar archivos grandese e informar progreso de transferencia.
• Cómo descargar archivos.


lunes, 4 de febrero de 2008

NetMobile.Varios - Ejecutar Beep function (Symbol MC3000) en Pocket PC

Ejecutar Beep function (Symbol MC3000) en Pocket PC

Para ejecutar un sonido Beep en una pocket PC (probado en una Symbol MC3000) utilizar el siguiente código:

(Generador NetMobile, Genexus 9.0.)

Event Enter
do 'Beep'
EndEvent // Enter

sub 'Beep'
csharp Beep();
csharp }

csharp static Symbol.Audio.Controller MyAudioController;

csharp public static void Beep(){
csharp if (MyAudioController==null){
csharp
csharp Symbol.Audio.Device
MyDevice=(Symbol.Audio.Device)Symbol.StandardForms.SelectDevice.Select
Symbol.Audio.Controller.Title,Symbol.Audio.Device.AvailableDevices);
csharp if(MyDevice
==null){System.Windows.Forms.MessageBox.Show("No Device Selected",
"SelectDevice"); return;}
csharp else{
csharp
if(MyDevice.AudioType==Symbol.Audio.AudioType.StandardAudio)
csharp MyAudioController = new
Symbol.Audio.StandardAudio(MyDevice);
csharp else if
MyDevice.AudioType==Symbol.Audio.AudioType.SimulatedAudio)
csharp MyAudioController = new
Symbol.Audio.SimulatedAudio(MyDevice);
csharp else{ System.Windows.Forms.MessageBox.Show("Unknown
Device Type"); return;}
csharp }
csharp }
csharp MyAudioController.PlayAudio(1500,2670);
csharp MyAudioController.Dispose();
csharp
endsub

Setup model properties: Compiler Flags = /r:bin\Symbol.Audio.dll /r:bin\Symbol.dll /r:bin\Symbol.StandardForms.dll
Copy the Dlls in bin directory.

Agregar las Dlls (librerías symbol) a "Additional Files" cuando se hace el deploy presionando F5.

Se deben obtener los archivos:
Symbol.StandardForms.dll
Symbol.Audio.dll
sonido.cs

Solicitarlos por email a mundosupport@gmail.com

domingo, 3 de febrero de 2008

Genexus.Inicial - Material de lectura inicial

En la siguiente url encontrás material de lectura que te permitirá comenzar a entender Genexus y su filosofía:

http://www.genexus.com/portal/hgxpp001.aspx?2,32,660,O,S,0,MNU;E;131;12;MNU;,

Web.Varios - Páginas de error personalizadas en web

Para configurar páginas de error personalizadas en un sitio web .Net agregar las siguientes entradas en la sección system.web en el web.config:



Puede definirse una página de error para cada código.

sábado, 2 de febrero de 2008

Web.Varios - Salida XLS Mediante HTML y HTTPResponse


Este código genera una salida a excel en web con tags HTML sin necesidad de escribir en disco.

Insertar en un reporte Main con propiedad Call Protocol en HTTP lo siguiente:




Web.Varios - Descargar archivos desde la página

Para descargar archivos que se encuentran en el servidor desde una página web hacer lo siguiente:

Crear un Report Main con la propiedad Call Protocol en HTTP, que tenga la siguiente estructura:
a) Rules
Parm( &ServerPath, &NombreArchivo );
// &ServerPath es la ruta absoluta en el servidor del archivo a descargar.
// NombreArchivo es el nombre que el usuario verá en la ventana de descarga y le será sugerido para grabar el archivo en disco.

b) Source
&Httpresponse.addheader('Content-Type','application/octet-stream')

&Httpresponse.addheader('Content-Disposition','attachment; filename=' + Trim ( &NombreArchivo ))

&Httpresponse.addfile(&ServerPath)

Web.Varios - Comprimir Archivos

Para comprir un archivo:

1) insertar el siguiente código en un RPT:

&cmd= '7z.exe a -tzip ' + &NombreArchivoZIPDestino + ' ' + &NombreArchivoOrigen
&ret=shell(&cmd,0)

2) Copiar el archivo 7z.exe al directorio raíz del sitio.

Puede encontrar el 7z en www.7-zip.org

Web.Varios - Archivo Default para sitio Web

Esta código, hace que la página se muestre dentro de un frame dejando fija la url que se visualiza en la barra de direcciones del explorador.

Para generar el archivo, abrir el notepad y copiar el siguiente código modificando según el nombre de nuestro sitio, la url, y la página de inicio.

Luego grabarlo con el nombre default.htm






Bienvenidos a Mundo Support GX


Te damos la bienvenida a Mundo Support GX!!!!!
Como usuario visitante podrás consultar libremente los artículos y comentarios publicados; además de escribir comentarios que aporten y enriquezcan a los artículos.


Si deseas redactar consultas te invitamos a que nos escribas a mundosupport@gmail.com y recibirás un correo invitándote a ser redactor contribuyente.


Gracias y esperamos contribuir en tu camino por el mundo Genexus y la programación.



Que opinás del material expuesto en el Blog?