Ticket #604 (closed defeito: fixed)

Opened 12 years ago

Last modified 12 years ago

Problemas ao compartilhar catálogo de endereços

Reported by: diogenesduarte Owned by: niltonneto
Priority: grave Milestone: Expresso 2.0
Component: ContactCenter Version: trunk
Severity: Keywords:
Cc: WorkGroup:

Description

Ao compartilhar o catálogo, aparece a seguinte mensagem de erro anexada à esse ticket. Me parece que é algum problema na query da trigger que mantém a integridade do banco ao salvar um compartilhamento.

Para encontrar esse erro, criei um usuário de testes e tentei compartilhar com ele os contatos do usuário expresso-admin, dando permissão de leitura e edição.

Attachments

problema contact center.png Download (58.9 KB) - added by diogenesduarte 12 years ago.

Change History

Changed 12 years ago by diogenesduarte

comment:1 Changed 12 years ago by diogenesduarte

Muito estranho esse problema não ter acontecido antes, mas já achei o motivo. É de casting. Ele tenta converter 'run' que vem da coluna acl_location na tabela acl para bigint, aí dá pau. Não sei porque antes nunca veio esse 'run' que é quando o usuário tem acesso ao contactcenter. De todo caso, já corrigi a trigger aqui no meu ambiente, testei e funcionou. Queria saber como faço para atualizá-la no projeto do expresso. É só modificar a function contactcenter_upgrade1_20_001 do arquivo contactcenter/tables_update ?

comment:2 follow-up: ↓ 3 Changed 12 years ago by niltonneto

Pois é, o mais estranho que é na instalação debian Lenny, com Postgresql 8.3, a partir do Trunk, esse problema não ocorre. No "expresso.dump" as triggers não tem nenhum CAST e consegui compartilhar os contatos pessoais para outro usuário sem problema. Vou verificar melhor como ficou a estrutura delas no banco depois de usar o script de instalação. Realmente reconheço esse problema pois tivemos isso na modúlo Agenda, para adaptá-la à versão 8.3 do Postgresql, que exige CAST nas queries com campos de tipos diferentes.

comment:3 in reply to: ↑ 2 ; follow-up: ↓ 5 Changed 12 years ago by diogenesduarte

Replying to niltonneto:

Pois é, o mais estranho que é na instalação debian Lenny, com Postgresql 8.3, a partir do Trunk, esse problema não ocorre. No "expresso.dump" as triggers não tem nenhum CAST e consegui compartilhar os contatos pessoais para outro usuário sem problema. Vou verificar melhor como ficou a estrutura delas no banco depois de usar o script de instalação. Realmente reconheço esse problema pois tivemos isso na modúlo Agenda, para adaptá-la à versão 8.3 do Postgresql, que exige CAST nas queries com campos de tipos diferentes.

Mas o problema não é o casting não, ele faz isso automático... O problema é que na function pergunta se o acl_appname é 'contactcenter', e pega o acl_location pra jogar em um campo integer, só que o acl_location além de número pode ter a string 'run', e 'run' não dá para fazer cast para inteiro. Constatei o problema no Postgres 8.3 na instalação no Lenny também. Acho que ele não acontece se não tiver o registro lá com o run em acl_location, ou seja, se a permissão para acessar o aplicativo ficar no grupo e não no usuário. Creio que o problema sempre existiu, mas a gente não encontrou antes pois costumamos dar as permissões para aplicações via grupo. Para corrigir eu modifiquei a function, perguntando se o acl_location é diferente de 'run' antes de rodar a query.

Só não sei ainda como enviar o que fiz para o repositório. Mudo lá na função que define a trigger? sou meio verde nessa parte de atualizar estrutura do banco.

comment:4 follow-up: ↓ 6 Changed 12 years ago by niltonneto

Poste aqui a nova Trigger que eu me encarrego de incluir na atualização de versão / instalação do Expresso.

comment:5 in reply to: ↑ 3 Changed 12 years ago by niltonneto

Replying to diogenesduarte:

Replying to niltonneto:

Pois é, o mais estranho que é na instalação debian Lenny, com Postgresql 8.3, a partir do Trunk, esse problema não ocorre. No "expresso.dump" as triggers não tem nenhum CAST e consegui compartilhar os contatos pessoais para outro usuário sem problema. Vou verificar melhor como ficou a estrutura delas no banco depois de usar o script de instalação. Realmente reconheço esse problema pois tivemos isso na modúlo Agenda, para adaptá-la à versão 8.3 do Postgresql, que exige CAST nas queries com campos de tipos diferentes.

Mas o problema não é o casting não, ele faz isso automático... O problema é que na function pergunta se o acl_appname é 'contactcenter', e pega o acl_location pra jogar em um campo integer, só que o acl_location além de número pode ter a string 'run', e 'run' não dá para fazer cast para inteiro. Constatei o problema no Postgres 8.3 na instalação no Lenny também. Acho que ele não acontece se não tiver o registro lá com o run em acl_location, ou seja, se a permissão para acessar o aplicativo ficar no grupo e não no usuário. Creio que o problema sempre existiu, mas a gente não encontrou antes pois costumamos dar as permissões para aplicações via grupo. Para corrigir eu modifiquei a function, perguntando se o acl_location é diferente de 'run' antes de rodar a query.

Só não sei ainda como enviar o que fiz para o repositório. Mudo lá na função que define a trigger? sou meio verde nessa parte de atualizar estrutura do banco.

Perfeito! É isso mesmo. Adicionei a aplicação "Workflow" para um usuário e aí consegui reproduzir esse erro SQL na minha nova instalação Expresso Debian Lenny.

comment:6 in reply to: ↑ 4 Changed 12 years ago by diogenesduarte

Replying to niltonneto:

Poste aqui a nova Trigger que eu me encarrego de incluir na atualização de versão / instalação do Expresso.

A trigger continua a mesma, muda só a function... Segue ela abaixo:

create function share_catalog_delete() returns trigger as '
begin 
 if old.acl_appname = ''contactcenter'' and old.acl_location!=''run'' then 
  delete from phpgw_cc_contact_rels where id_contact=old.acl_location::bigint and id_related=old.acl_account and id_typeof_contact_relation=1; 
 end if; 
return new; 
end;' language 'plpgsql'

Como eu disse antes,me parece que o cast ele faz automático, mas resolvi deixar isso logo explícito para não ter problemas caso a galera do postgres resolvar procurar encrenca com isso em alguma versão.

comment:7 Changed 12 years ago by wmerlotto

  • Milestone set to Expresso 2.0

comment:8 Changed 12 years ago by niltonneto

  • Owner changed from alguem to niltonneto

comment:9 Changed 12 years ago by niltonneto

  • Status changed from new to closed
  • Resolution set to fixed

Corrigido em [1359][1361] problema de cast de variáveis SQL na trigger delete, na instalação e na atualização (setup) do pacote. Quem quiser, pode corrigir manualmente rodando a query SQL:

CREATE OR REPLACE function share_catalog_delete() returns trigger as '
begin 
 if old.acl_appname = ''contactcenter'' and old.acl_location!=''run'' then 
  delete from phpgw_cc_contact_rels where id_contact=old.acl_location::bigint and id_related=old.acl_account and id_typeof_contact_relation=1; 
 end if; 
return new; 
end;' language 'plpgsql'

Note: See TracTickets for help on using tickets.