Exportar valores do Browser através de uma Query

Discussão em 'Progress 4GL' iniciado por Marciogodoi, Abril 25, 2012.

  1. Marciogodoi

    Marciogodoi Sem Pontuação

    Bom dia pessoal , estou passando um browser para um outro programa como uma variavel handle

    /* Chamada do programa exporta.p*/
    RUN exporta.p (INPUT BROWSE-2:HANDLE IN FRAME f1).

    No programa exporta.p quero listar os valores do Browser conforme a Query que esta definida no Browser.

    /* ========= Programa exporta.p ==================== */
    DEFINE INPUT PARAMETER myBrowser AS HANDLE NO-UNDO.
    DEFINE VARIABLE vQuery AS HANDLE NO-UNDO.

    /* Este codigo abaixo retirei do Forum 4Each */
    vQuery = myBrowser:QUERY.
    vQuery:GET-FIRST.

    DO WHILE NOT vQuery:QUERY-OFF-END:

    /*Como fazer aqui para Listar os valores de todas as linhas/colunas do Browser*/

    vQuery:GET-NEXT.
    END.

    Agradeço aos amigos que puderem dar uma luz.

    Marcio Godoi
    Analista de Sistemas
  2. LeandroSantos

    LeandroSantos Membro Participativo

    Código:
    DEFINE INPUT PARAMETER myBrowser AS HANDLE NO-UNDO.
    DEFINE VARIABLE vQuery AS HANDLE NO-UNDO.
    
    def var hCol as handle extent.
    def var loop as int.
    def var vLinha as char.
    
    assign
       extent(hCol) = myBrowser:num-columns
       vQuery = myBrowser:QUERY.
    
    vQuery:GET-FIRST.
    DO WHILE NOT vQuery:QUERY-OFF-END:
       vlinha = "".
       do loop = 1 to extent(hCol).
          assign
             hCol[loop] = myBrowser:get-browse-column(loop):buffer-field
             vLinha     = vLinha + string(hCol[loop]:buffer-value,hCol[loop]:format) + " ".
       end.
       
       disp vLinha format "X(200)"
          with frame mostra down scrollable.
       down with frame mostra.
       
       vQuery:GET-NEXT.
    END.
    
    Obs.
    Caso tenha algum campo calculado no browse vai dar erro, precisa tatar isso.

    Att.
    Leandro.
  3. Marciogodoi

    Marciogodoi Sem Pontuação

    Obrigado Leandro, funcionou perfeitamente as listagem dos campos.

    Apenas uma questão, após a execução do programa o Browser ficou com a barra de rolagem travado.

    Como fazer para que o Browser volte ao normal?


    Marcio Godoi
    Analista de Sistemas
  4. LeandroSantos

    LeandroSantos Membro Participativo

    Não sei o porque de estar travando a barra de rolagem, no teste que eu fiz aqui funcionou normal, não travou nada.
  5. Marciogodoi

    Marciogodoi Sem Pontuação

    Boa tarde, a procedure fico show de bola, porém quando fui testar com um browser que possuia campos com "extend" ocorreu erro.

    Teria como pegar o valor da tela do browser? Tentei o SCREEN-VALUE mas não foi reconhecido.

    Desde já agradeço.

    Att,

    Márcio
  6. LeandroSantos

    LeandroSantos Membro Participativo

    Para pegar o screen-value do browse você precisa estar com alinha selecionada.
    Dependendo do browse pode ficar um pouco lento.
    Código:
    DEFINE INPUT PARAMETER myBrowser AS HANDLE NO-UNDO.
    DEFINE VARIABLE vQuery AS HANDLE NO-UNDO.
    
    def var hCol as handle extent.
    def var loop as int.
    def var vLinha as char.
    def var hBff as handle.
    
    assign
       extent(hCol) = myBrowser:num-columns
       vQuery = myBrowser:QUERY
       hBff   = vQuery:get-buffer-handle(1).
    
    vQuery:GET-FIRST.
    DO WHILE NOT vQuery:QUERY-OFF-END:
       vQuery:reposition-to-rowid(hBff:rowid).
       vlinha = "".
       do loop = 1 to extent(hCol).
          assign
             hCol[loop] = myBrowser:get-browse-column(loop)
             vLinha     = vLinha + string(hCol[loop]:input-value,hCol[loop]:format) + " ".
       end.
       
       disp vLinha format "X(200)"
          with frame mostra down scrollable.
       down with frame mostra.
       
       vQuery:GET-NEXT.
    END.
    
    Qualquer coisa estamos ai.
    Abraço.

Compartilhe esta Página