找回密码
 立即注册

QQ登录

只需一步,快速开始

Jion
金牌服务用户   /  发表于:2024-12-12 13:48  /   查看:74  /  回复:9
1金币
       目前有个功能是需要将出运计划子表数量更新回销售合同里面子表的“已出运数”,我的想法是利用计划任务执行服务端命令来调整。因为在操作出运计划子表时会有新增、删除和修改,那么对应的销售合同的“已采购数”就是“采购合同子表数”,然后“未出运数量”=当前销售子表合同数量-已出运数量。

       现在有个疑问就是服务端命令这里的参数怎么来获取到出运计划子表里面对应的每一行操作的数据呢?这里不太明白怎么获取我当前操作行的出运计划子表的销售合同号、产品编号的数据。我在行变更命令里面加循环传值好像会给我无限循环卡死。

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

问题跟进,这个问题和大佬那边沟通。 大佬那边的计划任务的触发时机为数据库更新,更新时,计划任务上下文里的数据只有发生了变更了的字段。 而编码字段一般在修改时是不会变化的。所以计划任务上下文里没有。 目前的解决方案是,在计划任务里获取到主键 ID,传递给服务端命令,然后服务端命令用 ID 在去获取变更行数据,再进行业务逻辑处理。

9 个回复

倒序浏览
最佳答案
最佳答案
Simon.Sun活字格认证 Wyn认证
超级版主   /  发表于:2024-12-12 13:48:54
来自 10#
问题跟进,这个问题和大佬那边沟通。
大佬那边的计划任务的触发时机为数据库更新,更新时,计划任务上下文里的数据只有发生了变更了的字段。
而编码字段一般在修改时是不会变化的。所以计划任务上下文里没有。
目前的解决方案是,在计划任务里获取到主键 ID,传递给服务端命令,然后服务端命令用 ID 在去获取变更行数据,再进行业务逻辑处理。
回复 使用道具 举报
Simon.Sun活字格认证 Wyn认证
超级版主   /  发表于:2024-12-12 14:08:04
2#
您好,计划任务执行的这个问题能否抽个 demo 出来,这边调查一下呢?
感觉这个需求,除了计划任务,也可以把出运数据的维护做成服务端命令,在服务端命令里处理好出运数据维护的同时,去更新销售表的数据。


回复 使用道具 举报
Jion
金牌服务用户   /  发表于:2024-12-12 14:44:58
3#
本帖最后由 Jion 于 2024-12-12 14:48 编辑
Simon.Sun 发表于 2024-12-12 14:08
您好,计划任务执行的这个问题能否抽个 demo 出来,这边调查一下呢?
感觉这个需求,除了计划任务,也可以 ...

好的,您看下,我只保留了出运计划和销售合同两个模块,这里想要实现的功能是通过计划任务获取:出运计划当前行子表的数据,在他新增时就更新“出运数量”到销售合同对应子表产品的“已计划出货数”,同时算出“合同数量-已计划出货数=未计划出货数量”。同理,删除的时候就“合同数量-0=未计划出货数量”,修改的时候也是这样触发一下计算。外联数据库到是能触发器解决,不过内置库的话,我感觉计划任务应该也可以解决这个问题,主要是这里的参数的获取不太理解,所以想问问看。原理其实就是类似于库存反写一样,入库了三次,合计100个反写到采购合同里面“已入库数量”100个,剩余未入库数量20个这种。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Simon.Sun活字格认证 Wyn认证
超级版主   /  发表于:2024-12-12 16:12:43
4#
好的。计划任务数据变更触发有些类似于数据库的触发器,每当数据表有一行数据发生变更时,就会触发对应的计划任务,也就是计划任务触发时,上下文里参数只对应变更的那一条数据。关于数据表变更计划任务上下文里的参数,这里解释一下。
计划任务关于数据表新增、更新、删除,上下文里数据的变更主要有两个参数,一个是变更数据,一个是主键。
如果表结构为(文本、整数)这两个字段。
新增时,计划任务里的变更数据为:

[
  {
    "ColumnName": "文本",
    "NewValue": "A"
  },
  {
    "ColumnName": "整数",
    "NewValue": 1
  }
]
变更数据时一个对象数组,ColunmnName 记录了新增字段的列名,NewValue 就是新增的值。

修改时,比如把整数字段从 1 修改为 2,计划任务里变更数据为:


[
  {
    "ColumnName": "整数",
    "OldValue": 1,
    "NewValue": 2
  }
]
变更数据时一个对象数组,ColumnName 是变更列名,OldValue 是变更前的值,NewValue 是变更后的值。这里只有发生变化的列才会在这个对象数组中,比如这里文本字段并没有修改,对象数组里就没有。

删除时,计划任务里的变更数据为:

[
  {
    "ColumnName": "ID",
    "OldValue": 1
  },
  {
    "ColumnName": "文本",
    "OldValue": "A"
  },
  {
    "ColumnName": "整数",
    "OldValue": 2
  }
]
变更数据时一个对象数组,包含了删除的所有列的列名和值。
然后,新增、修改、删除计划任务里,主键的格式都是:

{
  "ID": 1
}
包含了主键的字段名,和主键的值。

所以回到我们的需求,我们需要创建三个计划任务,分别来处理出运子表新增、修改、删除时销售数据的处理。
在新增时,我们可以拿到出运子表新增的全部数据,简单处理,我们可以拿到新增的 ID,然后实际处理时,可以用 ID 用设置变量拿到全部新增数据。
在修改时,我理解只有出运子表里出货数量发生变更时,我们才需要去处理销售数据里的数量。这时候和需要在计划任务里循环变更数据,通过 ColumnName 为出货数量时,拿到 OldValue 和 NewValue,然后去处理数量逻辑。
删除时,可以拿到全部数据和 ID,循环通过  ColumnName 拿到出货数量,然后再去做数量处理逻辑。









回复 使用道具 举报
Jion
金牌服务用户   /  发表于:2024-12-12 16:45:39
5#
Simon.Sun 发表于 2024-12-12 16:12
好的。计划任务数据变更触发有些类似于数据库的触发器,每当数据表有一行数据发生变更时,就会触发对应的计 ...

好的,那我大概理解了,我先尝试修改看看,有问题的话到时候再麻烦您。
回复 使用道具 举报
Simon.Sun活字格认证 Wyn认证
超级版主   /  发表于:2024-12-12 16:54:14
6#
好的,有问题欢迎您继续跟帖交流。
回复 使用道具 举报
Jion
金牌服务用户   /  发表于:2024-12-13 14:02:59
7#
Simon.Sun 发表于 2024-12-12 16:54
好的,有问题欢迎您继续跟帖交流。

下午好,我自己又试了下,这里难道是写错了吗?在计划任务里面,我需要获取这三个值出来然后用服务端命令写到数据表里面,结果它这里提示找不到参数,想问下这里正确的写法应该是?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Simon.Sun活字格认证 Wyn认证
超级版主   /  发表于:2024-12-13 14:31:06
8#
本帖最后由 Simon.Sun 于 2024-12-13 14:32 编辑

您好,看日志应该是判断没有命中。
看了下您提供的 demo,我们表列是有设置别名的,计划任务里 ColumnName 是物理表的列名,而不是别名。
我们命令判断好像用的是别名,判断没有命中,变量就不创建,所以提示 SalesOrderNo 变量不存在。
您那边判断修改为用实际列名判断试一下。
回复 使用道具 举报
Jion
金牌服务用户   /  发表于:2024-12-13 14:57:37
9#
Simon.Sun 发表于 2024-12-13 14:31
您好,看日志应该是判断没有命中。
看了下您提供的 demo,我们表列是有设置别名的,计划任务里 ColumnName ...

好像也不行,还是提示这里参数问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部