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
| oiReturnStatus | output | integer | Return status of the method. |
Internal usage
BLF
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.