Article ID: 183315 - Last Review: March 14, 2005 - Revision: 2.2 How To Write and Validate a Custom Business Object with RDSThis article was previously published under Q183315 On This PageSUMMARY
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).
MORE INFORMATION
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.
Method 1 - SumInt()SumInt() tests if the Business Object can be created.This is a simple method that returns the sum of two integers you provide as arguments. You would use this method to confirm that the business object can be created correctly from either the local or the remote client. If it fails, then either the business object is not correctly registered through Regsvr32.exe, or additional "safe for..." registry entries may be required on the server or the client.
Method 2 - ReturnRSValue()ReturnRSValue() tests if the Recordset can be opened.This method verifies that the connection and query information you are providing to the business object is correct. It will open but not return an ADO Recordset. It does return an array of variants for the first record in the recordset obtained by the GetRows method. If this is successful, then you know the Recordset you are requesting can be created on the server, which helps isolate any difficulty from an inability to receive it on the client. Following is some sample code for the ReturnRSValue method:
Method 3 - ReturnRS()ReturnRS() tests if a Recordset can be returned.This method returns the recordset that ReturnRSValue() opened. This is actually an archetype method for a business object, and equivalent to the RDSServer.DataFactory's Query() method. However, because you are implementing this method yourself, you can take advantage of the full ADO Object model, such as using the Command object to open a parameterized stored procedure. The DataFactory would not be able to do this as it just creates a standalone Recordset object. However, you should open the exact same kind of recordset in ReturnRSValue() as ReturnRS(). Following is some sample code for this method: Method 4 - EnhancedSubmit()EnhancedSubmit() sends changes back to the DataStore.This method accepts a recordset and uses it to re-open a connection to the underlying DataStore and submit, in batch, any of the changes you may have made to that recordset. For any records that were not posted to the DataStore, it provides details indicating why the failure may have occurred. It also returns a second recordset that contains just the records that failed to be posted to the DataStore. This is actually an archetype method for a business object, and is a superset of the functionality found in the SubmitChanges() method of the RDS.DataControl and RDSServer.DataFactory. Note that the method checks for the occurrence of error 3617, an undocumented RDS error. This may, depending upon the development environment you use, come back as either 0x80040E21 or -2147217887. Following is some sample code for this method: General Diagnosis and Debugging TipsUsing a Local ClientWhen you write your client, you will not be able to step into the business object if RDS is used over HTTP to invoke it. You should consider the advantages of writing a local client which just instantiates the business object independent of RDS. This is easily done for Visual Basic for Applications, C++, or Java; however, if you are using VBScript, you should consider writing a Visual Basic Local Client to get the same effect.This lets you validate the functionality of your business object, and debug any issues that might be there. Especially for Visual Basic-based business objects, as the compilation doesn't always catch syntax errors that the more rigorous C++ or Java Compilers would prevent. Whatever methods the remote client using RDS invokes, you should also invoke with your local client to ensure the validation of the code within the business object. However, there will be some differences in behavior with a local client. For example, the recordset MarshalOptions property will have no effect in a local client. Consider this code: REFERENCES
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:
183609
(http://support.microsoft.com/kb/183609/EN-US/
)
FILE: Rdsvb.exe Demonstrates How to Use RDS with Visual Basic
To see another example of conflict resolution, please see the following
article in the Microsoft Knowledge Base:
177720
(http://support.microsoft.com/kb/177720/EN-US/
)
FILE: Rdsensub.exe with RDS Conflict Resolution Sample APPLIES TO
| Article Translations
|

Back to the top
