Classe: tNewProcessCria 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 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). |
NewMétodo construtor da classe tNewProcess.tNewProcess(): New ( < cFunction>, [ cTitle], < bProcess>, [ cDescription], [ cPerg], [ aInfoCustom], [ lPanelAux], [ nSizePanelAux], [ cDescriAux], [ lViewExecute], [ lOneMeter] ) --> 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 |
|
|
IncRegua1Altera mensagem exibida da primeira régua de processamento.tNewProcess(): IncRegua1 ( [ cMsg] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência | cMsg | Caracter | Mensagem de processamento da régua. |
|
|
IncRegua2Altera 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. |
|
|
SaveLogGrava log de processamento no SXU.tNewProcess(): SaveLog ( [ cText] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência | cText | Caracter | Texto para gravação do log |
|
|
oProcess:SaveLog("Gravacao de log")
Observações - A filial gravada no log é sempre a filial utilizada durante a operação. - A data gravada no log é sempre a data de login informada no sistema. - O usuário gravado é sempre o usuário logado no sistema. SetRegua1Seta primeira régua de processamento.tNewProcess(): SetRegua1 ( [ nSet] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência | nSet | Numérico | Tamanho do processamento da regua |
|
|
SetRegua2Seta segunda régua de processamento.tNewProcess(): SetRegua2 ( [ nSet] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência | nSet | Numérico | Tamanho do processamento da regua. |
|
|
Propriedade | Descrição | Tipo |
|
| Array of Record |
ExemplosProcessamento em segundo Plano
Bloco de código |
---|
title | Exemplo |
---|
linenumbers | true |
---|
| #INCLUDE "PROTHEUS.CH"
#INCLUDE "RWMAKE.CH | "User "
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 | oProcessAadd 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 | nCountC5Local nCountC6DbSelectAreaas numeric
DbSelectArea("SC5")
DbSetOrder(1) | DbGotop()nCountC5 := SC5->(RecCount())
//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) | sleep(60) 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
| ReturnStatic@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 | PIXELReturn , object, Objeto do Painel
@return Nil
/*/
Static Function Relat(oCenterPanel)
@ 65,10 Say "Relatorio" SIZE 80,10 OF oCenterPanel | PIXELReturnImage Modified
|