`

PowerDesigner 把Comment写到name中 和把name写到Comment中 pd7以后版本可用

阅读更多

comentToName支持多次运行已经移植过来的不会重复移植

Option   Explicit    
ValidationMode   =   True    
InteractiveMode   =   im_Batch    
  
Dim   mdl   '   the   current   model    
  
'   get   the   current   active   model    
Set   mdl   =   ActiveModel    
If   (mdl   Is   Nothing)   Then    
      MsgBox   "There   is   no   current   Model "    
ElseIf   Not   mdl.IsKindOf(PdPDM.cls_Model)   Then    
      MsgBox   "The   current   model   is   not   an   Physical   Data   model. "    
Else    
      ProcessFolder   mdl    
End   If    
  
Function CreateRegExp(pattern)
  dim result:set result=CreateObject("VBscript.RegExp")
  result.Global=true
  result.IgnoreCase=true
  result.Pattern=pattern
  result.MultiLine=true
  
  set CreateRegExp=result
End Function

 

Function IsRightText(text)

    if (Len(text)=0) then

           IsRightText=false

           exit function

    end if

    dim regex:set regex= CreateRegExp("^[a-zA-Z0-9_]+$")

    dim result:result=regex.Test(text)

    set regex=nothing

    IsRightText=result

End Function
  
Private   sub   ProcessFolder(folder)    
On Error Resume Next   
      Dim   Tab   'running     table    
      for   each   Tab   in   folder.tables    
            if   not   tab.isShortcut   then    
                  'if IsRightText(tab.name) then
                     tab.name   =  tab.Code + mid(tab.comment,1,10)
                  'end if   
                  Dim   col   '   running   column    
                  for   each   col   in   tab.columns    
                  if col.comment="" then   
                  else  
                        if IsRightText(col.name) then
                           col.name = mid(col.comment,1,8)
                        end if    
                  end if  
                  next    
            end   if    
      next    
  
      Dim   view   'running   view    
      for   each   view   in   folder.Views    
            if   not   view.isShortcut   then    
                  view.name   =   view.comment    
            end   if    
      next    
  
      '   go   into   the   sub-packages    
      Dim   f   '   running   folder    
      For   Each   f   In   folder.Packages    
            if   not   f.IsShortcut   then    
                  ProcessFolder   f    
            end   if    
      Next    
end   sub 

 code转大写upcode

'******************************************************************************
'* File:     code2name.vbs
'* Title:    Code to Name Conversion
'* Purpose:  To 
'
'* Model:    Physical Data Model
'* Category: Naming Standards
'* Author:   Matt Creason - Sr. System Consultant - Sybase, Inc.
'* Created:  Apr 8, 2005
'* Mod By:   
'* Modified: 
'* Version:  1.0
'* Comment:  
'*  v1.0 - Must have Conversion Tables assigned as a model option
'******************************************************************************


Option Explicit
ValidationMode = True
InteractiveMode = im_Batch

Dim mdl ' the current model
Dim opt ' model options

' get the current active model
Set mdl = ActiveModel
If (mdl Is Nothing) Then
   MsgBox "There is no current Model"
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then
   MsgBox "The current model is not an Physical Data model."
Else
   Set opt = mdl.GetModelOptions()
   opt.EnableNameCodeTranslation = true
   opt.save
   opt.UpdateModelOptions ' need to call this you have made changes
   ProcessFolder 
End If

' This routine transform code into name for each table, each column of the current folder
Private sub ProcessFolder
   Dim obj, tbl, col
   for each tbl in mdl.Tables
      Dim codeToName, cTN
      for each codeToName in opt.CodeNamingConventions
         if (codeToName.Name = tbl.ObjectType) then
            'output "Converting " + codeToName.Name + " " + tbl.Code + " code to name using " + codeToName.Script
            'tbl.Name = tbl.EvaluateText(codeToName.Script)
			tbl.code= UCase(tbl.code)
            for each col in tbl.Columns
               for each cTN in opt.CodeNamingConventions
                  if (cTN.Name = col.ObjectType) then
                     'output "Converting " + cTN.Name + " " + col.Code + " code to name using " + cTN.Script
                     'col.Name = col.EvaluateText(cTN.Script)
					 col.code= UCase(col.code)
                  end if
               next
            next
         end if
      next
   next
end sub

 

 

在使用PowerDesigner对数据库进行概念模型和物理模型设计时,一般在NAME或Comment中写中文,在Code中写英文。Name 用来显 示,Code在代码中使用,但Comment中的文字会保存到数据库Table或Column的Comment中,当Name已经存在的时候,再写一次 Comment很麻烦,可以使用以下代码来解决这个问题:

  • 代码一:将Name中的字符COPY至Comment中

    Option   Explicit
    ValidationMode   =   True
    InteractiveMode   =   im_Batch

    Dim   mdl   '   the   current   model

    '   get   the   current   active   model
    Set   mdl   =   ActiveModel
    If   (mdl   Is   Nothing)   Then
          MsgBox   "There   is   no   current   Model "
    ElseIf   Not   mdl.IsKindOf(PdPDM.cls_Model)   Then
          MsgBox   "The   current   model   is   not   an   Physical   Data   model. "
    Else
          ProcessFolder   mdl
    End   If

    '   This   routine   copy   name   into   comment   for   each   table,   each   column   and   each   view
    '   of   the   current   folder
    Private   sub   ProcessFolder(folder)
          Dim   Tab   'running     table
          for   each   Tab   in   folder.tables
                if   not   tab.isShortcut   then
                      tab.comment   =   tab.name
                      Dim   col   '   running   column
                      for   each   col   in   tab.columns
                            col.comment=   col.name
                      next
                end   if
          next

          Dim   view   'running   view
          for   each   view   in   folder.Views
                if   not   view.isShortcut   then
                      view.comment   =   view.name
                end   if
          next

          '   go   into   the   sub-packages
          Dim   f   '   running   folder
          For   Each   f   In   folder.Packages
                if   not   f.IsShortcut   then
                      ProcessFolder   f
                end   if
          Next
    end   sub

--------------------------------------------

         另外在使用REVERSE ENGINEER从数据库反向生成PDM的时候,PDM中的表的NAME和CODE事实上都是CODE,为了把NAME替换为数据库中Table或Column的中文Comment,可以使用以下脚本:

  • 代码二:将Comment中的字符COPY至Name中


    Option   Explicit
    ValidationMode   =   True
    InteractiveMode   =   im_Batch

    Dim   mdl   '   the   current   model

    '   get   the   current   active   model
    Set   mdl   =   ActiveModel
    If   (mdl   Is   Nothing)   Then
          MsgBox   "There   is   no   current   Model "
    ElseIf   Not   mdl.IsKindOf(PdPDM.cls_Model)   Then
          MsgBox   "The   current   model   is   not   an   Physical   Data   model. "
    Else
          ProcessFolder   mdl
    End   If

    Private   sub   ProcessFolder(folder)
    On Error Resume Next
          Dim   Tab   'running     table
          for   each   Tab   in   folder.tables
                if   not   tab.isShortcut   then
                      tab.name   =   tab.comment
                      Dim   col   '   running   column
                      for   each   col   in   tab.columns
                      if col.comment="" then
                      else
                            col.name=   col.comment
                      end if
                      next
                end   if
          next

          Dim   view   'running   view
          for   each   view   in   folder.Views
                if   not   view.isShortcut   then
                      view.name   =   view.comment
                end   if
          next

          '   go   into   the   sub-packages
          Dim   f   '   running   folder
          For   Each   f   In   folder.Packages
                if   not   f.IsShortcut   then
                      ProcessFolder   f
                end   if
          Next
    end   sub

-----------------------------------------------------------------------

以上两段代码都是VB脚本,在PowerDesigner中使用方法为:

    PowerDesigner->Tools->Execute Commands->Edit/Run Scripts

将代码Copy进去执行就可以了,是对整个CDM或PDM进行操作

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics