Páginas filhas
  • Execução de RUP na atualização de Release - UPDDISTR

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Produto:

Microsiga Protheus

Versões:

12

Passo a passo:

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.