Desarrollo de Productos con Archetypes y ArchGenXML

131
corporate training menttes Sebastian, Ferreyra [email protected] Desarrollo de Productos con Archetypes y ArchGenXML

description

Curso introductorio de desarrollo de productos archetypes para plone. Herramientas UML, introducción a diagramas uml para desarrollo archetypes, ArgoUml, archgenxml, vocabularios, workflow.

Transcript of Desarrollo de Productos con Archetypes y ArchGenXML

Page 1: Desarrollo de Productos con Archetypes y ArchGenXML

corporate training menttes

Sebastian, Ferreyra

[email protected]

Desarrollo de Productos con Archetypes y ArchGenXML

Page 2: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

¿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.

Page 3: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 4: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 5: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Unificado

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

Page 6: Desarrollo de Productos con Archetypes y ArchGenXML

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

Page 7: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

UML Tools - Poseidon

1) Software comercial2) Escrito en Java, corre en la mayoria de las

plataformas3) Basado en ArgoUML4) Almacena el modelo en formato XMI + información

del diagrama en archivos .zuml (archivos zip)5) Es bastante lento6) Necesita mucha memoria y una rapida CPU

Website y download - www.gentleware.com

Page 8: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

UML Tools - ArgoUML

1) Software libre2) Escrito en Java, corre en la mayoría de las

plataformas3) Almacena el modelo en formato XMI + información

del diagrama en archivos .zuml (archivos zip)4) No posee undo5) Conocidas, pero no criticas bugs

Website y download - argouml.tigris.org

Page 9: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

UML Tools - ObjectDomain

1) Comercial, demo por tiempo limitado <= 30 días2) Escrito en Java, corre en la mayoría de las

plataformas3) Se necesita exportar el modelo desde su nativo

.odm formato

Website y download - objectdomain.com

Page 10: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

UML Tools - Powerdesigner

1) Version XMI 1.12) Se necesita exportar el modelo

Website y download - sybase.com

Page 11: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

UML Tools - Umbrello

1) Software libre2) Corre bajo Linux/KDE3) Almacena el modelo en formato XMI4) Hasta la version 1.4 Umbrello no soportaba de

manera correcta el formato XMI

Website y download - uml.sourceforge.net

Page 12: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 13: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Content types – Por defecto

Page 14: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Content types – De terceros

Page 15: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Content types – Nuestros

Page 16: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

ArgoUML

Page 17: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

ArgoUML - Windows XP Download

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

Page 18: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

ArgoUML – Ejecutar Jar File

Para ejecutar ArgoUML hacemos doble click en el archivo argouml

Page 19: Desarrollo de Productos con Archetypes y ArchGenXML

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

Page 20: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

ArgoUML – Creando un .zargo con argouml_profile

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

Page 21: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 22: Desarrollo de Productos con Archetypes y ArchGenXML

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:

"C:\Program Files\Java\jre1.5.0_06\bin\javaw.exe" "-Dargo.defaultModel=your_PC_path\argouml_profile.xmi" -jar "your_PC_path\ArgoUML-0.20\argouml.jar" "%L"

Page 23: Desarrollo de Productos con Archetypes y ArchGenXML

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

Page 24: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 25: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

¿Porque ArgoUML?

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

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

Page 26: Desarrollo de Productos con Archetypes y ArchGenXML

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

Page 27: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Ejemplo Uno: ArtistSite

Page 28: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Creando la clase Artist

Page 29: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Descripción, icono y docstring

Page 30: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Atributos para el campo Title

Page 31: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Tamaños de la foto

Page 32: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Vocabulario de instrumentos

Page 33: Desarrollo de Productos con Archetypes y ArchGenXML

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,

Page 34: Desarrollo de Productos con Archetypes y ArchGenXML

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

Page 35: Desarrollo de Productos con Archetypes y ArchGenXML

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

Page 36: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

De UML a Archetypes usando ArchGenXML

Page 37: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Corriendo el script

Comando:

ArchGenXML.py -o ProductName ProductName.zargo

Page 38: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Agregando un nuevo Artist

1) Copiar la carpeta ArtistSite en el directorio Products 2) Reiniciar Zope3) Instalar ArtistSite usando QuickInstaller4) Agregar un nuevo Artist

Page 39: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Edit Artist form

Page 40: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

View Artist

Page 41: Desarrollo de Productos con Archetypes y ArchGenXML

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

Page 42: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Vocabulario dinámico

Page 43: Desarrollo de Productos con Archetypes y ArchGenXML

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 Zope4) Reinstalar ArtistSite

Page 44: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Vocabulary Library

Ir a Plone Setup y elegir Vocabulary Library

Page 45: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Agregamos un termino al vocabulario

Page 46: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Vocabulario dinámico - Artist

Page 47: Desarrollo de Productos con Archetypes y ArchGenXML

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'

Page 48: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Usando <<large>> stereotype

Page 49: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Le damos a este un nombre amigable

Page 50: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Agregamos el contenedor Artists

Page 51: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Ejemplo Dos: GiveSuggestion

Page 52: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Atributos para el campo name

Page 53: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Atributos para el campo suggestion

Page 54: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Atributos para el campo area

Page 55: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Corriendo el script

Comando:

ArchGenXML.py -o GiveSuggestion GiveSuggestion.zargo

Page 56: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Agregando una nueva Suggestion

1) Copiar la carpeta GiveSuggestion en el directorio Products 2) Reiniciar Zope3) Instalar GiveSuggestion usando QuickInstaller4) Agregar una nueva Suggestion

Page 57: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Edit Suggestion form

Page 58: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 59: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Agregando el diagrama de estado

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

Page 60: Desarrollo de Productos con Archetypes y ArchGenXML

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

Page 61: Desarrollo de Productos con Archetypes y ArchGenXML

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

Page 62: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Otro estado simple

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

Page 63: Desarrollo de Productos con Archetypes y ArchGenXML

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

Page 64: Desarrollo de Productos con Archetypes y ArchGenXML

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

Page 65: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 66: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Seteando permisos, estado Submitted

Page 67: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Seteando permisos, estado Approved

Page 68: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Seteando permisos, estado Complete

Page 69: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Seteando permisos, estado Rejected

Page 70: Desarrollo de Productos con Archetypes y ArchGenXML

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

Page 71: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Guard - Approve

Page 72: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Guard - Complete

Page 73: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Guard - Reject

Page 74: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Corriendo el script

Comando:

ArchGenXML.py -o GiveSuggestion GiveSuggestion.zargo

Page 75: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Agregando una nueva Suggestion1) Copiar la carpeta GiveSuggestion en el directorio Products 2) Reiniciar Zope3) Instalar GiveSuggestion usando QuickInstaller4) Agregar una nueva Suggestion

Page 76: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 77: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 78: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 79: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Carpeta Suggestion - Security

b) Buscamos ahora el permiso Modify portal content. Asegurarse de que Aquire esta

desclickeado y clickear Anonymous y Authenticated.

Page 80: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 81: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 82: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Creamos suggestion_post.cpy

En Products\GiveSuggestion\skins\GiveSuggestion

## Script (Python) "suggestion_post"##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.')

Page 83: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Creamos suggestion_post.cpy.metadata

En Products\GiveSuggestion\skins\GiveSuggestion

[default]title = Submit a suggestion

[validators]validators =

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

Page 84: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Editamos Install.py

En Products\GiveSuggestion\Extensions\Install.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')

Page 85: Desarrollo de Productos con Archetypes y ArchGenXML

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): """Add the given action to the portalFormController""" controller.addFormAction(template, status, contentType, button, actionType, action) print >> out, "Added action %s to %s" % (action, template)

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

Page 86: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Ejercicio Uno: ATAGAEXDocument

Page 87: Desarrollo de Productos con Archetypes y ArchGenXML

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

Page 88: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Un vistazo

Page 89: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Atributos nuevos en ATAGAEXDocument

Page 90: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Moviendo los nuevos campos debajo de title

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

Products\ATAGAEXDocument\content\AGAEXDocument.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')'

Page 91: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Atributos movidos en ATAGAEXDocument

Page 92: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Ejemplo 4: ATArticle - Schemata

Page 93: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Atributos para el campo body

Page 94: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Atributos para el campo firstname

Page 95: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Atributos para el campo lastname

Page 96: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Corriendo el script

Comando:ArchGenXML.py -o ATArticle ATArticle.zargo

Page 97: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Agregando un nuevo Article

1) Copiar la carpeta ATArticle en el directorio Products 2) Reiniciar Zope3) Instalar ATArticle usando QuickInstaller4) Agregar un nuevo Article

Page 98: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Edit Article form – Schemata default

Page 99: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Edit Article form – Schemata article

Page 100: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Edit Article form – Schemata author

Page 101: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

View Article

Page 102: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Borrando el schemata default

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

Products\ATArticle\content\Article.py

luego de la definición de nuestro schema, ponemos

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

Page 103: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Article sin schemata default

Page 104: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Ocultando title en Article

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

Products\ATArticle\content\Article.py

luego de la definición de nuestro schema, ponemos

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

Page 105: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Article sin el atributo title

Page 106: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 107: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Pisando title en Article

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

Products\ATArticle\content\Article.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'}

Page 108: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Atributo title renombrado

Page 109: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Ejercicio Dos: ATBirthday

Page 110: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

¿Qué es Archetypes?

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

Page 111: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Objetivo Principal

Proporcionar un método común para construir content type,

basado en la definición de esquemas

Page 112: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Arquitectura Archetypes

SchemaField

WidgetSchema  Field

Widget…

Page 113: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 114: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Esquema y Esquema Base

Para crear un esquema se pasan los camposque se desean dentro del objeto esquema

como una tupla.

Ej.:

Schema((StringField('body', 

          widget = TextAreaWidget(label='Body')                   ),

# otros campos aquí))

Page 115: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Esquema Base + Esquema

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

))

class Ejemplo(BaseContent)schema = BaseSchema + schema

Page 116: Desarrollo de Productos con Archetypes y ArchGenXML

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 edadage = IntegerField('age')

Page 117: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Widgets

Una widget contiene la información acerca de cómo será representado visualmente el objeto

    Ej.:from Products.Archetypes.public import IntegerFieldfrom Products.Archetypes.public import IntegerWidget

# un simple campo para la edadage = IntegerField('age',                                 widget=IntegerWidget(label="Your age")                        ) 

Page 118: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Ejemplo de Archetypes: Artist

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

        ))

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

Page 119: Desarrollo de Productos con Archetypes y ArchGenXML

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,),

))

Page 120: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Ejemplo: Artist paso a pasoProducts|\­ Artist   

     |        \­ __init__.py        |        \­ Artist.py        |        \­ config.py        |        \­ Extension                   |                    \­ __init__.py                        |     

    \­ Install.py

Page 121: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

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”)

Page 122: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Paso 2) Artist.py

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

Page 123: Desarrollo de Productos con Archetypes y ArchGenXML

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,),

))

Page 124: Desarrollo de Productos con Archetypes y ArchGenXML

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

Page 125: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Paso 4) __init__.py1     from Products.Archetypes.public import process_types, listTypes2     from Products.CMFCore import utils3     from Products.MyName.config import PROJECTNAME, ADD_CONTENT_PERMISSION4 5     def initialize(context):6        ## Import Types here to register them7        import Name89        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)

Page 126: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Paso 5) config.py

1 PROJECTNAME = 'Artist'

2 ADD_CONTENT_PERMISSION = 'Artist: Add Content'

Page 127: Desarrollo de Productos con Archetypes y ArchGenXML

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.

Page 128: Desarrollo de Productos con Archetypes y ArchGenXML

menttes

Paso 6) Install.pyBien, 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 PROJECTNAME2   from Products.Archetypes.public import listTypes3   from Products.Archetypes.Extensions.utils import installTypes4   from StringIO import StringIO5   def install(self):6  out = StringIO()7 installTypes(self, out,8 listTypes(PROJECTNAME),9  PROJECTNAME) 10 print >> out, "Successfully installed %s." % PROJECTNAME11 return out.getvalue() 

Page 129: Desarrollo de Productos con Archetypes y ArchGenXML

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!

Page 130: Desarrollo de Productos con Archetypes y ArchGenXML

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-tagged-values-and-stereotypes-in-a-dropdown-menu

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-argouml-and-archgenxml/tutorial-all-pages

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=BaseSchema

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

Page 131: Desarrollo de Productos con Archetypes y ArchGenXML

corporate training menttes

Muchas gracias

Sebastian Ferreyra

[email protected]