Páginas filhas
  • Classe Automatic

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Painel
borderStylesolid
titleImplementação dos métodos e passo a passo.

Classe responsável pelo gerenciamento automático de agendamentos do Smart Schedule, permitindo as operações de inclusão, alteração e exclusão de agendamentos de maneira automática.


Aviso
titleNamespace

TOTVS.FRAMEWORK.SCHEDULE

Nota
titleImportante

Para o funcionamento desta classe, se faz necessário a preparação do ambiente com usuário que possua privilégios de Administrador.

Nota

Disponível a partir da lib do release 2410, para LIB 20240115.

Métodos

New()

Método para instanciar a classe (construtor).

Exemplo de uso:

oScheduleAuto := totvs.framework.schedule.automatic():new()



setRoutine()

Método para definir a rotina/função de execução do agendamento.

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

cRoutineCaractereX

Nome da Rotina/Função.

Retorno:

lReturn, lógico, indica se a rotina é valida para o cadastro do Schedule.

Exemplo de uso:

oScheduleAuto:setRoutine("MATR110")


Sintaxe: oScheduleAuto:setRoutine
() → True/False



setFirstExecution()

Método para definir data e hora da primeira execução do agendamento.

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

dDateDataX
Data do agendamento
cTimeCaractereX
Hora do agendamento

Formato: "HH:MM:SS"

Exemplo de uso:

oScheduleAuto:setFirstExecution(Date(),Time())


Sintaxe: oScheduleAuto:setFirstExecution
() → nil



setPeriod()

Método para definição da periodicidade do agendamento.

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

cTypeCaractereXU

Tipo da Periodicidade:

U - Única
D - Diária
S - Semanal
M - Mensal

nDayInitNumérico

Dia de Início (Apenas para o tipo MENSAL).
nHourInitNumérico

Hora de Início.
nMinuteInitNumérico

Minuto de Início.
aWeekDaysArray

Dias da Semana (Apenas para o tipo SEMANAL).

Formato:
[1..7] - Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday

Retorno:

lPeriod, lógico se a periodicidade foi definida.

Exemplo de uso:

Única

oScheduleAuto:setPeriod("U")

Diária, todos os dias ao meio dia;

oScheduleAuto:setPeriod("D",,12,0)

Semanal, apenas terças e quintas as 20:00;

oScheduleAuto:setPeriod("S",,20,0,{"Tuesday","Thursday"})

Mensal, iniciando dia 10 as 9:30;

oScheduleAuto:setPeriod("M",10,9,30)


Sintaxe: oScheduleAuto:setPeriod
() → True/False


setFrequency()

Método para definição da frequência do agendamento.

Nota
titleImportante

Definição apenas para periodicidades Diária/Semanal/Mensal. Uma vez definido as informações de periodicidade as definições da frequência deverão ser refeitas.

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

cTypeCaractereX

Tipo da Frequência:

D - Dia
H - Hora
M - Minuto

nIntervalNuméricoX
Intervalo de execução/frequência.
nDayLimitNumérico

Dia do Término.
nHourLimitNumérico

Hora do Término.
nMinuteLimitNumérico

Minuto do Término.

Retorno:

lFrequency, lógico se a frequência foi definida.

Exemplo de uso:

Frequência a cada 5 dias, terminando dia 20;

oScheduleAuto:setFrequency("D",5,20)

Frequência a cada 6 horas, encerrando as 18:00;

oScheduleAuto:setFrequency("H",6,,18,0)

Frequência a cada 30 minutos, encerrando as 22:30;

oScheduleAuto:setFrequency("M",30,,22,30)


Sintaxe: oScheduleAuto:setFrequency
() → True/False



setRecurrence()

Método para definir a recorrência do agendamento.

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

lRecurrenceLógicoX.F.Ativa/Desativa a recorrência.

Exemplo de uso:

oScheduleAuto:setRecurrence(.T.)


Sintaxe: oScheduleAuto:setRecurrence
() → nil


setDiscard()

Método para definir se descarta as tarefas atrasadas do agendamento.

Obs.: O mesmo só será setado caso a tarefa tenha frequência.

Informações

Método disponível a partir da LIB Label 20240520

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

lDiscardLógicoX.F.Ativa/Desativa o descarte das tarefas atrasadas.

Exemplo de uso:

oScheduleAuto:setDiscard(.T.)


Sintaxe: oScheduleAuto:setDiscard
() → nil


setEnvironment()

Método para definir ambiente, empresas e filiais de execução do agendamento.

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

cEnvironmentCaractere
GetEnvServer()Nome do ambiente.
aCompanyBranchesArrayX

Array contendo as Empresas e Filiais do agendamento.

Formato:
[n] Array de Empresas.
[n][1] ExpC: Código da Empresa.
[n][2] Array de Filiais.
[n][2][1] ExpC: Código da Filial.

Exemplo de uso:

oScheduleAuto:setEnvironment("PROTHEUS12", {{"99",{"01","02"}}})


Sintaxe: oScheduleAuto:setEnvironment
() → nil



setModule()

Método para definir o módulo de execução do agendamento.

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

nModeuleNuméricoX

Número do Módulo,

Exemplo de uso:

oScheduleAuto:setModule(5)


Sintaxe: oScheduleAuto:setModule
() → nil



setUser()

Método para definir o usuário de execução.

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

cUserCaractereX
Código do Usuário.

Exemplo de uso:

oScheduleAuto:setUser("000001")


Sintaxe: oScheduleAuto:setUser
() → nil



setDescription()

Método para definir a descrição do agendamento.

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

cDescriptionCaractereX
Descrição do agendamento.

Exemplo de uso:

oScheduleAuto:setDescription("Agendamento Automatico Relatório.")


Sintaxe: oScheduleAuto:setDescription
() → nil


setParams()

Método para definir o preenchimento dos parâmetros de execução definidos via SXD ou SchedDef() da Rotina.

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

aMVParamsArrayX

Array de parâmetros(MV_PAR's)

Formato Pergunte(SX1):
[1] MV_PAR01
[2] MV_PAR02
[3] MV_PAR03
...

Obs.: preenchimento deve respeitar a tipagem de cada pergunte definido no dicionário SX1, como: caractere, numérico ou data.

Formato PARAMDEF:
[1] numérico: ORDEM
[2] caractere: DE
[3] caractere: ATE

Exemplo de uso via Pergunte(SX1):

oScheduleAuto:setParams({"      ", "ZZZZZZ", 1, SToD("20231231")})

Exemplo de uso via PARAMDEF:

oScheduleAuto:setParams({1, "      ", "ZZZZZZ"})


Sintaxe: oScheduleAuto:setParams
() → nil



setForms()

Método para definir o preenchimento das formulas que representam os parâmetros de execução definidos via SXD ou SchedDef() da Rotina.

Nota
titleImportante

Preenchimento de formulas não permitido quando os parâmetros definido via PARAMDEF.

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

aMVFormsArrayX

Array de parâmetros(MV_PAR's)

Formato:
[1] MV_PAR01
[2] MV_PAR02
[3] MV_PAR03
...

Obs.: preenchimento através de STRING que representa a expressão a ser executada para preenchimento do parâmetro.

Retorno:

lReturn, lógico, indica se as formulas foram definidas.

Exemplo de uso:

oScheduleAuto:setForms({"Space(6)", "StrZero(6)"})


Sintaxe: oScheduleAuto:setForms
() → True/False



setPrintParams()

Método para definir o preenchimento dos parâmetros de impressão.

Nota
titleImportante

Definição apenas para agendamentos de relatórios.

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

cTitleCaractere

Título da impressão.

nPrintFormatNumérico

Formato da impressão (1-Web Spool/2-Email).

cFileMailCaractere

Nome do arquivo de impressão ou e-mail destinatario.

nPrintTypeNumérico

Tipo de impressão (1-HTML/2-PDF/3-Planilha).

nSheetFormatNumérico

Formato da planilha (1-Normal/2-Suprime linhas brancas e totais/3-Tabela).

Exemplo de uso:

oScheduleAuto:setPrintParams({"Impressão Automatica",1,"arquivo"})


Sintaxe: oScheduleAuto:setPrintParams
() → nil



setManageable()

Método para definir a permissão de manutenção via App SmartSchedule.

Aviso
titleAVISO

Necessário estrutura atualizada da tabela XX1, com a existência do campo XX1_MNTUSR.

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

lManageableLógicoX.T.Permite ao usuário gerenciar o agendamento.

Exemplo de uso:

oScheduleAuto:setManageable(.T.)


Sintaxe: oScheduleAuto:setManageable
() → nil


setSchedule()

Método para carregar as definições de um agendamento existente.

Parâmetros:

Nome

Tipo

Obrigatório

Default

Descrição

cScheduleIdCaractereX
Código do agendamento.

Retorno:

lReturn, lógico, indica se o agendamento foi definido.

Exemplo de uso:

oScheduleAuto:setSchedule("000001")


Sintaxe: oScheduleAuto:setSchedule
() → nil



createSchedule()

Método para inclusão do agendamento com base nas informações pré-definidas.

Retorno:

lReturn, lógico, indica se o agendamento foi incluído.

Exemplo de uso:

oScheduleAuto:createSchedule()


Sintaxe: oScheduleAuto:createSchedule
() → True/False



updateSchedule()

Método para alteração do agendamento com base nas informações pré-definidas.

Retorno:

lReturn, lógico, indica se o agendamento foi alterado.

Exemplo de uso:

oScheduleAuto:updateSchedule()


Sintaxe: oScheduleAuto:updateSchedule
() → True/False



deleteSchedule()

Método para exclusão do agendamento com base nas informações pré-definidas.

Retorno:

lReturn, lógico, indica se o agendamento foi excluído.

Exemplo de uso:

oScheduleAuto:deleteSchedule()


Sintaxe: oScheduleAuto:deleteSchedule
() → True/False



getErrorMessage()

Método recuperar a mensagem de erro em caso de falha na execução da criação, alteração ou exclusão do agendamento.

Retorno:

cMessageError, caractere, mensagem de erro.

Exemplo de uso:

oScheduleAuto:getErrorMessage()


Sintaxe: oScheduleAuto:getErrorMessage
() → Caractere



getDialogParams()

Método para preencher os parâmetros visualmente com uma dialog das perguntas assim como ocorre no schedule via interface. (A função deve conter um scheddef assim como ocorre na interface do schedule)

Nota

Disponível a partir da lib 20240408.

Retorno:

lReturn, lógico, Indica se a tela foi confirmada ou não.

Exemplo de uso:

oScheduleAuto:getDialogParams()


Sintaxe: oScheduleAuto:getDialogParams
()


Bloco de código
titleExemplo completo
collapsetrue
#include 'fw-tlpp-core.th'
#include "protheus.ch"
 
//-------------------------------------------------------------------
/*/{Protheus.doc} INCSchedAuto
 
    Exemplo de Inclusão de Agendamento Automático do SCHEDULE.
 
@author  TOTVS Framework
@since   15/01/2024
@version 1.0
/*/
//-------------------------------------------------------------------
Function INCSchedAuto()
 
    Local cEnv      as Character
    Local oScheduleAuto as object
    Local lInterfaceParams as logical

    cEnv := GetEnvServer()
    lInterfaceParams := .T.
    
    if !lInterfaceParams // Prepara ambiente para execução sem interface.
        RpcSetEnv("T1", "D MG 01 ", "admin", "1234") // informações do seu ambiente
    endIf

    oScheduleAuto := totvs.framework.schedule.automatic():new()

    // Dado do Agendamento
    oScheduleAuto:setRoutine("ATFA050")
    oScheduleAuto:setFirstExecution(DATE(),TIME())
    oScheduleAuto:setEnvironment(cEnv,{{cEmpAnt}})
    oScheduleAuto:setModule(5)
    oScheduleAuto:setUser("000000")
    oScheduleAuto:setDescription("Schedule Automático")
    oScheduleAuto:setRecurrence(.F.)
    
    if lInterfaceParams
        if !oScheduleAuto:getDialogParams()
            oScheduleAuto:setParams(getParams(3)) //Caso a tela seja cancelada poderá adicionar valores conforme necessidade
        endIf
    else
        oScheduleAuto:setParams(getParams(1))
    endIf
    
    oScheduleAuto:setPrintParams("Impressao Automatica",1,"arquivo")
 
    // Definição do PERIODO
    if oScheduleAuto:setPeriod("M",1,6,15)
 
        // Definição de FREQUENCIA
        if oScheduleAuto:setFrequency("D",1,10,23,59)
 			
 			oScheduleAuto:setDiscard(.F.) // Descartar tarefas atrasadas

            // Dispara Criação do Agendamento
            if oScheduleAuto:createSchedule()
                ConOut("/* * * * * * * * * * * * * * * * * * * * */")
                ConOut("/*  INCLUSÃO DO AGENDAMENTO COM SUCESSO  */")
                ConOut("/* * * * * * * * * * * * * * * * * * * * */")
            else
                ConOut("CREATE ERROR: "+oScheduleAuto:getErrorMessage())
            endIf
 
        endIf
 
    endIf
 
Return
 
//-------------------------------------------------------------------
/*/{Protheus.doc} ALTSchedAuto
 
    Exemplo de Alteração de Agendamento Automático do SCHEDULE.
 
@author  TOTVS Framework
@since   15/01/2024
@version 1.0
/*/
//-------------------------------------------------------------------
Function ALTSchedAuto()
 
    Local cEnv      as Character
    Local oScheduleAuto as object
    Local aSchedules as array
    Local lInterfaceParams as logical

    cEnv := GetEnvServer()
    lInterfaceParams := .T.

    if !lInterfaceParams // Prepara ambiente para execução sem interface.
        RpcSetEnv("T1", "D MG 01 ", "admin", "1234") // informações do seu ambiente
    endIf

    aSchedules := totvs.framework.schedule.utils.getSchedsByRotine("ATFA050") // Busca do código do Agendamento para o ATFA050

    if !Empty(aSchedules)
 
        oScheduleAuto := totvs.framework.schedule.automatic():new()
 
        // Indica o Agendamento a ser alterado
        oScheduleAuto:setSchedule(aSchedules[1])
 
        // Define Empresa e Filial de execução.
        oScheduleAuto:setEnvironment(cEnv,{{"T1",{"M SP 01 ","M SP 02 "}},{"T2",{"D MG 01 ","D MG 02 "}}})
 
        // Define os Parâmetros
        if lInterfaceParams
            if !oScheduleAuto:getDialogParams()
                oScheduleAuto:setParams(getParams(3)) //Caso a tela seja cancelada poderá adicionar valores conforme necessidade
            endIf
        else
            oScheduleAuto:setParams(getParams(2))
        endif
 
        // Define se o Agendamento pode ser alterado pelo usuário.
        oScheduleAuto:setManageable(.T.)
 
        // Dispara Alteração do Agendamento
        if oScheduleAuto:updateSchedule()
            ConOut("/* * * * * * * * * * * * * * * * * * * * */")
            ConOut("/*  ALTERAÇÃO DO AGENDAMENTO COM SUCESSO */")
            ConOut("/* * * * * * * * * * * * * * * * * * * * */")
        else
            ConOut("UPDATE ERROR: "+oScheduleAuto:getErrorMessage())
        endIf
 
    endIf
 
Return
 
//-------------------------------------------------------------------
/*/{Protheus.doc} DELSchedAuto
 
    Exemplo de Exclusão de Agendamento Automático do SCHEDULE.
 
@author  TOTVS Framework
@since   15/01/2024
@version 1.0
/*/
//-------------------------------------------------------------------
Function DELSchedAuto()
 
    Local cEnv      as Character
    Local oScheduleAuto as object
    Local aSchedules as array
    Local lInterfaceParams as logical

    cEnv := GetEnvServer()    
    lInterfaceParams := .T.

    if !lInterfaceParams // Prepara ambiente para execução sem interface.
        RpcSetEnv("T1", "D MG 01 ", "admin", "1234") // informações do seu ambiente
    endIf

    aSchedules := totvs.framework.schedule.utils.getSchedsByRotine("ATFA050") // Busca do código do Agendamento para o ATFA050
 
    if !Empty(aSchedules)
 
        oScheduleAuto := totvs.framework.schedule.automatic():new()
 
        // Indica o Agendamento a ser excluído
        oScheduleAuto:setSchedule(aSchedules[1])
 
        // Dispara Exclusão do Agendamento
        if oScheduleAuto:deleteSchedule()
            Conout("/* * * * * * * * * * * * * * * * * * * * */")
            Conout("/*  EXCLUSÃO DO AGENDAMENTO COM SUCESSO  */")
            ConOut("/* * * * * * * * * * * * * * * * * * * * */")
        else
            ConOut("DELETE ERROR: "+oScheduleAuto:getErrorMessage())
        endIf
     
    endIf
 
Return
 
//-------------------------------------------------------------------
/*/{Protheus.doc} getParams
 
    Montagem dos parâmetros da rotina ATFA050.
 
@return aParams - Array com as respostas dos MV_PAR's.
 
@author  TOTVS Framework
@since   15/01/2024
@version 1.0
/*/
//-------------------------------------------------------------------
Static Function getParams(nType as numeric)
 
    Local aParams as array
 	Local cRoutine          As Character
	Local aMVParams         As Array
	Local nX                As Numeric

    aParams := Array(0)
 
    if nType == 1
        aAdd(aParams, "000001")         // MV_PAR01
        aAdd(aParams, "999999")         // MV_PAR02
        aAdd(aParams, SToD("20110101")) // MV_PAR03
        aAdd(aParams, SToD("20111231")) // MV_PAR04
        aAdd(aParams, 2)                // MV_PAR05
        aAdd(aParams, "C7_DESCRI")      // MV_PAR06
        aAdd(aParams, 1)                // MV_PAR07
        aAdd(aParams, 1)                // MV_PAR08
        aAdd(aParams, 3)                // MV_PAR09
        aAdd(aParams, 1)                // MV_PAR10
        aAdd(aParams, 1)                // MV_PAR11
        aAdd(aParams, 1)                // MV_PAR12
        aAdd(aParams, "")               // MV_PAR13
        aAdd(aParams, 1)                // MV_PAR14
    elseIf nType == 2
        aAdd(aParams, "000001")         // MV_PAR01
        aAdd(aParams, "000100")         // MV_PAR02
        aAdd(aParams, SToD("20110101")) // MV_PAR03
        aAdd(aParams, SToD("20991231")) // MV_PAR04
        aAdd(aParams, 2)                // MV_PAR05
        aAdd(aParams, "C7_PRODUTO")     // MV_PAR06
        aAdd(aParams, 2)                // MV_PAR07
        aAdd(aParams, 2)                // MV_PAR08
        aAdd(aParams, 3)                // MV_PAR09
        aAdd(aParams, 2)                // MV_PAR10
        aAdd(aParams, 2)                // MV_PAR11
        aAdd(aParams, 2)                // MV_PAR12
        aAdd(aParams, "")               // MV_PAR13
        aAdd(aParams, 2)                // MV_PAR14
    elseIf nType == 3
        cRoutine := 'ATFA050'
        aMVParams := totvs.framework.schedule.utils.getParamsMv(cRoutine)
        aParams := Array(Len(aMVParams))
        
        for nX := 1 To Len(aMVParams)
            if aMVParams[nX][2] == "D"
                aParams[nX] := SToD("00000000")
            elseIf aMVParams[nX][2] == "N"
                aParams[nX] := 1
            elseIf aMVParams[nX][2] == "C"
                aParams[nX] := ""
            endIf
        next nX
    endIf
 
Return aParams