找回密码
 注册成为天翎用户
查看: 3745|回复: 11

后台任务功能不执行

[复制链接]
you44369 发表于 2017-9-15 09:52:11 | 显示全部楼层 |阅读模式
本帖最后由 kelly 于 2017-9-18 10:56 编辑

自己写了一串脚本放在表单内可以执行,放在后台的定时任务里启动了任务但是执行tomcat报错,现在不知道错误原因是什么。图片中是出问题的地方

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册成为天翎用户

×
Jay 发表于 2017-9-15 11:18:24 | 显示全部楼层
您好,首先根据您的截图来看,您的启动类型那设置了禁止,应该根据您的业务选择手动或者自动。如图
,
然后能否把您Tomcat报错发下给我,方便分析您的问题,谢谢~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册成为天翎用户

×
回复

使用道具 举报

 楼主| you44369 发表于 2017-9-15 17:10:48 | 显示全部楼层
Jay 发表于 2017-9-15 11:18
您好,首先根据您的截图来看,您的启动类型那设置了禁止,应该根据您的业务选择手动或者自动。如图
,
然 ...

var sqlStr1 = "SELECT ITEM_采集时间,ITEM_设备名称,ITEM_主轴承温度,ITEM_设备编号,ITEM_产线名称,ITEM_轴温高限值,DOMAINID,APPLICATIONID,FORMID from TLK_主轴承温度信息";
var query1 = queryByDSName("GYKZ",sqlStr1);

只是做了一次简单的查询就会报错,我看了一下代码,是因为SQL执行前会获取数据库连接,然后application这个值无法获取到


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册成为天翎用户

×
回复

使用道具 举报

 楼主| you44369 发表于 2017-9-15 17:12:36 | 显示全部楼层
you44369 发表于 2017-9-15 17:10
var sqlStr1 = "SELECT ITEM_采集时间,ITEM_设备名称,ITEM_主轴承温度,ITEM_设备编号,ITEM_产线名称,ITEM ...

查看了任务生成的日志文件


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册成为天翎用户

×
回复

使用道具 举报

kelly 发表于 2017-9-15 17:18:50 | 显示全部楼层
您好,根据您提供的错误,您没有获得数据报的时空指针异常,您用的时queryByDSName("GYKZ",sqlStr1)这个函数,您可以参考:
2.10.24.        执行SQL查询操作
函数格式:
queryByDSName(dsName,sql)
函数说明:
dsName:数据源名称;
sql:SQL查询语句;
根据数据源名称,执行SQL查询, 返回SQL查询语句执行的结果,以Collection方式返回(存储的是数据记录的Map对象)。
注:数据源操作对象应用需要,软件->高级工具->数据源的支持。首先需要开发者在软件的数据源模块创建数据源。
示例:
实现queryByDSName(dsName,sql)函数的应用
实际示例:表单A字段的选项为默认软件为当前软件的用户对象 (kd为数据源名称)
var opts = createOptions();
opts.add("","");
try{
var sql = "select * from t_user where defaultapplication='"+getApplication()+"'";
var datas = queryByDSName("kd",sql);
if(datas!=null){
   for(var iterator = datas.iterator();iterator.hasNext();){
       var map1 = iterator.next();//取值
       var name= map1.get("name");
       var value = map1.get("id");
           opts.add(name,value);
        }
}
}catch(e){}
opts;
回复

使用道具 举报

 楼主| you44369 发表于 2017-9-15 17:30:41 | 显示全部楼层
kelly 发表于 2017-9-15 17:18
您好,根据您提供的错误,您没有获得数据报的时空指针异常,您用的时queryByDSName("GYKZ",sqlStr1)这个函 ...

我换成queryBySQL()这个查询,同样是会报错,错误跟之前的错误一样,都是提示的连接存在问题,是不是我们在查询数据的时候要加上applicationid=""这个条件?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册成为天翎用户

×
回复

使用道具 举报

 楼主| you44369 发表于 2017-9-15 17:35:17 | 显示全部楼层
you44369 发表于 2017-9-15 17:30
我换成queryBySQL()这个查询,同样是会报错,错误跟之前的错误一样,都是提示的连接存在问题,是不是我们 ...

我们这边的数据源已经设置过了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册成为天翎用户

×
回复

使用道具 举报

kelly 发表于 2017-9-15 18:39:04 | 显示全部楼层
本帖最后由 kelly 于 2017-9-15 18:57 编辑

您好,您可以参考这个定时任务器的代码作为参考:

var sqlStr1 = "SELECT ITEM_采集时间,ITEM_设备名称,ITEM_主轴承温度,ITEM_设备编号,ITEM_产线名称,ITEM_轴温高限值,DOMAINID,APPLICATIONID,FORMID from TLK_主轴承温度信息";
var process = createProcess("cn.myapps.core.dynaform.dts.datasource.ejb.DataSourceProcess");
var query1 =process.queryDataSourceSQL("GYKZ",sqlStr1,"11de-ef9e-c010eee1-860c-e1cadb714510");


如何获得参考如图:


找到:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册成为天翎用户

×
回复

使用道具 举报

 楼主| you44369 发表于 2017-9-15 19:16:10 | 显示全部楼层
kelly 发表于 2017-9-15 18:39
您好,您可以参考这个定时任务器的代码作为参考:

var sqlStr1 = "SELECT ITEM_采集时间,ITEM_设备名称, ...

查询现在不报错了,但是取值的时候还是有问题,我们这边是采用doc.getItemValueAsString("产线名称");这种方式取值的


下面贴出的是代码:

//取出源表单中最新的设备温度数据
var sqlStr = "SELECT MAX(a.ITEM_采集时间) as ITEM_采集时间,a.ITEM_设备名称,a.ITEM_电机轴承温度,a.ITEM_设备编号,a.ITEM_产线名称,a.ITEM_电机轴温高限值,a.DOMAINID FROM TLK_计量_生产设备数据 a where 1 = 1 AND a.ITEM_设备编号 in ('L1_EPSJ01','L1_YPSJ01','L1_ZDS01','L1_ZDS02','L2_EPSJ01','L2_EPSJ02','L2_ZDS01') AND a.ITEM_采集时间 = (select MAX(ITEM_采集时间) as ITEM_采集时间 from TLK_计量_生产设备数据) group by a.ITEM_设备名称,a.ITEM_设备编号,a.ITEM_产线名称,a.ITEM_电机轴承温度,a.ITEM_电机轴温高限值,a.DOMAINID";
var process = createProcess("cn.myapps.core.dynaform.dts.datasource.ejb.DataSourceProcess");
var query =process.queryDataSourceSQL("GYKZ",sqlStr,"11e7-7ca6-a6230e0c-9093-5f49da99d3be");



//取出中间表所有数据
var sqlStr1 = "SELECT ITEM_采集时间,ITEM_设备名称,ITEM_电机轴承温度,ITEM_设备编号,ITEM_产线名称,ITEM_轴温高限值,DOMAINID from TLK_电机轴承温度信息";
var query1 =process.queryDataSourceSQL("GYKZ",sqlStr1,"11e7-7ca6-a6230e0c-9093-5f49da99d3be");

if(query!=null){
                //查询最新时间根据设备信息分组之后的数据
                println(query.size());       
                println(query1.size());       
                for (var iter = query.iterator(); iter.hasNext();) {
                        var doc = iter.next();
                        var cxmc = doc.getItemValueAsString("产线名称");
                        var bjsj = doc.getItemValueAsDate("采集时间");
                        var formatData1 = getYear(bjsj)+"-"+getMonth(bjsj)+"-"+getDay(bjsj)+" "+bjsj.getHours()+":"+bjsj.getMinutes ()+":"+bjsj.getSeconds();                       
                        var sbmc = doc.getItemValueAsString("设备名称");
                        var yxzt = doc.getItemValueAsInt("电机轴承温度");
                        var sbbh = doc.getItemValueAsString("设备编号");
                        var zwgx = doc.getItemValueAsInt("电机轴温高限值");
                        var roleid ="11e7-8975-283a7cde-ad96-b3098773d433";



异常原因:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册成为天翎用户

×
回复

使用道具 举报

kelly 发表于 2017-9-16 10:39:38 | 显示全部楼层
您好,您可以参考这个代码取值试试:

if(datas!=null){
   for(var iterator = datas.iterator();iterator.hasNext();){
       var map1 = iterator.next();//取值
       var name= map1.get("name");
       var value = map1.get("id");
           opts.add(name,value);
        }
}
回复

使用道具 举报

本版积分规则

手机版|天翎MyApps技术社区 ( 粤ICP备11093750号 )

GMT+8, 2026-8-13 22:16

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表