There are two posibillity to start transaction:

1. MQBegin - Queue-manager-coordinated global unit of work
2. MQPMO_SYNCPOINT - Queue-manager-coordinated local unit of work

MQBegin is trivial, so I will not explain it.

For MQPMO_SYNCPOINT you have to do something like

GetMsgOptions.Options:=GetMsgOptions.Options + MQPMO_SYNCPOINT;

Where  GetMsgOptions you use like:

MQGET ( Hconn, Hobj, @MsgDesc, @GetMsgOptions, BufferLength, @Buffer^, @DataLength, @intCompcode, @intReason);

In both cases you will use MQCMIT, and MQBACK to commit or reverse transaction back.

Taken from here.