Full de tips...
La experiencia nos ha demostrado que conocer ciertos pequeños detalles suele ahorrarnos mucho tiempo en el desarrollo de nuestras aplicaciones, generalmente, estas indicaciones o procedimientos aparecen en el manual, pero es sabido que casi nunca lo leemos; aunque hay otros que definitivamente no aparecen en él, o nos cuesta entenderlo.
Y aunque habemos algunos con amplia experiencia, simpre hay algo que no hemos descubierto aún, pero también es importante compartir estos conocimientos con aquellos que comienzan a hacer magia.
A continuación se presentan algunos de éstos, llámense tips, trucos o procedimientos sencilos,pueden convertir nuestras omisiones o desconocimiento en productividad.
En el panel derecho tienes los accesos por categoría o utilidad.
Conversiones
EL SALVADOR
Convertir un menú contextual a pulldown
Cuando se importan programas de versiones anteriores a la 7, todos los menús son creados como contextuales:
a. En el modo toolkit, presiona Shift+F10 (Exportar aplicaciones)
b. Seleccione Operación: Exportar, Tipo: Menus
b. Editar y grabar el archivo exportado sustituyendo la línea: MENU={TYP=2,NAME="Default Context menu", por MENU={TYP=2,NAME="Default Pulldown menu"
c. Importar archivo editado (Shift + F10 -> Operación: Importar), contestando Sí a la pregunta de sobreescribir los dos tipos de menús, si lo quieres sustituir, responde NO si quieres tener ambos: contextual y pulldown.
Cambiar el tamaño de un campo, tipo o modelo numérico sin convertir la tabla
En algunas ocasiones los errores de diseño de tablas nos obliga a incrementar o reducir el tamaño de algunos campos, esto implica en la mayoría de los casos una conversión del archivo, lo cual, dependiendo del número de registros y de la base de datos utilizada, puede tomar demasiado tiempo.
En el caso de los campos numéricos, hay una excepción, se puede cambiar el tamaño del campo definido en el formato, siempre y cuando no cambie el tamaño de almacenamiento de Magic (Storage size).
Ejempo: Los campos numéricos de 1 a 4 tienen un tamaño de almacenaje por defecto de 2, puedes cambiar un campo con tamaño 2 el cual te permite hasta 100 registros (utilizando el 0 como valor del primer registro) a uno con tamaño 4 permitiéndote hasta 10,000 registros; esto sin tener que convertir la tabla. Pero, si intentas con tamaño 5 o mayor, el tamaño de almacenaje cambia y entonces sí es necesario convertir la tabla.
Si tus campos han heredado el tamaño de un tipo o modelo, también se puede hacer el cambio sin necesidad de convertir las tablas afectadas. Debes ver si cambia el tamaño de almacenaje en una tabla, si se mantiene, estarás seguro que no te afectará en las demás. Recuerda que los cambios se verán solamente en aquellos campos que conservan la característica heredada.
Importar datos desde un archivo ASCII lo más rápido posible.
Se pueden importar mucho más rápido los datos de un archivo ASCII generando un programa de importación y abriendo el archivo en modo Reindex:
a. Shift+F2 - Archivos
b. Sobre el archivo a importar Ctrl+G
c. Seleccione Modo: Generar, Opción: Importar (Recuerde que puede poner el programa generado en un folder específico creado anteriormente - V9)
d. Presione el botón Aceptar o Enter
e. Shift+F3 - Programas
f. Ctrl+Fin - Localiza programa recién generado (Si está en un folder, primero selecciónelo)
g. F5 entrar a modificar programa
h. Ctrl+D - Bases de datos
i. Seleccionar Acceso: Escribir, Compartir: Ninguno, Abrir: Reindex
j. Guarde el programa y córralo con F7.
Convertir
Procesos batch
Velocidad en los procesos batch
Minimizar la ventana
Además de revisar que los enlaces entre tablas y la llave de ordenamiento de la tabla principal estén correctas, la velocidad se mejora en un buen porcentaje si se minimiza la ventana, esto es porque magic no tiene que desplegar cada registro y efectivamente se anula este tiempo de despliegue en la pantalla.
Desplegar solo un campo
Si quieres que el usuario vea que algo está pasando, puedes desplegar solo un campo que tenga valores únicos o hacer tu interfaz de progreso de la tarea, aunque ésto último puede en algunos casos volver lento el proceso de nuevo.
A partir de la En las versión 9.30 SP5, los programas batch no abren la ventana por defecto, esto confirma la teoría anterior.
Batch en bases de datos relacionales
Si tus datos están en una base de datos relacional, lo mejor para aumentar la velocidad del proceso es utilizar un 'Query' o comando SQL, pues con esto se está obviando la interacción de Magic con el RDBMS para cada registro o página.
Todos los RDBMS tienen un interfaz o front end para el manejo de las bases de datos, algunos tienen la opción de importar desde archivos de texto (y de otras bases de datos), esta opción puede ser más rápida que si se hace a través de un programa en Magic.
Diseño
Utilizar los tipos o modelos
Este tip está dedicado principalmente a los que venimos programando desde versiones anteriores a la 7 en las que no existían los tipos ni los modelos.
Definir los atributos de los campos, formas y otros objectos y luego aplicarlos en las tablas y programas, definitivamente reduce el tiempo en el desarrollo de cualquier aplicación.
Si la aplicación se ha importado de una versión anterior a la 7, es importante tomarse el tiempo para crear los tipos o modelos y luego asignarlos a los campos respectivos, con esto lograremos una mejor productividad en los cambios que pueda tener la aplicación posteriormente.
Definir programas de consulta
Ya sea en las propiedades de los campos en el repositorio de tablas o en el tipo o modelo, definir el programa de consulta respectivo le ahorra tiempo de programación, pues cuando el programa de consulta maneja solamente un parámetro, no será necesario incluir la instrucción 'llamar programa' en el programa donde se generará la consulta, además esto le permitirá al usuario hacer un 'zoom' cuando se encuentre en los modos rango o búsqueda lo cual no se logra si solo se incluye el llamado del programa en el principal del registro.
Campos memo
Utilice el atributo memo para los campos alfanuméricos largos que no formarán parte de una llave de ordenamiento (de todas formas no se puede incluir un campo memo en una llave), con esto se logra ahorrar espacio en el dicso y obviamente en los respaldos de información, ya que el manejador de datos solo guarda los espacios utilizados con caracteres, a diferencia de los campos tipo alfa de los que se guardan los espacios no utilizados al final de la cadena 'string'. Además el manejo de los registros en general es más rápido.
Llaves tipo y número
Cuando se tiene una llave única de dos segmentos (pueden ser más) la mejor forma de definir la llave es poniendo primero el segmento del campo que se supone será más variado en contenido y luego el que tendrá mayor repetición de contenido en el universo de datos.
Por ejemplo, si se van a registras varios tipos de documentos en una tabla, de los cuales obviamente habrán correlativos repetidos, la forma tradicional de definir la llave única sería Por tipo y número de documento, pero la mejor forma es Por número y tipo, esto hace que el puntero trabaje de forma más rápida, ya que inmediatamente se reduce el rango de búsqueda a una muestra muy pequeña que serían todos los tipos de documentos con el número o rango de números que necesitamos. Para ilustrar mejor el ejemplo, supongamos que tenemos 10,000 Facturas y 10,000 Recibos, al colocar una búsqueda de un número de factura utilizando la primera llave, tenemos que lo primero que hace el puntero es eliminar de la muestra los 10,000 recibos y luego localizar el índice del número de factura que buscamos, pero la búsqueda es entre 10,000 registros, y aunque se supone que no es una búsqueda lineal, siempre será más lenta que si se utliza la segunda llave, en la que se eliminan de inmediato de la muestra todos los documentos que no coinciden con el número (o que no están dentro de un rango definido de números) y solamente quedan,.en este caso dos documentos en los que buscar.
En un proceso batch o en un despliegue de datos en los que se tiene un enlace ('link') de cualquir tipoc con un archivo de estos, se puede observar un incremento muy marcado en el rendimiento del programa en ejecución.
Componentes
El uso de componentes nos permite hacer diseños de aplicaciones más compactas, ya que las definiciones de tablas y programas comunitarios se hacen solo una vez en toda la aplicación. Además los componentes son un elemento muy útil en la integración entre los diferentes módulos, ya que nos evitamos el hecho de tener que exportar tablas y programas de una aplicación a otra (muchos hemos experimentado problemas de consistencia en la relatividad de los objetos importados de otras aplicaciones en los que debemos conservar la posición de tablas y programas de las aplicaciones fuente).
Los componentes nos permiten compartir programas utilitarios con otros programadores, quienes pueden fácilmente integrar estas utilidades en sus aplicaciones.
Ver: Cómo crear y utilizar los componentes. (Fragmento del curso Migración a eDeveloper V9 proporcionado por ROCA Sistemas de México)
Utilizar los folders
A partir de la versión 9, los repositorios de modelos, tablas y programas se pueden clasificar en carpetas, esto es muy recomendado para controlar aplicaciones grandes, ya que la localización de programas y tablas es mucho más fácil y rápida y toda la aplicación está mejor organizada.
Misceláneos
Wildcards (*,?)
A partir de la versión 9 se pueden utilizar al principio de la búsqueda en los repositorios. Ejemplo: *clientes encontrará el objeto que contenga la cadena 'clientes' ya sea al principio o en medio.

