SharedObjectGet
PowerScript function
Description
Gets a reference to a shared object instance.
Syntax
|
1 |
SharedObjectGet ( instancename , objectinstance ) |
|
Argument |
Description |
|---|---|
|
instancename |
The name of a shared object instance to which you want to |
|
objectinstance |
An object variable of type PowerObject in which you want |
Return value
ErrorReturn. Returns one of the following values:
-
Success! — The function succeeded
-
SharedObjectCreateInstanceError! — The local reference to the
shared object could not be created -
SharedObjectNotExistsError! — The instance name has not been
registered
Usage
SharedObjectGet retrieves a reference to an object that was created
with SharedObjectRegister.
You can use a shared object on a PowerBuilder client to simulate an
asynchronous call to the server. The main thread on the client makes an
asynchronous call to a function on the shared object, passing it a
callback object that is notified when processing has finished on the
server. The method on the shared object makes a synchronous call to the
server component method that performs processing. Since the shared object
is running in a separate thread on the client, the main thread on the
client can proceed with other work while the process runs on the
server.
Examples
This example shows how you might use a shared object to make an
asynchronous request against a server component method and return data
back to a client application window. The client has a Retrieve button on a
window, a SetDW function, a shared object, and a callback handler. The
component deployed to the server retrieves employee information from a
database.
The Retrieve button on the window creates a shared object that
communicates with the server as well as an instance of a callback
handler:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// instance variables // uo_sharedobject iuo_sharedobject // uo_callback iuo_callback long ll_rv SharedObjectRegister("uo_sharedobject","myshare") SharedObjectGet("myshare",iuo_sharedobject) iuo_callback = CREATE uo_callback // Pass a reference to the window to // the callback object iuo_callback.passobject (parent) iuo_sharedobject.post retrievedata(iuo_callback) |
The SetDW function applies the contents of the DataWindow blob
returned from the server component to a DataWindow control in the
window:
|
1 2 3 4 5 6 7 8 |
long ll_rv ll_rv = dw_employee.SetFullState(ablb_data) if ll_rv = -1 then MessageBox("Error", "SetFullState call failed!") end if return ll_rv |
The Constructor event of the shared object uses a custom Connection
object called n_jagclnt_connect to connect to the server. Then it creates
an instance of the server component:
|
1 2 3 4 5 6 7 8 9 |
// Instance variables // uo_employee iuo_employee // n_jagclnt_connect myconnect Constructor event long ll_rc myconnect = create n_jagclnt_connect ll_rc = myconnect.ConnectToServer() ll_rv = myconnect.CreateInstance(iuo_employee, & "uo_employee") |
RetrieveData
The shared object has a single function called that makes a
synchronous call to the RetrieveData function on the server
component.
When the function completes processing, it calls the Notify function
asynchronously on the callback object, posting it to the DataWindow blob
returned from the server component:
|
1 2 3 4 5 |
blob lblb_data long ll_rv ll_rv = iuo_employee.retrievedata(lblb_data) auo_callback.post notify(lblb_data) return ll_rv |
When the server component has finished processing, the shared object
notifies a user object called uo_callback, which in turns notifies the
w_employee window. The uo_callback object has two functions, Notify and
PassObject.The Notify function calls a function called SetDW on the
w_employee window, passing it the DataWindow blob returned from the server
component:
|
1 2 3 4 5 6 |
long ll_rv ll_rv = iw_employee.setdw(ablb_data) if ll_rv = -1 then MessageBox("Error", "SetDW call failed!") end if return ll_rv |
The callback handler’s PassObject function caches a reference to the
w_employee window in the iw_employee instance variable. The function takes
the argument aw_employee, which is of type w_employee, and returns a long
value:
|
1 2 |
iw_employee = aw_employee return 1 |
The server component is a PowerBuilder user object called
uo_employee. The uo_employee object has a function called RetrieveData
that uses a DataStore to retrieve employee rows from the database:
|
1 2 3 4 5 6 7 8 |
// instance variables // protected TransactionServer txnsrv // protected DataStore ids_datastore long ll_rv ll_rv = ids_datastore.Retrieve() ll_rv = ids_datastore.GetFullState(ablb_data) txnsrv.SetComplete() return ll_rv |
See also
GetFullState and SetFullState method for DataWindows in the section called “GetFullState” in DataWindow Reference and
the section called “SetFullState” in DataWindow Reference.