Windows Script Components  

Exposing Properties

You can expose properties in two ways:

You can also mark a property as the default value for a script component.

To expose a property as a simple value

  1. Create a <public> element as a child of the <component> element.
  2. In the <public> element, include a <property> element that specifies the variable used to store property value.
  3. To initialize the value of a simple property, create a global variable in the <script> element with a name matching propertyName (or propertyVariable, if you specified that) and assign it a value.
  4. The following script component fragment illustrates two properties (name and tag) exposed as simple values. The properties are initialized using global variables in the <script> element.
    Note   A CDATA section is required to make the script in the <script> element opaque. For details, see Script Component Files and XML Conformance.
    <public>
       <property name="name"/>
       <property name="tag" internalName="tagVar"/>
    </public>
    
    <script language="VBScript">
       <![CDATA[
       Dim name
       name = "script component"   ' Initializes the value of name property.
       Dim tagVar
       tagVar = "10"   ' Initializes the value of tag property.
       ]]>
    </script>

Exposing a property using functions is similar to exposing a method.

To expose a property using functions

  1. In the script component file's <public> element, include a <property> element that contains a <get> element to define the read function and a <put> element to define the write function. If you do not include the <put> element, the property will be read-only. If you do not include the <get> element, the property will be write-only.
  2. Write procedures in a <script> element outside the <public> element to implement the functions. The function for setting the property's value — the put function — must accept a single parameter, the value to set the property to.

    The names of the procedures must match the internal names you specified in the <property> element. If you did not specify an internalName attribute, the names of the functions must be the name of the function with the get_ prefix for a read function, and with a put_ prefix for the write function.

  3. For example, the following script component fragment is an example of a script component file that exposes three properties: sname, dateOfBirth, and age. The dateOfBirth property is defined by functions so it can include error checking. The age property is calculated, and is therefore defined as read-only.
    Note   A CDATA section is required to make the script in the <script> element opaque. For details, see Script Component Files and XML Conformance.
    <public>
       <property name="sname"/>
       <property name="age">
          <get internalName="readAge"/>
       </property>
       <property name="dateOfBirth">
          <get internalName="readDOB"/>
          <put internalName="writeDOB"/>
       </property>
    </public>
    
    <script language="VBScript">
    <![CDATA[
    Dim sname   ' Read-write sname property (no functions).
    Dim gDOB   ' Global variable used to store date of birth.
    
    Function readDOB()
       ' Gets value of dateOfBirth property.
       readDOB = gDOB
    End Function
    
    Function writeDOB(newDOB)
       ' Sets value of dateOfBirth property.
       If isDate(gDOB) Then
          'Error checking
          gDOB = newDOB
       End If
    End Function
    
    Function readAge()
       ' Calculates read-only age property.
       If isDate(gDOB) Then
          dobM = DatePart("m", gDOB)
          dobD = DatePart("d", gDOB)
          dobY = DatePart("yyyy", gDOB)
          todayY = DatePart("yyyy", Date)
          age = todayY - dobY
    
          ' Adjust if birthday has not yet occurred this year.
          bday = DateValue(dobM & "/" & dobD & "/" & todayY)
          If DateDiff("d", bday, DateValue(Date)) < 0 Then
             age = age - 1
          End If
          readAge = age
       End If
    End Function
    ]]>
    </script>

You can specify a default property for a script component so the host application can get or set the property's value without explicitly naming the property. For example, if you have exposed a property called sname and marked it as the default, you can work with it in either of these ways in Visual Basic:

Set component = CreateObject("Component.MyComponent")
n = component.sname   ' Gets property explicitly.
n = component   ' Gets value of sname as default.

To specify a default property, include an attribute assigning a special dispatch identifier (a dispid) to the method. For more information about dispids, see Exposing Events.

To specify a default property

See Also

Exposing Events | Exposing Methods | Script Component File Contents | Script Component Files and XML Conformance