1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

Evento pra alterar column-label do browse em run-time

Discussão em 'Progress 4GL' iniciado por dcardelli, Dezembro 26, 2012.

  1. dcardelli

    dcardelli Sem Pontuação

    Boa tarde.

    Estou com um problema um tanto quanto frustrante nas mãos. Tenho uma query estática e em determinadas situações preciso alterar a ordem das tabelas no OPEN-QUERY pois os índices não se adequam.
    Até este ponto, consegui chegar não sem nenhum problema.
    O que fiz foi criar duas consultas, cada uma com uma ordem específica na definição das tabelas, mais ou menos assim:
    DEFINE QUERY qry-01 FOR table-01, table-02, table-03 SCROLLING.
    DEFINE QUERY qry-02 FOR table-02, table-01, table-03 SCROLLING.

    Na definição do browse, também estático, está a query qry-01 e os devidos campos no DISPLAY.
    DEFINE BROWSE brw-01 QUERY qry-01 NO-LOCK DISPLYA (campos)...

    O evento OPEN-QUERY() executa uma procedure com um QUERY-PREPARE.

    O que tive que fazer, uma vez que não posso usar query e browser dinâmicos, foi criar uma condição que executa o QUERY-PREPARE para a qry-01 ou qry-02 e depois executo o comando:

    QUERY brw-01:QUERY = QUERY qry-01
    ou
    QUERY brw-01:QUERY = QUERY qry-02

    O que acontece depois disso é que as colunas definidas no browse somem. Então tenho que adicioná-las manualmente uma a uma novamente (uma vez que elas vêem de 3 tabelas diferentes em ordens alternadas). Isso dá trabalho, mas dá pra fazer ainda dentro do evento.

    Só que nem todos os campos do banco estão definidos com label e format corretos, e eu preciso alterar o label, format e font destas colunas re-inseridas no browse após a substituição da query. E isso tem que acontecer em algum momento depois do EVENTO open-query e não pode ser por intervenção do usuário.
    Tentei ROW-DISPLAY e ROW-ENTRY, no primeiro dá erro dizendo que o WIDGET referido não existe.

    Alguém tem alguma idéia?

Compartilhe esta Página