jueves, 9 de julio de 2015

Bloque de Datos en Oracle Forms

Un bloque es la unidad de construcción intermedia para los formularios. Cada formulario se compone de uno o más bloques. Un bloque es el propietario lógico de elementos, y cada elemento en una formulario pertenece a un bloque. Los elementos de un bloque son lógicamente relacionados; por ejemplo, que pueden ser las columnas de la misma tabla de base de datos o pueden tener que ser parte de la misma pantalla de navegación. Por lo tanto, los bloques proporcionan un mecanismo para agrupar elementos relacionados en una unidad funcional para almacenar, visualizar y manipular los registros.


Tipos de Bloques
En Forms Builder hay dos tipos principales de bloques: bloques de datos y bloques de control.

Bloques de Datos
Un bloque de datos se asocia con una tabla específica de base de datos (o vista), un procedimiento almacenado o un consulta. Si se basa en una tabla (o vista), el bloque de datos puede basarse en una sola tabla. Por defecto, la asociación entre un bloque de datos y la base de datos permite al usuario acceder de forma automática y manipular datos en la base de datos. Sin embargo, para acceder a los datos de otras tablas (nonbase tablas), tiene que escribir Triggers.

Bloque de Control
Un bloque de control no está asociado con una base de datos, y sus elementos no se refieren a las columnas dentro de una tabla de base de datos. Sus elementos se denominan elementos de control. Por ejemplo, puede crear muchos botones en el módulo para iniciar ciertas acciones y de grupo, lógicamente, estos botones en un bloque de control.

Creando un Bloque de Datos
Un  formulario consiste en uno o más bloques de datos y bloques de control. Para la creación de un bloque implica la creación del bloque de datos y luego trazar su contenido para su presentación visual. Puede crear un bloque de datos de forma manual o mediante el uso del Asistente de Bloque de Datos.


El Asistente de bloque de datos le permite crear (o modificar) bloques de datos rápida y fácilmente para su uso en su aplicación. El asistente puede generar automáticamente código para hacer cumplir las restricciones de integridad en la base de datos.

Para iniciar el Asistente de bloque de datos, realice una de las siguientes opciones:
En Form Builder , realice una de las siguientes opciones:

Seleccione Herramientas >> Asistente de Bloque de Datos o en el Navegador de objetos, seleccione el nodo de Bloques de Datos, a continuación, haga clic en el icono Crear. En el cuadro de diálogo Nuevo bloque de datos, seleccione la opción Usar el Asistente de bloque de datos. Podrá elegir entre  Tabla o Vista o  Procedimiento almacenado. Seleccione la tabla o vista opción (por defecto).


Luego ingresar el nombre del objeto onde se origina los datos o haga clic en Examinar y seleccione un objeto de cuadro de diálogo. Haga clic en Actualizar para mostrar una lista de columnas de la tabla seleccionada. Si no está conectado a la base de datos, se muestra el cuadro Conectar.

Seleccionar las columnas que desea incluir o excluir usando las flechas. También puede arrastrar las columnas seleccionadas de una lista a otra.



Finalmente seleccione la opción Crear el bloque de datos. Tiene la opción de salir del Asistente Bloque de Datos en esta etapa, sin invocar el Asistente de Diseño. Si lo hace, puede diseñar el bloque de datos de forma manual o invocar el asistente de diseño en un momento posterior para disponer los elementos de un bloque de datos. 


martes, 7 de julio de 2015

API para setear valores de atributos de Workflow

Cuando realiza un Workflow siempre tiene que enviar los valores de cada Atributo que necesita trasmitir para la muestra de una notificación o algún proceso en particular los siguientes API se usan para obtener y setear valores de Atributos de Workflow

Texto
Para los atributos tipo Textose usa el siguiente API para setear sus valores

wf_engine.SetItemAttrText(itemtype in varchar2, --> 'XXWFTEST'
                          itemkey  in varchar2, --> 535
                          aname    in varchar2, --> 'SUPPLIER'

                          avalue   in varchar2);--> 'ABC SAC'

Numero
Para los atributos tipo Numero se usa el siguiente API para setear sus valores

wf_engine.SetItemAttrNumber(itemtype in varchar2, --> 'XXWFTEST'
                            itemkey  in varchar2, --> 535
                            aname    in varchar2, --> 'SUPPLIER_ID'
                            avalue   in number);  --> '705415'

Fecha
Para los atributos tipo Fecha se usa el siguiente API para setear sus valores
wf_engine.SetItemAttrDate(itemtype in varchar2, --> 'XXWFTEST'
                          itemkey  in varchar2, --> 535
                          aname    in varchar2, --> 'BEGIN_DATE'
                          avalue   in date);    --> '01/02/2015'

Documento
Para los atributos tipo Documento se usan para el adjunto de documentos, puede especificar dos tipos de documentos:

Documento PL/SQL el cual representa información de Bse de datos con caracteres generado por un proceso o función

Documento CLOB el cual resepresenta un objeto CLOB el cual contiene información amplia de vario caracteres, por ejemplo un código html para generar detalles en la notificación.


wf_engine.SetItemAttrDocument(itemtype   in varchar2,  --> 'XXWFTEST'
                              itemkey    in varchar2,  --> 535
                              aname      in varchar2,  --> 'DETAIL'
         documentid in varchar2); --> 'PLSQLCLOB:XX_N_PKG.GEN/ITEMTYPE:L_ITEMKEY'

jueves, 2 de julio de 2015

Colocar en modo Lectura los campos Flexfields Descriptivos

La librería Custom.pll puede ser utilizado para una amplia gama de personalizaciones. Por ejemplo, puede ser utilizado para hacer que los segmentos de Flexfields Descriptivos(DFF) estén en modo de solo lectura basado en una condición o varias condiciones.

Para ello vamos a usar el proceso FND_DESCR_FLEX.UPDATE_DEFINITION. Este proceso ya esta dentro de las muchas librerías asociadas a la librería Custom.pll. Este proceso identifica el Flexfield Descriptivo indicando su nombre y el bloque donde se desea realizar una acción. Este proceso tiene la siguiente estructura de parámetros:      

FND_DESCR_FLEX.UPDATE_DEFINITION(
/* Parametros obligatorios */
    BLOCK=>'Nombre del Bloque',
    FIELD=>'Nombre del Campo',
/* Habilitar o Desahabilitar Flexfields*/   
    ENABLED=>'Indicar Y o N',
/* Habilitar modo lectura*/       
    READ_ONLY=>'Indicar Y o N',
/* Parametros opcionales*/       
    VDATE=>'Indicar Fecha',
    TITLE =>'Titulo',
    AUTOPICK=>'Indicar Y o N',
    USEDBFLDS=>'Indicar Y o N',
    LOCK_FLAG=>'Indicar Y o N',
    HELP=>'APPL=application_short_name;
            TARGET=target_name',
    CONTEXT_LIKE=>'WHERE_clause_fragment');

El procedimiento deshabilita todos los segmentos DFF, esto se debe a que un FlexField es un solo campo en un formulario, sin embargo cuando se hace clic en él, se abre la ventana de Flexfields Descriptivos, los múltiples campos que se visualizan es en realidad una salida de usuario con múltiples segmentos el cual no forman campos. Es por ello que no es posible deshabilitar un solo segmento Flexifled sin que los otros sigan habilitados. 

Por ejemplo vamos a deshabilitar los segmentos DFF de la pantalla de Proveedores. En nuestra librería custom debemos ubicarnos  en una Unidad de Programa y podemos colocar el siguiente código:   

IF ( EVENT_NAME = 'WHEN-NEW-BLOCK-INSTANCE' AND  V_FORM_NAME = 'APXVDMVD') THEN
  IF  V_BLOCK_NAME = 'VNDR' AND NAME_IN('VNDR.VENDOR_TYPE_LOOKUP_CODE')='VENDOR' IS NOT NULL THEN
               
 FND_DESCR_FLEX.UPDATE_DEFINITION(BLOCK     => 'VNDR',
                                  FIELD     => 'DESC_FF_MIR',
                                  READ_ONLY  => 'Y');
            
    END IF;
  END IF;     

Compilamos nuestra librería en el servidor de Aplicaciones y nos ubicaremos en la pantalla de Proveedores. Podremos apreciar que los campos DFF estan solo en modo lectura. Tener en cuenta que es necesario conocer el nombre del bloque en esta caso VNDR y el campo DFF al cual desea realizar la deshabilitación.