View RSS Feed

Development Team Blog

Visual Report Writer and The Web (VII)

Rate this Entry
In this seventh blog about Visual Report Writer and the Web we look at the next report that is available on the Live Demo website (European Server, USA server) named Inventory Stock Levels. If this is the first blog you read I encourage you to read the six other blogs (1: The Solution, 2: Invoices Report, 3: The Cleanup, 4: The CustomerList, 5: The Orderlist and 6: The Credit and Balances Overview). Between the fourth and the fifth blog we have been able to release the Alpha I version of Visual Report Writer 3.0 and the 2.1+ Library only setup. The latter one is needed to make the web reporting using the 17.1 DataFlex Web Framework easy and look like at the demo website.

The Report
The report uses DataFlex embedded database, the same database that is used for the WebOrder example that comes with Visual DataFlex 17.1. The tables invt and vendor are used for the report. The report groups the inventory data per vendor, sorted by name. The specialties in this report are a calculated column that contains the result of the inventory unit price times the number on hand. The value is not shown in the report, it is suppressed printed in the details section. The field's content is used for a sum operation in the group footer and the report footer. The report footer can be suppressed via a parameter in the report which can be set from integration. Another speciality is the use of a barcode font to convert the item_id into a barcode. The font is used is named "C39HrP24DlTt". If you install this font on your web-server you need to reboot the server in order to make it active.

The Integration
For the integration we create two cWebView components. One view creates a PDF when you browse through the vendors and allows you to suppress the report footer while the second component directly shows the report without filtering on vendor or allowing report footer suppress.

The OverView
First take a look at the overview implementation. This is the cWebView that immediately show the full report. While Visual Report Writer is fast (also depends in the number of simultaneously accesses and the speed of hardware and internet connections it should not be used when the amount of data is so big that a huge amount of pages is generated or when filters should be really applied. Web server access should be short and not time consuming. Users don't want to wait a long time. In this case it is fine, the report is only 3 pages long.

Note the difference between the report display in Chrome and Firefox. In Chrome your barcode is shown, in FireFox (version 20) it does not show. FireFox reads the PDF and converts it to HTML and while the barcode font is stored in the PDF it does not make use of it. In FireFox the report display is slower too.

The report start is triggered by the OnShow event of the cWebView component. So each time you open the view the report is build and shown in an iFrame control.
Code:
    Procedure OnShow
        Forward Send OnShow
        
        Send GenerateReport of oReport
    End_Procedure
End_Object
The report generating code is as in the other reports that create a PDF file.
Code:
Object oWebMainPanel is a cWebPanel
    Object oReport is a cVRWReport
        Set psReportName to "320 Inventory Stock levels per Vendor.vrw"

        Procedure GenerateReport
            String sReportId sFile sUrl
            VRWPDFExportOptions PDFExportOptions
            Boolean bCanceled

            Get OpenReport to sReportId
            If (sReportId <> "") Begin
                Get DefaultPDFExportOptions to PDFExportOptions
                Set pPDFExportOptions to PDFExportOptions
                Get ReportCacheFileName ".pdf" to sFile
                If (sFile <> "") Begin
                    Send ExportReport C_vrwPDF sFile
                    Get pbCanceled to bCanceled
                    If (not (bCanceled)) Begin
                        Get DownloadURL of ghoWebResourceManager sFile to sUrl
                        If (sUrl <> "") Begin
                            WebSet psUrl of oViewer to sUrl
                        End
                    End
                End

                Send CloseReport sReportId
            End
        End_Procedure
    End_Object

    Object oViewer is a cWebIFrame
       Set pbFillHeight to True
       Set pbShowBorder to True
    End_Object
End_Object
Per Vendor
In the second cWebView component that uses the same report the generation of the report results is trigged from an OnPostFind event in the vendor data dictionary object, like it is done in Credit And Balances report view.
Code:
Object oVendor_DD is a cVendorDataDictionary
    Procedure OnPostFind Integer eMessage Boolean bFound
        Boolean bSyncing

        Forward Send OnPostFind eMessage bFound

        Get AppSynching of ghoWebApp to bSyncing
        If (not (bSyncing)) Begin
            Send GenerateReport of oReport
        End
    End_Procedure
End_Object
The special code in this view is the use of a parameter in the report. The view has a checkbox (cWebCheckbox) that let the user indicate if the report footer should be suppressed or not. The status of this checkbox is read in the OnInitializeReport event of the cVRWReport object.
Code:
Procedure OnInitializeReport
    Boolean bSuppress
    Integer iParameter
    
    Get GetChecked of oSuppressFooterSection to bSuppress
    Get ParameterIdByName C_USEMAINVRWREPORTID 'SuppressFooter' to iParameter
    Set psParameterValue C_USEMAINVRWREPORTID iParameter to bSuppress

    Send SetFilters
End_Procedure
The filtering is done by taking the value of the vendor ID cWebForm object and add it as a filter to the report using the AddFilter message.
Code:
Procedure SetFilters
    Integer iVendorId

    WebGet psValue of oVendorID to iVendorId

    Send RemoveAllFilters C_USEMAINVRWREPORTID
    If (iVendorId <> 0) Begin
        Send AddFilter C_USEMAINVRWREPORTID "{Vendor.Id}" C_VRWEqual iVendorId
    End
End_Procedure
This blog was again written to show you what power there is behind Visual Report Writer and the Web and how easy it is to implement, integrate the reports. Make sure your customers get to know the product and deliver nice looking reports to you for integration.

Comments