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.
Les patches contenant des éléments de documentation sont traités de façon un peu particulière, décrite dans l'annexe correspondante.
Tableau Langues
| 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. |
Bloc numéro 6
| 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. |
| Ce code version minimum permet d'éviter d'intégrer le patch dans une application de version inférieure. |
| Ce champ identifie l'article à partir duquel le patch est extrait. Ce champ n'est pas saisissable. |
Tableau Objets
| 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. |
| 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 ( ~ ). |
| [object Object] |
Tableau Codes activité
| 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. |
Fermer
Icône Actions
Cette fonction permet de pré-charger dans le tableau tous les éléments du dossier marqués par les codes activités listés dans le tableau correspondant.
Cette fonction permet de vérifier si l'objet de la ligne courante est ou n'est pas identique entre deux dossiers. Une fenêtre s'ouvre alors pour saisir les deux codes dossiers. Une fois cette fenêtre saisie, la comparaison se fait, et une fenêtre de trace donne le résultat. Si le nom de l'élément n'est pas mentionné comme différent, les deux éléments sont identiques dans les dossiers comparés.
Note : il est possible que la comparaison ne soit pas possible sur certains types d'objets; un message le signale alors dans la trace.
Cette fonction permet de vérifier si l'ensemble des objets situés dans le patch sont ou pas identiques entre deux dossiers. Une fenêtre s'ouvre alors pour saisir les deux codes dossiers. Une fois cette fenêtre saisie, la comparaison se fait, et une fenêtre de trace donne le résultat.
Cette fonction permet d'appeler un modèle de paramétrage, afin de renseigner une liste de patches de type AAA (une ligne par modèle de données mentionné dans l'écran).
Attention toutefois : contrairement au fonctionnement obtenu lorsqu'on part de la fonction de copie de paramétrage, on ne génère ici que les lignes AAA (la ligne APH décrivant le modèle n'est pas incluse). Par ailleurs, la saisie du code législation n'étant pas faite à ce stade, tout filtre législation sera mal appliqué ici.
Il est par contre possible de générer une ligne AAA pour un modèle de données unitaires, par clic droit Modèle de données sur le champ Nom objet. On a alors accès à une fenêtre de sélection permettant de choisir le modèle, la législation, la clé ou la formule de sélection, afin de créer une ligne intégrant tous les éléments.
Fermer
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 ci-après. La colonne Rangpermet de connaître l'ordre dans lequel les types d'éléments sont rangés dans le patch (cf. le paragraphe ci-dessous). Les éléments qui ont le rang 100 dans le tableau sont toujours placés en fin de patch (dans l'ordre alphabétique des codes des éléments).
Code | Signification | Nom | Rang |
AAA | Lignes issues d'un modèle de paramétrage | Format particulier, cf. paragraphe correspondant | 100 |
ABA | Code de l'abonnement | 46 | |
ABF | Code de la table | 54 | |
ABG | Code du groupe | 47 | |
ABI | Dimension BI | Code de la dimension | 55 |
ABM | Datamart BI | Code du datamart | 56 |
ABO | Etat Business Objects | Code de l'état | 58 |
ABT | Code de la tâche | 45 | |
ABV | Code de la règle | 57 | |
ACL | Code de la table | 18 | |
ACN | Code de la consultation | 36 | |
ACS | Traité sous forme de condition (CODACS="valeur") | 14 | |
ACT | Code de l'action | 16 | |
ACV | Définition d'un code activité | Code activité | 1 |
ADC | Description d'un traitement (dictionnaire) | Nom du traitement | 9 |
ADF | Type ~ Code de l'élément | 50 | |
ADI | Contenu d'une table diverse | Numéro de la table | 24 |
ADO | Aide fonctionnelle (tous les paragraphes) | Type ~ Code de l'aide | 49 |
ADP | Paramètre (à la fois sa définition et sa valeur s'il en existe au niveau général) | Code du paramètre | 32 |
ADV | Paramétrage d'une table diverse | Numéro de la table | 23 |
ADX | Traitement (uniquement sous forme compilée) | Nom du traitement | 11 |
ADZ | Code de l'aide | 48 | |
AEN | Traité sous forme de condition (CODE="valeur") | 35 | |
AFC | Code de la fonction | 17 | |
AGB | Nom de la variable | 20 | |
AHH | Hiérarchie BI | Code hiérarchie | 59 |
AHI | Code de la formule | 7 | |
AII | Code condition | 60 | |
ALH | Code de la requête | 51 | |
ALQ | Code de la requête SQL | 52 | |
ALT | Code de la requête | 53 | |
AMK | Code de l'écran | 28 | |
AML | Numéro du menu local | 2 | |
ANG | Code de la navigation | 10 | |
ANM | Définition d'un compteur | Code du compteur | 15 |
ANT | Code objet pour widget | 65 | |
AOB | Définition d'objet | Code de l'objet | 30 |
AOE | Code du modèle | 34 | |
AOP | Propriétés d'objet | Code de l'objet | 31 |
APH | Code du modèle | 100 | |
APR | Code processus | 63 | |
ARP | Définition d'état dans le dictionnaire | Code de l'état | 29 |
ASL | Traité sous forme de condition (COD="valeur") | 19 | |
ASU | Description d'un sous-programme dans le dictionnaire | Nom du sous-programme | 21 |
ASY | Code du style | 61 | |
ATB | Définition d'une table (le contenu n'est pas transféré, la mise à jour de la structure est faite sans perdre les données communes) | Code de la table | 25 |
ATN | Transactions | Code de la transaction | 8 |
ATY | Code du type | 22 | |
AUR | Code de l'URL | 27 | |
AVW | Code de la vue | 26 | |
AWA | Code de la règle Workflow | 43 | |
AWE | Nom de publication | 64 | |
AWI | Définition de fenêtre | Code de la fenêtre | 33 |
AWM | Modèle de données Workflow | Code modèle | 41 |
AWR | Règle d'affectation Workflow | Code de la règle d'affectation | 42 |
AWW | Paramétrage du plan de travail Workflow | Code du plan de travail | 44 |
BIA | Objets BIAR | Code objet | 4 |
ELT | Elément de l'interface cliente (xsl, image, fichier divers) | Chemin du fichier | 3 |
ETA | Etat Crystal Reports (fichier d'extension rpt) | Nom de l'état | 13 |
EXE | Demande d'exécution d'un traitement | Nom du traitement | 6 |
GAU | Code de la pièce | 40 | |
PS1 | Code du déclencheur | 37 | |
PS2 | Code statistique | 38 | |
TAB | Structure et contenu complet d'une table (sa définition « dictionnaire » exclue). | Code de la table | 39 |
TFO | Code formule | 62 | |
TRT | Source d'un traitement (le traitement sera compilé à l'installation du patch) | Nom du traitement | 12 |
TXT | Fichier texte (dans le répertoire TXT) | Nom du texte | 5 |
Abréviation d'une table | Contenu partiel de la table | Condition d'extraction (exprimée sous la forme d'une clause Where) | 100 |
Le code TAB permet de transférer les données de la table, en la rechargeant dans la base avec sa structure et ses données. Par contre, on ne crée pas les éléments du dictionnaire concernant cette table, ce qu'il fait qu'elle peut ne pas apparaître comme visible. Aussi, ce code est-il bien adapté lorsqu'on désire recharger une table déjà créée dans les dossiers à patcher, et qui n'a pas changé de structure. Si tel n'est pas le cas, il faut mettre deux lignes dans la définition du patch : la première concerne la définition de la table (ATB XXXXX), la deuxième son contenu (TAB XXXXX). Même si elles ne sont pas placées dans cet ordre à la saisie, la fonction de patch va les replacer dans cet ordre. A l'intégration du patch, la table va être créée dans le dictionnaire et dans la base si elle n'existe pas (sinon, sa structure sera mise à jour si elle a varié). Puis le rechargement de la table avec les données sera réalisé.
La possibilité de transférer le contenu partiel d'une table est obtenue en donnant dans la colonne type l'abréviation de la table, et en indiquant dans la colonne Nom une condition logique qui sera utilisée pour l'extraction du dossier de départ, et pour l'intégration dans le dossier d'arrivée. Il est important de noter que les données ainsi extraites pourront modifier des données existant avec les mêmes clés, ou créer de nouvelles données. Par contre, et pour des raisons de sécurité, en aucun cas, il n'y aura d'effacement de données lors de l'intégration du patch. Ainsi, par exemple, si on considère la situation suivante, pour la table des pays (d'abréviation TCY) :
Dossier de départ | Dossier d'arrivée | ||
Code pays | Nom pays | Code pays | Nom pays |
AD | Andorra | AD | Andorra |
AE | United Arab Emirates | AF | Afghanistan |
AL | Albanie | AL | Allemagne |
AR | Argentine | AU | Australie |
BE | Belgique | BE | Belgique |
… |
| … |
|
Si dans le patch on indique une ligne avec TCY et la condition CRY="AL", le patch ne va contenir que la ligne correspondant au pays Albanie, et l'intégration du patch dans le dossier d'arrivée va réécrire AL , Allemagne pour le remplacer par AL, Albanie.
Si dans le patch on indique une ligne avec TCY et la condition pat(CRY,"A*"), le patch va contenir les 4 lignes AD, AE, AF et AR. A l'intégration, on va créer la fiche AE, United Arab Emirates, la fiche AR, Argentine, remplacer AL, Allemagne par AL, Albanie et garder A, Afghanistan, et AU, Australie, qui n'avaient pas été livrés, mais existaient déjà dans le dossier d'arrivée.
Si dans le patch on indique une ligne avec TCY et la condition find(CRY,"AD","AE","AL"), le résultat aurait été le même, sauf en ce qui concerne AR, Argentine, qui n'aurait pas été transféré.
La seule manière d'effacer des données consiste :
Un cas particulier doit être mentionné : le code EXE, qui permet de donner le nom d'un traitement à exécuter. Ce traitement est exécuté en fin d'intégration de patch (il peut exister au préalable ou être livré dans le patch lui-même, puisque l'exécution ne se fait qu'à la fin de l'intégration).
Ce traitement doit intégrer un sous-programme PATCH, avec un argument qui est le code dossier. C'est ce sous-programme qui sera exécuté. Ainsi, pour le cas ci-dessus, on obtiendrait le programme suivant :
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
Ainsi qu'on le voit ci-dessus, il est donc nécessaire de déclarer les tables dans ce sous-programme en tenant clairement compte du fait qu'elles doivent être déclarées sur un dossier qui n'est pas forcément le dossier courant (c'est la syntaxe a syntaxe Local File = NOMDOS + ".NOMTABLE" qui l'assure)
Lorsque des patches sont réalisés sur des éléments modèles de l'interface utilisateur (écrans modèles utilisés pour créer des fenêtres de transaction), une revalidation des écrans en question est nécessaire.
Cette revalidation peut être exécutée en déclarant, dans la maintenance, l'exécution du traitement approprié. On trouvera ci-dessous les traitements standard à lancer selon le type d'élément patché :
Elément patché | Traitement | Résultat |
Ecran servant de base à une consultation paramétrable | SUBGTC | Validation de tous les écrans de consultation |
Styles de présentation | SUBASY | Génération des styles |
Transaction système | SUBAMI | Validation des transaction système |
Paramètres statistiques | SUBPS2 | Revalidation de toutes les statistiques |
Ecran de base d'une transaction sur l'objet XXX | SUBXXX | Revalidation des transactions associées à l'objet |
Il est important de noter que ce type de fonctionnalité est réalisable également en spécifique (il suffit de rajouter le sous-programme PATCH ainsi qu'indiqué dans le précédent paragraphe).
La structure des données de la documentation est un peu particulière. En effet, par défaut les règles suivantes s'appliquent en création ou revalidation de dossier :
Aussi, quand on intègre un patch de doc (type ADO), le principe est le suivant :
L'intégration de patch vérifie la séquentialité de passage des fichiers de patch, dès lors qu'ils intègrent une séquence numérique dans leur nom. Il est conseillé d'appeler les fichiers de patch en utilisant un nom défini sous la forme X_yyyy_zzz.dat, avec les significations suivantes :
Si cette norme est appliquée, lors de l'intégration d'un ensemble de fichiers de patches dans un répertoire, les contrôles suivants vont être faits :
Quand on crée un fichier de patch, la norme veut que l'on fasse en sorte que les éléments qui s'y trouvent forment un tout dont l'application laisse un dossier dans un état cohérent. En particulier, si on crée une nouvelle fonction par patch, que cette fonction soit définie par une action, une fenêtre, un écran, une table, et deux traitements, il paraît logique que l'ensemble de ces éléments soient présents dans le patch.
Lorsqu'un ensemble d'éléments sont utilisés pour former un fichier de patch, la fonction de création les range dans un ordre précis de types, afin d'éviter tant que faire se peut les erreurs à l'intégration. En effet, si par exemple on intègre une fenêtre avant les écrans qui la composent, une erreur Ecran inexistantva se produire lors de sa validation. Ainsi, on intègre toujours d'abord les types de données avant les écrans et les tables, les écrans avant les fenêtres, et ainsi de suite.
L'ordre utilisé lors de la génération du patch correspond au rang donné dans le tableau ci-dessus. C'est également l'ordre de proposition qui apparait dans la fonction de patch automatique.
Il faut toutefois remarquer qu'il est impossible de résoudre tous les conflits possibles. En effet, pour prendre un exemple, un type de données peut faire référence à une action, qui fait peut faire référence à une fenêtre, qui peut faire référence à un écran, qui peut faire référence à ce type de données. Pour résoudre ce type de cas de conflit (rare), il peut être nécessaire de décomposer le fichier patch en deux fichiers (le premier livrant tous les éléments avec un type de données ne faisant pas référence à l'action, le second livrant le type de données intégrant l'action, par exemple).
Lorsqu'on installe un patch contenant des éléments du dictionnaire, il faut noter que certains champs, considérés comme des éléments paramétrables du dictionnaire, sont respectés quels que soient par ailleurs les protections par code activité dont ils bénéficient. C'et le cas par exemple pour une destination par défaut dans un état.
On trouvera une annexe technique le détail des champs respectés.
Un patch de type AAA correspond à une ligne issue d'un modèle de paramétrage. Elle utilise un format particulier pour le code de l'élément. Ce format est l'un des deux formats suivants :
MODELE~CODE_LEG~CODE_TRS~='FORMULE_SELECTION'
MODELE~CODE_LEG~CODE_TRS~CLE~SOUS_CLE~SOUS_SOUS_CLE...
Dans ces lignes, on a :
Par défaut, les états suivants sont associés à la fonction :
PRTSCR : Impression écran
Mais ceci peut être modifié par paramétrage.
Cette fonction peut être lancée en batch. La tâche standard ZPATCH est prévue à cet effet.
Outre les messages génériques, les messages d'erreur suivants peuvent apparaître lors de la saisie :
Le chemin d'accès au fichier patch n'existe pas
Le type d'objet ne correspond ni à un des types d'objets prédéfinis, ni à l'abréviation d'une table existante.
On a essayé d'extraire un objet du dictionnaire inexistant
La condition d'extraction associée à l'extraction des données d'une table est syntaxiquement incorrecte.