Controlling
transactions from a client
PowerBuilder clients can exercise explicit control of a transaction
on a COM+ server by using a variable of type OleTxnObject instead of
OLEObject to connect to the COM object.
Requires COM+ installation
The ConnectToNewObject call on an OleTxnObject fails if COM+ is
not installed on the client computer.
The OleTxnObject object, derived from the OLEObject object, provides
two additional functions (SetComplete and SetAbort) that enable the client
to participate in transaction control. When the client calls SetComplete,
the transaction is committed if no other participant in the transaction
has called SetAbort or otherwise failed. If the client calls SetAbort, the
transaction is always aborted.
Example
In this example, the clicked event on a button creates a variable of
type OleTxnObject, connects to a COM object on a server, and calls some
methods on the object. When all the methods have returned, the client
calls SetComplete and disconnects from the object.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
integer li_rc OleTxnObject lotxn_obj lotxn_obj = CREATE OleTxnObject li_rc = lotxn_obj.ConnectToNewObject("pbcom.n_test") IF li_rc <> 0 THEN Messagebox( "Connect Error", string(li_rc) ) HALT END IF lotxn_obj.f_dowork() lotxn_obj.f_domorework() lotxn_obj.SetComplete() lotxn_obj.DisconnectObject() |
This f_dowork function on the COM object on the server creates an
instance of the transaction context service and calls its
DisableCommit method to prevent the transaction from committing
prematurely between method calls. After completing some work, the function
calls SetAbort if the work was not successfully completed and
SetComplete if it was.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
TransactionServer txninfo_one integer li_rc li_rc = GetContextService( "TransactionServer", & txninfo_one ) txninfo_one.DisableCommit() // do some work and return a return code IF li_rc <> 0 THEN txninfo_one.SetAbort() return -1 ELSE txninfo_one.SetComplete() return 1 END IF |
The SetComplete call on the client commits the transaction if all of
the methods in the transaction called SetComplete or EnableCommit.