本文介绍了价格服务平台新增的【取价操作】:quote,该功能允许在单据上通过按钮绑定操作以获取完整的取价功能。它适用于各种表单,包括动态表单及不带分录的单据,但仅限于表单上的按钮,不支持列表界面的按钮。取价操作能自我诊断配置逻辑是否合理,并由取价方案驱动。还提供了取价插件以支持自定义价格处理逻辑和指定取价组织。考虑到性能问题,可选择关闭刷新监听,但需通过插件处理后续计算逻辑。最后,给出了销售单据的通用插件示例及插件接口说明,供开发人员参考。
总体说明
为了方便各类单据进行取价处理,价格服务平台增加了一个【取价操作】:quote,在维护好【取价策略】和【取价方案】的前提下,只需要在单据上增加一个按钮,然后绑定这个操作就可以获取完整的取价功能了。
图1 按钮绑定服务
1 . 这个功能适用于任何表单,包括二开的单据,甚至是动态表单、不带分录的单据等。
2. 如果按钮配置在分录上,取价范围为【没有录入价格的分录】, 即不需要用户选择分录。当然这样的话也意味着用户也无法指定分录行取价。
3 . 只支持表单上的按钮,不支持列表界面的按钮。
4. 取价操作会自行诊断 【取价方案】和【操作参数配置】的逻辑是否自洽,如:【取价方案】价格返回字段如果在单头,而取价组织却在分录,则会给出错误提示;再如 【取价方案】价格返回字段在分录A上,但是取价组织配置了分录B上的组织,也会给出错误提示; 这都是服务配置不能自洽的表现。因为是通用服务所以考虑了所有可能的极端配置场景。
5. 取价服务完全由【取价方案】驱动,请严格配置好取价单的【取价方案】。
6. 注意:目前不支持HDD的第二个D取价,即不支持分录的子分录取价
操作参数说明:
参数名称 | 说明 |
取价插件(可选) | 因为这个是一个通用操作,每一种单据对于取到价格的前后处理不尽相同,所以提供了一个取到价格回填前后的处理机制 例:销售单据在获取价格后,回填前需要判断【税率】是否有效; 回填后需要重新计算分录上的金额和汇总单头金额。 通过插件,现场也可以继续定制取到的价格逻辑。 |
取价组织 | 价格是基于组织来管理的,但取价组织不一定是【主业务组织】,所以需要指定取价组织为当前取价单据中的具体组织字段。 注意:取价组织可以选择取价分录行上的组织 |
是否触发监听 | 与取价插件二选一。 一般现场选择【是】。因为是批量取价,取到价格后可能会大批量的刷新分录上的价格字段,导致计算金额的监听风暴产生(与用户手工录入价格时不同,日常都是都是逐格录入,一次只触发一个监听),所以出于性能的考量,提供了关闭监听的功能。 如果不关闭监听,则取到价格后的金额计算等就如常进行,和单据的功能无缝对接,只是如果取价分录超过几百条可能存在前端性能问题。 如果关闭了监听,请开发【取价插件】来处理后续的补充计算逻辑。 |
图2 操作参数说明
销售插件说明(例)
只要是继承销售单据模板的单据,都可以使用这个插件,这个插件已经针对销售单据提供了完整的取价前后处理通用逻辑。
其他模块的通用插件等有现场需求了再行提供。 销售出库单不是销售单据而是库存单据。
图3 销售单据通用插件
插件接口说明
以下供标准产品开发人员和二开人员参考,如果开发插件,请实现:
kd.bos.ext.scmc.operation.quote.plugin. IQuoteDataHadler
方法名称 | 说明 |
beforeDoQuoteOperation | 取到价格后回填前处理:例如:销售单据在这个时点处理的是税率的有效性判断 |
afterDoQuoteOperation | 取到价格后回填后处理:例如:销售单据金额计算 |
参数名称 | 说明 |
BeforeDoQuoteEventArgs | cance:boolean 是否取消取价,设置成false,则取消取价 quoteDataEntity:Map<Long, Map<String, Object>> 取价返回结果 cancelMessage:String 取价取消时设置的异常信息 model : 表单对象 selectRows: int[] 参与取价的分录行号 |
AfterDoQuoteEventArgs | selectRows : int[]参与取价的分录行号 view: 页面对象 islistener: Boolean 是否启动监听,设置为false则关闭监听 |
取价方案配置如图参考
推荐阅读