menttes
 corporate training




                      Desarrollo de Productos con 
                      Archetypes y Arch...
¿Qué es UML?




 UML son las siglas para Unified Modeling Language;
     que en castellano quiere decir: Lenguaje de
   M...
Lenguaje



  UML es, precisamente, un lenguaje. Lo que implica
  que éste cuente con una sintaxis y una semántica.
     P...
Modelado




   UML es visual. Mediante su sintaxis se modelan
   distintos aspectos del mundo real que permiten
  una mej...
Unificado




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




                 ...
UML Tools




   ArchGenXML procesa modelos almacenados en
formato XMI. Este formato XML no esta pensado para
ser escrito ...
UML Tools - Poseidon



1) Software comercial
2) Escrito en Java, corre en la mayoria de las
   plataformas
3) Basado en A...
UML Tools - ArgoUML



1) Software libre
2) Escrito en Java, corre en la mayoría de las
   plataformas
3) Almacena el mode...
UML Tools - ObjectDomain




1) Comercial, demo por tiempo limitado <= 30 días
2) Escrito en Java, corre en la mayoría de ...
UML Tools - Powerdesigner




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

Website y download - sybase.com




  ...
UML Tools - Umbrello




1)   Software libre
2)   Corre bajo Linux/KDE
3)   Almacena el modelo en formato XMI
4)   Hasta l...
Una breve introducción a UML

UML (Lenguaje de Modelado Unificado), es un lenguaje
gráfico diseñado para describir softwar...
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/




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




                          ...
ArgoUML – Descargando archgenxml tagged values

1) Descargamos argouml_profile:

http://plone.org/products/archgenxml/issu...
ArgoUML – Creando un .zargo con argouml_profile


1) Abrimos ArgoUML
2) Vamos a “Archivo” -> “Guardar el proyecto como ......
ArgoUML – Creando un .zargo con argouml_profile

3) Luego lo que hacemos es pararnos encima del archivo .zargo que acabamo...
ArgoUML – Creando un .zargo con argouml_profile

5) Clickeamos en “Opciones avanzadas”, luego seleccionamos “open” y a con...
ArgoUML – Creando un .zargo con argouml_profile



 Listo, ahora podemos ver dentro de nuestro modelo
    las opciones AGX...
¿Que es ArgoUML?




     ArgoUML es una herramienta utilizada en el
  modelaje de sistemas, mediante la cual se realizan
...
¿Porque ArgoUML?




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


  ...
Definiendo Custom Content types


Ejemplo Uno: ArtistSite – Diagrama,   atributos

Ejemplo Dos: GiveSuggestion – Workflow
...
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 mod...
¿Porqué usar ArchGenXML? (parte 1)



 • Quieres ahorrarte tiempo

 • Eres un programador bago

 • No te gusta re inventar...
¿Porqué usar ArchGenXML? (parte 2)




 • Tienes proyectos grandes con muchos content
   types diferentes

 • Quieres o ne...
De UML a Archetypes usando ArchGenXML




                                        menttes
Corriendo el script

Comando:
ArchGenXML.py -o ProductName ProductName.zargo




                                       me...
Agregando un nuevo Artist
1)   Copiar la carpeta ArtistSite en el directorio Products
2)   Reiniciar Zope
3)   Instalar Ar...
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 a...
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 agre...
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
   agreg...
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




                                   ...
Agregando una nueva Suggestion
1)   Copiar la carpeta GiveSuggestion en el directorio Products
2)   Reiniciar Zope
3)   In...
Edit Suggestion form




                       menttes
Workflow




  Lo que haremos ahora es agregarle workflow a
         nuestro content type Suggestion.
  Definiremos los es...
Agregando el diagrama de estado

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




 ...
Agregando un estado inicial

2) Agregamos un estado inicial, solo debemos clickear
   en el circulo de color negro solida,...
Agregando un estado simple
3) A continuación agregamos un estado simple, este
   luce como una caja redonda con una linea
...
Otro estado simple

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




      ...
Agregando estados finales

5) A la derecha de Approved agregamos un estado
   final (circulo negro con contorno blanco) al...
Nombrando las transiciones




7) Lo que hacemos a continuación es nombrar las
   transiciones, la trancision que va al es...
Permisos de los usuarios


8) Ahora vamos a definir lo que cada rol puede ver,
   los usuarios Anonimos podran Crear (un e...
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...
Guard - Approve




                  menttes
Guard - Complete




                   menttes
Guard - Reject




                 menttes
Corriendo el script

Comando:
ArchGenXML.py -o GiveSuggestion GiveSuggestion.zargo




                                   ...
Agregando una nueva Suggestion
1) Copiar la carpeta GiveSuggestion en el directorio Products 
2) Reiniciar Zope
3) Instala...
Anónimos Suggestion




  Lo que haremos ahora es permitirle a los usuarios
anónimos agregar suggestions a nuestro sitio. ...
Carpeta Suggestion


1) En nuestra instancia Plone agregamos una carpeta
   en la raíz llamada Suggestions. Y dentro de es...
Carpeta Suggestion - Security


2) En nuestro ZMI:
   a) Navegamos hasta la carpeta suggestions/archive
      y clickeamos...
Carpeta Suggestion - Security


 b) Buscamos ahora el permiso Modify portal
    content. Asegurarse de que Aquire esta
   ...
Carpeta Suggestion - Security

  c) En la parte de mas abajo de la pagina
     clickeamos en el boton Save Changes para
  ...
Negar edición a los Anónimos


   El objetivo es hacer que los usuarios anónimos no
  puedan editar suggestions, para esto...
Creamos suggestion_post.cpy
En ProductsGiveSuggestionskinsGiveSuggestion
## Script (Python) quot;suggestion_postquot;
##ti...
Creamos suggestion_post.cpy.metadata


En ProductsGiveSuggestionskinsGiveSuggestion
[default]
title = Submit a suggestion
...
Editamos Install.py

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

y...
Editamos Install.py



En la parte inferior del archivo agregamos el código:
def addFormControllerAction(self, out, contro...
Ejercicio Uno: ATAGAEXDocument




                             menttes
Objetivo




El objetivo es crear un nuevo content type Document
que herede todos los campos de ATDocument y a su
       v...
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 func...
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




                                            ...
Agregando un nuevo Article

1) Copiar la carpeta ATArticle en el directorio Products 
2) Reiniciar Zope
3) Instalar ATArti...
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 sc...
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...
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...
Pisando title en Article

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

ProductsATA...
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 P...
Objetivo Principal




           Proporcionar un método común
             para construir content type,
         basado e...
Arquitectura Archetypes


                          Schema
                              Field
                           ...
¿Qué es un esquema Archetypes ?



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

 E...
Esquema y Esquema Base

            Para crear un esquema se pasan los campos
             que se desean dentro del objeto...
Esquema Base + Esquema



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


 class Ejemplo(BaseC...
Fields

    Todos los campos son instanciados de la misma
    manera, creando un campo y pasándole a este un
             ...
Widgets

  Una widget contiene la información acerca de cómo
       será representado visualmente el objeto
     
 Ej.:
 f...
Ejemplo de Archetypes: Artist

 schema = Schema((
                     StringField('name'),
                     ImageFiel...
Widgets

 schema = Schema((
      StringField('name',
           widget=StringWidget( label='Artist name', size=20),
     ...
Ejemplo: Artist paso a paso
                Products
                |
                ­ Artist   
                       ...
Paso 1) Directorio Artist


     Lo primero que debemos hacer es ir dentro de
    nuestro directorio de productos Plone y ...
Paso 2) Artist.py

 1  from Products.Archetypes.public import *
 2  from Products.Artist.config import PROJECTNAME
 3
 4  ...
Paso 3) Atributos

 schema = BaseSchema + Schema((
      StringField('name',
           widget=StringWidget(label='Artist ...
Bien a esta altura ya hemos definido el esquema que tendra nuestro 
                       nuevo content type Artist
Ahora...
Paso 4) __init__.py
 1     from Products.Archetypes.public import process_types, listTypes
 2     from Products.CMFCore im...
Paso 5) config.py




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




                    ...
Bien ya tenemos nuestro producto Plone listo con
nuestro content type definido mediante esquemas.
Ahora veamos como hacer ...
Paso 6) Install.py
       Bien, primero debemos crear una nueva carpeta
      Extensions dentro de nuestra carpeta Artist....
Listo! Hemos terminado.
 Ahora vamos a probarlo, para esto reiniciemos
nuestra instancia Zope, dentro de Plone vamos al
  ...
Material leido para ArchGenXML/ArgoUML

http://plone.org/documentation/tutorial/archgenxml-getting-started/tutorial-all-pa...
menttes
 corporate training




                      Muchas gracias




                      Sebastian Ferreyra

       ...
Upcoming SlideShare
Loading in...5
×

Desarrollo de Productos con Archetypes y ArchGenXML

3,339

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
3,339
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
203
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Desarrollo de Productos con Archetypes y ArchGenXML"

  1. 1. menttes corporate training Desarrollo de Productos con  Archetypes y ArchGenXML Sebastian, Ferreyra info@menttes.com
  2. 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. 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. 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. 5. Unificado Por que unifica varias técnicas de modelado en una única.  menttes
  6. 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. 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. 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. 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. 10. UML Tools - Powerdesigner 1) Version XMI 1.1 2) Se necesita exportar el modelo Website y download - sybase.com menttes
  11. 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. 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. 13. Content types – Por defecto menttes
  14. 14. Content types – De terceros menttes
  15. 15. Content types – Nuestros menttes
  16. 16. ArgoUML menttes
  17. 17. ArgoUML - Windows XP Download Descargamos ArgoUML 0.24: http://argouml-downloads.tigris.org/argouml-0.24/ menttes
  18. 18. ArgoUML – Ejecutar Jar File Para ejecutar ArgoUML hacemos doble click en el archivo argouml menttes
  19. 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. 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. 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. 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. 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. 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. 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. 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
  27. 27. Ejemplo Uno: ArtistSite menttes
  28. 28. Creando la clase Artist menttes
  29. 29. Descripción, icono y docstring menttes
  30. 30. Atributos para el campo Title menttes
  31. 31. Tamaños de la foto menttes
  32. 32. Vocabulario de instrumentos menttes
  33. 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. 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. 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
  36. 36. De UML a Archetypes usando ArchGenXML menttes
  37. 37. Corriendo el script Comando: ArchGenXML.py -o ProductName ProductName.zargo menttes
  38. 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
  39. 39. Edit Artist form menttes
  40. 40. View Artist menttes
  41. 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
  42. 42. Vocabulario dinámico menttes
  43. 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. 44. Vocabulary Library Ir a Plone Setup y elegir Vocabulary Library menttes
  45. 45. Agregamos un termino al vocabulario menttes
  46. 46. Vocabulario dinámico - Artist menttes
  47. 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
  48. 48. Usando <<large>> stereotype menttes
  49. 49. Le damos a este un nombre amigable menttes
  50. 50. Agregamos el contenedor Artists menttes
  51. 51. Ejemplo Dos: GiveSuggestion menttes
  52. 52. Atributos para el campo name menttes
  53. 53. Atributos para el campo suggestion menttes
  54. 54. Atributos para el campo area menttes
  55. 55. Corriendo el script Comando: ArchGenXML.py -o GiveSuggestion GiveSuggestion.zargo menttes
  56. 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
  57. 57. Edit Suggestion form menttes
  58. 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. 59. Agregando el diagrama de estado 1) Dentro de nuestro clase Suggestion, clickeamos en Crear -> Diagrama de estado menttes
  60. 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. 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. 62. Otro estado simple 4) A la derecha de Submitted agregamos otro estado simple, lo llamaremos a este Approved menttes
  63. 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. 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. 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. 66. Seteando permisos, estado Submitted menttes
  67. 67. Seteando permisos, estado Approved menttes
  68. 68. Seteando permisos, estado Complete menttes
  69. 69. Seteando permisos, estado Rejected menttes
  70. 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. 71. Guard - Approve menttes
  72. 72. Guard - Complete menttes
  73. 73. Guard - Reject menttes
  74. 74. Corriendo el script Comando: ArchGenXML.py -o GiveSuggestion GiveSuggestion.zargo menttes
  75. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  86. 86. Ejercicio Uno: ATAGAEXDocument menttes
  87. 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. 88. Un vistazo menttes
  89. 89. Atributos nuevos en ATAGAEXDocument menttes
  90. 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. 91. Atributos movidos en ATAGAEXDocument menttes
  92. 92. Ejemplo 4: ATArticle - Schemata menttes
  93. 93. Atributos para el campo body menttes
  94. 94. Atributos para el campo firstname menttes
  95. 95. Atributos para el campo lastname menttes
  96. 96. Corriendo el script Comando: ArchGenXML.py -o ATArticle ATArticle.zargo menttes
  97. 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. 98. Edit Article form – Schemata default menttes
  99. 99. Edit Article form – Schemata article menttes
  100. 100. Edit Article form – Schemata author menttes
  101. 101. View Article menttes
  102. 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. 103. Article sin schemata default menttes
  104. 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. 105. Article sin el atributo title menttes
  106. 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. 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
  108. 108. Atributo title renombrado menttes
  109. 109. Ejercicio Dos: ATBirthday menttes
  110. 110. ¿Qué es Archetypes? Archetypes es un framework diseñado para facilitar la construcción de aplicaciones para Plone menttes
  111. 111. Objetivo Principal Proporcionar un método común para construir content type, basado en la definición de esquemas menttes
  112. 112. Arquitectura Archetypes Schema Field Widget Schema   Field Widget … menttes
  113. 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. 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. 115. Esquema Base + Esquema schema = Schema(( StringField('body'), )) class Ejemplo(BaseContent) schema = BaseSchema + schema menttes
  116. 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. 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. 118. Ejemplo de Archetypes: Artist schema = Schema(( StringField('name'), ImageField('photo'), LinesField('instrument'),         )) class Artist(BaseContent) schema = BaseSchema + schema registerType(Artist,PROJECTNAME) menttes
  119. 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. 120. Ejemplo: Artist paso a paso Products | ­ Artist         |         ­ __init__.py         |         ­ Artist.py         |         ­ config.py         |         ­ Extension                    |                     ­ __init__.py                         |      menttes     ­ Install.py
  121. 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. 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. 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. 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. 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
  126. 126. Paso 5) config.py 1 PROJECTNAME = 'Artist' 2 ADD_CONTENT_PERMISSION = 'Artist: Add Content' menttes
  127. 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. 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. 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. 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. 131. menttes corporate training Muchas gracias Sebastian Ferreyra info@menttes.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×