Home > Articles > Mobile Application Development & Programming > HTML5 & Web Standards

📄 Contents

  1. Introducing MyInformIT
  2. Added Value
  3. And Now, the Rest of the Story
  • Print
  • + Share This
Like this article? We recommend

Like this article? We recommend

And Now, the Rest of the Story

Enough digression. Now that we have our recordset, we make sure that it contains data, then read what's there.

26    'Populate the Product information array
27    prodInfo.MoveFirst()
28    if not prodInfo.EOF then
29      prodset(1) = prodInfo.Fields("product_name")
30      elname = prodset(1)
31      prodset(2) = prodInfo.Fields("isbn")
32      prodset(3) = prodInfo.Fields("published_date")
33    end if

We determine the product name, ISBN of the product, and its published date.

34    if Request.QueryString("element_id") <> "" then
35    'Content is at the element level
36      elID = Request.QueryString("element_id")
37      'Get element info
38      elobj.getElementDesc(prodID)
39      set elDesc = elobj.items
40      elDesc.MoveFirst()
41      while not elDesc.EOF
42       if elDesc.Fields("element_id") = elID then
43         elname = elDesc.Fields("element_name")
44       end if
45       elDesc.MoveNext()
46      wend
47    else
48    'Content is only at product level
49      elID = "NULL"
50    end if

What's this? An element_id? I've been caught again! While it's true that the product_id is all we need to uniquely specify a product, certain products go deeper than that. An article will generally have many pages. Each page has its own chunk of content, the text of that page. This is stored in a separate database table, content_elements, and is linked back to the base product information in the products table. An intermediate table, product_content, stores the product_id, and has rows for each associated element_id. Thus, when an article is selected, a join occurs to link the product_id to the element_ids that come with it. That is how we display a particular article page.

If there's an element_id on the query string, that means we're on a given page of an article. If you want to save just page three to MyInformIT, we give you that capability here. (Aren't we just the nicest bunch of folks?) We scroll through the returned recordset and match the given element_id, storing the element_name (the section title) for later.

51    'Get the user ID
52    if Request.QueryString("session_id") <> "" then
53    'Grab the session ID to get the user ID

Here is where we tie the session_id passed on the query string to the user_id (at least according to the comment above).

54      sessID = Request.QueryString("session_id")
55      set addobj = Server.CreateObject("informit.addto")
56      addobj.getUserID(sessID)
57      set userRS = addobj.items
58      userID = userRS.Fields("user_id")
59
60      if Len(userID) <= 0 _
61       or isnull(userid) then
62       addContent = -2

We retrieved a recordset from a call to the informit.addto.getUserID method. If the session_id doesn't match a user_id for some reason, we drop out of addContent() with a –2 return value.

63      else
64       ' Make sure that the user does not already have
65       ' this piece
66       ' of content in his collection. If so, give them
67       ' a choice
68       ' of whether or not to add it again
69       ret = addobj.checkContent(userID,prodID,elID)

As promised, here is where we check to see whether the content already exists in the user's MyInformIT list. The Java procedure returns 0 if the product_id (and element_id, if there) is not matched within that user_id's saved content, and 1 if the content already exists.

70       if ret = 0 then
71       'Add the content
72         ret = addobj.addContent(userID,prodID,elID)
73         if ret = 1 then
74          resp = resp & "<p>
            <font size=""-1"" color=""#FF0000"">" &
            elname &
            " - </font><font size=""-1""> has been
            successfully added to your MyInformIT
            bookshelf</font></p>" & chr(13)
75          resp = resp &
            "<p align=center>
            <form id=form1 name=form1>
            <input type='button' name='close'
            value='Close'
            onClick='window.close()'></form></p>" &
            chr(13)
76          addContent = resp

The method informit.addTo.addContent is called on line 72, passing in the user_id, product_id, and element_id. If everything worked, we return from the function, passing back the screen that you see in Figure 4.

Figure 4 You've been saved!

77         else
78          addContent = -1
79         end if

Otherwise, we return an error condition.

80       elseif ret = 1 then
81         ' Content is already there, give the user a
82         ' choice whether to
83         ' add it again
84         resp = resp & "<p align=""center"">
           <font size=""-1"" color=""#FF0000"">" &
           elname & " - </font><font size=""-1""> is
           already saved on your MyInformIT
           bookshelf</font>" & chr(13)
85         resp = resp & "<br><font size=""-1"">
           Do you wish to save it again?</font></p>" &
           chr(13)
86         resp = resp & "<p align=center>
           <form id=form1 name=form1>
           <input type='button' name='yep'
            value=' Yes' onClick='reAdd()'>&nbsp;&nbsp;
            <input type='button' name='nope'
            value=' No '
            onClick='window.close()'></form></p>" &
            chr(13)
87         addContent = resp

Finally we arrive at the reAdd condition. With my apologies for the broken-up lines, you can see on line 86 that clicking the Yes button will invoke the JavaScript reAdd() function that was mentioned a long time ago in a galaxy far, far away. Figure 5 will help with visualization.

Figure 5 What? You want to save it again?

The reAdd() function takes the input URL, derived from the window.location.href call, and tacks the text "&readd=yes" onto the query string. It closes the current pop-up window and opens another of the same size, in the same location. This takes us back to the addTo/index.asp function, but this time readd='yes' is true. Instead of calling addContent(), we call readdContent(). readdContent() does exactly the same things as addContent(), except it doesn't check for the readd flag, naturally.

88       else
89       ' Oops
90         addContent = -1
91       end if
92      end if
93    end if
94   end if
95
96 end function

The last few lines just tidy up. We now have added a piece of content to our MyInformIT selections. If you go back to the MyInformIT page, you'll see it there as big as life.

I'm guilty of being selfish by taking up so much of your time writing about adding content to MyInformIT. In the next installment, we'll take a closer look at how the lists of products are retrieved and built for a given user. Until then, stop at stop signs! Take a little extra time and enjoy life! I know that I will.

  • + Share This
  • 🔖 Save To Your Account