Desenvolvimento > Utilitários > Patchs > Criação de patchs 

Esta função permite criar um arquivo que contém desenvolvimentos específicos criados no dossier corrente, bem como diversos elementos parametrização alterados entre duas datas. Este instrumento é particularmente interessante se deseja adiar sobre um dossier de exploração todas as modificações feitas entre duas datas sobre o dossier parametrização ou de teste.

Para além da certeza não esquecer nenhum dos elementos de tipo seleccionado entre duas datas, esta geração de patch permite livrar-se de um constrangimento de servidor único ou de servidor inter-conectados único necessitando da utilização do botão Cópia.

O princípio deste utilitário é extrair elementos do dicionário de dados de um dossier, mas também dos dados (em princípio dos dados parametrização em quantidade limitada, porque este formato não é muito compacto). O conjunto dos elementos assim extraídos é arquivado num ficheiro que pode então ser restabelecido num outro dossier utilizando a função de integração de patch. O aspecto multilingue do dicionário é gerido por este utilitário, as mensagens ligadas aos elementos “patchados” que podem ser transferidos em várias línguas.

Cada elemento extraído é identificado ao mesmo tempo por um código que define o tipo de elemento “patchado” (um ecrã, uma lista, dos dados de uma tabela...) e por um elemento de informação complementar (o código do ecrã, o objecto, um critério de selecção...)

Este utilitário é utilizado pelas equipas de desenvolvimento para criarem “patches” correctivas, mas pode igualmente ser utilizado por reveladores para transferir factos específicos.

Gestão do ecrã

Ecrã de registo

Apresentação

O registo faz-se sobre só um separador, no qual se encontram as informações seguintes:

Bloco de rubrica

Tratam-se dos parâmetros gerais da “patch”.

Nome do ficheiro

Trata-se do nome do ficheiro arquivo que vai ser criado. Se dá aqui o nome de um ficheiro arquivado já existente, vai reler, a lista dos objectos a fazer “patch” vai ser recarregada no ecrã de lançamento. Isto permite extrair de novo elementos previamente extraídos e alterados entretanto.

É aconselhado chamar os ficheiros de “patch” utilizando um nome definido sob a forma X_yyyy_zzz.dat, com os significados seguintes:

*X é um carácter (diferente de P, porque P é utilizado para as “patches” standard) que identifica o tipo de “patch”

*yyyy é um número sequencial (que começa em princípio 0001).

*zzz é um identificador da versão a integrar.

Se esta norma for aplicada, aquando da integração de um conjunto de ficheiros de “patches” num directório, os controlos seguintes vão ser feitos:

*Não se mistura numa mesma integração ficheiros procedentes de versões diferentes

*Não se salta de número sequencial se “patchs” identificadas pelo mesmo caracter e o mesmo número de versão já foram integrados. Assim, por exemplo, se a “patch” Z_0005_120.dat for integrada, e se tenta integrar a “patch” Z_0007_120.dat sem ter previamente integrada a “patch” Z_006_120.dat, um erro será assinalado na integração.

Comentário

Este comentário é incluído na rubrica do ficheiro para informação, e poderá ser consultado aquando da integração da patch.

Dossier

Trata-se do dossier onde é extraída a “patch” (por defeito, o dossier corrente).

Versão mínima

Este campo é armazenado em cabeça do ficheiro de patch. Permite proibir uma integração numa versão demasiado antiga. Com efeito, existe um valor de parâmetro não passível de alteração, nomeado RELEASE, que define o valor corrente de uma versão (com uma lógica de incrementação ligada às mudanças de versão que necessitam passagens de utilitários de conversão). Na primeira versão 130, este parâmetro valia 5, mas evoluiu em curso de versão.

É necessário notar que as “patches” standard não utilizam este parâmetro e deixam o campo versão mínima igual a 1.

Versão 120

Este indicador permite, se for assinalado, não utilizar certos tipos de objectos geridos a partir da versão 130. Trata-se em especial de formatos mais compactos de transferência do binário. É imperativo assinalar este compartimento se a “patch” deve poder ser instalada sobre uma versão 120.

Códigos actividade

Este quadro permite registar uma lista de códigos actividades que começam por X, ou Z. a partir na hora que se deseja a criar uma “patch” que integra desenvolvimentos específicos, ela é obrigatória definir aqui os códigos actividades em causa. Com efeito, se aquilo não for feito, os elementos do dicionário que levam códigos actividades específicos não listados aqui serão ignorados na integração da “patch”. Esta precaução é obrigatória, porque se não uma “patch” standard estaria em condições de actualizar um objecto marcado por um código actividade específico. É precisamente o facto de nenhum código actividade específico não seja dado em cabeça numa “patch” padrão que permite gerir este facto.

Assim por conseguinte, estes códigos actividades não são uns meios para filtrar a extracção dos objectos da “patch”, mas um meio para indicar quais códigos de actividades específicos não serão respeitados na integração da “patch”. Existe em contrapartida uma função que permitirá seguidamente pré-carregar o quadro com os objectos marcados pelos códigos actividades registados aqui.

Objectos

Este quadro permite registar uma lista de objectos a integrar numa “patch”. Esta lista é identificada por um tipo de objecto e um nome. A definição dos diferentes tipos e a significado do nome são dados a seguir:

Código

Significado

Nome

AMK

Ecrã

Nome do ecrã

AWI

Definiçãode janela

Nome da janela

ATB

Definiçãode uma tabela (o conteúdo não é transferido, a actualização da estrutura é feitasem estar a perder os dados comuns)

Nome da tabela

AOB

Definiçãode objecto

Nome do objecto

AOE

Modelo deimport/export

Nome do modelo

ATY

Tipo dedado

Nome do tipo

AFC

Função

Nome da função

ACT

Acção

Nome da acção

ARP

Definiçãode estado no dicionário

Código da lista

AML

Menu sala

Número do menu local

AST

Capítulo demensagens (APLSTD)

Número do capítulo

ADP

Parâmetro (àvez a sua definição e o seu valor se existe a nível geral)

Código do parâmetro

ACV

Definiçãode um código actividade

Código actividade

TRT

Fonte de umtratamento (o tratamento será compilado na instalação da patch)

Nome do tratamento

Adx

Tratamento(unicamente sob forma compilada)

Nome do tratamento

ETA

Estado CrystalReport (ficheiro de extensão rpt)

Nome do estado

ACN

Consulta

Código da consulta

TXT

Ficheiro texto(no directório TXT)

Nome do texto

GRP

Descriçãode representação gráfica (ficheiro de extensão vtc)

Nome da representação gráfica

EXE

Pedido deexecução de um tratamento

Nome do tratamento

TAB

Estrutura econteúdo completo de uma tabela (a sua definição "dicionário"excluída).

Nome da tabela

ADI

Contido deuma tabela diversa

Nome da tabela

ADV

Parametrizaçãode uma tabela diversa

Numero da tabela

ATN

Transacções

Código da transacção

AHI

Fórmulas dedepuração

Código da fórmula

ADC

Descriçãode um tratamento (dicionário)

Nome do tratamento

ANG

Navegação

Código da navegação

Abreviatura de uma tabela

Conteúdoparcial da tabela

Condição (expresso sob forma de cláusula  Where)

Línguas

Este quadro permite definir as línguas que em que se deseja fazer a “patch”. Com efeito, todos os textos do dicionário de dados (definidos pelo código tipo ATX) são armazenados numa tabela separada (a tabela ATEXTE) e identificados por um número (inferior a 50.000 para os textos standard, e superiores além). Estes textos são transmitidos via “patch” sob a sua forma literal (o numero não tem sentido dado que pode variar) em diferentes línguas. A lista das línguas utilizadas para incluir os textos por conseguinte é dada por este quadro.

Fechar

 

Campos

Os seguintes campos estão presentes neste separador :

Ficheiro

  • campo AW

 

  • Tipo de destino (campo TYPEXP)

 

  • Nome do ficheiro (campo VOLFIL)

 

Tipo de patch

  • Tipo de patch (campo TYPPTC)

Le type de patch peut prendre les valeurs suivantes :

  • Standard
    C'est un patch qui est susceptible d'être installé sur une liste de dossiers qui sera donnée à l'intégration, cette liste intégrant en principe le dossier superviseur. Dans la plupart des cas (y compris pour des développements spécifiques et verticaux), c'est le type de patch à utiliser. En effet, la livraison de développements spécifiques ou verticaux n'est pas conditionnée par le type de patch, mais par la liste des codes activités qui sont données dans le tableau correspondant.
  • Superviseur
    C'est un patch qui sera intégré uniquement dans le dossier superviseur. Ce type est utilisé quand on veut intégrer des éléments de pré-paramétrage comme les modèles d'import/export, pièces automatiques, règles de Workflow, qui peuvent avoir été modifiés dans les différents dossiers. Pour éviter d'écraser les modifications faites, on ne met alors à jour que le dossier superviseur. Ceci permet d'avoir des valeurs de paramétrage à jour en cas de création d'un nouveau dossier, et aussi de permettre des mises à jour manuelles par copie dans chaque dossier après avoir utilisé les utilitaires de comparaison existants.
  • Spécifique
    C'est un patch identique au patch standard, mais il permet, lorsqu'un écran est patché, de supprimer les actions spécifiques (SPE) non présentes dans le patch. Vous devez utiliser cette valeur pour modifier le nom d'un traitement spécifique pour une action de dictionnaire sur les écrans. Cela s'applique aussi aux écrans, objets, états, formules et consultations.
    Pour plus d'informations, reportez-vous à l'annexe techniquedétaillée.
  • Vertical
    C'est un patch identique au patch standard, mais il permet, lorsqu'un écran est patché, de supprimer les actions verticales (SPV) non présentes dans le patch. Vous devez utiliser cette valeur pour modifier le nom d'un script vertical pour une action de dictionnaire sur les écrans. Cela s'applique aussi aux écrans, objets, états, formules et consultations.
    Pour plus d'informations, reportez-vous à l'annexe technique détaillée.
  • Add-on
    C'est un patch dédié aux add-on. Il permet de conserver les actions sur champ verticales (SPV) et les actions spécifiques (SPE).

Les patches contenant des éléments de documentation sont traités de façon un peu particulière, décrite dans l'annexe correspondante.

Quadro Línguas

Ce tableau permet de définir les langues que l'on désire patcher.

En effet, tous les textes du dictionnaire de données (définis par le code type ATX) sont stockés dans une table séparée (la table ATEXTE) et sont identifiés par un numéro (inférieur à 100.000 pour les textes standard, et supérieur au delà). Ces textes sont transmis via patch sous leur forme littérale (le numéro n'a pas de sens puisqu'il peut varier) dans différentes langues. La liste des langues utilisées pour inclure les textes est donc donnée par ce tableau.

Bloco número 6

  • Comentário (campo COMMENT)

Ce commentaire informatif permet de décrire le fichier patch (du point de vue de sa finalité ou de son contenu). Il sera visible dans la trace de l'intégration du patch.

C'est le nom du dossier à partir duquel les éléments du patch vont être extraits.

  • Release minima (campo VERSION)

Ce code version minimum permet d'éviter d'intégrer le patch dans une application de version inférieure.

  • Produto (campo PRODUIT)

Ce champ identifie l'article à partir duquel le patch est extrait. Ce champ n'est pas saisissable.

Quadro Objectos

  • Tipo (campo TYPOBJ)

Ce tableau permet de saisir une liste d'objets à patcher. Cette liste est identifiée par un type d'objet et un nom. La définition des différents types et la signification du nom sont donnés en annexe.

  • Nome objecto (campo NOMOBJ)

On saisit ici la clé de l'élément dont on a saisi le code, ou un complément d'information (condition dans le cas d'un patch de données). Il est à noter que si la clé de la fiche à patcher est en plusieurs parties, celles-ci sont séparées par le caractère tilde ( ~ ).

  • Descr. (campo INTITOBJ)

Permet de définir un intitulé associé à chaque fiche.

Quadro Códs. actividade

Ce tableau permet de saisir une liste de codes activités spécifiques ou verticaux (c'est-à-dire commençant par X, Y ou Z).

Dès que l'on désire créer un patch intégrant des développements de ce type, il est obligatoire de définir les codes activités concernés. En effet, les éléments du dictionnaire portant des codes activités spécifiques non listés seront ignorés à l'intégration du patch. Cette précaution est obligatoire, car sinon un patch standard serait en mesure de mettre à jour un objet marqué par un code activité spécifique ou vertical. C'est précisément le fait qu'aucun code activité spécifique ne soit donné en tête dans un patch standard qui permet de gérer ce fait.

Ces codes activités ne sont donc pas un moyen de filtrer l'extraction des objets du patch, mais un moyen d'indiquer que les éléments marqués par ces codes d'activités spécifiques seront mis à jour à l'intégration du patch. Le chargement des éléments marqués par ces codes activité pourra être fait via une action accessible depuis l'icône Actionsau niveau du tableau définissant le contenu du patch.

Fechar

 

Funções acessíveis por clique direito no quadro

Pré-carregamento
Acção de desvio STANDARD
Acção de desvio STANDARD
Acção de desvio STANDARD

 

Fechar

 

Outras condições

Transferência completa de uma tabela

O código TABpermite transferir os dados da tabela, recarregando-o na base com a sua estrutura e os seus dados. Em contrapartida, não se cria os elementos do dicionário relativos a esta tabela, que faz que pode não aparecer como visível. Também, este código é adaptado bem quando deseja-se recarregar uma tabela já criada nos dossiers a “patcher”, e que não se alterou a estrutura. Se tal não é o caso, é necessário pôr duas linhas na definição da “patch”: a estreia refere-se à definição da tabela (ATB XXXXX), o segundo som contido (TAB XXXXX), estas duas linhas colocadas imperativamente nesta ordem. A integração da “patch”, a tabela vai ser criada no dicionário e a base se não existe (se não, a sua estrutura será actualizada se variar). Seguidamente recarregamento da tabela com os dados será realizado.

Transferência de dados

A possibilidade de transferir o conteúdo parcial de uma tabela é obtida dando na coluna tipo a abreviatura da tabela, e indicando na coluna Nome uma condição lógica que será utilizada para a extracção do dossier de partida, e para a integração no dossier de chegada. É importante notar que os dados assim extraídos poderão alterar dados que existem com as mesmas chaves, ou criar novos dados. Em contrapartida, e por razões de segurança, em caso algum, haverá apagamento de dados aquando da integração da patch. Assim, por exemplo, se considera a situação seguinte, para a tabela dos países (de abreviatura TCY):

Dossierde partida

Dossierde chegada

Código país

Nome país

Código país

Nome país

AD

Andorra

AD

Andorra

AE

Emirados Árabes Unidos

AF

Afeganistão

AL

Albânia

AL

Alemanha

AR

Argentina

 

Austrália

BE

Bélgica

BE

Bélgica

...

 

...

 

Se na “patch” se indica uma linha com TCY e a condição CRY="al", a “patch” vai conter apenas a linha que corresponde ao país Albânia, e a integração da “patch” no dossier de chegada vai reescrever AL, a Alemanha para substitui-lo por AL, Albânia."

Se na “patch” se indica-se uma linha com TCY e a condição pat(CRY, "A *"), a “patch” vai conter as 4 linhas AD, AE, AF e AR. Na integração, vai-se criar a ficha AE, Emirados Árabes Unidos, a ficha AR, a Argentina, substituir AL, a Alemanha por AL, pela Albânia e guardar AF, o Afeganistão, e, a Austrália, que não tinham sido entregues, mas existido já no dossier de chegada.

Se na “patch” se indica uma linha com TCY e a condição find(CRY, "AD", "AE", "AL"), o resultado teria sido o mesmo, excepto no que diz respeito AR, Argentina, que não teria sido transferida.

A única maneira de apagar dados consiste:

*Quer a substituir globalmente o conteúdo de uma tabela completa (“patch” de tipo TAB)

*Ou seja a entregar um tratamento pelo código EXE (cf. abaixo). Por exemplo, se tivesse querido se assegurar de que nos países que começam por A, só os países de código AD, AE, AL continuavam a ser presentes na lista, teria se entregue um tratamento (chamado por exemplo MAJPATCHnnn) que teria contido a linha descrita no exemplo abaixo.

Execução de um tratamento

Um caso específico deve ser mencionado: o código EXE, que permite dar o nome de um tratamento a executar. Este tratamento é executado em fim de integração de patch (pode existir previamente ou ser entregue na patch ela mesmo, dado que a execução não se faz que no fim da integração).

Este tratamento deve integrar um subprograma PATCH, com um argumento que é o código dossier. É este subprograma que será executado. Assim, para o caso acima, obter-se-ía o programa seguinte:

Subprog PATCH(NOMDOS)
Value Char NOMDOS
Local File =NOMDOS+".TABCOUNTRY" [TCU]
Trbegin [TCU]
Delete [TCU] Where pat(CRY,"A*")=1 & find(CRY,"AD","AE","AL")=0
Commit
End

Assim que se pretende ver em cima, é então necessário declarar as tabelas neste subprograma tendo claramente conta do facto que elas devem ser declaradas sobre um dossier que não é forçosamente o dossier corrente (é a sintaxe Local File = NOMDOS + ".NOMTABLE" que a assegura)

Listagens

Por defeito, os seguintes listagens estão associados à função :

 PRTSCR : Impressão ecran

Mas pode ser alterado por parametrização.

Tarefa batch

Esta função pode ser lançada em batch. A tarefa standard ZPATCHC está prevista p/esse efeito.

Botões específicos

Mensagens de erro

Para além das mensagens genéricas, as seguintes mensagens de erro podem aparecer durante o reg. :

....: Directório inexistente

O caminho de acesso ao ficheiro patch não existe.

Tipo de objecto incorrecto

O texto tipo de objecto não corresponde nem a um dos tipos objectos pré-definidos, nem a abreviação de uma tabela existente.

Dicionário dos...XXX ficha inexistente

Tentamos extrair um objecto do dicionário inexistente

Valor incorrecto

A condição de extracção associada à extracção dos dados de uma tabela é sintaxicamente incorrecta.

Tabelas consideradas

SEEREFERTTO Consulte a docuemntação de Implementação