Kinook Software Forum

Kinook Software Forum (https://www.kinook.com/Forum/index.php)
-   [VBP] User Tips, Tricks and Samples (https://www.kinook.com/Forum/forumdisplay.php?f=19)
-   -   Modify scripts with another script (https://www.kinook.com/Forum/showthread.php?t=4461)

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

objApp.Project.Save


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


-1
SUB Get Version History List
2
Get Version History List



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


-1
SUB Get Version History List
2
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 (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
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.
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")


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


All times are GMT -5. The time now is 06:35 AM.


Copyright © 1999-2023 Kinook Software, Inc.