project BLF > class Report Component > method ApiGetReportStructure

Description

Generic method for running a report.


Parameters


icReportNameinputcharactername of the report (also name of the query or method)
ozReportDataoutputdataset-handle
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program3/breport.p)

empty temp-table tFilter.
<M-1 run GetReportLabels
   (input  icReportName (icReportName), 
    input  current-language (icLanguageCode), 
    input  tFilter (tFilter), 
    output tqHeader (tqHeader), 
    output tqFilter (tqFilter), 
    output tqText (tqText), 
    output viFcReturnSuper (oiReturnStatus)) in breport>

/* ================================================================= */
/* 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-44'Printed by &1 from domain &2, entity &3 on &4':255(749396567)T-44#,
                                       tqHeader.tcUser,
                                       tqHeader.tcDomainCode,
                                       tqHeader.tcCompanyCode,
                                       <M-11 DisplayDate  (input  today (itDate)) in breport> + " " + string(time,"HH:MM")).
end.

if  search("query/api":U + lc(icReportName) + ".r":U) = ?
and search("query/api":U + lc(icReportName) + ".p":U) = ?
then do:
    /* Report is based on a method */
    run gipr_GetReportResultSet in {&TARGETPROCEDURE}
       (input icReportName,
        output vhReportDataset).
    if vhReportDataset = ?
    then do:
        <M-89 run SetMessage
           (input  #T-78'A report with this name ($1) was not found.':255(668354677)T-78# (icMessage), 
            input  icReportName (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'E' (icType), 
            input  3 (iiSeverity), 
            input  '' (icRowid), 
            input  'blf-460846':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in breport>
        oiReturnStatus = -3.
        return.
    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
        then ozReportData:set-buffers(vhBufferTo).
        else ozReportData:add-buffer(vhBufferTo).
    end.
end.
else do:
    /* Report is based on a query */
    create tFilter.
    assign tFilter.tcBusinessFieldName = "getReportStructure".
    release tFilter.
    
    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).

    empty temp-table tFilter.
    
    vhBufferFrom = temp-table tqHeader:handle.
    vhBufferFrom:schema-marshal = "FULL".
    create buffer vhb1 for table vhBufferFrom in widget-pool "non-persistent".

    vhBufferFrom = temp-table tqFilter:handle.
    vhBufferFrom:schema-marshal = "FULL".
    create buffer vhb2 for table vhBufferFrom in widget-pool "non-persistent".

    vhBufferFrom = temp-table tqText:handle.
    vhBufferFrom:schema-marshal = "FULL".
    create buffer vhb3 for table vhBufferFrom in widget-pool "non-persistent".

    vhBufferFrom = vhReportDataset:get-buffer-handle(1).
    vhBufferFrom:table-handle:schema-marshal = "FULL".
    create buffer vhb4 for table vhBufferFrom in widget-pool "non-persistent".

    ozReportData:set-buffers(vhb1,vhb2,vhb3,vhb4).
end.