SlideShare una empresa de Scribd logo
1 de 131
Descargar para leer sin conexión
menttes
 corporate training




                      Desarrollo de Productos con 
                      Archetypes y ArchGenXML

                         Sebastian, Ferreyra

                         info@menttes.com
¿Qué es UML?




 UML son las siglas para Unified Modeling Language;
     que en castellano quiere decir: Lenguaje de
   Modelado Unificado. Para comprender que es el
  UML basta con analizar cada una de las palabras
           que lo componen por separado.




                                           menttes
Lenguaje



  UML es, precisamente, un lenguaje. Lo que implica
  que éste cuente con una sintaxis y una semántica.
     Por lo tanto, al modelar un concepto en UML,
    existen reglas sobre cómo deben agruparse los
    elementos del lenguaje y el significado de esta
                       agrupación.




                                           menttes
Modelado




   UML es visual. Mediante su sintaxis se modelan
   distintos aspectos del mundo real que permiten
  una mejor interpretación y entendimiento de éste.




                                           menttes
Unificado




  Por que unifica varias técnicas de modelado en una
                          única. 




                                            menttes
UML Tools




   ArchGenXML procesa modelos almacenados en
formato XMI. Este formato XML no esta pensado para
ser escrito en un editor de texto plano ni en un editor
     basado en XML, por lo tanto se debe usar una
herramienta de diseño UML. A continuación damos un
   listado de las herramientas UML mas conocidad




                                              menttes
UML Tools - Poseidon



1) Software comercial
2) Escrito en Java, corre en la mayoria de las
   plataformas
3) Basado en ArgoUML
4) Almacena el modelo en formato XMI + información
   del diagrama en archivos .zuml (archivos zip)
5) Es bastante lento
6) Necesita mucha memoria y una rapida CPU

Website y download - www.gentleware.com


                                          menttes
UML Tools - ArgoUML



1) Software libre
2) Escrito en Java, corre en la mayoría de las
   plataformas
3) Almacena el modelo en formato XMI + información
   del diagrama en archivos .zuml (archivos zip)
4) No posee undo
5) Conocidas, pero no criticas bugs

Website y download - argouml.tigris.org



                                          menttes
UML Tools - ObjectDomain




1) Comercial, demo por tiempo limitado <= 30 días
2) Escrito en Java, corre en la mayoría de las
   plataformas
3) Se necesita exportar el modelo desde su nativo
   .odm formato

Website y download - objectdomain.com




                                           menttes
UML Tools - Powerdesigner




1) Version XMI 1.1
2) Se necesita exportar el modelo

Website y download - sybase.com




                                    menttes
UML Tools - Umbrello




1)   Software libre
2)   Corre bajo Linux/KDE
3)   Almacena el modelo en formato XMI
4)   Hasta la version 1.4 Umbrello no soportaba de
     manera correcta el formato XMI

Website y download - uml.sourceforge.net




                                              menttes
Una breve introducción a UML

UML (Lenguaje de Modelado Unificado), es un lenguaje
gráfico diseñado para describir software atraves de
diagramas. Tenemos varios tipos de diagramas, pero los
mas relevantes para ArchGenXML son:

- Diagrama de clases
- Diagrama de estados

El diagrama de clases es utilizado para dibujar interfaces,
content types (representados como clases) y herramientas
(representadas como clases con el estereotipo portal_tool),
así como los atributos y operaciones publicas en los
mismos. Además de poder asociar los diagramas para ser
contenidos o referenciados entre si.

                                                  menttes
Content types – Por defecto




                              menttes
Content types – De terceros




                              menttes
Content types – Nuestros




                           menttes
ArgoUML




          menttes
ArgoUML - Windows XP Download

Descargamos ArgoUML 0.24: http://argouml-downloads.tigris.org/argouml-0.24/




                                                                        menttes
ArgoUML – Ejecutar Jar File
Para ejecutar ArgoUML hacemos doble click en el archivo argouml




                                                         menttes
ArgoUML – Descargando archgenxml tagged values

1) Descargamos argouml_profile:

http://plone.org/products/archgenxml/issues/30/18/at_download/attachment/

2) Copiamos el archivo argouml_profile.xmi dentro de la carpeta donde tenemos el
   ejecutable argouml.jar




                                                                         menttes
ArgoUML – Creando un .zargo con argouml_profile


1) Abrimos ArgoUML
2) Vamos a “Archivo” -> “Guardar el proyecto como ...” y elegimos el nombre de
   nuestro proyecto (Ejemplo ArtistSite.zargo)




                                                                         menttes
ArgoUML – Creando un .zargo con argouml_profile

3) Luego lo que hacemos es pararnos encima del archivo .zargo que acabamos de crear
   y con el boton derecho del mouse elegimos la opción “Abrir con” -> “Elegir
  programa...”, por el momento seleccionamos el “Bloc de Notas” como programa por
  defecto para abrir los archivos .zargo para que Windows pueda identificarlos con algún
  formato.

4) A continuación dentro de la misma carpeta en donde se encuentra el archivo .zargo,
   elegimos el tab “Tipos de archivo” y elegimos nuestro archivo ZARGO.




                                                                           menttes
ArgoUML – Creando un .zargo con argouml_profile

5) Clickeamos en “Opciones avanzadas”, luego seleccionamos “open” y a continuación
   clickeamos en “Editar”, lo que hacemos es modificar “Aplicación utilizada para
   realizar la acción” por:

quot;C:Program FilesJavajre1.5.0_06binjavaw.exequot; quot;-
Dargo.defaultModel=your_PC_pathargouml_profile.xmiquot; -jar
quot;your_PC_pathArgoUML-0.20argouml.jarquot; quot;%Lquot;




                                                                       menttes
ArgoUML – Creando un .zargo con argouml_profile



 Listo, ahora podemos ver dentro de nuestro modelo
    las opciones AGX en ArgoUML, y cada ves que
abramos un archivo .zargo se cargara con todos estos
              tag de manera automática




                                           menttes
¿Que es ArgoUML?




     ArgoUML es una herramienta utilizada en el
  modelaje de sistemas, mediante la cual se realizan
  diseños en UML llevados acabo en el análisis y pre-
           diseño de Sistemas de Software.




                                            menttes
¿Porque ArgoUML?




 ● Maduro – Este soporta importantes características
 ● Es relativamente liviano. Lo cual es muy


   importante.
 ● El precio es muy bueno. Es gratis.




                                             menttes
Definiendo Custom Content types


Ejemplo Uno: ArtistSite – Diagrama,   atributos

Ejemplo Dos: GiveSuggestion – Workflow

Ejercicio Uno: AGAEXDocument – Expandir AT

Ejemplo Tres: ATArticle – Schemata

Ejercicio Dos: ATBirthday – Calendar, Kupu




                                             menttes
Ejemplo Uno: ArtistSite




                          menttes
Creando la clase Artist




                          menttes
Descripción, icono y docstring




                                 menttes
Atributos para el campo Title




                                menttes
Tamaños de la foto




                     menttes
Vocabulario de instrumentos




                              menttes
¿Que es ArchGenXML?




 ●   Es un generador de código para productos Plone,
     basados en Archetypes.

 ●   Analiza modelos UML en el XMI-FORMATO
     (.xmi.zargo.zuml), creados con ArgoUML,




                                               menttes
¿Porqué usar ArchGenXML? (parte 1)



 • Quieres ahorrarte tiempo

 • Eres un programador bago

 • No te gusta re inventar la rueda

 • No te gusta copiar y pegar código
 • Haces uso de referencias e interfaces



                                           menttes
¿Porqué usar ArchGenXML? (parte 2)




 • Tienes proyectos grandes con muchos content
   types diferentes

 • Quieres o necesitas una correcta y bien
   documentada interfase para tu producto

 • Quieres mantener tu proyecto en el futuro sin
   tener un dolor de cabeza



                                             menttes
De UML a Archetypes usando ArchGenXML




                                        menttes
Corriendo el script

Comando:
ArchGenXML.py -o ProductName ProductName.zargo




                                       menttes
Agregando un nuevo Artist
1)   Copiar la carpeta ArtistSite en el directorio Products
2)   Reiniciar Zope
3)   Instalar ArtistSite usando QuickInstaller
4)   Agregar un nuevo Artist




                                                       menttes
Edit Artist form




                   menttes
View Artist




              menttes
Moviendo el modelo al producto


1) Dentro de la carpeta ArtistSite crear una sub-
   carpeta llamada model
2) Copiar el archivo ArtistSite.zargo dentro de la
   carpeta model




                                               menttes
Vocabulario dinámico




                       menttes
Agregar ATVM como dependencia

1) En la raíz del producto agregar el archivo
   AppConfig.py
2) Editar AppConfig.py y agregar la linea:
   DEPENDENCIES = ['ATVocabularyManager']
3) Reiniciar Zope
4) Reinstalar ArtistSite




                                            menttes
Vocabulary Library

Ir a Plone Setup y elegir Vocabulary Library




                                               menttes
Agregamos un termino al vocabulario




                              menttes
Vocabulario dinámico - Artist




                                menttes
Contenedor

 Usaremos el rombo solido para hacer una estricta
  contención, instancias del tipo Artist pueden ser
   agregadas solo en instancias del tipo 'Artists'




                                            menttes
Usando <<large>> stereotype




                              menttes
Le damos a este un nombre amigable




                              menttes
Agregamos el contenedor Artists




                                  menttes
Ejemplo Dos: GiveSuggestion




                              menttes
Atributos para el campo name




                               menttes
Atributos para el campo suggestion




                               menttes
Atributos para el campo area




                               menttes
Corriendo el script

Comando:
ArchGenXML.py -o GiveSuggestion GiveSuggestion.zargo




                                             menttes
Agregando una nueva Suggestion
1)   Copiar la carpeta GiveSuggestion en el directorio Products
2)   Reiniciar Zope
3)   Instalar GiveSuggestion usando QuickInstaller
4)   Agregar una nueva Suggestion




                                                         menttes
Edit Suggestion form




                       menttes
Workflow




  Lo que haremos ahora es agregarle workflow a
         nuestro content type Suggestion.
  Definiremos los estados Submitted, Approved,
     Complete y Rejected con sus respectivas
                  transacciones.




                                         menttes
Agregando el diagrama de estado

1) Dentro de nuestro clase Suggestion, clickeamos en
   Crear -> Diagrama de estado




                                            menttes
Agregando un estado inicial

2) Agregamos un estado inicial, solo debemos clickear
   en el circulo de color negro solida, luego le
   ponemos el nombre Creating




                                            menttes
Agregando un estado simple
3) A continuación agregamos un estado simple, este
   luce como una caja redonda con una linea
   horizontal en el medio. Llamar a esta Submitted




                                           menttes
Otro estado simple

4) A la derecha de Submitted agregamos otro estado
   simple, lo llamaremos a este Approved




                                           menttes
Agregando estados finales

5) A la derecha de Approved agregamos un estado
   final (circulo negro con contorno blanco) al cual
   llamaremos Complete
6) Abajo de Approved agregamos un estado final al
   cual llamaremos Rejected




                                              menttes
Nombrando las transiciones




7) Lo que hacemos a continuación es nombrar las
   transiciones, la trancision que va al estado
   Submitted se llamara Submit, la transición que va
   al estado Approved se llamara Approve, la
   transición que va al estado Rejected se llamara
   Reject y por ultimo la transición que va al estado
   Completed se llamara Complete




                                              menttes
Permisos de los usuarios


8) Ahora vamos a definir lo que cada rol puede ver,
   los usuarios Anonimos podran Crear (un estado
   inicial) y requerir un Submit (una transición de
   estado), pero no podrán Aprobar una suggestion.
   Los Managers y Reviewer podrán
   approve/reject/complete la suggestions. Pero los
   usuarios anonimos podrán ver el pedido durante
   todo el proceso.




                                             menttes
Seteando permisos, estado Submitted




                              menttes
Seteando permisos, estado Approved




                              menttes
Seteando permisos, estado Complete




                              menttes
Seteando permisos, estado Rejected




                              menttes
Quien puede modificar los estados



9) Definiremos guardas (guards), para saber que
   estado es el que puede setear cada usuario en el
   content type. Para esto nos pararemos en cada una
   de las transacciones (menos en la inicial Submit) y
   agregaremos una guard:

  guard_roles:Reviewer;Manager




                                             menttes
Guard - Approve




                  menttes
Guard - Complete




                   menttes
Guard - Reject




                 menttes
Corriendo el script

Comando:
ArchGenXML.py -o GiveSuggestion GiveSuggestion.zargo




                                             menttes
Agregando una nueva Suggestion
1) Copiar la carpeta GiveSuggestion en el directorio Products 
2) Reiniciar Zope
3) Instalar GiveSuggestion usando QuickInstaller
4) Agregar una nueva Suggestion




                                                                 menttes
Anónimos Suggestion




  Lo que haremos ahora es permitirle a los usuarios
anónimos agregar suggestions a nuestro sitio. Pero no
 en cualquier lugar sino mas bien en una carpeta que
  crearemos para que se agreguen dentro de esta.




                                            menttes
Carpeta Suggestion


1) En nuestra instancia Plone agregamos una carpeta
   en la raíz llamada Suggestions. Y dentro de esta
   creamos otra carpeta llamada Archive.




                                           menttes
Carpeta Suggestion - Security


2) En nuestro ZMI:
   a) Navegamos hasta la carpeta suggestions/archive
      y clickeamos en el tab Security, buscamos el
      permiso Add portal content, Desclikeamos el box
      Aquire a la izquierda y clickeamos los boxes
      Anonymous y Authenticated a la derecha.




                                            menttes
Carpeta Suggestion - Security


 b) Buscamos ahora el permiso Modify portal
    content. Asegurarse de que Aquire esta
    desclickeado y clickear Anonymous y
    Authenticated.




                                          menttes
Carpeta Suggestion - Security

  c) En la parte de mas abajo de la pagina
     clickeamos en el boton Save Changes para
     guardar los cambios.

Si abrimos el Sitio Plone con otro navegador o nos
deslogeamos del sitio que estamos utilizando,
podremos ver que los usuarios anónimos pueden
ahora agregar suggestions dentro de la carpeta
Archive. Y poner el contenido en estado Submited.

Pero tenemos un problema, los usuarios anónimos
pueden editar dentro de Archive y eso no lo
queremos.
                                             menttes
Negar edición a los Anónimos


   El objetivo es hacer que los usuarios anónimos no
  puedan editar suggestions, para esto agregaremos
dos script dentro de nuestro producto GiveSuggestion
 que lo que harán es modificar de manera automática
el estado de las suggestion al ser creadas a Submited,
 ya que en ese estado hemos definido que los únicos
 que pueden modificar los objetos son los Managers y
                       Reviewers.
  Es importante tener en cuenta que estos scripts se
     pueden borrar si regeneramos el producto con
   ArchGenXML por lo tanto debemos mantener una
            copia del producto en algun lado.

                                             menttes
Creamos suggestion_post.cpy
En ProductsGiveSuggestionskinsGiveSuggestion
## Script (Python) quot;suggestion_postquot;
##title=Post GiveSuggestion after validation
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind state=state
##bind subpath=traverse_subpath
##parameters=
##

from Products.CMFCore.utils import getToolByName

workflow = getToolByName(context, 'portal_workflow')
workflow.doActionFor(context, 'Submit')

return state.set(status = 'success',
           portal_status_messsage = 'Thank you.')

                                                       menttes
Creamos suggestion_post.cpy.metadata


En ProductsGiveSuggestionskinsGiveSuggestion
[default]
title = Submit a suggestion

[validators]
validators =

[actions]
action.success = redirect_to:string:../
action.failure = traverse_to:string:content_edit




                                                   menttes
Editamos Install.py

En ProductsGiveSuggestionExtensionsInstall.py
buscamos la linea:
print >>out,'no workflow install'

y debajo de esta ponemos:
controller = getToolByName(self, 'portal_form_controller')
addFormControllerAction(self, out,
                        controller,
                        template = 'validate_integrity',
                        status = 'success',
                        contentType = 'Suggestion',
                        button = '',
                        actionType = 'traverse_to',
                        action = 'string:suggestion_post')

                                                             menttes
Editamos Install.py



En la parte inferior del archivo agregamos el código:
def addFormControllerAction(self, out, controller, template, status,
                   contentType, button, actionType, action):
  quot;quot;quot;Add the given action to the portalFormControllerquot;quot;quot;

  controller.addFormAction(template, status, contentType, button, actionType, action)
  print >> out, quot;Added action %s to %squot; % (action, template)

Listo, si probamos ahora agregar una suggestion
como usuarios anónimos, no podremos editarlo.




                                                                          menttes
Ejercicio Uno: ATAGAEXDocument




                             menttes
Objetivo




El objetivo es crear un nuevo content type Document
que herede todos los campos de ATDocument y a su
       ves añadir un par de campos adicionales




                                           menttes
Un vistazo




             menttes
Atributos nuevos en ATAGAEXDocument




                             menttes
Moviendo los nuevos campos debajo de title



Para mover los nuevos campos debajo del campo title
debemos utilizar la función moveField, en:

ProductsATAGAEXDocumentcontentAGAEXDocument.py

luego de la definición de nuestro schema, ponemos

AGAEXDocument_schema.moveField('autor', after='title')
AGAEXDocument_schema.moveField('conocimiento', after='autor')
AGAEXDocument_schema.moveField('publico', after='conocimiento')
AGAEXDocument_schema.moveField('email', after='publico')'


                                                                  menttes
Atributos movidos en ATAGAEXDocument




                                 menttes
Ejemplo 4: ATArticle - Schemata




                                  menttes
Atributos para el campo body




                               menttes
Atributos para el campo firstname




                               menttes
Atributos para el campo lastname




                               menttes
Corriendo el script


Comando:
ArchGenXML.py -o ATArticle ATArticle.zargo




                                             menttes
Agregando un nuevo Article

1) Copiar la carpeta ATArticle en el directorio Products 
2) Reiniciar Zope
3) Instalar ATArticle usando QuickInstaller
4) Agregar un nuevo Article




                                                            menttes
Edit Article form – Schemata default




                                 menttes
Edit Article form – Schemata article




                                 menttes
Edit Article form – Schemata author




                                menttes
View Article




               menttes
Borrando el schemata default


Para borrar el schemata default primero debemos
mover los atributos id y title a nuestro schemata
article, en:

ProductsATArticlecontentArticle.py

luego de la definición de nuestro schema, ponemos

Article_schema['id'].schemata = 'article'
Article_schema['title'].schemata = 'article'




                                               menttes
Article sin schemata default




                               menttes
Ocultando title en Article


Lo que haremos a continuación es borrar el atributo
title de nuestro content type Article, en:

ProductsATArticlecontentArticle.py


luego de la definición de nuestro schema, ponemos

Article_schema['title'].required = 0
Article_schema['title'].widget.visible = {'edit': 'hidden', 'view': 'invisible'}




                                                                                   menttes
Article sin el atributo title




                                menttes
Que paso con el id de nuestro ATArticle?

Al haber ocultado el atributo title de nuestro
content type, Plone utiliza un id por defecto que
lo obtiene de manera automática de acuerdo a
la fecha del día en que se crea el objeto.




                                         menttes
Pisando title en Article

Lo que haremos sera modificar el atributo title
cambiándole el nombre a Author, en:

ProductsATArticlecontentArticle.py


luego de la definición de nuestro schema, ponemos

Article_schema['title'].widget.label = 'Author'


#Article_schema['title'].required = 0
#Article_schema['title'].widget.visible = {'edit': 'hidden', 'view': 'invisible'}



                                                                                    menttes
Atributo title renombrado




                            menttes
Ejercicio Dos: ATBirthday




                            menttes
¿Qué es Archetypes?




  Archetypes es un framework diseñado para facilitar
       la construcción de aplicaciones para Plone




                                            menttes
Objetivo Principal




           Proporcionar un método común
             para construir content type,
         basado en la definición de esquemas




                                           menttes
Arquitectura Archetypes


                          Schema
                              Field
                                  Widget
                          Schema
                              Field
                                  Widget
                              …


                                           menttes
¿Qué es un esquema Archetypes ?



 El corazón de archetypes es su esquema (secuencia
                     de campos).

 El esquema trabaja como una definición de lo que su
   objeto contendrá y como presentar la información
                      contenida.




                                           menttes
Esquema y Esquema Base

            Para crear un esquema se pasan los campos
             que se desean dentro del objeto esquema
                          como una tupla.

 Ej.:

 Schema((
           StringField('body', 
           widget = TextAreaWidget(label='Body')        
            ),
           # otros campos aquí
 ))
                                                           menttes
Esquema Base + Esquema



 schema = Schema((
                  StringField('body'),
             ))


 class Ejemplo(BaseContent)
             schema = BaseSchema + schema




                                            menttes
Fields

    Todos los campos son instanciados de la misma
    manera, creando un campo y pasándole a este un
              parámetro requerido: name


 Ej.:


 from Products.Archetypes.public import IntegerField
 # un simple campo para edad
 age = IntegerField('age')




                                                       menttes
Widgets

  Una widget contiene la información acerca de cómo
       será representado visualmente el objeto
     
 Ej.:
 from Products.Archetypes.public import IntegerField
 from Products.Archetypes.public import IntegerWidget


 # un simple campo para la edad
 age = IntegerField('age',         
                         widget=IntegerWidget(label=quot;Your agequot;)
                         ) 
                                                                  menttes
Ejemplo de Archetypes: Artist

 schema = Schema((
                     StringField('name'),
                     ImageField('photo'),
                     LinesField('instrument'),
                ))


 class Artist(BaseContent)
 schema = BaseSchema + schema
 registerType(Artist,PROJECTNAME)


                                                 menttes
Widgets

 schema = Schema((
      StringField('name',
           widget=StringWidget( label='Artist name', size=20),
      ),
      ImageField('photo',
           widget=ImageWidget(label='Headshot'),
      ),
      LinesField('instrument',
                  widget=MultiSelectionWidget(label='Instruments'),
               multiValue=1,
      ),
 ))

                                                                      menttes
Ejemplo: Artist paso a paso
                Products
                |
                ­ Artist   
                               |   
                               ­ __init__.py   
                               |   
                               ­ Artist.py   
                               |   
                               ­ config.py   
                               |   
                               ­ Extension      
                                               |      
                                               ­ __init__.py     
                                             |     
                                                                     menttes
                                              ­ Install.py
Paso 1) Directorio Artist


     Lo primero que debemos hacer es ir dentro de
    nuestro directorio de productos Plone y crear una
             carpeta con el nombre “Artist”

   Ejemplo: /var/www/zope/plone-2.1.1/Product/Artist

  (Aunque podemos crearla en cualquier lado y luego
             tirarla dentro de “Product”)




                                             menttes
Paso 2) Artist.py

 1  from Products.Archetypes.public import *
 2  from Products.Artist.config import PROJECTNAME
 3
 4  class Artist(BaseContent):
 5                “””A Simple Content Type“””
 6                schema = BaseSchema + Schema((
 7                                   StringField('name'),
 8                                   ImageField('photo'),
 9                                   LinesField('instrument'),
 10                         ))
 11
 12 registerType(Artist,PROJECTNAME)



                                                                 menttes
Paso 3) Atributos

 schema = BaseSchema + Schema((
      StringField('name',
           widget=StringWidget(label='Artist name', size=20),
      ),
      ImageField('photo',
           widget=ImageWidget(label='Headshot'),
      ),
      LinesField('instrument',
                  widget=MultiSelectionWidget(label='Instruments'),
               multiValue=1,
      ),
 ))

                                                                      menttes
Bien a esta altura ya hemos definido el esquema que tendra nuestro 
                       nuevo content type Artist
Ahora veamos como convertir un esquema Archetypes en un producto 
                                Zope




                                                          menttes
Paso 4) __init__.py
 1     from Products.Archetypes.public import process_types, listTypes
 2     from Products.CMFCore import utils
 3     from Products.MyName.config import PROJECTNAME, ADD_CONTENT_PERMISSION
 4 
 5     def initialize(context):
 6        ## Import Types here to register them
 7        import Name
 8
 9        content_types, constructors, ftis = process_types(listTypes(PROJECTNAME),
 10                                                             PROJECTNAME)
 11 
 12      utils.ContentInit(
 13               PROJECTNAME + ' Content',
 14                 content_types         = content_types,
 15               permission = ADD_CONTENT_PERMISSION,
 16           extra_constructors = constructors,
 17               fti = ftis,
 18               ).initialize(context)
                                                                                      menttes
Paso 5) config.py




 1 PROJECTNAME = 'Artist'
 2 ADD_CONTENT_PERMISSION = 'Artist: Add Content'




                                                    menttes
Bien ya tenemos nuestro producto Plone listo con
nuestro content type definido mediante esquemas.
Ahora veamos como hacer el producto que hemos
                creado instalable.




                                        menttes
Paso 6) Install.py
       Bien, primero debemos crear una nueva carpeta
      Extensions dentro de nuestra carpeta Artist. Ahora
            si, dentro de esta agregamos Install.py:
 1   from Products.Artist.config import PROJECTNAME
 2   from Products.Archetypes.public import listTypes
 3   from Products.Archetypes.Extensions.utils import installTypes
 4   from StringIO import StringIO
 5   def install(self):
 6             out = StringIO()
 7             installTypes(self, out,
 8                             listTypes(PROJECTNAME),
 9                             PROJECTNAME) 
 10 print >> out, quot;Successfully installed %s.quot; % PROJECTNAME
 11 return out.getvalue() 

                                                                     menttes
Listo! Hemos terminado.
 Ahora vamos a probarlo, para esto reiniciemos
nuestra instancia Zope, dentro de Plone vamos al
  ZMI, luego a portal_quickinstaller e instalamos
              nuestro nuevo producto.
   En la front-page vamos a nuestra barra de
contenidos 'drop-down list' y cargamos un nuevo
                 content type Artist!




                                         menttes
Material leido para ArchGenXML/ArgoUML

http://plone.org/documentation/tutorial/archgenxml-getting-started/tutorial-all-pages

http://plone.org/products/archgenxml/documentation/how-to/setting-up-argouml-to-provide-tagg

http://plone.org/products/archgenxml/issues/30

http://plone.org/documentation/tutorial/picking-archetypes-widgets/tutorial-all-pages

http://plone.org/documentation/tutorial/archgenxml-getting-started/archgenxmlquickref

http://plone.org/products/archgenxml/documentation/how-to/subclassing-atcontenttypes

http://plone.org/documentation/tutorial/anonymously-adding-custom-content-types-with-argoum

http://oodt.jpl.nasa.gov/wiki/display/edrn/UML+to+Portal+in+a+Few+Easy+Steps

http://www.jazkarta.com/presentations/ArchGenXML-ArgoUML.pdf

http://plone.org/documentation/how-to/make-view-page-use-schemata-declarations/?searchterm

http://plone.org/products/archetypes/documentation/how-to/title-less-type



                                                                            menttes
menttes
 corporate training




                      Muchas gracias




                      Sebastian Ferreyra

                      info@menttes.com

Más contenido relacionado

La actualidad más candente

Java - Tutorial Ventanas
Java - Tutorial VentanasJava - Tutorial Ventanas
Java - Tutorial Ventanaselsemieni
 
Umbrello uml-modeller1
Umbrello uml-modeller1Umbrello uml-modeller1
Umbrello uml-modeller1alex flores
 
Actionscript
ActionscriptActionscript
Actionscriptedinson
 
Historia de flash
Historia de flashHistoria de flash
Historia de flashRosy Arias
 
Cesnavarra 2009-boletín 10
Cesnavarra 2009-boletín 10Cesnavarra 2009-boletín 10
Cesnavarra 2009-boletín 10Cein
 
Umbrello UML Modeller
Umbrello UML ModellerUmbrello UML Modeller
Umbrello UML Modellerovruni
 
Action script 3
Action script 3Action script 3
Action script 3Giovanny10
 
Buenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareBuenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareIker Canarias
 
Tema 1 introduccion a la programacion en visual basic
Tema 1 introduccion a la programacion en visual basicTema 1 introduccion a la programacion en visual basic
Tema 1 introduccion a la programacion en visual basicaristeo23
 
Introducción a action script 3
Introducción a action script 3Introducción a action script 3
Introducción a action script 3tifannydoce
 
Guis en java-1pp_2012_
Guis en java-1pp_2012_Guis en java-1pp_2012_
Guis en java-1pp_2012_Robert Wolf
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing Laura
 

La actualidad más candente (17)

Java - Tutorial Ventanas
Java - Tutorial VentanasJava - Tutorial Ventanas
Java - Tutorial Ventanas
 
Umbrello uml-modeller1
Umbrello uml-modeller1Umbrello uml-modeller1
Umbrello uml-modeller1
 
Actionscript
ActionscriptActionscript
Actionscript
 
Historia de flash
Historia de flashHistoria de flash
Historia de flash
 
Cesnavarra 2009-boletín 10
Cesnavarra 2009-boletín 10Cesnavarra 2009-boletín 10
Cesnavarra 2009-boletín 10
 
Umbrello UML Modeller
Umbrello UML ModellerUmbrello UML Modeller
Umbrello UML Modeller
 
Action script 3
Action script 3Action script 3
Action script 3
 
Sesion12-componentes Visuales java
Sesion12-componentes Visuales javaSesion12-componentes Visuales java
Sesion12-componentes Visuales java
 
Umbrello
UmbrelloUmbrello
Umbrello
 
Componentes en-poo
Componentes en-pooComponentes en-poo
Componentes en-poo
 
Buenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareBuenas prácticas para la construcción de software
Buenas prácticas para la construcción de software
 
Tema 1 introduccion a la programacion en visual basic
Tema 1 introduccion a la programacion en visual basicTema 1 introduccion a la programacion en visual basic
Tema 1 introduccion a la programacion en visual basic
 
Umbrello
UmbrelloUmbrello
Umbrello
 
Introducción a action script 3
Introducción a action script 3Introducción a action script 3
Introducción a action script 3
 
Guis en java-1pp_2012_
Guis en java-1pp_2012_Guis en java-1pp_2012_
Guis en java-1pp_2012_
 
Apuntes vb6
Apuntes vb6Apuntes vb6
Apuntes vb6
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing
 

Destacado

Tema 5. els personatges
Tema 5. els personatgesTema 5. els personatges
Tema 5. els personatgeslaiaquilez
 
BuenProvecho.cr - Soy Restaurante
BuenProvecho.cr - Soy RestauranteBuenProvecho.cr - Soy Restaurante
BuenProvecho.cr - Soy RestauranteEsteban Cairol
 
Prezentacja Ekonomia W Praktyce 03 09
Prezentacja Ekonomia W Praktyce 03 09Prezentacja Ekonomia W Praktyce 03 09
Prezentacja Ekonomia W Praktyce 03 09Barka Foundation
 
Bro Certification Ov0109
Bro Certification Ov0109Bro Certification Ov0109
Bro Certification Ov0109Ian Aitchison
 
Proyecto ~Corazón sin Fronteras~ (Síndrome de Down)
Proyecto ~Corazón sin Fronteras~ (Síndrome de Down)Proyecto ~Corazón sin Fronteras~ (Síndrome de Down)
Proyecto ~Corazón sin Fronteras~ (Síndrome de Down)Zulay Garzón
 
Chapter06
Chapter06Chapter06
Chapter06Izaham
 
Creacion subredes
Creacion subredesCreacion subredes
Creacion subredesleztic
 
R rep-m.2134-2008-pdf-e
R rep-m.2134-2008-pdf-eR rep-m.2134-2008-pdf-e
R rep-m.2134-2008-pdf-ePfedya
 
Ann Summers - In Pursuit of Perfect Personalisation - Festival of Marketing 2...
Ann Summers - In Pursuit of Perfect Personalisation - Festival of Marketing 2...Ann Summers - In Pursuit of Perfect Personalisation - Festival of Marketing 2...
Ann Summers - In Pursuit of Perfect Personalisation - Festival of Marketing 2...Qubit
 
Estudio Ascot - Discusión y Análisis por el Grupo Médico CARDIOVEN
Estudio Ascot - Discusión y Análisis por el Grupo Médico CARDIOVENEstudio Ascot - Discusión y Análisis por el Grupo Médico CARDIOVEN
Estudio Ascot - Discusión y Análisis por el Grupo Médico CARDIOVENLuis Manuel Alvarez
 

Destacado (20)

Designer oracle
Designer oracleDesigner oracle
Designer oracle
 
Tema 5. els personatges
Tema 5. els personatgesTema 5. els personatges
Tema 5. els personatges
 
Q2 Expert Guide
Q2 Expert GuideQ2 Expert Guide
Q2 Expert Guide
 
Primeros auxilios
Primeros auxiliosPrimeros auxilios
Primeros auxilios
 
BuenProvecho.cr - Soy Restaurante
BuenProvecho.cr - Soy RestauranteBuenProvecho.cr - Soy Restaurante
BuenProvecho.cr - Soy Restaurante
 
Libros texto 2012_13
Libros texto 2012_13Libros texto 2012_13
Libros texto 2012_13
 
Prezentacja Ekonomia W Praktyce 03 09
Prezentacja Ekonomia W Praktyce 03 09Prezentacja Ekonomia W Praktyce 03 09
Prezentacja Ekonomia W Praktyce 03 09
 
Gacetilla de prensa 19 03-14
Gacetilla de prensa 19 03-14Gacetilla de prensa 19 03-14
Gacetilla de prensa 19 03-14
 
La zamora que veremos
La zamora que veremosLa zamora que veremos
La zamora que veremos
 
Bro Certification Ov0109
Bro Certification Ov0109Bro Certification Ov0109
Bro Certification Ov0109
 
Proyecto ~Corazón sin Fronteras~ (Síndrome de Down)
Proyecto ~Corazón sin Fronteras~ (Síndrome de Down)Proyecto ~Corazón sin Fronteras~ (Síndrome de Down)
Proyecto ~Corazón sin Fronteras~ (Síndrome de Down)
 
resume
resumeresume
resume
 
Chapter06
Chapter06Chapter06
Chapter06
 
Creacion subredes
Creacion subredesCreacion subredes
Creacion subredes
 
R rep-m.2134-2008-pdf-e
R rep-m.2134-2008-pdf-eR rep-m.2134-2008-pdf-e
R rep-m.2134-2008-pdf-e
 
mahmoud-cv-social-media
mahmoud-cv-social-mediamahmoud-cv-social-media
mahmoud-cv-social-media
 
Ann Summers - In Pursuit of Perfect Personalisation - Festival of Marketing 2...
Ann Summers - In Pursuit of Perfect Personalisation - Festival of Marketing 2...Ann Summers - In Pursuit of Perfect Personalisation - Festival of Marketing 2...
Ann Summers - In Pursuit of Perfect Personalisation - Festival of Marketing 2...
 
Logos BUENO
Logos BUENOLogos BUENO
Logos BUENO
 
Walkthrough
WalkthroughWalkthrough
Walkthrough
 
Estudio Ascot - Discusión y Análisis por el Grupo Médico CARDIOVEN
Estudio Ascot - Discusión y Análisis por el Grupo Médico CARDIOVENEstudio Ascot - Discusión y Análisis por el Grupo Médico CARDIOVEN
Estudio Ascot - Discusión y Análisis por el Grupo Médico CARDIOVEN
 

Similar a UML to Archetypes code generation with ArchGenXML

Similar a UML to Archetypes code generation with ArchGenXML (20)

HA2NV50 EQ8-StarUML
HA2NV50 EQ8-StarUMLHA2NV50 EQ8-StarUML
HA2NV50 EQ8-StarUML
 
Ha2 nv50 rodriguez montiel moises-staruml
Ha2 nv50 rodriguez montiel moises-starumlHa2 nv50 rodriguez montiel moises-staruml
Ha2 nv50 rodriguez montiel moises-staruml
 
Paso a paso exerlearning
Paso a paso exerlearningPaso a paso exerlearning
Paso a paso exerlearning
 
Paso a paso exerlearning
Paso a paso exerlearningPaso a paso exerlearning
Paso a paso exerlearning
 
Informe Proyecto Final
Informe Proyecto FinalInforme Proyecto Final
Informe Proyecto Final
 
Estructura de un proyecto android
Estructura de un proyecto androidEstructura de un proyecto android
Estructura de un proyecto android
 
UML
UMLUML
UML
 
Glosario uml
Glosario umlGlosario uml
Glosario uml
 
Proyectoytzelyalonso (1)
Proyectoytzelyalonso (1)Proyectoytzelyalonso (1)
Proyectoytzelyalonso (1)
 
Clase 1 jJAVA 2012
Clase 1 jJAVA 2012Clase 1 jJAVA 2012
Clase 1 jJAVA 2012
 
Trabajo 2
Trabajo 2Trabajo 2
Trabajo 2
 
Modelo dinamico
Modelo dinamicoModelo dinamico
Modelo dinamico
 
Generacion en los diferentes diagramas de uml
Generacion en los diferentes diagramas de uml Generacion en los diferentes diagramas de uml
Generacion en los diferentes diagramas de uml
 
04 taller-django
04 taller-django04 taller-django
04 taller-django
 
cursoUML.ppt
cursoUML.pptcursoUML.ppt
cursoUML.ppt
 
Introducción a Android
Introducción a AndroidIntroducción a Android
Introducción a Android
 
TUTORIAL DE ECLIPSE
TUTORIAL DE ECLIPSETUTORIAL DE ECLIPSE
TUTORIAL DE ECLIPSE
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
Modelado, Ingenieria de Software
Modelado, Ingenieria de SoftwareModelado, Ingenieria de Software
Modelado, Ingenieria de Software
 
200609
200609200609
200609
 

Más de Roberto Allende

Fearless Coding with Test Driven Development
Fearless Coding with Test Driven DevelopmentFearless Coding with Test Driven Development
Fearless Coding with Test Driven DevelopmentRoberto Allende
 
Creencias y cultura popular para armar el equipo de un Startup
Creencias y cultura popular para armar el equipo de un StartupCreencias y cultura popular para armar el equipo de un Startup
Creencias y cultura popular para armar el equipo de un StartupRoberto Allende
 
11 Slides de Droidcon NYC
11 Slides de Droidcon NYC11 Slides de Droidcon NYC
11 Slides de Droidcon NYCRoberto Allende
 
Startup escalables y organicos
Startup escalables y organicosStartup escalables y organicos
Startup escalables y organicosRoberto Allende
 
Microservices y la era Post Industrial de la Web
Microservices y la era Post Industrial de la WebMicroservices y la era Post Industrial de la Web
Microservices y la era Post Industrial de la WebRoberto Allende
 
La idea, de la epifanía a la empresa escalable
La idea, de la epifanía a la empresa escalableLa idea, de la epifanía a la empresa escalable
La idea, de la epifanía a la empresa escalableRoberto Allende
 
Emprender en Argentina: 8 creencias y algunas experiencias
Emprender en Argentina: 8 creencias y algunas experienciasEmprender en Argentina: 8 creencias y algunas experiencias
Emprender en Argentina: 8 creencias y algunas experienciasRoberto Allende
 
Innovar: comunicar y hacer
Innovar: comunicar y hacerInnovar: comunicar y hacer
Innovar: comunicar y hacerRoberto Allende
 
Introducción a Leanstartup
Introducción a LeanstartupIntroducción a Leanstartup
Introducción a LeanstartupRoberto Allende
 
PloneGov: Cooperación, participación y Software Libre en Gobierno
PloneGov: Cooperación, participación y Software Libre en Gobierno PloneGov: Cooperación, participación y Software Libre en Gobierno
PloneGov: Cooperación, participación y Software Libre en Gobierno Roberto Allende
 
Menttes: exportando servicios basados en Software Libre
Menttes: exportando servicios basados en Software LibreMenttes: exportando servicios basados en Software Libre
Menttes: exportando servicios basados en Software LibreRoberto Allende
 
Introducción al desarrollo en Plone
Introducción al desarrollo en PloneIntroducción al desarrollo en Plone
Introducción al desarrollo en PloneRoberto Allende
 
Curso Zope Page Templates y Metal
Curso Zope Page Templates y MetalCurso Zope Page Templates y Metal
Curso Zope Page Templates y MetalRoberto Allende
 
zc.buildout para desarrolladores Plone
zc.buildout para desarrolladores Plonezc.buildout para desarrolladores Plone
zc.buildout para desarrolladores PloneRoberto Allende
 
AJAX a cuerda Lo básico sobre AJAX y su funcionamiento
AJAX a cuerda
Lo básico sobre AJAX y su funcionamientoAJAX a cuerda
Lo básico sobre AJAX y su funcionamiento
AJAX a cuerda Lo básico sobre AJAX y su funcionamientoRoberto Allende
 
Desarrollando aplicaciones web con Zope 3
Desarrollando aplicaciones web con Zope 3Desarrollando aplicaciones web con Zope 3
Desarrollando aplicaciones web con Zope 3Roberto Allende
 
PloneGov: un proyecto internacional de cooperación entre Gobiernos abierto a ...
PloneGov: un proyecto internacional de cooperación entre Gobiernos abierto a ...PloneGov: un proyecto internacional de cooperación entre Gobiernos abierto a ...
PloneGov: un proyecto internacional de cooperación entre Gobiernos abierto a ...Roberto Allende
 

Más de Roberto Allende (20)

Fearless Coding with Test Driven Development
Fearless Coding with Test Driven DevelopmentFearless Coding with Test Driven Development
Fearless Coding with Test Driven Development
 
Creencias y cultura popular para armar el equipo de un Startup
Creencias y cultura popular para armar el equipo de un StartupCreencias y cultura popular para armar el equipo de un Startup
Creencias y cultura popular para armar el equipo de un Startup
 
11 Slides de Droidcon NYC
11 Slides de Droidcon NYC11 Slides de Droidcon NYC
11 Slides de Droidcon NYC
 
Startup escalables y organicos
Startup escalables y organicosStartup escalables y organicos
Startup escalables y organicos
 
Microservices y la era Post Industrial de la Web
Microservices y la era Post Industrial de la WebMicroservices y la era Post Industrial de la Web
Microservices y la era Post Industrial de la Web
 
La idea, de la epifanía a la empresa escalable
La idea, de la epifanía a la empresa escalableLa idea, de la epifanía a la empresa escalable
La idea, de la epifanía a la empresa escalable
 
Emprender en Argentina: 8 creencias y algunas experiencias
Emprender en Argentina: 8 creencias y algunas experienciasEmprender en Argentina: 8 creencias y algunas experiencias
Emprender en Argentina: 8 creencias y algunas experiencias
 
Innovar: comunicar y hacer
Innovar: comunicar y hacerInnovar: comunicar y hacer
Innovar: comunicar y hacer
 
Introducción a Leanstartup
Introducción a LeanstartupIntroducción a Leanstartup
Introducción a Leanstartup
 
Taller de Gamification
Taller de GamificationTaller de Gamification
Taller de Gamification
 
PloneGov: Cooperación, participación y Software Libre en Gobierno
PloneGov: Cooperación, participación y Software Libre en Gobierno PloneGov: Cooperación, participación y Software Libre en Gobierno
PloneGov: Cooperación, participación y Software Libre en Gobierno
 
Menttes: exportando servicios basados en Software Libre
Menttes: exportando servicios basados en Software LibreMenttes: exportando servicios basados en Software Libre
Menttes: exportando servicios basados en Software Libre
 
Introducción al desarrollo en Plone
Introducción al desarrollo en PloneIntroducción al desarrollo en Plone
Introducción al desarrollo en Plone
 
Catedral y Bazaar
Catedral y BazaarCatedral y Bazaar
Catedral y Bazaar
 
Anatomia de Plone
Anatomia de PloneAnatomia de Plone
Anatomia de Plone
 
Curso Zope Page Templates y Metal
Curso Zope Page Templates y MetalCurso Zope Page Templates y Metal
Curso Zope Page Templates y Metal
 
zc.buildout para desarrolladores Plone
zc.buildout para desarrolladores Plonezc.buildout para desarrolladores Plone
zc.buildout para desarrolladores Plone
 
AJAX a cuerda Lo básico sobre AJAX y su funcionamiento
AJAX a cuerda
Lo básico sobre AJAX y su funcionamientoAJAX a cuerda
Lo básico sobre AJAX y su funcionamiento
AJAX a cuerda Lo básico sobre AJAX y su funcionamiento
 
Desarrollando aplicaciones web con Zope 3
Desarrollando aplicaciones web con Zope 3Desarrollando aplicaciones web con Zope 3
Desarrollando aplicaciones web con Zope 3
 
PloneGov: un proyecto internacional de cooperación entre Gobiernos abierto a ...
PloneGov: un proyecto internacional de cooperación entre Gobiernos abierto a ...PloneGov: un proyecto internacional de cooperación entre Gobiernos abierto a ...
PloneGov: un proyecto internacional de cooperación entre Gobiernos abierto a ...
 

Último

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 

Último (15)

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 

UML to Archetypes code generation with ArchGenXML

  • 1. menttes corporate training Desarrollo de Productos con  Archetypes y ArchGenXML Sebastian, Ferreyra info@menttes.com
  • 2. ¿Qué es UML? UML son las siglas para Unified Modeling Language; que en castellano quiere decir: Lenguaje de Modelado Unificado. Para comprender que es el UML basta con analizar cada una de las palabras que lo componen por separado. menttes
  • 3. Lenguaje UML es, precisamente, un lenguaje. Lo que implica que éste cuente con una sintaxis y una semántica. Por lo tanto, al modelar un concepto en UML, existen reglas sobre cómo deben agruparse los elementos del lenguaje y el significado de esta agrupación. menttes
  • 4. Modelado UML es visual. Mediante su sintaxis se modelan distintos aspectos del mundo real que permiten una mejor interpretación y entendimiento de éste. menttes
  • 5. Unificado Por que unifica varias técnicas de modelado en una única.  menttes
  • 6. UML Tools ArchGenXML procesa modelos almacenados en formato XMI. Este formato XML no esta pensado para ser escrito en un editor de texto plano ni en un editor basado en XML, por lo tanto se debe usar una herramienta de diseño UML. A continuación damos un listado de las herramientas UML mas conocidad menttes
  • 7. UML Tools - Poseidon 1) Software comercial 2) Escrito en Java, corre en la mayoria de las plataformas 3) Basado en ArgoUML 4) Almacena el modelo en formato XMI + información del diagrama en archivos .zuml (archivos zip) 5) Es bastante lento 6) Necesita mucha memoria y una rapida CPU Website y download - www.gentleware.com menttes
  • 8. UML Tools - ArgoUML 1) Software libre 2) Escrito en Java, corre en la mayoría de las plataformas 3) Almacena el modelo en formato XMI + información del diagrama en archivos .zuml (archivos zip) 4) No posee undo 5) Conocidas, pero no criticas bugs Website y download - argouml.tigris.org menttes
  • 9. UML Tools - ObjectDomain 1) Comercial, demo por tiempo limitado <= 30 días 2) Escrito en Java, corre en la mayoría de las plataformas 3) Se necesita exportar el modelo desde su nativo .odm formato Website y download - objectdomain.com menttes
  • 10. UML Tools - Powerdesigner 1) Version XMI 1.1 2) Se necesita exportar el modelo Website y download - sybase.com menttes
  • 11. UML Tools - Umbrello 1) Software libre 2) Corre bajo Linux/KDE 3) Almacena el modelo en formato XMI 4) Hasta la version 1.4 Umbrello no soportaba de manera correcta el formato XMI Website y download - uml.sourceforge.net menttes
  • 12. Una breve introducción a UML UML (Lenguaje de Modelado Unificado), es un lenguaje gráfico diseñado para describir software atraves de diagramas. Tenemos varios tipos de diagramas, pero los mas relevantes para ArchGenXML son: - Diagrama de clases - Diagrama de estados El diagrama de clases es utilizado para dibujar interfaces, content types (representados como clases) y herramientas (representadas como clases con el estereotipo portal_tool), así como los atributos y operaciones publicas en los mismos. Además de poder asociar los diagramas para ser contenidos o referenciados entre si. menttes
  • 13. Content types – Por defecto menttes
  • 14. Content types – De terceros menttes
  • 15. Content types – Nuestros menttes
  • 16. ArgoUML menttes
  • 17. ArgoUML - Windows XP Download Descargamos ArgoUML 0.24: http://argouml-downloads.tigris.org/argouml-0.24/ menttes
  • 18. ArgoUML – Ejecutar Jar File Para ejecutar ArgoUML hacemos doble click en el archivo argouml menttes
  • 19. ArgoUML – Descargando archgenxml tagged values 1) Descargamos argouml_profile: http://plone.org/products/archgenxml/issues/30/18/at_download/attachment/ 2) Copiamos el archivo argouml_profile.xmi dentro de la carpeta donde tenemos el ejecutable argouml.jar menttes
  • 20. ArgoUML – Creando un .zargo con argouml_profile 1) Abrimos ArgoUML 2) Vamos a “Archivo” -> “Guardar el proyecto como ...” y elegimos el nombre de nuestro proyecto (Ejemplo ArtistSite.zargo) menttes
  • 21. ArgoUML – Creando un .zargo con argouml_profile 3) Luego lo que hacemos es pararnos encima del archivo .zargo que acabamos de crear y con el boton derecho del mouse elegimos la opción “Abrir con” -> “Elegir programa...”, por el momento seleccionamos el “Bloc de Notas” como programa por defecto para abrir los archivos .zargo para que Windows pueda identificarlos con algún formato. 4) A continuación dentro de la misma carpeta en donde se encuentra el archivo .zargo, elegimos el tab “Tipos de archivo” y elegimos nuestro archivo ZARGO. menttes
  • 22. ArgoUML – Creando un .zargo con argouml_profile 5) Clickeamos en “Opciones avanzadas”, luego seleccionamos “open” y a continuación clickeamos en “Editar”, lo que hacemos es modificar “Aplicación utilizada para realizar la acción” por: quot;C:Program FilesJavajre1.5.0_06binjavaw.exequot; quot;- Dargo.defaultModel=your_PC_pathargouml_profile.xmiquot; -jar quot;your_PC_pathArgoUML-0.20argouml.jarquot; quot;%Lquot; menttes
  • 23. ArgoUML – Creando un .zargo con argouml_profile Listo, ahora podemos ver dentro de nuestro modelo las opciones AGX en ArgoUML, y cada ves que abramos un archivo .zargo se cargara con todos estos tag de manera automática menttes
  • 24. ¿Que es ArgoUML? ArgoUML es una herramienta utilizada en el modelaje de sistemas, mediante la cual se realizan diseños en UML llevados acabo en el análisis y pre- diseño de Sistemas de Software. menttes
  • 25. ¿Porque ArgoUML? ● Maduro – Este soporta importantes características ● Es relativamente liviano. Lo cual es muy importante. ● El precio es muy bueno. Es gratis. menttes
  • 26. Definiendo Custom Content types Ejemplo Uno: ArtistSite – Diagrama, atributos Ejemplo Dos: GiveSuggestion – Workflow Ejercicio Uno: AGAEXDocument – Expandir AT Ejemplo Tres: ATArticle – Schemata Ejercicio Dos: ATBirthday – Calendar, Kupu menttes
  • 28. Creando la clase Artist menttes
  • 29. Descripción, icono y docstring menttes
  • 30. Atributos para el campo Title menttes
  • 31. Tamaños de la foto menttes
  • 33. ¿Que es ArchGenXML? ● Es un generador de código para productos Plone, basados en Archetypes. ● Analiza modelos UML en el XMI-FORMATO (.xmi.zargo.zuml), creados con ArgoUML, menttes
  • 34. ¿Porqué usar ArchGenXML? (parte 1) • Quieres ahorrarte tiempo • Eres un programador bago • No te gusta re inventar la rueda • No te gusta copiar y pegar código • Haces uso de referencias e interfaces menttes
  • 35. ¿Porqué usar ArchGenXML? (parte 2) • Tienes proyectos grandes con muchos content types diferentes • Quieres o necesitas una correcta y bien documentada interfase para tu producto • Quieres mantener tu proyecto en el futuro sin tener un dolor de cabeza menttes
  • 38. Agregando un nuevo Artist 1) Copiar la carpeta ArtistSite en el directorio Products 2) Reiniciar Zope 3) Instalar ArtistSite usando QuickInstaller 4) Agregar un nuevo Artist menttes
  • 40. View Artist menttes
  • 41. Moviendo el modelo al producto 1) Dentro de la carpeta ArtistSite crear una sub- carpeta llamada model 2) Copiar el archivo ArtistSite.zargo dentro de la carpeta model menttes
  • 43. Agregar ATVM como dependencia 1) En la raíz del producto agregar el archivo AppConfig.py 2) Editar AppConfig.py y agregar la linea: DEPENDENCIES = ['ATVocabularyManager'] 3) Reiniciar Zope 4) Reinstalar ArtistSite menttes
  • 44. Vocabulary Library Ir a Plone Setup y elegir Vocabulary Library menttes
  • 45. Agregamos un termino al vocabulario menttes
  • 46. Vocabulario dinámico - Artist menttes
  • 47. Contenedor Usaremos el rombo solido para hacer una estricta contención, instancias del tipo Artist pueden ser agregadas solo en instancias del tipo 'Artists' menttes
  • 49. Le damos a este un nombre amigable menttes
  • 50. Agregamos el contenedor Artists menttes
  • 52. Atributos para el campo name menttes
  • 53. Atributos para el campo suggestion menttes
  • 54. Atributos para el campo area menttes
  • 56. Agregando una nueva Suggestion 1) Copiar la carpeta GiveSuggestion en el directorio Products 2) Reiniciar Zope 3) Instalar GiveSuggestion usando QuickInstaller 4) Agregar una nueva Suggestion menttes
  • 58. Workflow Lo que haremos ahora es agregarle workflow a nuestro content type Suggestion. Definiremos los estados Submitted, Approved, Complete y Rejected con sus respectivas transacciones. menttes
  • 59. Agregando el diagrama de estado 1) Dentro de nuestro clase Suggestion, clickeamos en Crear -> Diagrama de estado menttes
  • 60. Agregando un estado inicial 2) Agregamos un estado inicial, solo debemos clickear en el circulo de color negro solida, luego le ponemos el nombre Creating menttes
  • 61. Agregando un estado simple 3) A continuación agregamos un estado simple, este luce como una caja redonda con una linea horizontal en el medio. Llamar a esta Submitted menttes
  • 62. Otro estado simple 4) A la derecha de Submitted agregamos otro estado simple, lo llamaremos a este Approved menttes
  • 63. Agregando estados finales 5) A la derecha de Approved agregamos un estado final (circulo negro con contorno blanco) al cual llamaremos Complete 6) Abajo de Approved agregamos un estado final al cual llamaremos Rejected menttes
  • 64. Nombrando las transiciones 7) Lo que hacemos a continuación es nombrar las transiciones, la trancision que va al estado Submitted se llamara Submit, la transición que va al estado Approved se llamara Approve, la transición que va al estado Rejected se llamara Reject y por ultimo la transición que va al estado Completed se llamara Complete menttes
  • 65. Permisos de los usuarios 8) Ahora vamos a definir lo que cada rol puede ver, los usuarios Anonimos podran Crear (un estado inicial) y requerir un Submit (una transición de estado), pero no podrán Aprobar una suggestion. Los Managers y Reviewer podrán approve/reject/complete la suggestions. Pero los usuarios anonimos podrán ver el pedido durante todo el proceso. menttes
  • 66. Seteando permisos, estado Submitted menttes
  • 67. Seteando permisos, estado Approved menttes
  • 68. Seteando permisos, estado Complete menttes
  • 69. Seteando permisos, estado Rejected menttes
  • 70. Quien puede modificar los estados 9) Definiremos guardas (guards), para saber que estado es el que puede setear cada usuario en el content type. Para esto nos pararemos en cada una de las transacciones (menos en la inicial Submit) y agregaremos una guard: guard_roles:Reviewer;Manager menttes
  • 71. Guard - Approve menttes
  • 73. Guard - Reject menttes
  • 75. Agregando una nueva Suggestion 1) Copiar la carpeta GiveSuggestion en el directorio Products  2) Reiniciar Zope 3) Instalar GiveSuggestion usando QuickInstaller 4) Agregar una nueva Suggestion menttes
  • 76. Anónimos Suggestion Lo que haremos ahora es permitirle a los usuarios anónimos agregar suggestions a nuestro sitio. Pero no en cualquier lugar sino mas bien en una carpeta que crearemos para que se agreguen dentro de esta. menttes
  • 77. Carpeta Suggestion 1) En nuestra instancia Plone agregamos una carpeta en la raíz llamada Suggestions. Y dentro de esta creamos otra carpeta llamada Archive. menttes
  • 78. Carpeta Suggestion - Security 2) En nuestro ZMI: a) Navegamos hasta la carpeta suggestions/archive y clickeamos en el tab Security, buscamos el permiso Add portal content, Desclikeamos el box Aquire a la izquierda y clickeamos los boxes Anonymous y Authenticated a la derecha. menttes
  • 79. Carpeta Suggestion - Security b) Buscamos ahora el permiso Modify portal content. Asegurarse de que Aquire esta desclickeado y clickear Anonymous y Authenticated. menttes
  • 80. Carpeta Suggestion - Security c) En la parte de mas abajo de la pagina clickeamos en el boton Save Changes para guardar los cambios. Si abrimos el Sitio Plone con otro navegador o nos deslogeamos del sitio que estamos utilizando, podremos ver que los usuarios anónimos pueden ahora agregar suggestions dentro de la carpeta Archive. Y poner el contenido en estado Submited. Pero tenemos un problema, los usuarios anónimos pueden editar dentro de Archive y eso no lo queremos. menttes
  • 81. Negar edición a los Anónimos El objetivo es hacer que los usuarios anónimos no puedan editar suggestions, para esto agregaremos dos script dentro de nuestro producto GiveSuggestion que lo que harán es modificar de manera automática el estado de las suggestion al ser creadas a Submited, ya que en ese estado hemos definido que los únicos que pueden modificar los objetos son los Managers y Reviewers. Es importante tener en cuenta que estos scripts se pueden borrar si regeneramos el producto con ArchGenXML por lo tanto debemos mantener una copia del producto en algun lado. menttes
  • 82. Creamos suggestion_post.cpy En ProductsGiveSuggestionskinsGiveSuggestion ## Script (Python) quot;suggestion_postquot; ##title=Post GiveSuggestion after validation ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind state=state ##bind subpath=traverse_subpath ##parameters= ## from Products.CMFCore.utils import getToolByName workflow = getToolByName(context, 'portal_workflow') workflow.doActionFor(context, 'Submit') return state.set(status = 'success', portal_status_messsage = 'Thank you.') menttes
  • 83. Creamos suggestion_post.cpy.metadata En ProductsGiveSuggestionskinsGiveSuggestion [default] title = Submit a suggestion [validators] validators = [actions] action.success = redirect_to:string:../ action.failure = traverse_to:string:content_edit menttes
  • 84. Editamos Install.py En ProductsGiveSuggestionExtensionsInstall.py buscamos la linea: print >>out,'no workflow install' y debajo de esta ponemos: controller = getToolByName(self, 'portal_form_controller') addFormControllerAction(self, out, controller, template = 'validate_integrity', status = 'success', contentType = 'Suggestion', button = '', actionType = 'traverse_to', action = 'string:suggestion_post') menttes
  • 85. Editamos Install.py En la parte inferior del archivo agregamos el código: def addFormControllerAction(self, out, controller, template, status, contentType, button, actionType, action): quot;quot;quot;Add the given action to the portalFormControllerquot;quot;quot; controller.addFormAction(template, status, contentType, button, actionType, action) print >> out, quot;Added action %s to %squot; % (action, template) Listo, si probamos ahora agregar una suggestion como usuarios anónimos, no podremos editarlo. menttes
  • 87. Objetivo El objetivo es crear un nuevo content type Document que herede todos los campos de ATDocument y a su ves añadir un par de campos adicionales menttes
  • 88. Un vistazo menttes
  • 89. Atributos nuevos en ATAGAEXDocument menttes
  • 90. Moviendo los nuevos campos debajo de title Para mover los nuevos campos debajo del campo title debemos utilizar la función moveField, en: ProductsATAGAEXDocumentcontentAGAEXDocument.py luego de la definición de nuestro schema, ponemos AGAEXDocument_schema.moveField('autor', after='title') AGAEXDocument_schema.moveField('conocimiento', after='autor') AGAEXDocument_schema.moveField('publico', after='conocimiento') AGAEXDocument_schema.moveField('email', after='publico')' menttes
  • 91. Atributos movidos en ATAGAEXDocument menttes
  • 92. Ejemplo 4: ATArticle - Schemata menttes
  • 93. Atributos para el campo body menttes
  • 94. Atributos para el campo firstname menttes
  • 95. Atributos para el campo lastname menttes
  • 97. Agregando un nuevo Article 1) Copiar la carpeta ATArticle en el directorio Products  2) Reiniciar Zope 3) Instalar ATArticle usando QuickInstaller 4) Agregar un nuevo Article menttes
  • 98. Edit Article form – Schemata default menttes
  • 99. Edit Article form – Schemata article menttes
  • 100. Edit Article form – Schemata author menttes
  • 101. View Article menttes
  • 102. Borrando el schemata default Para borrar el schemata default primero debemos mover los atributos id y title a nuestro schemata article, en: ProductsATArticlecontentArticle.py luego de la definición de nuestro schema, ponemos Article_schema['id'].schemata = 'article' Article_schema['title'].schemata = 'article' menttes
  • 103. Article sin schemata default menttes
  • 104. Ocultando title en Article Lo que haremos a continuación es borrar el atributo title de nuestro content type Article, en: ProductsATArticlecontentArticle.py luego de la definición de nuestro schema, ponemos Article_schema['title'].required = 0 Article_schema['title'].widget.visible = {'edit': 'hidden', 'view': 'invisible'} menttes
  • 105. Article sin el atributo title menttes
  • 106. Que paso con el id de nuestro ATArticle? Al haber ocultado el atributo title de nuestro content type, Plone utiliza un id por defecto que lo obtiene de manera automática de acuerdo a la fecha del día en que se crea el objeto. menttes
  • 107. Pisando title en Article Lo que haremos sera modificar el atributo title cambiándole el nombre a Author, en: ProductsATArticlecontentArticle.py luego de la definición de nuestro schema, ponemos Article_schema['title'].widget.label = 'Author' #Article_schema['title'].required = 0 #Article_schema['title'].widget.visible = {'edit': 'hidden', 'view': 'invisible'} menttes
  • 110. ¿Qué es Archetypes? Archetypes es un framework diseñado para facilitar la construcción de aplicaciones para Plone menttes
  • 111. Objetivo Principal Proporcionar un método común para construir content type, basado en la definición de esquemas menttes
  • 112. Arquitectura Archetypes Schema Field Widget Schema   Field Widget … menttes
  • 113. ¿Qué es un esquema Archetypes ? El corazón de archetypes es su esquema (secuencia de campos). El esquema trabaja como una definición de lo que su objeto contendrá y como presentar la información contenida. menttes
  • 114. Esquema y Esquema Base Para crear un esquema se pasan los campos que se desean dentro del objeto esquema como una tupla. Ej.: Schema(( StringField('body',            widget = TextAreaWidget(label='Body')                    ), # otros campos aquí )) menttes
  • 115. Esquema Base + Esquema schema = Schema(( StringField('body'), )) class Ejemplo(BaseContent) schema = BaseSchema + schema menttes
  • 116. Fields Todos los campos son instanciados de la misma manera, creando un campo y pasándole a este un parámetro requerido: name Ej.: from Products.Archetypes.public import IntegerField # un simple campo para edad age = IntegerField('age') menttes
  • 117. Widgets Una widget contiene la información acerca de cómo será representado visualmente el objeto      Ej.: from Products.Archetypes.public import IntegerField from Products.Archetypes.public import IntegerWidget # un simple campo para la edad age = IntegerField('age',                                  widget=IntegerWidget(label=quot;Your agequot;)                         )  menttes
  • 118. Ejemplo de Archetypes: Artist schema = Schema(( StringField('name'), ImageField('photo'), LinesField('instrument'),         )) class Artist(BaseContent) schema = BaseSchema + schema registerType(Artist,PROJECTNAME) menttes
  • 119. Widgets schema = Schema(( StringField('name', widget=StringWidget( label='Artist name', size=20), ), ImageField('photo', widget=ImageWidget(label='Headshot'), ), LinesField('instrument',             widget=MultiSelectionWidget(label='Instruments'), multiValue=1, ), )) menttes
  • 120. Ejemplo: Artist paso a paso Products | ­ Artist         |         ­ __init__.py         |         ­ Artist.py         |         ­ config.py         |         ­ Extension                    |                     ­ __init__.py                         |      menttes     ­ Install.py
  • 121. Paso 1) Directorio Artist Lo primero que debemos hacer es ir dentro de nuestro directorio de productos Plone y crear una carpeta con el nombre “Artist” Ejemplo: /var/www/zope/plone-2.1.1/Product/Artist (Aunque podemos crearla en cualquier lado y luego tirarla dentro de “Product”) menttes
  • 122. Paso 2) Artist.py 1  from Products.Archetypes.public import * 2  from Products.Artist.config import PROJECTNAME 3 4  class Artist(BaseContent): 5  “””A Simple Content Type“”” 6  schema = BaseSchema + Schema(( 7 StringField('name'), 8 ImageField('photo'), 9 LinesField('instrument'), 10             )) 11 12 registerType(Artist,PROJECTNAME) menttes
  • 123. Paso 3) Atributos schema = BaseSchema + Schema(( StringField('name', widget=StringWidget(label='Artist name', size=20), ), ImageField('photo', widget=ImageWidget(label='Headshot'), ), LinesField('instrument',             widget=MultiSelectionWidget(label='Instruments'), multiValue=1, ), )) menttes
  • 124. Bien a esta altura ya hemos definido el esquema que tendra nuestro  nuevo content type Artist Ahora veamos como convertir un esquema Archetypes en un producto  Zope menttes
  • 125. Paso 4) __init__.py 1     from Products.Archetypes.public import process_types, listTypes 2     from Products.CMFCore import utils 3     from Products.MyName.config import PROJECTNAME, ADD_CONTENT_PERMISSION 4  5     def initialize(context): 6        ## Import Types here to register them 7        import Name 8 9        content_types, constructors, ftis = process_types(listTypes(PROJECTNAME), 10                    PROJECTNAME) 11  12      utils.ContentInit( 13     PROJECTNAME + ' Content', 14            content_types = content_types, 15     permission = ADD_CONTENT_PERMISSION, 16           extra_constructors = constructors, 17     fti = ftis, 18       ).initialize(context) menttes
  • 127. Bien ya tenemos nuestro producto Plone listo con nuestro content type definido mediante esquemas. Ahora veamos como hacer el producto que hemos creado instalable. menttes
  • 128. Paso 6) Install.py Bien, primero debemos crear una nueva carpeta Extensions dentro de nuestra carpeta Artist. Ahora si, dentro de esta agregamos Install.py: 1   from Products.Artist.config import PROJECTNAME 2   from Products.Archetypes.public import listTypes 3   from Products.Archetypes.Extensions.utils import installTypes 4   from StringIO import StringIO 5   def install(self): 6  out = StringIO() 7 installTypes(self, out, 8 listTypes(PROJECTNAME), 9  PROJECTNAME)  10 print >> out, quot;Successfully installed %s.quot; % PROJECTNAME 11 return out.getvalue()  menttes
  • 129. Listo! Hemos terminado. Ahora vamos a probarlo, para esto reiniciemos nuestra instancia Zope, dentro de Plone vamos al ZMI, luego a portal_quickinstaller e instalamos nuestro nuevo producto. En la front-page vamos a nuestra barra de contenidos 'drop-down list' y cargamos un nuevo content type Artist! menttes
  • 130. Material leido para ArchGenXML/ArgoUML http://plone.org/documentation/tutorial/archgenxml-getting-started/tutorial-all-pages http://plone.org/products/archgenxml/documentation/how-to/setting-up-argouml-to-provide-tagg http://plone.org/products/archgenxml/issues/30 http://plone.org/documentation/tutorial/picking-archetypes-widgets/tutorial-all-pages http://plone.org/documentation/tutorial/archgenxml-getting-started/archgenxmlquickref http://plone.org/products/archgenxml/documentation/how-to/subclassing-atcontenttypes http://plone.org/documentation/tutorial/anonymously-adding-custom-content-types-with-argoum http://oodt.jpl.nasa.gov/wiki/display/edrn/UML+to+Portal+in+a+Few+Easy+Steps http://www.jazkarta.com/presentations/ArchGenXML-ArgoUML.pdf http://plone.org/documentation/how-to/make-view-page-use-schemata-declarations/?searchterm http://plone.org/products/archetypes/documentation/how-to/title-less-type menttes
  • 131. menttes corporate training Muchas gracias Sebastian Ferreyra info@menttes.com