Crear servidores de Automatización

Un servidor de automatización es una aplicación componente COM con una funcionalidad que otras aplicaciones pueden utilizar y reutilizar por medio de automatización. Por ejemplo, con Visual FoxPro puede crear un servidor de automatización que muestre formularios reutilizables (en un archivo .exe fuera de proceso) o que empaquete una rutina compleja en un componente sencillo disponible para otros programadores. Además, puede crear una o más clases para administrar las reglas de toda una compañía. Una aplicación cliente que utilice el objeto de reglas de empresa pasará los parámetros de entrada en una llamada a un método y el servidor de automatización realizará numerosas operaciones para recuperar o almacenar datos de diversas fuentes y realizar cálculos complejos antes de devolver la respuesta.

Los ejemplos de servidores de Automatización están instalados en el directorio ...\Samples\Servers de Visual FoxPro.

Crear el servidor de automatización

Todo lo que necesita para crear un servidor de Automatización en Visual FoxPro es un proyecto que contenga clases definidas como OLEPUBLIC. Puede tener en el proyecto tantas clases OLEPUBLIC como desee y se pueden definir en archivos de programa (.prg) o en bibliotecas de clases (.vcx).

Por ejemplo, la definición de clase siguiente en un archivo de programa crea una clase OLEPUBLIC personalizada:

DEFINE CLASS person AS CUSTOM OLEPUBLIC
   FirstName = SPACE(30)
   LastName = SPACE(45)

   PROCEDURE GetName
      RETURN THIS.FirstName + " " + THIS.LastName
   ENDPROC
ENDDEFINE

Cuando diseñe una clase en el Diseñador de clases, seleccione OLE público en el cuadro de diálogo Información de clase para designar la clase como OLEPUBLIC.

Compilar el servidor de automatización

En Visual FoxPro, puede crear un servidor de automatización fuera de proceso o en proceso. Un componente fuera de proceso es un ejecutable (archivo .exe) que ejecuta su propio proceso. La comunicación entre una aplicación cliente y un servidor fuera de proceso se denomina comunicación en proceso cruzado. Un componente en proceso es una biblioteca de vínculos dinámicos (dll) que se ejecuta en el mismo espacio de direcciones de proceso que el cliente que la llama.

Cada componente tiene sus propias ventajas. Un servidor en proceso es más rápido porque no hay necesidad de comunicación entre procesos. Por otro lado, un servidor fuera de proceso puede utilizarse en modo remoto, función no disponible en el servidor en proceso. Además, dado que el servidor en proceso y el cliente comparten un espacio de direcciones de proceso, cualquier error grave en el archivo .dll interrumpirá el funcionamiento del cliente, mientras que un error en un .exe fuera de proceso sólo interrumpiría el servidor.

**Nota   **Debido a que los servidores de automatización .dll en proceso y .exe fuera de proceso se invocan a través de la creación de instancias de clases, no es necesario especificar en el proyecto un archivo principal. Ahora, en Visual FoxPro puede generar un servidor de automatización .dll en proceso o .exe fuera de proceso sin tener que especificar primero un archivo principal en el Administrador de proyectos.

Cuando se crea un ejecutable con clases OLEPUBLIC, no se pierde ninguna de las capacidades .exe habituales. Podrá hacer funcionar el ejecutable, proporcionar una interfaz de usuario y todas las funciones habituales que incluiría en una aplicación. Puede aumentar, por tanto, la capacidad de expansión de la aplicación permitiendo que otras aplicaciones utilicen las funciones específicas que desea ofrecer.

Nota   Si hay más de un usuario que intenta tener acceso al servidor de Automatización, pueden surgir conflictos. Si ha proporcionado acceso a Automatización además de una interfaz de usuario para la funcionalidad, proporcione un nivel adicional de coherencia comprobando la interfaz para garantizar que el entorno no se ha modificado.

Para compilar un servidor de Automatización

  1. En el Administrador de proyectos, elija Generar.

  2. En el cuadro de diálogo Opciones para generar, elija Generar ejecutable Win32/servidor COM (exe), Generar servidor COM de subproceso único (dll) o Generar servidor COM de subproceso múltiple (dll).

  3. Elija Aceptar.

    –O bien–

Una vez generado el proyecto, podrá ver las clases de servidor mostradas en el cuadro de diálogo Información del proyecto. También puede especificar un archivo de ayuda y un Id. de contexto de Ayuda para cada clase. Este archivo de ayuda puede abrirse desde la mayoría de examinadores de objetos genéricos.

Puede elegir valores de creación de instancias específicos de la clase en el cuadro de diálogo Información del proyecto. Las opciones de creación de instancias son las siguientes:

  • No se puede crear   Aun cuando la clase esté marcada como OLEPUBLIC, no estará disponible en otras aplicaciones. Por ejemplo, podría tener una biblioteca estándar de clases OLEPUBLIC en múltiples aplicaciones y desactivar la automatización de una o varias clases para una sola aplicación.

  • Uso único   Todas las aplicaciones cliente que utilicen el servidor crean una instancia diferente de la clase de servidor. Cada instancia tiene un solo subproceso de ejecución. Aunque instancias independientes requieren más memoria, si se elige Uso único el sistema operativo podrá aplicar multitarea preferente.

  • Multiuso   Una vez creado el servidor, otras aplicaciones pueden utilizar la misma instancia.

    Nota   Si realiza cambios en la ficha Servidores del cuadro de diálogo Información del proyecto, será necesario volver a generar la .dll o el .exe para que entre en vigor la nueva configuración.

Cuando cree un proyecto con clases OLEPUBLIC, se crean tres archivos:

  • El archivo .dll o .exe
  • Un archivo de biblioteca de tipos (.tlb)
  • Un archivo de registro (.vbr)

El archivo de biblioteca de tipos es un archivo binario que presenta una relación de todas las clases publicadas en el servidor de Automatización, junto con sus propiedades, métodos y eventos. Los examinadores de objetos OLE leen esta información y la presentan en una interfaz legible. Para obtener más información, consulte Bibliotecas de tipos.

El archivo del Registro muestra los identificadores únicos globales (GUID) de las clases del servidor.

Nota   Un archivo de registro .vbr es igual que un archivo .reg, salvo que el primero no incluye rutas de acceso en código.

Registrar un servidor de Automatización

Los servidores de Automatización quedarán disponibles para otras aplicaciones cuando se hayan agregado los servidores al Registro de Windows. Cuando genere un servidor de Automatización, se registrará automáticamente en la máquina donde se ha efectuado la generación. También puede registrar los servidores en otras máquinas.

Si utiliza el programa de instalación de Visual FoxPro para crear discos de instalación, éste registrará los servidores en los equipos de los clientes. También puede registrar servidores manualmente.

Para registrar un componente .exe

  • Ejecute el archivo .exe con el modificador /regserver.

    Por ejemplo, para registrar Myserver.exe, ejecute el comando siguiente:

    myserver /regserver
    

Para quitar una entrada del registro de componentes .exe

  • Ejecute el archivo .exe con el modificador /unregserver.

    Por ejemplo, para eliminar Myserver.exe del registro, ejecute el comando siguiente:

    myserver /unregserver
    

Para registrar un componente .dll

  • Ejecute REGSVR32 con el nombre del servidor.

    Por ejemplo, para registrar Myserver.dll, ejecute el comando siguiente:

    REGSVR32 myserver.dll
    

Para quitar una entrada del registro de componentes .dll

  • Ejecute REGSVR32 con el nombre del servidor y el modificador /u.

    Por ejemplo, para registrar Myserver.dll, ejecute el comando siguiente:

    REGSVR32 /u myserver.dll
    

    Nota   El registro contiene el nombre completo de la ruta de acceso al archivo, por lo que si mueve el archivo tendrá que registrarlo de nuevo.

Usar el servidor de Automatización

Una aplicación que puede crear objetos de Automatización puede crear objetos basados en el servidor de Automatización, establecer propiedades que no sean HIDDEN o PROTECTED y llamar a métodos. Por ejemplo, suponiendo que el nombre del servidor sea foxole y que contenga una clase denominada person con un método GetName, el código siguiente podría ejecutarse en Visual FoxPro:

oTest = CREATEOBJECT("foxole.person")
cName = oTest.GetName()

Se podría crear código similar en Microsoft Excel o Visual Basic:

Set oTest = CreateObject("foxole.person")
cName$ = oTest.GetName()

Tratamiento de excepciones

Cuando un servidor de automatización de Visual FoxPro genera una excepción, el servidor establece el objeto COM ErrorInfo (a través de IErrorInfo) y cancela el método actual. El cliente de automatización puede liberar el servidor de automatización de Visual FoxPro o, si el cliente tiene acceso al objeto COM ErrorInfo, tratar la excepción según esta información.

Para ver un ejemplo del uso de ErrorInfo, vea _ErrorInfo( ) (Rutina de biblioteca API).

La nueva función de Visual FoxPro, COMRETURNERROR( ), trata los errores que ocurren en un servidor de automatización. COMRETURNERROR( ) se puede utilizar en el método Error para llenar la estructura de excepción COM con información que los clientes de automatización pueden utilizar para determinar el origen de los errores del servidor de automatización. Para obtener más información, vea COMRETURNERROR( ).

Generar o devolver errores de los servidores de Automatización

La única interacción con los objetos proporcionados por un servidor de Automatización (componente COM) se hace mediante los métodos y las propiedades de las clases expuestas. Cuando una aplicación cliente llama a un método de un objeto y se produce un error en el servidor de Automatización, el método devuelve un valor de error o genera un error en la aplicación cliente.

La aplicación cliente decide si debe avisar al usuario o continuar con otra ruta de acceso de ejecución. El propio servidor de Automatización nunca interactúa con el usuario. Esto permite que la aplicación del servidor de Automatización sea transparente para la aplicación cliente. El servidor de Automatización puede ser local (es decir, se ejecuta en el equipo del usuario) o se puede usar la característica de Automatización remota de Visual FoxPro para ejecutarlo en un servidor de red.

Vea también

Controlar Visual FoxPro desde otras aplicaciones | Usar Automatización remota | Agregar OLE | Información de clase | Opciones para generar