Ticket #604 (closed defeito: fixed)
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
Change History
comment:1 Changed 15 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 15 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 15 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 15 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 15 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 15 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:9 Changed 15 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'