我的广告

回答

收藏

[协同开发] 齐套分析子项明细自定义字段赋值处理指南

金蝶云星空 金蝶云星空 2667 人阅读 | 0 人回复 | 2023-06-14

需要提前了解的知识点
1.操作插件的开发(本文使用python操作插件作为案例,有编译条件的可以使用.net作为开发语言,一样的效果)
) \- T, C7 I! a4 V2.生产齐套分析单与齐套分析子项明细的元数据模型关系/ h& |6 l1 O' r
3.如何添加物料属性引用
本文案例我希望在生产齐套分析单的齐套分析子项明细携带二次开发的扩展字段。需要做的事情
1.齐套分析子项明细加入需要携带的目标字段1 y; H0 V. f5 N. E: N3 k
3 s; S; u, ^( f; t5 k$ \
2.扩展齐套分析单,于操作列表>保存操作>插件列表>注册Python插件加入二次开发插件,实现功能。有编译部署条件的朋友可以用.net实现,注册插件也是一样的。( X7 ^8 Y$ s# B/ m& V
插件代码#将本插件注册至生产齐套分析单保存操作,齐套分析单的分析功能在生成分析结果后,执行结束前会自动调用一次齐套分析单的保存#通过保存注入该插件可以为二开的自定义字段作计算,赋值保存处理import clrclr.AddReference('System.Core')clr.AddReference('Kingdee.BOS.ServiceHelper')clr.AddReference('Kingdee.BOS.DataEntity')from System.Linq import Enumerablefrom Kingdee.BOS.Util import ListUtilsfrom Kingdee.BOS.Orm.DataEntity import DynamicObjectfrom Kingdee.BOS.Core.SqlBuilder import QueryBuilderParemeterfrom Kingdee.BOS.ServiceHelper import MetaDataServiceHelperfrom Kingdee.BOS.ServiceHelper import BusinessDataServiceHelperdef GetEntryKey(entry):        return entry['MoEntryId']def AfterExecuteOperationTransaction(e):        dicMatchMoEntrys = Enumerable.ToDictionary(Enumerable.ToList(e.DataEntitys[0]['Entity']),GetEntryKey) #齐套分析单生产订单明细数据集合        fid = e.DataEntitys[0]['Id']        matchItemMeta = MetaDataServiceHelper.Load(this.Context,'PRD_MATCHDETAIL')        qp = QueryBuilderParemeter()        qp.FormId='PRD_MATCHDETAIL'        qp.FilterClauseWihtKey = 'FID=%d' % (fid)        qp.SelectItems = SelectorItemInfo.CreateItems('FENTRYID')        matchItems = BusinessDataServiceHelper.Load(this.Context,matchItemMeta.BusinessInfo.GetDynamicObjectType(),qp) #抓取齐套分析单子项明细数据集合        if ListUtils.IsEmpty(matchItems):#空集则什么都不处理                return        for matchItem in matchItems:                if dicMatchMoEntrys.ContainsKey(matchItem['MoEntryId']):                        matchMoEntry = dicMatchMoEntrys[matchItem['MoEntryId']] #使用子项明细的MoEntryId匹配生产订单明细数据集合对应的订单分录                        #实现子项明细的二次开发处理。获取字段的值使用对应字段的动态实体名                        matchItemSubMtrl = matchItem['MaterialIdSub']#子项物料数据包,需要取物料字段先在齐套分析子项明细的物料编码字段加入引用属性                        #获取物料字段要参考它所属的实体,如果字段的实体在子单据头上,需要先获取对应实体再取字段值                        #以下提供几个获取物料字段的样例                        mtrlBase = matchItemSubMtrl['MaterialBase'][0] #物料基本实体                        erpclsId = mtrlBase['ErpClsId'] #物料属性                        mtrlStock = matchItemSubMtrl['MaterialStock'][0]#物料库存实体                        safeStock = mtrlStock['SafeStock']#物料库存页签的安全库存                        specification = matchItemSubMtrl['Specification']#物料规格型号                        #matchItem['MobillNo']= '%s|%d'  % (matchMoEntry['MoBillNo'],matchMoEntry['MoEntrySeq'])#这是个样例,演示如何将生产订单明细的订单号+订单行号拼接填入子项明细的生产订单字段,二开逻辑可以在这里加入代码处理        BusinessDataServiceHelper.Save(this.Context,matchItems)#保存修改后的子项明细数据集合5 O8 L& ?1 @9 K5 {& B; ^% n
插件代码实现原理
通过在插件内获取齐套分析单的内码用于加载齐套分析子项明细数据集合,并在修改后调用一次保存。& Y, d) G6 }4 P1 W; s2 a) b
如果需要到物料本身的属性,请在齐套分析子项明细的对应物料字段的【引用属性】列表添加需要的字段* D2 U/ f( q9 u3 J. K# ?1 f
FAQ
齐套分析子项明细为什么在生产齐套分析单元数据上不可见?
( M4 K  f( Q# r( c答:因为齐套分析的数据范围比较大,输出的子项明细数据规模不可控,可能会达到上万到十几万的级别。上限太高,如果这部分数据附带在生产齐套分析单,作为一个单据体进行展示的渲染压力巨大,故子项明细被分离出去作为独立的列表进行展示,通过列表加载数据的机制优化界面渲染,而且可以提供性能更优的数据过滤功能。3 ?' U( h  i/ w4 S' w+ E, i4 W- ]
问:缺料分析也想要做类似的二开应该怎么办?& Q9 ]$ m8 n% @9 \
答:缺料分析单的结构与生产齐套分析单类似,同类的二开场景可以参考本帖,把齐套分析子项明细业务对象和物理表换成缺料分析子项明细即可。

! q0 G6 Z5 k% z" S, ?/ I

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
作者:amen 来源:百知社区 著作权归作者所有。未经允许禁止转载,如需转载请联系作者获得授权。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则