Erreur de la base de données WordPress : [Table 'wp_term_taxonomy' is marked as crashed and should be repaired]
SELECT t.*, tt.*, tr.object_id FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category', 'post_tag', 'post_format') AND tr.object_id IN (739, 2862, 2878, 2884, 2886, 2888, 2891, 2895, 2997, 3041) ORDER BY t.name ASC

Blogue – PowerDesigner 911

Script vb pour le remplacement de caractère ou l’extraction d’un « pattern » relatif à une chaîne de caractères

Le vbscript suivant présente quelques exemples afin de remplacer « fox » pour « cat » ou afin de changer l’ordre des mots « The quick » pour « quick The » et finalement afin d’extraire une chaîne de caractère d’un  texte.

Function ReplaceTest(patrn, replStr)

  Dim mch, regEx, str1               ' Create variables.

  str1 = "The quick brown fox jumped over the lazy dog. <o:Shortcut Id=""o3""> <a:ObjectID>0A274DE3-C31B-480A-9486-5BC56E2EDDE9</a:ObjectID>"

  Set regEx = New RegExp            ' Create regular expression.
  regEx.Pattern = patrn             ' Set pattern.
  regEx.IgnoreCase = True           ' Make case insensitive.

for each mch in regEx.Execute(str1)
  output mch
  ReplaceTest = regEx.Replace(mch, replStr)   ' Make replacement.
next

End Function

MsgBox(ReplaceTest("fox", "cat"))      ' Replace 'fox' with 'cat'.

MsgBox(ReplaceTest("(\S+)(\s+)(\S+)", "$3$2$1"))   ' Swap first pair of words.

MsgBox(ReplaceTest("Id=""([^""]+)"">\s*([^<]+)", "$1"))

MsgBox(ReplaceTest("([^<]+)", "$1"))

 

Qu’est-ce qu’un OID?

Un OID est une valeur unique immuable associée à une instance qui est conceptuellement indépendant de la valeur qu’il représente ou de l’état de l’instance. Un identifiant d’objet OID est une valeur générée lors de la création d’un objet. Un OID permet de donner à l’objet une identité immuable et unique dans l’univers connu des objets qui sont des instances d’un type de donné abstrait.

Comment naviguer avec des ID d’objet (OID) dans une base de données Oracle

L’une des fonctionnalités orientées objet les plus intéressantes avec une base de données relationnelle tel qu’Oracle est la possibilité de définir et de stocker des ID d’objet (OID) dans des tables.

Un identificateur d’objet (représenté par le mot clé OID) identifie de manière unique un objet et permet de référencer un objet spécifique parmis tous les autres objets (enregistrements). C’est un mécanisme qui permet de récupérer aisément un enregistrement spécifique.

Contrairement à un Primary Key (PK) qui peut changer après la réorganisation d’une base de données, les OID sont immuables et resteront toujours associés à un enregistrement spécifique.

Les OID sont référés via une commande SQL REF. Un type de données SQL REF est un conteneur pour identificateurs d’objets. Les valeurs REF sont des pointeurs sur des objets de « type ». Quand une valeur REF pointe vers un objet inexistant, on dit que le REF est « suspendu ». Un REF « suspendu » est différent d’un REF NULL. Pour déterminer si un REF est suspendu ou non, on utilise la condition IS [NOT] DANGLING.

Les ID d’objet sont utilisés avec la commande SQL DEREF. Pour ce faire on définit une table avec une colonne qui contient un OID, puis on DEREF cet OID pour voir le contenu de l’enregistrement.

Prenons un exemple, supposons que vous avez un employé et une table pour les départements. Sans OID, vous devriez effectuer un SQL JOIN traditionnel pour voir les informations sur les employé appartenant à un département spécifique.

SELECT EMP.NOM, DEPT.NOM, DEPT.SUPERVISEUR
FROM EMPLOYE EMP, DEPARTEMENT DEPT
WHERE EMP.NO_DEPT = DEPT.NO ;

Effectuer une jointure SQL tel que ci-dessus implique habituellement la lecture de deux INDEX et cela consommera plusieurs entrées/sorties (E/S) dans Oracle.

Une alternative est de définir un OID et de conserver cet ID qui permet d’identifier l’enregistrement d’un département spécifique dans la table EMPLOYE. Pour ce faire

Créer le type d’objet « TYPE_DEPT » qui contient la définition des colonnes relative au département.

CREATE TYPE TYPE_DEPT as OBJECT ( NOM char (40), SUPERVISEUR char (40) )

Créer la table « DEPARTEMENT » en utilisant le type d’objet « TYPE_DEPT » :

CREATE TABLE DEPARTEMENT OF TYPE_DEPT ;

Créer le type d’objet « TYPE_EMP » qui contient la définition des colonnes relative au employés.

Note : La colonne département peut contenir uniquement des objets OID appartenant à des objets de département. Oracle ne permettra pas d’insérer un OID d’une autre table dans cette colonne.

CREATE TYPE TYPE_EMP AS OBJECT
(
NOM char (40),
DEPARTEMENT REF (TYPE_DEPT)
)

Créer la table « EMPLOYE » en utilisant le type d’object « TYPE_EMP » :

CREATE TABLE EMPLOYE OF TYPE_EMP ;

Ainsi au lieu de joindre la table EMPLOYE et DEPARTEMENT afin d’obtenir les informations du département nous pouvons déréférencer l’OID du département afin de trouver directement les enregistrements correspondant.

SELECT NOM, DEREF (DEPARTEMENT) FROM EMPLOYE ;

Il est clair que déréférencer un OID est beaucoup plus rapide que d’utiliser un JOIN pour obtenir les informations sur les employés d’un département. Dans de nombreux cas, les OID de déréférencement provoquent une seule entrée/sortie (E/S), contrairement à plusieurs entrée/sortie (E/S) pour un SQL JOIN.

Quelques utilisation des OID
L’ISO et l’UIT ont publiés des normes qui définissent les OID, l’arborescence des OID ainsi que les politiques et procédures que les autorités d’enregistrements doivent suivrent. L’International Telecommunication Union (IETF) a proposé de représenter les OID par une suite d’entiers séparés par des points. Ces normes sont principalement contenus dans la série des normes ISO 9834, parties 1-8, ISO 8824, UIT X.660, X.680 et X.690. À titre d’exemple la branche relatif à l’Australian Business Number (ABN) a été enregistré auprès de « Standard Australia ». Ci-dessous on prend connaissance que l’OID enregistré 1.2.36.1.333.1 est formé des composants suivants :

1 ISO
2 Organe membre
36 Standard Australie (OIS Registration Services)
1 Australian Governement
333 Portier (GateKeeper)
1 Australian Business Number (ABN)

Référence : http://oidref.com/1.2.36.1.333

 

Lien vers le référentiel des OID : Global OID reference database ainsi que vers le site OID-info.com qui est un site d’information sur les object identifiers (OIDs) dont le propriétaire est la compagnie « Orange »

Le OID de la Banque Nationale auprès de ISO est : iso.org.dod.internet.private.enterprise.bnc (1.3.6.1.4.1.7667). La coordination globale de la racine DNS, de l’adressage IP et des autres ressources du protocole Internet sont effectués par Internet Assigned Numbers Authority (IANA)

  • 1 iso
  • 1.3 org
  • 1.3.6 dod
  • 1.3.6.1 internet
  • 1.3.6.1.4 private
  • 1.3.6.1.4.1 enterprise
  • 1.3.6.1.4.1.7667

Afin de prendre connaissance du préfixe « iso.org.dod.internet.private.enterprise.bnc (1.3.6.1.4.1) » vous devez vous rendre sur le page suivante Structure of Management Information (SMI) Numbers  :

Pour prendre connaissance des feuilles de l’OID représentant les entreprises privés

Decimal
| Organization
| | Contact
| | | Email
| | | |

7667
Banque Nationale du Canada
Laurent Frere
Laurent.Frere&bnc.ca

Vérifie dans le référentiel pour des OID en double

Vous désirez vérifier dans votre référentiel si vous avez un modèle qui possède plus d’un objet avec le même OID.

Option Explicit
dim fso
set fso = CreateObject("Scripting.FileSystemObject")

if not(RepositoryConnection.Connected) then
  output "La connexion au référentiel est fermée. Impossible d'exécuter le script"
end if

CheckRepositoryElements RepositoryConnection.ChildObjects


'*********************************************************************

Sub CheckRepositoryElements(RepObjColl)

output "Vérification du dossier: " & RepObjColl.Source.Location & "/" & RepObjColl.Source.DisplayName

dim repobj

for each repobj in RepObjColl
   if (repobj.IsKindOf(cls_RepositoryModel)) then
     CheckRepositoryModel repobj
   end if
next

for each repobj in RepObjColl
   if not (repobj.IsKindOf(cls_RepositoryModel)) then
      if (repobj.IsKindOf(cls_RepositoryBaseFolder)) then
           CheckRepositoryElements(repobj.ChildObjects)
      end if
   end if
next

End Sub

'************************************************************************

Sub CheckRepositoryModel(repmdl)

output "Vérification du modèle dans le référentiel: " & repmdl

dim filename, pResult, pFolder

Set pFolder = fso.GetSpecialFolder(2) ' 2=TemporaryFolder

filename = fso.BuildPath(pFolder.Path, fso.GetTempName)

repmdl.CheckOutToFile filename, 1, False

if (fso.FileExists(filename)) then
   CheckModelFile filename
   fso.DeleteFile filename, True
else
   output "Erreur d'extraction::" & repmdl
end if

End Sub


'***********************************************************************

Sub CheckModelFile(fname)

dim idmap, tfile, text, rxp, mch, interid

set idmap = CreateObject("Scripting.Dictionary")
Set tfile = fso.OpenTextFile(fname)
text = tfile.ReadAll()
tfile.Close()
set rxp = new RegExp
rxp.IgnoreCase = False
rxp.MultiLine = True
rxp.Global = True

' Pattern Property
' https://www.vbsedit.com/html/648fb4cf-2968-491c-b9de-51a7dad965f1.asp
' "$1"
' Example : Id="o4">
' Id="
' (pattern) Matches pattern and remembers the match
' (
' [^""] Matches any character not enclosed. For example, [^""] matches the o4 in "o4">
' + Matches the preceding character one or more times.
' )
' '
' ">
' \s Matches any white space including space, tab, form-feed, etc. Equivalent to "[ \f\n\r\t\v]
' * Matches the preceding character zero or more times.

' "$2"
' (pattern) Matches pattern and remembers the match
' (
' [^<] Remove any character after. For example,[^<] Hello<"x4", result "x4"
' + Matches the preceding character one or more times.
' )

rxp.Pattern = "Id=""([^""]+)"">\s*([^<]+)"
for each mch in rxp.Execute(text)
   interid = rxp.Replace(mch, "$1")
'   output "interid " & rxp.Replace(mch, "$1")
   if (idmap.Exists(interid)) then
      output " *** *** *** *** ID en double a été trouvé: " & interid
   else
      idmap.Add interid, "OID"
   end if
next

End Sub

 

A propos des méthodes et des propriétes vbscript suivantes :

  1. Execute method (vbscript) : http://www.vbsedit.com/html/711116fb-9c47-47cb-b664-db8141b8cc69.asp
  2. Replace method (vbscript) : https://www.vbsedit.com/html/810607c5-5926-43d9-b7e8-4126e97000d2.asp
  3. Pattern Property : https://www.vbsedit.com/html/648fb4cf-2968-491c-b9de-51a7dad965f1.asp

Vérifier votre modèle actif et enregistrer le résultat dans un fichier texte

Vous avez besoin de vérifier votre modèle et d’enregistrer la sortie dans un fichier texte. De plus dans le fichier de sortie, vous voulez mettre le nom du modèle et l’heure de début de la vérification.

  1. Enregistrez le code ci-dessous dans le fichier « CheckModel.vbs »;
  2. Dans PowerDesigner cliquer sur Outils-> Exécuter des commandes-> Personnaliser des commandes;
    1. Cliquez sur Ajouter une ligne ;
    2. Pour Nom, inscrivez : « CheckModel » ;
    3. Pour Type, sélectionnez : « Script VB »;
    4. Pour Ligne de commande, tapez le nom du répertoire ainsi que le nom du fichier vbscript (CheckModel.vbs) ;
    5. Cliquez sur OK.
  3. Redémarrez PowerDesigner ;
  4. La commande est affichée sous Outils-> Exécuter des commandes ;
  5. Cliquez sur la commande ;
    1. Cela va générer la sortie désirée.
output_path="C:\Users\John\AppData\Local\Temp\Check Model.log"
File_location="C:\Model_Check\"
Set Model=ActiveModel
Model.CheckModel()
FirstLine="Check " & Model.name & " at " & date & " " & time
Const Reading = 1
Const Writing = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(output_path, Reading)
strContents = objFile.ReadAll
objFile.Close

strNewContents = FirstLine & vbCrLf & strContents
FileName=File_location & Model.name &".txt"
Set objFile = objFSO.CreateTextFile(FileName, Writing)
objFile.WriteLine strNewContents
objFile.Close

Accès à des attributs étendus

  1. Select File > New Model to open the New Model dialog.
  2. Select Physical Data Model in the left-hand pane.
  3. Select Physical Diagram in the right-hand pane.
  4. Select ORACLE Version 12c in the list DBMSs.
  5. Click OK.
  6. Select Database > Edit Current DBMS.
  7. Right-click ORA12C::Profile\Column\Extended Attributes and select New
  8. Enter a name. For example, ExtAttr_1.
  9. Click OK to save and close the definition file.
  10. Click the Table tool from the toolbox to create one table.
  11. Double-click the table to edit it, and click the Columns to add a few columns.
  12. Click OK to close the property sheet.
  13. Select Tools > Execute Commands > Edit/Run Script, and execute the following

 

For Each t in ActiveModel.Tables
For Each c in t.Columns
value = c.SetExtendedAttribute(« ORA12C.ExtAttr_1 », True)
output c.GetExtendedAttribute(« ORA12C.ExtAttr_1 »)
next
next

 

Dim Model, XEM, ExtAttr
Set Model = CreateModel(PdFRM.cls_Model)
Set XEM = Model.ExtendedModelDefinitions.CreateNew()
XEM.Name = « MyExtendedDefinition »
XEM.Code = XEM.Name
Set ExtAttr = XEM.AddMetaExtension(PDFRM.cls_Model, Cls_ExtendedAttributeTargetItem)
ExtAttr.Name = « MyExtendedAttribute »
ExtAttr.Value = « True »
XEM.NotifyChange()

output Model.GetExtendedAttributeText(« MyExtendedDefinition.MyExtendedAttribute »)

 

Dim Model, XEM, Stereotype, ExtAttr1, ExtAttr2, Result

Set Model = CreateModel(PdFRM.cls_Model)
Set XEM = ActiveModel.ExtendedModelDefinitions.CreateNew()
Set Stereotype = XEM.AddMetaExtension(PdCommon.Cls_ExtendedSubObject, Cls_StereotypeTargetItem) 
Stereotype.Name = « Stereotype_1 »
Set ExtAttr1 = Stereotype.AddMetaExtension(Cls_ExtendedAttributeTargetItem)
Set Result = XEM.GetMetaExtensionsForStereotype(Cls_ExtendedSubObject, « Stereotype_1 », Cls_ExtendedAttributeTargetItem) 
Output Result.Count &  » item(s) can be found in Profile\ExtendedSubObject\Stereotypes\Stereotype_1\Extended Attributes »

XEM.NotifyChange()

Set ExtAttr2 = Stereotype.AddMetaExtension(Cls_ExtendedAttributeTargetItem)
Set Result = XEM.GetMetaExtensionsForStereotype(Cls_ExtendedSubObject, « Stereotype_1 », Cls_ExtendedAttributeTargetItem) 
Output Result.Count &  » item(s) can be found in Profile\ExtendedSubObject\Stereotypes\Stereotype_1\Extended Attributes »

Mise à jour des paramètres de la convention de dénomination

set mdl = ActiveModel

Set opt = mdl.GetModelOptions()

Output « NameNamingConventions.Count:  » & opt.NameNamingConventions.Count
Output « CodeNamingConventions.Count:  » & opt.CodeNamingConventions.Count

for each ncon in opt.NameNamingConventions
ncon.script = « news value »
next

opt.Save
opt.UpdateModelOptions

mdl.save
‘mdl.close

Compteur du nombre de configuration

Dim repository, connected, counter

Set repository = RepositoryConnection
connected = repository.Connected

If not connected then
connected = repository.Open()
End If

counter = repository.Configurations.Count
output « Nombre de configurations:  » & counter

Assignation d’un port statique au daemon du serveur de license vendeur « SYBASE »

Symptôme

  • Vous avez installé PowerDesigner avec une licence flottante;
  • Vous utilisez le serveur de licence SYSAM;
  • Il y’a un pare feux entre PowerDesigner et le serveur de licence;
  • Vous devez utiliser un port static afin de communiquer entre PowerDesigner et le serveur de licence;
  • Lors de la connexion au serveur de licence (durant le processus d’installation) ou lors du démarrage de PowerDesigner, une fenêtre s’affiche avec le message d’erreur suivant :

Failed to obtain 1 license(s) for PD_SHELL feature from license file(s) or server(s).
Licenses exist for PowerDesigner16.0, but a license containing the configured (LT=FL;PKG=DA) attributes could not be obtained.
Verify that PowerDesigner16.0 is configured to use the correct type of license, and either reconfigure; or generate and deploy the desired license from the Sybase Product Download Center.
License feature name: PD_SHELL
License search path: … \PowerDesigner.server.lic
FLEXnet Licensing error:-73,125

Le serveur de licence nécessite deux ports :

  • Port du deamon de licence
  • Port deamon du vendeur

Au niveau du PowerDesigner, vous pouvez spécifier seulement que le port du deamon de licence, ce qui fait en sorte que le port du deamon du vendeur aura une valeur arbitraire.

Si vous communiquez via un pare-feu ou utilisez des ports statiques pour la communication entre PowerDesigner et le serveur de licences, vous avez besoin d’identifier les deux ports.

En raison d’un manque de fonctionnalités, vous ne pouvez pas générer un fichier de licence avec un port fixe pour le deamon du vendeur.

Comment retirer les préfixes au niveau des code des divers artefacts (GTL/Convention de dénomination)

Vous avez au niveau du nom un préfixe que vous ne désirez pas retrouver au niveau du code. Pour ce faire vous pouvez utiliser un caractère séparateur afin d’indiquer qu’elle partie du nom vous désirez conserver au niveau du code de l’artefact.

Exemple :

Vous avez le nom suivant « TABLE#ADRESSE » et vous désirez conserver au niveau du code seulement la seconde partie du nom « ADRESSE »

Pour ce faire cliquer dans le menu sur Outils->Modèle options

Choisissez la convention de dénomination

Cliquer sur Activer les conversions

Cliquer sur l’onglet « Nom à Code » et copier/coller le code GTL suivant :

.// Assigne VRAI à la variable PREFIX
.set_value(_PREFIX, true, new)

.//Cherche le caractère le #
.foreach_part(%Name%, « ‘#' »)

.//Si la variable PREFIX est assignée à VRAI
.if (%_PREFIX%)

.// Supprime le # et les caractères avant le #
.delete(%CurrentPart%)
.enddelete

.// Assigne FAUX à la variable PREFIX
.set_value(_PREFIX, false, update)

.// Sinon conserve la seconde partie
.else
%CurrentPart%
.endif
.next

 

Dans le second exemple on présente comment conserver au niveau du code la première partie du nom :

Name : TABLE#ADRESSE

Code : TABLE

.set_value(_First, true, new)
.foreach_part(%Name%, « ‘#' »)
.if (%_First%)
%CurrentPart%
.set_value(_First, false, update)
.endif
.next

 

Lists the code of attributes for an UML class

Comment identifier via VBScript le nom de l’espace de nom pour lequel une classe ou un package est associé, en sachant que cela est définit en GTL (C#2::ProfilePackageCriteriaNamespace).

Utilisation de la méthode : « EvaluateTemplate »

Cette extension de profil permet la définition d’un gabarit pour la génération d’un texte sur une métaclasse, un critère ou un stéréotype.

Le gabarit utilise un langage propriétaire nommé GTL (Generation Template Language). Ce langage est documenté au niveau du Guide de référentce de Generation de la documentation utilisateur avancée.

L’exemple suivant list le code des attributs d’une classe UML

Utilisé la méthode « EvaluateTemplateFor »dans un script peut améliorer l’aide afin de conserver la section d’importation des classes à jour

TemplateTargetItem: Template

.if (%ObjectType% == Class) .

.foreach_item(Attributes)
%Code%

.next
.endif.

Contacter nous
300 characters left