`
zzc1684
  • 浏览: 1214367 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

主题:Web自定义表单集成FusionCharts图形控件

 
阅读更多
在协同办公系统中web自定义表单开发工具是核心组件,它可以为协同系统提供数据展现接口,自定义表单开发工具通过调用接口并返回接收数据后显示在页面上,如果需要对页面上的数据进行分析时,图形化的数据展现会更显得直观明了。

   在经过验证研究后,决定在web自定义表单开发工具中集成fusioncharts控件,之所以选择FusionCharts图形控件主要是它集成比较灵活、简单,对系统没有特殊的要求。下面的是FusionCharts的简单概述和系统要求:

FusionCharts Overview
 
FusionCharts is a flash charting component that can be used to render data-driven animated charts. Made in Adobe Flash 8 (formerly Macromedia Flash), FusionCharts can be used with any web scripting language like HTML, .NET, ASP, JSP, PHP, ColdFusion etc., to deliver interactive and powerful charts. Using XML as its data interface, FusionCharts makes full use of fluid beauty of Flash to create compact, interactive and visually-arresting charts. 
 
System Requirements
 
Server Side: Anything. FusionCharts runs on Windows, Linux, Unix or any other imaginable form of server that you can think of. Just make sure that your server MIME is configured for SWF files to ensure proper streaming. Most servers come pre-configured for SWF files. 

Client Side: Adobe Flash Player 8 (or above). Adobe Flash Player is a free and light-weight plugin to render Flash movies. It can be downloaded from www.adobe.com. It's one of the most widely installed plugin on this planet.
 

         如想了解FusionCharts更详细的信息请参见:http://www.fusioncharts.com/ 。下面开始介绍web自定义表单集成FusionCharts的具体过程:

一、             研究用AJAX/JavaScript方式整合

在FusionCharts中提供了接收XML数据并把数据以各种图形展现的方法,具体的示例步骤如下:

1)        JavaScript 的调用方法,首先在需要显示图形的页面上引用FusionCharts.js文件,然后在按下面的格式来调用即可。

<script type="text/javascript">

var chart = new FusionCharts("../Charts/Column2D.swf", "ChartId", "500", "300", "0", "0");

           chart.setDataURL("Data/Column2D.xml");            

chart.render("chartdiv");

        </script>

2)       FusionCharts接收XML数据的格式如下:

     

3)       JavaScript调用成功后显示的效果:

     

按上面的步骤便可以用JavaScript调用FusionCharts控件的接口并显示数据,主要工作量就是XML数据的组织,组织数据后直接调用接口就可以显示图形了。知道了主要的工作量就可以把FusionCharts控件集成到Web自定义表单中了。

二、             把FusionCharts控件集成到web自定义表单的设计器中

a)         增加FusionCharts图标到web自定义表单设计器的工具栏上

在Web自定义表单工具的配置文件中增加下面的配置属性即可在工具栏上显示,配置方法和显示效果如下:

配置方法: chart: ["chart控件", "../images/NEW_images/ef_design_chart.gif", false, 'Add("chart")'] 

显示效果: 

 

b)         设置FusionCharts的基本属性和数据来源

为了Web自定义表单和FusionCharts的集成方便和使用简单,我们把FusionChart的XML数据来源定义为取自Web自定义表单的dataset数据集控件,这样在表单制作时我们只要给数据集赋值,并把dataset数据集的数据和FusionCharts控件进行关联,数据便可以按图形方式展现。

首先需要把图形控件可以增加到自定义表单的设计器上。增加控件到自定义表单设计器上只要实现'Add("chart")接口即可,在Add()方法中增加如下代码:

case "chart":

{

              ArrNum[name]++;

              var sid = getNewContID(name,oContXml) ;

              var sHtml="<img controltype='" + name + "' id="+sid+" type=graph style='position:" + fcpubdata.position + ";Left:0;Top:0; Height:188; Width:326;' src='../images/ef_designer_graph.gif' onmovestart=moveStart() onmoveend=moveEnd() onresizestart=resizeStart() onresizeend=resizeEnd() />";

              htmltocont(sHtml,name);

              SelectObj(sid);

              break;

}

其次要把FusionCharts控件和dataset数据集的数据项进行关联,我们把FusionCharts的基本属性和数据关联属性统一做在了一个页面进行设置,设置方法如下图:

 

然后按常规的自定义表单的制作方法设计表单即可。如果表单上增加了FusionCharts图形控件,自定义表单设计保存时会自动引用FusionCharts.js文件。

再然后表单运行时会根据设置的属性进行解析后调用FusionCharts提供的方法显示图形。具体的解析过程封装了通用的方法,在表单设计中调用此方法便可以根据数据显示各种图形了。封装方法如下:

function ShowOneGraph(obj) {

 

    var iWidth = obj.style.pixelWidth;

    var iHeight = obj.style.pixelHeight;

    var dssub1 = eval("window." + obj.getAttribute("datasetdata"));

 

    var sXml = obj.getAttribute("formatxml");                //纵轴字段列表串

    var oXml;

    if (window.ActiveXObject) {

        oXml = new ActiveXObject("Microsoft.XMLDOM");

        oXml.async = false;

        oXml.loadXML(sXml);

    }

    else {

        oXml = (new DOMParser()).parseFromString(sXml, "text/xml");

    }

 

    //debugger;

    var Is3D = obj.Is3D;                                                   //是否D显示

    var IsStack = obj.IsStack;                                             //是否堆积显示

    //alert(IsStack);

    var IsMulti = (oXml.documentElement.childNodes.length > 2);       //是否是多序列图形

    var IsShowValue = obj.IsShowValue;                                  //是否显示数据值

    var showvalue = '0';

    if (IsShowValue == "是") showvalue = '1';

    var Is2YAxis = obj.Is2YAxis;                                        //是否显示双轴图形

 

    var myChart = null

 

    //增加显示图形类型的属性(用哪个flash文件)

    var chartName = (obj.chartTypeName == "undefined" || typeof obj.chartTypeName == "undefined") ? "" : obj.chartTypeName;

    if (chartName == "") {

        switch (obj.graphtype) {

            case "折线图":           //Line.swf 

                if (IsMulti)

                    chartName = "ScrollLine2D.swf"; //"MSLine.swf";

                else

                    chartName = "Line.swf";

                break;

            case "圆饼图":           //Pie2D.swf

                if (Is3D == "是")

                    chartName = "Pie3D.swf";

                else

                    chartName = "Pie2D.swf";

                break;

            case "条形图":           //Bar2D.swf

                //是否是多序列图形

                if (IsMulti) {

                    //是否堆积显示图形

                    if (IsStack == "是") {

                        //是否D显示

                        if (Is3D == "是")

                            chartName = "StackedBar3D.swf";

                        else

                            chartName = "StackedBar2D.swf";

                    }

                    else {

                        //是否D显示

                        if (Is3D == "是")

                            chartName = "MSBar3D.swf";

                        else

                            chartName = "MSBar2D.swf";

                    }

                }

                else {

                    chartName = "Bar2D.swf";

                }

                break;

            case "区域图":           //Area2D.swf

                if (IsMulti) {

                    if (IsStack == "是")

                        chartName = "StackedArea2D.swf";

                    else

                        chartName = "ScrollArea2D.swf"; //"MSArea.swf";

                }

                else {

                    chartName = "Area2D.swf";

                }

                break;

            default:                 //Column2D.swf

                if (IsMulti) {

                    if (IsStack == "是") {

                        if (Is3D == "是")

                            chartName = "StackedColumn3D.swf";

                        else

                            chartName = "ScrollStackedColumn2D.swf"; //"StackedColumn2D.swf";

                    }

                    else {

                        if (Is3D == "是")

                            chartName = "MSColumn3D.swf";

                        else

                        //chartName = "MSColumn2D.swf";

                            chartName = "ScrollColumn2D.swf";

                    }

                }

                else {

                    if (Is3D == "是")

                        chartName = "Column3D.swf";

                    else

                        chartName = "Column2D.swf";

                }

 

        }

 

        //双轴图形显示

        if (Is2YAxis == "是") {

            if (IsStack == "是" && Is3D == "是")

                chartName = "StackedColumn3DLineDY.swf";

            else {

                if (Is3D == "是")

                    chartName = "MSColumn3DLineDY.swf";

                else

                    chartName = "MSCombiDY2D.swf";

            }

        }

    }

    //alert(chartName);

    myChart = new FusionCharts("http://www.cnblogs.com/../FusionCharts/" + chartName, "myChartId", iWidth, iHeight, "0", "0");

 

    //把图形控件需要显示的Xml做一个接口属性,在表单中可以直接给图形设置数据并显示。

    //如果在表单上给图形控件付了chartXML的属性,则不再按图形控件的属性页的进行属性拼写。

    var strXml = "";

    if (obj.chartXML == "undefined" || typeof obj.chartXML == "undefined") {

        if (parent.Request.QueryString("opentype").toString() == "1") {

            dssub1.Open();

        }

 

        //增加数据集内容是否为空的判断

        var ilen = 0;

        if (dssub1.oDom.xml != "")

            ilen = dssub1.oDom.documentElement.childNodes.length;

 

        var xfield = obj.xfield;

        var colno = dssub1.FieldNameToNo(xfield);       //X轴字段序号

        var yfield = oXml.documentElement.childNodes(0).childNodes(0).text;    //y轴字段

        var yno = dssub1.FieldNameToNo(yfield);                                     //Y轴字段序号

 

 

        //图形属性

        var strCaption = (obj.caption == "undefined" || typeof obj.caption == "undefined") ? "" : obj.caption;

        var strSubCaption = (obj.subcaption == "undefined" || typeof obj.subcaption == "undefined") ? "" : obj.subcaption;

        var strxAxisName = (obj.xAxisName == "undefined" || typeof obj.xAxisName == "undefined") ? "" : obj.xAxisName;

        var stryAxisName = (obj.yAxisName == "undefined" || typeof obj.yAxisName == "undefined") ? "" : obj.yAxisName;                      //主Y轴名称

        var strNumPrefix = (obj.numberPrefix == "undefined" || typeof obj.numberPrefix == "undefined") ? "" : obj.numberPrefix;

        //增加数据的后缀属性、标准线值、标准线显示值

        var strNumSuffix = (obj.numberSuffix == "undefined" || typeof obj.numberSuffix == "undefined") ? "" : obj.numberSuffix;

        var strTrendlines = (obj.trendlines == "undefined" || typeof obj.trendlines == "undefined") ? "" : obj.trendlines;

        var strDisplayValue = (obj.TrendDisplayValue == "undefined" || typeof obj.TrendDisplayValue == "undefined") ? "标准线" : obj.TrendDisplayValue;    //标准线显示值

 

 

        //增加次Y轴名称

        var strSyyAxisName = (obj.SyAxisName == "undefined" || typeof obj.SyAxisName == "undefined") ? "" : obj.SyAxisName;

 

        var bg = "";

        if (Is3D == "是" && obj.graphtype == "圆饼图") bg = "bgcolor = '99CCFF,FFFFFF'";

 

        //修改小数位数保留两位

        strXml = "<chart " + bg + " decimals='2' formatNumberScale='0' palette='2' caption='" + strCaption + "' baseFontSize='12' baseFont='Arial'";

        strXml += "showSum='1' decimals='0' useRoundEdges='1' palette='2' showBorder='1' ";

        strXml += " subcaption='" + strSubCaption + "' xAxisName='" + strxAxisName + "' numberPrefix='" + strNumPrefix + "' numberSuffix='" + strNumSuffix + "'";

 

        //增加是否显示双轴图形.  数据集Y轴的最后一个字段做次Y轴数据

        if (Is2YAxis == "是" && oXml.documentElement.childNodes.length > 2)

            strXml += " PYAxisName = '" + stryAxisName + "' SYAxisName = '" + strSyyAxisName + "'";

        else

            strXml += " yAxisName='" + stryAxisName + "'";

 

 

        strXml += ">";

        

        //组织图形数据

        if (typeof myChart != "undefined" && myChart != null && ilen > 1) {

           

            var strcategories = "<categories>";

            for (var i = 0; i < ilen - 1; i++) {

                //图表分类

                var strlabel = dssub1.oDom.documentElement.childNodes(i).childNodes(colno).text;

                var strvalue = "";

                if (IsMulti)

                    strcategories += "<category label='" + strlabel + "' />";

                else

                    strvalue = dssub1.oDom.documentElement.childNodes(i).childNodes(yno).text;

 

                // 增加点击图形时可以处发其它事件的属性

                var strlink = dssub1.oDom.documentElement.childNodes(ilen - 1).childNodes(1).childNodes(yno).childNodes(14).text;

                if (strlink.toLowerCase().indexOf("javascript") >= 0)

                    strlink = strlink.substring(11, strlink.length);

                if (strlink.indexOf(";") >= 0)

                    strlink = strlink.substring(0, strlink.length - 1);

                if (strlink.indexOf("(") >= 0) {

                    var ss = strlink.substring(strlink.indexOf("(") + 1, strlink.length);

                    

                    strlink = strlink.substring(0, strlink.indexOf("(") + 1) + "\'" + i + "\'";

                    if (ss.length > 1)

                        strlink = strlink + "," + ss;

                    else

                        strlink = strlink + ss;

                }

 

                var slink = " link = \"JavaScript:" + strlink + "\"";

                strXml += "<set label='" + strlabel + "' value='" + strvalue + "' " + slink + " />";

       

            }

 

            if (IsMulti) {

                strcategories += "</categories>";

                strXml += strcategories;

 

                for (var j = 0; j < oXml.documentElement.childNodes.length - 1; j++) {

                    var ycolno = dssub1.FieldNameToNo(oXml.documentElement.childNodes(j).childNodes(0).text);

                    var yfieldname = oXml.documentElement.childNodes(j).childNodes(1).text

 

                    var strdataset = "<dataset showValues='" + showvalue + "' seriesName='" + yfieldname + "'";

                    if (Is2YAxis == "是" && oXml.documentElement.childNodes.length > 2 && (j == oXml.documentElement.childNodes.length - 2))

                        strdataset += " parentYAxis='S' ";

                    strdataset += ">";

                    for (var k = 0; k < ilen - 1; k++) {

                        var strvalue = dssub1.oDom.documentElement.childNodes(k).childNodes(ycolno).text;

                        strdataset += "<set value='" + strvalue + "' /> ";

                    }

                    strdataset += "</dataset>"

                    strXml += strdataset;

                }

 

            }

 

            //增加标准线

            if (strTrendlines != "" && strTrendlines != "undefined") {

                strXml += "<trendlines>"

                strXml += "<line startValue='" + strTrendlines + "' isTrendZone='0' displayValue='" + strDisplayValue + "' color='FF0000' /> "

                strXml += "</trendlines>"

            }

 

        }

        strXml += "</chart>";

    }

    else {

        strXml = obj.chartXML;

    }

 

    myChart.setDataXML(strXml);

    var sdiv = "<div id='" + obj.id + "' style='position:absolute;left:" + obj.style.left + ";top:" + obj.style.top + ";width:" + obj.style.width + ";height:" + obj.style.height + "'>";

    obj.outerHTML = sdiv + "</div>";

 

    myChart.render(obj.id);

}

c)         预留FusionCharts的数据来源接口

chartTypeName属性接口,用于指定图形显示用哪种类型。例:chart1.chartTypeName = “Doughnut2D.swf”; 
chartXML 属性接口,用于指定图形的XML数据。例:chart1.chartXML = “……”;  数据格式为FusionCharts提供的标准格式,因FusionCharts提供了很多的属性和接口,不能在自定义表单中一一列举出来供设置,特提供此属性接口。标准API参见官方网站上提供的 Chart XML API介绍。 
三、             带图形的自定义表单制作过程及展现效果

1、  按常规的表单制作方式设计表单,并在表单上增加图形控件,设计效果如下:

 

2、  设置图形控件的基本属性和关联的dataset数据集

 

3、  在表单的onload事件中调用ShowOneGraph(chart1);显示图形的方法。

4、  运行表单显示效果如下:



 

 

 

 

<script type="text/javascript"></script>

 

分享到:
评论

相关推荐

    JSP下操作图形控件FusionCharts

    **JSP下操作图形控件FusionCharts** FusionCharts是一款强大的JavaScript图表库,它可以用于在Web应用中创建丰富的交互式图表。在Java Server Pages (JSP)环境中使用FusionCharts,可以为开发者提供便捷的方式来...

    FusionCharts 图形报表展示

    **FusionCharts 图形报表展示** FusionCharts是一款强大的JavaScript图表库,专为网页和应用程序提供丰富的互动数据可视化解决方案。它允许开发者通过简单的API创建出各种动态、炫酷且易于理解的图表,如柱状图、...

    FusionCharts图表控件中文版使用手册.doc

    《FusionCharts图表控件中文版使用手册》是针对初学者设计的一份详细教程,旨在帮助用户快速掌握这款强大的图表工具。FusionCharts是一款流行的JavaScript图表库,它能够以丰富的互动性和美观的视觉效果呈现数据。 ...

    FusionCharts 图表控件

    这个控件能够帮助开发人员轻松地在网页或应用程序中集成各种类型的图表,如柱状图、饼图、线图、地图等,使得数据的呈现更加直观易懂。 1. **FusionCharts功能特性** - **丰富的图表类型**:FusionCharts支持超过...

    fusioncharts/3.3.1下载

    FusionCharts是一种制图组件,可以帮您为您的Web应用创建交互式的、数据驱动的图表、仪表盘和地图。它具有智能化、用户友好和创新等特点,可以将单调的数据转化为栩栩如生的图像,从而使您的Web应用更加的生动。它...

    FusionCharts报表 图形实例

    在JAVA环境中,你可以通过以下步骤来集成FusionCharts: 1. **引入库**:首先,你需要在项目中添加FusionCharts的Java库依赖,这通常通过Maven或Gradle等构建工具完成。 2. **创建图表对象**:使用FusionCharts的...

    FusionCharts图表控件中文版使用手册定义.pdf

    《FusionCharts图表控件中文版使用手册定义》是一份详细介绍如何使用FusionCharts图表控件的网络文档。FusionCharts是一款强大的图表生成工具,它能够帮助开发者创建丰富的交互式图表,广泛应用于数据分析和可视化...

    FusionCharts v3.2.1 Evaluation

    FusionCharts提供了强大的API和丰富的主题选项,允许开发者自定义图表的颜色、样式、标签、图例等,以适应不同的设计需求。此外,通过JavaScript API,可以实现动态数据更新、图表操作以及与其他Web组件的集成。 **...

    FusionCharts 18个常用控件教程(含json格式和xml格式)

    本教程涵盖了FusionCharts的18个常用控件,旨在帮助用户深入理解和应用这些控件,无论是对于数据可视化的需求还是在Web应用中展示复杂信息,FusionCharts都是一个优秀的选择。教程中涉及到的json和xml格式则是...

    FusionCharts图表控件中文版使用手册整理.pdf

    FusionCharts是一款强大的图表生成工具,它通过将数据与美观的图形相结合,为数据分析和展示提供了便捷的方式。本文将深入探讨FusionCharts图表控件的中文版使用手册,包括其核心组成部分、各种功能以及如何有效地...

    FusionCharts图形报表工具正式版

    总的来说,FusionCharts正式版是开发高质量、互动性强的Web图形报表的理想选择,尤其适合那些需要专业、美观数据展示的项目。其全面的功能、优秀的兼容性和易用性,使得它在IT行业中深受开发者喜爱。

    js图形展示控件 饼图 fusioncharts jfcharts jfchart

    本篇文章将详细探讨“js图形展示控件”中的饼图实现,特别是融合了FusionCharts、JFCharts和JFChart这三款JavaScript库的用法。 首先,FusionCharts是一款强大的JavaScript图表库,它支持超过90种图表类型,包括...

    fusioncharts asp.net 图表控件示例

    创建一个新的ASP.NET Web Forms页面,从工具箱中拖放一个FusionCharts服务器控件到设计视图。在属性窗口中,配置控件的基本属性,如`ChartType`(图表类型)、`Width`和`Height`(尺寸)以及`DataFormat`(数据格式...

    Android上,使用FusionCharts进行图表控件封装

    在Android平台上,FusionCharts是一款强大的图表库,用于创建丰富的、交互式的图表和图形。它提供了多种图表类型,如柱状图、饼图、线图、面积图等,以帮助开发者将复杂的数据可视化,增强应用的用户体验。这篇教程...

    FusionCharts图表控件ABC入门.ppt

    FusionCharts是一款强大的图表控件,它利用Adobe Flash技术,为用户提供交互式的、数据驱动的动态图表。这个组件特别适合那些希望通过视觉化方式呈现复杂数据的开发者,无论他们使用的是JSP、HTML或其他任何网页脚本...

Global site tag (gtag.js) - Google Analytics