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

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

[已解决] 主从表记录复制并启动流程时遇到的问题

[复制链接]
微信用籣y82ir 发表于 2023-12-13 14:52:16 | 显示全部楼层 |阅读模式
【myApps/OBPM版本号】:v5.0- sp XX
【浏览器类型】:Chrome/其他
【联系方式-QQ】:请留下您的QQ号码
【联系电话】:    请留下您的联系电话,以便技术同事更好解决您的问题
【问题描述】:
需求描述:系统有tableA1和tableA2为主从表,需要把tableA1和tableA2的信息生成订单tableB1和tableB2,以下是我编写的代码,
代码出现的问题:
1.创建采购订单(TableB1)时,包含了启动流程的代码,但流程没有启动。
2.创建采购订单明细(TableB2)的时候,只能创建一条,创建第二条的时候就会提示PrimryKey重复,数据创建失败。
3.通过以下代码创建的TableB1的记录,如果删除TableB1的记录,会删除TableA1的记录,TableB1的记录就提示删除失败。

(function(){
  var currentDoc = getCurrentDocument();
  var user = getWebUser();
  var applicationId = getApplication();
  var docProcess = getDocProcess(applicationId);
  var sql = "select distinct DOMAINID, ITEM_供应商 from tlk_tableB where PARENT = '" + currentDoc.getId() + "'";
  var query = queryBySQL(sql);
  if (query != null) {
    for (var it = query.iterator(); it.hasNext();) {  //获取供应商名称
      var docProvider = it.next();
      var provider = docProvider.getItemValueAsString("供应商");
      var detailSql = "select * from tlk_tableB1 where PARENT = '" +
          currentDoc.getId() + "' AND ITEM_供应商 = '" + provider + "'";
      var detailQuery = queryBySQL(detailSql);
      if (detailQuery != null) {
        //获取供应商账号信息
        var providerSql = "SELECT * FROM tlk_tableA1 WHERE ITEM_供应商名称 = '" + provider + "' order by CREATED desc limit 1";
        var providerQuery = queryBySQL(providerSql);
        //统计数量
        var total = 0;
        for (var did = detailQuery.iterator(); did.hasNext();) {
          var dc = did.next();
          total += dc.getItemValueAsInt("数量");
        }
        var orderMainDoc;
        if (total >= 0){
          //数量大于0才建单
          detailQuery = queryBySQL(detailSql); //再读一次,把光标移动到第一行
          var rowIndex = 0;
          for (var dim = detailQuery.iterator(); dim.hasNext();) {  //获取商品信息
            var docProduct = dim.next();
            if (rowIndex == 0){
              var cger = "";
              var cgerSql = "SELECT * FROM t_user WHERE NAME = '" + docProduct.getItemValueAsString("采购员") + "'";
              var cgerQuery = queryByDSName("obpm5",cgerSql);
              for (var icger = cgerQuery.iterator(); icger.hasNext();) {  //获取商品信息
                var cgerItem = icger.next();
                var loginno = cgerItem.get("LOGINNO");
                cger = getUserByLoginno(loginno);
              }
              println("采购员=" + docProduct.getItemValueAsString("采购员"));
              //创建采购订单===主表开始=========================================================
              var cgdPrefix="GYOM-";  
              var cgBillNo = countNext2(cgdPrefix,true,true,true,4);
              var billFormName = "tableB1";
              var formProcess = new Packages.cn.myapps.designtime.form.service.FormDesignTimeServiceImpl();
              var Form = formProcess.doViewByFormName(billFormName, applicationId);
              var params = getParamsTable();
              orderMainDoc = docProcess.doNew(Form, user, params);
              orderMainDoc.addStringItem("编号",cgBillNo);
              orderMainDoc.addStringItem("采购申请单号", currentDoc.getItemValueAsString("编号"));
              orderMainDoc.addDateItem("申请日期",getToday());
              orderMainDoc.addStringItem("制单人", user.getName());
              orderMainDoc.addStringItem("采购员", docProduct.getItemValueAsString("采购员"));
              orderMainDoc.addStringItem("供应商名称", docProduct.getItemValueAsString("供应商"));
              for (var pdq = providerQuery.iterator(); pdq.hasNext();){
                var docAccount = pdq.next();
                orderMainDoc.addStringItem("支付对象", docAccount.getItemValueAsString("支付对象"));
                        orderMainDoc.addStringItem("开户银行", docAccount.getItemValueAsString("开户银行"));
                        orderMainDoc.addStringItem("银行账号", docAccount.getItemValueAsString("银行账号"));
              }
              if (docProduct.getItemValueAsInt("数量") <= 0)
                continue;
              docProcess.doCreate(orderMainDoc);//创建
              var flowid = "_BSBln5AAXQ2vaDSVfAK";//获取流程id
              var billParams = createParamsTable();               
              billParams.setParameter("_flowid", flowid);
              println("OrderMainDoc");
              println(orderMainDoc);
              println("cger");
              println(cger);
              docProcess.doStartFlowOrUpdate(orderMainDoc, billParams, cger); //启动流程
              //创建采购订单===主表结束=========================================================
            }
            //创建采购订单明细
            //创建采购订单明细===从表开始=========================================================
            var orderDetailFormName = "tableB2";
            var detailFormProcess = new Packages.cn.myapps.designtime.form.service.FormDesignTimeServiceImpl();
            var detailForm = detailFormProcess.doViewByFormName(orderDetailFormName, applicationId);
            var detailParams = getParamsTable();
            var orderDetailMainDoc = docProcess.doNew(detailForm, user, detailParams);
            orderDetailMainDoc.addStringItem("SKU", docProduct.getItemValueAsString("SKU"));
            orderDetailMainDoc.addStringItem("商品名称", docProduct.getItemValueAsString("SKU描述"));
            orderDetailMainDoc.addIntItem("数量", docProduct.getItemValueAsString("确认下单数量"));
            orderDetailMainDoc.addDoubleItem("含税单价", 0);
            orderDetailMainDoc.addDoubleItem("金额", 0);
            
            docProcess.doCreate(orderDetailMainDoc);//创建
            orderDetailMainDoc.setParent(orderMainDoc.getId());
            DOC.createOrUpdate(orderDetailMainDoc);
            //创建采购订单===从表结束=========================================================
            rowIndex += 1;
          }
        }
      }
    }
  }
})()










1、问题描述最好图文并茂,如有视频/脚本可直接放出,这样技术同事在处理该问题时效率更加高效哦~
2、如果该问题已得到解决,请在该帖子下回复\\\"已解决可结帖\\\"
jimmy 发表于 2023-12-13 19:53:12 | 显示全部楼层
麻烦给出相应的报错信息,最好是tomcat窗口的报错信息,谢谢
 楼主| 微信用籣y82ir 发表于 2023-12-14 11:31:21 | 显示全部楼层
本帖最后由 微信用籣y82ir 于 2023-12-14 11:38 编辑

@myApps技术团队   这是我整理的日志

本帖子中包含更多资源

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

x
jimmy 发表于 2023-12-14 16:06:06 | 显示全部楼层
微信用籣y82ir 发表于 2023-12-14 11:31
@myApps技术团队   这是我整理的日志

问题一:你执行创建记录之后需要重新获取这个记录对象,再对它执行启动流程,不然启动流程的参数的记录对象还是没有创建前的对象
jimmy 发表于 2023-12-14 16:10:37 | 显示全部楼层
微信用籣y82ir 发表于 2023-12-14 11:31
@myApps技术团队   这是我整理的日志

问题二:报错显示,错误位置在脚本108行,但是108行位置是一个中括号,还是无法定位位置,麻烦将最原始最新的脚本发出来,谢谢

本帖子中包含更多资源

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

x
jimmy 发表于 2023-12-14 16:12:08 | 显示全部楼层
微信用籣y82ir 发表于 2023-12-14 11:31
@myApps技术团队   这是我整理的日志

问题三:没看到录屏
 楼主| 微信用籣y82ir 发表于 2023-12-15 12:04:29 | 显示全部楼层
谢谢老师的回复,我按您的提示做了一点调,补充说明和视频。
期待您的回复!

本帖子中包含更多资源

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

x
jimmy 发表于 2023-12-18 17:05:55 | 显示全部楼层
微信用籣y82ir 发表于 2023-12-15 12:04
谢谢老师的回复,我按您的提示做了一点调,补充说明和视频。
期待您的回复!

问题一:麻烦给出你那个自定义函数的具体脚本,同时跟确认下你获取对象之后再启动流程还是没报错是吗?
jimmy 发表于 2023-12-18 17:38:40 | 显示全部楼层
微信用籣y82ir 发表于 2023-12-15 12:04
谢谢老师的回复,我按您的提示做了一点调,补充说明和视频。
期待您的回复!

问题二:建议修改下脚本,创建后需要再次获取对象,你存在两个创建方法,建议参考下图

本帖子中包含更多资源

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

x
jimmy 发表于 2023-12-18 17:46:11 | 显示全部楼层
微信用籣y82ir 发表于 2023-12-15 12:04
谢谢老师的回复,我按您的提示做了一点调,补充说明和视频。
期待您的回复!

问题三:视频中我看到的是删除不成功,没看到你说的能删除其他表单,看了下脚本我本人估计是你的那个var params = getParamsTable();导致的参数错乱,建议是var params = createParamsTable();你上面这个脚本是获取旧的前端参数,我这个是创建新的没有任何参数的参数对象,你可以进行下尝试,谢谢,

本版积分规则

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

GMT+8, 2026-8-12 06:42

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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