project BLF > class Report Component > method ApiProcessReportLogic

Description

Generic method for running a report.


Parameters


icReportNameinputcharactername of the report (also name of the query or method)
icLanguageCodeinputcharacterreport language
tFilterinputtemp-table
tResultFieldToCBFinputtemp-table
ozReportDataoutputdataset-handle
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method BGenericReportAdapter.openReport
method BReportDaemonProcessor.PerformWorkItem
method breport.ProcessReportLogic


program code (program3/breport.p)

if oiReturnStatus = 0
then oiReturnStatus = -98.

if icLanguageCode = current-language
then assign vcCurrentLanguage = ?.
else assign vcCurrentLanguage = current-language
            current-language  = icLanguageCode.

if  search("query/api":U + lc(icReportName) + ".r":U) = ?
and search("query/api":U + lc(icReportName) + ".p":U) = ?
then do:
    assign vlQueryBased = false.
    
    /* ================================================================= */
    /* Report is based on a method.                                      */
    /* ================================================================= */

    /* assign a value to filter fields */
    <I-1 {bFcRun
            &PARAMETERS = "output viFcReturnSuper"
            &PROCEDURE  = "gipr_SetDataitemsBasedOnFilter"}>
    if viFcReturnSuper <> 0
    then oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then return.

    run gipr_GetReportResultSet in {&TARGETPROCEDURE}
       (input icReportName,
        output vhReportDataset).
    run value(icReportName) in {&TARGETPROCEDURE}
       (input icLanguageCode,
        input dataset tFilter,
        output dataset-handle vhReportDataset by-reference,
        output viFcReturnSuper).
    if viFcReturnSuper <> 0
    then oiReturnStatus = viFcReturnSuper.
    /*yns
      Do not return, this causes an error in the .Net open client layer
    if viFcReturnSuper < 0
    then return.*/
end.
else do:
    assign vlQueryBased = true.
    
    /* ================================================================= */
    /* Report is based on a query.                                       */
    /* ================================================================= */
    <M-2 run GetReportLabels
       (input  icReportName (icReportName), 
        input  icLanguageCode (icLanguageCode), 
        input  tFilter (tFilter), 
        output tqHeader (tqHeader), 
        output tqFilter (tqFilter), 
        output tqText (tqText), 
        output viFcReturnSuper (oiReturnStatus)) in breport>
    if viFcReturnSuper <> 0
    then oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then return.

    run value("query/api":U + lc(icReportName) + ".p":U)
       (input {&TARGETPROCEDURE},
        input viSessionID,
        input dataset tFilter,
        output dataset-handle vhReportDataset, /*ByReference does not work here*/
        output viFcReturnSuper).
    if viFcReturnSuper <> 0
    then oiReturnStatus = viFcReturnSuper.    
    if viFcReturnSuper < 0
    then return.
end.

<M-3 run GetSelectedCustomFields
   (input-output vhReportDataset by-reference (bzResultDataSet), 
    output viFcReturnSuper (oiReturnStatus)) in breport>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.    
if viFcReturnSuper < 0
then return.

if vlQueryBased
then do:
    assign vhBufferFrom                             = dataset tqFilter:get-buffer-handle(1)
           vhBufferFrom:table-handle:schema-marshal = "FULL".
           
    create buffer vhBufferTo for table vhBufferFrom:table-handle in widget-pool "non-persistent".
    ozReportData:set-buffers(vhBufferTo).
    
    assign vhBufferFrom                             = dataset tqHeader:get-buffer-handle(1)
           vhBufferFrom:table-handle:schema-marshal = "FULL".
           
    create buffer vhBufferTo for table vhBufferFrom:table-handle in widget-pool "non-persistent".
    ozReportData:add-buffer(vhBufferTo).
    
    assign vhBufferFrom                             = dataset tqText:get-buffer-handle(1)
           vhBufferFrom:table-handle:schema-marshal = "FULL".
           
    create buffer vhBufferTo for table vhBufferFrom:table-handle in widget-pool "non-persistent".
    ozReportData:add-buffer(vhBufferTo).
end.

do viFcCount1 = 1 to vhReportDataset:num-buffers:
    vhBufferFrom = vhReportDataset:get-buffer-handle(viFcCount1).
    vhBufferFrom:table-handle:schema-marshal = "FULL":U.
    create buffer vhBufferTo for table vhBufferFrom:table-handle in widget-pool "non-persistent".
    if viFcCount1 = 1 and
       not vlQueryBased
    then ozReportData:set-buffers(vhBufferTo).
    else ozReportData:add-buffer(vhBufferTo).
end.

if vcCurrentLanguage <> ?
then assign current-language = vcCurrentLanguage.

/* ================================================================= */
/* BLF-3657: add execution info                                      */
/* ================================================================= */
find first tqHeader no-error.
if available tqHeader
then do:
    create tqText.
    assign tqText.tcCode = "EXECUTEINFO"
           tqText.tcText = substitute (#T-79'Printed by &1 from domain &2, entity &3 on &4':255(749396567)T-79#,
                                       tqHeader.tcUser,
                                       tqHeader.tcDomainCode,
                                       tqHeader.tcCompanyCode,
                                       <M-56 DisplayDate  (input  today (itDate)) in breport> + " " + string(time,"HH:MM")).
end.

if oiReturnStatus = -98
then oiReturnStatus = 0.