Duvida Programando o Progress

Discussão em 'Progress 4GL' iniciado por Kaua Tetzlaff, Março 16, 2023.

  1. Kaua Tetzlaff

    Kaua Tetzlaff Sem Pontuação

    Bom dia pessoal tudo bem? gostaria que alguem me ajudasse a como começar a programar telas ou UPCs para o DataSul, e como posso entender as estruturas de pastas e caminhos.
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    e ai Kaua ? então, pra vc criar UPCs, tem 2 coisas, primeiro descobrir os pontos de acesso, ou seja, quais são as chamadas que o programa tem ...
    Código:
        define input parameter p-ind-event  as character     no-undo.
        define input parameter p-ind-object as character     no-undo.
        define input parameter p-wgh-object as handle        no-undo.
        define input parameter p-wgh-frame  as widget-handle no-undo.
        define input parameter p-cod-table  as character     no-undo.
        define input parameter p-row-table  as rowid         no-undo.
    
        define variable c-objeto            as character     no-undo.
    
        define variable dtTrans             as handle        no-undo.
        define variable nroDocto            as handle        no-undo.
    
        /* main */
    
        assign c-objeto = entry(num-entries(p-wgh-object:private-data,'~/'), p-wgh-object:private-data,'~/').
    
            message "Evento........: " p-ind-event         skip
                    "Objeto........: " p-ind-object        skip
                    "Nome objeto ..: " c-objeto            skip
                    "Handle Objeto.: " p-wgh-object        skip
                    "Frame.........: " p-wgh-frame         skip
                    "Tabela........: " p-cod-table         skip
                    "Rowid.........: " string(p-row-table) skip
                    view-as alert-box info buttons ok.
    
    Agora vc descobrindo o ponto que vc quer trabalhar, ai vc tem que capturar o handle de um ou mais campos na tela que vc quer trabalhar, vc pode pegar o handle, criar um evento de leave, F5, entry, e por um trecho de programa seu.
    Ou ainda, vc pode criar campos na tela.
    Na verdade pra criar um exemplo é dificil, porque são muitas opções, pra procurar um campo na tela por exemplo, eu uso esse programinha ....
    Código:
    define input  parameter c-widget-name  as char   no-undo.
    define input  parameter c-widget-type  as char   no-undo.
    define input  parameter h-start-widget as handle no-undo.
    define output parameter h-widget       as handle no-undo.
    
    do while valid-handle(h-start-widget):
    
        if h-start-widget:type = c-widget-type and
           (h-start-widget:name = c-widget-name or
            (h-start-widget:type = 'LITERAL':u and
             h-start-widget:screen-value = c-widget-name)) then do:
    
            assign h-widget = h-start-widget:handle.
    
            leave.
        end.
    
        if h-start-widget:type = "field-group":u or
           h-start-widget:type = "frame":u or
           h-start-widget:type = "dialog-box":u then do:
    
            run utils/findWidget.p (input  c-widget-name,
                                    input  c-widget-type,
                                    input  h-start-widget:first-child,
                                    output h-widget).
    
            if valid-handle(h-widget) then
                leave.
        end.
    
        assign h-start-widget = h-start-widget:next-sibling.
    end.
    
    pra usar ele, olha um exemplo ...
    Código:
        if p-ind-event = 'INITIALIZE' then do:
            run utils/findWidget.p('bt-ficha'  ,'button', p-wgh-frame, output btFicha).
            run utils/findWidget.p('bt-Exporta','button', p-wgh-frame, output btExporta).
    
            if     valid-handle(btExporta) and
               not valid-handle(btFicha)   then do:
    
                create button btFicha
                    assign frame       = btExporta:frame
                           name        = 'bt-Ficha'
                           help        = 'Ficha ENGENHARIA'
                           tooltip     = 'Ficha ENGENHARIA'
                           width       = btExporta:width
                           height      = btExporta:height
                           row         = btExporta:row
                           col         = btExporta:col + btExporta:width + 1
                           flat-button = btExporta:flat-button
                           visible     = yes
                           label       = 'CF'
                           sensitive   = yes.
    
                btFicha:load-image('image/toolbar/im-brows.bmp').
                btFicha:load-image-insensitive('image/toolbar/im-brows.bmp').
    
                on 'choose':u of btFicha persistent run upc/upc-cd0204Evt.p.
            end.
        end.
    
    NO meu caso, o programa .p que mostrei pra vc tem o nome de findWidget.p

    E tem as EPCs, onde vc pode ter pontos em programas de relatorios, os rp.p e nas apis, eu tenho bastante customização na ceapi001 de estoque, tenho no bodi317ef.p que é a geração de notas fiscais, dai os parametros são outros.

    Mas pra tela, vc tem que entrar no bas_prog_dtsul, e preencher o campo UPC apontando pra um .p que vc fez com esses conteudos ai.
  3. Eduardo Joaquim

    Eduardo Joaquim Sem Pontuação

  4. Eduardo Joaquim

    Eduardo Joaquim Sem Pontuação

Compartilhe esta Página