模型配置生成物料/BOM如何携带模型配置的变量参数

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

模型配置生成物料/BOM如何携带模型配置的变量参数

# 模型配置生成物料/BOM如何携带模型配置的变量参数 ## 业务场景 使用模型配置生成的BOM需要使用单独的固定字段填充配置时录入的参数,用于后续业务使用(套打,携带下游单据,报表等业务) ## 问题现状 1. 变量配置界面控件由定义的建模变量动态构造 2. 配置生成BOM未包含固化配置的处理,目前配置的参数只存在模型配置清单列表中,并使用文本拼接的方式存储 ## 解决方案 1. BOM保存时传入配置录入参数 2. 二次开发在BOM保存操作上加入二次开发插件,根据具体需求映射BOM表头的字段赋值。 3. 需要升级金蝶云星空7.7版本,并安装补丁PT-146899/企业版,PT-146898标准版 ## 需要预先了解的知识 1. csharp开发语法 2. 星空操作插件的编写 3. Python插件的编写(线下订阅的客户可选,多租户必选) ## 模型配置录入参数的构成(所属组件 Kingdee.K3.MFG.ENG.Common.Core.dll) ### 建模变量抽象类AbstractVariable 建模变量在配置时实例化的对象 #### 关键属性说明 - VariableKey为建模变量的编码 - VarId为建模变量的内码,或计算变量的分录内码 - DefaultValue为变量的默认值,数据取自于产品模型对应的定义 - IsCalVariable 是否计算变量 - 针对变量的类型标准产品还有特定的派生类,有需要了解的可以使用对象查看器查看所属组件命名空间Kingdee.K3.Core.MFG.ENG.ProductModel下的定义,这里不做赘述 ### 建模变量值抽象类AbstractValue 建模变量运算值在配置计算时实例化的对象 #### 关键属性说明 - TrueValue 变量的直接录入值,string类型,如果变量的类型为基础资料或辅助资料,则为其选择资料的编码值 - 针对变量的类型派生两个子类:SimpleValue,ComplexValue ### 复杂类型变量值类ComplexValue 基础资料和辅助资料的值对象使用ComplexValue #### 关键属性说明 - ReferenceObject 基础资料/辅助资料引用的数据包,DynamicObject对象。对变量值有取内码的需求,或者一些基础资料上的其他字段可以从这个动态对象去获取 - OrgId 基础资料所属的组织内码 ### 模型配置结果数据包MdlCfgGenResult 模型配置时根据产品模型为单位生成的配置结果对象,包含当前模型下生成的BOM数据包,物料数据包(如果有) #### 关键属性说明 - Variables 建模变量&计算变量字典,类型为Dictionary<string,AbstractVariable>,使用建模变量编码作为获取Key - Values 变量值列表,类型为Dictionary<string,AbstractValue>,用于获取建模变量&计算变量在配置计算完毕后的值 - PrdMdlObj 产品模型数据包对象,DynamicObject类型,有需要从产品模型取值关联到生成的BOM和物料可以关注这个对象。 #### 获取参数方式 - 物料保存插件:使用CurrentMdlCfgResult关键字从this.Option获取 ```csharp public override void BeginOperationTransaction(BeginOperationTransactionArgs e) { var option = this.Option; MdlCfgGenResult currCfgResult; if (option.TryGetVariableValue<MdlCfgGenResult>("CurrentMdlCfgResult", out currCfgResult)) { foreach (DynamicObject mtrl in e.DataEntitys) { } } } ``` - BOM保存插件:使用参数关键字MdlCfgResults从this.Option获取。因为bom保存是多个模型生成的BOM一起保存,这里获取的结果包为所有模型生成的,是批量数据 ```csharp public override void BeginOperationTransaction(BeginOperationTransactionArgs e) { var option = this.Option; List<MdlCfgGenResult> currCfgResults; if (option.TryGetVariableValue<List<MdlCfgGenResult>>("MdlCfgResults", out currCfgResults)) { foreach (DynamicObject mtrl in e.DataEntitys) { } } } ``` ## 实现样例 模型配置生成BOM版本,携带变量CPU型号以及版本号至在生成的BOM表头上。 ### 元数据改动 ![BOM扩展加入自定义字段.webp](/download/0100a8799235796b417ba8bf26cdc03a7cc9.webp) ### 产品模型示例 ![产品模型建模定义.webp](/download/01002e9b5fffc24a4253bad4cff0dba5065f.webp) ### 执行配置后效果 ![效果.webp](/download/0100f5f175666d1345ac943a27d8d3ac3677.webp) ### 保存插件示例 ```csharp public override void BeginOperationTransaction(BeginOperationTransactionArgs e) { if (!this.Option.ContainsVariable("MdlCfgResults")) return; List<MdlCfgGenResult> results = this.Option.GetVariableValue<List<MdlCfgGenResult>>("MdlCfgResults"); Dictionary<string, AbstractVariable> variables = results.FirstOrDefault().Variables;//变量列表 Dictionary<string, AbstractValue> varValue = results.FirstOrDefault().Values;//变量值列表 foreach (var data in e.DataEntitys) { if (variables.ContainsKey("Ver") && varValue.ContainsKey("Ver")) { AbstractValue vl = varValue["Ver"]; data["Ver"] = vl.TrueValue; } if (variables.ContainsKey("CPU") && varValue.ContainsKey("CPU")) { AbstractValue vl = varValue["CPU"]; //在变量为基础资料或辅助资料类型的时候vl.TrueValue为其选择项的编码 data["CPU_Id"] = (vl as ComplexValue).ReferenceObject["Id"]; } } } ``` 多租户部署的客户可以参考一下Python插件的样例 ```python import clr clr.AddReference('Kingdee.K3.MFG.ENG.Common.Core') from Kingdee.K3.Core.MFG.ENG.ProductModel import AbstractVariable from Kingdee.K3.Core.MFG.ENG.ProductModel import AbstractValue from Kingdee.K3.Core.MFG.ENG.ProductModel import MdlCfgGenResult from System.Collections.Generic import List def BeginOperationTransaction(e): if this.Option.ContainsVariable("MdlCfgResults")==False: return results = this.Option.GetVariableValue[List[MdlCfgGenResult]]("MdlCfgResults")[0] variables = results.Variables varValue = results.Values for data in e.DataEntitys: if variables.ContainsKey("Ver") and varValue.ContainsKey("Ver"): vl = varValue["Ver"] data["Ver"] = vl.TrueValue if variables.ContainsKey("CPU") and varValue.ContainsKey("CPU"): vl = varValue["CPU"] data["CPU_Id"] = vl.ReferenceObject["Id"] ```

模型配置生成物料/BOM如何携带模型配置的变量参数

# 模型配置生成物料/BOM如何携带模型配置的变量参数## 业务场景使用模型配置生成的BOM需要使用单独的固定字段填充配置时录入的参数,用于...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息