二开案例.WEBAPI.使用WEBAPI赋值单据二开字段
智慧车间接口自定义参数及更新单据
1. 背景
智慧车间有很多接口是用来生成或更新CLOUD业务单据的,标准产品的做法是通过WEBSERVICE传入的参数,在后台经过一系列的校验和逻辑控制后,再生成某个单据对象,最后保存到数据库中。
由于受限于WEBSERVICE传入参数,所以生成单据时,属性值是有限的,某些项目由于业务扩展,需要传入一些额外的参数值,并希望将其更新到目标单据上。
本文档旨在指导二次开发人员利用标准产品的智慧车间API接口平台(详见《智慧车间API接口平台介绍》),将自定义参数值更新到后台单据上。
2. 适用对象
二次开发人员。
3. 扩展参数及更新单据
智慧车间接口平台对于单据生成类接口,通用的做法是在处理器端做校验,校验成功后,再生成一条或一组消息,传入到消息队列中,由执行计划拉取消息,处理后续的单据生成逻辑。
这种实现方式的主要目的是为了异步和解耦,并提升前端的响应速度,因此本方案只针对通过消息队列处理的场景,对查询数据类、报警、取消报警以及其他不走消息队列的自定义接口,不在本扩展方案支持范围内。
传入参数扩展分为两种场景,一种是在前端界面录入后,直接反映到后台单据上;一种是根据界面传入的参数,经过计算后,产生新的参数并反映到后台单据上。
本文将以已有接口“组装扫描”为例,描述两种场景下,如何通过智慧车间API接口平台扩展接口的参数,并穿透消息队列,最终反映到目标单据上。
3.1 通过前端传入参数直接更新
标准产品在部分单据生成类的WEBSERVICE接口中增加了扩展参数字段,在参数中以JSON格式输入目标单据待更新的字段及值,平台会自动将值更新到目标单据的对应字段上。
图3-1
上图中,ExtendParam就是扩展参数,其内容必须为JSON格式,需要注意以下几点:
l JSON中的字段必须属于目标单据,且在关键实体上。目前主要的接口中,“组装工序扫描”、“包装工序扫描”、“生成不良汇报”对应的目标单据为【工序汇报单】。“完工送检”、“生成首检单”对应的目标单据为【检验单】。“生成退料单接口”对应的目标单据为【生产退料单】。“生成领料单接口”对应的目标单据为【生产领料单】。“工位确认上料”对应的目标单据为【工位在制清单】。,一般带单据体的单据,其关键实体为分录,否则为单据头,如【工序汇报单】的关键实体为“汇总”分录,【工位在制清单】的关键实体为单据头。
l JSON中的字段名必须为目标单据元数据中字段的绑定实体属性。
图3-2
l 对于基础资料类型的字段,其字段格式必须为“绑定实体属性_Id”的形式,如3-1中工序汇报单汇总分录中的资源,字段名应该为ResourceId_Id,其值为对应基础资料的Id。
3.2 通过插件修改参数
其原理与3.1章中是一致的,只是我们可以针对前端传入的参数再做一些计算或查询,得到新的参数,将其传入到处理器中。
开发的准备步骤详见《智慧车间接口自定义返回值.docx》中的第3章,本文档不再对此赘述,只介绍插件开发的核心方法。
3.2.1 维护插件类
在4.1中新建的工程中或已有的工程中添加新的项目文件。
图3-3
此插件覆盖BeforeExecute方法,先获取到参数,再新建一个JSONObject对象,根据3.1章中的描述,放入对应的字段名及字段值。目前每个参数类中有10个可扩展的参数,分别为ExtendParam1~ExtendParam10,他们是一个平级的结构,如果都赋值的话,最终会合并之后更新到单据上。
3.3 更新效果
图3-4
4. 代码示例
public class AssemblyScanningParamPlugIn : AbstractSFSApiReqPlugIn<SFSASScanningParam, SFSASScanningResult> { public override void BeforeExecute(Kingdee.K3.MFG.SFS.App.Core.Executor.PlugIn.Args.BeforeExecuteEventArgs<SFSASScanningParam> e) { base.BeforeExecute(e); JSONObject js = new JSONObject(); js.Put("OptRemark","好好学习"); js.Put("ResourceId_Id",336439); e.ParamValue.ExtendParam1 = js.ToJSONString() ; } }
二开案例.WEBAPI.使用WEBAPI赋值单据二开字段
本文2024-09-23 03:26:31发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-158882.html