PDA

View Full Version : Modify scripts with another script


HippyCraig
04-14-2010, 10:10 AM
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

objApp.Project.Save


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

<step action='Subroutine Call'>
<Expand type='2'>-1</Expand>
<SubName>SUB Get Version History List</SubName>
<indent type='3'>2</indent>
<name>Get Version History List</name>
</step>


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

<step action='Subroutine Call'>
<Expand type='11'>-1</Expand>
<SubName>SUB Get Version History List</SubName>
<indent type='3'>2</indent>
<name>Get Version History List</name>
</step>


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 (http://msdn.microsoft.com/en-us/library/ms221170.aspx). 2 = VT_I2 (2-byte integer), 3 = VT_I4 (4-byte integer), 11 = VT_BOOL (boolean)

UseobjStep.Property("Expand") = Trueto 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.
http://www.kinook.com/VisBuildPro/Manual/propertyproperty.htm

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)
Next

'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("Parameters") = Array("TMP_PROJECT_FILE", "TMP_COMMENTS", "TMP_INSTALL_ALL_USERS", "TMP_PRODUCT_NAME", "TMP_TITLE", "TMP_MANUFACTURER", "TMP_AUTHOR", "TMP_RELEASE_MSI_NAME", "TMP_VIRTUAL_DIR")
objStep.Property("ParamValues") = Array(strProjectFile, strComments, strInstallAllUsers, strProductName, strTitle, strManufacturer, strAuthor, strReleseMSIName, strVirtualDir)

End If
Next


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