mbos之动态图表设计

前言

所谓,一图胜千言。人脑有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});
 1 // var adc;
 2 // var status = @{varStatus};
 3 var status = context.getParamAsString(0);
 4 var year = context.getParamAsString(1);
 5 var month = context.getParamAsString(2);
 6 // adc = "123";
 7 var sbSQL =  new java.lang.StringBuffer();
 8 sbSQL.append("select cfcompanyName from CT_FIN_RiskItem where 1=1");
 9 sbSQL.append(" and cfflag = 1");
10 sbSQL.append(" and cfyear = " + year);
11 sbSQL.append(" and cfmonth = " + month);
12 sbSQL.append(" and cfstatus = " + "‘"+status+"‘");
13 sbSQL.append(" order by cfsortnum");
14 var list = context.getDBUtil().executeQueryAsList(sbSQL.toString());
15 var list2 = new java.util.ArrayList();
16 for(var  i = 0; i < list.size(); i++){
17     var ob = new java.util.HashMap();
18     var bb;
19     var companyName = list.get(i).toString();
20         bb= companyName.substring(15,companyName.length()-1);
21          ob.put("alias",bb);
22      // ob.put("isenum",true);
23         ob.put("value",bb);
24          list2.add(ob);
25 }
26 // throw list2;
27 // throw companyName;
28 context.setResult(list2);

图表-折线图

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

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

 1 /*Codeing**/
 2 // var ctx = context.getBosContext();
 3 var list22;
 4 var obj1;
 5 var obj2;
 6 var obj3;
 7 var obj4;
 8 //获取服务端变量值
 9 var year = @{varYear};
10
11 list22 = new java.util.ArrayList();
12 var monStart = @{varMonStart};
13 obj1 = new java.util.HashMap();
14
15 var monEnd =@{varMonEnd};
16 obj2 = new java.util.HashMap();
17 var companyName = @{varCompanyName};
18 obj3 = new java.util.HashMap();
19 var item =@{varItem};
20
21 obj4 = new java.util.HashMap();
22 //组装主查询sql
23 var sb =  new java.lang.StringBuffer();
24 sb.append(" select ");
25 sb.append(" cfmonth as 月份, ");
26 if(item == "营业利润"){
27    sb.append(" CT_FIN_SasacEntry.cfpoor as 平均值, ");
28    sb.append(" CT_FIN_SasacEntry.cfaverage as 较差值, ");
29    }else{
30     sb.append(" CT_FIN_SasacEntry.cfpoor/100 as 平均值, ");
31    sb.append(" CT_FIN_SasacEntry.cfaverage/100 as 较差值, ");
32    }
33
34 if(item == "资产负债率"){
35     sb.append(" round(cftotalLiabilites/cftotalAssets,4) as  企业数据 ");
36 }else if(item == "营业利润"){
37     sb.append(" round(cftrafficProfit/10000,4) as  企业数据 ");
38 }else if(item == "己获利息倍数"){
39     sb.append(" round((cftotalProfit+cfinterestExpense)/cfinterestExpense,4) as  企业数据 ");
40 }else if(item == "流动比率"){
41     sb.append(" round(cfcurrentAssets/cfcurrentLiabilities,4) as  企业数据 ");
42 }else if(item == "两金占流动资产比重"){
43     sb.append(" round((cfaccountReceivable+cfstock)/cfcurrentAssets,4) as  企业数据 ");
44 }else if(item == "速动比率"){
45     sb.append(" round((cfcurrentAssets-cfstock)/cfcurrentLiabilities,4)  as  企业数据 ");
46 }else if(item == "现金流动负债比率"){
47     sb.append(" round(cfoperaCashFlow/cfcurrentLiabilities,4) as  企业数据 ");
48 }else if(item == "带息负债比率"){
49     sb.append(" round((cfshortLoan+CFOneYearLongLiabilities+cflongLoan+CFBondsPayable+CFInterestPayable)/cftotalLiabilites,4) as  企业数据 ");
50 }else if(item == "或有负债比率"){
51     sb.append(" round((CFDraft+CFBalance+CFAmountOfmatter+CFContingentLiabilities)/cfownerRights,4) as  企业数据 ");
52 }else if(item == "平均融资成本率"){
53     sb.append(" round(CFTotalCosts/CFFinancingCost,4) as  企业数据 ");
54 }
55 //组装表 条件查询
56 sb.append(" from CT_FIN_RiskItem as CT_FIN_RiskItem ");
57 sb.append(" INNER join CT_FIN_Sasac as CT_FIN_Sasac on CT_FIN_RiskItem.cfyear = CT_FIN_Sasac.cfyear ");
58 sb.append(" INNER join CT_FIN_SasacEntry as CT_FIN_SasacEntry on CT_FIN_Sasac.fid = CT_FIN_SasacEntry.fparentid ");
59 sb.append(" where CT_FIN_RiskItem.cfyear = " + year);
60 sb.append(" and CT_FIN_RiskItem.cfcompanyName = " +"‘"+ companyName+"‘");
61 sb.append(" and CT_FIN_SasacEntry.cfname = " + "‘" + item + "‘");
62 sb.append(" and CT_FIN_RiskItem.cfmonth >= " + monStart);
63 sb.append(" and CT_FIN_RiskItem.cfmonth <= " + monEnd);
64 sb.append(" order by cfmonth");
65
66 //执行查询企业数据
67 var list = context.getDBUtil().executeQueryAsList(sb.toString());
68 if(list.toString().length()>0){
69   context.setResult(list);
70 }
71 // context.setResult(list);
72 // throw list;

控件-变量


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

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

JS端

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

  1 _this.changeSelYear = function(event){
  2     mbos.variable.setValue("varYear",event.new_value.alias);
  3     mbos("dsScript1").refresh();
  4 }
  5 _this.changeSelectItem = function(event){
  6     mbos.variable.setValue("varItem",event.new_value.alias);
  7     mbos("dsScript1").refresh();
  8 }
  9
 10 _this.changeStartMonth = function(event){
 11     mbos.variable.setValue("varMonStart",event.new_value.alias);
 12     mbos("dsScript1").refresh();
 13 }
 14 _this.changeEndMonth = function(event){
 15       var endMon = event.new_value.alias;
 16     var startMon =  mbos("selectMonthStart").value().alias;
 17         // if(endMon < startMon){
 18         // var param = {title:"错误",msg:"请正确选择月份",timeOutFn:function(data){if(data==0){alert("确定按钮")}}};
 19         // mbos.ui.showError(param);
 20         // }
 21     mbos.variable.setValue("varMonEnd",endMon);
 22     mbos("dsScript1").refresh();
 23 }
 24 //预警状态 值改变
 25 _this.changeStatus = function(event){
 26     mbos.variable.setValue("varStatus",event.new_value.alias);
 27   var newStatus = event.new_value.alias;
 28   var newYear = mbos("selYear").value().alias;
 29   var newMon = mbos("selectMonthStart").value().alias;
 30
 31   //刷新 获取公司函数源
 32     mbos("dsScript1").refresh();
 33     mbos(‘dsScriptCom‘).setParam({newStatus,newYear,newMon});
 34 }
 35 //selCompany
 36 _this.changeCompany = function(event){
 37     mbos.variable.setValue("varCompanyName",event.new_value.alias);
 38    mbos("dsScript1").refresh();
 39 }
 40
 41 //页面加载后初始化
 42 mbos(‘page‘).bind("afterOnload",function(){
 43   //设置初始值 每个都要有初始值..顺便给控件赋初始值
 44   mbos.variable.setValue("varYear",‘2017‘);
 45   mbos.variable.setValue("varItem",‘资产负债率‘);
 46    mbos.variable.setValue("varMonStart",‘4‘);
 47    mbos.variable.setValue("varMonEnd",‘5‘);
 48    mbos.variable.setValue("varStatus",‘关注‘);
 49    // mbos.variable.setValue("varCompanyName",‘百利装备‘);
 50   // debugger;
 51   //组织隔离
 52      var company = easContext[0].name;
 53   if(company =="天津百利机械装备集团有限公司"){
 54          mbos.variable.setValue("varCompanyName",‘百利装备‘);
 55          mbos(‘selCompany‘).value({
 56           alias: "百利装备",
 57           isenum: true,
 58           value: "百利装备"
 59         });
 60      }else{
 61        //禁用枚举 公司 和状态控件
 62         mbos(‘selCompany‘).disable();
 63         mbos(‘selStatus‘).disable();
 64        // mbos(‘selStatus‘).remove();
 65         // 赋值公司值为 当前组织公司
 66          mbos.variable.setValue("varCompanyName",company);
 67            mbos(‘selCompany‘).value({
 68             alias:company,
 69             isenum: true,
 70             value: company
 71             });
 72      }
 73
 74
 75   mbos(‘selYear‘).value({
 76     alias: "2017",
 77     isenum: true,
 78     value: "2017"
 79 });
 80
 81   mbos(‘selectItem‘).value({
 82     alias: "资产负债率",
 83     isenum: true,
 84     value: "资产负债率"
 85 });
 86
 87     mbos(‘selectMonthStart‘).value({
 88     alias: "4",
 89     isenum: true,
 90     value: "4"
 91 });
 92
 93     mbos(‘selectMonthEnd‘).value({
 94     alias: "5",
 95     isenum: true,
 96     value: "5"
 97 });
 98 //    mbos(‘selStatus‘).value({
 99 //       alias: "关注",
100 //       isenum: true,
101 //       value: "关注"
102 // });
103
104 //     mbos(‘selCompany‘).value({
105 //     alias: "百利装备",
106 //     isenum: true,
107 //     value: "百利装备"
108 // });
109    var newStatus = "关注";
110    var newYear = "2017";
111    var newMon = "4";
112   // newStatus,newYear,newMon
113    // mbos(‘selCompany‘).open();
114    mbos("dsScript1").refresh();
115    mbos(‘dsScriptCom‘).setParam({newStatus,newYear,newMon});
116
117 })
118             

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

时间: 2024-08-27 11:20:45

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

WPF自定义控件(2)——图表设计[1]

0.讲点废话 除了仪表盘控件比较常用外,还有图表也经常使用,同样网上也有非常强大的图表控件,有收费的(DVexpress),也有免费的.但我们平时在使用时,只想简单地绘一个图,控件库里面的许多功能我们都用不到,没必要使用那么功能丰富的控件,以提高程序运行的效率和减小程序的占用空间.同时,我们自己如果能够绘制图表出来,对于程序的移植,也非常方便.对于大部分平台,相信设计方法是不会变的. 1.图表整体设计 简单来看一个图表的组成,一般由4个部分组成,坐标轴,刻度和刻度值,绘图区域(添加数据点和绘制曲

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

今天梳理一下动态图表的相关内容,做一个简单的整理 关键的操作点: 1.插入动态控制器:开发工具->插入->表单控件 对控件进行修改  右键 设置控件格式->单元格链接 用来作为if 函数里的第一个变量位置 2.定义动态数据区域 利用函数进行调用 if 函数 offset函数  if 函数的三个参数都需F4锁定,因为if()函数的应用是要避免EXCEL表格中位置位置变化带来的值的变化. 3.定义名称:公式->定义名称-引用位置调整 .offset函数- 完成动态区域数据提取 下移n行

图表设计的介绍及指导

假如作为设计师的你,现在还不会做图表设计师的话,那么你很快要被淘汰了,今天这文章给同学们介绍图表3设计的的重要性,以及做图表的方法,技巧.希望能给与同学们帮助! 表数据,再帮你提高图表的易读性,内含大量实战案例,干货满满! 一.图表的目的和价值 图表设计是数据可视化的一个分支领域,是对数据进行二次加工,用统计图表的方式进行呈现.数据是事实或观察的结果,是对客观事物的逻辑归纳,通常一个具体的数字比一个模糊的说法更加具有可信度和说服力.但单纯的数字本身并不能提供足够的影响力,假设一个淘宝女装卖家3月

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

原文:使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示 首先来看一看实现的效果: PS:原始的程序中更新曲线数据时添加了过渡的效果,具体可查看官网的示例: http://www.visifire.com/silverlight_spline_charts_gallery.php 点击其中的一个例子,然后点击Live Updates,就可看到数据更新时的过渡效果.但是蛋疼的博客园,不知道为什么,我插入了我原始的xap文件,过渡效果却没有

动态图表制作——数据透视表+函数

大家都知道Excel的图表功能是简单而又强大的,使用Excel能做出很漂亮的商业图表,但是通常我们只做的图表都是静态的--一个图表只能显示一到二个数据维度的情况. 在Ecxel使用过程中,难免需要根据现有数据,制作可视化更高的更能说明问题的图表,在图表制作时,常规的往往只是利用已有的数据进行,如果一张工作表中,数据繁多,并希望每个数据(字段)都有图表出现,我们遵循常规方法制作n多个图表? 如果需要演示的数据有多组维度,比如不同年份不同部门的费用--,或者纵轴系列过多会导致在图形上观察数据的不便,

Android应用开发-从设计到实现 3-9 Origami动态原型设计

动态原型设计 动态的可交互原型产品,是产品经理和界面设计师向开发人员阐释自己设计的最高效工具. 开发者不需要猜测设计师要什么样的效果,照着原型产品做就好了. 很多创业团队也发现了产品人的这个刚需,做出了诸如Principle.Axure这类著名的原型设计产品. Facebook似乎也深谙此道,专门为安卓和iOS系统开发很有针对性的交互原型设计工具-Origami Studio. 这是一个免费的工具,而且也能和Sketch互通,所以我选择了它来向大家讲解互动原型的设计. 界面介绍 启动Origam

jxls实现动态图表

此文章是基于 1. jxls实现基于excel模板的报表 一. 准备工作 1. 点击此下载相关文件,并把文件放到 ims 工程对应的文件夹下 二. 制作excel动态图表模板 1. 安装 excel 2003 ,新建文件,命名为:runRecord.xls 2. 创建两个表格,分别命名为:设备运行记录卡.输出负载 3. 设置 输出负载 表格如下: A3单元格设置为时间格式:h:mm,以便图表的x轴可以按分钟展示 4. 点击   插入-->名称-->定义   创建定义名称如下: 名称: outT

Excel动态图表

动态图表其实一点都不难,真的!先看效果,然后教你一步步实现.这是每个地区经销跟代销的数据.Step 01在开发工具插入表单控件.Step 02将表单控件调整到合适的大小,并设置控件格式.Step 03设置数据源区域和单元格链接,单击确定.数据源区域就是要作为下拉选择的地区,单元格链接就是为了后面写公式引用的一个单元格.Step 04设置完,点击任一地区,比如内蒙,你会发现出现了一个数字,这个数字就代表在原来区域的第几个位置.Step 05复制表头,并输入公式.这样就将数据动态引用过来了.=OFF

swt动态图表实例

前段时间做了个linux信息采集系统,目的是在windows环境下监测linx主机的资源使用情况以及硬件的健康状况,采集到信息后需要以动态图表的形式显示出来,由于使用的swt的来做的界面,上网收缩后发现相关的资料很少,要么不能用,要么不适合,于是决定写个demo,方便以后使用,希望对有需要的人有所帮助.本demo使用的是jfreechart组件,这个demo是根据官网的demo改的,为了方便使用LinkedHashMap来维护数据,因为这是有序的,而且可以通过重写removeEldestEntr