project BLF > class BResource > method GetReportCBF

Description

Return a list of user-defined fields available on a report and allow to link each to a custom field in the report resultset.
This method should only be used on reports designed in QRF, not on reports designed in Crystal Reports, as this information will be stored in the report variant for those reports. Reports in QRF do not have a report variant.


Parameters


iiResourceIdinputinteger
ovBResourceoutputdataset
tReportCBFoutputtemp-table
ocReportLabeloutputcharacter
ocReportCustomFieldsoutputcharacter
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program1/bresource.p)

empty temp-table tReportCBF.

<M-45 run DataLoad
   (input  '' (icRowids), 
    input  string(iiResourceId) (icPkeys), 
    input  '' (icObjectIds), 
    input  '' (icFreeform), 
    input  no (ilKeepPrevious), 
    output viFcReturnSuper (oiReturnStatus)) in BResource>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.

<Q-37 run ResourceLabels (all) (Read) (NoCache)
   (input iiResourceId, (ResourceId)
    output dataset tqResourceLabels) in BResource>
find first tqResourceLabels where tqResourceLabels.tiResource_ID = iiResourceId no-error.
if available tqResourceLabels
then do:
    ocReportLabel = tqResourceLabels.tcBusComponentCode + "." + tqResourceLabels.tcBusActivityCode.
    
    <M-66 run BusinessClassActions
       (input  tqResourceLabels.tcBusComponentCode (icClassShortname), 
        input  'START+OPEN' (icAction), 
        input  no (ilSubtransaction), 
        input-output vibreport9ID (biClassOpenCount), 
        input-output vhbreport9Inst (bhClassInstanceHandle), 
        input-output vibreport9OC (biClassInstanceId), 
        input  '' (icDraftReference), 
        input  '' (icUserDefinedContext), 
        output viFcReturnSuper (oiReturnStatus)) in BResource>
    if viFcReturnSuper <> 0
    then oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then return.
    
    <M-98 run GetTableCustomFields
       (output tReportTableCustomField (tTableCustomField), 
        output viFcReturnSuper (oiReturnStatus)) in breport>
    
    if viFcReturnSuper >= 0
    then do:
        <M-3 run GetBusinessFields
           (input  tqResourceLabels.tcBusActivityCode (icReference), 
            output tBusinessFields (tBusinessFields), 
            output tCustomRelation (tCustomRelation), 
            output viFcReturnSuper (oiReturnStatus)) in breport>
    end.
    
    <M-38 run BusinessClassActions
       (input  tqResourceLabels.tcBusComponentCode (icClassShortname), 
        input  'CLOSE+STOP' (icAction), 
        input  no (ilSubtransaction), 
        input-output vibreport9ID (biClassOpenCount), 
        input-output vhbreport9Inst (bhClassInstanceHandle), 
        input-output vibreport9OC (biClassInstanceId), 
        input  '' (icDraftReference), 
        input  '' (icUserDefinedContext), 
        output viFcCount5 (oiReturnStatus)) in BResource>    
    if viFcReturnSuper <> 0
    then oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then return.
    
    for each tBusinessFields where tBusinessFields.tcFcFieldType = "B" on error undo, throw:
        if num-entries (tBusinessFields.tcFcFieldName,".") = 2
        then if entry (2,tBusinessFields.tcFcFieldName,".") begins "CustomShort"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "CustomCombo"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "CustomLong"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "CustomNote"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "CustomDate"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "CustomInteger"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "CustomDecimal"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "QADC0"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "QADD0"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "QADT0"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "tcCustomShort"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "tcCustomCombo"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "tcCustomLong"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "tcCustomNote"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "ttCustomDate"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "tiCustomInteger"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "tdCustomDecimal"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "tcQADC0"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "tdQADD0"
             or entry (2,tBusinessFields.tcFcFieldName,".") begins "ttQADT0"
             then do:
                 if vcResultsetName = ""
                 or tBusinessFields.tcFcFieldName begins "tq" + tqResourceLabels.tcBusActivityCode + "."
                 then vcResultsetName = entry (1,tBusinessFields.tcFcFieldName,".").
                 if ocReportCustomFields = ""
                 then ocReportCustomFields = tBusinessFields.tcFcFieldName.
                 else ocReportCustomFields = ocReportCustomFields + "," + tBusinessFields.tcFcFieldName.
             end.
    end.
end.

if vcResultsetName <> ""
and can-find (first tReportTableCustomField where tReportTableCustomField.tcResultTable = vcResultsetName)
then do:
    for each tReportTableCustomField where
             tReportTableCustomField.tcResultTable = vcResultsetName
             break by tReportTableCustomField.tcTableName on error undo, throw:
        if first-of (tReportTableCustomField.tcTableName)
        then do:
            <Q-47 run GetCustomFieldsForTable (all) (Read) (NoCache)
               (input 't' + tReportTableCustomField.tcTableName, (TableName)
                input '', (ComponentName)
                output dataset tqCustomFieldsForTable) in BCustomField>
            for each tqCustomFieldsForTable on error undo, throw:
                create tReportCBF.
                assign tReportCBF.tcReportCBFCustomFieldName = tqCustomFieldsForTable.tcCustomFieldFieldName
                       tReportCBF.tcReportCBFCustomFieldDesc = tqCustomFieldsForTable.tcCustomFieldDescription.
            end.
        end.
    end.
     
    if can-find (first tReportCBF)
    then do:
        <Q-55 run ReportCustomFields (all) (Read) (NoCache)
           (input tqResourceLabels.tiBusActivity_ID, (BusActivityID)
            input {&STOREDSEARCH-CUSTOMER-DEFAULT}, (VariantName)
            output dataset tqReportCustomFields) in BReportVariant>
        for each tqReportCustomFields,
            each tReportCBF where
                 tReportCBF.tcReportCBFCustomFieldName = tqReportCustomFields.tcRptRequestCBF:
            tReportCBF.tcReportCBFResultsetField = tqReportCustomFields.tcRptRequestResultField.
        end.
    end.
    else do:
        <M-69 run SetMessage
           (input  #T-3'No User-Defined Fields are available for this report.':255(132597231)T-3# (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'D' (icType), 
            input  3 (iiSeverity), 
            input  '' (icRowid), 
            input  'blf-854874':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  'report ' + ocReportLabel (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BResource>
        oiReturnStatus = -1.
    end.
end.
else do:
    <M-53 run SetMessage
       (input  #T-30'This report does not support user-defined fields.':255(769634637)T-30# (icMessage), 
        input  '' (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'D' (icType), 
        input  3 (iiSeverity), 
        input  '' (icRowid), 
        input  'blf-220243':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  'report ' + ocReportLabel (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BResource>
    oiReturnStatus = -1.
end.