Description
This is the method that contains the call to the specific method in the appropriate class to perform the request.
This method should be extended on the specific daemon level.
In order to have a proper logging of the errors/warnings you get from the business method that is used for processing the work, you need to fill in tPassMessages temp-table parameter, as a copy of tFcMessages from the called business component.
Parameters
iiDaemonQueueId | input | integer | ID of the daemon queue record that indicates the work that needs to be done. |
olSuccess | output | logical | Was the operation successful? |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
unused
program code (program/breportdaemonprocessor.p)
<ANCESTOR-CODE>
/* ================================================================= */
/* Convert DaemonQueue ID into Report Request ID. */
/* ================================================================= */
<Q-1 run GetDaemonQueueInfo (all) (Read) (NoCache)
(input iiDaemonQueueId, (DaemonQueueId)
output dataset tqGetDaemonQueueInfo) in BBaseDaemonQueue >
find first tqGetDaemonQueueInfo where tqGetDaemonQueueInfo.tiDaemonQueueId = iiDaemonQueueId no-error.
if not available tqGetDaemonQueueInfo
then do:
<M-36 run SetMessage
(input trim(#T-32'Daemon queue record not found with id $1.':255(998716609)T-32#) (icMessage),
input string(iiDaemonQueueId) (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'D' (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'BLF-359632':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
oiReturnStatus = -3.
return.
end.
/* ================================================================= */
/* Retrieve the entire report request. */
/* ================================================================= */
<I-3 {bFcStartAndOpenInstance
&CLASS = "BReportRequest"}>
<M-4 run apiGetRequest
(input integer (tqGetDaemonQueueInfo.tcDaemonQueueRef) (iiRequestID),
output dReportRQ (BReportRequest),
output viLocalReturn (oiReturnStatus)) in BReportRequest>
<I-5 {bFcCloseAndStopInstance
&CLASS = "BReportRequest"}>
if viLocalReturn <> 0
then oiReturnStatus = viLocalReturn.
if viLocalReturn < 0
then return.
find first tReportRQ where
tReportRQ.RptRequest_ID = int(tqGetDaemonQueueInfo.tcDaemonQueueRef)
no-error.
if not available tReportRQ
then do:
assign oiReturnStatus = -3.
return.
end.
/* ================================================================= */
/* Retrieve the Company to use. */
/* ================================================================= */
find first tReportRQ7Context where
tReportRQ7Context.tc_ParentRowid = tReportRQ.tc_Rowid and
tReportRQ7Context.RptRequestContextProperty = "CompanyCode"
no-error.
if available tReportRQ7Context
then vcCompanyCodeToUse = tReportRQ7Context.RptRequestContextValue.
if vcCompanyCodeToUse = ""
or vcCompanyCodeToUse = ?
or vcCompanyCodeToUse = vcCompanyCode
then viCompanyIdToUse = viCompanyId.
else do:
<Q-82 run CompanyByAll (all) (Read) (NoCache)
(input ?, (CompanyId)
input vcCompanyCodeToUse, (CompanyCode)
input ?, (CompanyIsActive)
output dataset tqCompanyByAll) in BCompany>
find first tqCompanyByAll no-error.
if not available tqCompanyByAll
then do:
<M-88 run SetMessage
(input trim(#T-97'Unknown Company':40(8912)T-97#) (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'blf-702156':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
assign oiReturnStatus = -3.
return.
end.
viCompanyIdToUse = tqCompanyByAll.tiCompany_ID.
end.
<M-93 run SwitchSessionCy
(input '' (icCompanyCode),
input viCompanyIdToUse (iiCompanyId),
output viLocalReturn (oiReturnStatus)) in BReportDaemonProcessor>
if viLocalReturn <> 0
then oiReturnStatus = viLocalReturn.
if viLocalReturn < 0
then return.
/* ================================================================= */
/* Resolve variables in report filter. */
/* ================================================================= */
<I-15 {bFcOpenInstance
&CLASS = "Session"}>
<M-17 run GetFilterVariables
(output tReportFilterVariable (tFilterVariable),
output viLocalReturn (oiReturnStatus)) in Session>
<I-18 {bFcCloseInstance
&CLASS = "Session"}>
if viLocalReturn <> 0
then oiReturnStatus = viLocalReturn.
if viLocalReturn < 0
then return.
for each tReportFilterVariable,
each tReportRQ2Filter where
tReportRQ2Filter.tc_ParentRowid = tReportRQ.tc_Rowid
on error undo, throw:
if index(tReportRQ2Filter.RptRequestFilterIniValue1,tReportFilterVariable.tcFilterVariableName) > 0
then tReportRQ2Filter.RptRequestFilterIniValue1 = replace(tReportRQ2Filter.RptRequestFilterIniValue1,
tReportFilterVariable.tcFilterVariableName,
tReportFilterVariable.tcFilterVariableValue).
if index(tReportRQ2Filter.RptRequestFilterIniValue2,tReportFilterVariable.tcFilterVariableName) > 0
then tReportRQ2Filter.RptRequestFilterIniValue2 = replace(tReportRQ2Filter.RptRequestFilterIniValue2,
tReportFilterVariable.tcFilterVariableName,
tReportFilterVariable.tcFilterVariableValue).
end.
empty temp-table tReportFilterVariable.
/* ================================================================= */
/* Run the report. */
/* ================================================================= */
empty temp-table tFilter.
empty temp-table tReportResultFieldCBF.
for each tReportRQ2Filter where tReportRQ2Filter.tc_ParentRowid = tReportRQ.tc_Rowid on error undo, throw:
create tFilter.
assign tFilter.tcBusinessFieldName = tReportRQ2Filter.RptRequestFilterBusField
tFilter.tcDataType = tReportRQ2Filter.RptRequestFilterDataType
tFilter.tcOperator = if tReportRQ2Filter.RptRequestFilterBusField matches "*_RANGE":U
then ">=":U
else tReportRQ2Filter.RptRequestFilterOperator
tFilter.tcParameterValue = tReportRQ2Filter.RptRequestFilterIniValue1.
if tReportRQ2Filter.RptRequestFilterBusField matches "*_RANGE":U
then do:
create tFilter.
assign tFilter.tcBusinessFieldName = tReportRQ2Filter.RptRequestFilterBusField
tFilter.tcDataType = tReportRQ2Filter.RptRequestFilterDataType
tFilter.tcOperator = "<=":U
tFilter.tcParameterValue = tReportRQ2Filter.RptRequestFilterIniValue2.
end.
end.
for each tReportRQ1CBF where tReportRQ1CBF.tc_ParentRowid = tReportRQ.tc_Rowid on error undo, throw:
create tReportResultFieldCBF.
assign tReportResultFieldCBF.tcResultField = tReportRQ1CBF.RptRequestResultField
tReportResultFieldCBF.tcCBF = tReportRQ1CBF.RptRequestCBF.
end.
<M-6 run BusinessClassActions
(input tReportRQ.tcBusComponentCode (icClassShortname),
input 'START+OPEN' (icAction),
input no (ilSubtransaction),
input-output vibreportOC (biClassOpenCount),
input-output vhbreportInst (bhClassInstanceHandle),
input-output vibreportID (biClassInstanceId),
input '' (icDraftReference),
input '' (icUserDefinedContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
<M-7 run ApiProcessReportLogic
(input tReportRQ.tcBusActivityCode (icReportName),
input tReportRQ.tcLngCode (icLanguageCode),
input tFilter (tFilter),
input tReportResultFieldCBF (tResultFieldToCBF),
output vhReportData (ozReportData),
output viLocalReturn (oiReturnStatus)) in breport>
<M-8 run BusinessClassActions
(input tReportRQ.tcBusComponentCode (icClassShortname),
input 'CLOSE+STOP' (icAction),
input no (ilSubtransaction),
input-output vibreportOC (biClassOpenCount),
input-output vhbreportInst (bhClassInstanceHandle),
input-output vibreportID (biClassInstanceId),
input '' (icDraftReference),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
if viLocalReturn <> 0
then oiReturnStatus = viLocalReturn.
if viLocalReturn < 0
then return.
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
/* ================================================================= */
/* Add extra table to report dataset. */
/* ================================================================= */
create tReportSetting.
assign tReportSetting.tcRptFileName = tReportRQ.RptRequestRptFileName
tReportSetting.tcRptDateFormat = tReportRQ.RptRequestDateFormat
tReportSetting.tcRptDateSeparator = tReportRQ.RptRequestDateSeparator
tReportSetting.tcRptTimeFormat = tReportRQ.RptRequestTimeFormat
tReportSetting.tcRptTimeSeparator = tReportRQ.RptRequestTimeSeparator
tReportSetting.tcRptDecimalPoint = tReportRQ.RptRequestDecimalPoint
tReportSetting.tiRptTCDecimals = tReportRQ.RptRequestTCDecimals
tReportSetting.tiRptFilterPrintMode = tReportRQ.RptRequestFilterPrintMode
tReportSetting.tlRptPagebreakMode = tReportRQ.RptRequestPagebreakMode
tReportSetting.tcRptSaveFolder = tReportRQ.RptRequestSaveFolder
tReportSetting.tcRptSaveFileName = tReportRQ.RptRequestSaveFileName
tReportSetting.tcRptMailSubject = tReportRQ.RptRequestMailSubject
tReportSetting.tcRptMailBody = tReportRQ.RptRequestMailBody
tReportSetting.tcRptMailTo = tReportRQ.RptRequestMailTo
tReportSetting.tcRptMailCC = tReportRQ.RptRequestMailCC
tReportSetting.tcRptMailBCC = tReportRQ.RptRequestMailBCC
tReportSetting.tcRptOutputFormat = tReportRQ.RptRequestOutputFormat
tReportSetting.tcRptPrinterName = tReportRQ.tcRptPrinterName
tReportSetting.tcGlobalSessionId = vcSocketGlobalSessionID.
/* get mail-from address */
if viUsrId <> 0
and viUsrId <> ?
then do:
<Q-14 run UserById (all) (Read) (NoCache)
(input viUsrId, (UsrId)
output dataset tqUserById) in BUser >
find first tqUserById no-error.
if available tqUserById
then tReportSetting.tcRptMailFrom = tqUserById.tcUsrMailAddress.
end.
/* resolve roles into e-mail addresses */
if can-find (first tReportRQ3Mail where tReportRQ3Mail.tc_ParentRowid = tReportRQ.tc_Rowid)
then do:
assign vcNoEMailUsers = "".
for each tReportRQ3Mail where tReportRQ3Mail.tc_ParentRowid = tReportRQ.tc_Rowid on error undo, throw:
<Q-10 run UserByRoleId (all) (Read) (NoCache)
(input tReportRQ3Mail.Role_ID, (RoleId)
input yes, (UsrIsActive)
input viCompanyId, (CompanyId)
output dataset tqUserByRoleId) in BUser >
for each tqUserByRoleId on error undo, throw:
if tqUserByRoleId.tcUsrMailAddress = "" or
tqUserByRoleId.tcUsrMailAddress = ?
then do:
if vcNoEMailUsers <> ""
then assign vcNoEMailUsers = vcNoEMailUsers + ", ".
assign vcNoEMailUsers = vcNoEMailUsers + tqUserByRoleId.tcUsrName.
next.
end.
case tReportRQ3Mail.RptRequestMailType:
when "TO"
then if not can-do(tReportSetting.tcRptMailTo, tqUserByRoleId.tcUsrMailAddress)
then do:
if tReportSetting.tcRptMailTo <> ""
then assign tReportSetting.tcRptMailTo = tReportSetting.tcRptMailTo + ",".
assign tReportSetting.tcRptMailTo = tReportSetting.tcRptMailTo + tqUserByRoleId.tcUsrMailAddress.
end.
when "CC"
then if not can-do(tReportSetting.tcRptMailCC, tqUserByRoleId.tcUsrMailAddress)
then do:
if tReportSetting.tcRptMailCC <> ""
then assign tReportSetting.tcRptMailCC = tReportSetting.tcRptMailCC + ",".
assign tReportSetting.tcRptMailCC = tReportSetting.tcRptMailCC + tqUserByRoleId.tcUsrMailAddress.
end.
when "BCC"
then if not can-do(tReportSetting.tcRptMailBCC, tqUserByRoleId.tcUsrMailAddress)
then do:
if tReportSetting.tcRptMailBCC <> ""
then assign tReportSetting.tcRptMailBCC = tReportSetting.tcRptMailBCC + ",".
assign tReportSetting.tcRptMailBCC = tReportSetting.tcRptMailBCC + tqUserByRoleId.tcUsrMailAddress.
end.
end case.
end.
end.
<Q-11 run UserByRoleId (Stop) in BUser >
if vcNoEMailUsers <> ""
then do:
<M-66 run SetMessage
(input trim(#T-47'The following users did not receive an e-mail because their user profile does not contain an e-mail address:':255(118996082)T-47#) (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'W' (icType),
input 4 (iiSeverity),
input '' (icRowid),
input 'BLF-677710':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
<M-44 run SetMessage
(input vcNoEMailUsers (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'W' (icType),
input 4 (iiSeverity),
input '' (icRowid),
input 'BLF-710182':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
assign oiReturnStatus = 1.
end.
end.
vhReportData:add-buffer (temp-table tReportSetting:default-buffer-handle).
vhReportData:write-xml ("memptr",vmReportData,?,?,?,true).
viSize = get-size(vmReportData).
set-size(vmSize) = 10.
put-string(vmSize,1) = string(viSize).
/* ================================================================= */
/* Connect to the .NET service and send back the data. */
/* ================================================================= */
assign vlReportSuccessfull = no.
create socket vhSocketDNS no-error.
if error-status:error or
error-status:num-messages > 0
then do:
assign vcFcMaskList = "".
do viFcCount1 = 1 to error-status:num-messages:
if viFcCount1 > 1
then assign vcFcMaskList = vcFcMaskList + chr(2).
assign vcFcMaskList = vcFcMaskList + error-status:get-message(viFcCount1).
end.
<M-23 run SetMessage
(input trim(#T-25'Failed to create socket object.':255(998716605)T-25#) (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'D' (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'BLF-668336':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
if vcFcMaskList <> ""
then do viFcCount1 = 1 to num-entries(vcFcMaskList, chr(2)):
<M-24 run SetMessage
(input entry(viFcCount1, vcFcMaskList, chr(2)) (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'D' (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'BLF-528994':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
end.
assign oiReturnStatus = -3
vlDaemonNeedsToEnd = true.
return.
end.
assign vlFcOk = vhSocketDNS:set-read-response-procedure("ReportResponse") no-error.
if not vlFcOk or
error-status:error or
error-status:num-messages > 0
then do:
assign vcFcMaskList = "".
do viFcCount1 = 1 to error-status:num-messages:
if viFcCount1 > 1
then assign vcFcMaskList = vcFcMaskList + chr(2).
assign vcFcMaskList = vcFcMaskList + error-status:get-message(viFcCount1).
end.
<M-26 run SetMessage
(input trim(#T-28'Failed to set read response procedure on socket object.':255(998716606)T-28#) (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'D' (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'BLF-817955':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
if vcFcMaskList <> ""
then do viFcCount1 = 1 to num-entries(vcFcMaskList, chr(2)):
<M-27 run SetMessage
(input entry(viFcCount1, vcFcMaskList, chr(2)) (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'D' (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'BLF-627060':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
end.
assign oiReturnStatus = -3
vlDaemonNeedsToEnd = true.
return.
end.
assign vlFcOk = vhSocketDNS:connect("-H " + vcSocketHost + " -S " + string(viSocketPort)) no-error.
if not vlFcOk or
error-status:error or
error-status:num-messages > 0
then do:
assign vcFcMaskList = "".
do viFcCount1 = 1 to error-status:num-messages:
if viFcCount1 > 1
then assign vcFcMaskList = vcFcMaskList + chr(2).
assign vcFcMaskList = vcFcMaskList + error-status:get-message(viFcCount1).
end.
<M-31 run SetMessage
(input trim(#T-29'The system failed to connect to report server $1 using port $2.':255(998716607)T-29#) (icMessage),
input vcSocketHost + chr(10) + string(viSocketPort) (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'D' (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'BLF-670911':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
if vcFcMaskList <> ""
then do viFcCount1 = 1 to num-entries(vcFcMaskList, chr(2)):
<M-30 run SetMessage
(input entry(viFcCount1, vcFcMaskList, chr(2)) (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'S' (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'BLF-372040':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
end.
assign oiReturnStatus = -3
vlDaemonNeedsToEnd = true.
return.
end.
assign vlFcOk = vhSocketDNS:write(vmSize, 1, 10) no-error.
if not vlFcOk or
error-status:error or
error-status:num-messages > 0
then do:
assign vcFcMaskList = "".
do viFcCount1 = 1 to error-status:num-messages:
if viFcCount1 > 1
then assign vcFcMaskList = vcFcMaskList + chr(2).
assign vcFcMaskList = vcFcMaskList + error-status:get-message(viFcCount1).
end.
<M-34 run SetMessage
(input trim(#T-30'The system failed to write to socket object.':255(998716608)T-30#) (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'S' (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'BLF-243401':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
if vcFcMaskList <> ""
then do viFcCount1 = 1 to num-entries(vcFcMaskList, chr(2)):
<M-33 run SetMessage
(input entry(viFcCount1, vcFcMaskList, chr(2)) (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'S' (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'BLF-668647':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
end.
assign oiReturnStatus = -3
vlDaemonNeedsToEnd = true.
return.
end.
assign viBytesWritten = 0
viStart = 1
vlWriteToSocketFailed = false.
do while viBytesWritten < viSize:
assign vlFcOk = vhSocketDNS:write(vmReportData, viStart, viSize - viBytesWritten) no-error.
if not vlFcOk or
error-status:error or
error-status:num-messages > 0
then do:
assign vlWriteToSocketFailed = true
vcFcMaskList = "".
do viFcCount1 = 1 to error-status:num-messages:
if viFcCount1 > 1
then assign vcFcMaskList = vcFcMaskList + chr(2).
assign vcFcMaskList = vcFcMaskList + error-status:get-message(viFcCount1).
end.
leave.
end.
assign viBytesWritten = viBytesWritten + vhSocketDNS:bytes-written
viStart = viBytesWritten + 1.
end.
if vlWriteToSocketFailed
then do:
<M-22 run SetMessage
(input trim(#T-31'The system failed to write to socket object.':255(998716608)T-31#) (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'S' (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'BLF-657468':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
if vcFcMaskList <> ""
then do viFcCount1 = 1 to num-entries(vcFcMaskList, chr(2)):
<M-35 run SetMessage
(input entry(viFcCount1, vcFcMaskList, chr(2)) (icMessage),
input '' (icArguments),
input '' (icFieldName),
input '' (icFieldValue),
input 'S' (icType),
input 3 (iiSeverity),
input '' (icRowid),
input 'BLF-300192':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
end.
assign oiReturnStatus = -3
vlDaemonNeedsToEnd = true
olSuccess = false.
end.
else do:
wait-for read-response of vhSocketDNS pause 30 * 60. /* Time-out = 30 minutes */
olSuccess = vlReportSuccessfull.
if not olSuccess
then assign oiReturnStatus = -3.
end.
finally:
/* ================================================================= */
/* Clean up. */
/* ================================================================= */
if vhSocketDNS <> ?
then do:
vhSocketDNS:disconnect().
delete object vhSocketDNS.
vhSocketDNS = ?.
end.
if vhReportData <> ? then delete object vhReportData.
set-size(vmReportData) = 0.
set-size(vmSize) = 0.
empty temp-table tReportResultFieldCBF.
empty temp-table tReportRQ.
empty temp-table tReportRQ1CBF.
empty temp-table tReportRQ2Filter.
empty temp-table tReportRQ3Mail.
empty temp-table tReportRQ4Custom0.
empty temp-table tReportRQ5Custom1.
empty temp-table tReportRQ6Custom2.
empty temp-table tReportRQ7Context.
empty temp-table tReportRQ8Schedule.
empty temp-table tReportSetting.
empty temp-table tqGetDaemonQueueInfo.
empty temp-table tqUserByRoleId.
end finally.