dcsimg
June 24, 2018
Hot Topics:

Pseudo-Objects in Active Server Pages

  • October 14, 1999
  • By Thornton Rose
  • Send Email »
  • More Articles »

<%
' Entity.inc -- Functions and subroutines for Entity pseudo-objects.

' Entity_New() creates a new Entity.
'
function Entity_New()
   dim obj
   dim fields
   dim defaults
   dim i

   ' Create the empty object.

   set obj = Server.CreateObject("Scripting.Dictionary")

   ' Add the base fields.

   obj.Add "_Table",      ""
   obj.Add "_PrimaryKey", ""

   set Entity_New = obj
end function

' Entity_Load() loads a list of objects from the database.
'
function Entity_Load(strConn, emptyObj, fields, where, orderBy)
   dim list
   dim recordset
   dim obj
   dim fieldNames
   dim value
   dim key
   dim i
   
   ' Get field names.
   
   fieldNames = emptyObj.Keys()

   ' Create the list and run the query.

   set list = Server.CreateObject("Scripting.Dictionary")
   set recordset = DB_Query(strConn, fields, emptyObj("_Table"), _
      where, orderBy)

   ' Load the records into the list.

   do while not recordset.EOF
      set obj = Entity_Clone(emptyObj)
      
      for i = 0 to UBound(fieldNames)
         if Left(fieldNames(i), 1) <> "_" then
            value = Entity_ConvertType( _
               DB_NullVal( _
                  recordset(fieldNames(i)).Value, emptyObj(fieldNames(i))), _
                  TypeName(obj(fieldNames(i))) )
            obj(fieldNames(i)) = value
         end if
      next
      
      ' Add the object to the list.
      
      key = recordset(emptyObj("_PrimaryKey")).Value
      
      if TypeName(key) <> "String" then
         key = CStr(key)
      end if
      
      list.Add key, obj
      
      ' Move to the next record.

      recordset.MoveNext
   loop

   ' Close the recordset.

   recordset.Close

   ' Return the list.

   set Entity_Load = list
end function
     
' Entity_Insert() inserts the given object into the database.
'
function Entity_Insert(strConn, obj)
   dim fields
   dim values
   dim keys
   dim data
   dim i
   
   ' Build the fields and values clauses.
   
   fields = ""
   values = ""
   keys = obj.Keys()

   for i = 0 to UBound(keys)
      
      ' If not an internal key ...
      
      if Left(keys(i), 1) <> "_" then

         if fields <> "" then
            fields = fields & ","
         end if
      
         fields = fields & "`" & keys(i) & "`"

         ' Add value.
         
         data = obj(keys(i))
        
         if values <> "" then
            values = values & ","
         end if
      
         if (TypeName(data) = "String") or _
            (TypeName(data) = "Date") then
            values = values & "'" & data & "'"
         else
            values = values & data
         end if
      end if
   next
   
   ' Insert the record.
   
   Entity_Insert = DB_Insert(strConn, obj("_Table"), fields, values)
end function

' Entity_Update() updates the given object in the database.
'
function Entity_Update(strConn, obj)
   dim assignments
   dim items
   dim keys
   dim data
   dim where
   dim i
   
   assignments = ""
   keys = obj.Keys()
   items = obj.Items()

   for i = 0 to UBound(keys)
      if (Left(keys(i), 1) <> "_") and _
         (keys(i) <> obj("_PrimaryKey")) then

         ' Add assignment.

         data = items(i)
         
         if assignments <> "" then
            assignments = assignments & ","
         end if
      
         assignments = assignments & "`" & keys(i) & "` = "
         
         if (TypeName(data) = "String") or _
            (TypeName(data) = "Date") then
            assignments = assignments & "'" & data & "'"
         else
            assignments = assignments & data
         end if
      end if
   next

   ' Build where clause.
   
   where = obj("_PrimaryKey") & " = "
   data = obj(obj("_PrimaryKey"))
   
   if (TypeName(data) = "String") or _
      (TypeName(data) = "Date") then
      where = where & "'" & data & "'"
   else
      where = where & data
   end if

   ' Update database.
   
   Entity_Update = DB_Update(strConn, obj("_Table"), assignments, where)
end function

' Entity_Delete() deletes the given object from the database.
'
function Entity_Delete(strConn, obj)
   dim data
   dim where

   ' Build where clause.
   
   where = obj("_PrimaryKey") & " = "
   data = obj(obj("_PrimaryKey"))
   
   if (TypeName(data) = "String") or _
      (TypeName(data) = "Date") then
      where = where & "'" & data & "'"
   else
      where = where & data
   end if

   ' Delete record.
   
   Entity_Delete = DB_Delete(strConn, obj("_Table"), where)
end function

' Entity_Clone() clones the given object.
'
function Entity_Clone(obj)
   dim newObj
   dim keys
   dim i

   ' Create an empty object.

   set newObj = Server.CreateObject("Scripting.Dictionary")
   
   keys = obj.Keys()
   
   for i = 0 to UBound(keys)
      newObj.Add keys(i), obj(keys(i))
   next

   set Entity_Clone = newObj
end function

' Entity_URLEncode() encodes the given Dictionary object into query 
' string format (e.g. a=1&b=2) using the given name as a tag for the object
' fields.
'
function Entity_URLEncode(name, obj)
   dim data
   dim keys
   dim i

   ' Get the keys (field names) of the object.

   data = ""
   keys = obj.Keys()

   ' Loop through the keys. For each, add the key name and the key value to 
   ' the query string data. The given object name is prepended to the key 
   ' name, so that it can be decoded later and so that multiple objects can 
   ' be encoded without field name collisions. (Basically, this allows each 
   ' object to  have its own "name space" in the query string.)
   '
   ' Here is an example:  
   '
   ' name = "article"
   ' key =  "title"
   ' article("title") = "foo"
   '
   ' => data = "article_title=foo"

   for i = 0 to UBound(keys)
      data = data & _
         Server.URLEncode(name & "_" & keys(i)) & "=" & _
         Server.URLEncode(CStr(obj(keys(i))))

      ' If there is more than one keys, append "&", which is the field
      ' separator in a query string.
      
      if i < UBound(keys) then
         data = data & "&"
      end if
   next

   ' Return the query string data.

   Entity_URLEncode = data
end function

' Entity_URLDecode() decodes a object from a query string. When it is
' done the given object contains the decoded data. The fields defined in the
' given object are extracted from the query string of the given request 
' object and stored in the given object. The given object name is used as
' a tag for the object fields and must the name (case-sensitive) that was
' used to encode the object originally.
'
sub Entity_URLDecode(req, objectName, obj)
   dim keys
   dim fieldName
   dim fieldData
   dim fieldValue
   dim i

   ' Get the keys (field names) from the object.

   keys = obj.Keys()

   ' Loop through the fields. For each, decode the field and its data from
   ' the given request object and store the data in the given object.

   for i = 0 to UBound(keys)
      ' Get the field name.

      fieldName = keys(i)

      ' Get the field data from the request object.

      fieldData = req(objectName & "_" & fieldName)

      ' Convert the field data from string to the type of the object field.
      
      fieldValue = Entity_ConvertType(fieldData, TypeName(obj(fieldName)))

      ' If the type conversion did not work (null was returned), then just
      ' store the data as-is.
      
      if IsNull(fieldValue) then
         fieldValue = fieldData
      end if

      ' Store the field in the given object.

      obj(fieldName) = fieldValue
   next
end sub

' Entity_WriteInternalAttributes() writes all attributes that start with "_" as
' hidden form fields.
'
sub Entity_WriteInternalAttributes(obj, prefix)
   dim keys
   dim i
   
   keys = obj.Keys()
   
   for i = 0 to UBound(keys)
      if Left(keys(i), 1) = "_" then
         Response.Write _
            "" & vbCrLf
      end if
   next 
end sub

' Entity_ConvertType() converts the given value to the given type.
'
function Entity_ConvertType(value, toType)
   dim result
   
   select case toType
      case "String"
         result = CStr(value)

      case "Date"
         result = CDate(value)

      case "Integer"
         result = CInt(value)

      case "Long"
         result = CLng(value)

      case "Double"
         result = CDbl(value)
   end select

   Entity_ConvertType = result
end function
%>





Page 6 of 11



Comment and Contribute

 


(Maximum characters: 1200). You have characters left.

 

 


Enterprise Development Update

Don't miss an article. Subscribe to our newsletter below.

By submitting your information, you agree that developer.com may send you developer offers via email, phone and text message, as well as email offers about other products and services that developer believes may be of interest to you. developer will process your information in accordance with the Quinstreet Privacy Policy.

Sitemap

×
We have made updates to our Privacy Policy to reflect the implementation of the General Data Protection Regulation.
Thanks for your registration, follow us on our social networks to keep up-to-date