On 3/6/07, Rodrigo Senra <[EMAIL PROTECTED]> wrote:
>
>  [ Rafael Oliveira ]:
>
>  |2. A funcionalidade que eu procurava era de ter um gatilho ativado a
>  |cada vez que um campo de um objeto fosse alterado, mesmo que isso não
>  |acontecesse através da interface web. Por exemplo, se em algum lugar
>  |eu executasse " obj.setMeuField('meuvalor')" eu queria que um método
>  |fosse chamado. Pelo o que eu verifiquei nem o index_object do meu
>  |índice nem o at_post_edit_script são chamados nessa situação.
>  |
>  |Alguma idéia ?
>
>  Acho que vc pode criar um mutator para o campo.
>  O  AT cria setters default para cada campo, mas estes
>  podem ser sobrescritos por rotinas suas (bem como getters).

Essa solução funcionaria sim. Porém o meu cenário é um pouco pior (eu
não deixei muito claro): eu gostaria de ter esse comportamento para
todos os campos de vários tipos de objetos diferentes. Ou seja, eu
quero registrar qualquer mudança em qualquer campo.

Como eu não preciso dessa fucionalidade urgentemente eu não parei para
pensar na solução mais elegante. A primeira coisa que me veio a cabeça
foi sobrescrever o __getattr__() das classes para interceptar as
chamadas dos setters de todos os campos [1] (por exemplo, todos os
métodos cujos nomes começam com "set") e aí ativar o meu gatilho.

Se alguém tiver alguma sugestão eu agradeço !


[1] Essa idéia foi inspirada na classe ServerProxy do módulo xmlrpclib
da biblioteca padrão do Python 2.4.


>
>  Abração,
>  Senra
>
>  -------------
>  Rodrigo Senra
>  GPr Sistemas
>  http://www.gpr.com.br
>                    




-- 
Rafael Bruno Cavalhero de Oliveira <[EMAIL PROTECTED]>
Paradigma <http://www.paradigma.com.br>
http://rafaelbco.wordpress.com

Responder a