PLM物料启动流程使用物料图号字段和相关对象文档的物理文件名字段进行控制
【应用场景】
物料存在相关对象文档,且文档物理文件名包含物料图号,满足条件则物料可以启动流程。
【注意事项】
1、先在测试环境测试无误再考虑使用。
2、二开插件继承了原本启动流程插件,因此启用二开插件后需要取消启动原本的插件。
【实现步骤】
<1>编写表单插件和服务插件,代码如下。
依赖组件:
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.K3.PLM.Business.PlugIn; using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Base; using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Manager; using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Manager.Relation; using Kingdee.K3.PLM.Common.Core.BOSBridge; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq;
二开实现参考:
[Description("物料启动流程二开插件")] public class StartFlowServiceSD: StartFlowService { public override void DoViewOperation(IPLMBusinessFormPlugIn plugin, BeforeExecuteOperationTransaction operationTranaction, ViewInvokeEventArgs e) { string errMes = ""; var selectrows = operationTranaction.SelectedRows.ToList(); if(selectrows.Count > 0) { var selectObjs = selectrows.ToDictionary(w => w["Id"], w => long.Parse(w["CategoryID_Id"].ToString())); var domainObjectList = new List<DynamicObject>(); foreach (var objs in selectObjs.GroupBy(w => w.Value)) { if (!CategoryContract.Instance.IsMaterialCategory(objs.FirstOrDefault().Value)) continue; var pdmobj = DomainObjectManager.Instance(PLMContext, objs.Key).Load(PLMContext, objs.Select(w => w.Key).ToArray()); domainObjectList = domainObjectList.Concat(pdmobj).ToList(); } foreach (var dObj in domainObjectList) { if (!dObj.DynamicObjectType.Properties.ContainsKey("DrawNumber")) continue; string drawNumber = Convert.ToString(dObj["DrawNumber"]); var reObjs = RelatedObjectManager.Instance.GetAllRelatedDyns(PLMContext, dObj); bool haveDoc = false; foreach (var reObj in reObjs) { var globalObj = (DynamicObject)reObj["RelatedObject"]; long categoryId = Convert.ToInt64(globalObj["CategoryId_ID"]); if (CategoryContract.Instance.IsDocumentCategory(categoryId)) { var physicalObj = (DynamicObject)globalObj["FILEID"]; if (physicalObj == null) continue; string physicalName = Convert.ToString(physicalObj["FileName"]); if (physicalName.Contains(drawNumber)) { haveDoc = true; break; } } } if (!haveDoc) { string matCode = Convert.ToString(dObj["Code"]); errMes += matCode + "物料关联的文档不满足流程启动条件!\r\n"; } } if (!string.IsNullOrWhiteSpace(errMes)) { throw new Exception(errMes); } } base.DoViewOperation(plugin, operationTranaction, e); } }
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展研发物料,找到启动流程操作、注册二开插件并取消启用原插件,保存元数据,更新物料模型,开发完毕。
【功能验证】
<1>登录业务站点,选择物料并启动流程,即可看到效果。
【参考资料】
【汇总】星空PLM二开指南(持续更新)https://vip.kingdee.com/article/329914697153905408?productLineId=1&isKnowledge=2
【合辑】金蝶云.星空 PLM知识合辑(持续更新) https://vip.kingdee.com/article/329662872047302912?productLineId=1&isKnowledge=2
金蝶云星空PLM表结构(V8.0) https://vip.kingdee.com/article/350294658524016128?productLineId=1
二次开发扩展程序开发之插件模式 https://vip.kingdee.com/article/83591896433330944?productLineId=1
PLM云 -- 基于BOS平台的二次开发扩展https://vip.kingdee.com/article/10875?productLineId=1
PLM云 -- 基于配置系统的二次开发扩展(对象属性扩展)https://vip.kingdee.com/article/10887?productLineId=1
PLM云 -- 基于标准业务系统的二次开发扩展 https://vip.kingdee.com/article/10901?productLineId=1
金蝶云星空BOS二次开发指南https://vip.kingdee.com/article/94751030918525696?productLineId=1&isKnowledge=2
金蝶云星空数据字典V7.6 https://open.kingdee.com/K3Cloud/WenKu/DocumentView.aspx?docId=102613
PLM物料启动流程使用物料图号字段和相关对象文档的物理文件名字段进行控制
本文2024-09-23 03:03:12发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-156361.html