Histórico da Página
...
Classe: tNewProcess
Cria uma tela de processamento, separada por janelas onde visualiza-se os Perguntes e o log de processamento, além dos parâmetros (SX6) e tabelas(SX5) da rotina (se houver). Ao confirmar o processamento, pode-se optar em exibir a régua de processamento da rotina.
Informações |
---|
A partir da lib 20240520 quando implementados os controles da régua 1 (SetRegua1 e IncRegua1) e executada a rotina via scheduller por meio do "Agendamento" ou "Processamento em Segundo Plano", o usuário será notificado via EventViewer sobre o progresso do processamento (25%, 50%, 75% e Processamento Concluido). Para maiores informações consulte EventViewer - Eventos de Progresso |
Métodos
New
Método construtor da classe tNewProcess.
Sintaxe
tNewProcess(): New ( < cFunction>, [ cTitle], < bProcess>, [ cDescription], [ cPerg], [ aInfoCustom], [ lPanelAux], [ nSizePanelAux], [ cDescriAux], [ lViewExecute], [ lOneMeter], [lSchedAuto] ) --> Nil
Nome | Tipo | Descrição | Obrigatório | Referência |
cFunction | Caracter | Nome da função que está chamando o objeto. | X | |
cTitle | Caracter | Título da árvore de opções. | ||
bProcess | Bloco de código | Bloco de execução que será executado ao confirmar a tela. | X | |
cDescription | Caracter | Descrição da rotina | ||
cPerg | Caracter | Nome do Pergunte (SX1) a ser utilizado na rotina. | ||
aInfoCustom | Array of Record | Informações adicionais carregada na árvore de opções. Estrutura:[1] - Nome da opção[2] - Bloco de execução[3] - Nome do bitmap[4] - Informações do painel auxiliar. | ||
lPanelAux | Lógico | Se .T. cria uma novo painel auxiliar ao executar a rotina. | ||
nSizePanelAux | Numérico | Tamanho do painel auxiliar, utilizado quando lPanelAux = .T. | ||
cDescriAux | Caracter | Descrição a ser exibida no painel auxiliar. | ||
lViewExecute | Lógico | Se .T. exibe o painel de execução. Se falso, apenas executa a função sem exibir a régua de processamento. | ||
lOneMeter | Lógico | Se .T. cria apenas uma regua de processamento. | ||
lSchedAuto | Lógico | Se .T. habilita o botão de processamento em segundo plano (execução ocorre pelo Scheduller) Disponivel a partir da lib 20240520 |
IncRegua1
Altera mensagem exibida da primeira régua de processamento.
Informações | ||
---|---|---|
| ||
A quantidade de chamadas do metodo IncRegua1 deve coincidir exatamente com o valor definido no metodo SetRegua1. |
tNewProcess(): IncRegua1 ( [ cMsg] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
cMsg | Caracter | Mensagem de processamento da régua. |
IncRegua2
Altera mensagem exibida da segunda régua de processamento.
tNewProcess(): IncRegua2 ( [ cMsg] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
cMsg | Array of Record | Mensagem de processamento da régua. |
SaveLog
Grava log de processamento no SXU.
Sintaxe
tNewProcess(): SaveLog ( [ cText] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
cText | Caracter | Texto para gravação do log |
Exemplo:
oProcess:SaveLog("Gravacao de log")
Informações | ||
---|---|---|
| ||
|
SetRegua1
Seta primeira régua de processamento.
Sintaxe
tNewProcess(): SetRegua1 ( [ nSet] )
...
→
Nome | Tipo | Descrição | Obrigatório | Referência |
nSet | Numérico | Tamanho do processamento da regua |
oProcess:SetRegua1(1)
SetRegua2
Seta segunda régua de processamento.
tNewProcess(): SetRegua2 ( [ nSet] ) -->
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência |
nSet | Numérico | Tamanho do processamento da regua. |
oProcess:SetRegua2(1)
...
Processamento em Segundo Plano
A partir da lib 20240520 foi disponibilizada a opção de Processamento em Segundo Plano que possibilita o processamento da rotina em segundo plano pelo Scheduller.
Diferente da opção "Agendar" que necessita toda a parametrização de agendamento do Scheduller pelo usuário, a opção "Processamento em Segundo Plano" emite uma tarefa considerando os seguintes pontos:
- Recorrência: Unica
- Usuário: Usuário logado no momento
- Empresa/Filial: Empresa/Filial logada no momento
- Data/hora execução: Data e hora atual
- Módulo: Módulo logado
- Rotina: A rotina que implementou o TnewProcess (conforme retorno da função funName())
Informações | ||
---|---|---|
| ||
|
TNewProcess simples
TNewProcess customizado
Bloco de código | ||||
---|---|---|---|---|
| ||||
#INCLUDE "PROTHEUS.CH"
#INCLUDE "RWMAKE.CH"
Static Function SchedDef()
// aReturn[1] - Tipo
// aReturn[2] - Pergunte
// aReturn[3] - Alias
// aReturn[4] - Array de ordem
// aReturn[5] - Titulo
Return { "P", "MTA410", "", {}, "tNewProc" }
/*/{Protheus.doc} tNewProc
Exemplo de implementação da classe tNewProcess com opção de processamento em segundo plano
@type Function
@author Bruno Pirolo
@since 26/04/2024
@return nil
/*/
Function tNewProc()
Local bProcess := {|oSelf| Executa(oSelf) }
Local cPerg := "MTA410"
Local aInfoCustom := {}
Local oProcess
//Adiciona opções customizadas
Aadd(aInfoCustom,{"Visualizar",{|oCenterPanel| visualiza(oCenterPanel)},"WATCH" })
Aadd(aInfoCustom,{"Relatorio" ,{|oCenterPanel| Relat(oCenterPanel) },"RELATORIO"})
//Instancia o objeto tNewProcess
oProcess := tNewProcess():New("tNewPro" /*cFunction*/ ,;
"Teste MsNewProcess" /*cTitle*/ ,;
bProcess /*bProcess*/ ,;
"Breve descrição da rotina" /*cDescription*/ ,;
cPerg /*cPerg*/ ,;
aInfoCustom /*aInfoCustom*/ ,;
.T. /*lPanelAux*/ ,;
5 /*nSizePanelAux*/,;
"Descrição do painel Auxiliar" /*cDescriAux*/ ,;
.T. /*lViewExecute*/ ,;
.F. /*lOneMeter*/ ,;
.T. /*lSchedAuto*/)
Return
/*/{Protheus.doc} Executa
Função de processamento
@type Static Function
@author Bruno Pirolo
@since 26/04/2024
@param oProcess, object, Objeto da classe TNewProcess
@return return_var, return_type, return_description
@example
(examples)
@see (links_or_references)
/*/
static Function Executa(oProcess)
Local nCountC5 as numeric
Local nCountC6 as numeric
DbSelectArea("SC5")
DbSetOrder(1)
//Calcula a quantidade de registros na tabela SC5
count to nCountC5
//Posiciona no topo da tabela
DbGotop()
/*Define a quantidade de registros que serão processados na régua 1 (deverá
corresponder exatamente a quantidade de chamadas do metodo IncRegua1)*/
oProcess:SetRegua1(nCountC5)
//Percorre os registros da tabela SC5
While SC5->(!Eof())
//Incrementa a régua de processamento 1
oProcess:IncRegua1("Lendo Pedido de Venda:" + SC5->C5_NUM)
DbSelectArea("SC6")
DbSetOrder(1) //C6_FILIAL, C6_NUM, C6_ITEM, C6_PRODUTO
//Elimina filtros criados na tabela SC6
DbClearFil()
//Filtra os registros da SC6
Set Filter to SC6->C6_FILIAL == xFilial("SC5") .And. SC6->C6_NUM == SC5->C5_NUM
//Calcula a quantidade de registros na tabela SC5
COUNT to nCountC6
//Posiciona no topo da tabela
DbGotop()
/*Define a quantidade de registros que serão processados na régua 2 (deverá
corresponder exatamente a quantidade de chamadas do metodo IncRegua2)*/
oProcess:SetRegua2(nCountC6)
While SC6->(!Eof())
//Incrementa a régua de processamento 2
oProcess:IncRegua2("Pedido: "+SC5->C5_NUM+" - Item: "+SC6->C6_ITEM)
//Grava log do processo (estes dados serão apresentados na opção Log de Processos do componente)
oProcess:SaveLog("Item: "+SC6->C6_ITEM)
Conout("Pedido: "+SC5->C5_NUM+" - Item: "+SC6->C6_ITEM)
SC6->(DbSkip())
End
SC5->(DbSkip())
End
Return
/*/{Protheus.doc} visualiza
Função de teste customizada
@type Static Function
@author Bruno Pirolo
@since 26/04/2024
@param oCenterPanel, object, Objeto do Painel
@return Nil
/*/
Static Function visualiza(oCenterPanel)
@ 65,10 Say "Visualiza" SIZE 80,10 OF oCenterPanel PIXEL
Return
/*/{Protheus.doc} Relat
Função de teste customizada
@type Static Function
@author Bruno Pirolo
@since 26/04/2024
@param oCenterPanel, object, Objeto do Painel
@return Nil
/*/
Static Function Relat(oCenterPanel)
@ 65,10 Say "Relatorio" SIZE 80,10 OF oCenterPanel PIXEL
Return
|