dfx 增加数据脚本,一直增加数据,数据是通过 java api 传递过来,集算器负责存储数据,数据不再存储到其他数据库上。
java 调用 dfx 脚本 public void updateToAddByEsproc(String switchboard_id, Form form, List listObject) throws Exception { Long time = System.currentTimeMillis();
// 获取结果集
Connection con = null;
ResultSet rs = null;
String ctxName = form.getId()+DateUtils.currentStrDate()+"updateToAdd.ctx";
//增加表的数据,数据从参数中获取
String fileName = EsProcUtils.formDataLengAppendDataDfx();
try {
// 建立连接
con = EsProcUtils.getConnection();
com.esproc.jdbc.InternalCStatement st = (com.esproc.jdbc.InternalCStatement) con.prepareCall(fileName);
//组装表单字段信息
List<String> tablenewFormFeild = getTablenewFormFeild(switchboard_id, form);
//判断这个文件是否存在,如果不存在则创建表结构
st.setObject(1, "\""+ctxName+"\"");
st.setObject(2, StringUtils.collectionToString(tablenewFormFeild));
st.setObject(3, EsProcUtils.basicDBObjectToArrayDfx(tablenewFormFeild, listObject));
// 执行存储过程
boolean hasResult = st.execute();
} catch (Exception e) {
if(e.getMessage()!=null && e.getMessage().contains(ctxName)){
//文件不存在
updateToStructureAndAddDataByEsproc(switchboard_id, form, listObject);
}else {
throw e;
}
} finally {
EsProcUtils.close(rs, con);
log.debug("耗时:"+(System.currentTimeMillis()-time)+"ms");
}
}
数据对象通过 api 传递给集算器的时候,数据报错 /** * mongodb 数据对象 BasicDBObject 转换成集算器对象 * @author conca * @date 2023 年 4 月 26 日 下午 3:53:36 * @param tablenewFormFeild 字段顺序 * @param basicDBObject 数据对象 * @return */ public static Object[] basicDBObjectToArrayDfx(List tablenewFormFeild, List listObject) { List list = new ArrayList(); Object value = null; for (BasicDBObject basicDBObject : listObject) { for (String feild : tablenewFormFeild) { value = basicDBObject.get(feild); if(value!=null) { // if(value instanceof Timestamp) { // value = “datetime("”+DateUtils.formatTime((Timestamp)value, “yyyy-MM-dd HH🇲🇲ss.SSS”)+“","yyyy-MM-dd HH🇲🇲ss.SSS")”; // }else if(value instanceof java.sql.Date) { // value = “datetime("”+DateUtils.dateFormat((java.sql.Date)value, “yyyy-MM-dd”)+“","yyyy-MM-dd")”; // }else if(value instanceof Date) { // value = “datetime("”+DateUtils.formatUtilDate((Date)value, “yyyy-MM-dd HH🇲🇲ss.SSS”)+“","yyyy-MM-dd HH🇲🇲ss.SSS")”; // }
// if(value instanceof Timestamp) { // value = “datetime("”+DateUtils.formatTime((Timestamp)value, “yyyy-MM-dd HH🇲🇲ss.SSS”)+“")”; // }else if(value instanceof java.sql.Date) { // value = “datetime("”+DateUtils.dateFormat((java.sql.Date)value, “yyyy-MM-dd”)+“")”; // }else if(value instanceof Date) { // value = “datetime("”+DateUtils.formatUtilDate((Date)value, “yyyy-MM-dd HH🇲🇲ss.SSS”)+“")”; // }
if(value instanceof Timestamp) {
value = "datetime("+DateUtils.formatTime((Timestamp)value, "yyyy-MM-dd HH🇲🇲ss.SSS")+")";
}else if(value instanceof java.sql.Date) {
value = "datetime("+DateUtils.dateFormat((java.sql.Date)value, "yyyy-MM-dd")+")";
}else if(value instanceof Date) {
value = "datetime("+DateUtils.formatUtilDate((Date)value, "yyyy-MM-dd HH🇲🇲ss.SSS")+")";
}
// if(value instanceof Timestamp) { // value = new Date(((Timestamp)value).getTime()); // }else if(value instanceof java.sql.Date) { // // }else if(value instanceof Date) { // // } } list.add(value); } } return list.toArray(); }
Timestamp 类型不转换就报错,报错图如下:
如果将 Timestamp 类型转换成 datetime 格式字符串,集算器存储成字符串了,不是日期类型。
脚本:
form_data_leng_append_datazip
应该传什么样的参数取决于集算器脚本的写法.
如果脚本里写成:=arg1,那么给 arg1 传的参数就应该是日期类型的值
如果脚本里写成:=datetime(arg1),那么给 arg1 传的参数就应该是字符串类型的值
如果脚本里写成:=eval(arg1),那么给 arg1 传的参数就应该是表达式字符串,大概 datetime(“2023-04-25 11:11:22”) 这个样子的串
ctx 组表有 4 个字段,_id 字符串类型,data_time 时间类型,group_id 字符串类型,update_at 时间类型,
=create(${ziduan}).record(${jilu})
=A1.append@a (A2.cursor())
变量 ziduan 和 jilu 是通过 java 传值过来的。
例如:
ziduan 变量值:_id,data_time,group_id,update_at
jilu 变量值:“1”,“2023-04-25 11:11:22”,“1”,“2023-04-25 11:11:22”
data_time,update_at 要求 ctx 是时间类型,现在是字符串类型。
参照文档,我现在需求是日期时间类型怎么书写?
${jilu} 跟我举的 eval 的例子一样
A1 的值是个串:[1,datetime(“2023-04-25 11:11:22”),2,datetime(“2023-04-26 11:11:22”)]
这跟参数一个道理,参数也组成这个样子的串
你的例子数据直接写死的,我的案例中不能写死,通过变量传递过来的。我写了一个脚本,请执行我的脚本验证。
test_append_data_datezip
你的例子数据直接写死的,我的案例中不能写死,通过变量传递过来的。我写了一个脚本,请执行我的脚本验证。
请用这个测试脚本 http://img.raqsoft.com.cn/file/2023/05/c3449afadab84be79f46face9937a6a1_test_append_data_date.zip
一样的道理,在 ide 参数编辑页面输入的默认值会被做 parse
这个例子 jilu 的值输入的是 [datetime(“2023-04-25 11:11:22”),true],这个会被解析成序列,值分别是串 "datetime(“2023-04-25 11:11:22”)" 和布尔值 true。
按照脚本里对 jilu 参数的用法,这个参数值应该是个串才对,正确的默认值应该是:‘[datetime(“2023-04-25 11:11:22”),true]。
注意前面有个’,这个符号表示这个参数的值是串。
‘这个官方文档请给一下,我重点学习一下‘, 谢谢
报这个错误
参数写法如下:
’
英文的单引号,你这个是中文的吧
‘这个官方文档请给一下,我重点学习一下‘, 谢谢
入门 - 单元格类型 (raqsoft.com.cn)
谢谢