project BLF > class Persistence (Progress) > method DeleteAsExternalControl

Description

Mark a database object as no longer in external control


Parameters


iiObjectIdinputintegerinternal ID
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program1/progress.p)

do transaction on error undo, throw:

    if not (valid-handle(vhExternalQuery) and
            viExternalUID = vhExternalQuery:unique-id)
    then do:
        create buffer vhExternalBuffer for table "fcExternalControl":U in widget-pool "persistent".
        create query vhExternalQuery in widget-pool "persistent".
        vhExternalQuery:forward-only = yes.
        vhExternalQuery:set-buffers(vhExternalBuffer).
        vhExternalQuery:private-data = "Persistent".    /* do not ever delete this query */
        viExternalUID = vhExternalQuery:unique-id.
    end.
    vhExternalQuery:query-prepare
     ("for each fcExternalControl where fcExternalControl.DbObjectId = ":U +
      string(iiObjectId)).
    vhExternalQuery:query-open().
    vhExternalQuery:get-first(exclusive-lock, no-wait).
    
    do while vhExternalBuffer:locked:
    
        viLockCount = viLockCount + 1.
        if viLockCount > 5
        then do:
            vhExternalQuery:query-close().
            oiReturnStatus = -3.
            return.
        end.
    
        pause 3 no-message.
        vhExternalQuery:get-current(exclusive-lock, no-wait).
    end.
    
    if vhExternalBuffer:available
    then do:
        publish "Logging.DatabaseAccess"
               ("delete fcExternalControl":U, vhExternalBuffer).
        vhExternalBuffer:buffer-delete().
    end.
    else assign oiReturnStatus = -3.
end.

finally:
    if vhExternalQuery <> ? then vhExternalQuery:query-close().
end finally.