A equipe de Framework implementou no UPDDISTR a capacidade de executar funções de compatibilização e/ou conversão de dados para as tabelas do sistema. Esse processo já existe na atualização de versão (MP710TO120), assim, com essa implementação este processo também será possível nas atualizações de Release.
A partir de agora o UPDDISTR irá procurar no RPO por uma FUNCTION iniciadas por “RUP_” + <sigla do módulo>, por exemplo: RUP_GPE, RUP_FAT, RUP_PFS, etc. Se a função existir no RPO, ela será chamada.
Serão passados para essa função RUP_”, 5 parâmetros:
cVersion : Versão do Protheus, Ex. ‘12’
cMode : Modo de execução. ‘1’=Por grupo de empresas / ‘2’=Por grupo de empresas + filial (filial completa)
cRelStart : Release de partida. Ex: ‘002’ ( Este seria o Release no qual o cliente está)
cRelFinish : Release de chegada. Ex: ‘005 ‘( Este seria o Release ao final da atualização)
cLocaliz : Localização (país). Ex: ‘BRA’
Os parâmetros referentes a Release serão passados com “0” para facilitar a programação/comparação.
A função irá ser chamada de 2 formas: Uma vez para cadaGrupo de Empresase Uma vez para cada Empresa/Filial.
Imaginemos um SIGAMAT com os seguintes registros:
Empresa | Filial |
---|
T1 | 01 |
T1 | 02 |
T1 | 03 |
T2 | 01 |
T2 | 02 |
T2 | 03 |
A chamada das funções “RUP_” se comportará da seguinte forma:
Empresa | Filial | Posicionado no Registro: |
---|
T1 | 01 | Chama uma vez com o cMode == ‘1’ Chama uma vez com o cMode == ‘2’ |
T1 | 02 | Chama uma vez com o cMode == ‘2’ |
T1 | 03 | Chama uma vez com o cMode == ‘2’ |
T2 | 01 | Chama uma vez com o cMode == ‘1’ Chama uma vez com o cMode == ‘2’ |
T2 | 02 | Chama uma vez com o cMode == ‘2’ |
T2 | 03 | Chama uma vez com o cMode == ‘2’ |
No exemplo as funções ‘RUP_” serão chamadas 8 vezes, variando o conteúdo do parâmetro cMode. Estas chamadas serão iniciadas depois de terminada a atualização dos dicionários e consequentemente a atualização da estrutura das tabelas.
Um ponto importante para entender o uso da função, é que não importa quantos Releases estão sendo atualizados, o processo de chamar as “RUP_” é feito apenas uma vez. Por exemplo, o cliente está atualmente no Release 12.1.6 e está rodando o UPDDISTR para o Release 12.1.17. Mesmo sendo atualizados vários Releases, o processo será executado uma vez só. Com isso, se houver a necessidade, pode-se otimizar a lógica para compatibilização. O desenvolvedor pode tratar de uma vez só ou Release a Release.
Bloco de código |
---|
#Include 'Protheus.ch'
//-------------------------------------------------------------------
/*{Protheus.doc} RUP_FAT
Função exemplo de compatibilização do release incremental. Esta função é relativa ao módulo faturamento.
Serão chamadas todas as funções compiladas referentes aos módulos cadastrados do Protheus
Será sempre considerado prefixo "RUP_" acrescido do nome padrão do módulo sem o prefixo SIGA.
Ex: para o módulo SIGACTB criar a função RUP_CTB
@param cVersion - Versão do Protheus
@param cMode - Modo de execução. 1=Por grupo de empresas / 2=Por grupo de empresas + filial (filial completa)
@param cRelStart - Release de partida Ex: 002
@param cRelFinish - Release de chegada Ex: 005
@param cLocaliz - Localização (país). Ex: BRA
@Author Framework
@since 28/01/2015
@version P12
*/
//-------------------------------------------------------------------
Function RUP_FAT( cVersion, cMode, cRelStart, cRelFinish, cLocaliz )
// Regra geral : só executar atualização quando release de partida diferente do release de chegada
// A decisão, no entanto, cabe ao desenvolvedor
// A decisão de executar ou não pode estar condicionada a outros fatores
//If !( cRelStart == cRelFinish )
ConOut( "Executei o update do faturamento")
ConOut( "Modo - " + If( cMode == "1", "Grupo de empresas", "Grupo de empresas + filial" ) )
ConOut( "Grupo de empresas " + cEmpAnt ) // cEmpAnt está disponível
ConOut( "Localização (país) " + cLocaliz ) // Pode-se tomar decisões baseado no país
If cMode == "2"
// Execução por FILIAL !!!
// Usar apenas caso necessário !!!
// Através do controle de cModo, é possível escolher entre processos que devem rodar para
// todo o grupo de empresa ( cModo = 1 ) ou processos que serão disparados por grupo + filial
// Ambas as opções serão executadas cabendo ao desenvolvedor escolher
ConOut( "Filial " + cFilAnt ) // cFilAnt está disponível
Else
// Execução por grupo de empresa
// Situação padrão
// A versão é passada ( Ex "12" ) e pode ser necessária no futuro
ConOut( "Versão - " + cVersion )
// Os releases de partida (início) e chegada (fim) são no formato caractere com até 43 dígitos.
// Exemplo : 033, 2510
ConOut( "Release de partida - " + cRelStart )
ConOut( "Release de chegada - " + cRelFinish )
If cRelFinish >= "2310"
// Aqui escolhi processar algo só se o release de chegada for maior ou igual a 2310
ConOut( "Disparando processo do release 2310 !!!" )
EndIf
If cRelStart >= "2210"
// Aqui escolhi processar algo se o release de partida for igual ou maior que 2210
ConOut( "Disparando processo a partir do release 2210 !!!" )
EndIf
ElseIf cMode == "2"
// Execução por FILIAL !!!
// Usar apenas caso necessário !!!
// Através do controle de cModo, é possível escolher entre processos que devem rodar para
// todo o grupo de empresa ( cModo = 1 ) ou processos que serão disparados por grupo + filial
// Ambas as opções serão executadas cabendo ao desenvolvedor escolher
ConOut( "Filial " + cFilAnt ) // cFilAnt está disponível
EndIf
//EndIf
Return NIL |
Centralizando nesta função, teremos um controle melhor do que está sendo forçado e maior facilidade para eventuais manutenções.