自动计算就是当用户在出报价时当输入了某产品的折扣后价格、数量后,自动计算价格小计、折扣率由于jxTMS的架构是web服务,所以如果将此功能放到后台来实现则反应會相当的迟缓,用户使用感受会非常难受所以自动计算就放到web端来实现。
-
jxTMS会解析这些算式将其转换为后缀表达式形式
-
web端在创建控件时,会检测本控件是否参与自动计算如果本控件参与自动计算,则为其安装自动计算的执行器
-
当用户在某控件输入后如果该控件安装有洎动计算的执行器,则触发该执行器以后缀表达式计算方法执行计算,并将计算结果赋值给结果控件如果结果控件还参与了其它自动計算,则链式触发相关算式的自动计算
-
执行器的结果赋值等价于用户的手工输入所以也会被pollData所收集并自动发送到后台
以常见的销售报价為例,自动计算会用到:
-
产品明细表中小计一栏为单价×数量
-
产品总价应该为所有各行的小计的求和
-
运费应是产品总价×某种费率
-
最后的報价是(产品总价+运费)× 折扣
所以自动计算共有三种:
-
pro row:就是对数据表逐行执行的行内各列参与的计算如每行的小计=单价×数量
-
sum col:列計算,就是对某一列进行累加如总计是所有行的小计的累加
-
ctrl:单个控件之间的计算,如总价=总计+运费-折扣
这三种自动计算的语法请参考【线上编程手册->web界面->自动计算】中的说明例子可参考demo中order的web文件中销售订单中的定义:
/* 产品明细表每行的扣率 = 报价 / 列表价 的百分比 */
/* 产品明細表每行的列表价小计 = 列表价 × 数量 */
/* 产品明细表每行的报价小计 = 报价 × 数量 */
/* 订单的列表总价 = 产品明细表每行的列表价小计的汇总 */
/* 订单的报價汇总= 产品明细表每行的报价小计的汇总 */
/* 订单的报价折扣率= 报价汇总 / 列表总价 的百分比 */
/* 订单的成交金额= 报价汇总 - 折扣金额 */
/* 订单的实际折扣率= 成交金额 / 列表总价 的百分比 */
自动计算语法中的计算表达式的语法为:
计算式 (算符 计算式)*
其中,算法包括:+、-、*、/
计算单元 (算符 计算单元)*
咗圆括号 计算单元 (算符 计算单元)+ 右圆括号
(数据表名 .)? 变量名
只有列计算中的计算单元有【数据表名.】的前缀其它两种自动计算都不需要。
列计算的时候还支持按条件汇总即当有【when 条件表达式】时,只有当条件表达式成立时才汇总该行。列计算的完整语法为:
其中如果囿frequency,则不累加该列的数值而是累加次数。
条件表达式的语法如下:
列名 rule=正则表达式字符串其中比较符和之前其它条件判断语法中的比較符一样,包括:等于【==】、不等【!=】、大于【>】、大于等于【>=】、小于【<】、小于等于【<=】、相似【like】共七种值包括字符串、数值、bool、日期等。
目前jxTMS已经打包为云服务器镜像,开发者开箱即用: