Kinook Software Forums

Kinook Software Forums (
-   [VBP] User Tips, Tricks and Samples (
-   -   Modify scripts with another script (

HippyCraig 04-14-2010 10:10 AM

Modify scripts with another script
I am working on a script to modify a batch of scripts in a folder, I have a script action as follows:

'Create Sub Call
Option Explicit

Dim objApp, objStep, objMacro

' create VisBuildPro app object
Set objApp = CreateObject("VisBuildSvr7.Application")
objApp.Project.Load "%PROCFILES_FULLPATH%"

Set objStep = objApp.Project.Steps(vbldStepMain).Add("Subroutine Call", 6)
objStep.Name = "Get Version History List"
objStep.Indent = 2
objStep.Property("SubName") = "SUB Get Version History List"
objStep.Property("Expand") = -1


When I run the script it modify's creates the following in a script file:

SUB Get Version History List
Get Version History List

If I create the same step manually it looks like this:

SUB Get Version History List
Get Version History List

The main difference between the two is teh type value of the Expand in one its 11 and when I create it through script its a value of 2

My question is what does the value of type represent and how do I change it? Also what is the type value in indent property represent?

kinook 04-14-2010 10:58 AM

The type indicates the data type of the property value ( 2 = VT_I2 (2-byte integer), 3 = VT_I4 (4-byte integer), 11 = VT_BOOL (boolean)


objStep.Property("Expand") = True
to assign a boolean true value to the property (Visual Build will also convert the value to the required type if possible).

HippyCraig 04-14-2010 11:05 AM

Thanks it works perfectly!!!

HippyCraig 04-28-2010 09:11 AM

I was able to get the above to work, but I am having some difficualty finding any documentation on how to add and edit exisiting Parameters for a sub call.

Through the object model I want to search for a specific subcall which I am able to do. Now I want to modify and add some Parameters to the call and save it back out. I am not sure what properties or methodes to use to access these types.

kinook 04-28-2010 09:42 AM

For array properties (grid fields), the returned value is a variant array with a lower bound of 0.

In VBScript, to assign array properties, use something like:


objStep.Property("Parameters") = Array("Name1", "Name2", "Name3")
objStep.Property("ParamValues") = Array("val1", "val2", "val3")

HippyCraig 04-28-2010 02:00 PM

Thanks I was able to get it to work. Just to explain what I was doing see code snipit below. This seems to work but if there is better way I am open to sugestions.

Option Explicit

Dim objApp, objStep, objStepToMod, iCurrentIndexID, strSetupProject, arrParameters, arrParamValues, iCount
Dim strProjectFile, strComments, strInstallAllUsers, strProductName, strTitle, strManufacturer, strAuthor, strReleseMSIName, strVirtualDir

Set objApp = CreateObject("VisBuildSvr7.Application")
objApp.Project.Load "%PROCFILES_FULLPATH%"

'Set Find Step
For Each objStep in objApp.Project.Steps(vbldStepMain)
If objStep.Property("SubName") = "SUB Modify Setup Project" Then
iCurrentIndexID = objStep.Index

arrParameters = objStep.Property("Parameters")
arrParamValues = objStep.Property("ParamValues")

'Read in Values
For iCount = 0 to UBound(arrParameters)
If arrParameters(iCount) = "TMP_PROJECT_FILE" Then strProjectFile = arrParamValues(iCount)
If arrParameters(iCount) = "TMP_COMMENTS" Then strComments = arrParamValues(iCount)
If arrParameters(iCount) = "TMP_INSTALL_ALL_USERS" Then strInstallAllUsers = arrParamValues(iCount)
If arrParameters(iCount) = "TMP_PRODUCT_NAME" Then strProductName = arrParamValues(iCount)
If arrParameters(iCount) = "TMP_TITLE" Then strTitle = arrParamValues(iCount)
If arrParameters(iCount) = "TMP_MANUFACTURER" Then strManufacturer = arrParamValues(iCount)
If arrParameters(iCount) = "TMP_AUTHOR" Then strAuthor = arrParamValues(iCount)
If arrParameters(iCount) = "TMP_RELEASE_MSI_NAME" Then strReleseMSIName = arrParamValues(iCount)

'Find Virtual Directory
'This code would open a file found in one of the properties and find a Virtual Directory in the setup and populate
'populate that new value in the sub call
'strSetupProject = vbld_GetFileContents(objApp.ExpandMacros(strProjec tFile))

'Reasign Values
objStep.Property("ParamValues") = Array(strProjectFile, strComments, strInstallAllUsers, strProductName, strTitle, strManufacturer, strAuthor, strReleseMSIName, strVirtualDir)

End If

Builder.LogMessage("Added New Virtual Directory '" & strVirtualDir & "' to Sub Call")

All times are GMT -5. The time now is 07:22 PM.

Copyright 1999-2019 Kinook Software, Inc.