自动锁库解锁服务插件干预试例

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

自动锁库解锁服务插件干预试例

    预计在2023年1月补丁中,对自动锁库解锁服务将提供插件干预功能,原有的服务在锁库时只支持本单据(本单据指的是自动锁库解锁服务配置于的单据上)上的操作,而解锁时可以支持本单据的某个操作解锁特定上游单据的锁库信息,当然也支持解锁本单据的锁库信息,但是有些自定义逻辑支持的不太好或者根本就不支持。由于一些限制,此服务不可能满足所有客户的要求,比如客户可能需要根据非常复杂的条件来过滤哪些单据体记录参与锁库,哪些不参与锁库(通版的锁库服务有个数据筛选条件配置,但它只支持一些简单的表达式配置),或者客户可能需要在锁库/解锁成功后调用自定义逻辑,抑或是自定义锁库排序逻辑。因此本服务添加了自定义插件干预功能,有关自动锁库解锁服务的介绍,可参阅:https://wenku.my7c.com/article/284352629646877184?productLineId=1,本文将通过二开插件自定义逻辑,简单介绍下此功能。

    1,首先扩展发货通知单,在审核操作上配置锁库服务,在自动锁库解锁服务配置界面中的插件文本框中输入:Kingdee.K3.SCM.Custom.ServicePlugin.CustomAutoLockOrUnlockStockPlugin,Kingdee.K3.SCM.Custom.ServicePlugin ,注意这里只是一个扩展的例子,客户可自行命名此类的全名,其他例子类似地配置。

image.webp

图1-1


    创建自定义类CustomAutoLockOrUnlockStockPlugin,此类必须继承至AbstractAutoLockOrUnlockPlugin,重写其中的方法 SortLockSupplies,如下图1-2所示:

image.webp

图1-2


    上面的二开代码例子在锁库时会对即时库存排序(参数lockSupplies会有一个默认排序,但通常他可能不符合客户的排序要求),即优先使用可用量小的即时库存锁库,如果可用量相同,则再使用有效期小的。举个例子,如果即时库存初始时有三个即时库存,且有相同的数量(假设都为5),但有效期不同,当发货通知单上的数量是4时,审核并锁库成功后,会优先使用第三行有效期小的那条即时库存,如下图1-3所示和图1-4所示:

image.webp

图1-3


image.webp

图1-4


    2,修改类CustomAutoLockOrUnlockStockPlugin,重写其中的 FilterLockRequirements 方法,如下图2-1所示:

image.webp

图2-1


    上面的代码通过LINK表排除有销售订单下推销售订单的下游分录内码记录(通版一般是退货类型的销售订单),当在销售订单保存操作上配置类似于上图1-1所示的自定义插件时(注意这里演示的是销售订单保存操作而不是审核操作是因为审核操作会有根据单据类型参数自动审核的逻辑,而这一逻辑在自动锁库解锁服务发布之前就存在了),创建一个标准销售订单A,可以看到它可以锁库,但当标准销售订单下推一个退货方向的销售订单B时,订单B锁库不成功,查看日志可以看到有如下图2-2所示的记录:

image.webp

图2-2


    3,修改类CustomAutoLockOrUnlockStockPlugin,重写其中的 AfterUnlockOperation 方法,如下图3-1所示:

image.webp

图3-1


    当在发货通知单保存操作上配置了解锁上游销售订单的锁库信息时,发货通知单保存后可以看到有如下图3-2所示的日志(注意日志中有重复的上游销售订单分录内码是因为销售订单下推发货通知单时下游拆分行了):image.webp

图3-2


写在最后:

    1,插件中的所有可重写的方法都是锁库或解锁的一部分,当二开重写方法代码中有异常且未处理时,整个锁库/解锁服务将回滚,因此二开代码应当尽量避免出现未捕获的异常。

    2,插件中目前只有 FilterLockRequirements, SortLockSupplies, BeforeLockOperation, BeforeUnlockOperation, AfterLockOperation, AfterUnlockOperation 这些方法可重写,通过其中的方法名可以看出它们的执行时点及要处理什么事情,在BeforeXXX和AfterXXX的方法中可以根据其中的方法参数获取到单据原始数据包(通过e.DataEntities),自动锁库解锁服务配置信息(通过e.Metadata),在AfterXXX方法中可获取到锁库或解锁的原始参数(通过 e.LockArgs 或者 e.UnlockArgs),所谓原始参数就是调用库存模块 IStockLockService接口中的SaveLockInfo 和 SaveUnLockInfo方法中的参数,详情可参阅:https://wenku.my7c.com/article/12461?productLineId=1&isKnowledge=2  。

    3,此功能是应部分客户需求添加的,初始版本可能有设计上的不足,后续可能会根据客户提单反馈进行优化设计。

    4,上文中的演示代码日志记录级别为INFO,内部使用的是log4net框架,测试时请把Web.config中的log4net日志记录级别设置成INFO以上,否则可能看不到日志。




谢谢老师!

自动锁库解锁服务插件干预试例

预计在2023年1月补丁中,对自动锁库解锁服务将提供插件干预功能,原有的服务在锁库时只支持本单据(本单据指的是自动锁库解锁服务配置...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息