viernes, 17 de abril de 2009

Formas de cargar un List Item por código

Directamente desde una sql

El proceso se basa en un grupo de registros que creamos en base a una sql dinámica "v_grupo := Create_Group_From_Query('RecorG', v_sql);", para cargar la lista de elementos en base al grupo usamos la instrucción "POPULATE_LIST".

Cuando creamos el ítem del bloque podemos dejarlo sin ningún valor, pero nos va a dar una advertencia de compilación un poco molesta, pero totalmente inocua. Si queremos que no nos dé, simplemente abrimos los elementos de lista y en el primer elemento le quitamos el campo "Valor de elemento de Lista" y como el valor por inicial es NULL y ese elemento es NULL no nos va a protestar.

Ejemplo:

DECLARE
v_sql VARCHAR2(200); -- Variable para construir la SELECT dinánica.
v_grupo RecordGroup; -- Variable en donde vamos a meter el grupo de registros temporalmente.
v_estado_empresa ESTADOS.CODIGO%TYPE := 'ESPA'; -- Variable que contiene el valor que queremos mostrar por defecto.
BEGIN
/*
Construimos la SELECT. En el primer campo sacamos
lo que queremos que muestre la lista y en el segundo
campo el valor correspondiente que va a devolver
por la selección (normalmente un código).
*/

v_sql := 'SELECT INITCAP(nombre), codigo FROM estados ORDER BY nombre';


-- Asignamos el resultado de la select al grupo de registros.
v_grupo := Create_Group_From_Query('RecorG', v_sql);

-- Construimos la lista, siempre y cuando la select devolviese registros.
IF POPULATE_GROUP(v_grupo) = 0 THEN
POPULATE_LIST('B1.ESTADO', V_Grupo);
END IF;

-- Borramos el grupo, liberamos memoria que ya no nos hace falta.
DELETE_GROUP(v_grupo);

-- Asignamos el valor por defecto que queremos.
:b1.estado := v_estado_empresa;

-- Si el campo es obligatorio deberíamos de poner esto para que nos elimine el elemento en blanco.
Set_Item_Property('B1.ESTADO', REQUIRED, PROPERTY_TRUE);
END;


Elemento a elemento

Para limpiar un List-item se hace con la instrucción CLEAR_LIST('BLOQUE.CAMPO');

Para ir añadiendo elementos se hace con ADD_LIST_ELEMENT('BLOQUE.CAMPO', , , );

* : Será un número que identifica cada elemento, se comenzará a numerar en el 1.
* : Texto que visualizará en el desplegable el usuario.
* : Valor que toma el campo cuando se selecciona.


Ejemplo:


DECLARE
CURSOR cur_clientes IS
SELECT codigo_rapido, nombre
FROM clientes;

v_indice NUMBER;
v_primer_cliente CLIENTES.CODIGO_RAPIDO%TYPE;
BEGIN
Set_Item_Property('B1.CLIENTE', REQUIRED, PROPERTY_FALSE);
CLEAR_LIST('B1.CLIENTE');

FOR reg IN cur_clientes LOOP
v_indice := v_indice + 1;
Add_List_Element('B1.CLIENTE', v_indice, reg.nombre, reg.codigo_rapido);

IF v_primer_cliente IS NULL THEN
v_primer_cliente := reg.codigo_rapidol;
END IF;
END LOOP;
:b1.cliente := v_primer_cliente;
Set_Item_Property('B1.CLIENTE', REQUIRED, PROPERTY_TRUE);
END;


Instalar Forms6i para linux en Enterprise Linux 5.2

En primer lugar hay que crear el grupo dba, oinstall y el usuario oracle:

groupadd dba # group of users to be granted SYSDBA system privilege
groupadd oinstall # group owner of Oracle files
useradd -c "Oracle software owner" -g oinstall -G dba oracle
chown -R oracle.oinstall /oracle

Añadir las siguientes líneas al archivo .bash_profile:

export ORACLE_HOME=/oracle/dev6i
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/jre11/lib/linux/native_threads/:/usr/X11R6/lib/
export ORACLE_AUTOREG=$ORACLE_HOME/guicommon6/tk60/admin
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin

Instalar gcc: yum install gcc

Instalar los siguientes paquetes:

libXp-1.0.0-8.1.el5.i386.rpm
lesstif-0.95.0-15.el5.kb.i386.rpm
compat-glibc-7.x-2.2.4.32.6.i386.rpm
openmotif-devel-2.1.30-5_ICS.i386.rpm
openmotif-2.1.30-5_ICS.i386.rpm

Descomprimir el archivo d2k6irelease2.tar (por ejemplo en /oracle/software), pero no instalarlo.

descomprimir p3851446_600_LINUX.zip (por ejemplo en /oracle/parche) y ejecutar la instalación, para ello ejecutamos lo siguiente:

export D2K6I_R2_SHIPHOME=/oracle/software/
cd /oracle/parche/bug3851446
./d2k6ir2_install_wrapper.sh

Descomprimir el archivo p6194129_60828_LINUX (parche 19) en la carpeta /software/dev6i

Ejecutar en entorno gráfico lo siguiente:

cd /oracle/dev6i/developer6i_patch19
./patch_install.sh

Relincar:

cd $ORACLE_HOME/procbuilder60/lib; make -f ins_procbuilder.mk install
cd $ORACLE_HOME/forms60/lib; make -f ins_forms60w.mk install
cd $ORACLE_HOME/graphics60/lib; make -f ins_graphics60w.mk install
cd $ORACLE_HOME/reports60/lib; make -f ins_reports60w.mk install