| icDraftReference | input | character | Description for the draft instance. This parameter will have a value when creating a draft instance. |
| icDraftFormName | input | character | This parameter will have a value when creating a draft instance. |
| ilDraftIsShared | input | logical | This parameter will have a value when creating a draft instance. |
| oiReturnStatus | output | integer | Return status of the method. |
if icDraftReference = ""
then do:
if viCurrentDraftInstanceId = 0
and viTransactionLevel > 0
then do:
<M-1 run SetMessage
(input 'Transaction not closed.':U (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'S':U (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'BLF-418':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in Transaction>
assign oiReturnStatus = -3.
return.
end.
/* ================================================================= */
/* Release draft instance */
/* ================================================================= */
/*refs #600 when you press cancel on an opened draft instance, the draft instance should not go away,
so do not stop the instances within the transaction
I will leave this code commented untill after the code review.*/
/* 3.5.2007 uncomment code */
if viCurrentDraftInstanceId <> 0
then for each tInstances on error undo, throw:
assign vhDatabaseInst = ?
viDatabaseId = tInstances.tiInstanceNr
vcClassShortName = entry(1, tInstances.tcInsName).
if num-entries(vcClassShortName, "[") = 1
then assign vcUserDefinedContext = "".
else assign vcUserDefinedContext = entry(1, entry(2, vcClassShortName, "["), "]")
vcClassShortName = entry(1, vcClassShortName, "[").
<M-3 run BusinessClassActions
(input vcClassShortName (icClassShortname),
input 'STOP':U (icAction),
input no (ilSubtransaction),
input-output tInstances.tiOpenCount (biClassOpenCount),
input-output vhdatabaseInst (bhClassInstanceHandle),
input-output vidatabaseID (biClassInstanceId),
input '' (icDraftReference),
input vcUserDefinedContext (icUserDefinedContext),
output viFcReturnSuper (oiReturnStatus)) in Transaction>
end.
end.
else do:
/* ================================================================= */
/* Save all instances in the transation as a draft */
/* ================================================================= */
assign vlTransactionActive = yes
vcDraftClass = ""
vcDraftClassTemp = "".
for each tInstances by tInstances.tiPriority on error undo, throw:
assign vhDatabaseInst = ?
viDatabaseId = tInstances.tiInstanceNr
vlTransactionOpen = yes
vcClassShortName = entry(1, tInstances.tcInsName).
if num-entries(vcClassShortName, "[") = 1
then assign vcUserDefinedContext = "".
else assign vcUserDefinedContext = entry(1, entry(2, vcClassShortName, "["), "]")
vcClassShortName = entry(1, vcClassShortName, "[").
<M-4 run BusinessClassActions
(input vcClassShortName (icClassShortname),
input 'OPEN':U (icAction),
input no (ilSubtransaction),
input-output tInstances.tiOpenCount (biClassOpenCount),
input-output vhdatabaseInst (bhClassInstanceHandle),
input-output vidatabaseID (biClassInstanceId),
input '' (icDraftReference),
input vcUserDefinedContext (icUserDefinedContext),
output oiReturnStatus (oiReturnStatus)) in Transaction>
if oiReturnStatus < 0 then leave.
<M-5 run GetPublicData (input 'vcActivityCode':U (icDataList),
output vcFcMaskList (ocValues),
output viFcReturnSuper (oiReturnStatus)) in database>
if vcDraftClass = ""
or vcDraftActivity = ""
then Assign vcDraftClass = entry (1,tInstances.tcInsName)
vcDraftClassTemp = vcDraftClass.
if vcDraftActivity = ""
then vcDraftActivity = vcFcMaskList.
if viBSessionID = 0
then do:
<M-7 run GetPublicData (input 'viSessionId,viCompanyId':U (icDataList),
output vcFcMaskList (ocValues),
output viFcReturnSuper (oiReturnStatus)) in database>
assign viBSessionID = integer(entry(1,vcFcMaskList,chr(3)))
viCYID = integer(entry(2,vcFcMaskList,chr(3))).
end.
<M-2 run BusinessClassActions
(input vcClassShortName (icClassShortname),
input 'STORE':U (icAction),
input no (ilSubtransaction),
input-output tInstances.tiOpenCount (biClassOpenCount),
input-output vhdatabaseInst (bhClassInstanceHandle),
input-output vidatabaseID (biClassInstanceId),
input icDraftReference (icDraftReference),
input vcUserDefinedContext (icUserDefinedContext),
output oiReturnStatus (oiReturnStatus)) in Transaction>
if oiReturnStatus < 0 then leave.
Assign vcDraftClass = vcDraftClassTemp.
end.
/*get current user */
<M-6 run StartCacher (output vhFcComponent (ohCacher),
output viFcReturnSuper (oiReturnStatus)) in Transaction>
<M-8 run GetCharacterValueFromSession (input viBSessionID (iiSessionId),
input 'UserLogin':U (icDataItemName),
output vcUserLogin (ocValue),
output viFcReturnSuper (oiReturnStatus)) in Cacher>
assign vlTransactionActive = no
viTransactionID = viFcCurrentInstanceId
viCompanyId = viCYID
vcActivityCode = vcDraftActivity.
end.
<ANCESTOR-CODE>