Atendendo a pedidos... ai vai... :)

Essa minha dúvida pode parecer tola, mas para um iniciante não
foi
muito fácil encontrar a resposta. Por isso vou descrever
detalhadamento a resolução do meu problema.

1. Criei um Database Connection.
3. Criei um ZSQL Method
3. Criei um arquivo chamado view_Resultado
4. Criei um script chamado py_Pesquisa

1. A criação do database connection dispensa comentários.
2. O ZSQL Methos tem o seguinte conteúdo:

Argumentos -> cod_cliente nome_cliente

select * from clientes 
<dtml-sqlgroup where>
<dtml-sqltest name="cod_cliente" column="cliente_id" type="int"
optional>
<dtml-and>
<dtml-sqltest name="nome_cliente" column="nome" type="nb" optional>
</dtml-sqlgroup>

3. O arquivo view_Resultado tem basicamente o seguinte conteúdo:

      <table border="1" width="100%">
        <tr>
          <th>Id</th>
          <th>Nome</th>
        </tr>
        <tr tal:repeat="item options/cliente">
          <td tal:content="item/cliente_id"></td>
          <td tal:content="item/nome"></td>
         </tr>
      </table> 

onde: 
--> "option" - é uma palavra do ZPT que significa um dicionário
de valores, que, se existe, passarão ao template, senão, nada
acontece.
--> "item" - segundo li em um manual "O nome item da variável
não é especial; poder-se-ia utilizar qualquer nome desde
começasse por
uma letra e que contenha apenas letras, números ou "_". A
variável
existe apenas no tag no qual encontra-se o atributo tal:repeat, no
caso acima o tag <tr>; Se deseja utiliza-la o fora do tag, obterá
um
erro".
--> "cliente_id" e "nome" - são campos da minha tabela.

4. O script py_Pesquisa tem o seguinte conteúdo:

from Products.PythonScripts.standard import html_quote
from AccessControl import getSecurityManager

request = container.REQUEST
RESPONSE =  request.RESPONSE

user = getSecurityManager().getUser()
username = user.getUserName()

if username == 'marcio': 
   if request.id == 'todos':
      resposta = context.ZSQL_Teste_Clilente_Localiza
   else:
      resposta =
context.ZSQL_Teste_Cliente_Localiza(cod_cliente=request.id)
   return context.view_Resultado(cliente = resposta)
else:
   print "Erro"
   return printed

comentários: 

1. a verificação "username == 'marcio'" é para poder usar
bancos de dados diferentes. Ou seja, dependendo do usuário, eu
posso
executar consultas em bancos diferentes, por exemplo em o sistema
multiempresas.
2. o script é chamado da seguinte forma:
http://localhost:9673/app/py_Pesquisa?id=todos
3. a variável "resposta" recebe o resultado da consulta e se eu
informar "id=1" a consulta retorna o cliente com o código 1.
4. depois de efetuada a consulta eu envio os dados para view_Resultado
com a linha  "return context.view_LocalizaAluno(cliente = resposta)."
Lembre-se que na minha view_Resultado eu tenho a linha "<tr
tal:repeat="item options/cliente">" que define o nome do dicionário
a ser tratado.

Bem... é isso. Não sei se a explicação está correta e
coerente, mas está funcionando. Pode ser que existam outras
explicações e com certeza outras formas de se fazer isso, até
com mais
recursos. Mas isso é para o 2o. capítulo. :))

Se tiverem contribuições para um iniciante eu agradeço.

Até logo.

Márcio Delfino Carvalho

--- Em zope-pt@yahoogrupos.com.br, "pythondeveloper"
<[EMAIL PROTECTED]> escreveu
> Ae Marcio, ja que conseguiu fazer compartilhe conosco aqui na lista,
> pq a sua duvida pode ser a de muitos.
> 
> flw
> 
> 
> 
> --- Em zope-pt@yahoogrupos.com.br, "marcio_d_c" <[EMAIL PROTECTED]>
escreveu
> > Oi Rodrigo,
> > 
> > Encontrei uma resposta para a minha dúvida. Depois de muito
procurar
> > conseguir fazer o que eu queria. 
> > 
> > 
> > Abrigado e até a próxima.
> > 
> > 
> > Márcio D. Carvalho
> > 
> > --- Em zope-pt@yahoogrupos.com.br, "marcio_d_c" <[EMAIL PROTECTED]>
> escreveu
> > > Oi Rodrigo,
> > > 
> > > Será que você poderia indicar um local onde eu pudesse
ver um
> > > exemplo
> > > prático?? É que os exemplos que encontrei na net estão
> > > fragmentados,
> > > ou seja, apenas com pequenas porções do código, e não
> > > consegui
> > > fazê-los funcionar... Sabe como é a vida de iniciante...
:)) E
> > > olha
> > > que eu já perdi algumas horas de sono procurando, mas pela
pouca
> > > experiência não consegui entender os exemplos que
encontrei.
> > > 
> > > A maior dúvida é mesmo como passar o resultado do Z SQL
Method
> > > (no
> > > script) para a minha página (ZPT) onde o resultado será
exibido.
> > > 
> > > Agradeço a ajuda.
> > > 
> > > 
> > > Márcio D. Carvalho 
> > > 
> > > 
> > > --- Em zope-pt@yahoogrupos.com.br, Rodrigo Braga <[EMAIL PROTECTED]>
> > > escreveu
> > > > Marcio
> > > > 
> > > > Uma forma seria a seguinte:
> > > > 
> > > > No script que chama o ZSQL você coloca uma condicional, por
> > > exemplo:
> > > > 
> > > > se role_user é admin:
> > > >     retorna zsql x
> > > >  senão:
> > > >     retorna zsql y
> > > >  
> > > >  Lembre-se, ZPT é apenas para apresentação, todas as
suas
> > > regras de
> > > negócios podem ser "confortavelmente" abrigadas nos scripts
python
> > > :-D
> > > >  
> > > >  Sacou?!
> > > >  
> > > >  Qualquer coisa grita aí!
> > > >  
> > > >  Tentei :-)
> > > > 
> > > > 
> > > > 
> > > > marcio_d_c <[EMAIL PROTECTED]> escreveu: Oi pessoal, estou
iniciando
> > > meu aprendizado em Zope/Python com a
> > > > construção de um pequeno aplicativo. A idéia é que
ele seja
> > > > multiempresa e sendo assim eu criarei vários ZSQL, um para
cada
> > > > empresa. Até aqui a coisa funciona, mas está
complicando no
> > > > momento de selecionar o ZSQL de determinada empresa.
> > > > 
> > > > Ex.:
> > > > 
> > > > e title    
> > > >   
> > > >   
> > > >     
> > > >      
> > > >         
> > > >           Id
> > > >           Nome
> > > >         
> > > >         
> > > >           #
> > > >           num_prot
> > > >          
> > > >        
> > > > 
> > > > 
> > > >   
> > > > 
> > > > 
> > > > Eu queria que um script Python retornasse o ZSQL apropriado de
> > > acordo
> > > > com o usuário que está autenticado. Eu já sei como
> > > verificar
> > > > qual o usuário autenticado, mas não sei devolver para
ZPT o
> > > > ZSQL da empresa do usuário.
> > > > 
> > > > Será que alguém poderia me ajudar?
> > > > 
> > > > Agradeço.
> > > > 
> > > > 
> > > > Márcio Delfino Carvalho
> > > > 
> > > > 
> > > > 
> > > > 
> > > > Para enviar uma mensagem: zope-pt@yahoogrupos.com.br
> > > > Para desistir envie uma mensagem em branco para:
> > > [EMAIL PROTECTED] 
> > > > Links do Yahoo! Grupos
> > > > 
> > > > 
> > > > 
> > > > 
> > > >  
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > >                 
> > > > ---------------------------------
> > > >  Yahoo! doce lar. Faça do Yahoo! sua homepage.




Para enviar uma mensagem: zope-pt@yahoogrupos.com.br
Para desistir envie uma mensagem em branco para: [EMAIL PROTECTED] 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/zope-pt/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a