Diferencia entre revisiones de «Cómo compilar paso a paso»

De Egeasy
Saltar a: navegación, buscar
(Configuración del compilador en EditPlus)
 
(No se muestran 97 ediciones intermedias de 2 usuarios)
Línea 1: Línea 1:
Cuando un centro es modificado, bien sea mediante cambios en el diccionario o en el modelo, es necesario realizar una serie de operaciones para que las variaciones realizadas se vean reflejadas en la aplicación egExplorer. Operaciones como compilar, actualizar el centro, etc. En este artículo abordaremos aquellos aspectos que influyan en dichas modificaciones, así como los pasos a seguir en función de qué elementos o ficheros del modelo se modifiquen. Para ello, es necesario entender los ficheros que intervienen en el funcionamiento de un centro, y cómo afectan a éste.
+
<p>Cuando un centro es modificado, bien sea mediante cambios en el diccionario o mediante cambios en el modelo, es necesario realizar una serie de operaciones para que los cambios realizados se vean reflejados en la aplicación egExplorer.</p>
 +
<p>En este artículo abordaremos aquellos aspectos que influyen en dichas modificaciones, así como los pasos a seguir en función de qué elementos o ficheros del modelo se modifiquen. Para ello, es necesario conocer qué ficheros intervienen en el funcionamiento de un centro, y cómo afectan a éste.</p>
  
===Configuración del compilador en EditPlus===
+
__TOC__
A la hora de programar en ODL, es necesario configurar el compilador (egCompiler) en algún editor de programación. En este caso, el editor utilizado es EditPlus. Sin más preámbulos, veamos cómo configurar dicho compilador para utilizarlo en el editor:
+
  
*Primer paso: ir a '''''Tools''''' -> '''''Preferences'''''
+
==Ejecutando egCompiler==
 +
<p>Al crear un proyecto nuevo o modificar uno ya creado, la primera operación a realizar es compilar el proyecto. Si no se encuentran errores en la compilación, nuestro compilador, egCompiler, generará dos ficheros: un diccionario cuya extensión es '''.ndc''' y un modelo con extensión '''.nmc'''.</p>
 +
<p>Pero, ¿y cómo ejecutamos el compilador?</p>
 +
<p>Para ejecutar el compilador, hay que indicar ciertos parámetros de entrada, ya que el compilador necesita cierta información del proyecto para poder realizar el proceso de compilación.</p>
 +
<p>En concreto, hay un parámetro de entrada fundamental para el compilador, que es el fichero .npc (código de proyecto).</p>
 +
<p>En este fichero se indican, entre otras cosas, la correspondencia entre las definiciones realizadas en ODL, con los ficheros .ndf donde están declaradas. Cualquier definición o fichero .ndf nuevo que se genere deberá ser introducido por el programador en este fichero. Por tanto, deberemos indicar como primer parámetro la ruta de dicho fichero .npc.</p>
 +
<p>Además de este parámetro, que es el único que realmente necesita el compilador, existen otros parámetros opcionales, de forma que podamos configurar ciertos aspectos del compilador. Veamos cuales son:</p>
 +
 
 +
:*'''/O:''' --> Indicaremos el diccionario previo a la compilación para compararlo con el nuevo diccionario a generar.
 +
:*'''/N:''' --> Indicaremos el directorio de definiciones.
 +
:*'''/D:''' --> Indicaremos el directorio destino donde queramos que se generen el diccionario(.ndc) y el modelo(.nmc). En caso de no especifircarlo se almacenarán en el directorio donde se encuentre el fichero .npc.
 +
:*'''/S:''' --> Su inclusión indica que solamente se genere el diccionario y no el modelo.
 +
 
 +
<p>Una vez conocidos los parámetros que admite egCompiler, utilizaremos la consola del sistema para ejecutarlo. De esta manera podremos introducir los parámetros que nos interesen en cada ejecución. Veamos un ejemplo:</p>
 +
 
 +
<center>
 +
{|
 +
|align="center" |[[Imagen:compilarconsola.jpg|thumb|250px|Compilación mediante la consola del sistema]]
 +
|}
 +
</center>
 +
 
 +
<p>Como habrás visto, lo primero es indicar la ruta del ejecutable del compilador. A continuación, especificamos la ruta del fichero .npc y, seguidamente, añadimos los parámetros opcionales. En este caso, hemos indicado con el parámetro '''/O:''' la existencia de un diccionario previo con el que vamos a comparar el nuevo a generar.  Con el parámetro '''/D:''' indicamos una ruta donde queremos guardar los ficheros de salida que generará el compilador, que en este caso será sólo el diccionario, ya que la inclusión del parámetro '''/S:''' así lo indica.</p>
 +
<p>NOTA: En caso de incluir rutas con espacios en blanco en ellas, debemos acotar la ruta completa entre comillas dobles.</p>
 +
 
 +
==Configuración de egCompiler en EditPlus==
 +
<p>Es probable que la persona que esté desarrollando en ODL tenga que realizar numerosas y repetitivas compilaciones en su proyecto. Por ello, facilitamos una forma de configurar el '''egCompiler''' en un editor de programación, que en este caso, hemos optado por el EditPlus. Sin más preámbulos, veamos cómo configurar dicho editor para ejecutar directamente el compilador desde él:</p>
 +
 
 +
*Primer paso: ir a '''''Tools''''' -> '''''Preferences''''':
  
 
<center>
 
<center>
Línea 12: Línea 39:
 
</center>
 
</center>
  
*Segundo paso: dentro de '''''Preferences''''', ir a la etiqueta '''''User tools'''''
+
*Segundo paso: dentro de '''''Preferences''''', ir a la etiqueta '''''User tools''''':
  
 
<center>
 
<center>
Línea 20: Línea 47:
 
</center>
 
</center>
  
*Tercer paso: una vez en '''''User tools''''', hay varias opciones y campos que debemos configurar. En primer lugar, vemos que existen varios grupos. Seleccionamos uno de ellos, y para cambiar el nombre haremos click en '''''Group Name...'''''. Estos grupos sirven para etiquetar conjuntos de herramientas que definamos en EditPlus, como por ejemplo, en nuestro caso, la configuración del compilador.
+
*Tercer paso: una vez en '''''User tools''''', hay varias opciones y campos que debemos configurar. En primer lugar, vemos que existen varios grupos. Seleccionamos uno de ellos, y para cambiar el nombre haremos clic en '''''Group Name...'''''. Estos grupos sirven para etiquetar conjuntos de herramientas que definamos en EditPlus, como por ejemplo, en nuestro caso, la configuración del compilador:
  
 
<center>
 
<center>
Línea 28: Línea 55:
 
</center>
 
</center>
  
*Cuarto paso: ahora, tenemos que crear una herramienta. Para ellos seleccionamos hacemos click en '''''Add Tool >>''''' y en el desplegable que aparece, seleccionaremos '''''Program''''' para indicar que vamos a configurar una aplicación.
+
*Cuarto paso: ahora tenemos que crear una herramienta. Para ello, hacemos clic en '''''Add Tool >>'''''. Nos aparecerá un desplegable, donde seleccionaremos '''''Program''''' para indicar que vamos a configurar una aplicación:
  
 
<center>
 
<center>
Línea 36: Línea 63:
 
</center>
 
</center>
  
*Quinto paso: vemos que hay ciertos campos como '''''Menu text''''', '''''Command''''', '''''Argument''''' o '''''Initial directory''''' además de ciertas opciones activables.
+
*Quinto paso: vemos que hay ciertos campos como '''''Menu text''''', '''''Command''''', '''''Argument''''' o '''''Initial directory''''' además de ciertas opciones activables:
  
 
<center>
 
<center>
Línea 44: Línea 71:
 
</center>
 
</center>
  
En '''''Menu text''''' pondremos el nombre que aparecerá en el menú de herramientas para ejecutar el compilador.<p>En '''''Command''''' introduciremos la ruta en donde está almacenado el ejecutable del egCompiler.</p>En el campo '''''Argument''''' debemos especificar el fichero .npc del proyecto así como la ruta y el nombre del diccionario.<p>Y en el campo '''''Initial directory''''' añadiremos el directorio del proyecto que tenemos en desarrollo.</p>Finalmente, activaremos las casillas '''''Capture output''''' para ver los mensajes de compilación en el propio EditPlus (en vez de en una ventana) y '''''Save open files''''' para que al compilar se guarden los ficheros abiertos del proyecto en cuestión. Los ficheros abiertos que no pertenezcan al proyecto no se guardarán.<p>Ahora veremos que la opción '''''Compilar''''' estará disponible en el menú '''''Tools''''' o '''''Herramientas'''''.</p>
+
<p>En '''''Menu text''''' pondremos el nombre que aparecerá en el menú de herramientas para ejecutar el compilador.</p>
 +
<p>En '''''Command''''' introduciremos la ruta en donde está almacenado el ejecutable del egCompiler.</p>
 +
<p>En el campo '''''Argument''''' podremos especificar los argumentos que acepta el egCompiler. En nuestro caso, añadiremos el parámetro '''/O:''' (además del fichero .npc como explicamos en el apartado anterior) para que al compilar compare el diccionario previo con el nuevo creado, de manera que pueda detectar los cambios.</p>
 +
<p>A continuación, añadiremos en el campo '''''Initial directory''''' el directorio donde se encuentra el fichero .npc (si no indicamos el directorio destino con el parámetro /D: el compilador almacenará el diccionario y el modelo en este directorio).</p>
 +
<p>Finalmente, activaremos las casillas '''''Capture output''''' para ver los mensajes de compilación en el propio EditPlus (en vez de en una ventana) y '''''Save open files''''' para que al compilar se guarden los ficheros abiertos del proyecto en cuestión. Los ficheros abiertos que no pertenezcan al proyecto no se guardarán.</p>
 +
<p>Ahora veremos que la opción '''''Compilar''''' estará disponible en el menú '''''Tools''''' o '''''Herramientas''''':</p>
  
 
<center>
 
<center>
Línea 52: Línea 84:
 
</center>
 
</center>
  
== Conceptos Básicos ==
+
==Compilando...==
 +
<p>Una vez hemos ejecutado nuestro compilador, bien mediante la consola del sistema, o bien mediante un editor, el compilador informará al programador de aquellas definiciones que, o bien son nuevas y puede generar un DRC en la base de datos para cada una de ellas, o bien detecta definiciones anteriores que ya no se encuentran en el código (en comparación con un modelo anterior) y, por tanto, es posible la liberación de su DRC. Existe otra operación, que es asignar el DRC de una definición que vamos a eliminar a una nueva que vamos a generar. De esta forma conservamos los valores que se han creado a partir de la definición que vamos a eliminar.</p>
 +
<p>Como ya sabemos, una vez liberados, generados o asignados los DRCs, el compilador generará un diccionario y un modelo.</p>
 +
<p>Veamos un ejemplo práctico:</p>
  
Para que el desarrollador se familiarice con un proyecto en egeasy comenzaremos explicando los diferentes tipos de archivos que se puede encontrar. A continuación mostraremos una referencia de los tipos de archivos que usaremos en EGE:
+
:*En primer lugar, vamos a generar por primera vez nuestro modelo, de forma que se generará un DRC para todas las definiciones. Podemos ir generando las nuevas definiciones seleccionando de una en una con el botón '''''Generar''''', o bien utilizar el botón '''''Generar todos'''''.<p>Nuestro sistema de información está constituído por dos definiciones de tipo ('''''Cliente''''' y '''''Expediente''''') con sus respectivas colecciones ('''''Clientes->Contenido)''''' y '''''Expedientes->Contenido'''''). Además también hay definida una habitación '''''Mi organización''''' para ubicar dichas colecciones y una definición de rol para acceder a los recursos definidos:</p>
* '''Dictionary.Ndc:''' contiene las relaciones entre entidades, tareas y procesos de nuestro sistema de información, es único.
+
* '''proyecto.Nmc:''' contiene la implementación del sistema de información, es único.
+
* '''Escritos.Ndf:''' archivos de código fuente que se usaran para generar el diccionario.
+
* '''Gestión de modificación.Nmt:''' archivos de código interpretado en los que se definen los métodos.
+
* '''MP-Inf 001.rtf:''' archivos plantilla para los documentos generados.
+
  
A continuación pasaremos a explicar la estructura de un proyecto en EGE:
+
<center>
 +
{|
 +
|align="center" |[[Imagen:Generar_drc.jpg|thumb|250px|Generamos los DRC de las definiciones por primera vez]]
 +
|}
 +
</center>
 +
 
 +
:*Ahora, hemos decidido eliminar ciertas definiciones, de forma que, al compilar, se comparará el diccionario creado en el paso anterior con el nuevo, y detectará aquellas definiciones que ya no se encuentren en el código. Al igual que al generar DRCs, existe un botón para ir liberando uno a uno cada DRC mediante el botón '''''Liberar''''' o bien liberarlas todas automáticamente, sin tener que seleccionar ninguna, con el botón '''''Liberar todas''''':
  
 
<center>
 
<center>
 
{|
 
{|
|align="center" |[[Imagen:Figura_18.JPG|thumb|250px|Proyecto egeasy]]
+
|align="center" |[[Imagen:Liberar_drc.jpg|thumb|250px|Eliminamos la definición de tipo '''''Expediente''''', así como todo aquello relacionado con dicha definición (colección, ubicación y permisos)]]
 
|}
 
|}
 
</center>
 
</center>
  
'''Source:''' están todos los archivos *.ndf de código fuente que son necesarios para generar el diccionario.  
+
:*La tercera posibilidad que nos podemos encontrar es la asignación de un DRC, correspondiente a una definición que vamos a eliminar, a una definición nueva que vamos a generar. En este caso debemos tener en cuenta las posibilidades que se nos pueden presentar, pues pueden ser varias.<p>Normalmente, esta operación se suele realizar al cambiar el nombre de alguna definición, de forma que nos puede interesar asignar el DRC de la definición anterior a la nueva definición para que los valores generados anteriormente al cambio de nombre se mantengan en la nueva definición.</p>Otra posibilidad es, por ejemplo, cambiar el tipo de un campo. En este caso, se podrá asignar el DRC del campo previo al nuevo campo, pero las consecuencias de dicho cambio tendrá que valorarlas el programador, pues puede no conseguirse el efecto deseado.<p>Un nuevo caso, en el que vamos a basar nuestro ejemplo, puede ser el cambio de nombre de un formulario, junto con el cambio de nombre de un campo incluído en dicho formulario. En cuanto a los formularios, hay que tener en cuenta que deben tener el mismo número de campos, además, los campos deben tener el mismo nombre.</p>Vayamos viendo los pasos a realizar uno a uno, de manera que los vayamos comentando:
*Habitaciones: tantas carpetas como habitaciones que tendrán el código fuente que definan relacionados con dicha habitación.
+
 
*Tareas: tantas carpetas como habitaciones
+
<center>
**Habitaciones: que tendrán el código fuente que definan las tareas relacionadas a las habitaciones.
+
{|
'''Data:''' están todos los archivos .csv que guardan los datos estáticos de nuestro sistema de información.
+
|align="center" |[[Imagen:Asignar_drc.jpg|thumb|250px|Relación de las definiciones a liberar o a generar]]
*Métodos: están todos los archivos .mnt y tiene tantas carpetas como habitaciones
+
|}
**Habitaciones:  con los archivos .mnt en los que se definen los métodos de las habitaciones.
+
</center>
'''Instalation:''' archivos correspondientes a la instalación del centro (no para la creación).<br />
+
'''Template documents:'''  contiene los archivos .rtf que definen los documentos que se realizan en nuestro sistema de información.  
+
*Habitaciones: para organizar los .rtf
+
'''Template prints:''' archivos que configurarán la vista con la que se mostrarán los formularios. Si no se tocan se mostrarán por defecto.<br />
+
'''Template views:''' configurarán la vista de los elementos del Egexplorer. Si no se tocan se mostrarán por defecto.
+
  
== Tarea A: Configurando Editplus ==
+
:Vemos que el compilador ha detectado definiciones que, o bien pueden ser liberadas, o bien pueden ser generadas. Pero nuestra intención es asignar el DRC del formulario '''''Datos generales''''' al formulario '''''Datos generales del cliente'''''. Además, ha detectado que el campo '''''DNI''''' ha cambiado de nombre, detectando un nuevo campo denominado '''''NIF''''' así como el cambio de nombre de la columna '''''DNI''''' de la colección '''''Clientes''''' por '''''NIF''''':
El programa que usamos para la edición de código fuente es el Editplus, es un editor de texto con un par de funciones más. La interfaz que nos ofrece el programa consta de varias partes:
+
*'''Columna vertical izquierda:''' navegador del sistema de fichero con el contenido de la carpeta por la que estemos navegando.
+
*'''Pequeña consola :''' situada en la parte inferior sirve para mostrar los resultados de compilación o de las búsquedas de texto.
+
*'''Barra de herramientas :''' que contiene todos las herramientas, la búsqueda en ficheros bastante útil.
+
*'''Ventana central :''' visor de archivos.
+
  
 
<center>
 
<center>
 
{|
 
{|
|align="center" |[[Imagen:Figura_19.JPG|thumb|400px|Editplus]]
+
|align="center" |[[Imagen:Asignar_drc1.jpg|thumb|250px|Primero seleccionamos la definición del DRC que vamos a asignar]]
 +
|align="center" |[[Imagen:Asignar_drc2.jpg|thumb|250px|Seleccionamos la definición nueva, indicando que el DRC será asignado a esa definición]]
 +
|align="center" |[[Imagen:Asignar_drc3.jpg|thumb|250px|Y generamos la asignación con el botón '''''Asignar''''']]
 
|}
 
|}
 
</center>
 
</center>
  
A continuación nos centraremos en configurar el Editplus para poder compilar:
+
:Ya tenemos realizada la asignación de la columna que ha cambiado de nombre en la colección '''''Clientes'''''. Ahora vamos a asignar el formulario. Para ello, hay que tener en cuenta que un campo ha cambiado de nombre, y, por tanto, deberemos asignar dicho DRC antes de hacerlo con el formulario:
* Accedemos a ''Tools --> Configure User Tools''
+
 
 
<center>
 
<center>
 
{|
 
{|
|align="center" |[[Imagen:Figura_20.JPG|thumb|400px|Configuración de Editplus]]
+
|align="center" |[[Imagen:Asignar_drc4.jpg|thumb|250px|Seleccionamos el campo que contiene el DRC]]
 +
|align="center" |[[Imagen:Asignar_drc5.jpg|thumb|250px|Seleccionamos el campo nuevo]]
 +
|align="center" |[[Imagen:Asignar_drc6.jpg|thumb|250px|Y generamos la asignación, al igual que en el caso anterior]]
 
|}
 
|}
 
</center>
 
</center>
  
*'''Menú text: '''nombre de la herramienta. <br />Ejemplo: ''Generar Diccionario''
+
:Una vez tratado el campo que ha cambiado de nombre, ya no hay restricciones para asignar el DRC del formulario '''''Datos generales''''' al formulario '''''Datos generales del cliente''''':
*'''Command: '''ruta donde esta el compilador. <br />Ejemplo: ''S:\Entornos 2002\Banzai\Aplicaciones\egCompiler\egCompiler.exe''
+
*'''Argument: '''argumentos necesarios para el compilador, el nombre del proyecto y la ruta donde poner el diccionario. <br />Ejemplo: ''Maxorata.npc /O:"I:\Desarrollo\xIvan\Maxorata\Dictionary.ndc"''
+
*'''Initial directory: '''ruta del proyecto. <br />Ejemplo:''I:\Desarrollo\xIvan\Maxorata\''
+
  
== Tarea B: Compilar ==
+
<center>
A continuación vamos a explicar todos los pasos que se han de seguir para compilar un proyecto de egeasy, para ello usaremos el centro '''Maxorata''' y el modelo '''MaxorataMod''':
+
{|
*Conseguir el diccionario que vamos a compilar y lo copiamos en nuestra carpeta donde pondremos el proyecto  '''I:\Desarrollo\xIvan\Maxorata'''
+
|align="center" |[[Imagen:Asignar_drc7.jpg|thumb|250px|Seleccionamos el formulario que contiene el DRC]]
 +
|align="center" |[[Imagen:Asignar_drc8.jpg|thumb|250px|Seleccionamos el formulario nuevo]]
 +
|align="center" |[[Imagen:Asignar_drc9.jpg|thumb|250px|Y realizamos la asignación]]
 +
|}
 +
</center>
  
*'''I:\Desarrollo\Diccionarios en Explotación\Maxorata :'''sirve de carpetas para hacer copias de seguridad de los diccionarios en elaboración (ya que no se pueden subir al servidor de control de versiones), todas las personas que están desarrollando para este modelo lo pueden coger. A esta carpeta solo se suben los diccionarios que están correctos y siempre se tiene que guardar el archivo que ya está, renombrandolo a .old
+
:'''¿Y qué pasa si introduzco, elimino o modifico un atributo en alguna definición?''' Los atributos no tienen asignado un DRC, por lo que cualquier edición que hagamos sobre ellos, el compilador no detectará posibles modificaciones en los DRC del sistema.
 +
 
 +
==Crear un fichero de proyecto (.npc)==
 +
<p>Como ya hemos comentado en este artículo, a la hora de compilar un proyecto en ODL es necesario especificar el fichero
 +
.npc en el egCompiler.</p>
 +
<p>Este fichero deberá ser creado manualmente por el desarrollador, por lo que vamos a explicar a continuación la información que debe almacenar, la estructura que tiene que adoptar y las funciones para las cuales está destinado este fichero.</p>
 +
<p>Cuando instalamos un centro, la estructura de directorios que tendrá el centro una vez instalado está predefinido en un modelo por defecto llamado ('''Default'''), que tiene la siguiente estructura:</p>
  
* Para generar el diccionario '''Tools --> User Tool Groups --> Generar Diccionario'''
 
:EGcompiler genera 2 archivos: el diccionario (Dictionary.Ndc) y el modelo de nuestro centro (Maxorata.Nmc). En el caso que hayas creado nuevas unidades en el sistema de información saldrá una ventana como la siguiente en donde deberemos seleccionar que unidades generar, cuales liberar (borrar) o hacer coincidir alguna antigua con una nueva.
 
 
<center>
 
<center>
 
{|
 
{|
|align="center" |[[Imagen:Figura_21.JPG|thumb|500px|Proyecto egeasy]]
+
|align="center" |[[Imagen:estructura_default.jpg|thumb|250px|Compilación mediante la consola del sistema]]
 
|}
 
|}
 
</center>
 
</center>
:Está parte es bastante compleja ya que tienes que tener muy claro lo que has hecho o han hecho tus compañeros.
 
  
* Debemos copiar, de la carpeta raíz donde está el proyecto, el diccionario y copiarlo a mano en el servidor donde está alojado realmente tu centro.  
+
<p>En nuestro directorio de desarrollo, crearemos aquellas carpetas (que existan en el modelo '''Default''') que vayamos a modificar. Por ejemplo, si nuestro centro tiene escritos, tendremos que crear una carpeta llamada '''Template documents''', donde almacenaremos los ficheros .rtf de nuestro centro.</p>
:La ruta será: '''S:\Entornos 2002\Banzai\Modelos\MaxorataMod'''
+
 
:'''OJO''': si copiamos el diccionario en otra carpeta nos machacariamos el diccionario de un compañero
+
<p>Una vez creado el modelo del centro, lo instalaremos mediante el egAdmin. Éste comparará el modelo '''Default''' con
*Una vez copiado el diccionario, abrimos egAdmin:
+
nuestro modelo de centro, de manera que las carpetas que se encuentren en ambos modelos serán fusionadas. Es decir, que, por
a.Paramos el centro
+
ejemplo, la carpeta '''Template documents''', donde hemos añadido los ficheros rtf, aparecerá con los ficheros rtf en el  
b.Actualizamos nuestro modelo  
+
directorio de explotación del centro (y no vacío como aparece en el modelo Default).</p>
Herramientas --> Actualizar --> Ruta I:\Desarrollo\xIvan\Maxorata y seleccionamos el archivo maxorata.Nmc.
+
<p>Pero, ¿y cómo interviene el fichero .npc en todo este proceso de compilación e instalación de un centro?</p>
c.Comprobamos nuestro modelo Herramientas --> Comprobar
+
<p>El fichero .npc tiene varias funciones en todo este proceso.</p>
d.Arrancamos el centro
+
<p>Por un lado, informará al compilador de las definiciones que serán compiladas y de las cuales saldrá el diccionario  
 +
resultante. Por otro lado, informará al compilador de aquellas carpetas que se han creado en el directorio de desarrollo y  
 +
que se quieren incluir en el modelo de centro para su posterior instalación. Por ello, es un fichero fundamental para la
 +
compilación de nuestro centro.</p>
 +
<p>La estructura de un fichero .npc debe ser la siguiente:</p>
 +
 
 +
<center>
 +
{|
 +
|align="center" |[[Imagen:estructura_npc.jpg|thumb|250px|Compilación mediante la consola del sistema]]
 +
|}
 +
</center>
 +
 
 +
<p>Las palabras enmarcadas en verde son palabras clave que deben ir en el fichero.</p>
 +
<p>Para el caso de la cabecera, añadiremos un campo donde añadiremos un nombre.</p>
 +
<p>En todos los centros, es necesario crear al menos un fichero de constantes básicas. Este fichero .nc deberá ir especificado en la palabra clave '''Constantes'''. En caso de existir más de un fichero, se especificarán uno debajo de otro.</p>
 +
<p>En caso de querer especificar una carpeta de plantillas de escritos, plantillas de impresión o plantillas de vistas, lo haremos en las palabras clave '''Plantillas_documentos''' para la carpeta [Template documents], '''Plantillas_visualizacion''' para la carpeta [Template views] o '''Plantillas_impresion''' para la carpeta [Template prints].</p>
 +
<p>Hay que tener en cuenta que el directorio de las carpetas se especifica a partir del directorio donde esté alojado el fichero .npc. Si la carpeta [Template documents] está en la misma carpeta que el fichero .npc, no habrá que añadir ninguna ruta.</p>
 +
<p>Por último, tendremos que especificar las definiciones para generar el diccionario. Esto lo haremos bajo la palabra clave '''Definiciones'''. Para ello, indicaremos el nombre de la unidad de cada fichero .ndf con el directorio donde se encuentra el fichero .ndf, tal y como hemos podido ver en la imagen anterior.</p>
 +
 
 +
==Crear un fichero de constantes (.nc)==
 +
<p>Otro tipo de fichero que tiene que ser creado por el desarrollador son los ficheros de constantes (.nc). Estos ficheros especifican las constantes que se utilizan en un centro.</p>
 +
<p>Existen ciertas constantes básicas que deben ser incluidas en un fichero que tiene que llamarse '''CBasicas.nc'''. Estas constantes básicas coinciden en etiqueta con algunas palabras reservadas del propio lenguaje ODL. Esto es así porque en el proceso de compilación las definiciones se crearán en función de los valores de las constantes y no de sus etiquetas.</p>
 +
<p>Por ejemplo, en el conjunto de estas constantes básicas, existe una cuya etiqueta es '''ENTERO''', que tiene valor '''1'''. Cuando en nuestro código ODL definimos un campo entero, en el proceso de compilación la definición del campo será creada con el valor de la constante y no de la etiqueta. A continuación, cuando ejecutemos la aplicación egExplorer, que cargará el diccionario generado por el compilador, leerá que existe una definición de campo con valor 1, que interpretará como un campo entero.</p>
 +
<p>Para que este comportamiento se lleve a cabo, debe existir una referencia en el fichero .npc al fichero .nc de constantes básicas. Esto es debido a que el parámetro que se le pasa al compilador es el fichero .npc de nuestro proyecto.</p>
 +
<p>Aparte de las constante básicas, es posible que el desarrollador quiera declarar nuevas constantes. Esto podrá hacerlo en el mismo fichero '''CBasicas.nc''' o crear otros ficheros .nc para agrupar estas constantes. En caso de crear nuevos ficheros .nc, debemos incluirlos siempre en el fichero .npc.</p>
 +
<p>A continuación, mostramos todas aquellas constantes básicas que son necesarias en cualquier centro:</p>
 +
 
 +
<center>
 +
{|
 +
|align="center" |[[Imagen:constantes_basicas.jpg|border|250px]]
 +
|}
 +
</center>
 +
 
 +
<p>Para incluir nuevas constantes en el fichero, simplemente hay que seguir el formato visto en la imagen, pudiendo declararlas en cualquier parte del fichero. Únicamente habrá que tener cuidado de modificar las constantes básicas o declarar nuevas constantes con etiquetas ya utilizadas.</p>
 +
 
 +
==¿Actualizamos el diccionario, el modelo o el centro?==
 +
Cuando realizamos modificaciones en algunos de los elementos que constituyen el modelo de un sistema de información, es necesario utilizar la aplicación '''egAdmin''' para actualizar los cambios que hemos realizado y que se reflejen en la herramienta '''egExplorer'''. En función de los cambios realizados, será necesario actualizar el diccionario, el modelo o el centro.<p>Por tanto:</p>
 +
:*'''¿Cuándo debo actualizar sólo el diccionario?'''<p>Actualizaremos el diccionario cuando modifiquemos una definición de tipo o creemos una definición de tipo nueva en los ficheros .ndf que se encuentran en el directorio '''''#Source'''''</p>
 +
 
 +
<center>
 +
{|
 +
|align="center" |[[Imagen:actualizardiccionario.jpg|thumb|250px|Actualizar diccionario en egAdmin]]
 +
|}
 +
</center>
 +
 
 +
:*'''¿Cuándo debo actualizar sólo el modelo?'''<p>Si cambiamos o agregamos algún fichero .rtf (plantillas), .nmt (métodos), .csv (representación de datos), scripts SQL, etc. Es decir, todo aquello que no sea un fichero .ndf.</p>
 +
 
 +
<center>
 +
{|
 +
|align="center" |[[Imagen:actualizarmodelo.jpg|thumb|250px|Actualizar modelo en egAdmin]]
 +
|}
 +
</center>
 +
 
 +
:*'''¿Cuándo debo actualizar el diccionario y el centro?'''<p>Actualizaremos el diccionario y el centro cuando incluyamos nuevas definiciones de sistema. Además, cuando creamos tablas nuevas en la base de datos (por ejemplo, nuevas colecciones) o cualquier cambio que afecte a la base de datos. Este caso tiene una particularidad, y es que al tener que actualizar el centro, deberemos pararlo previamente, y una vez actualizado, arrancarlo nuevamente.</p>
 +
 
 +
<center>
 +
{|
 +
|align="center" |[[Imagen:actualizarmodelo.jpg|thumb|250px|Actualizamos primero el modelo]]
 +
|align="center" |[[Imagen:pararcentro.jpg|thumb|250px|A continuación paramos el centro en el botón '''''Parar''''']]
 +
|align="center" |[[Imagen:actualizarcentro.jpg|thumb|250px|Lo actualizamos y arrancamos en el botón '''''Arrancar''''']]
 +
|}
 +
</center>
  
*Trucos:
+
:*'''¿Cuándo debo actualizar el diccionario y reiniciar el centro?'''<p>Cuando cambiamos el nombre a la definición de una tarea o definimos una nueva en nuestro código ODL, evidentemente tendremos que actualizar el diccionario. Pero, a diferencia del primer caso, en el que sólo tenemos que actualizar el diccionario, también es necesario parar el centro y volver a arrancarlo (reiniciarlo), pero sin actualizarlo.</p>
Para evitar estar actualizando el modelo continuamente nos bastará con copiar el diccionario generado al compilar en la carpeta del servidor y reiniciar el centro. Esto es válido para los siguientes casos:
+
*Modificar métodos
+
*Modificar plantillas de documentos (*.rtf)
+
*Modificar propiedades de unidades (campos o atributos)
+
*Modificar sentencias SQL
+
  
== Tarea C: Actualizar ==
+
[[Categoría:Tutoriales]]
== Tarea D: Instalar ==
+
== Tarea E: Crear usuarios ==
+

Revisión actual del 12:55 11 ago 2009

Cuando un centro es modificado, bien sea mediante cambios en el diccionario o mediante cambios en el modelo, es necesario realizar una serie de operaciones para que los cambios realizados se vean reflejados en la aplicación egExplorer.

En este artículo abordaremos aquellos aspectos que influyen en dichas modificaciones, así como los pasos a seguir en función de qué elementos o ficheros del modelo se modifiquen. Para ello, es necesario conocer qué ficheros intervienen en el funcionamiento de un centro, y cómo afectan a éste.

Ejecutando egCompiler

Al crear un proyecto nuevo o modificar uno ya creado, la primera operación a realizar es compilar el proyecto. Si no se encuentran errores en la compilación, nuestro compilador, egCompiler, generará dos ficheros: un diccionario cuya extensión es .ndc y un modelo con extensión .nmc.

Pero, ¿y cómo ejecutamos el compilador?

Para ejecutar el compilador, hay que indicar ciertos parámetros de entrada, ya que el compilador necesita cierta información del proyecto para poder realizar el proceso de compilación.

En concreto, hay un parámetro de entrada fundamental para el compilador, que es el fichero .npc (código de proyecto).

En este fichero se indican, entre otras cosas, la correspondencia entre las definiciones realizadas en ODL, con los ficheros .ndf donde están declaradas. Cualquier definición o fichero .ndf nuevo que se genere deberá ser introducido por el programador en este fichero. Por tanto, deberemos indicar como primer parámetro la ruta de dicho fichero .npc.

Además de este parámetro, que es el único que realmente necesita el compilador, existen otros parámetros opcionales, de forma que podamos configurar ciertos aspectos del compilador. Veamos cuales son:

  • /O: --> Indicaremos el diccionario previo a la compilación para compararlo con el nuevo diccionario a generar.
  • /N: --> Indicaremos el directorio de definiciones.
  • /D: --> Indicaremos el directorio destino donde queramos que se generen el diccionario(.ndc) y el modelo(.nmc). En caso de no especifircarlo se almacenarán en el directorio donde se encuentre el fichero .npc.
  • /S: --> Su inclusión indica que solamente se genere el diccionario y no el modelo.

Una vez conocidos los parámetros que admite egCompiler, utilizaremos la consola del sistema para ejecutarlo. De esta manera podremos introducir los parámetros que nos interesen en cada ejecución. Veamos un ejemplo:

Compilación mediante la consola del sistema

Como habrás visto, lo primero es indicar la ruta del ejecutable del compilador. A continuación, especificamos la ruta del fichero .npc y, seguidamente, añadimos los parámetros opcionales. En este caso, hemos indicado con el parámetro /O: la existencia de un diccionario previo con el que vamos a comparar el nuevo a generar. Con el parámetro /D: indicamos una ruta donde queremos guardar los ficheros de salida que generará el compilador, que en este caso será sólo el diccionario, ya que la inclusión del parámetro /S: así lo indica.

NOTA: En caso de incluir rutas con espacios en blanco en ellas, debemos acotar la ruta completa entre comillas dobles.

Configuración de egCompiler en EditPlus

Es probable que la persona que esté desarrollando en ODL tenga que realizar numerosas y repetitivas compilaciones en su proyecto. Por ello, facilitamos una forma de configurar el egCompiler en un editor de programación, que en este caso, hemos optado por el EditPlus. Sin más preámbulos, veamos cómo configurar dicho editor para ejecutar directamente el compilador desde él:

  • Primer paso: ir a Tools -> Preferences:
Tools -> Preferences
  • Segundo paso: dentro de Preferences, ir a la etiqueta User tools:
Entrar en User Tools
  • Tercer paso: una vez en User tools, hay varias opciones y campos que debemos configurar. En primer lugar, vemos que existen varios grupos. Seleccionamos uno de ellos, y para cambiar el nombre haremos clic en Group Name.... Estos grupos sirven para etiquetar conjuntos de herramientas que definamos en EditPlus, como por ejemplo, en nuestro caso, la configuración del compilador:
Editar el nombre de un grupo
  • Cuarto paso: ahora tenemos que crear una herramienta. Para ello, hacemos clic en Add Tool >>. Nos aparecerá un desplegable, donde seleccionaremos Program para indicar que vamos a configurar una aplicación:
Añadimos una herramienta, en este caso, nuestro compilador
  • Quinto paso: vemos que hay ciertos campos como Menu text, Command, Argument o Initial directory además de ciertas opciones activables:
Introducir datos necesarios para la ejecución del compilador

En Menu text pondremos el nombre que aparecerá en el menú de herramientas para ejecutar el compilador.

En Command introduciremos la ruta en donde está almacenado el ejecutable del egCompiler.

En el campo Argument podremos especificar los argumentos que acepta el egCompiler. En nuestro caso, añadiremos el parámetro /O: (además del fichero .npc como explicamos en el apartado anterior) para que al compilar compare el diccionario previo con el nuevo creado, de manera que pueda detectar los cambios.

A continuación, añadiremos en el campo Initial directory el directorio donde se encuentra el fichero .npc (si no indicamos el directorio destino con el parámetro /D: el compilador almacenará el diccionario y el modelo en este directorio).

Finalmente, activaremos las casillas Capture output para ver los mensajes de compilación en el propio EditPlus (en vez de en una ventana) y Save open files para que al compilar se guarden los ficheros abiertos del proyecto en cuestión. Los ficheros abiertos que no pertenezcan al proyecto no se guardarán.

Ahora veremos que la opción Compilar estará disponible en el menú Tools o Herramientas:

El compilador ya se puede utilizar desde EditPlus

Compilando...

Una vez hemos ejecutado nuestro compilador, bien mediante la consola del sistema, o bien mediante un editor, el compilador informará al programador de aquellas definiciones que, o bien son nuevas y puede generar un DRC en la base de datos para cada una de ellas, o bien detecta definiciones anteriores que ya no se encuentran en el código (en comparación con un modelo anterior) y, por tanto, es posible la liberación de su DRC. Existe otra operación, que es asignar el DRC de una definición que vamos a eliminar a una nueva que vamos a generar. De esta forma conservamos los valores que se han creado a partir de la definición que vamos a eliminar.

Como ya sabemos, una vez liberados, generados o asignados los DRCs, el compilador generará un diccionario y un modelo.

Veamos un ejemplo práctico:

  • En primer lugar, vamos a generar por primera vez nuestro modelo, de forma que se generará un DRC para todas las definiciones. Podemos ir generando las nuevas definiciones seleccionando de una en una con el botón Generar, o bien utilizar el botón Generar todos.

    Nuestro sistema de información está constituído por dos definiciones de tipo (Cliente y Expediente) con sus respectivas colecciones (Clientes->Contenido) y Expedientes->Contenido). Además también hay definida una habitación Mi organización para ubicar dichas colecciones y una definición de rol para acceder a los recursos definidos:

Generamos los DRC de las definiciones por primera vez
  • Ahora, hemos decidido eliminar ciertas definiciones, de forma que, al compilar, se comparará el diccionario creado en el paso anterior con el nuevo, y detectará aquellas definiciones que ya no se encuentren en el código. Al igual que al generar DRCs, existe un botón para ir liberando uno a uno cada DRC mediante el botón Liberar o bien liberarlas todas automáticamente, sin tener que seleccionar ninguna, con el botón Liberar todas:
Eliminamos la definición de tipo Expediente, así como todo aquello relacionado con dicha definición (colección, ubicación y permisos)
  • La tercera posibilidad que nos podemos encontrar es la asignación de un DRC, correspondiente a una definición que vamos a eliminar, a una definición nueva que vamos a generar. En este caso debemos tener en cuenta las posibilidades que se nos pueden presentar, pues pueden ser varias.

    Normalmente, esta operación se suele realizar al cambiar el nombre de alguna definición, de forma que nos puede interesar asignar el DRC de la definición anterior a la nueva definición para que los valores generados anteriormente al cambio de nombre se mantengan en la nueva definición.

    Otra posibilidad es, por ejemplo, cambiar el tipo de un campo. En este caso, se podrá asignar el DRC del campo previo al nuevo campo, pero las consecuencias de dicho cambio tendrá que valorarlas el programador, pues puede no conseguirse el efecto deseado.

    Un nuevo caso, en el que vamos a basar nuestro ejemplo, puede ser el cambio de nombre de un formulario, junto con el cambio de nombre de un campo incluído en dicho formulario. En cuanto a los formularios, hay que tener en cuenta que deben tener el mismo número de campos, además, los campos deben tener el mismo nombre.

    Vayamos viendo los pasos a realizar uno a uno, de manera que los vayamos comentando:
Relación de las definiciones a liberar o a generar
Vemos que el compilador ha detectado definiciones que, o bien pueden ser liberadas, o bien pueden ser generadas. Pero nuestra intención es asignar el DRC del formulario Datos generales al formulario Datos generales del cliente. Además, ha detectado que el campo DNI ha cambiado de nombre, detectando un nuevo campo denominado NIF así como el cambio de nombre de la columna DNI de la colección Clientes por NIF:
Primero seleccionamos la definición del DRC que vamos a asignar
Seleccionamos la definición nueva, indicando que el DRC será asignado a esa definición
Y generamos la asignación con el botón Asignar
Ya tenemos realizada la asignación de la columna que ha cambiado de nombre en la colección Clientes. Ahora vamos a asignar el formulario. Para ello, hay que tener en cuenta que un campo ha cambiado de nombre, y, por tanto, deberemos asignar dicho DRC antes de hacerlo con el formulario:
Seleccionamos el campo que contiene el DRC
Seleccionamos el campo nuevo
Y generamos la asignación, al igual que en el caso anterior
Una vez tratado el campo que ha cambiado de nombre, ya no hay restricciones para asignar el DRC del formulario Datos generales al formulario Datos generales del cliente:
Seleccionamos el formulario que contiene el DRC
Seleccionamos el formulario nuevo
Y realizamos la asignación
¿Y qué pasa si introduzco, elimino o modifico un atributo en alguna definición? Los atributos no tienen asignado un DRC, por lo que cualquier edición que hagamos sobre ellos, el compilador no detectará posibles modificaciones en los DRC del sistema.

Crear un fichero de proyecto (.npc)

Como ya hemos comentado en este artículo, a la hora de compilar un proyecto en ODL es necesario especificar el fichero .npc en el egCompiler.

Este fichero deberá ser creado manualmente por el desarrollador, por lo que vamos a explicar a continuación la información que debe almacenar, la estructura que tiene que adoptar y las funciones para las cuales está destinado este fichero.

Cuando instalamos un centro, la estructura de directorios que tendrá el centro una vez instalado está predefinido en un modelo por defecto llamado (Default), que tiene la siguiente estructura:

Compilación mediante la consola del sistema

En nuestro directorio de desarrollo, crearemos aquellas carpetas (que existan en el modelo Default) que vayamos a modificar. Por ejemplo, si nuestro centro tiene escritos, tendremos que crear una carpeta llamada Template documents, donde almacenaremos los ficheros .rtf de nuestro centro.

Una vez creado el modelo del centro, lo instalaremos mediante el egAdmin. Éste comparará el modelo Default con nuestro modelo de centro, de manera que las carpetas que se encuentren en ambos modelos serán fusionadas. Es decir, que, por ejemplo, la carpeta Template documents, donde hemos añadido los ficheros rtf, aparecerá con los ficheros rtf en el directorio de explotación del centro (y no vacío como aparece en el modelo Default).

Pero, ¿y cómo interviene el fichero .npc en todo este proceso de compilación e instalación de un centro?

El fichero .npc tiene varias funciones en todo este proceso.

Por un lado, informará al compilador de las definiciones que serán compiladas y de las cuales saldrá el diccionario resultante. Por otro lado, informará al compilador de aquellas carpetas que se han creado en el directorio de desarrollo y que se quieren incluir en el modelo de centro para su posterior instalación. Por ello, es un fichero fundamental para la compilación de nuestro centro.

La estructura de un fichero .npc debe ser la siguiente:

Compilación mediante la consola del sistema

Las palabras enmarcadas en verde son palabras clave que deben ir en el fichero.

Para el caso de la cabecera, añadiremos un campo donde añadiremos un nombre.

En todos los centros, es necesario crear al menos un fichero de constantes básicas. Este fichero .nc deberá ir especificado en la palabra clave Constantes. En caso de existir más de un fichero, se especificarán uno debajo de otro.

En caso de querer especificar una carpeta de plantillas de escritos, plantillas de impresión o plantillas de vistas, lo haremos en las palabras clave Plantillas_documentos para la carpeta [Template documents], Plantillas_visualizacion para la carpeta [Template views] o Plantillas_impresion para la carpeta [Template prints].

Hay que tener en cuenta que el directorio de las carpetas se especifica a partir del directorio donde esté alojado el fichero .npc. Si la carpeta [Template documents] está en la misma carpeta que el fichero .npc, no habrá que añadir ninguna ruta.

Por último, tendremos que especificar las definiciones para generar el diccionario. Esto lo haremos bajo la palabra clave Definiciones. Para ello, indicaremos el nombre de la unidad de cada fichero .ndf con el directorio donde se encuentra el fichero .ndf, tal y como hemos podido ver en la imagen anterior.

Crear un fichero de constantes (.nc)

Otro tipo de fichero que tiene que ser creado por el desarrollador son los ficheros de constantes (.nc). Estos ficheros especifican las constantes que se utilizan en un centro.

Existen ciertas constantes básicas que deben ser incluidas en un fichero que tiene que llamarse CBasicas.nc. Estas constantes básicas coinciden en etiqueta con algunas palabras reservadas del propio lenguaje ODL. Esto es así porque en el proceso de compilación las definiciones se crearán en función de los valores de las constantes y no de sus etiquetas.

Por ejemplo, en el conjunto de estas constantes básicas, existe una cuya etiqueta es ENTERO, que tiene valor 1. Cuando en nuestro código ODL definimos un campo entero, en el proceso de compilación la definición del campo será creada con el valor de la constante y no de la etiqueta. A continuación, cuando ejecutemos la aplicación egExplorer, que cargará el diccionario generado por el compilador, leerá que existe una definición de campo con valor 1, que interpretará como un campo entero.

Para que este comportamiento se lleve a cabo, debe existir una referencia en el fichero .npc al fichero .nc de constantes básicas. Esto es debido a que el parámetro que se le pasa al compilador es el fichero .npc de nuestro proyecto.

Aparte de las constante básicas, es posible que el desarrollador quiera declarar nuevas constantes. Esto podrá hacerlo en el mismo fichero CBasicas.nc o crear otros ficheros .nc para agrupar estas constantes. En caso de crear nuevos ficheros .nc, debemos incluirlos siempre en el fichero .npc.

A continuación, mostramos todas aquellas constantes básicas que son necesarias en cualquier centro:

Constantes basicas.jpg

Para incluir nuevas constantes en el fichero, simplemente hay que seguir el formato visto en la imagen, pudiendo declararlas en cualquier parte del fichero. Únicamente habrá que tener cuidado de modificar las constantes básicas o declarar nuevas constantes con etiquetas ya utilizadas.

¿Actualizamos el diccionario, el modelo o el centro?

Cuando realizamos modificaciones en algunos de los elementos que constituyen el modelo de un sistema de información, es necesario utilizar la aplicación egAdmin para actualizar los cambios que hemos realizado y que se reflejen en la herramienta egExplorer. En función de los cambios realizados, será necesario actualizar el diccionario, el modelo o el centro.

Por tanto:

  • ¿Cuándo debo actualizar sólo el diccionario?

    Actualizaremos el diccionario cuando modifiquemos una definición de tipo o creemos una definición de tipo nueva en los ficheros .ndf que se encuentran en el directorio #Source

Actualizar diccionario en egAdmin
  • ¿Cuándo debo actualizar sólo el modelo?

    Si cambiamos o agregamos algún fichero .rtf (plantillas), .nmt (métodos), .csv (representación de datos), scripts SQL, etc. Es decir, todo aquello que no sea un fichero .ndf.

Actualizar modelo en egAdmin
  • ¿Cuándo debo actualizar el diccionario y el centro?

    Actualizaremos el diccionario y el centro cuando incluyamos nuevas definiciones de sistema. Además, cuando creamos tablas nuevas en la base de datos (por ejemplo, nuevas colecciones) o cualquier cambio que afecte a la base de datos. Este caso tiene una particularidad, y es que al tener que actualizar el centro, deberemos pararlo previamente, y una vez actualizado, arrancarlo nuevamente.

Actualizamos primero el modelo
A continuación paramos el centro en el botón Parar
Lo actualizamos y arrancamos en el botón Arrancar
  • ¿Cuándo debo actualizar el diccionario y reiniciar el centro?

    Cuando cambiamos el nombre a la definición de una tarea o definimos una nueva en nuestro código ODL, evidentemente tendremos que actualizar el diccionario. Pero, a diferencia del primer caso, en el que sólo tenemos que actualizar el diccionario, también es necesario parar el centro y volver a arrancarlo (reiniciarlo), pero sin actualizarlo.