ERP状态机插件使用场景案例

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

ERP状态机插件使用场景案例

::: hljs-center # ERP状态机插件使用场景案例 ::: 原贴【https://wenku.my7c.com/article/459419033654081792?productLineId=1】 - 场景 在BOS上为生产用料清单的审核校验、服务或插件做了配置,手工审核生产用料清单没有问题。当勾选生产订单单据类型的参数“下达自动审核用料清单”以后,自动执行的审核用料清单无法执行bos上配置的功能。注意:经过测试,生产订单保存(或者复制)时会同步触发生产用料清单的服务,一些简单的数据需求可以移到保存前修改数据包直接干扰!另外计划订单的投放无法触发生产订单后续的服务,也是由于一开始设计的缺陷直接执行的数据库插入,在不受标准逻辑干扰的前提下可以修改[计划订单-下游单据]的转换规则要满足数据需求。 - 问题分析 一开始做这个功能的时候由于生产用料清单审核上没有什么业务,所以程序中直接通过改了用料清单的单据状态标志位为“已审核”然后调用的save方法保存了该用料清单,而且后来很多业务都基于这种情况做的实现,导致后续标准产品想改回调用审核操作的方式改不回来了。 - 状态机插件概念 生产订单状态机的概念,生产订单分录行的状态转换业务代码大部分不是在bos上注册的表单插件和操作插件中,状态转换代码编译好丢上服务器后要在数据库中注册一下类名和组件名,状态转换的时候会根据反射执行到自己的二开代码中。 - 解决方案 由于用料清单是被直接改了单据状态标志位的,那么我们在下达执行业务时,将被改了单据状态的用料清单改成未审核,然后调用一次保存,再将该用料清单调用一次审核操作,这样bos上配置的功能就能被走一遍了。(也可以先调用该用料清单的反审核操作,但有的业务上开启了用料清单变更,必须推变更单不允许反审核,所以推荐直接改单据状态标志位改回去。) - 代码示例 ```csharp using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.Interaction; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Orm; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using Kingdee.K3.Core.MFG.EnumConst; using Kingdee.K3.Core.MFG.PRD.PlugIn; using Kingdee.K3.MFG.App; //AppServiceContext using Kingdee.K3.MFG.Common.BusinessEntity.PRD; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; namespace Kingdee.DY.ServicePlugIn { [Kingdee.BOS.Util.HotUpdate] [Description("生产订单状态机插件,分录状态切换可以触发用料清单服务")] public class MOEntryStatuLinkOpreate : AbstractStateTransferServicePlugIn { /// <summary> /// 状态执行转换后 /// </summary> /// <remarks> /// e.StateCode表示状态执行到哪个状态 1:计划 2:计划确认 3:下达 4:开工 5:完工 6:结案 7:结算 /// e.IsExecuteForward == true 表示正向执行,执行至 反之false就是反执行 /// e.InputDataItems 状态机数据执行包 /// INSERT INTO T_MFG_BIZPLUGINENTRY(FID,FENTRYID,FSEQ,FPLUGIN,FPLUGINID) VALUES (40371,100003,1,'Kingdee.DY.ServicePlugIn.MOEntryStatuLinkOpreate,Kingdee.DY.ServicePlugIn','0AAEEA0-4D56-4901-B733-9B9E61609111') /// </remarks> /// <param name="e"></param> public override void AfterExecuteState(AfterExecuteArg e) { base.AfterExecuteState(e); if (e.StateCode == 3 && e.IsExecuteForward == true) { var moEntryDatas = e.InputDataItems.ToList();//工单数据包 FormMetadata formMetadata = MetaDataServiceHelper.Load(this.Context, "PRD_PPBOM") as FormMetadata; if (moEntryDatas != null && moEntryDatas.Count > 0) { foreach (var item in moEntryDatas) { string moId = item["Id"].ToString(); string sql = string.Format(@"select FID From t_PRD_PPBOM where FMOENTRYID='{0}' ", moId); long ppbomId = DBUtils.ExecuteScalar<long>(this.Context, sql, 0); if (ppbomId > 0) { DynamicObject[] ppbomData = BusinessDataServiceHelper.Load(this.Context, new object[] { ppbomId }, formMetadata.BusinessInfo.GetDynamicObjectType()); IOperationResult result = AppServiceContext.SaveService.Save(this.Context, formMetadata.BusinessInfo, ppbomData.Select((o) => { PPBomBillView pPBomBillView = o; pPBomBillView.DocumentStatus = Convert.ToChar((int)Enums.Enu_BillStatus.KdReapproved).ToString(); return o; } ).ToArray() ); if (result.IsSuccess) { IOperationResult SubmitResult = BusinessDataServiceHelper.Submit(this.Context, formMetadata.BusinessInfo, new object[] { ppbomId }, "Submit", null); if (SubmitResult.IsSuccess) { OperateOption serviceOption = OperateOption.Create(); //serviceOption.SetIgnoreWarning(true); //serviceOption.SetValidateFlag(false); serviceOption.AddInteractionFlag(Kingdee.K3.Core.SCM.SCMConst.MinusCheckSensor); serviceOption.SetIgnoreWarning(true); serviceOption.SetIgnoreInteractionFlag(true); IOperationResult AuditResult = BusinessDataServiceHelper.Audit(this.Context, formMetadata.BusinessInfo, new object[] { ppbomId }, serviceOption); } } } } } } } } } ``` - 插件部署 通过SQL进行插入 ```sql INSERT INTO T_MFG_BIZPLUGINENTRY(FID,FENTRYID,FSEQ,FPLUGIN,FPLUGINID) VALUES (40371,100003,1,‘Kingdee.DY.ServicePlugIn.MOEntryStatuLinkOpreate,Kingdee.DY.ServicePlugIn’,‘D0AAEEA0-4D56-4901-B733-9B9E61609111’) ``` 字段说明: 生产订单FID:40371 委外订单FID:40373 FENTRY:为主键,不重复即可 FPLUGINID:使用随机ID不重复标识即可 FPLUGIN:插件

PPBomBillView 这个报不存在命名空间啥原因?

ERP状态机插件使用场景案例

::: hljs-center# ERP状态机插件使用场景案例:::原贴【https://wenku.my7c.com/article/459419033654081792?productLineId=1】 - 场景在...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息