project BLF > class Persistence (Progress) > method MarkAsExternalControl

Description

Mark a database object as in external control


Parameters


iiObjectIdinputintegerinternal ID
icExternalinputcharacterexternal 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).
    if vhExternalBuffer:locked
    then do:
        vhExternalQuery:query-close().
        assign oiReturnStatus = -3.
        return.
    end.
    if vhExternalBuffer:available
    then assign vhExternalBuffer::ExternalId = icExternal
                vlCreate = no.
    else do:
        vhExternalBuffer:buffer-create().
        assign vhExternalBuffer::DbObjectId = iiObjectId
               vhExternalBuffer::ExternalId = icExternal
               vlCreate = yes.
    end.
    publish "Logging.DatabaseAccess"
           ((if vlCreate then "create" else "update") + " fcExternalControl":U, vhExternalBuffer).
    vhExternalBuffer:buffer-release().
end.

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