#1
|
|||
|
|||
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 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? |
#2
|
|||
|
|||
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)
Use Code:
objStep.Property("Expand") = True |
#3
|
|||
|
|||
Thanks it works perfectly!!!
|
#4
|
|||
|
|||
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. |
#5
|
|||
|
|||
For array properties (grid fields), the returned value is a variant array with a lower bound of 0.
http://www.kinook.com/VisBuildPro/Ma...typroperty.htm In VBScript, to assign array properties, use something like: Code:
objStep.Property("Parameters") = Array("Name1", "Name2", "Name3") objStep.Property("ParamValues") = Array("val1", "val2", "val3") |
#6
|
|||
|
|||
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 |
|
|