Description
Load instance data from the application database
PreCondition
This method is to be used by instance procedures only.
Parameters
ihClass | input | handle | |
iiInstanceID | input | integer | instance ID |
ihInstanceData | input | handle | dataset with instance data |
icClassName | input | character | |
oiDraftInstanceId | output | integer | |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
unused
program code (program1/other.p)
run SqlLoadInstanceBegin in {&TARGETPROCEDURE}
(input iiInstanceID,
input icClassName,
output viStatus,
output oiReturnStatus).
if oiReturnStatus < 0
then do:
<M-5 run SqlErrorMessage (input ihClass (ihClass),
output viFcReturnSuper (oiReturnStatus)) in other>
return.
end.
if get-bits(viStatus, 1, 1) <> 0
then do:
assign oiReturnStatus = -3
vcError = #T-12'Instance not found.':255(91)T-12#
vhPdatabaseInst = ihClass.
<M-8 run SetMessage (input vcError (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'D':U (icType),
input 1 (iiSeverity),
input '' (icRowid),
input 'BLF-361':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in database>
return.
end.
if get-bits(viStatus, 2, 1) <> 0
then do:
assign oiReturnStatus = -3
vcError = #T-14'Invalid instance number. Found data for business class '$2', but expected business class '$1'.':255(4394)T-14#
vhPdatabaseInst = ihClass.
<M-10 run SetMessage (input vcError (icMessage),
input icClassName + chr(2) + '(not available)':U (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'D':U (icType),
input 1 (iiSeverity),
input '' (icRowid),
input 'BLF-362':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in database>
return.
end.
CREATE tRaw. /* Just need one dummy row to store RAW field in by its handle. */
vhContext = BUFFER tRaw:BUFFER-FIELD("taContext":U):HANDLE.
ihInstanceData:EMPTY-DATASET().
SET-SIZE(vmContext) = viMaxLength.
do while true:
run SqlLoadInstanceNext in {&TARGETPROCEDURE}
(input vmContext,
input viMaxLength,
output viStatus,
output viEof,
output oiReturnStatus).
if oiReturnStatus < 0
then do:
<M-11 run SqlErrorMessage (input ihClass (ihClass),
output viFcReturnSuper (oiReturnStatus)) in other>
leave.
end.
viContextPos = 1.
viBuffer = GET-SHORT(vmContext, viContextPos).
DO WHILE viBuffer <> 0:
viBuffer = GET-SHORT(vmContext, viContextPos).
IF viBuffer <> 0 THEN /* 0 signals end of data */
DO:
IF viBuffer <> viPrevBuffer
THEN do:
assign vhBuffer = ihInstanceData:GET-BUFFER-HANDLE(viBuffer).
end.
viPrevBuffer = viBuffer.
viContextPos = viContextPos + 2. /* Move past the table number. */
viRawLength = GET-LONG(vmContext, viContextPos).
viContextPos = viContextPos + 4.
tRaw.taContext = GET-BYTES(vmContext, viContextPos, viRawLength).
viContextPos = viContextPos + viRawLength.
vhBuffer:BUFFER-CREATE().
vhBuffer:RAW-TRANSFER(FALSE, vhContext).
END.
END.
if viEof > 0
then leave.
END.
/*
if not vlFound
then do:
assign oiReturnStatus = -3
vcError = #T-13'Instance not found.':255(91)T-13#
vhPdatabaseInst = ihClass.
<M-4 run SetMessage (input vcError (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'D':U (icType),
input 1 (iiSeverity),
input '' (icRowid),
input 'BLF-360':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in database>
end.
*/
if oiReturnStatus < 0
then run SqlLoadInstanceEnd in {&TARGETPROCEDURE} (input 0, output viFcReturnSuper).
else do:
run SqlLoadInstanceEnd in {&TARGETPROCEDURE} (input 1, output oiReturnStatus).
if oiReturnStatus < 0
then do:
<M-6 run SqlErrorMessage (input ihClass (ihClass),
output viFcReturnSuper (oiReturnStatus)) in other>
end.
end.
delete tRaw.
SET-SIZE(vmContext) = 0.