以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]异步函数  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=153798)

--  作者:chnfo
--  发布时间:2020/8/23 20:54:00
--  [求助]异步函数
现在有一个需求。
一个系统,多个分店要使用。
假设有5项业务,10个分店都有各自的数据需要流程审批(审批流程有点小复杂,有串行嵌套并行的,还可能多级嵌套,但同一个业务只会有一个流程ID)
现在各个分店的各项业务都有数据要走审批流程的时候,如果在服务器一个个排队处理,有些情况下,可能效率就有点影响了。

异步函数貌似可以解决这个问题。也就是按分店、按业务排队,也就是说,同一个分店、同一项业务,按业务行排队就合适了。也就是说,同一个分店、同一项业务,某一行的流程审批才需要排队(例如这一行要走多人并联审批的时候,客户端的甲乙丙同时提交,则排队处理;如果是不同的分店,即使是同一种业务要处理,也可以同时处理 )

如果同一个业务的同一行有并行的时候,不排队处理,就得再用同步函数整一次,来判断并行的处理是否都完成了以确定是否要走到下一步,那还不如排队处理方便

看了一下帮助里的异步函数,但没有说按某一个条件做异步处理 
这个思路应当怎么整呢
[此贴子已经被作者于2020/8/23 21:16:26编辑过]

--  作者:有点蓝
--  发布时间:2020/8/23 21:19:00
--  
流程审批不都是判断上一步执行完毕在执行下一步的么,这个其实和是否异步处理没有什么关系吧。可以全部都改为异步处理。
--  作者:chnfo
--  发布时间:2020/8/24 14:10:00
--  
如果都是串行就没这事了。假定某业务某环节需要ABC三个环节并行,A环节甲乙仼何一个人审都行,B环节丙丁任何一个审都行,C环节戊己仼何一个审都行。如果不排队并行,因为要判断任何其它两个的状态,都审了才会走下一步。我担心因为数据处理、读取的时间差在极端状况下会在在那不动了
--  作者:有点蓝
--  发布时间:2020/8/24 14:12:00
--  
怎么样是极端状况,举例说明一下。查询要么符合结果,要么不符合结果。符合就继续,不符合句返回
--  作者:chnfo
--  发布时间:2020/8/24 14:12:00
--  
甲读BC状态时都没完成,于是不往下走。在家确定不走的时候,BC又完成了,是不是就不动了
--  作者:有点蓝
--  发布时间:2020/8/24 14:19:00
--  
这不很正常的情况吗?这次打不到车肯定要等下一辆车啊!这次没有完成,下次重新查询咯。或者主动通知,在B(C)完成的时候查询C(B)是否也完成了,然后通知甲。这个应该是自己处理业务的逻辑问题吧。
--  作者:chnfo
--  发布时间:2020/8/24 14:29:00
--  
所以还是有一个同步函数在处理它嘛,任何一个人提交,都由同步函数去检查是否三个都完成。所以先异步再回同步函数啊。
--  作者:有点蓝
--  发布时间:2020/8/24 14:36:00
--  
用到Table、Datatable,窗口及窗口控件这些才需要使用异步函数啊:http://www.foxtable.com/mobilehelp/topics/277.htm

如果是直接查数据库数据的,直接在同一个函数里查询不就行了。

--  作者:chnfo
--  发布时间:2020/8/24 14:47:00
--  
现在的流程考虑的因素比较多,包括业务条件、串并联嵌套,测试了一下,一个完整的流程判断差不多1秒钟(跟我的水平有关,应该优化空间很大),这1秒钟够干好多事了