[plonegov-br] RES: RES: Dúvida Correios.

Idg Serpro idg em serpro.gov.br
Terça Abril 19 09:58:46 BRT 2016


O código:
api.portal.show_message(message='Blueberries!', request=event.object.REQUEST)


deveria funcionar. Você tem certeza que ele está entrando no else da função configuraDestaque?
-- 
Wesley Barroso Lopes

Analista de Desenvolvimento
SERPRO/SUPDE/DEDES/DECVF

Tel: 31 3311 6838



Em 19/04/2016 07:56:33, Tarcísio Ribeiro Freire Junior escreveu:
> 


> 
> A chamada é feita com um subscriber, no configure.zcml.> 
>  > 
>   <subscriber> 
>         for=".interfaces.IDestaque> 
>               Products.Archetypes.interfaces.IObjectInitializedEvent"         
> 
>         handler=".content.destaque.configuraDestaque"> 
>         />> 
>  > 
> 
> 
> 
>  > 
> Tarcísio Ribeiro Freire Junior
> Analista de Correios / ANALISTA IX> 
> 
> 
>  > 
> 
> 
> AC/VICOR/DECOR/GSSU
> tarcisiofreire em correios.com.br
> (61) 3207-1775> 
> 
> 
> 
> 

> > 
>  > 
> 
> 
> De:>  > plonegov-br-bounces em listas.interlegis.gov.br>  [mailto:> plonegov-br-bounces em listas.interlegis.gov.br> ]
> Em nome de > Idg Serpro
> Enviada em:>  segunda-feira, 18 de abril de 2016 17:32
> Para:>  > plonegov-br em listas.interlegis.gov.br
> Assunto:>  Re: [plonegov-br] RES: Dúvida Correios.> 

> > 

> > 
>  > 
> Quem chama 'configuraDestaque'?
> 
> 
-- 
> 
Wesley Barroso Lopes
> 
Analista de Desenvolvimento
> SERPRO/SUPDE/DEDES/DECVF
> 
Tel: 31 3311 6838
> 
> 
> 
> 
Em 18/04/2016 17:09:22, Tarcísio Ribeiro Freire Junior escreveu:> 
> > 
> > 
> > Nada feito.
> > 
> > Coloquei o import e implementei deste jeito:> > 
> >  > > 
> > def configuraDestaque(destaque,event):> > 
> >     """configuracoes do Destaque"""> > 
> >    
> > 
> >     > > import
 pdb; pdb.set_trace();> > 
> >  > > 
> >    
> > catalog = getToolByName(destaque,'portal_catalog') 
> > 
> >     # cria pasta com mesmo id e titulo do destaque para conter
 todo seu conteudo> > 
> >     id =
> > destaque.id> > 
> >     titulo = destaque.Title()> > 
> >     pastaPai = aq_parent(aq_inner(destaque))> > 
> >     objetoPreExistente = destaqueExistente(destaque)> > 
> >  > > 
> >     if not objetoPreExistente:> > 
> >        
> > pastaPai.manage_renameObject(id, id + '-pagina')> > 
> >        
> > destaque.setTitle(titulo + SUFIXO_DESTAQUE)> > 
> >        
> > pastaPai.invokeFactory("Folder",id,title=titulo)> > 
> >        
> > pastaDestaque = pastaPai[id]   
> > 
> >         #habilita restricoes de tipos> > 
> >         addable_types = ["Destaque","Image"]   
> > 
> >         pastaDestaque.setConstrainTypesMode(constraintypes.ENABLED)> > 
> >         pastaDestaque.setLocallyAllowedTypes(addable_types)> > 
> >         pastaDestaque.setImmediatelyAddableTypes(addable_types)      
> > 
> >         # Will finish Archetypes content item creation
 process,> > 
> >         # rename-after-creation and such> > 
> >         pastaDestaque.unmarkCreationFlag()> > 
> >  > > 
> >         objetosDoDestaque = catalog(path = { "query"
 : "/".join(pastaPai.getPhysicalPath()), "depth" : 1},> > 
> >                                 portal_type = addable_types)> > 
> >  > > 
> >        
> > for objeto in objetosDoDestaque:> > 
> >             pastaDestaque.manage_pasteObjects(pastaPai.manage_cutObjects(> > objeto.id> > ))> > 
> >             if objeto.portal_type == 'Destaque':> > 
> >                 pastaDestaque.default_page =
> > objeto.id> > 
> >     else:> > 
> >        
> > api.portal.show_message(message='Blueberries!', request=event.object.REQUEST)> > 
> >        
> > pastaPai.manage_delObjects([id])> > 
> >  > > 
> > def destaqueExistente(destaque):> > 
> >     """Verifica se já há desataques na pasta pai. Se houver lança
 execeção e aborta a criação."""> > 
> >     pastaPai = aq_parent(aq_inner(destaque))> > 
> >    
> > itens = pastaPai.items()> > 
> >     # import pdb; pdb.set_trace();> > 
> >    
> > for item in itens:> > 
> >         # item é uma lista filha da lista itens: (título do objeto
 , objeto)    > > 
> >         > > if
 IDestaque.providedBy(item[1]) and item[0] != destaque.Title():> > 
> >            
> > 
> >             > > logger.warn(destaque)> > 
> >             logger.warn(pastaPai)> > 
> >             logger.warn(item[1])> > 
> >            
> > 
> >             item[1].plone_utils.addPortalMessage(_(u'Não é possível
 cadastrar mais de um destaque em uma pasta. Por favor, volte até a pasta /Destaques e adicione o item pretendido.'), 'error')> > 
> >             return item[1]> > 
> >  > > 
> >  > > 
> > 
> > 
> > 
> >  > > 
> > Tarcísio Ribeiro Freire Junior
> > Analista de Correios / ANALISTA IX> > 
> > 
> > 
> >  > > 
> > 
> > 
> > AC/VICOR/DECOR/GSSU
> > tarcisiofreire em correios.com.br
> > (61) 3207-1775> > 
> > 
> > 
> > 
> > 

> > > > 
> >  > > 
> > 
> > 
> > De:> > 
> > plonegov-br-bounces em listas.interlegis.gov.br> >  [mailto:> > plonegov-br-bounces em listas.interlegis.gov.br> > ]
> > Em nome de > > Idg Serpro
> > Enviada em:> >  segunda-feira, 18 de abril de 2016 16:53
> > Para:> >  > > plonegov-br em listas.interlegis.gov.br
> > Assunto:> >  Re: [plonegov-br] Dúvida Correios.> > 

> > > > 

> > > > 
> >  > > 
> > Você pode tentar utilizar o plone.api:> > 
> > 
> >  > > 

> > > > 
> > 
> > http://docs.plone.org/develop/plone.api/docs/portal.html#show-notification-message
> > 
> > -- 
> > 
Wesley Barroso Lopes
> > 
Analista de Desenvolvimento
> > SERPRO/SUPDE/DEDES/DECVF
> > 
Tel: 31 3311 6838
> > 
> > 
> > 
> > Em 18/04/2016 16:26:50, Tarcísio Ribeiro Freire Junior escreveu:> > 
> > > 
> > > 
> > > Pessoal, boa tarde!> > > 
> > >  > > > 
> > > Tenho um tipo de conteúdo chamado destaque que, devido a necessidade do requisito, só deve ter um por pasta.
 Deste modo, o código completo mais abaixo, além de criar elementos necessários ao funcionamento da instância do tipo, controla uma adição secundária deste. E, ao término do processo, tenta apresentar uma mensagem para o usuário, ponto que estou enfrentando
 o problema. > > > 
> > >  > > > 
> > > Já olhei a documentação
> > > 
http://docs.plone.org/develop/plone/sessions/statusmessages.html> > > , mas não foi muito esclarecedora quanto ao erro que estou inserindo no código.> > > 
> > >  > > > 
> > > Estou com um dúvida nesta linha, creio:> > > 
> > > 
> > > item[1].plone_utils.addPortalMessage(_(u'Não é possível cadastrar mais de um destaque em uma pasta. Por favor, volte até a pasta /Destaques e adicione o item pretendido.'), 'error')> > > 
> > >  > > > 
> > > **O que está sendo curioso em todo esse processo de tentativa e erro é que já consegui apresentar a mensagem
 quando estava dando um erro de permissão de adição de itens. Creio que meu código esteja se perdendo com o contexto.> > > 
> > >  > > > 
> > > ***Desculpem pela qualidade do código, pois já fiz tantas tentativas que acabei bagunçado por demais. Pretendo
 organizá-lo ao final, após descobrir o que está ocorrendo.> > > 
> > >  > > > 
> > >  > > > 
> > > Antecipadamente, agradeço o apoio.> > > 
> > > Obrigado!> > > 
> > >  > > > 
> > > ####################################
> > > 
Código completo> > > 
> > > ####################################> > > 
> > >  > > > 
> > >  > > > 
> > > # -*- coding: utf-8 -*-> > > 
> > > """Definition of the Destaque content type> > > 
> > > """> > > 
> > > from Acquisition import aq_inner, aq_parent> > > 
> > > from zope.interface import implements> > > 
> > > from zope.component import getUtility> > > 
> > > HAS_LINGUAPLONE = True> > > 
> > > try:> > > 
> > >     from Products.LinguaPlone.I18NBaseBTreeFolder import I18NOnlyBaseBTreeFolder> > > 
> > >     from Products.LinguaPlone import public as atapi> > > 
> > > except ImportError:> > > 
> > >     HAS_LINGUAPLONE = False> > > 
> > >     from Products.Archetypes import atapi> > > 
> > >  > > > 
> > > from plone.app.folder.folder import ATFolder> > > 
> > > from plone.i18n.normalizer.interfaces import IIDNormalizer> > > 
> > >  > > > 
> > > from Products.CMFCore.utils import getToolByName> > > 
> > > from Products.ATContentTypes.content.document import ATDocument, ATDocumentSchema> > > 
> > > from Products.ATContentTypes.content import schemata> > > 
> > > from Products.ATContentTypes.configuration import zconf> > > 
> > > from Products.ATContentTypes.lib import constraintypes> > > 
> > >  > > > 
> > > # -*- Message Factory Imported Here -*-> > > 
> > > from pci.conteudo import conteudoMessageFactory as _> > > 
> > > from pci.conteudo.interfaces import IDestaque> > > 
> > > from pci.conteudo.config import PROJECTNAME, SUFIXO_DESTAQUE> > > 
> > > import logging> > > 
> > > from pci.policy import config> > > 
> > > logger = logging.getLogger(config.PROJECTNAME)> > > 
> > >  > > > 
> > > def configuraDestaque(destaque,event):> > > 
> > >     """configuracoes do Destaque"""> > > 
> > >    
> > > 
> > >     > > > import
 pdb; pdb.set_trace();> > > 
> > >  > > > 
> > >    
> > > catalog = getToolByName(destaque,'portal_catalog') 
> > > 
> > >     # cria pasta com mesmo id e titulo do destaque para conter todo seu conteudo> > > 
> > >     id =
> > > destaque.id> > > 
> > >     titulo = destaque.Title()> > > 
> > >     pastaPai = aq_parent(aq_inner(destaque))> > > 
> > >     objetoPreExistente = destaqueExistente(destaque)> > > 
> > >  > > > 
> > >     if not objetoPreExistente:> > > 
> > >        
> > > pastaPai.manage_renameObject(id, id + '-pagina')> > > 
> > >        
> > > destaque.setTitle(titulo + SUFIXO_DESTAQUE)> > > 
> > >        
> > > pastaPai.invokeFactory("Folder",id,title=titulo)> > > 
> > >        
> > > pastaDestaque = pastaPai[id]   
> > > 
> > >         #habilita restricoes de tipos> > > 
> > >        
> > > addable_types = ["Destaque","Image"]   
> > > 
> > >         pastaDestaque.setConstrainTypesMode(constraintypes.ENABLED)> > > 
> > >         pastaDestaque.setLocallyAllowedTypes(addable_types)> > > 
> > >         pastaDestaque.setImmediatelyAddableTypes(addable_types)      
> > > 
> > >         # Will finish Archetypes content item creation process,> > > 
> > >         # rename-after-creation and such> > > 
> > >         pastaDestaque.unmarkCreationFlag()> > > 
> > >  > > > 
> > >         objetosDoDestaque = catalog(path = { "query" : "/".join(pastaPai.getPhysicalPath()),
 "depth" : 1},> > > 
> > >                                 portal_type = addable_types)> > > 
> > >  > > > 
> > >        
> > > for objeto in objetosDoDestaque:> > > 
> > >             pastaDestaque.manage_pasteObjects(pastaPai.manage_cutObjects(> > > objeto.id> > > ))> > > 
> > >             if objeto.portal_type == 'Destaque':> > > 
> > >                 pastaDestaque.default_page =
> > > objeto.id> > > 
> > >     else:> > > 
> > >         pastaPai.manage_delObjects([id])> > > 
> > >  > > > 
> > > def destaqueExistente(destaque):> > > 
> > >     """Verifica se já há desataques na pasta pai. Se houver lança execeção e aborta a criação."""> > > 
> > >     pastaPai = aq_parent(aq_inner(destaque))> > > 
> > >    
> > > itens = pastaPai.items()> > > 
> > >     # import pdb; pdb.set_trace();> > > 
> > >    
> > > for item in itens:> > > 
> > >         # item é uma lista filha da lista itens: (título do objeto , objeto)   
> > > 
> > >         > > > if
 IDestaque.providedBy(item[1]) and item[0] != destaque.Title():> > > 
> > >            
> > > 
> > >             > > > logger.warn(destaque)> > > 
> > >             logger.warn(pastaPai)> > > 
> > >             logger.warn(item[1])> > > 
> > >  > > > 
> > >            
> > > item[1].plone_utils.addPortalMessage(_(u'Não é possível cadastrar mais de um destaque em uma pasta. Por favor, volte até a pasta /Destaques e adicione o item pretendido.'), 'error')> > > 
> > >            
> > > return item[1]> > > 
> > >            
> > > 
> > >  > > > 
> > >  > > > 
> > > DestaqueSchema = ATDocumentSchema.copy() + atapi.Schema((> > > 
> > >  > > > 
> > >     # -*- Your Archetypes field definitions here ... -*-> > > 
> > >  > > > 
> > > ))> > > 
> > >  > > > 
> > > # Set storage on fields copied from ATFolderSchema, making sure> > > 
> > > # they work well with the python bridge properties.> > > 
> > >  > > > 
> > > DestaqueSchema['title'].storage = atapi.AnnotationStorage()> > > 
> > > DestaqueSchema['description'].storage = atapi.AnnotationStorage()> > > 
> > >  > > > 
> > > schemata.finalizeATCTSchema(> > > 
> > >     DestaqueSchema,> > > 
> > >     folderish=False,> > > 
> > >    
> > > moveDiscussion=False> > > 
> > > )> > > 
> > >  > > > 
> > > class Destaque(ATDocument):> > > 
> > >     """Unidade Destaque dos Correios"""> > > 
> > >    
> > > 
> > >     implements(IDestaque)> > > 
> > >     meta_type = "Destaque"> > > 
> > >    
> > > schema = DestaqueSchema> > > 
> > >  > > > 
> > >     _at_rename_after_creation = True> > > 
> > >  > > > 
> > >  > > > 
> > >     title = atapi.ATFieldProperty('title')> > > 
> > >     description = atapi.ATFieldProperty('description')> > > 
> > >     # -*- Your ATSchema to Python Property Bridges Here ... -*-> > > 
> > >  > > > 
> > > atapi.registerType(Destaque, PROJECTNAME)> > > 
> > >  > > > 
> > > 
> > > 
> > >  > > > 
> > > Tarcísio Ribeiro Freire Junior
> > > Analista de Correios / ANALISTA IX> > > 
> > > 
> > > 
> > >  > > > 
> > > 
> > > 
> > > AC/VICOR/DECOR/GSSU
> > > tarcisiofreire em correios.com.br
> > > (61) 3207-1775> > > 
> > > 
> > > 
> > > 
> > > 
> > >  > > > 

> > > > > > 
> > >  > > > 
> > > 

> > > > > > 

> > > 
AVISO LEGAL
> > > 
> > > 
“Esta mensagem é destinada exclusivamente para a(s) pessoa(s) a quem é dirigida, podendo conter informação confidencial e/ou legalmente privilegiada. Se você não for destinatário desta mensagem, desde já fica notificado de abster-se a divulgar, copiar, distribuir,
 examinar ou, de qualquer forma, utilizar a informação contida nesta mensagem, por ser ilegal. Caso você tenha recebido esta mensagem por engano, peço que me retorne este e-mail, promovendo, desde logo, a eliminação do seu conteúdo em sua base de dados, registros
 ou sistema de controle. Fica desprovida de eficácia e validade a mensagem que contiver opiniões particulares e vínculos obrigacionais, expedida por quem não detenha poderes de representação por parte da ECT.”
> > > 
> > > 
"This message is intended only for the person to whom it is addressed and may contain confidential and/or legally privileged. If you are not a recipient of this message, it is now notified of refraining to disclose; copy; distribute; examine; or in any way
 use the information contained in this message because it is illegal. If you have received this message in error, please I ask to return this email, promoting as soon as possible the elimination of its content in database, records or system control. It is devoid
 of effective and valid message that contains the private opinions and dividend bonds, issued by those not holding powers of attorney by the ECT."> > > 
> > > -- > > > 
> > > Comunidade Plone no Governo> > > 
> > > Site: > > > http://www.softwarelivre.gov.br/plone> > > 
> > > Wiki: > > > http://colab.interlegis.leg.br/wiki/PloneGovBr> > > 
> > > Histórico: > > > http://colab.interlegis.leg.br/search/?type=thread&order=latest&list=plonegov-br> > > 
> > > Lista: > > > https://listas.interlegis.gov.br/mailman/listinfo/plonegov-br> > > 
> > 
> >  > > 

> > > > 
> > 
> > -
> > 
> > 
> > 
"Esta mensagem do SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO), empresa pública federal regida pelo disposto na Lei Federal nº 5.615, é enviada exclusivamente a seu destinatário e pode conter informações confidenciais, protegidas por sigilo profissional.
 Sua utilização desautorizada é ilegal e sujeita o infrator às penas da lei. Se você a recebeu indevidamente, queira, por gentileza, reenviá-la ao emitente, esclarecendo o equívoco."
> > 
> > 
"This message from SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO) -- a government company established under Brazilian law (5.615/70) -- is directed exclusively to its addressee and may contain confidential data, protected under professional secrecy rules.
 Its unauthorized use is illegal and may subject the transgressor to the law's penalties. If you're not the addressee, please send it back, elucidating the failure."> > 

> > > > 

> > > > 
> >  > > 
> > 

> > > > 

> > 
AVISO LEGAL
> > 
> > 
“Esta mensagem é destinada exclusivamente para a(s) pessoa(s) a quem é dirigida, podendo conter informação confidencial e/ou legalmente privilegiada. Se você não for destinatário desta mensagem, desde já fica notificado de abster-se a divulgar, copiar, distribuir,
 examinar ou, de qualquer forma, utilizar a informação contida nesta mensagem, por ser ilegal. Caso você tenha recebido esta mensagem por engano, peço que me retorne este e-mail, promovendo, desde logo, a eliminação do seu conteúdo em sua base de dados, registros
 ou sistema de controle. Fica desprovida de eficácia e validade a mensagem que contiver opiniões particulares e vínculos obrigacionais, expedida por quem não detenha poderes de representação por parte da ECT.”
> > 
> > 
"This message is intended only for the person to whom it is addressed and may contain confidential and/or legally privileged. If you are not a recipient of this message, it is now notified of refraining to disclose; copy; distribute; examine; or in any way
 use the information contained in this message because it is illegal. If you have received this message in error, please I ask to return this email, promoting as soon as possible the elimination of its content in database, records or system control. It is devoid
 of effective and valid message that contains the private opinions and dividend bonds, issued by those not holding powers of attorney by the ECT."> > 
> > -- > > 
> > Comunidade Plone no Governo> > 
> > Site: > > http://www.softwarelivre.gov.br/plone> > 
> > Wiki: > > http://colab.interlegis.leg.br/wiki/PloneGovBr> > 
> > Histórico: > > http://colab.interlegis.leg.br/search/?type=thread&order=latest&list=plonegov-br> > 
> > Lista: > > https://listas.interlegis.gov.br/mailman/listinfo/plonegov-br> > 
> 
>  > 
> 
> -
> 
> 
> 
"Esta mensagem do SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO), empresa pública federal regida pelo disposto na Lei Federal nº 5.615, é enviada exclusivamente a seu destinatário e pode conter informações confidenciais, protegidas por sigilo profissional.
 Sua utilização desautorizada é ilegal e sujeita o infrator às penas da lei. Se você a recebeu indevidamente, queira, por gentileza, reenviá-la ao emitente, esclarecendo o equívoco."
> 
> 
"This message from SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO) -- a government company established under Brazilian law (5.615/70) -- is directed exclusively to its addressee and may contain confidential data, protected under professional secrecy rules.
 Its unauthorized use is illegal and may subject the transgressor to the law's penalties. If you're not the addressee, please send it back, elucidating the failure."> 

> > 

> > 


> 
AVISO LEGAL
> 
> 
“Esta mensagem é destinada exclusivamente para a(s) pessoa(s) a quem é dirigida, podendo conter informação confidencial e/ou legalmente privilegiada. Se você não for destinatário desta mensagem, desde já fica notificado de abster-se a divulgar, copiar, distribuir,
 examinar ou, de qualquer forma, utilizar a informação contida nesta mensagem, por ser ilegal. Caso você tenha recebido esta mensagem por engano, peço que me retorne este e-mail, promovendo, desde logo, a eliminação do seu conteúdo em sua base de dados, registros
 ou sistema de controle. Fica desprovida de eficácia e validade a mensagem que contiver opiniões particulares e vínculos obrigacionais, expedida por quem não detenha poderes de representação por parte da ECT.”
> 
> 
"This message is intended only for the person to whom it is addressed and may contain confidential and/or legally privileged. If you are not a recipient of this message, it is now notified of refraining to disclose; copy; distribute; examine; or in any way
 use the information contained in this message because it is illegal. If you have received this message in error, please I ask to return this email, promoting as soon as possible the elimination of its content in database, records or system control. It is devoid
 of effective and valid message that contains the private opinions and dividend bonds, issued by those not holding powers of attorney by the ECT."
> 


> -- 
Comunidade Plone no Governo
Site: > http://www.softwarelivre.gov.br/plone> 
Wiki: > http://colab.interlegis.leg.br/wiki/PloneGovBr> 
Histórico: > http://colab.interlegis.leg.br/search/?type=thread&order=latest&list=plonegov-br> 
Lista: > https://listas.interlegis.gov.br/mailman/listinfo/plonegov-br


-


"Esta mensagem do SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO), empresa pública federal regida pelo disposto na Lei Federal nº 5.615, é enviada exclusivamente a seu destinatário e pode conter informações confidenciais, protegidas por sigilo profissional. Sua utilização desautorizada é ilegal e sujeita o infrator às penas da lei. Se você a recebeu indevidamente, queira, por gentileza, reenviá-la ao emitente, esclarecendo o equívoco."

"This message from SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO) -- a government company established under Brazilian law (5.615/70) -- is directed exclusively to its addressee and may contain confidential data, protected under professional secrecy rules. Its unauthorized use is illegal and may subject the transgressor to the law's penalties. If you're not the addressee, please send it back, elucidating the failure."
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.interlegis.gov.br/pipermail/plonegov-br/attachments/20160419/68b18889/attachment.html>
-------------- Próxima Parte ----------
Um anexo não-texto foi limpo...
Nome: image001.jpg
Tipo: image/jpeg
Tamanho: 13693 bytes
Descrição: não disponível
URL: <http://listas.interlegis.gov.br/pipermail/plonegov-br/attachments/20160419/68b18889/attachment.jpg>
-------------- Próxima Parte ----------
Um anexo não-texto foi limpo...
Nome: image001.jpg
Tipo: image/jpeg
Tamanho: 13693 bytes
Descrição: não disponível
URL: <http://listas.interlegis.gov.br/pipermail/plonegov-br/attachments/20160419/68b18889/attachment-0001.jpg>
-------------- Próxima Parte ----------
Um anexo não-texto foi limpo...
Nome: image001.jpg
Tipo: image/jpeg
Tamanho: 13693 bytes
Descrição: não disponível
URL: <http://listas.interlegis.gov.br/pipermail/plonegov-br/attachments/20160419/68b18889/attachment-0002.jpg>


Mais detalhes sobre a lista de discussão PloneGov-BR