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用于制作数据

 public class PieChartController {
public Map<String,Integer> goodsBrandNumberMap = new Map<String,Integer>();
public Set<String> goodsBrand{get;set;}
public PieChartController() {
Map<String, object> goodsBrandValuesMap = PickListValuesUtil.getPicklistValues('Goods__c','GoodsBrand__c');
goodsBrand = goodsBrandValuesMap.keySet();
List<Goods__c> goodsList = [select Id,GoodsBrand__c from Goods__c where GoodsBrand__c <> null];
for(Goods__c currentGoods : goodsList) {
if(goodsBrand.contains(currentGoods.GoodsBrand__c)) {
if(goodsBrandNumberMap.keySet().contains(currentGoods.GoodsBrand__c)) {
goodsBrandNumberMap.put(currentGoods.GoodsBrand__c,goodsBrandNumberMap.get(currentGoods.GoodsBrand__c) + 1);
} else {
goodsBrandNumberMap.put(currentGoods.GoodsBrand__c,1);
}
}
}
} public List<Data> getGoodsBrandPieData() {
List<Data> pieWdegeData = new List<Data>();
for(String goodsBrandName : goodsBrandNumberMap.keySet()) {
Data data = new Data(goodsBrandName + '\n' + goodsBrandNumberMap.get(goodsBrandName),goodsBrandNumberMap.get(goodsBrandName),goodsBrandName);
pieWdegeData.add(data);
} return pieWdegeData;
} // Wrapper class
public class Data {
//label
public String chartLabel { get; set; }
//the value of chart label
public Decimal valueOfChartLabel { get; set; }
//tip customize
public String tipOfChartLabel {get;set;}
//tip customize
public Decimal tipOfLabelValue{get;set;} public Data(String chartLabel,Decimal valueOfChartLabel) {
this.chartLabel = chartLabel;
this.valueOfChartLabel = valueOfChartLabel;
} //if the label of tip need to customize,choose this
public Data(String chartLabel,Decimal valueOfChartLabel,String tipOfChartLabel) {
this(chartLabel,valueOfChartLabel);
this.tipOfChartLabel = tipOfChartLabel;
} //if both the label of tip and the value of tip need to customize ,choose this
public Data(String chartLabel,Decimal valueOfChartLabel,String tipOfChartLabel,Decimal tipOfLabelValue) {
this(chartLabel,valueOfChartLabel,tipOfChartLabel);
this.tipOfLabelValue = tipOfLabelValue;
}
}
}

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

2.Page页面显示数据

 <apex:page controller="PieChartController" title="Pie Chart"> 

     <apex:chart data="{!goodsBrandPieData}" height="400" width="500" colorSet="#0A224E,#BF381A,#A0D8F1,#E9AF32,#E07628">
<apex:legend position="bottom"/>
<apex:pieSeries labelField="chartLabel" dataField="valueOfChartLabel" donut="50">
<apex:chartLabel display="none" orientation="vertical" font="bold 18px Helvetica"/>
<apex:chartTips labelField="tipOfChartLabel"/> </apex:pieSeries>
</apex:chart> </apex:page>

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

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

 <apex:page controller="PieChartController" title="Pie Chart"> 

     <apex:chart data="{!goodsBrandPieData}" height="400" width="500">
<apex:legend position="bottom"/>
<apex:pieSeries labelField="tipOfChartLabel" dataField="valueOfChartLabel" donut="50">
</apex:pieSeries>
</apex:chart> </apex:page>

显示效果如下图所示

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

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

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

  1. salesforce 零基础学习(十六)Validation Rules & Date/time

    上一篇介绍的内容为Formula,其中的Date/time部分未指出,此篇主要介绍Date/time部分以及Validation rules. 本篇参考PDF: Date/time:https://r ...

  2. salesforce零基础学习(九十六)Platform Event浅谈

    本篇参考:https://developer.salesforce.com/blogs/2018/07/which-streaming-event-do-i-use.html https://trai ...

  3. salesforce零基础学习(九十六)项目中的零碎知识点小总结(四)

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.216.0.apexcode.meta/apexcode/apex_classes_ke ...

  4. salesforce 零基础学习(十八)WorkFlow介绍及用法

    说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow. 当你分配许多任务,定期发送电子邮件,记录修改时,可以通过自动配置workflow来完成以上 ...

  5. salesforce 零基础学习(十九)Permission sets 讲解及设置

    Permission sets以及Profile是常见的设置访问权限的方式. Profile规则为'who see what'.通过Profile可以将一类的用户设置相同的访问权限.对于有着相同Pro ...

  6. salesforce lightning零基础学习(四) 事件(component events)简单介绍

    lightning component基于事件驱动模型来处理用户界面的交互.这种事件驱动模型和js的事件驱动模型也很相似,可以简单的理解成四部分: 1.事件源:产生事件的地方,可以是页面中的输入框,按 ...

  7. salesforce零基础学习(一百零五)Change Data Capture

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.232.0.api_streaming.meta/api_streaming/using ...

  8. salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见

    项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...

  9. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

随机推荐

  1. 今个忽然晓得,原来radio不是普通去获取值的!

    今日,写js校验.对于不太会的,总是陌生的.碰见radio的取值,习惯的用document.getElementsByName("")[0].value去获取值,却忘记了radio ...

  2. springboot使用之四:错误页面404处理建议

    每个项目可能都会遇到404,403,500等错误代码,如没有错误页面,则会给用户一个很不友好的界面,springboot项目同样也存在这个问题. 但在官方文档并没有相关配置信息,这就要求我们自己来实现 ...

  3. XAF ListView 移除顶部工具栏

    此方法适用于C/S及B/S,无需分别写在web和win中. Module下新建ViewController,代码如下: public partial class GongZuoJiaoShen_Yin ...

  4. 3_for循环的拓展应用

    HTML代码: <input type="button" value="1"/> <input type="button" ...

  5. IIS支持解析json

      IIS支持解析json 一. windows XP   1. MIME设置: 在IIS的站点属性的HTTP头设置里,选MIME 映射中点击"文件类型"-"新类型&qu ...

  6. 比较C++和C#的一个性能问题

    C++:只要你的代码正确,算法良好,你比较少关注性能问题,编译器会替你搞定绝大部分工作 C#:你的代码正确,算法良好,你还得用工具去分析优化性能,JIT为了快速工作,很多优化工作没有深入开展. 手工优 ...

  7. Texture Atlas

    Texture atlas [1][2] is a technique to group smaller textures into a larger texture. This decreases ...

  8. .Net下的 ORM框架介紹

    在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...

  9. fatal error C1083: 无法打开预编译头文件:“Debug\a.pch”:No such file or directory

    一.解决方法 右键点击你创建的项目,选择“属性标签”点击属性,弹出“项目属性页”,在左侧找到以下位置  配置属性 -->  C/C++  --> 预编译头,并选择它:在右边的菜单中选择 “ ...

  10. 团队项目——站立会议 DAY11

    团队项目--站立会议 DAY11        团队成员介绍(5人):张靖颜.何玥.钟灵毓秀.赵莹.王梓萱        今日(2016/5/20),站立会议已进行了两周时间,将这一周所遇到的问题和心 ...