Saturday, 13 April 2013

LineChartRenderer.mxml


The following code generates line chart.And the line chart can be drilldown based on adding Levels in the following Zoomintoseries().


<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" height="100%" width="100%" creationComplete="initApp()">
   
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.charts.HitData;
            import mx.charts.events.ChartItemEvent;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.soap.WebService;
           
            private var ws:WebService;
            private var Level:int = 0;
            private var Cdtxt:String = "";
            private var LocCd:String = "";
            private var Cd:String = "";
           
            [Bindable]
            public var dpac:ArrayCollection = new ArrayCollection
           
            public var initSeriesArray:Array = new Array();
            public var level:Number = 1;
            public var newSeries:Array;
            [Bindable]
            public var drillDownDataSet:ArrayCollection;
           
            [Bindable]
            public var dp:ArrayCollection = dpac;

            override public function set data(value:Object):void
            {
                super.data = value;
               
                if (value.hasOwnProperty("detail1"))
                    //chart.dataProvider = value.detail1;
                    dp = value.detail1;
                    dpac = dp
/*                     var TmpObj:Object = new Object();
                    TmpObj['CUST'] = 'TSD1'
                    TmpObj['amount'] = 100000
                    dp.addItem(TmpObj);
 */            }
           
            private function initApp():void
            {
                initSeriesArray = chart.series;            
            }
           
            private function zoomIntoSeries(e:ChartItemEvent):void
            {
                e.stopImmediatePropagation();
                var hitData:HitData = e.hitData;
               
                if (Level==0)
                {
                    Cdtxt = "DRILL1"
                    LocCd = hitData.item.CUST;
                    Cd = "";
                }
                else if (Level==1)
                {
                    Cdtxt = "DRILL2"
                    LocCd = hitData.item.LOC;
                    Cd = hitData.item.CUST;
                }
                else
                {
                    Cdtxt = "DRILL"
                    LocCd = hitData.item.LOC;
                    Cd = "";               
                }
               
                ws = new WebService();
                ws.wsdl="http://localhost/ds/Service1.asmx?WSDL";
                ws.addEventListener("result", echoResultHandler);
                ws.addEventListener("fault", faultHandler);
                ws.loadWSDL();
                ws.search("Test_Test", Cdtxt, Cd, "", LocCd, "", "", "");
               
            }
           
            private function echoResultHandler(event:ResultEvent):void
            {
                var pietmpArr:ArrayCollection = new ArrayCollection();
                var TmpArr:ArrayCollection = new ArrayCollection();
                pietmpArr = event.result.Tables.Table.Rows;
                for (var i:int=0; i<=pietmpArr.length-1;i++)
                {
                    var TmpObj:Object = new Object();
                    TmpObj['CUST'] = pietmpArr[i].ACT
                    TmpObj['amount'] = pietmpArr[i].VAL
                    TmpObj['LOC'] = pietmpArr[i].CD
                    TmpArr.addItem(TmpObj);
                }
                dp = TmpArr
                if (Cdtxt == "DRILL")
                {
                    Level = 0
    /*                 var TmpObj:Object = new Object();
                    TmpObj['CUST'] = 'TSD1'
                    TmpObj['amount'] = 100000
                    dp.addItem(TmpObj); */
                }
                else
                {
                    Level = Level + 1   
                }   
            }
           
            private function faultHandler(event:FaultEvent):void
            {
                Alert.show("Bye")
            }

        ]]>
    </mx:Script>

    <mx:SeriesZoom id="zoomIn"  duration="1000"  verticalFocus="bottom"/>
    <mx:SeriesSlide id="zoomOut" duration="1000" direction="left"/>

    <mx:LineChart id="chart"
                  height="178"
                  width="100%"
                  gridLinesStyleName=""
                  showDataTips="true"
                  dataProvider="{dp}"
                  itemClick="zoomIntoSeries(event)">
<!--        <mx:series>
            <mx:LineSeries yField="amount" form="curve"  >
                <mx:lineStroke>
                    <mx:Stroke weight="1"  />
                </mx:lineStroke>
            </mx:LineSeries>
        </mx:series>
-->       
        <mx:horizontalAxis>
            <mx:CategoryAxis id="ca1" categoryField="CUST"/>
        </mx:horizontalAxis>

        <mx:series>
            <mx:LineSeries id="s1"
                           xField="CUST" 
                           yField="amount"
                           form="curve"
                           displayName="CUST"
                           hideDataEffect="zoomOut"
                           showDataEffect="zoomIn"
/>
<!--            <mx:LineSeries id="s1" yField="amount" form="curve" displayName="AMOUNT"/>-->
        </mx:series>

        <mx:horizontalAxisRenderer>
            <mx:AxisRenderer visible="true"/>
        </mx:horizontalAxisRenderer>
        <mx:verticalAxisRenderer>
            <mx:AxisRenderer visible="true"/>
        </mx:verticalAxisRenderer>
    </mx:LineChart>
</mx:HBox>

No comments:

Post a Comment