找回密码
 立即注册

QQ登录

只需一步,快速开始

异常变量

注册会员

3

主题

10

帖子

61

积分

注册会员

积分
61
最新发帖
异常变量
注册会员   /  发表于:2023-5-26 12:25  /   查看:1441  /  回复:12
7金币
本帖最后由 异常变量 于 2023-5-26 12:33 编辑

关于外联数据表的实现数据变更触发任务计划

业务场景:用友T+erp与第三方商城库存的同步
需求:实现ERP库存的更新触发活字格的更新任务计划(由于产品库存数据太多,定时任务给服务器造成很大的压力,所以一直想实现库存变更(新增、更新)触发推送。

尝试方法:
1、在sqlserver里编写触发器,将库存现存量及仓库合并插入\更新到sqlserver新表中 : csh_tongbu



2、通过活字格外联表:csh_tongbu

3、创建更新触发器:将code(商品编码),stock(现存量)发送给第三方


问题:在活字格设计器里修改csh_tongbu表数据,成功触发,发布到服务器端,在服务器端手工修改库存数据是无法成功触发计划,外连表自动的数据变更也无法触发任务

问题思考:
1、之前查了很多帖子,说数外联表数据的变更活字格是无法监控到的,所以只能针对活字格内置表的数据变更才能触发任务。
那么,既然把sqlserver数据表通过外联授权给活字格了,为啥不能直接监控数据的变化触发任务呢?好吧,暂时不纠这个了,以解决现有问题为主
2、既然无法直接监控外联进行触发任务,那么是不是可以创建一个内置表,把外联数据库的数据实时同步到内置库里,然后根据内置库的数据更新触发任务呢?
是不是要实时同步又要用计划任务啊,又死循环了,或者其他什么方式,例如直接用存储过程直接把sql数据的表存到内置表,我要实现的是实时同步,是部是又要做任务计划?

怎么办啊 各位大佬!给点建议,十万火急



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

最佳答案

查看完整内容

等了这么多天 也没有完美的解决方案,我还是补充一个 我自己琢磨出来的方案吧: 1、在sqlserver库存表(表名:csh_tongbu:图1)中增加2个列字段,一个ts数据类型为timestamp(时间戳),时间戳为唯一值,只要数据更新,ts就会更新,但timestamp是无法同步到活字格作为更新判断依据,所以要在csh_tongbu表中再增加一个字段tts,数据类型为bigint,把ts赋值给bigint类型的tts字段,tts是可以同步到活字格的,然后再csh_tongbu表下 ...

12 个回复

倒序浏览
最佳答案
最佳答案
异常变量
注册会员   /  发表于:2023-5-26 12:25:59
来自 10#
本帖最后由 异常变量 于 2023-5-27 23:52 编辑

等了这么多天 也没有完美的解决方案,我还是补充一个 我自己琢磨出来的方案吧:
1、在sqlserver库存表(表名:csh_tongbu:图1)中增加2个列字段,一个ts数据类型为timestamp(时间戳),时间戳为唯一值,只要数据更新,ts就会更新,但timestamp是无法同步到活字格作为更新判断依据,所以要在csh_tongbu表中再增加一个字段tts,数据类型为bigint,把ts赋值给bigint类型的tts字段,tts是可以同步到活字格的,然后再csh_tongbu表下创建一个触发器,当csh_tongbu表数据发生变化时,将变化后的ts赋值给tts,tts也是数据变化后的唯一值

create trigger ceshi_tr_tongbu
on csh_tongbu
after insert,update
as
begin
declare @ts timestamp
select @ts=ts from inserted
update csh_tongbu set tts=@ts from csh_tongbu t join inserted on t.code in (inserted.code)
end



图1

2、在活字格里创建一个内置表,表名post_tongbu
3、创建定时任务,将外联表csh_tongbu定时1分钟更新到post_tongbu表,命令条件如下:
设置变量:erp_tts 关联外联表csh_tongbu,设置变量post_tts关联post_tongbu表,设置条件语句如下图:
大致意思是,如果外联表csh_tongbu中的tts字段在内置表里没有,则执行增加数据,如果有(用不变的字段判断,例如code:商品编码)且tts不一致,则执行更新内置表中对应的数据

4、然后根据内置表post_tongbu触发更新和新增任务计划,像第三方商城发送数据

之所以写的这么详细,只是想让接近小白的朋友少走点弯路,大神勿喷,如有更好的方案,欢迎斧正!
虽然还是没有达到实时变更,但实现了 只触发变更数据的协同,且将数据高频率巡查的任务放在了活字格里,对ERP及商城的数据交互并没有造成太多的负担



本帖子中包含更多资源

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

x

评分

参与人数 1金币 +5 收起 理由
Lay.Li + 5 赞一个!

查看全部评分

回复 使用道具 举报
lijetcart悬赏达人认证 活字格认证
金牌服务用户   /  发表于:2023-5-26 12:32:38
2#
csh_tongbu你在设计器勾选允许编辑没有
回复 使用道具 举报
异常变量
注册会员   /  发表于:2023-5-26 12:37:17
3#
lijetcart 发表于 2023-5-26 12:32
csh_tongbu你在设计器勾选允许编辑没有

刚添加了 重新发布测试了一下 也不行 没又触发任务
回复 使用道具 举报
ngqj
银牌会员   /  发表于:2023-5-26 14:19:22
4#
这个之前研究过,活字格是无法监听到外联数据表而触发任务的,还是建议使用计划任务,定时去查一下看有没有数据变更
回复 使用道具 举报
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2023-5-26 16:37:36
5#
活字格的计划任务触发条件有这个,外联库也可以,但是应该只能检测到活字格更新的动作,
第三方更新这个表是不行的。
所以我想能否提供一个接口,让外部来调用,借活字格之手来更新数据呢






本帖子中包含更多资源

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

x
回复 使用道具 举报
异常变量
注册会员   /  发表于:2023-5-26 16:43:14
6#
Joe.xu 发表于 2023-5-26 16:37
活字格的计划任务触发条件有这个,外联库也可以,但是应该只能检测到活字格更新的动作,
第三方更新这个表 ...

是啊  现在就是找不到方法呀
回复 使用道具 举报
异常变量
注册会员   /  发表于:2023-5-26 16:45:43
7#
ngqj 发表于 2023-5-26 14:19
这个之前研究过,活字格是无法监听到外联数据表而触发任务的,还是建议使用计划任务,定时去查一下看有没有 ...

定时任务1分钟巡查一下表全部数据,关键是还有很多其他类似的表  如果都这样 很吃服务器资源的
回复 使用道具 举报
异常变量
注册会员   /  发表于:2023-5-26 16:48:08
8#
ngqj 发表于 2023-5-26 14:19
这个之前研究过,活字格是无法监听到外联数据表而触发任务的,还是建议使用计划任务,定时去查一下看有没有 ...

而且像库存这样的数据 最好是实时的,现在电商对库存的准确率 要求非常高的,本身erp有线下手工开单,如果库存不能实时同步到商城 导致订单不能及时发货,那就麻烦大了
回复 使用道具 举报
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2023-5-26 17:39:21
9#
像这样实时要拿到结果的表,建议用同一个库哈,不然定时任务的时效性确实没有那么高
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部