Saturday, 11 May 2013

How to display reports in Flex

The following code generates reports in two tabs.In first tab reports generated in DataGrid and in second tab reports generated in Fusion Charts Using AdvancedDataGrid.

Code:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:ProComp="ProComp.*"
               creationComplete="application1_creationCompleteHandler(event)">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script source="\\Common\\CommonScripts.as"/>
    <fx:Style source="\\Common\\ApplicationSkin.css" />
    <fx:Script>
        <![CDATA[
            import COMMON.*;

            import mx.charts.BarChart;
            import mx.charts.events.ChartItemEvent;
            import mx.collections.ArrayCollection;
            import mx.events.AdvancedDataGridEvent;
            import mx.events.FlexEvent;
            import mx.events.ListEvent;

            import com.adobe.fiber.runtime.lib.StringFunc;
            import com.as3xls.xls.ExcelFile;
            import com.as3xls.xls.Sheet;
           
            import mx.events.FlexEvent;
            import mx.utils.UIDUtil;
           
            import org.alivepdf.colors.RGBColor;
            import org.alivepdf.display.Display;
            import org.alivepdf.drawing.Joint;
            import org.alivepdf.fonts.FontFamily;
            import org.alivepdf.fonts.Style;
            import org.alivepdf.images.PNGImage;
            import org.alivepdf.layout.Layout;
            import org.alivepdf.layout.Orientation;
            import org.alivepdf.layout.Size;
            import org.alivepdf.layout.Unit;
            import org.alivepdf.pages.Page;
            import org.alivepdf.pdf.PDF;
            import org.alivepdf.saving.Method;
            import org.osmf.metadata.Metadata;
           
            private var myPDF:PDF;
            private var RowId:String = "";
           
            private var pdfData:ByteArray;
            private var contacts:ArrayCollection;
           
            [Bindable] public var collection:ArrayCollection = new ArrayCollection();

            [Bindable]
            private var AdvGrdArrCol:ArrayCollection= new ArrayCollection
            private var ParentArrCol:ArrayCollection= new ArrayCollection
            private var Sal:int;
            private var BarChartArr:ArrayCollection = new ArrayCollection

            protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                TbRc.selected = true;
                Act.selected = true;
                Res.selected = true;
            }

            protected function Btn_Prv_clickHandler(event:MouseEvent):void
            {
                var a:int;
                RowId = UIDUtil.createUID().toString();
                var startDS:String = StringFunc.replaceAll(Perd.text,"/","");
                //var sDate:Date = DateField.stringToDate(startDS,"MMDDYYYY");
                var mm:String = StringFunc.left(startDS,2) //StringFunc.substring(sDate.toString(),4,3);
                var year:String = StringFunc.right(startDS,4);
                var FinYr:String = year + mm;
                if (Res.selected = true)
                    a = 0;
                else if (Acts.selected = true)
                    a = 1;
                useWebService("Test_Test", "Report", "", "", FinYr, RowId, a.toString(), "");
                addEventListener("DBExeComp",OnGridLoad)
            }
           
            private function OnGridLoad(evt:Event):void
            {
                removeEventListener("DBExeComp",OnGridLoad)
                collection = RepArrCol[0];
                dynamicColumn();
                gridRpt.dataProvider = RepArrCol[1];
               
                var TmpAct:String = "";
                var TmpActNew:String = "";
                for (var Loop:int=0; Loop<=RepArrCol[2].length-1;Loop++)
                {
                    var obj:Object = new Object();
                    var tmpArrNew:ArrayCollection = new ArrayCollection();
                    var CustArr:ArrayCollection = new ArrayCollection();
                    Sal = 0;
                    if (TmpAct != RepArrCol[2][Loop].ACT)
                    {
                        var objnew:Object = new Object();
                        tmpArrNew = new ArrayCollection();
                        obj['ACT'] = RepArrCol[2][Loop].ACT
                        TmpAct = RepArrCol[2][Loop].ACT
                        for (var i:int=0; i<=RepArrCol[2].length-1;i++)
                        {
                            if (TmpAct == RepArrCol[2][i].ACT)
                            {
                                /* BAR CHART */
                                var barobj:Object = new Object();
                                barobj['CUST'] = RepArrCol[2][i].CUST
                                barobj['VALUE'] = RepArrCol[2][i].VAL
                                tmpArrNew.addItem(barobj)
                            }
                        }
                        //obj['VAL'] = Sal 
                        objnew['detail2'] = tmpArrNew
                        CustArr.addItem(objnew)
                        obj['children'] = CustArr                           
                        ParentArrCol.addItem(obj)
                    }
                }
            }
           
            private function dynamicColumn():void
            {
                this.gridRpt._hideHdnColumn = true;
                this.gridRpt._headerText = StringFunc.replaceAll(collection.source[0].headerText.toString(),"~",",");
                this.gridRpt._columnType = StringFunc.replaceAll(collection.source[0].coltyp.toString(),"~",",");
                this.gridRpt._fontSize = 10;
                this.gridRpt._fontName = "Arial";
                this.gridRpt._columnWidth = StringFunc.replaceAll(collection.source[0].width.toString(),"~",",");
                this.gridRpt._dataField = StringFunc.replaceAll(collection.source[0].dataField.toString(),"~",",");
            }

            protected function cmdExport_clickHandler(event:MouseEvent):void
            {   
                if(gridRpt.dataProvider.source.length != 0 )
                {
                    ExportToExcel("Test.xls");
                }
                else
                {
                    Alert.show("Report is Empty!","Information");
                    return;
                }
            }
           
            private function ExportToExcel(FileName:String)
            {
                try
                {
                    var fields:Array = new Array();
                    var sheet:Sheet;
                   
                    fields = [];
                    sheet = new Sheet();           
                   
                    var rowCont:int = gridRpt.dataProvider.source.length;
                    var dataprovd:ArrayCollection = new ArrayCollection(gridRpt.dataProvider.source);
                   
                    sheet.resize(rowCont + 9,gridRpt.columnCount);
                   
                    var Col:Array = gridRpt.columns;
                    var Ex:int = 0;
                    var ExStr:String = "Test.xls";
                    sheet.setCell(2,1,ExStr);
                    //sheet.setCell(4,0,"Date From: " + dt_From.text + " " + "To: " + dt_To.text);
                   
                    for each(var DGField:DataGridColumn in Col)
                    {
                        fields.push(DGField.dataField.toString());
                        sheet.setCell(8,Ex,DGField.headerText.toString());
                        Ex++;
                    }
                   
                    for(var r:int = 0;r< rowCont;r++)
                    {
                        var Rec:Object = dataprovd.getItemAt(r);
                        var Erow:int = r+1;
                        //insertRecordInSheet(Erow,sheet,Rec);
                        //var ColCount:int = ColsArr.length;
                        var Exc:int = 0;
                        for(var c:int = 0; c<fields.length; c++)
                        {
                            var ExFld:String =fields[c];
                            if(Rec[ExFld] != null)
                            {
                                sheet.setCell(Erow+8,Exc,Rec[ExFld].toString());
                            }
                            Exc++;
                        }
                       
                    }
                    var Exls:ExcelFile = new ExcelFile();
                    Exls.sheets.addItem(sheet);
                    var Byt:ByteArray = Exls.saveToByteArray();
                    var FileRef:FileReference = new FileReference();
                    FileRef.addEventListener(Event.SELECT,alert);
                    var ExcStr:String = FileName;
                    FileRef.save(Byt,ExcStr);
                }
                catch(ex:Error)
                {
                    Alert.show(ex.toString());
                }
                finally{}
            }
           
            private function alert(event:Event):void
            {   
                Alert.show(event.currentTarget.name + " has been exported successfully!","Information");
            }

        ]]>
    </fx:Script>

    <mx:TabNavigator x="38" y="84" width="1108" height="417">
        <s:NavigatorContent label="SegmentwiseCOst" width="100%" height="100%">
            <s:BorderContainer width="1086" height="373" id="brd" depth="1" x="10" y="4">
                <ProComp:DataGridPro id ="gridRpt" depth="1" _showHScroll = "true"
                                     tabIndex="6" showDataTips="true" doubleClickEnabled="true" visible="true"
                                     _filter="true" _headerHeight="50" top="10" left="10" right="10" bottom="10" _lockColumnCount="1"/>
            </s:BorderContainer>
        </s:NavigatorContent>
        <s:NavigatorContent label="Charts" width="100%" height="100%">
            <mx:AdvancedDataGrid id="ChDg"
                                 width="1008" height="346"
                                 variableRowHeight="true" x="40" y="10">
                <mx:dataProvider>
                    <mx:HierarchicalData source="{ParentArrCol}"/>
                </mx:dataProvider>
                <mx:rendererProviders>
                    <mx:AdvancedDataGridRendererProvider
                        dataField="detail2"
                        renderer="BarChartRenderer"
                        />        
                </mx:rendererProviders> 
                <mx:columns>
                    <mx:AdvancedDataGridColumn dataField="ACT" headerText="Act" width="50"/>
                    <!--<mx:AdvancedDataGridColumn dataField="detail2" headerText="Bar" width="150"/>-->
                </mx:columns>      
            </mx:AdvancedDataGrid>
        </s:NavigatorContent>
    </mx:TabNavigator>
    <s:Label x="726" y="6" text="Period"/>
    <s:Label x="73" y="16" text="Report Group"/>
    <s:Label x="322" y="12" text="Account Type"/>
    <s:Label x="491" y="10" text="Report Type"/>
    <s:RadioButton x="172" y="12" label="TbRecon" id="TbRc" groupName="RepGrp"/>
    <s:RadioButton x="172" y="38" label="TbRecon with FgWip" id="TbFg" groupName="RepGrp"/>
    <s:RadioButton x="408" y="12" label="Actual" id="Act" groupName="AccTyp"/>
    <s:RadioButton x="408" y="38" label="Budget" id="Bud" groupName="AccTyp"/>
    <s:RadioButton x="408" y="64" label="Standard" id="Std" groupName="AccTyp"/>
    <s:RadioButton x="573" y="10" label="ResourceWise" id="Res" groupName="RepTyp"/>
    <s:RadioButton x="573" y="38" label="ActivityWise" id="Acts" groupName="RepTyp"/>
    <s:Button x="726" y="43" label="Preview" id="Btn_Prv" click="Btn_Prv_clickHandler(event)"/>
    <s:Button x="808" y="43" label="Export" id="Btn_Exp" click="cmdExport_clickHandler(event)"/>
    <s:Button x="891" y="43" label="Generate PDF" id="Btn_Pdf"/>
    <mx:DateField x="771" y="6" id="Perd"/>
</s:Application>

Output:



No comments:

Post a Comment