project BLF > class Persistence (other) > method LoadInstance

Description

Load instance data from the application database

PreCondition

This method is to be used by instance procedures only.


Parameters


ihClassinputhandle
iiInstanceIDinputintegerinstance ID
ihInstanceDatainputhandledataset with instance data
icClassNameinputcharacter
oiDraftInstanceIdoutputinteger
oiReturnStatusoutputintegerReturn 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.