Génération d'univers BO par les stratégies

Stéphane Dupont

Vous en avez marre de passer des heures à créer des centaines d'objets dans Designer ? Vous avez de nombreuses différences entre la réalisation d'un univers et ses spécifications suite à des copier/coller malheureux ?

Les stratégies sont là pour vous aider !!!

Il existe plusieurs moyens de générer automatiquement un univers à partir d'un fichier Excel, comme les macros VBA ou les stratégies. Ces dernières ont l'avantage d'être implémentées nativement dans BO et en apportant juste quelques modifications sur des fichiers de paramétrage on peut économiser des heures de travail.

Je vous propose de voir une stratégie basée sur un fichier Excel pour générer les noms des objets automatiquement lors de la création d'un univers dans Designer.
Commentez

- Titre : Génération d'univers BO par les stratégies

- Auteur : Stéphane Dupont

- Parution : 16 août 2012

- Licence : Copyright ® 2012 doc malkovich. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Prérequis

- II. Introduction

- II-A. Un petit exemple

- II-B. Mais d'abord c'est quoi une stratégie ?

- II-C. La Méthode

- III. Étapes

- III-A. Fichiers de paramétrage

- III-B. Fichier source

- III-C. Utilisation dans Designer

- Conclusion

- Liens utiles

- VI. Remerciements

I - Prérequis

Ce tutoriel s'adresse aux personnes qui créent ou modifient des univers BO. Il est donc important de bien connaître le module Designer et les différents types d'objets dans BO. Je vous conseille de suivre le tutoriel Débutez avec le Designer de Business Objects d'Adrien Artero avant. Il est recommandé d'avoir la base eMode qui est une des deux bases Access de démonstration livrées avec l'installation de BO, pour pouvoir tester l'univers généré à la fin du tutoriel.

L'exemple décrit est propre à Business Objects XI R2, mais les stratégies existent aussi dans les versions précédentes et supérieures. Néanmoins des adaptations seraient nécessaires que nous ne détaillerons pas ici. L'univers se base sur le SGBD Oracle 9i, mais toutes les versions de ce SGBD sont supportées.

L'univers initial eMode se base sur un fichier Access et une source ODBC. Ayant plus l'habitude des bases Oracle j'ai changé la connexion de l'univers pour une connexion Oracle.

II - Introduction

II-A - Un petit exemple

Les spécifications d'un univers BO sont généralement écrites sous la forme d'un fichier Excel ou OpenOffice. Par exemple pour l'univers eMode (qui est fourni en exemple lors de l'installation de BO) une partie de ce fichier ressemblerait à :

Nous y retrouvons les objets BO, leurs différentes propriétés (classe, nom, type, qualification, description) ainsi que la formule SQL associée.

Dans Designer imaginez-vous créer un nouvel univers et de trouver directement les objets issus de ce fichier Excel, sans devoir les créer manuellement :

Les objets récupérés sont générés dans l'ordre avec les bons noms, les bonnes classes/sous-classes, les bonnes formules SQL et les bonnes descriptions :

Plus besoin de retaper tous les objets à partir des spécifications, tout correspond à 100 %

Je vous propose de voir comment à partir d'un tel fichier Excel on peut parvenir à ce résultat. Il faudra modifier certains fichiers de paramétrage de BO puis créer un fichier texte avec une certaine structure à partir du fichier Excel.

II-B - Mais d'abord c'est quoi une stratégie ?

Une stratégie est une méthode dans le Designer pour créer les tables, les jointures ou les objets. Elle s'appuie sur une requête SQL ou sur un fichier.

On distingue les stratégies internes (natives/qu'on ne peut modifier) et externes (qu'on peut rajouter ou modifier).

Si vous avez déjà créé un univers, vous avez déjà utilisé une stratégie !

Par exemple pour ajouter des tables vous avez utilisé la stratégie interne qui lit le catalogue système du SGBD où sont stockés les noms des tables. Et pour créer les objets, vous avez peut-être utilisé la stratégie externe qui permet de créer des classes correspondant aux tables ?

Ces méthodes de génération sont à choisir dans l'onglet Stratégies des paramètres de l'univers :

On peut rajouter facilement des méthodes à celles existantes, en modifiant quelques fichiers de paramétrage comme nous allons le voir.

II-C - La Méthode

Pour utiliser une stratégie BO, il faut :

1. Modifier les fichiers de paramétrage de la connexion de l'univers ;

2. Créer un fichier texte source, qui contiendra toutes les informations nécessaires pour créer les objets de l'univers ;

3. Choisir et utiliser la stratégie dans Designer.

Nous allons détailler ces étapes dans le chapitre suivant.

III - Étapes

III-A - Fichiers de paramétrage

Les stratégies existent depuis la v5 (au moins), mais nous ne traiterons ici que de la XI R2.

Les fichiers à modifier sont dans le répertoire du pilote d'accès (middleware) associé à la connexion de l'univers. Si la connexion utilise un pilote d'accès Oracle, il faut modifier les fichiers du répertoire oracle. Si elle utilise un pilote d'accès Teradata, il faut modifier les fichiers du répertoire teradata. Ici l'univers à créer est basé sur des tables Oracle, les fichiers à changer sont donc ceux spécifiques à Oracle.

Deux fichiers sont à modifier :

- oracle.stg : codes des stratégies ;

- oraclefr.stg : descriptions des stratégies.

Ils se trouvent dans $INSTALLDIR/dataAccess/RDBMS/connectionServer/<SGBDR> (où INSTALLDIR est le répertoire d'installation de Business Objects et <SGBDR> est à remplacer par le type de base de données voulu). Par exemple chez moi ils sont dans C:\Program Files\Business Objects\BusinessObjects Enterprise 11.5\win32_x86\dataAccess\connectionServer\oracle.

Le code d'une stratégie correspond à un bloc XML dans le fichier oracle.stg.

Voici par exemple le code d'une stratégie jointures :

1. <Strategy Name="Constraints">

2. <Type>JOIN</Type>

3. <SQL>SELECT

4. INSTANCE1.TABLE_NAME,'|',

5. INSTANCE2.TABLE_NAME,'|',

6. INSTANCE1.TABLE_NAME || '.' || INSTANCE1.COLUMN_NAME

7. || ' = ' ||

8. INSTANCE2.TABLE_NAME || '.' || INSTANCE2.COLUMN_NAME, '|',

9. ' ','|'

10. FROM

11. USER_CONSTRAINTS,

12. USER_CONS_COLUMNS INSTANCE1,

13. USER_CONS_COLUMNS INSTANCE2

14. WHERE

15. USER_CONSTRAINTS.OWNER = USER

16. AND USER_CONSTRAINTS.CONSTRAINT_NAME = INSTANCE1.CONSTRAINT_NAME

17. AND USER_CONSTRAINTS.R_CONSTRAINT_NAME = INSTANCE2.CONSTRAINT_NAME

18. AND USER_CONSTRAINTS.CONSTRAINT_TYPE = 'R'

19. AND INSTANCE1.POSITION = INSTANCE2.POSITION</SQL>

20. </Strategy>

Cette stratégie nommée "Constraints" va lire le catalogue Oracle des contraintes (tables USER_CONSTRAINTS et USER_CONS_COLUMNS) pour en déduire les jointures possibles.

Un bloc est composé de plusieurs éléments et de paramètres XML :

Élément ( balises XML )

Description

<Strategy Name="Constraints"> ... </Strategy>

Élément principal.
Toutes les stratégies externes sont créées dans cet élément. Le paramètre Name donne le nom de la stratégie (utilisé en interne, mais qui ne sera jamais affiché).

<Type>...</Type>

Type de la stratégie.
Trois valeurs sont possibles :
JOIN : stratégie de jointure - apparaît dans la liste Jointures de l'onglet Stratégies dans les propriétés de l'univers ;
OBJECT : stratégie Classes et objets - apparaît dans la liste Classes et objets de l'onglet Stratégies ;
STRUCT : stratégie de détection de table - apparaît dans la liste Tables de l'onglet Stratégies.

<SQL>...</SQL>

Code SQL exécuté sur la connexion de l'univers.

<File>...</File>

Chemin d'accès d'un fichier texte externe qui contient des données organisées selon un format de sortie spécifique.

En fonction de la source de la stratégie (requête SQL ou fichier), on mettra un bloc <SQL> ou un bloc <File>.

Le deuxième fichier oraclefr.stg contient les descriptions des stratégies, toujours au format XML. Par exemple :

1. <Strategy Name="Constraints">

2. <Message id="Help">Cette stratégie de jointure lit les contraintes de la base de données et fournit une liste de jointures.</Message>

3. <Message id="Name">Stratégie externe : contraintes</Message>

4. </Strategy>

Le fichier a un encodage spécial pour les accents ; on trouvera par exemple dans les fichiers « stratÃ©gie » pour « stratégie ». Pour la lisibilité générale de l'article, les accents sont remis correctement dans les exemples de code.

Là aussi on a un bloc XML <Strategy> ayant le même nom en paramètre et composé de deux blocs <Message> :

Élément (balises XML )

Description

<Message id="Help">...</Message>

Texte d'aide apparaissant en dessous de la liste de choix dans l'onglet Stratégies des propriétés de l'univers dans Designer.

<Message id="Name">...</Message>

Nom de la stratégie apparaissant dans la liste de choix dans l'onglet Stratégies des propriétés de l'univers dans Designer.

Dans notre exemple on va lire un fichier texte (c:\temp\univers_objets.txt), on ajoute donc un bloc dans le fichier oracle.stg :

1. <Strategy Name="Fichier_objets">

2. <Type>OBJECT</Type>

3. <File>c:\temp\univers_objets.txt</File>

4. </Strategy>

Et on ajoute une description dans le fichier oraclefr.stg :

1. <Strategy Name="Fichier_objets">

2. <Message id="Help">Cette stratégie génère les objets BO à partir du fichier C:\temp\univers_objets.txt</Message>

3. <Message id="Name">Stratégie externe : Fichier objets</Message>

4. </Strategy>

Remarques

- D'autres paramètres peuvent être rajoutés à la balise XML comme Connexion pour utiliser une autre connexion que celle de l'univers et SkipMeasures pour passer l'écran qui concerne la création d'indicateurs dans l'assistant de création d'univers.

- Il faut vérifier dans le fichier oracle.sbo si le paramètre Strategies Name est bien défini avec le nom du fichier de stratégie externe. C'est le cas par défaut.

III-B - Fichier source

Le fichier source pour générer l'univers doit respecter un certain format.

Pour les objets, il est composé de neuf colonnes délimitées par des tabulations. Une colonne peut être laissée à vide, dans ce cas on a deux tabulations à la suite.

Chaque ligne est composée de :

Colonne

Description

Table

Nom de la table SGBD, au format [Qualificateur.][Propriétaire.]Table.

Colonne

Nom de la colonne (SGBD).

Classe

Nom d'une classe. Les sous-classes s'écrivent comme suit : Classe\Sous-classe.

Nom de l'objet

Nom de l'objet ou de la condition. Si le nom d'objet est vide, une classe et sa description sont créées.

Select

Instruction Select.

Where

Instruction Where.

Type

Type de l'objet :
C (Caractère), N (Numérique), D (Date), T (Texte long ou Blob).

Description

Description/Commentaire de l'objet.

Qualification

Qualification de l'objet au sens BO :
D (dimension), M (indicateur) ou I (information).

Un fichier de ce type est rapidement généré à partir d'un fichier Excel de spécifications. Il suffit généralement de copier et de réordonner les colonnes, de rajouter des formules pour le SQL et de copier/coller le résultat dans un fichier texte. C'est ce qu'on a fait à partir du fichier Excel de spécifications pour avoir le fichier c:\temp\univers_objets.txt.

Remarques

- Le fichier ne doit pas contenir de retours à la ligne, notamment dans les descriptions.

- La description ne doit pas contenir de tabulation.

- Ne pas oublier la tabulation à la fin, sinon tous les objets sont en dimension !

III-C - Utilisation dans Designer

Une fois le fichier créé dans le répertoire c:\temp il suffit de lancer Designer et de choisir la stratégie qu'on a créée dans les propriétés de l'univers :

Ensuite il faut choisir dans le menu Insertion/Objets Candidats et les objets définis dans le fichier apparaîtront comme par magie !

Remarques

- Pour prendre en compte des modifications sur les fichiers de stratégie ou sur le fichier de données, il faut fermer et rouvrir Designer.

- Il faut que le fichier de données existe (ça paraît évident mais il n'y a pas de message d'erreur si le fichier est absent) !

- Le bouton actualiser ne marche pas.

- Il faut vérifier dans le fichier oracle.sbo si le paramètre Strategies Name est bien défini avec le nom du fichier de stratégie externe. C'est le cas par défaut.

Conclusion

En touchant seulement à deux fichiers, on peut gagner un temps fou quand on commence la création d'un univers, surtout quand le nombre d'objets est important. Par contre l'utilisation des stratégies est plus complexe quand on veut rajouter des objets dans des classes existantes.

On peut aussi baser les stratégies sur une requête SQL, par exemple pour récupérer les métadonnées d'un référentiel d'un outil de modélisation comme PowerAmc.

Je ne parlerai pas plus des autres types de stratégie (jointures et tables), pour ma part je préfère les créer manuellement.

Liens utiles

Fichier zip des supports de ce tutoriel.

L'archive contient les fichiers suivants :

- eMode.unv : l'univers modifié, sans objets ni classes ;

- emode_sample.xls : le fichier Excel de spécifications d'une partie de l'univers ;

- oracle.stg, oraclefr.stg : les fichiers de paramétrage contenant les stratégies ;

- univers_objets.txt : le fichier texte généré à partir du fichier Excel emode_sample.xls.

Le forum d'entraide Business Objects.

La FAQ Business Objects.

SAP Help Portal pour la documentation officielle. Voir le Guide du Designer - chapitre Optimisation des univers, partie Utilisation de stratégies externes pour personnaliser la création d'univers.

L'aide BO (en français) est imprécise et pleine d'erreurs !

VI - Remerciements

Un grand merci à la fabuleuse équipe BI de developpez.com, à kalyparker, TomDuBouchon, fafabzh6, Julien59 et Bruno2r pour leur infinie patience et gentillesse, à ClaudeLELOUP pour sa relecture avisée.