Barra de status sem while por exemplo

Bom dia. Caros, Gostaria de tirar uma dúvida, preciso colocar uma barra de status de 'processamento' porém não tem o processo rodando com while por exemplo, existia uma alternativa ?

Marcos, se entendi bem a tua pergunta, temos algumas situações semelhantes aqui. Temos uma rotina bastante longa e sequencial. Durante a execução dela, vamos atualizando a barra de progresso para o usuário não pensar que o sistema travou.

Fazemos isso usando a classe MsNewProcess() (https://tdn.totvs.com/display/public/PROT/MsNewProcess) Essa classe permite duas barras, a de cima para o processo completo e a de baixo para a etapa do momento.

Caso precise apenas de uma, existem outras possibilidades como Processa() e RptStatus(). Tem um post bem legal no Terminal de Informação mostrando as diferenças. (https://terminaldeinformacao.com/2019/05/08/como-fazer-barras-de-processamento-em-advpl/)

A rotina tem 10 etapas no nosso caso, usamos isso para definir o tamanho da régua e a cada etapa iniciada, atualizamos a régua. Fazemos o mesmo para os passos de cada etapa. Fica algo do tipo:


User Function funcPrinc()
    Private oProcess

    oProcess := MsNewProcess():New({|| funcExec()}, "Processando Registros", "Aguarde...", .T.)
    oProcess:Activate()
Return


Static Function funcExec()
    //Define o tamanho da régua 1
    oProcess:SetRegua1(10) //O processo todo tem 10 etapas

    //INICIA ETAPA 1
    //Define o tamanho da régua 2 (itens da etapa)
    oProcess:SetRegua2(4) //A etapa 1 tem 4 passos

    //Atualiza Régua 1
    oProcess:IncRegua1("Executando etapa 1...")


    //Atualiza Régua 2
    oProcess:IncRegua2("Inicializando...")
    //....
    //....
    //Atualiza Régua 2
    oProcess:IncRegua2("Processando dados...")
    //....
    //....
    //Atualiza Régua 2
    oProcess:IncRegua2("Validando Cálculos...")
    //....
    //....
    //Atualiza Régua 2
    oProcess:IncRegua2("Gravando Dados...")
    //....
    //....


    //INICIA ETAPA 2
    //Define o tamanho da régua 2 (itens da etapa)
    oProcess:SetRegua2(2) //A etapa 2 tem 2 passos

    //Atualiza Régua 1
    oProcess:IncRegua1("Executando etapa 2...")

     //Atualiza Régua 2
    oProcess:IncRegua2("Enviando Dados para API...")
    //....
    //....
    //Atualiza Régua 2
    oProcess:IncRegua2("Gravando Resultado...")
    //....
    //....

Return

Bom dia, eu removi este método de meus fontes por não ser performático.

Marcos,

Eu costumo utilizar a função FWMsgRun.

Pois ela diferente de todas as demais, não faz IO entre o server e o client, o que prejudica a performance.

A animação dela é feita em CSS então o processamento dessa animação fica só no client.

E se você deseja trocar o label, existe essa possibilidade.

Documentação:

https://tdn.totvs.com/display/public/PROT/FWMsgRun

Recentemente o suporte da Totvs me informou que este método era apenas interno e era desaconselhável utilizar, mas pelo post do Daniel agora está público. Acredito ser a melhor forma de barra de processamento.