BEGINNING COMPONENTS FOR ASP PART 3 – USING COMPONENTS FROM ASP

Let’s put that right with a quick example.

Did You Know You Were Using COM Components?

Whether you realized it or not, the Server, Request, Response, Application, and Session objects are in fact COM components. They are known as ASP’s intrinsic or built-in objects – they are hosted in a COM server called asp.dll, which you’ll find on your machine if you have IIS or PWS installed. There are also a number of other COM components that come with ASP, such as the Ad Rotator and the Content Rotator. The components available to you will depend upon which version of ASP you are running.

In ASP pages, the ASP intrinsic objects are treated a bit differently from other COM components. The ASP intrinsic objects are there and ready-to-use in the page – the ASP environment takes care of this for us.

When we want to use other components on our ASP pages, we have to create them explicitly using the Server object’s CreateObject() method. We also have to pass the CLSID or the ProgID of the object to the CreateObject() method, so that it creates an object of the appropriate type for us to use in our script (we will meet ProgIDs later in this chapter).

Using Our First Component

Later in the chapter, we will build a component called BrickCalc.wsc. Its job is to calculate how many bricks we would need in order to build a wall. At this point, we’ll talk about how that component is used in a simple user interface called wroxblox.asp. This page asks the end user to specify the size of the wall they want to build. It also allows users to specify the type of brick (breeze block or house brick), using a drop-down list box. This information is held in an HTML form:

<HTML>
<HEAD>
 <TITLE>Wrox Blox Building Supplies</TITLE>
</HEAD>

<BODY>
<P><FONT FACE="Arial" SIZE="6">Wrox Blox Building
                Supplies BrickCalc.</FONT></P>

<FORM ACTION="WroxBloxResult.asp" METHOD="post">
<P>Length of wall in feet: <INPUT ID="WallLength" 
                 NAME="WallLength" ></P>
<P>Height of wall in feet: <INPUT ID="WallHeight" 
                 NAME="WallHeight" ></P>

<P>Select Type of Brick:
 <SELECT ID="BrickType" NAME="BrickType" STYLE="HEIGHT: 22px; 
                      WIDTH: 131px">
   <OPTION SELECTED VALUE="BreezeBlock">Breeze Block</OPTION>
   <OPTION VALUE="HouseBrick">House Brick</OPTION>
 </SELECT>
</P>
<P>Click here to calculate the number of bricks you will need: 
 <INPUT TYPE="submit" VALUE="Calculate">
</P>
</FORM>

</BODY>
</HTML>

The code for this example and the component it uses is available from our web site at http://webdev.wrox.co.uk/books/2882. You’ll also find a compiled version of the component there. Before you use this component, however, you need to install the Windows Script Component download that’s available from http://www.microsoft.com/scripting; this will be discussed in more depth when we see how to create the component later in the chapter.

Here is what the WroxBloxForm.asp page looks like:

unnamed-file-300 BEGINNING COMPONENTS FOR ASP PART 3 - USING COMPONENTS FROM ASP

When the user clicks on the Calculate button, the values are sent to our WroxBloxResult.asp page. Before we take a look at that page, let’s just see what the component allows us to do.

The Brick Calculator Component

The Brick Calculator component BrickCalc.wsc is a Windows Script Component (hence the .wsc file extension). Windows Script Components (WSC) is a Microsoft technology that allows us to create COM components using VBScript or JScript. This type of component is excellent for speedy prototyping of components, because – as we will see later in the chapter – the interface is generated by a Wizard, and the methods are implemented using script.

The Brick Calculator has one property, BrickType, which specifies the type of brick. It also has one method, HowManyBricks(),which requires the WallHeight and WallLength as parameters in order to perform its calculation. Given the type of brick and the size of the wall, it will work out the number of bricks we need to build the wall.

Using the Brick Calculator Component

When the user clicks on the Calculate button of the HTML form, the values are sent to our WroxBloxResult.asp page. This is the page that uses the Brick Calculator component and returns the result of its HowManyBricks() method to the browser. The page starts by creating an instance of the component so that we can use it from the page:

<%
 Dim objBrickCalc
 Set objBrickCalc = Server.CreateObject("BrickCalc.wsc")
 ...

Here, we create an object variable in the first line, then set this variable to an instance of the component we want to create. In this case, the ProgID is BrickCalc.wsc. Recall that the instance of the component created is called an object.

People often use the terms component and object interchangeably, but in strict terms an object is an instance of a component.

Now we collect the wall dimensions from the form to submit to the object’s HowManyBricks() method. We set the BrickType property of the object to the value of the select box, and write the dimensions of the wall back to the browser:

 ...
 WallLength = Request.Form("WallLength")
 WallHeight = Request.Form("WallHeight")

 objBrickCalc.BrickType = Request.Form("BrickType")

 Response.Write "<FONT FACE=arial SIZE=6>" & _
         "Wrox Blox Building Supplies BrickCalc" & _
                   " Result</FONT><BR><BR>"

 Response.Write "Calculation for a wall " & WallHeight & _
         " foot high and " & WallLength & " foot long."
 ...

Having created an instance of the component in the ASP page, we can treat the object just as we would any other object in ASP. So we can reference the methods our component implements using dot notation:

objectname.methodname(parameter1, parameter2, ..., parameterN)

You should be familiar with this notation already, because it’s exactly the same as the one we use when using the ASP intrinsic objects, and all other COM components in ASP. For example, when we want to write something back to the browser in ASP, we are using the Write() method of the Response object.

In our case, however, we have the objBrickCalc variable holding the reference to our component, so we can access the methods of the component using:

objBrickCalc.methodname(parameter1, parameter2, ..., parametern)

On this occasion, the component only has one method, so we’ll be using:

objBrickCalc.HowManyBricks(WallHeight, WallLength)

We want to save the return value of the method in a variable strResult so that we can use it in the ASP page. To do this, we just make sure that the variable we want to use in the ASP page is set to the above line, simply by using:

 ...
 strResult = objBrickCalc.HowManyBricks(WallHeight, WallLength)
 ...

Finally, we write the value of the variable strResult, which holds the return value of the component’s HowManyBricks() method, to the browser:

 ...
 Response.Write "<BR><BR> You will need " & strResult & " bricks."
%>

And that’s it. Here is the result:

unnamed-file-302 BEGINNING COMPONENTS FOR ASP PART 3 - USING COMPONENTS FROM ASP

So, we have created an instance of our Brick Calculator component, and used it from script in our page. Obviously it’s a very simple example, and it’s a task that could have been achieved using script within the form. But it does show you how to use components from your ASP script, and how we talk to objects via their methods and properties.

Having seen how to use components from our ASP pages, let’s take a look at some of the common types of component, and how they might fit into our applications.