All posts tagged vbs

Utilisation avancée des scripts VBS dans Power AMC : construction d’un dictionnaire de données sous Excel

Dernier script vbs sous Power AMC proposé, la construction d’un dictionaire Power AMC à partir des fichiers modèles physiques (*.mpd) de Power AMC. Le dictionnaire ainsi construit est très complet, il comprend la description de toutes les tables, et toutes les colonnes des modèles, avec leurs définitions, formats, et les jointures (ou foreign key) sont également de la partie.

Une fois construit, la puissance de navigation d’Excel, avec les filtres automatiques (positionnés automatiquement par le script) permet une utilisation très efficace du dictionnaire de données, bien plus que sur un intranet par exemple.

Voici le code du script :

'******************************************************************************
'* Fichier: Export_repertoire_contenant_mpd_vers_excel.vbs
'******************************************************************************
Option Explicit
'SAISIE DU REPERTOIRE A ANALYSER
Dim repertoire
repertoire = InputBox("Veuillez saisir le répertoire contenant les fichiers *.mpd", "Répertoire")
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim Erreur
Erreur = False
If FSO.FolderExists(repertoire) = False Then
Erreur = True
End If
 
 
If Erreur = False then
ShowMode = True
InteractiveMode = im_Batch
 
 
'CREATION INITIALISATION FICHIER EXCEL
Dim nb, i
Dim XLS_APP
Set XLS_APP = CreateObject("Excel.Application")
XLS_APP.Visible = True
XLS_APP.Application.ScreenUpdating = False
XLS_APP.DisplayAlerts = False
XLS_APP.Workbooks.Add
Dim XLS
Set XLS = XLS_APP.ActiveWorkbook
For i = 1 to 2
XLS.sheets.Add
Next
 
 
XLS.sheets(1).name = "tables"
XLS.sheets(2).name = "colonnes"
XLS.sheets(3).name = "references"
nb = XLS.Sheets.Count
For i = 4 To (nb)
XLS.Sheets(4).Delete
Next
Dim colonnes, tables, references
Set tables = XLS.Sheets("tables")
Set colonnes = XLS.Sheets("colonnes")
Set references = XLS.Sheets("references")
 
 
tables.Cells.ClearContents
tables.Cells(1, 1).Value = "Fichier"
tables.Cells(1, 2).Value = "Modele"
tables.Cells(1, 3).Value = "Name"
tables.Cells(1, 4).Value = "Code"
tables.Cells(1, 5).Value = "Parent"
tables.Cells(1, 6).Value = "DisplayName"
tables.Cells(1, 7).Value = "ObjectType"
tables.Cells(1, 8).Value = "Comment"
tables.Cells(1, 9).Value = "Description"
 
 
colonnes.Cells.ClearContents
colonnes.Cells(1, 1).Value = "Fichier"
colonnes.Cells(1, 2).Value = "Modele"
colonnes.Cells(1, 3).Value = "Table Code"
colonnes.Cells(1, 4).Value = "Table Name"
colonnes.Cells(1, 5).Value = "Code"
colonnes.Cells(1, 6).Value = "Name"
colonnes.Cells(1, 7).Value = "Format"
colonnes.Cells(1, 8).Value = "Clé"
colonnes.Cells(1, 9).Value = "Description"
 
 
references.Cells.ClearContents
references.Cells(1, 1).Value = "Reference"
references.Cells(1, 2).Value = "Table enfant"
references.Cells(1, 3).Value = "Table parent"
references.Cells(1, 4).Value = "Jointure"
 
 
'LECTURE DES FICHIERS DU REPERTOIRE
Dim FSOrep
Set FSOrep = FSO.GetFolder(repertoire)
Dim file
Dim package
Dim packages
Dim ligne_table
ligne_table = 2
Dim ligne_colonne
ligne_colonne = 2
Dim ligne_reference
ligne_reference = 2
dim Model
 
 
'ON BALAYE LES FICHIERS DU REPERTOIRE ET ON OUVRE LE MODELE
For Each file In FSOrep.files
OpenModel File.Path
Dim modele
Set modele = ActiveDiagram.Parent
LISTE_OBJETS (modele)
modele.Close
Next
 
 
'MISE EN FORME DU FICHIER EXCEL
Dim feuille
For Each feuille in XLS.Sheets
feuille.Select
With feuille.Rows("1:1").Interior
.Pattern = 1
.PatternColorIndex = -4105
.ThemeColor = 10
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0
End With
With feuille.Rows("1:1").Font
.ThemeColor = 1
.TintAndShade = 0
End With
feuille.Rows("1:1").Font.Bold = True
feuille.Rows("1:1").AutoFilter
With XLS_APP.ActiveWindow
.SplitColumn = 0
.SplitRow = 1
End With
XLS_APP.ActiveWindow.FreezePanes = True
XLS_APP.Cells.Select
XLS_APP.Cells.EntireColumn.AutoFit
Next
XLS_APP.Application.ScreenUpdating = True
Dim NomFichier, NomCourt
NomCourt = "export_repertoire_mpd_excel.xls"
NomFichier = XLS_APP.GetSaveAsFileName(NomCourt)
If NomFichier <> False then
XLS_APP.ActiveWorkBook.SaveAs NomFichier
End If
Else
MsgBox("Erreur de saisie répertoire")
End if
 
 
Sub LISTE_OBJETS (modele)
Dim objet
Dim colonne
For Each objet In modele.children
If objet.ObjectType = "Table" then
tables.Cells(ligne_table,1).Value = File.Name
tables.Cells(ligne_table,2).Value = modele.Name
tables.Cells(ligne_table,3).Value = objet.Name
tables.Cells(ligne_table,4).Value = objet.Code
tables.Cells(ligne_table,5).Value = objet.Parent.Name
tables.Cells(ligne_table,6).Value = objet.DisplayName
tables.Cells(ligne_table,7).Value = objet.ObjectType
tables.Cells(ligne_table,8).Value = objet.Comment
tables.Cells(ligne_table,9).Value = Rtf2Ascii(objet.Description)
ligne_table= ligne_table + 1
For each colonne in objet.Columns
colonnes.Cells(ligne_colonne, 1).Value = File.Name
colonnes.Cells(ligne_colonne, 2).Value = modele.Name
colonnes.Cells(ligne_colonne, 3).Value = objet.Code
colonnes.Cells(ligne_colonne, 4).Value = objet.Name
colonnes.Cells(ligne_colonne, 5).Value = colonne.Code
colonnes.Cells(ligne_colonne, 6).Value = colonne.Name
colonnes.Cells(ligne_colonne, 7).Value = colonne.DataType
colonnes.Cells(ligne_colonne, 8).Value = colonne.Primary
colonnes.Cells(ligne_colonne, 9).Value = Rtf2Ascii(colonne.Description)
ligne_colonne = ligne_colonne + 1
next
End if
If objet.ObjectType = "Reference" then
On Error Resume Next
references.Cells(ligne_reference, 1).Value = objet.Name
references.Cells(ligne_reference, 2).Value = objet.ChildTable.Code
references.Cells(ligne_reference, 3).Value = objet.ParentTable.Code
references.Cells(ligne_reference, 4).Value = objet.JoinExpression
ligne_reference = ligne_reference + 1
End if
Next
'EXPLORATION DES SOUS-PACKAGES
Dim sous_modele
For Each sous_modele In modele.Packages
LISTE_OBJETS (sous_modele)
Next
End Sub
Top

Utilisation avancée des scripts VBS dans Power AMC : téléchargement des objets du référentiel

Dans le référentiel Power AMC peuvent être stockés divers type d’objets. Des modèles physiques, modèles conceptuels, modèles objets, scripts, fichiers Word, etc. A partir de la liste des objets du référentiel (voir tutoriel liste des objets du référentiel), liste précédemment créée, si nous mettons un petit « x » dans la colonne 11, alors le scripts proposé ci-dessous va télécharger cet objet dans le répertoire demandé.

De toute façon, quand on consulte un objet stocké dans le référentiel, la première chose que fait Power AMC, c’est le télécharger. Mais ça peut être effroyablement long… Alors quand on a 50 composants à consulter, ce script prend toute sa valeur. On le lance et on peut faire autre chose (mais pas travailler sous Power AMC, car les scripts vbs ne laissent pas la main…).

Voici le script. Comme le précédent, les informations de connexion au référentiel doivent être stockées dans Power AMC !

'******************************************************************************
'* Fichier: liste_referentiel_vers_excel.vbs
'******************************************************************************
 
Option explicit
 
'VERIFICATION CONNEXION REFERENTIEL + ATTENTION PAS DE VERIF EXISTENCE REPRTOIRE
Dim referentiel_AMC, connexion
Dim top_recherche
Dim repertoire_export
repertoire_export = InputBox ("Répertoire d'export des composants ?", "Choix du répertoire" )
If Right(repertoire_export, 1) <> "\" Then
repertoire_export = repertoire_export & "\"
End If
InteractiveMode = im_Batch
Set referentiel_AMC = RepositoryConnection
connexion = referentiel_AMC.Connected
If connexion = false then
connexion = referentiel_AMC.Open()
End If
 
'TRAITEMENT SI REFERENTIEL OUVERT
If connexion = true then
Dim repertoire
 
top_recherche = false
 
'OUVERTURE EXCEL
Dim XLS_APP
Set XLS_APP = CreateObject("Excel.Application")
XLS_APP.Visible = True
XLS_APP.DisplayAlerts = False
 
'OUVERTURE FICHIER EXCEL CREE AVEC SCRIPT "liste_referentiel_vers_excel.vbs"
Dim NomFichier
Dim filtre
filtre = "Classeur 97/2003 (*.xls), *.xls"
NomFichier = XLS_APP.GetOpenFileName(filtre,, "Ouvrir", ,False)
If NomFichier <> False then
XLS_APP.Workbooks.Open NomFichier
End If
Dim XLS
Set XLS = XLS_APP.ActiveWorkbook
Dim referentiel
Set referentiel = XLS.Sheets("referentiel")
 
'LECTURE REFERENTIEL
EXPLORATION referentiel_AMC
 
'FIN TRAITEMENT
End If
 
Sub EXPLORATION (folder)
Dim repertoire, nom_fichier
If folder is Nothing then
Exit Sub
End If
repertoire = folder.Name
Dim objet
For Each objet in folder.ChildObjects
If objet.IsKindOf(PdRMG.Cls_RepositoryFolder) then
'RECCURSIVITE
EXPLORATION objet
else
If objet.IsKindOf(PdRMG.Cls_RepositoryDocument) or objet.IsKindOf(PdRMG.Cls_RepositoryModel) then
RECHERCHE_EXCEL (objet.UOL)
If top_recherche = TRUE then
top_recherche = FALSE
output "Extraction de " & objet.Name & " vers " & repertoire_export & nom_fichier
nom_fichier = Right(objet.ExtractionName, Len(objet.ExtractionName) - InStrRev (objet.ExtractionName, "\"))
objet.ExtractToFile repertoire_export & nom_fichier, 1
End If
End If
End If
Next
End Sub
 
Sub RECHERCHE_EXCEL (emplacement)
 
top_recherche = FALSE
 
'LECTURE DU FICHIER EXCEL
Dim ligne, emplacement_xls
ligne = 2
Dim top_recup
Do while referentiel.Cells(ligne,1).value <> "" and top_recherche = FALSE
emplacement_xls = referentiel.Cells(ligne,10).value
top_recup = referentiel.Cells(ligne,11).value
If emplacement_xls = emplacement and top_recup = "x" Then
top_recherche = TRUE
End If
ligne = ligne + 1
Loop
 
End Sub
Top

Utilisation avancée des scripts VBS dans Power AMC : liste objets du référentiel

Le très complet logiciel de modélisation Power AMC offre une fonctionnalité plutôt méconnue, la possibilité d’exécuter des scripts vbs au sein même du logiciel. Le modèle Objet de Power AMC est alors disponible dans l’exécution du script VBS. On peut donc ainsi manipuler à peu près toutes les fonctionnalités offertes par le logiciel, et en masse (intérêt des scripts). La série de 3 tutoriels qui s’annoncent va permettre d’effectuer les tâches suivantes :

  1. faire une liste Excel de tous les Objects contenus dans le référentiel Power AMC,
  2. à partir de la liste précédente, téléchargement de tous les objets de la liste (avec possibilité de cocher les objets requis) dans un répertoire déterminé,
  3. construction sous Excel d’un dictionnaire de données Power AMC à partir de tous les modèles physiques (*.mpd) Power AMC.

A noter, le point 3/ est évidemment le plus important. Toutes les entreprises ne travaillent pas avec le référentiel Power AMC, et donc, on pourra construire le dictionnaire de données directement à partir des fichiers mpd.

Pour exécuter un script sous Power AMC, aller dans le menu « outils – exécuter des commandes – Editer / Exécuter le script »

Dans la fenêtre d’édition des scripts, on peut ouvrir un script existant, Power AMC étant livré avec quelques scripts bien utiles, à titre d’exemples. Le répertoire par défaut des scripts est :

C:\Program Files\Sybase\PowerAMC xx\VB Scripts

On peut en ouvrir un et on retourne dans la fenêtre d’édition. Pour l’exécuter on clique sur « Exécuter », et pour la précieuse mais complexe aide en ligne sur le modèle objet, on clique sur le bouton « aide en ligne ».

La fenêtre d’aide en ligne (description du modèle objet de Power AMC) est la suivante :

Un script que nous pouvons proposer à titre d’exemple pour faire une liste Excel du contenu du référentiel Power AMC est le suivant (créer un fichier texte à partir ce code, le nommer en « liste_referentiel_vers_excel.vbs », et le placer dans le répertoire par défaut des scripts. Attention, les informations de connexion au référentiel doivent être stockées dans Power AMC !

 '******************************************************************************
'* Fichier: Liste_Referentiel_vers_Excel.vbs
'******************************************************************************
 Option explicit
'CREATION INITIALISATION FICHIER EXCEL
Dim nb, i
Dim XLS_APP
Set XLS_APP = CreateObject("Excel.Application")
XLS_APP.Visible = True
XLS_APP.Application.ScreenUpdating = False
XLS_APP.DisplayAlerts = False
XLS_APP.Workbooks.Add
Dim XLS
Set XLS = XLS_APP.ActiveWorkbook
XLS.sheets.Add
XLS.sheets(1).name = "referentiel"
nb = XLS.Sheets.Count
For i = 2 To (nb)
XLS.Sheets(2).Delete
Next
Dim referentiel
Set referentiel = XLS.Sheets("referentiel")
referentiel.Cells.ClearContents
referentiel.Cells(1, 1).Value = "Nom"
referentiel.Cells(1, 2).Value = "Type"
referentiel.Cells(1, 3).Value = "Version"
referentiel.Cells(1, 4).Value = "Emplacement"
referentiel.Cells(1, 5).Value = "Date création"
referentiel.Cells(1, 6).Value = "Date modification"
referentiel.Cells(1, 7).Value = "Identifiant"
referentiel.Cells(1, 8).Value = "Nom étendu"
referentiel.Cells(1, 9).Value = "Class ID"
referentiel.Cells(1, 10).Value = "Emplacement dans referentiel"
referentiel.Cells(1, 11).Value = "Top Export"
Dim ligne_referentiel
ligne_referentiel = 2
'VERIFICATION CONNEXION REFERENTIEL
 
Dim referentiel_AMC, connexion
Set referentiel_AMC = RepositoryConnection
connexion = referentiel_AMC.Connected
If connexion = false then
connexion = referentiel_AMC.Open()
End If
If connexion = true then
EXPLORATION referentiel_AMC
Else
MsgBox "La connexion au référentiel n'est pas valide, veuillez la configurer."
End If
 
'MISE EN FORME DU FICHIER EXCEL
Dim feuille
For Each feuille in XLS.Sheets
feuille.Select
With feuille.Rows("1:1").Interior
.Pattern = 1
.PatternColorIndex = -4105
.ThemeColor = 10
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0
End With
With feuille.Rows("1:1").Font
.ThemeColor = 1
.TintAndShade = 0
End With
feuille.Rows("1:1").Font.Bold = True
feuille.Rows("1:1").AutoFilter
With XLS_APP.ActiveWindow
.SplitColumn = 0
.SplitRow = 1
End With
XLS_APP.ActiveWindow.FreezePanes = True
XLS_APP.Cells.Select
XLS_APP.Cells.EntireColumn.AutoFit
Next
XLS_APP.Application.ScreenUpdating = True
'ENREGISTREMENT DU FICHIER XLS, FERMER AUTRE FICHIER DU MEME NOM AU PREALABLE
 
Dim NomFichier, NomCourt
NomCourt = "Liste_Referentiel_vers_Excel.xls"
NomFichier = XLS_APP.GetSaveAsFileName(NomCourt)
If NomFichier <> False then
XLS_APP.ActiveWorkBook.SaveAs NomFichier
End If
Sub EXPLORATION (folder)
 
Dim repertoire
If folder is Nothing then
Exit Sub
End If
repertoire = folder.Name
Dim objet
For Each objet in folder.ChildObjects
If objet.IsKindOf(PdRMG.Cls_RepositoryFolder) then
'RECCURSIVITE
EXPLORATION objet
else
If objet.IsKindOf(PdRMG.Cls_RepositoryDocument) or objet.IsKindOf(PdRMG.Cls_RepositoryModel) then
output "écriture liste Excel objet " & objet.Name
referentiel.Cells(ligne_referentiel,1).Value = objet.Name
referentiel.Cells(ligne_referentiel,2).Value = objet.ClassName
referentiel.Cells(ligne_referentiel,3).Value = objet.Version
referentiel.Cells(ligne_referentiel,4).Value = objet.ExtractionName
referentiel.Cells(ligne_referentiel,5).Value = objet.CreationDateInRepository
referentiel.Cells(ligne_referentiel,6).Value = objet.ModificationDateInRepository
referentiel.Cells(ligne_referentiel,7).Value = objet.ObjectIdentifier
referentiel.Cells(ligne_referentiel,8).Value = objet.DisplayName
referentiel.Cells(ligne_referentiel,9).Value = objet.ClassID
referentiel.Cells(ligne_referentiel,10).Value = objet.UOL
ligne_referentiel = ligne_referentiel + 1
end if
End If
Next
 
End Sub
Top
Page 1 of 1

Contactez-nous contact@expert-data.fr

EXPERT data, solutions pour TPE/PME et grands comptes