HOWTO: Write and Validate a Custom Business Object with RDSID: Q183315
|
This article describes how to build, debug, and validate a custom business object for use with the Remote Data Service (RDS). The sample code is written in Visual Basic, however, the techniques demonstrated are valid regardless of the actual language you use to implement the business object (if the language can generate an ActiveX DLL).
The RDSServer.DataFactory business object provided by RDS has four methods.
However, two are typically found in any given business object: the Query
method, which returns a recordset, and the SubmitChanges method, which
processes and attempts to post any changes made to that recordset. Your
business object will likely need the equivalent of these two methods. In
addition, two others will be handy for validating both the functionality
and installation of your custom business object.
Public Function SumInt(FirstInt As Integer, _
SecondInt As Integer) As Integer
SumInt = FirstInt + SecondInt
End Function
\HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Services
\W3SVC
\Parameters
\ADCLaunch
Public Function ReturnRSValue(strConnect As String, _
strQuery As String) As Variant
Dim adoCon1 As New ADODB.Connection
Dim adoRs1 As New ADODB.Recordset
Dim x As Variant ' Variant array to send to the Client
' Open a connection to the Database.
adoCon1.Open strConnect
' Open an ADO Recordset.
adoRs1.Open strQuery, adoCon1, adOpenStatic, adLockBatchOptimistic
' Fill the Variant array using GetRows.
x = adoRs1.GetRows(adGetRowsRest, adBookmarkFirst)
' Return the Variant array to the Client.
ReturnRSValue = x
End Function<BR/>
Public Function ReturnRS(strConnect As String, _
strQuery As String) As ADODB.Recordset
Dim adoCon1 As New ADODB.Connection
Dim adoRs1 As New ADODB.Recordset
' Set the CursorLocation to adUseClient to return an
' ADORecordset to an RDS DataControl.
adoCon1.CursorLocation = adUseClient
' Open ADO Connection with passed in connect string.
adoCon1.Open strConnect
' Open ADO Recordset with passed in SQL string.
adoRs1.Open strQuery, adoCon1, adOpenKeyset, adLockBatchOptimistic
' Return ADO Recordset object to Client.
' (Returns the actual recordset not just a pointer to it).
Set ReturnRS = adoRs1
' Can not close the ADO Recordset object here,
' but it can be disassociated.
Set adoRs1.ActiveConnection = Nothing
' Close ADO Connection object.
adoCon1.Close
End Function
Public Function EnhancedSubmit(strConnect As String, _
rs As ADODB.Recordset, _
nPosted As Integer, _
vStatus() As Variant)
Dim i As Integer
Dim s As String
dim nConflict as integer
Dim r As New ADODB.Recordset
On Error GoTo ErrCond
s = ""
nPosted = 0
nConflict = 0
' Re-establish connection, submit changes &
' count # affected records
r.Open rs, strConnect
r.UpdateBatch adAffectAll ' Send in modifications
r.Filter = adFilterAffectedRecords '
nPosted = rs.RecordCount
' Determine if there are any conflicts and what type...
ReDim vStatus(r.RecordCount)
i = 0
r.MoveFirst
While r.EOF = False
vStatus(i) = r.Fields(0).value & ": "
CheckStatus r.status, vStatus(i)
' Only report back errors, not accepted or unmodified recs(!)
If (r.status <> adRecOK) And (r.status <> adRecUnmodified) Then
If Len(s) > 0 Then s = s & vbCrLf
s = s & vStatus(i)
nConflict = nConflict + 1
End If
r.MoveNext
i = i + 1
Wend
r.Close
Set r = Nothing
' Set message to return to client
If Len(s) = 0 Then
s = s & "Success! " & Str(nPosted) & " Records Posted."
Else
s = s & vbCrLf & _
"Attempted to Post " & Str(nPosted) & " Records, " & _
Str(nConflict) & " Conflicts Encountered(!)"
End If
EnhancedSubmit = s
Exit Function
ErrCond:
Select Case Err.Number
Case -2147217887 ' Raised when ALL records conflict
s = "Conflicts Occurred in UpdateBatch!"
Resume Next
Case Else
Test4_EnhancedSubmit = "FAILURE " & Str(Err.Number) & _
"--" & Err.Description
End Select
End Function
rs.MarshalOptions = adMarshalModifiedOnly
Q176562 FILE: Clsidvw.exe: OLE/Createable Objects Registry Diagnostic
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\
ADCLaunch\[YourProgIDGoesHere]]
;RDSEnSub.EnhancedSubmit safe for scripting and initialization
[HKEY_CLASSES_ROOT\CLSID\{[Your CLSID Goes Here]}\Implemented
Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}]
[HKEY_CLASSES_ROOT\CLSID\{[Your CLSID Goes Here]}\Implemented
Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}]
The techniques in this article are demonstrated by the RDS* Series of
Samples. They demonstrate the three techniques for returning data in
different languages/development environments, but also include a
comprehensive business object, as well as a local and remote client for
testing and validating that object. The current list of samples available follows:
QNumber Title
------- -----------------------------------------------------------
Q183609 FILE: Rdsvb.exe Demonstrates How to Use RDS with Visual Basic
Q176562 FILE: Clsidvw.exe OLE/Createable Objects Registry Diagnostic
Q177720 FILE: Rdsensub.exe with RDS Conflict Resolution Sample
Additional query words: kbdse kbcrossref
Keywords : kbRDS150 kbRDS200
Version : WINDOWS:1.5
Platform : WINDOWS
Issue type : kbhowto
Last Reviewed: January 30, 1999