天翎MyApps技术社区 - 低代码平台 | 流程管理系统 | BPM软件

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

[已解决] 定时任务怎么调试?

[复制链接]
微信用籣y82ir 发表于 2024-4-22 09:28:11 | 显示全部楼层 |阅读模式
【myApps/OBPM版本号】:v5.1
【浏览器类型】:Chrome/其他
【联系方式-QQ】:请留下您的QQ号码
【联系电话】:    请留下您的联系电话,以便技术同事更好解决您的问题
【问题描述】:
    我想通过系统里的“常用工具”-“任务”定制一些定时任务,任务是在某个表里插入数据。
    我在库里定义了一个方法,让定时任务进行引用,还在测试页面中添加一个按钮,让按钮也引用该方法。
    在测试中,通过按钮可以成功调用该方法,也达到预期的结果。
    但是通过任务调动时,在tomcat控制台有看到任务被触发,但是日志中没看到有报错提示,但是在数据库对应的表中也没有创建出新的数据。
    由于我定义的方法中docProcess.doCreate创建新的数据时,需要使用domainId和applicationId,我看了你们的说明,不能使用get方法获取对应的值,所以我都改成字符串形式写死在代码里面,但是情况还是一样。
    不知道怎么做才可以通过定时任务添加数据行。

   以下为部份代码:

//获取售后工单
function Job_xxx_Aftermarket_WorkOrder(){
  var kind = "xxx售后率";
  var date = adjustDay(getToday(), -30);
  var dateStr = format(date,"yyyyMM");
  var domainid = SysDomainID(); //SysDomainID方法返回的是字符串常量
  var sql = "SELECT '" +
                   domainid + "' AS domainid," +
          "DIRECTOR, " +
          "PLATFORM, " +
          "ACCOUNT, " +
          "SKU_SERIES, " +
          "Y_M, " +
          "ORDERS, " +
          "AFTERSALE_ORDERS, " +
          "AFTERSALE_RATE " +
          "FROM PBIRS.xxxxx WHERE conditionFlag = 1 AND Y_M = '" + dateStr + ".0' " +
          "ORDER BY DIRECTOR, SKU_SERIES  LIMIT 1";
  println("获取xxxx售后工单:" + sql);
  var applicationId = SysApplicationID(); //SysApplicationID方法返回的是字符串常量
  var docProcess = getDocProcess(applicationId);
  var arr = MagicQueryBySql("DATACENTER_SHOPELF", sql); //读取数据
  if (arr != null && arr.size() > 0){
    for(var j =0; j < arr.size(); j++){
      var vo = arr.get(j);
      println("发现售后工单:" + vo.get("SKU_SERIES") + ", " + vo.get("DIRECTOR"));
      var userLoginNo = getUserLoginnoByUserName(vo.get("DIRECTOR"));
      println("userLoginNo=" + userLoginNo);
      var user = getUserByLoginno(userLoginNo);
      var sku = vo.get("SKU");
      if (IsAlreadySendForXXX(vo, kind)){
        println("当前商品最近已发起过工单。");
        continue;
      }
      //创建售后单                              
      var cgdPrefix="YWSHGD-";                                
      var cgBillNo = countNext2(cgdPrefix,true,true,true,4);                              
      var billFormName = "YWSH_01_AfterSales_WorkOrders";                              
      var formProcess = new Packages.cn.myapps.designtime.form.service.FormDesignTimeServiceImpl();                              
      var Form = formProcess.doViewByFormName(billFormName, applicationId);                           
      var params = createParamsTable();                              
      mainDoc = docProcess.doNew(Form, user, params);                              
      mainDoc.addStringItem("编号",cgBillNo);                              
      mainDoc.addStringItem("填写人", vo.get("DIRECTOR"));                              
      mainDoc.addStringItem("工单类型", kind);   
      mainDoc.addDateItem("填写日期",getToday());                              
      mainDoc.addStringItem("反馈平台", vo.get("PLATFORM"));                              
              mainDoc.addStringItem("运营账号", vo.get("ACCOUNT"));
      mainDoc.addStringItem("SKU系列", vo.get("SKU_SERIES"));
      mainDoc.addDoubleItem("周期总售出量", vo.get("ORDERS"));
      mainDoc.addDoubleItem("售后单量", vo.get("AFTERSALE_ORDERS"));
      mainDoc.addDoubleItem("总售后率", vo.get("AFTERSALE_RATE"));
      mainDoc.addDoubleItem("统计周期", vo.get("Y_M").replace(".0",""));
      println("准备创建工单");
      docProcess.doCreate(mainDoc);//创建
                              println("工单创建成功");
      //重新获取售后工单对象                              
      var orderMainDoc = LoadByIndexFieldValue("tlk_xxxx_aftersales_workorders", "ITEM_编号", cgBillNo, true);
      println("工单内容:" + orderMainDoc);
      //发起流程
      var flowid = "        __l5PJKQHTUngIYmWjJPs";
      var billParams = createParamsTable();
      billParams.setParameter("_flowid", flowid);
      docProcess.doStartFlowOrUpdate(orderMainDoc, billParams, user); //启动流程
      println("流程启动成功。");
    }
  }









1、问题描述最好图文并茂,如有视频/脚本可直接放出,这样技术同事在处理该问题时效率更加高效哦~
2、如果该问题已得到解决,请在该帖子下回复\\\"已解决可结帖\\\"

本帖子中包含更多资源

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

x
 楼主| 微信用籣y82ir 发表于 2024-4-23 14:02:02 | 显示全部楼层
在Tomcat控制台看到的错误日志:

本帖子中包含更多资源

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

x
yaya 发表于 2024-4-24 11:29:47 | 显示全部楼层
微信用籣y82ir 发表于 2024-4-23 14:02
在Tomcat控制台看到的错误日志:

domainid和applicationid写死试试,还有,定时任务的打印用这个:Packages.java.lang.System.out.println("111111");
 楼主| 微信用籣y82ir 发表于 2024-4-24 14:39:55 | 显示全部楼层
使用Packages.java.lang.System.out.println("111111");可以在tomcat控制台中打印出信息了,
我也能顺利定位出抛出doaminId is not present。
是我定义的一个函数,使用了getAllUsers();这个系统函数引起的。
这种情况有方法设置一个domainId给getAllUsers()使用吗?

本帖子中包含更多资源

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

x
yaya 发表于 2024-4-24 15:23:59 | 显示全部楼层
微信用籣y82ir 发表于 2024-4-24 14:39
使用Packages.java.lang.System.out.println("111111");可以在tomcat控制台中打印出信息了,
我也能顺利定 ...

定时任务中无法调用getAllUser()哦。
 楼主| 微信用籣y82ir 发表于 2024-4-24 16:21:24 | 显示全部楼层
getAllUser()不能用,我可以通过写sql获取到userId,
我发现在任务里,连getUserById()这个方法也取不到user对象
可是我的代码里需要启动流程
docProcess.doStartFlowOrUpdate 就需要用到user对象
还有没有什么办法可以在任务里通过userId获取user对象?
yaya 发表于 2024-4-24 17:27:43 | 显示全部楼层
微信用籣y82ir 发表于 2024-4-24 16:21
getAllUser()不能用,我可以通过写sql获取到userId,
我发现在任务里,连getUserById()这个方法也取不到use ...

getUserById这个方法可以用哦。
 楼主| 微信用籣y82ir 发表于 2024-4-26 18:32:05 | 显示全部楼层
getUserById确实可以用
报domainId错误的时候,是因为没有引用库
例如我的任务里引用lib1.FunA方法,FunA引用了lib2.FunB方法,那么需要在任务起始行上加上
#include "lib1";
#include "lib2";
少写一个就会报domainId is not present
问题解决,可结贴

本版积分规则

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

GMT+8, 2026-8-12 13:28

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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