PLM物料属性发生变更时,如何更新BOM中关联属性值原创
金蝶云社区-vicky_jiang
vicky_jiang
4人赞赏了该文章 1,691次浏览 未经作者许可,禁止转载编辑于2022年05月26日 12:11:45

       目前PLM物料属性发生变更后,引用该物料的BOM重新保存或检入的时候才会更新这个物料关联的属性值,如果想要物料属性变化时就及时更新BOM中关联属性值,可以通过二次开发实现。

例如:当物料由非虚拟件转换成虚拟件时,刷新所有引用到该物料的BOM结构的对应跳层复选框执行勾选。

操作步骤:

一、获取引用该物料的BOM的方法

       BOM和其下层物料的关系表是T_PLM_CFG_RELATION,FID是BOM内码,FSLAVERELATIONID是子项物料内码,所以可通过脚本查询引用该物料的BOM,例如:

SELECT * FROM T_PLM_CFG_RELATION WHERE FSLAVERELATIONID=@FSLAVERELATIONID

       然后也可以根据业务要求自行补充过滤条件,例如只想要查询EBOM,则可以再关联查询PDM基础对象表T_PLM_PDM_BASE,例如:

SELECT RE.* FROM T_PLM_CFG_RELATION RE LEFT JOIN  T_PLM_PDM_BASE BASE ON RE.FID=BASE.FID WHERE FSLAVERELATIONID=@FSLAVERELATIONID AND BASE.FCATEGORYID=1030100000000000000

二、修改BOM中关联属性值的方法

       如果只是简单的修改BOM组成中的关系属性值,则可以直接使用脚本更新,例如

1、UPDATE T_PLM_CFG_RELATION SET FISSKIP=1 WHERE FSLAVERELATIONID=@FSLAVERELATIONID

2、UPDATE T_PLM_CFG_RELATION RE SET RE.FISSKIP=1 WHERE RE.FSLAVERELATIONID=@FSLAVERELATIONID AND EXISTS (SELECT 1 FROM T_PLM_PDM_BASE BASE WHERE RE.FID=BASE.FID AND BASE.FCATEGORYID=1030100000000000000

public void UpdateRelation(PLMContext ctx, long objectId)
{
        var lst = new List<SqlParam>
        {
               new SqlParam("@FID", KDDbType.Int64, objectId)
        };
        string sql = "UPDATE T_PLM_CFG_RELATION RE SET RE.FISSKIP=1 
                             WHERE RE.FSLAVERELATIONID=@FSLAVERELATIONID 
                             AND EXISTS (SELECT 1 FROM T_PLM_PDM_BASE BASE 
                                                     WHERE RE.FID=BASE.FID 
                                                     AND BASE.FCATEGORYID=1030100000000000000)";
        PLMDBUtils.Instance.Execute(ctx, sql, lst);
}


三、物料保存时更新BOM

       可以在物料执行“保存”、“检入”操作后,判断物料由非虚拟件转换成虚拟件,执行步骤二中修改BOM中关联属性值的方法即可,添加新的单据插件或列表插件,重载AfterDoOperation方法。

public override void AfterDoOperation(AfterDoOperationEventArgs e)
{
        if (物料由非虚拟件转换成虚拟件)
        {
               switch (e.Operation.Operation.ToUpper())
               {
                        //保存
                        case "SAVE":
                                //修改BOM中关联属性值的方法
                                UpdateRelation();
                                break;
                        //检入
                        case "OPCHECKIN":
                                //修改BOM中关联属性值的方法
                                UpdateRelation();
                                break;
               }
        }
        base.AfterDoOperation(e);
}
赞 4