vbscriptpowerdesigner

PowerDesigner: 'Object Required': PdPDM Error while running a vbscript from outside PD


I have written the vbs script for doing reverse engineering (in PowerDesigner) but when I am running the script through Python, I am getting the error "Object Required": PdPDM Error. I have written the vbs script below.

    ' Define PDM file path
    Const filename = "C:\test.pdm"
    
    ' SQL script file name 
    const sScrptFile = "C:test.sql"
    
    Dim pModel, pOpt
    ' Create model with appropriate DBMS
    Set pModel=CreateModel(PdPDM.cls_Model, "|DBMS=Teradata V16")
    pModel.name = "test"
    ' Hide dialogs
    InteractiveMode = im_Batch
    
    Set MyPckg = pModel.Packages.CreateNew()
    ' package name and package code
    MyPckg.name = "test"
    MyPckg.code = "test"
    
    Set opt = pModel.GetPackageOptions()
    
    ' Set reverse engineer mode to script file
    opt.ReversedScript = True
    
    ' Set the SQL script file name
    opt.ReversedFile = sScrptFile
    
    ' Start the reverse engineering
    pModel.ReverseDatabase
    pModel.save(filename)

I am not able to find from where to import PdPDM library in vbs script.

EDIT: we have read the suggested duplicate "Object required" when using Set in an assigment, but it is not at all the same problem, and the solution does not apply. In this case, we have a script working in PowerDesigner, which just cannot work outside of PD.


Solution

  • This is the general question of using PowerDesigner VBScript from outside PowerDesigner. Inside PD, it loads many typelibs before calling the script, which are not available when called through Windows Script.

    The solution I've found is to write rather a .wsf file, than a .vbs, which allows adding typelib references.

        <job id="VBSReverse">
           <!-- Sybase PdCommon 16.7 Type Library -->
           <reference guid="{A552E368-E3AD-452B-A703-9A2199B008D9}" version="16.7" />
           <!-- Sybase PdPDM 16.7 Type Library -->
           <reference guid="{B18A8271-9633-11D1-9914-006097355D9B}" version="16.7" />
           <script language="VBScript">
        option explicit
        
        ' Define PDM file path
        Const filename = "C:\temp\test.pdm"
        
        ' SQL script file name 
        const sScrptFile = "C:\temp\test.sql"
        
        dim app
        set app = CreateObject("PowerDesigner.Application")
        
        if not app is nothing then
           Dim pModel
           dim pOpt
           ' Create model with appropriate DBMS
           Set pModel = app.CreateModel(PdPDM.cls_Model, "|DBMS=Teradata V16")
           pModel.name = "test"
           ' Hide dialogs
           app.InteractiveMode = im_Batch
        
           dim MyPckg : Set MyPckg = pModel.Packages.CreateNew()
           ' package name and package code
           MyPckg.name = "test"
           MyPckg.code = "test"
        
           dim opt : Set opt = pModel.GetPackageOptions()
           ' Set reverse engineer mode to script file
           opt.ReversedScript = True
           ' Set the SQL script file name
           opt.ReversedFile = sScrptFile
        
           ' Start the reverse engineering
           pModel.ReverseDatabase
           pModel.save(filename)
           
           app.ActiveWorkspace.Close true
        end if
           </script>
        </job>
    

    In my test, I executed it with cscript test.wsf.