The following example shows how you might synchronize DataWindows between a PowerBuilder client and an EAServer component. This example uses a stateless component.
Suppose the client has a window called w_employee that has buttons that allow the user to retrieve and update data. The Retrieve button on the client window has the following script:
// Global variable:
// connection myconnect
// Instance variable:
// uo_employee iuo_employee
blob lblb_data
long ll_rv
myconnect.CreateInstance(iuo_employee)
iuo_employee.RetrieveData(lblb_data)
ll_rv = dw_employee.SetFullState(lblb_data)
if ll_rv = -1 then
   MessageBox("Error", "SetFullState call failed!")
end if
The Update button on the client window has the following script:
blob lblb_data
long ll_rv
ll_rv = dw_employee.GetChanges(lblb_data)
if ll_rv = -1 then
   MessageBox("Error", "GetChanges call failed!")
else
   if iuo_employee.UpdateData(lblb_data) = 1 then &
      dw_employee.ResetUpdate()
end if
The server has an object called uo_employee that has the following functions:
RetrieveData
UpdateData
The uo_employee object has these instance variables:
protected TransactionServer ts protected DataStore ids_datastore
The Activate event for the uo_employee object instantiates the TransactionServer service. In addition, it connects to the database and creates the DataStore that will be used to access the database:
this.GetContextService("TransactionServer", ts)
SQLCA.DBMS="ODBC"
SQLCA.DBParm="ConnectString=
   'DSN=EAS Demo DB;UID=dba;PWD=sql',
   UseContextObject='Yes'"
CONNECT USING SQLCA;
IF SQLCA.SQLCode < 0 THEN
   //Handle the error
END IF
ids_datastore = CREATE datastore
ids_datastore.dataobject = "d_emplist"
ids_datastore.SetTransObject (SQLCA)
The RetrieveData function takes an argument called ablb_data, which is a Blob passed by reference. The function returns a Long value.
Here is the script for the RetrieveData function:
long ll_rv ids_datastore.Retrieve() ll_rv = ids_datastore.GetFullState(ablb_data) ts.SetComplete() return ll_rv
The UpdateData function takes an argument called ablb_data, which is a Blob passed by reference. The function returns a Long value.
Here is the script for the UpdateData function:
long ll_rv if ids_datastore.SetChanges(ablb_data) = 1 then ll_rv = ids_datastore.Update() end if if ll_rv = 1 then ts.SetComplete() else ts.SetAbort() end if return ll_rv
The Deactivate event for the uo_employee object destroys the DataStore and disconnects from the database:
DESTROY ids_datastore DISCONNECT USING SQLCA;