1.概述

在表单调用脚本时,有些情况下后端数据计算比较复杂,需要使用存储过程进行计算。下面我们使用一个简单的例子来实现存储过程的调用。

2.实现过程

2.1 编写存储过程

在表单的数据库中创建存储过程。

CREATE  PROCEDURE `proc_addNum`(in x int,in y int,out sum int,out sum2 int)
BEGIN
SET sum= x + y;
set sum2 =x +10;
end

这个存储过程很简单,就是实现两个数据相加,并返回。

2.2 添加数据源

我们需要在子系统中添加一个指向表单的数据源。

2.3 添加定制脚本

存储过程调用方法如下:

http://doc.redxun.cn/docs/jpaas/callprocedure

编写脚本如下:

import com.redxun.db.process.*;
import com.mysql.cj.MysqlType;
import com.redxun.common.utils.SpringUtil;
import com.alibaba.fastjson.JSONObject;
import java.util.List;
import java.sql.CallableStatement;
import java.sql.SQLException;


ProcedureHepler procedureHepler=SpringUtil.getBean(ProcedureHepler.class);
ParameterHelper helper=new ParameterHelper();
//增加输入参数
helper.addInParameter(ParameterType.INT,params.A)
.addInParameter(ParameterType.INT,params.B)
//添加输入参数
.addOutParameter(MysqlType.FIELD_TYPE_INT24)
.addOutParameter(MysqlType.FIELD_TYPE_INT24);

List<ProcParameter> parameterList = helper.getParameterList();
Integer rtn= (Integer) procedureHepler.callProc("form", "proc_addNum", parameterList, new IReturnData() {

    //处理返回值
    @Override
    public Object handStatement(CallableStatement statement) throws SQLException {
        Integer rtn= statement.getInt(3);
        return rtn;
    }
});

return rtn;

2.4 添加表单

我们需要做的是将A 和 B进行相加得到的结果填入到C。

在JS添加脚本如下:

var custFuntions=[{
  name:"calcform",
  action:function(){
  this.invokeScript("callProc",{"A":this.data.A,"B":this.data.B},(data)=>{
    this.data.C=data.data;
  });
  }
}];

测试如下:

文档更新时间: 2021-07-09 14:31   作者:zyg