project BLF > class Housekeeping > method ApplicationHousekeeping

Description

In this method, the housekeeping code specific to the application should be written.
Because of the fact that NO SESSION is available in the housekeeping component, you should use immediate database writes instead of using methods in business components.


Parameters


oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method Housekeeping.MainBlock


program code (program1/housekeeping.p)

<M-4 run WriteDirect
   (input  'fcDaemon':U (icTableName), 
    input  'for each fcDaemon':U (icPrepare), 
    input  'DaemonRunningProcesses,DaemonStatus':U (icFieldList), 
    input  'i,c':U (icFieldListDataTypes), 
    input  '0' + chr(2) + {&DAEMONSTATUS-INACTIVE} (icAbsolute), 
    input  '' (icIncremental), 
    input  {&TARGETPROCEDURE} (ihClass), 
    input  'Housekeeping':U (icUserLogin), 
    output viFcReturnSuper (oiReturnStatus)) in persistence>

assign vcWhere = "for each fcDaemonQueue where fcDaemonQueue.DaemonQueueStatus  = '":U
               + {&DAEMONQUEUESTATUS-INPROCESS}  + "'":U.
<M-2 run WriteDirect
   (input  'fcDaemonQueue':U (icTableName), 
    input  vcWhere (icPrepare), 
    input  'DaemonQueueLockedProcess,DaemonQueueStatus':U (icFieldList), 
    input  'i,c':U (icFieldListDataTypes), 
    input  '0' + chr(2) + {&DAEMONQUEUESTATUS-WAITING} (icAbsolute), 
    input  '' (icIncremental), 
    input  {&TARGETPROCEDURE} (ihClass), 
    input  'Housekeeping':U (icUserLogin), 
    output viFcReturnSuper (oiReturnStatus)) in persistence>

<M-3 run WriteDirect
   (input  'fcSession':U (icTableName), 
    input  'for each fcSession' (icPrepare), 
    input  '' (icFieldList), 
    input  '' (icFieldListDataTypes), 
    input  '' (icAbsolute), 
    input  '' (icIncremental), 
    input  {&TARGETPROCEDURE} (ihClass), 
    input  'Housekeeping':U (icUserLogin), 
    output viFcReturnSuper (oiReturnStatus)) in persistence>

assign vcWhere = "for each Numbr where Numbr.NumbrStatus = '":U
               + {&NUMBERSTATUS-CLAIMED} + "'":U.

<M-5 run WriteDirect
   (input  'Numbr':U (icTableName), 
    input  vcWhere (icPrepare), 
    input  'NumbrStatus':U (icFieldList), 
    input  'c' (icFieldListDataTypes), 
    input  {&NUMBERSTATUS-RELEASED} (icAbsolute), 
    input  '' (icIncremental), 
    input  {&TARGETPROCEDURE} (ihClass), 
    input  'HouseKeeping':U (icUserLogin), 
    output oiReturnStatus (oiReturnStatus)) in persistence>

/* Delete all cached data of API query procedures */
<M-42 run WriteDirect
   (input  'QueryCache' (icTableName), 
    input  'for each QueryCache' (icPrepare), 
    input  '' (icFieldList), 
    input  '' (icFieldListDataTypes), 
    input  '' (icAbsolute), 
    input  '' (icIncremental), 
    input  {&TARGETPROCEDURE} (ihClass), 
    input  'HouseKeeping':U (icUserLogin), 
    output oiReturnStatus (oiReturnStatus)) in persistence>

/* Delete outdated daemon executable links (will be created again when the daemon is started) */
vcmatch = (if opsys = "UNIX" then "D_*DAEMON" else "D_*DAEMON.EXE").
vcDLC = os-getenv("DLC").
file-info:file-name = vcDLC.
if file-info:file-type = ?
then do:
    vcDLC = search("promsgs":U).
    if opsys = "UNIX":U
    then vcDLC = replace(vcDLC,"/promsgs":U,"").
    else vcDLC = replace(vcDLC,"~\promsgs":U,"").
    file-info:file-name = vcDLC.
end.

if file-info:file-type begins "D"
then do:
    file-info:file-name = vcDLC + (if OPSYS = "UNIX":U then "/bin/_progres":U else "~\bin~\_progres.exe":U).
    vcFileVersion = string(file-info:file-mod-date) + string(file-info:file-mod-time).
    
    input stream sdlcdir from os-dir (vcDLC + "/bin").
    repeat on error undo, throw:
        import stream sdlcdir vc1 vc2 vc3.  /* filename fullname filetype */
        if vc1 matches vcmatch /* case insensitive match for all OS */
        then do:
            file-info:file-name = vc2.
            if vcFileVersion <> string(file-info:file-mod-date) + string(file-info:file-mod-time)
            then os-delete value(vc2).
        end.
    end.
end.

finally:
    input stream sdlcdir close.
end finally.