Los asistentes de Xailer 2

Estimados usuarios de Xailer,

La versión definitiva de Xailer 2 incorpora un gestor de asistentes que facilita enormemente la creación de formularios rutinarios y/o repetitivos. Un ejemplo típico de un formulario de este tipo sería aquel que creamos cada vez que queremos realizar la edición de todos los campos de una tabla en cualquier tipo de mantenimiento.

Primero vamos a ver lo fácil que resulta utilizar cualquier asistente, para luego adentrarnos en la modificación o creación de nuestros propios asistentes, que es igualmente fácil.

Para acceder a la opción de Asistentes utilizaremos la opción de menú Componentes->Asistentes y se nos mostrará el siguiente diálogo:

Wizards dialog

Observe que todos los asistentes están incluidos de alguna forma dentro de una DLL. Dicha DLL ha sido creada por el propio Xailer, y de hecho podrá incluso analizar su código fuente en el directorio samplesWizards. Por supuesto también podrá modificarla y reconstruirla para que los asistentes se adapten a su forma de trabajo.

Las DLL de los asistentes deben de estar ubicadas necesariamente en los directorio XailerTemplate o XailerUser.

Una vez seleccionado un asistente en concreto entra en funcionamiento el código interno del mismo que o bien puede directamente realizar el trabajo requerido o es posible que le muestre algún diálogo para pedirle algún dato adicional.

Si selecciona el asistente DBF table assistant que permite crear un formulario de mantenimiento de tablas DBF, se le mostrará el siguiente diálogo:

DBF editor wizard/>

Simplemente indique como quiere que se comporte el asistente para cada tipo de datos que pueda tener el fichero DBF y pulse el botón Run y podrá observar como de forma instantánea el formulario es creado por usted

La creación o modificación de asistentes es igualmente sencilla, y si le echa un vistazo al ejemplo sampleswizardsBasic se dará cuenta inmediatamente de ello. Básicamente todo el trabajo consiste en crear una clase descendente de TIDEWizard que tan sólo necesita sobrecargar el método Run(). Eso es todo.

Lo más sencillo es ver un pequeño ejemplo:

CLASS TWzdSample FROM TIDEWizard

   METHOD Run()

END CLASS

METHOD Run() CLASS TWzdSample

   LOCAL oForm

   WITH OBJECT oForm := ::AddForm()
      :SetBounds( 246, 223, 307, 137 )
      :SetClientSize( 299, 103 )
   END WITH

   WITH OBJECT ::AddComponent( TLabel(), oForm )
      :SetBounds( 12, 12, 26, 14 )
      :cText := "User:"
   END

RETURN Nil

Este pequeño ejemplo lo único que hace es crear un nuevo formulario en el IDE y añadir un objeto TLabel. Observe las llamadas a AddForm() y AddComponent() que son métodos de la propia clase TWizard.

Para que el IDE sea capaz de reonocer ese código dentro de la DLL es necesario indicarle su existencia en un INIT PROCEDURE dentro de la propia DLL y utilizando la función RegisterWizard. Como suele ocurrir, un ejemplo es lo más descriptivo para entenderlo:

INIT PROCEDURE WzdInit()

   RegisterWizard( "A sample",;
      {|| TWzdSample():New() },;
      "comments",;
      cBitmap )

RETURN

A continuación os dejo el prototipado de la clase TWizard cuya documentación se encontrará en la ayuda del propio IDE para que veáis todos los miembros de dicha clase cuyo uso es prácticamente auto explicativo.

CLASS TWizard FROM TComponent

   PROPERTY aForms
   PROPERTY oActiveForm
   DATA nLanguage

   METHOD GetActiveForm( oForm ) // --> Nil
   METHOD SetActiveForm( oForm ) // --> Nil
   METHOD SetActiveModule( cModule ) // --> Nil
   METHOD AddForm( lShow ) // --> oForm
   METHOD AddModule( cType )  // --> cModule
   METHOD AddComponent( oObject, oParent ) // --> lSuccess
   METHOD AddCode( cCode ) // --> lSuccess
   METHOD AddMethod( cMethod, cParams, cBody, cReturn ) // --> lSuccess
   METHOD AddFunction( cMethod, cParams, cBody, cReturn, lStatic ) // --> lSuccess
   METHOD AddProcedure( cMethod, cParams, cBody, lStatic ) // --> lSuccess
   METHOD AddProperty( cName, cClauses ) // --> lSuccess
   METHOD AddEvent( cName, cParams ) // --> lSuccess
   METHOD AddEventCode( aObjs, cEventName, cMethod, cBody, cReturn ) // --> lSuccess
   METHOD SetControl( oObject ) // --> Nil

   METHOD TabWidth() // --> nTabWidth
   METHOD ProjectDir() // --> cDir

   METHOD Run() VIRTUAL

ENDCLASS

Un cordial saludo,

[El equipo de Xailer]