viernes, 30 de noviembre de 2007

Teoría: Indirección

La indirección, permite entre otras muchas cosas multiplicar la potencia de muchos procesos...

Los ejemplos más claros son los de guardar en una tabla de parametrización una serie de registros con información de TI (Estructura de nodo) y campos, de tal forma que al recorerlos podamos generar nuevas salidas.

Existe por otro lado una leve desventaja y es que Meta4 PeopleNet, no puede generar dependencias por indirección, por lo que perderemos la funcionalidad de la pestaña de los items "Dependencias" para aquellos items que, como ya he dicho, se vean involucrados en llamadas de indirección.

Las funciones Ln4 más comunes que se suelen usar son:

  1. Call

    • Para llamadas a métodos o conceptos; Call(Argumentos, Nodo, Metodo); por ejemplo: Call(0,"CXX_NODO","MOVETO") o Call("CXX_NODO","BEGIN"). Hasta se pueden anidar: Call(Call("CXX_NODO","GETCURRENT") + 1 ,"CXX_NODO","MOVETO")

  2. GetItem
    • Para poder recuperar valores de campos, conceptos o propiedades GetItem(Nodo,Item,Registro); por ejemplo: GetItem("CXX_NODO","CAMPO1",0). También se puede usar GetItem("CXX_NODO","CAMPO1",-1) para recuperar valores de ámbito nodo o bloque.

  3. SetItem
    • Para poder insertar valores en campos, conceptos o propiedades SetItem(Nodo,Item,Registro,Valor); por ejemplo: SetItem("CXX_NODO","CAMPO1",0,NullValue()).

Otras funciones muy usadas serían las que nos permitirán saber desde código Ln4 el ID del nodo o del Meta4Object en el que nos encontramos: GetThisNodeID() y GetChannelID() respectivamente.

Un ejemplo de tratamiento de datos con indirección lo tenéis en: Post:Exportación genérica a Ms Excel

jueves, 29 de noviembre de 2007

Importación desde un Ms Excel

La forma rápida que la gente hace es pasar la hoja de Ms Excel a texto y luego usar las importaciones... pero eso a veces no es posible porque lo debe hacer el usuario y no un desarrollador. (Recordemos que las importaciones son una herramienta del desarrollador (M4DevClient) y no de usuario (M4DistClient o RichWeb))

Yo utilizo una forma que la verdad es rápida y permite hacer comprobaciones según se importa información.

Un ejemplo; los usuario de RRHH reciben todas las semanas una hoja Ms Excel con un listado de los nuevos teléfonos dados por el dpt. de sistemas, es decir, vamos a importar números de teléfono de tipo "Oficina" de un hoja Ms Excel donde el formato es el siguiente: DNI (en la columna A) y Teléfono (en la columna B).


Para ello crearemos un M4Object CXX_IMPORTAR_TELEFONOS con 3 nodos:

CXX_IMP_TEL_ROOT (Nodo principal) -> No tendrá campos, servirá para la ejecución de la importación. Creamos:

  • una propiedad llamada CXX_EXCEL_FILE; de ámbito nodo y tipo long (es donde el usuario podrá dejar la ruta al excel a importar que se pedirá en presentación)
  • un método llamado CXX_IMPORT de ámbito nodo, con el siguiente código: >CXX_IMPORT.TXT

CXX_AUX_PERSONA (Nodo libre) -> Cargaremos los datos de la persona por DNI (STD_SSN).

  • Añadiremos una propiedad: PRP_STD_SSN, de ámbito nodo, tipo cadena variable de 11 posiciones y NO visible.
  • La sentencia será: SELECT @STD_ID_PERSON = A.STD_ID_PERSON, @STD_SSN = A.STD_SSN FROM &STD_PERSON A WHERE (A.STD_SSN = @PRP_STD_SSN).
  • Crearemos un método: CXX_GET_ID_PERSON(ARG_STD_SSN cadena variable de 11 posiciones) ambito nodo, tipo cadena variable de 9 posiciones. El código será el siguiente: CXX_GET_ID_PERSON.TXT

CXX_IMP_AUX_PHONE (Nodo libre) -> Guardaremos el nuevo teléfono.

  • La sentencia será: SELECT @STD_ID_PERSON = A.STD_ID_PERSON, @STD_DT_START = A.STD_DT_START, @STD_DT_END = A.STD_DT_END, @STD_ID_LOCATION_TYPE = A.STD_ID_LOCATION_TYPE, @STD_ID_LINE_TYPE = A.STD_ID_LINE_TYPE, @STD_PHONE = A.STD_PHONE FROM &STD_PHONE_FAX A

La presentación, CXX_IMPORTAR_TELEFONOS quedaría algo así como:



Como temas especiales los dos botones tendrían estos códigos OBL:

a) "Abrir explorador de windows" (Botón de la carpeta) bttBROWSER.txt

b) "Visualizar el documento" (Botón de la lupa) bttVIEW.txt

Espero que os sirva

Exportación genérica a Ms Excel

Las posibilidades que se tiene importando-exportando a Excel en Meta4 PeopleNet son muchísimas...

Me encanta, personalmente, realizar consultas mediante opciones de menú donde obtengas un resultado en pantalla y luego, darle al usuario la posibilidad de exportarlo a Excel o a texto, o incluso yendo más allá permitir planificar una tarea si la exportación va a ser grande [Esto será motivo de otro Post].

Un ejemplo de exportación genérico que me gusta hacer es el siguiente.

En tu Meta4Object créate una Estructura de nodo: llamémosla CXX_AUX_ITEMS con la siguiente sentencia:

Esta estructura te cargará los ítems de tipo campo, concepto y propiedad de una estructura de nodo dada... [Lo veréis más adelante]
Nos falta añadir un par de métodos a la estructura CXX_AUX_ITEMS:
  • DESTROYBLOCK, para destruir el contenido, ámbito bloque.
  • CXX_NORMALIZAR_STRING(argumento ARG_CADENA de tipo long) devuelve LONG, ámbito nodo, que lo que hará es quitar los códigos de retorno que el Ms Excel no controla (sobre todo para el tema de campos comentario o campos de tipo long). El código es: CXX_NORMALIZAR_STRING.txt

y una propiedad para el filtro: ARG_ID_TI de ámbito nodo "No Visible" y de tipo Candena variable de 30 posiciones

En el nodo donde queráis hacer la exportación, crea un alias contra el Meta4Object "EXCEL"

Creáis un método CXX_EXPORT_EXCEL "Exportación a Ms Excel", de ámbito Nodo, que esté en cliente y metéis el siguiente código: CXX_EXPORT_EXCEL.txt

La estructura CXX_AUX_ITEMS la podéis usar donde queráis... por que es genérica siempre que se ejecute el método CXX_EXPORT_EXCEL desde el nodo que queramos exportar... si lo queremos ejecutar desde otro sitio habría que cambiar ligeramente el código.

Esto sería un ejemplo de lo que obtendríamos:


Espero que os sirva...