Friday, 12 April 2013

Piechartrenderer.mxml

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

<?xml version="1.0" encoding="utf-8"?>
<!-- dpcontrols/adg/myComponents/ChartRenderer.mxml -->
<mx:VBox height="180" width="100%" xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()" xmlns:layout="org.alivepdf.layout.*">

    <mx:Script>
        <![CDATA[
            import mx.charts.HitData;
            import mx.charts.events.ChartItemEvent;
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            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 dp:ArrayCollection = dpac;

            [Bindable]
            public var drillDownDataSet:ArrayCollection;
           
            override public function set data(value:Object):void
            {
                super.data = value;
               
                if (value.hasOwnProperty("detail"))
                    dp = value.detail;               
                    dpac = dp
            }

            private function displayName(data:Object, field:String, index:Number, percentValue:Number):String
            {
                return data.CUST + ":" + data.amount + '\n';
            }
           
            private function initApp():void
            {
                initSeriesArray = pie.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   
                }
                else
                {
                    Level = Level + 1   
                }   
            }

            private function faultHandler(event:FaultEvent):void
            {
                Alert.show("Bye")
            }

        ]]>
    </mx:Script>

    <mx:SeriesSlide id="slideIn" duration="1000" direction="down"/>
    <mx:SeriesSlide id="slideOut" duration="1000" direction="up"/>

    <mx:PieChart id="pie"
                 dataProvider="{dp}"
                 width="100%"
                 height="178"
                 x="1"
                 y="311"
                 showDataTips="true"
                 itemClick="zoomIntoSeries(event)">
        <mx:series>
            <mx:PieSeries id="s1"
                          labelPosition="callout"
                          field="amount"
                          nameField="CUST"
                          labelField="CUST"
                          hideDataEffect="slideOut"
                          showDataEffect="slideIn"
                          />
        </mx:series>
    </mx:PieChart>
</mx:VBox>

No comments:

Post a Comment