Colecciones en el modelo

5 views
Skip to first unread message

dvilchez

unread,
Jan 12, 2009, 6:35:50 AM1/12/09
to CodeGeneration
Hola, llevo toda la mañana dándole vueltas y no encuentro la forma de
acceder directamente mediante un indice a un elemento de una colección
definida en el modelo.

Mi modelo:
<Bind >
<Mapeos>
<Mapeo Ruta="TIPFUNC"/>
<Mapeo Ruta="CANELE" />
</Mapeos>
</Bind>

quiero hacer algo tal que así:
Bind.Mapeos[0].Ruta. ¿Se puede?

Muchas gracias de antemano,

Saludos,

Omar del Valle

unread,
Jan 12, 2009, 7:12:14 AM1/12/09
to codegen...@googlegroups.com
A ver.. haciendo estas preguntas es muy difícil poder ayudarlos..

Por lo que veo tienes un modelo reflejado en un XML, pero ¿qué usas
para leer el modelo?

Javascript, C#, PHP, Java, AjBasic, MetaData de MyGeneration.. en
fin.. la forma de acceder depende mucho de lo que estés usando para
interpretar ese XML.

Salu2
Omar

David Vílchez

unread,
Jan 12, 2009, 7:51:17 AM1/12/09
to codegen...@googlegroups.com
Hola, gracias por tu pronta respuesta:

Hasta que tu lo has dicho ni siquiera sabia que existiese mas de una forma de leer el modelo, la verdad es que no hay, o al menos yo no he encontrado, mucha documentación y estoy peleando con los ejemplos y "husmeando" el código de ajgenesis.
Lo estoy haciendo tal y como hace la consola:

 modelo = builder.GetObject(formulario.ToXml().DocumentElement) as DynamicObject;

Saludos,

2009/1/12 Omar del Valle <omar...@gmail.com>

Omar del Valle Rodríguez

unread,
Jan 12, 2009, 1:37:13 PM1/12/09
to codegen...@googlegroups.com
Hola David
 
Creo que no me entendiste.. un modelo en formato XML se puede leer con todas las herramientas que te mencioné.. En AjGenesis, que es el que ahora sé que usas, no existe un modelo propietario.. por eso mirando un archivo XML no puedo identificar lo que estás usando para interpretarlo..
 
Dicho esto.. te comento que sigo sin entender qué es exactamente lo que intentas.. si lo que deseas es usar AjGenesis para generar algún artefacto, y dicho artefacto se rige por un modelo escrito por ti.. entonces no entiendo la instrucción de abajo.. a ver. te repito que no logro entender de forma general lo que deseas hacer..
 
Por si de algo te sirve.. te pongo un ejemplo de como interactúa AjGenesis con un modelo.
 
Primero.. AjGenesis no se entiende con el modelo directamente.. sino que se entiende con AjBasic, que es el lenguaje que interpreta AjGenesis para la generación.
 
 
En AjBasic, una posible lectura e interpretación del modelo pudiera ser de la siguiente manera:
 
--------
TransformerManager.Transform("${TemplateDir}\EntityForModel.tpl","${ModelDir}\MiModelo.xml",Environment)
--------
 
En este caso, estás indicando a AjGenesis que debe transformar el XML que le indicas como modelo usando un template (tpl) definido por ti. Dentro del tpl, AjGenesis te permite escritura simplificada para acceder al modelo, para tu caso sería algo así:
 
Bind.Mapeos[0].Ruta
 
Yo no se si de esta forma AjGenesis puede saber que "Ruta" es una propiedad y no intente buscarla como item dentro del XML.. pero si sé que puedes hacerte la vida más fácil cambiando tu modelo y de paso AjGenesis seguro te dará las gracias..
 
Si "Mapeo" solo tiene una propiedad "Ruta", puedes cambiarlo a algo así:
<Bind >
        <Mapeos>
                <Ruta>TIPFUNC<Ruta/>
                <Ruta>CANELE<Ruta/>
        </Mapeos>
 </Bind>
 
y si vas a tener más propiedades, pues puedes cambiarlo a algo así:
<Bind >
        <Mapeos>
            <Mapeo>
                <Ruta>TIPFUNC<Ruta/>
                <Otro>OTRO</Otro>
            </Mapeo>
            <Mapeo>
                <Ruta>CANELE<Ruta/>
                <Otro>Y OTRO</Otro>
            </Mapeo>
        </Mapeos>
 </Bind>

 
Quizás ahora me digas que no es esto de lo que hablabas pero igual.. ahí queda Winking smile emoticon jajaja. Angel, si he cometido algún error.. sálvame. por favor jeje
 
Salu2
Omar

David Vílchez

unread,
Jan 13, 2009, 3:17:28 AM1/13/09
to codegen...@googlegroups.com
Hola Omar,
tienes razón, no se porque pensé que el grupo era solo de ajgenesis, lo siento.
Con respecto al problema, diste en el clavo, es justo lo que estaba preguntando pero el problema no es determinar si Ruta es un atributo o un elemento. En las pruebas que yo hice el acceso por indice a la colección no funciona.

Es decir, hice esta prueba Bind.Mapeos[0].GetType() y no devuelve nada.

Al final solucione mi problema dando un rodeo pero me interesa saber si esto se puede hacer.

Gracias y saludos.

2009/1/12 Omar del Valle Rodríguez <omar...@gmail.com>

Angel "Java" Lopez

unread,
Jan 13, 2009, 5:22:09 AM1/13/09
to codegen...@googlegroups.com
Hola gente!
 
David, hmmm.... por lo que entiendo, quieres manipular, usar el modelo desde C#.
 
Bien, en principio, ese modelo se carga en DynamicObject, y las colecciones en DynamicListObject. Estas clases estan preparadas para ser accedidas desde AjBasic o AjSharp, directamente como
 
Bind
Bind.Mapeos
 
En AjBasic se podria poner
 
Lista = Bind.Mapeos.GetList()
 
y despues accder con
 
Lista.Item(0)
 
(no he necesitado acceder de esta forma, por nro, a ningun modelo de los ejemplos, en general, las colecciones se recorren, y se procesan, o se van consiguiendo subcolecciones, tipo for each Property in Entity.Properties where Property.Type = "Reference")
 
En un lenguaje tipado como C#, habria que trabajar mas, creo que seria
 
((DynamicListObject) Bind.GetValue("Mapeos")).GetList()[0]
 
No se si leyeron en mi blog, que el modelo ahora tambien puede ser texto, y esta en camino de poder leerse desde Excel. Tambien ya hay una version de AjSharp para probar, pero sin estar todavia integrado a AjGenesis 0.5.1 (la version en desarrollo en el source code de Codeplex)
 
Nos leemos!
Angel "Java" Lopez
 
----- Original Message -----
Sent: Monday, January 12, 2009 10:51 AM
Subject: Re: Colecciones en el modelo

David Vílchez

unread,
Jan 13, 2009, 6:06:52 AM1/13/09
to codegen...@googlegroups.com
Hola Ángel,
es justo lo que andaba buscando, lo pruebo y te digo. También pongo en tareas pendientes probar AjSharp.

Saludos,

2009/1/13 Angel Java Lopez <ajlop...@gmail.com>
Reply all
Reply to author
Forward
0 new messages