Defining a service class for PowerBuilder components
To create and register a service class for PowerBuilder
components:
-
In the PBL that contains the DataWindow
object for the server component, define one or more PowerBuilder
custom class user objects. -
In each custom class user object, define one or
more user-defined events. The event signatures must match one of
these (all these events return a long):-
DBError
(long sqldbcode, string sqlerrtext, string sqlsyntax, DWBuffer buffer,
long row, DataStore ds) -
HTMLContextApplied (string action, DataStore ds)
-
RetrieveEnd (long rowcount, DataStore ds)
-
RetrieveStart (DataStore ds)
-
SQLPreview (SQLPreviewFunction request, SQLPreviewType sqltype,
string sqlsyntax, DWBuffer buffer, long row, DataStore ds) -
UpdateEnd (long rowsinserted, long rowsupdated,
long rowsdeleted, DataStore ds) -
UpdateStart (DataStore ds)
The arguments are the same as those documented for the similarly
named DataWindow events in the DataWindow Reference,
with the exception of the additional DataStore argument, which gives
the user object access to the Web DataWindow data. -
-
In the event script, use return codes to specify
whether the server component should cancel the event.The return codes are also the same as those documented in
the DataWindow Reference. Any of the service
classes that implements the event can specify that the event be
canceled. -
Register the service classes for the component.
There are two ways to make the user object available as a
service class:-
For any component in EAServer, call the SetServerServiceClasses method
in the Web page template’s server-side script:1dwGen.SetServerServiceClasses1("uo_update_validate;uo_retrieve_process"); -
For a custom component in EAServer,
add this property in EAServer Manager:1com.sybase.datawindow.serverServiceClassesSet its value to the list of user object names, with names
separated by semicolons. For example:1uo_update_validate;uo_retrieve_process
-
Example
Suppose that you want to check that data did not exceed a
budgeted total before it was updated in the database. You might
set up a service class that implements the UpdateStart event.
In the custom class user object in PowerBuilder, select Insert>Event
and declare a new event called UpdateStart that returns a long and
has one argument of type DataStore called ds:
|
1 |
UpdateStart (DataStore ds) returns long |
This script for the UpdateStart event has a DataStore that
retrieves data from a budget table and compares it to the component’s
data:
|
1 |
DataStore ds_budget<br>double darray[], total<br>long ll_upper<br>integer i<br> <br>ds_budget = CREATE datastore<br>ds_budget.DataObject = "d_budget"<br>ds_budget.SetTransObject(...)<br>ds_budget.Retrieve( )<br> <br>// Get data to be validateddarray[] = ds.Object.expenses.Primary<br>// Add up values in darray<br>ll_upper = UpperBound(darray)<br> <br>FOR i = 1 to ll_upper<br> total = total + darray[i]<br>NEXT<br>IF ds_budget.Object.cf_expense_total < total THEN<br> RETURN 1<br>END IF |