4D v16.3

Desarrollo de componentes

Inicio

 
4D v16.3
Desarrollo de componentes

Desarrollo de componentes  


 

 

Como un componente se presenta en forma de una base de datos 4D, el desarrollo de un componente es similar al desarrollo de una funcionalidad de una base. Existen sin embargo restricciones y reglas específicas relacionadas con la naturaleza de los componentes.

Un componente puede llamar a la mayoría de los objetos de 4D: métodos de proyecto, formularios de proyecto, barras de menús, listas de selección, imágenes de la librería, etc.

Sólo los siguientes objetos no pueden ser utilizados por un componente:

  • tablas y campos 4D estándar (pero puede crear y utilizar las tablas y campos vías las bases externas),
  • formularios tabla sus métodos de formulario asociados (por otra parte, un componente puede llamar un formulario tabla de la base local),
  • formularios usuario,
  • métodos de base y triggers.

No es necesario eliminar esto elementos si existen en las bases matrices. Cuando un objeto “no utilizable” está presente, simplemente se ignora una vez instalado el componente.

Nota: los usuarios y grupos así como los posibles derechos de acceso definidos en la base matriz se ignoran en la base local.

Sólo son visibles los métodos de proyecto compartidos por el componente y pueden seleccionarse en modo Diseño en la base local. Por otra parte, los métodos de proyecto compartidos de la base local pueden ser llamados por el componente. Para mayor información consulte Compartir métodos proyecto.

Sólo los formularios "publicados" por el componente pueden ser visibles e integrarse en los formularios de la base local como subformularios. Para mayor información, consulte Compartir formularios.

Los otros objetos del componente (formularios de proyecto, listas de selección, menús, etc.) pueden ser utilizados por el componente pero no serán accesibles como objetos de estructura desde la base local. Note que ciertos objetos están particionados y otros son compartidos entre la base local y los componentes. Para mayor información, consulte Objetos compartidos y no compartidos

Un componente puede utilizar los plug-ins instalados en la aplicación 4D o en la base local. No es posible instalar plug-ins en la carpeta del componente.

Los métodos base y los parámetros genéricos de las bases matrices (carpeta Web, Preferencias, etc.) nunca se tienen en cuenta.

Los siguientes comandos no son compatibles para ser utilizados dentro de un componente porque modifican el archivo de estructura, abierto en modo sólo lectura. Su ejecución en un componente provoca el error -10511, “The CommandName command cannot be called from a component”:

ON EVENT CALL
Method called on event
SET PICTURE TO LIBRARY
REMOVE PICTURE FROM LIBRARY
SAVE LIST
ARRAY TO LIST
EDIT FORM
CREATE USER FORM
DELETE USER FORM
CHANGE PASSWORD
EDIT ACCESS
Set group properties
Set user properties
DELETE USER
CHANGE LICENSES
BLOB TO USERS
SET PLUGIN ACCESS

Notas:

  • El comando Current form table devuelve Nil cuando se llama en el contexto de un formulario de proyecto. Por lo tanto, no puede utilizarse en un componente.
  • Los comandos SQL de definición de datos (CREATE TABLE, DROP TABLE, etc.) no pueden utilizarse en el marco de componentes.

An error-handling method installed by the ON ERR CALL command only applies to the running database. In the case of an error generated by a component, the ON ERR CALL error-handling method of the host database is not called, and vice versa.

  • Sólo los “formularios proyecto” (formularios no asociados a una tabla específica) pueden utilizarse en un componente. Todos los formularios de proyecto presentes en la base matriz pueden ser utilizados por el componente.
  • Un componente puede llamar a los formularios tabla de la base local. Note que en este caso es necesario utilizar punteros en lugar de nombres de tabla entre corchetes [] para especificar los formularios en el código del componente.
    Nota:
    si un componente utiliza el comando ADD RECORD, el formulario de entrada actual de la base local se mostrará, en el contexto de la base local. Por lo tanto, si el formulario incluye variables, el componente no tendrá acceso a él (ver Interacción entre componentes y bases locales).
  • Puede publicar formularios de componentes como subformularios en las bases locales. Esto significa que puede, particularmente, desarrollar componentes ofreciendo objetos gráficos. Por ejemplo, los Widgets ofrecidos por 4D están basados en el uso de subformularios en componentes. Esto se describe en Compartir formularios.

Un componente no puede utilizar las tablas y los campos definidos en la estructura 4D de la base matriz. Sin embargo, puede crear y utilizar las bases externas, y utilizar las tablas y los campos en función de sus necesidades. Las bases externas se crean y administran vía el lenguaje SQL. Una base externa es una base 4D independiente de la base 4D principal, pero manipulada desde la base 4D principal. Utilizar una base externa significa designar temporalmente esta base como base actual, en otras palabras, como la base objetivo de peticiones SQL ejecutadas por 4D. Puede crear bases externas utilizando el comando SQL CREATE DATABASE.

Para mayor información sobre las bases externas, consulte Sobre las bases externas.

Ejemplo  

El siguiente código se incluye en un componente y efectúa tres acciones básicas con una base de datos externa:

  • crea la base de datos externa si no existe,
  • añade datos en la base de datos externa,
  • lectura de datos desde la base de datos externa.

Creación de la base de datos externa:

 <>MyDatabase:=Get 4D folder+"\MyDB" // (Windows) guarda los datos en un directorio autorizado
 Begin SQL
        CREATE DATABASE IF NOT EXISTS DATAFILE :[<>MiBase];
        USE DATABASE DATAFILE :[<>MiBase];
        CREATE TABLE IF NOT EXISTS KEEPIT
        (
        ID INT32 PRIMARY KEY,
        kind VARCHAR,
        name VARCHAR,
        code TEXT,
        sort_order INT32
        );
 
        CREATE UNIQUE INDEX id_index ON KEEPIT (ID);
 
        USE DATABASE SQL_INTERNAL;
 
 End SQL

Escritura en la base de datos externa:

 $Ptr_1:=$2 // recuperación de los datos de la base local por medio de punteros
 $Ptr_2:=$3
 $Ptr_3:=$4
 $Ptr_4:=$5
 $Ptr_5:=$6
 Begin SQL
 
        USE DATABASE DATAFILE :[<>MiBase];
 
        INSERT INTO KEEPIT
        (ID, kind, name, code, sort_order)
        VALUES
        (:[$Ptr_1], :[$Ptr_2], :[$Ptr_3], :[$Ptr_4], :[$Ptr_5]);
 
        USE DATABASE SQL_INTERNAL;
 
 End SQL

Lectura desde una base externa:

 $Ptr_1:=$2 // acceso a los datos de la base local por medio de punteros
 $Ptr_2:=$3
 $Ptr_3:=$4
 $Ptr_4:=$5
 $Ptr_5:=$6
 
 Begin SQL
 
    USE DATABASE DATAFILE :[<>MiBase];
 
    SELECT ALL ID, kind, name, code, sort_order
    FROM KEEPIT
    INTO :$Ptr_1, :$Ptr_2, :$Ptr_3, :$Ptr_4, :$Ptr_5;
 
    USE DATABASE SQL_INTERNAL;
 
 End SQL

Los componentes pueden utilizar recursos (antiguos recursos Mac OS “clásicos” o archivos de tipo XLIFF).

Conforme a los principios de gestión de recursos (ver Arquitectura de las bases ), los archivos de recursos de los componentes deben ubicarse en una carpeta Resources, ubicada junto al archivo .4db o .4dc del componente. Si el componente es de arquitectura .4dbase (arquitectura recomendada), la carpeta Resources
debe ubicarse dentro de esta carpeta.. 

Los mecanismos automáticos son operacionales: los archivos XLIFF presentes en la carpeta Resources de un componente serán cargados por este componente. Un componente también utilizará automáticamente los recursos Mac OS “clásicos” ubicados en el archivo .rsr junto al archivo .4db o .4dc. Los archivos de recursos “clásicos” ubicados en la carpeta Resources deben cargarse explícitamente en el componente utilizando los comandos del tema “Recursos”. 

En una base local contiene uno o más componentes, cada componente así como las bases locales tienen su propia “cadena de recursos.” Los recursos son particionados entre las diferentes bases: no es posible acceder a los recursos del componente A desde el componente B o la base local (ver Objetos compartidos y no compartidos).

Un mecanismo específico ha sido implementado para permitir a los desarrolladores añadir ayudas en línea a sus componentes. El principio es el mismo al propuesto para las bases de datos 4D (ver Anexo A: Ayuda en línea personalizada):

  • la ayuda del componente debe ofrecerse como archivo .htm, .html o (Windows únicamente) .chm,
  • el archivo de ayuda debe ubicarse junto al archivo de estructura del componente y tener el mismo nombre que el archivo de estructura,
  • este archivo se carga automáticamente en el menú Ayuda de la aplicación con la etiqueta “Ayuda para...” seguido por el nombre del archivo de ayuda.

 
PROPIEDADES 

Producto: 4D
Tema: Desarrollar e instalar componentes 4D

 
HISTORIA 

 
ARTICLE USAGE

Manual de Diseño ( 4D v16)
Manual de Diseño ( 4D v16.1)
Manual de Diseño ( 4D v16.3)