salesforce 零基础学习(二十六)自定义图表chart简单介绍(使用apex和VF实现)

chart在报表中经常使用到,他可以使报表结果更加直观的展现给用户。salesforce支持VF和apex代码来更好的展示chart。

chart分类:常用的图表样式有饼状图,柱状图,折线图,条形图,表盘图,雷达图,及线性系列图表等。

图表根据样式不同显示的内容不同,大概包含以下部分:

1. X,Y坐标;

2. 标题;

3. 内容及所含数量(data);

4.移入上面显示的相关提示信息(tip);

5.说明(legend)。

注:这里只是总结大概的部分,显示的部分因图表样式而有相应的差距,chart是可以高度自定义的,可以通过vf标签的属性对内容进行显示或者隐藏。

这里主要对饼状图进行描述,其他图形可以参看Page Developer的描述以及相关标签的属性介绍来自行练习。我们要实现的大概效果如下图所示。

还是以Goods__c表为例,其中一个字段为GoodsBrand__c,类型为PickList,主要有四种可选择产品类型,华为,小米,魅族以及联想。我们要做的chart为展示数据表中各个品牌所占的比例。

对此饼状图大概分析:制作此饼状图需要有数据,说明(legend),提示信息(tip)。

其中,我们使用<apex:chart>标签来封装数据,使用<apex:pieSeries>来显示数据。<apex:pieSeries>有这样两个属性,labelField展示图表上面显示的内容信息,此信息与legend的标题信息相同且legend不可以自己定义,dataField用来展示比例,即这个值占据总量的多少。默认情况下tip信息由key,value队组成,显示的key为labelField值,显示的value为dataField的值。

制作步骤:

1.Apex用于制作数据

 1 public class PieChartController {
 2     public Map<String,Integer> goodsBrandNumberMap = new Map<String,Integer>();
 3     public Set<String> goodsBrand{get;set;}
 4     public PieChartController() {
 5         Map<String, object> goodsBrandValuesMap = PickListValuesUtil.getPicklistValues('Goods__c','GoodsBrand__c');
 6         goodsBrand = goodsBrandValuesMap.keySet();
 7         List<Goods__c> goodsList = [select Id,GoodsBrand__c from Goods__c where GoodsBrand__c <> null];
 8         for(Goods__c currentGoods : goodsList) {
 9             if(goodsBrand.contains(currentGoods.GoodsBrand__c)) {
10                 if(goodsBrandNumberMap.keySet().contains(currentGoods.GoodsBrand__c)) {
11                     goodsBrandNumberMap.put(currentGoods.GoodsBrand__c,goodsBrandNumberMap.get(currentGoods.GoodsBrand__c) + 1);
12                 } else {
13                     goodsBrandNumberMap.put(currentGoods.GoodsBrand__c,1);
14                 }
15             }
16         }
17     }
18     
19     public List<Data> getGoodsBrandPieData() {
20         List<Data> pieWdegeData = new List<Data>(); 
21         for(String goodsBrandName : goodsBrandNumberMap.keySet()) {
22             Data data = new Data(goodsBrandName + '\n' + goodsBrandNumberMap.get(goodsBrandName),goodsBrandNumberMap.get(goodsBrandName),goodsBrandName);
23             pieWdegeData.add(data);
24         }
25         
26         return pieWdegeData;
27     }
28     
29     // Wrapper class
30     public class Data {
31         //label 
32         public String chartLabel { get; set; }
33         //the value of chart label
34         public Decimal valueOfChartLabel { get; set; } 
35         //tip customize
36         public String tipOfChartLabel {get;set;}
37         //tip customize
38         public Decimal tipOfLabelValue{get;set;}
39         
40         public Data(String chartLabel,Decimal valueOfChartLabel) {
41             this.chartLabel = chartLabel;
42             this.valueOfChartLabel = valueOfChartLabel;
43         }
44         
45         //if the label of tip need to customize,choose this
46         public Data(String chartLabel,Decimal valueOfChartLabel,String tipOfChartLabel) {
47             this(chartLabel,valueOfChartLabel);
48             this.tipOfChartLabel = tipOfChartLabel;
49         }
50         
51         //if both the label of tip and the value of tip need to customize ,choose this
52         public Data(String chartLabel,Decimal valueOfChartLabel,String tipOfChartLabel,Decimal tipOfLabelValue) {
53             this(chartLabel,valueOfChartLabel,tipOfChartLabel);
54             this.tipOfLabelValue = tipOfLabelValue;
55         }
56     }
57 }

由于展现的legend需要自己定义,所以我们在构造Data时要考虑图表的label以及对应的value和label提示信息以及相对应的value。Data相当于一个Property,前台通过数据绑定后在使用<apex:pieSeries>便相当于迭代器,将列表中每个Data元素取出。

2.Page页面显示数据

 1 <apex:page controller="PieChartController" title="Pie Chart"> 
 2     
 3     <apex:chart data="{!goodsBrandPieData}" height="400" width="500" colorSet="#0A224E,#BF381A,#A0D8F1,#E9AF32,#E07628"> 
 4         <apex:legend position="bottom"/> 
 5         <apex:pieSeries labelField="chartLabel" dataField="valueOfChartLabel" donut="50"> 
 6             <apex:chartLabel display="none" orientation="vertical" font="bold 18px Helvetica"/>
 7             <apex:chartTips labelField="tipOfChartLabel"/>
 8                 
 9         </apex:pieSeries> 
10     </apex:chart>
11     
12 </apex:page>

通过上述代码便可以实现上图所示的chart。

我们把Page页面做些调整,页面代码如下所示:

1 <apex:page controller="PieChartController" title="Pie Chart"> 
2     
3     <apex:chart data="{!goodsBrandPieData}" height="400" width="500"> 
4         <apex:legend position="bottom"/> 
5         <apex:pieSeries labelField="tipOfChartLabel" dataField="valueOfChartLabel" donut="50"> 
6         </apex:pieSeries> 
7     </apex:chart>
8     
9 </apex:page>

显示效果如下图所示

可以看出legend和label显示样式相同,如果需要进行相关的定制化,详见PDF中所使用标签的属性。

总结:自定义图表简单的说便是先提供数据进行绑定,然后通过需要的图表样式进行解析即可,如果需要定制一些特殊需要,详见使用的标签属性,legend标签无value等自定义的值,其值与label绑定,所以如果需要legend显示特殊的值,需要在设置Data时考虑相关的信息,在label绑定时,绑定legend需要显示的值,在对label进行自定义操作。如果篇中有错误地方欢迎指出,如果有问题欢迎留言。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从流域到海域

eclipse 常用快捷键

快捷方式 0. Ctrl + 1 (快速修复) 1. Ctrl + D (删除当前行) 2. Ctrl + Alt + ↓(复制当前行到下一行)...

1715
来自专栏老付的网络博客

Vuejs template快速入门

一直想写一个Vuejs的系列的博客,苦于一直没有时间,今天的这个博客也是思考了很久,打算随便写点东西,今天说说Vuejs的模版的使用。

2102
来自专栏Android干货园

popwindow 被魅族虚拟键挡住

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/45...

1454
来自专栏数据小魔方

数据地图系列9|excel(VBA)数据地图!

今天要跟大家分享的是数据地图系列的第九篇——excel(VBA)数据地图! 关于VBA在excel中的应用非常广泛,本篇仅仅是给出示例代码,不会对基础操作做太过...

4466
来自专栏Java成神之路

[转]Eclipse快捷键_01_常用快捷键汇总

Shift+Alt+L:  自动补全等号左边对象 。(用鼠标选中这一行,然后按组合键Shift+Alt+L,在弹出的对话框中点击OK,或者可以修改变量名, 实际...

1053
来自专栏程序员的知识天地

七夕快到了!表白小程序制作详解,撩翻你的女神!

大家可能都会在抖音上刷过,那种表白小程序,但在我看来表白还是亲口说出来比较好,这类小程序只适合在平常的一些小节日给对方一个惊喜。话不多说,现在进入正题:

1441
来自专栏哈雷彗星撞地球

(译)快速指南:用UIViewPropertyAnimator做动画

翻译自:QUICK GUIDE: ANIMATIONS WITH UIVIEWPROPERTYANIMATOR 译者:Haley_Wong

533
来自专栏hightopo

原 Web SCADA 电力接线图工控组态

1945
来自专栏个人随笔

Java Eclipse和MyEclipse快捷键

 首先: 常用快捷键 alt+/ - - 万能快捷键 Ctrl+1 - - 快速修复 Eclipse和MyEclipse快捷键 (1)Ctrl+M --切换窗口...

3539
来自专栏mukekeheart的iOS之旅

Mac和Xcode常用的快捷键

Mac电脑一般都不怎么用鼠标,因此除了触摸屏的各种双指、三指甚至四指的操作之外,快捷键的使用可以带来非常大的便利,本文则主要收集整理了自己在Mac常规和Xcod...

42213

扫码关注云+社区