miércoles, 5 de diciembre de 2012

REP-0065 + REP-0200

En una instalación en Forms 6 en cliente / servidor al ejecutar un informe, en a veces se producía el siguiente error:

REP-0065: Error del Sistema de Memoria Virtual
REP-0200: No se puede asignar suficiente memoria. cavaa 16



El problema residía en dos marcos repetitivos anidados y que tenían el mismo grupo de origen, con lo que según los datos que sacase el informe entraba en un bucle recursivo que hacía romper el informe por falta de memoria.

miércoles, 26 de septiembre de 2012

Instalación de Forms 11 en Windows con tarjeta gráfica NVIDIA

En la última instalación que hice sobre un Windows de 64 bits se quedaba el proceso colgado creando el dominio, después de muchas pruebas encontré que el problema era que el driver de la tarjeta gráfica  NVIDIA  había metido en el PATH del sistema operativo la ruta "C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;" al quitar esa ruta y volver a instalar Forms 11 el proceso se completó correctamente.

domingo, 17 de junio de 2012

Instalación de Forms 11 R2 en Windows 8 de 64 bits

En esta entrada voy a explicar como instalar un entorno de desarrollo y de pruebas de Forms 11 sobre un Windows 8 de 64bits, los pasos son idénticos a la instalación sobre Windows 7 de 64 bits.

Mi intención es hacer una guía paso a paso sin entrar en demasiados detalles en cada uno de los pasos de la instalación.

Antes de nada tenemos que tener instalado el JDK de 64 bits, para verificar que lo tenemos correctamente configurado abrimos una consola "CMD" y ejecutamos "java -versión", nos debería de salir un mensaje similar a este:



En primer lugar hay que instalar Weblogic 10.3, que se puede descargar del OTN de la siguiente dirección (simplemente hay que tener una cuenta de OTN, que se puede obtener sencillamente y totalmente gratuita): http://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-main-097127.html. La versión que se necesita para hacer la instalación en 64 bits es la genérica, es decir, el archivo, wls1036_generic.jar.

Para arrancar la instalación, desde una consola de comandos, una vez que nos hemos situado en la carpeta en donde se encuentra el archivo wls1036_generic.jar ejecutamos: java -jar wls1036_generic.jar


Aparecerá la siguiente pantalla de bienvenida


Pulsamos "Siguiente" y aparecerá la pantalla para indicar el directorio raíz de la instalación. Propone C:\Oracle\Middledware, particularmente me parece una buena ubicación para la instalación.



Una vez pulsamos "Siguiente", nos aparece la pantalla para solicitar la cuenta de Oracle Support para obtener las actualizaciones de seguridad, esta pantalla va aparecer repetidamente durante el proceso de instalación. Para un equipo de desarrollo y pruebas no lo veo necesario, pero si fuese una instalación en un entorno de producción sería muy recomendable cubrirlos.



Luego nos pregunta el tipo de instalación, para el caso concreto de la instalación para albergar Forms 11, con la instalación Típica va perfectamente.


En la siguiente pantalla se solicita que se indique el directorio de la máquina virtual de Java que queremos usar:



Es importante seleccionar el directorio donde está el JDK de 64bits, normalmente la ruta será similar a : C:\Program Files\Java\jdk1.6.0_33


A continuación se nos solicita que concretemos las rutas para "WebLogic Server" y "Oracle Coherence", lo normal es dejar las rutas que nos propone por defecto:



Antes de comenzar la instalación se muestra un resumen de lo que va a ser instalado:



Una vez terminada la instalación muestra una pantalla indicando que la instalación ha finalizado. En esta pantalla desactivamos la check "Ejecutar Quickstart" y pulsamos "Listo".



El primer paso de la instalación ya está realizado, ahora sobre la instalación de Weblogic que se acaba de realizar, hay que instalar Forms 11R2. La versión de Forms11R2 también se puede obtener del OTN, en la siguiente dirección: http://www.oracle.com/technetwork/developer-tools/forms/downloads/index.html, el archivo que se necesita es el de la versión de 64 bits "ofm_frmrpts_win_11.1.2.0.0_64_disk1_1of1.zip", una vez descomprimido nos generará 3 carpetas (Disk1, Disk2 y Disk3), en la carpeta Disk1 ejecutamos el archivo "setup.exe" y aparecerá la pantalla de bienvenida en la que pulsamos "Siguiente":


Nos vuelve a solicitar los datos para las actualizaciones de Software, al igual que hicimos al instalar Weblogic las omitimos y pulsamos "Siguiente".


A continuación nos indica si queremos únicamente instalar el software o aparte de instalar el software queremos realizar la configuración. Yo soy partidario de instalar únicamente el software y luego arrancar manualmente el proceso de configuración (en caso de producirse algún error lo tenemos más localizado, si es en la instalación del software o es un problema en la configuración).


En la siguiente pantalla hace una comprobación de requisitos, al estar haciendo la instalación en Windows 8, que no es un sistema operativo certificado da un error, pero podemos seguir la instalación pulsando el botón "Continuar" y luego en "Siguiente".

A continuación nos pide la ubicación para la instalación de los programas de Forms, en este caso también podemos dejar los valores que propone por defecto:



Otra vez nos solicita los datos de Oracle Support para las actualizaciones de seguridad, también las omitimos:


Por último muestra una pantalla con el resumen de la instalación que se va a realizar:


Pulsamos el botón de "Instalar", la instalación comienza mostrando una pantalla con el progreso, una vez finalizado pulsamos el botón "Siguiente".


Al final nos muestra la pantalla informando de que la instalación ha terminado:


Una vez instalado el software de Forms11R2 hay que proceder a realizar la configuración del dominio de Weblogic. Para ello ejecutamos el archivo "config.bat" que se encontrará en la ruta "C:\Oracle\Middleware\Oracle_FRHome1\bin". Una vez ejecutado aparecerá la siguiente pantalla en la que pulsamos "Siguiente"


En la siguiente pantalla se nos pregunta si la instalación la queremos hacer para despliegue de aplicación o para desarrollo. La mejor opción es indicar que es para despliegue ya que vamos a disponer de igual manera las herramientas de desarrollo, pero además podremos ejecutarlas.


Por última vez nos pregunta sobre introducir los datos de Oracle Support que volvemos a omitir.



En la siguiente pantalla nos solicita la ubicación del directorio del servidor de Weblogic y en donde queremos instalar la Instancia de Oracle, dejamos los valores que propone por defecto:


A continuación crearemos un dominio en el servidor de Weblogic, en usuario dejamos "weblogic", introducimos una contraseña y un nombre para el Dominio, en este caso le he llamado LIBRA, pero se le puede dar el nombre que quiera cada uno.


Luego nos pide los componentes a configurar. Para disponer de un entorno de desarrollo activaremos todas las checks:



En las siguientes dos pantallas dejamos los valores por defecto:





Al pulsar siguiente nos solicita el "Almacén de identidades", desmarcamos la check "Usar Almacén de Identidades de Aplicación".


Pulsamos "Siguiente" y nos mostrará un resumen de la configuración que va a realizarse:




Al pulsar "Siguiente" comienza el proceso de configuración:



En la siguiente pantalla ya indica que la configuración ha finalizado:



Para comprobar el funcionamiento de forms abrimos la siguiente dirección en el navegador: http://nombreequipo:9001/forms/frmservlet



Para comprobar el funcionamiento de reports abrimos la siguiente dirección en el navegador: http://nombreequipo:9002/reports/rwservlet


Para entrar en la consola de Weblogic accedemos mediante la dirección: http://localhost:7001/console con el usuario weblogic y la contraseña indicada durante la instalación.

Al terminar la instalación estas páginas funcionan correctamente ya que durante el proceso de instalación se arrancan todos los servicios, pero una vez reiniciamos el ordenador debemos de arrancar manualmente, tanto Weblogic, Forms y Reports.

Para arrancar Weblogic ejecutamos el archivo: startWebLogic.cmd que se encontrará en la ruta C:\Oracle\Middleware\user_projects\domains\NOMBRE_DOMINIO\bin, en el caso de la instalación realizada la ruta es: C:\Oracle\Middleware\user_projects\domains\LIBRA\bin

Al arrancar solicita usuario y contraseña, meteremos el usuario "weblogic" y la contraseña indicada durante la instalación (en futuras entradas mostraré como almacenar ese usuario y contraseña en archivos para que no sea necesario introducirla en cada arranque).


Sabremos que ha finalizado el proceso de arranque cuando aparezca "Server started in RUNNING mode". Esta ventana es importante que la dejemos abierta, ya que si se cierra estaremos parando los servicios de WebLogic.



Para arrancar Forms, desde una línea de comandos "CMD", ejecutamos (cambiar LIBRA por el nombre del dominio indicado durante la instalación).

  • cd C:\Oracle\Middleware\user_projects\domains\LIBRA\bin
  • startManagedWebLogic.cmd WLS_FORMS
También nos pedirá el usuario y contraseña, introducimos las mismas credenciales que durante el arranque de WebLogic.

Para arrancar Reports, también, desde una línea de comandos ejecutamos (cambiar LIBRA por el nombre del dominio indicado durante la instalación).
  • cd C:\Oracle\Middleware\user_projects\domains\LIBRA\bin
  • startManagedWebLogic.cmd WLS_REPORTS
Al igual que al arrancar Forms y Weblogic solicita usuario y contraseña.


domingo, 5 de febrero de 2012

Agilizar la entrada de datos en campos de tipo DATE

Si tenemos un campo de tipo DATE y que tiene la máscara DD/MM/YYYY el usuario puede introducir la fecha 05022012 y automáticamente se transforma en 05/02/2012, pero en muchos casos puede ser útil permitir al usuario lo siguiente:

  • Introducir 1 ó 2 dígitos, por ejemplo, teclear 5 y asumir el mes y año del SYSDATE transformando ese 5 tecleado por el usuario en la fecha 05/02/2012.
  • Introducir 4 dígitos, asumiendo los 2 primeros el día, los 2 dígitos siguientes el mes y el año obtenerlo del SYSDATE.
  • Introducir 6 dígitos y asumiendo los 2 primeros el día, los 2 siguientes el mes y los 2 últimos el año en formato de 2 dígitos, es decir, se le debe de sumar 2000, de forma que si el usuario teclea 050212 se asuma la fecha 05/02/2012.
Para hacerlo lo que haremos será capturar el error de conversión de máscara de formato FRM-50026 en el disparador ON-ERROR de la siguiente forma:

DECLARE
v_errtyp    VARCHAR2(3):= ERROR_TYPE;
v_errnum    NUMBER := ERROR_CODE;
v_errtxt    VARCHAR2(1000) := ERROR_TEXT;
v_fecha       DATE;
v_dia         VARCHAR2(2);
v_mes         VARCHAR2(2);
v_anho        VARCHAR2(4);
v_error       BOOLEAN := TRUE;
v_valor_campo VARCHAR2(30);
v_mascara     VARCHAR2(30);
BEGIN
  IF v_errtyp = 'FRM'
  AND v_errnum = 50026
  AND Get_Item_Property(:system.trigger_item, DATATYPE) = 'DATE'
  AND UPPER(Get_Item_Property(:system.trigger_item, FORMAT_MASK)) = 'DD/MM/YYYY' THEN
  -- Capturamos el FRM-50026 en campos de tipo DATE y con máscara DD/MM/YYYY
  BEGIN
   v_valor_campo := NAME_IN(:system.trigger_item);

      IF LENGTH(v_valor_campo) = 1 THEN
      -- El usuario sólo teclea un dígito
      v_dia := v_valor_campo;
      ELSIF LENGTH(v_valor_campo) IN (2, 4, 6) THEN
     -- Obtenemos el día de lo que ha tecleado el usuario
     v_dia := SUBSTR(v_valor_campo, 1, 2);
    END IF;

      IF LENGTH(v_valor_campo) IN (4, 6) THEN
      -- Obtenemos el mes, sólo si el usuario ha tecleado algo de 4 ó 6 dígitos
      v_mes := SUBSTR(v_valor_campo, 3, 2);
      END IF;

      IF LENGTH(v_valor_campo) = 6 THEN
      -- Obtenemos el año, sólo si el usuario ha tecleado algo 6 dígitos
      v_anho := TO_CHAR(TO_NUMBER(SUBSTR(v_valor_campo, 5, 2)) + 2000);
      END IF;

      -- Obtenemos el mes y el año de SYSDATE en caso de que haber sido tecleado por el usuario
      v_mes := NVL(v_mes, TO_CHAR(SYSDATE, 'MM'));
      v_anho := NVL(v_anho, TO_CHAR(SYSDATE, 'YYYY'));
      v_fecha := TO_DATE(v_dia || '/' || v_mes || '/' || v_anho, 'DD/MM/YYYY');
      -- El comando COPY únicamente está preparado para asignar un valor VARCHAR2,
      -- con variables de tipo DATE debemos de asegurar la máscar de formato
      -- con la que hará conversión.
      v_mascara := Get_Application_Property(BUILTIN_DATE_FORMAT);
      Set_Application_Property(BUILTIN_DATE_FORMAT, 'DD/MM/YYYY');
      COPY(TO_CHAR(v_fecha, 'DD/MM/YYYY'), :system.trigger_item);
      Set_Application_Property(BUILTIN_DATE_FORMAT, v_mascara);
      v_error := FALSE;
    EXCEPTION
      WHEN OTHERS THEN
        -- Ante cualquier error dejamos el mensaje original de error
        NULL;
    END;  
  END IF;

  IF v_error THEN
    -- No se ha podido transformar lo tecleado por el usuario en una fecha válida
    MESSAGE(v_errtyp || '-' || TO_CHAR(v_errnum) || ': ' || v_errtxt); 
    RAISE Form_Trigger_Failure;
  END IF;
END;