前言

所谓,一图胜千言。人脑有80%的部分专门用于视觉处理。而随着数据时代的全面来临,我们自然有必要将数据转化为图形与图表。

Mbos是一个快速,稳定的云端轻应用开发平台。帮助企业快速开发移动应用,加快企业工作效率,为企业创造更多的效益。mbos移动设计器,可以在线进行界面设计,发布成移动云之家轻应用,方便开发,快捷交付!

其中,移动设计器还包含表单、列表、图表、控件等功能,支持在线js、css、服务端函数编辑。可以根据企业需要,快速定制开发轻应用。言归正传,下面介绍一下,在项目中,使用mbos图表功能做的财务预警轻应用中的一个图表化模块。

下面先上一个效果图:

动态参数-枚举控件

这里的每个枚举控件,都在属性中进行设置,绑定枚举数据源。这里因为选项都较为固定,因此可采用自定义枚举数据源,进行手动维护。

枚举控件设计的逻辑思维

  例如上面的枚举控件中,企业与国资委对标值进行比对,企业状态分为三种:正常、关注、重点关注,而且状态相对固定,因此这块可以使用自定义枚举数据源。年份以及起始月,结束月还有预警指标(固定)同样的可以采用自定义枚举数据源进行维护。而公司这块,因为需要跟随 选择的状态的不同,需要在公司这个枚举控件的下拉框中显示 该状态对应的公司。因此需要写服务端函数进行 传递状态值 获取公司,然后将获得的公司列表赋值给公司这个枚举控件。

控件-数据源

选着好数据源,例如函数数据源,定义好数据源,然后编写服务端函数,绑定到该数据源上即可。

下面给出服务端函数 getComByStatus code:

传递参数: 通过JS的页面加载事件中参数赋值,传递给该服务端函数。 然后服务端函数及西宁获取传递的参数,进行条件查询。

   var newStatus = "关注";
var newYear = "2017";
var newMon = "4";
// newStatus,newYear,newMon
// mbos('selCompany').open();
mbos("dsScript1").refresh();
mbos('dsScriptCom').setParam({newStatus,newYear,newMon});
 // var adc;
// var status = @{varStatus};
var status = context.getParamAsString(0);
var year = context.getParamAsString(1);
var month = context.getParamAsString(2);
// adc = "123";
var sbSQL = new java.lang.StringBuffer();
sbSQL.append("select cfcompanyName from CT_FIN_RiskItem where 1=1");
sbSQL.append(" and cfflag = 1");
sbSQL.append(" and cfyear = " + year);
sbSQL.append(" and cfmonth = " + month);
sbSQL.append(" and cfstatus = " + "'"+status+"'");
sbSQL.append(" order by cfsortnum");
var list = context.getDBUtil().executeQueryAsList(sbSQL.toString());
var list2 = new java.util.ArrayList();
for(var i = 0; i < list.size(); i++){
var ob = new java.util.HashMap();
var bb;
var companyName = list.get(i).toString();
bb= companyName.substring(15,companyName.length()-1);
ob.put("alias",bb);
// ob.put("isenum",true);
ob.put("value",bb);
list2.add(ob);
}
// throw list2;
// throw companyName;
context.setResult(list2);

图表-折线图

在控件中选择折线图,然后给折线图绑定函数数据源,在给函数数据源绑定服务端函数,只需要编辑服务端函数即可。图表的一般都需要结合服务端变量,根据服务端变量值的改变,实现图表动态刷新。

折线图所有的函数数据源绑定的服务端函数 getData code:

 /*Codeing**/
// var ctx = context.getBosContext();
var list22;
var obj1;
var obj2;
var obj3;
var obj4;
//获取服务端变量值
var year = @{varYear}; list22 = new java.util.ArrayList();
var monStart = @{varMonStart};
obj1 = new java.util.HashMap(); var monEnd =@{varMonEnd};
obj2 = new java.util.HashMap();
var companyName = @{varCompanyName};
obj3 = new java.util.HashMap();
var item =@{varItem}; obj4 = new java.util.HashMap();
//组装主查询sql
var sb = new java.lang.StringBuffer();
sb.append(" select ");
sb.append(" cfmonth as 月份, ");
if(item == "营业利润"){
sb.append(" CT_FIN_SasacEntry.cfpoor as 平均值, ");
sb.append(" CT_FIN_SasacEntry.cfaverage as 较差值, ");
}else{
sb.append(" CT_FIN_SasacEntry.cfpoor/100 as 平均值, ");
sb.append(" CT_FIN_SasacEntry.cfaverage/100 as 较差值, ");
} if(item == "资产负债率"){
sb.append(" round(cftotalLiabilites/cftotalAssets,4) as 企业数据 ");
}else if(item == "营业利润"){
sb.append(" round(cftrafficProfit/10000,4) as 企业数据 ");
}else if(item == "己获利息倍数"){
sb.append(" round((cftotalProfit+cfinterestExpense)/cfinterestExpense,4) as 企业数据 ");
}else if(item == "流动比率"){
sb.append(" round(cfcurrentAssets/cfcurrentLiabilities,4) as 企业数据 ");
}else if(item == "两金占流动资产比重"){
sb.append(" round((cfaccountReceivable+cfstock)/cfcurrentAssets,4) as 企业数据 ");
}else if(item == "速动比率"){
sb.append(" round((cfcurrentAssets-cfstock)/cfcurrentLiabilities,4) as 企业数据 ");
}else if(item == "现金流动负债比率"){
sb.append(" round(cfoperaCashFlow/cfcurrentLiabilities,4) as 企业数据 ");
}else if(item == "带息负债比率"){
sb.append(" round((cfshortLoan+CFOneYearLongLiabilities+cflongLoan+CFBondsPayable+CFInterestPayable)/cftotalLiabilites,4) as 企业数据 ");
}else if(item == "或有负债比率"){
sb.append(" round((CFDraft+CFBalance+CFAmountOfmatter+CFContingentLiabilities)/cfownerRights,4) as 企业数据 ");
}else if(item == "平均融资成本率"){
sb.append(" round(CFTotalCosts/CFFinancingCost,4) as 企业数据 ");
}
//组装表 条件查询
sb.append(" from CT_FIN_RiskItem as CT_FIN_RiskItem ");
sb.append(" INNER join CT_FIN_Sasac as CT_FIN_Sasac on CT_FIN_RiskItem.cfyear = CT_FIN_Sasac.cfyear ");
sb.append(" INNER join CT_FIN_SasacEntry as CT_FIN_SasacEntry on CT_FIN_Sasac.fid = CT_FIN_SasacEntry.fparentid ");
sb.append(" where CT_FIN_RiskItem.cfyear = " + year);
sb.append(" and CT_FIN_RiskItem.cfcompanyName = " +"'"+ companyName+"'");
sb.append(" and CT_FIN_SasacEntry.cfname = " + "'" + item + "'");
sb.append(" and CT_FIN_RiskItem.cfmonth >= " + monStart);
sb.append(" and CT_FIN_RiskItem.cfmonth <= " + monEnd);
sb.append(" order by cfmonth"); //执行查询企业数据
var list = context.getDBUtil().executeQueryAsList(sb.toString());
if(list.toString().length()>0){
context.setResult(list);
}
// context.setResult(list);
// throw list;

控件-变量


在控件中选择变量,定义服务端变量。服务端变量 需要通过 值改变事件 进行赋值 以及初始化。(服务端变量一定在JS中进行初始化)

为每个枚举控件绑定 值改变事件。

JS端

  包含 每个控件的值改变事件,将对应控件选中的值 赋值给对应的 服务端变量,并进行刷新取数数据源。借助服务端变量进行图标数据源的属性,动态图表根据选择参数的不同,取数后的数据改变,导致图表的动态刷新!控件的初始化赋值(必须要做的操作,虽然会有点影响加载性能)  在用page 绑定 afterOnload 事件(页面加载后进行)进行初始化的赋值。

 _this.changeSelYear = function(event){
mbos.variable.setValue("varYear",event.new_value.alias);
mbos("dsScript1").refresh();
}
_this.changeSelectItem = function(event){
mbos.variable.setValue("varItem",event.new_value.alias);
mbos("dsScript1").refresh();
} _this.changeStartMonth = function(event){
mbos.variable.setValue("varMonStart",event.new_value.alias);
mbos("dsScript1").refresh();
}
_this.changeEndMonth = function(event){
var endMon = event.new_value.alias;
var startMon = mbos("selectMonthStart").value().alias;
// if(endMon < startMon){
// var param = {title:"错误",msg:"请正确选择月份",timeOutFn:function(data){if(data==0){alert("确定按钮")}}};
// mbos.ui.showError(param);
// }
mbos.variable.setValue("varMonEnd",endMon);
mbos("dsScript1").refresh();
}
//预警状态 值改变
_this.changeStatus = function(event){
mbos.variable.setValue("varStatus",event.new_value.alias);
var newStatus = event.new_value.alias;
var newYear = mbos("selYear").value().alias;
var newMon = mbos("selectMonthStart").value().alias; //刷新 获取公司函数源
mbos("dsScript1").refresh();
mbos('dsScriptCom').setParam({newStatus,newYear,newMon});
}
//selCompany
_this.changeCompany = function(event){
mbos.variable.setValue("varCompanyName",event.new_value.alias);
mbos("dsScript1").refresh();
} //页面加载后初始化
mbos('page').bind("afterOnload",function(){
//设置初始值 每个都要有初始值..顺便给控件赋初始值
mbos.variable.setValue("varYear",'2017');
mbos.variable.setValue("varItem",'资产负债率');
mbos.variable.setValue("varMonStart",'4');
mbos.variable.setValue("varMonEnd",'5');
mbos.variable.setValue("varStatus",'关注');
// mbos.variable.setValue("varCompanyName",'百利装备');
// debugger;
//组织隔离
var company = easContext[0].name;
if(company =="天津百利机械装备集团有限公司"){
mbos.variable.setValue("varCompanyName",'百利装备');
mbos('selCompany').value({
alias: "百利装备",
isenum: true,
value: "百利装备"
});
}else{
//禁用枚举 公司 和状态控件
mbos('selCompany').disable();
mbos('selStatus').disable();
// mbos('selStatus').remove();
// 赋值公司值为 当前组织公司
mbos.variable.setValue("varCompanyName",company);
mbos('selCompany').value({
alias:company,
isenum: true,
value: company
});
} mbos('selYear').value({
alias: "2017",
isenum: true,
value: "2017"
}); mbos('selectItem').value({
alias: "资产负债率",
isenum: true,
value: "资产负债率"
}); mbos('selectMonthStart').value({
alias: "4",
isenum: true,
value: "4"
}); mbos('selectMonthEnd').value({
alias: "5",
isenum: true,
value: "5"
});
// mbos('selStatus').value({
// alias: "关注",
// isenum: true,
// value: "关注"
// }); // mbos('selCompany').value({
// alias: "百利装备",
// isenum: true,
// value: "百利装备"
// });
var newStatus = "关注";
var newYear = "2017";
var newMon = "4";
// newStatus,newYear,newMon
// mbos('selCompany').open();
mbos("dsScript1").refresh();
mbos('dsScriptCom').setParam({newStatus,newYear,newMon}); })

至此,图表制作的步骤就介绍完毕了,多参考开发文档:https://mbos.kingdee.com/doc/index.html

mbos之动态图表设计的更多相关文章

  1. 开源来自百度商业前端数据可视化团队的超漂亮动态图表--ECharts

    开源来自百度商业前端数据可视化团队的超漂亮动态图表--ECharts 本人项目中最近有需要图表的地方,偶然发现一款超级漂亮的动态图标js图表控件,分享给大家,觉得好用的就看一下.更多更漂亮的演示大家可 ...

  2. EXCEL 2010学习笔记—— 动态图表

    今天梳理一下动态图表的相关内容,做一个简单的整理 关键的操作点: 1.插入动态控制器:开发工具->插入->表单控件 对控件进行修改  右键 设置控件格式->单元格链接 用来作为if ...

  3. 使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示

    原文:使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示 首先来看一看实现的效果: PS:原始的程序中更新曲线数据时添加了过渡的效果,具体可 ...

  4. PPT里面实现动态图表

    今天又被学生提问,可不可以在PPT中做类似Excel中的动态图表?Excel里实现动态图表的方法通常是将图表关联到一个固定的数据区域,然后通过其他单元格的值或者控件来改变该固定区域的数据,以达到动态改 ...

  5. Excel动态图表

    动态图表其实一点都不难,真的!先看效果,然后教你一步步实现.这是每个地区经销跟代销的数据.Step 01在开发工具插入表单控件.Step 02将表单控件调整到合适的大小,并设置控件格式.Step 03 ...

  6. 如何使用DAX函数解决动态图表标题

    您可能知道,Power BI中的图表(以及许多其他可视化)具有可以设置为任何静态文本的标题.您可以通过选择图表,转到“可视化对象”窗格中的“格式”选项卡,然后更改“标题”部分中的属性(如下所示)来完成 ...

  7. Java学习---JFreeChart动态图表

    JFreeChart是Java中开源的制图组件,主要用于生成各种动态图表.在Java的图形报表技术中,JFreeChart组件提供了方便.快捷.灵活的制图方法.作为一个功能强大的图形报表组件,JFre ...

  8. jxls实现动态图表

    此文章是基于 jxls实现基于excel模板的报表 一. 制作excel动态图表模板 1. 安装 excel 2003 ,新建文件,命名为:runRecord.xls 2. 创建两个表格,分别命名为: ...

  9. Chart.js 动态图表的使用

    一.相关资料 1. 简介 Chart.js 是一个基于 HTML5 的简单的面向对象的图表库,支持包括 IE7/8 和所有现代浏览器.支持六种图标:曲线图(Linecharts).柱状图(Barcha ...

随机推荐

  1. javascript所有的节点和方法

    属性: 1.Attributes 存储节点的属性列表(只读) 2.childNodes 存储节点的子节点列表(只读) 3.dataType 返回此节点的数据类型 4.Definition 以DTD或X ...

  2. HybridApp Exception

    HybridApp Exception [创建安卓虚拟机失败]CPU acceleration status:HAXM must be updated(version 1.1.1<6.0.1) ...

  3. MVC通过递归+部分视图实现评论

    前一个项目里有一个关于评论系统的需求.感觉这个评论的实现还是蛮好玩的,所以记录下这个系统的实现相关内容. 功能需求: 1.用户可以再视屏下方留言. 2.用户可以再别的用户留言下方回复. 3.用户可以删 ...

  4. JAVAEE——SSH项目实战02:客户列表和BaseDao封装

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7129152.html 该项目在SSH三大框架整合基础上进行开发:http://www.c ...

  5. 如何编写高效的SQL

    编写高效的sql可以给用户带来好的体验,需要开发这没有意识到这一点因为他们不关心也不知道怎么做.高效的sql可以给用户节省很多时间,这样就不需要dba来找上门,也不需要搭建RCA和性能调优. 性能不好 ...

  6. 打包可执行的jar

    #配置项目路径 *除程序文件以外,其他相关素材也可以打包进jar,但在内部访问时需以包名作为跟路径,如hello/xxx/yyy.zzz mkdir hello vi hello/HelloWorld ...

  7. JavaScript 第一课

    今天进入到了js的阶段,了解到了JavaScript是一个很重要的阶段,所以要好好的理清每一个知识点 JavaScript的使用:   在<head>标签里应用<script> ...

  8. js中表单的聚焦失焦事件

    焦点事件: 不是所有元素都有焦点事件,只有可交互性的元素才有,比如表单元素,a标签.页面中只能有一个元素有焦点,一个聚焦,另一个就失焦,默认在document. 例子结构如下: <form> ...

  9. 从零搭建DotnetCore2.0

    右键解决方案>新建项目> 选择Web>ASP.NETCoreWeb应用程序(.NET Core) 选择Web应用程序,暂时不选择启用Docker,身份验证选择个人用户账户(会自动生成 ...

  10. Java基础语法<三> 输入输出

    1. 读取输入 Scanner in = new Scanner(System.in);   输入一行(包含空格) String str = in.nextLine()   读取一个单词(以空白符作为 ...