PLM.二开案例.ECN变更单自动同步更新服务案例

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

PLM.二开案例.ECN变更单自动同步更新服务案例

【应用场景】

变更单新增操作,自动同步更新制造用料清单


【案例演示】

变更单新增一个操作,用于自动同步更新制造用料清单


【实现步骤】

<1>编写服务插件

你可能需要以下引用

代码示例:

using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.Core.MFG;
using Kingdee.K3.Core.MFG.EntityHelper;
using Kingdee.K3.MFG.App;
using Kingdee.K3.MFG.Contracts;
using Kingdee.K3.MFG.Contracts.ENG;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Xml.Serialization;

namespace ISV.MFGSync.Common.BusinessEntity
{
    [Description("插件示例:ECN自动同步更新")]
    public class ECNSyncMFGService : AbstractOperationServicePlugIn
    {
        public override void OnPreparePropertys(PreparePropertysEventArgs e)
        {
            e.FieldKeys.Add("FSyncContext");
            e.FieldKeys.Add("FIsERPSynSuccess");
            base.OnPreparePropertys(e);
        }

        public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e)
        {
            var allSyncBomIds = new List<long>();
            foreach (var row in e.SelectedRows)
            {
                var data = row.DataEntity;
                if (!Convert.ToBoolean(data["IsERPSynSuccess"])) continue; //判断ECN是否下推
                if (data["SyncContext"] == null || data["SyncContext"] == DBNull.Value) continue; //获取已下推的数据列表,没有则跳过
                /*
                 * ECN变更单下推后,将对应的制造物料清单内码以XML的形式序列化在了FSyncContext字段上
                 * 可反序列化出来直接使用
                 */
                var syncxml = data["SyncContext"].ToString();
                var serializer = new XmlSerializer(typeof(HashSet<long>));
                try
                {
                    using (StringReader reader = new StringReader(syncxml))
                    {
                        allSyncBomIds.AddRange((HashSet<long>)serializer.Deserialize(reader));
                    }
                }
                catch (InvalidOperationException)
                {  //历史版本数据存在类型不一致的情况,按需处理 
                }
            }
            if (allSyncBomIds.Any())
            {
                var result = BomSyncUpdate(allSyncBomIds);
                if (result != null)
                {
                    this.OperationResult.MergeResult(result);
                }
            }
        }

        private IOperationResult BomSyncUpdate(List<long> bomIds)
        {

            IOperationResult result = new OperationResult();
            FormMetadata bomMeta = MetaDataServiceHelper.Load(this.Context, MFGFormIdConst.SubSys_ENG.BomBill) as FormMetadata;
            var bomDatas = BusinessDataServiceHelper.Load(Context, bomIds.Cast<object>().ToArray(), bomMeta.BusinessInfo.GetDynamicObjectType()).ToList();

            IBOMSynUpdateService bomSynsUpdateService = MFGServiceFactory.GetService<IBOMSynUpdateService>(this.Context);
            DynamicObject parameterData = AppServiceContext.ParamService.TryGetUserParam(this.Context, MFGFormIdConst.SubSys_ENG.BomBill, MFGFormIdConst.SubSys_ENG.BomBillParamter);
            string conSultDate = parameterData.GetDynamicValue<string>("ConSultDate");

            //生产用料清单
            IOperationResult operationPrdResult = bomSynsUpdateService.SynsUpdatePPBom(this.Context, bomDatas, conSultDate);
            if (operationPrdResult != null)
            {
                result.MergeResult(operationPrdResult);
            }
            //委外用料清单
            IOperationResult operationSubResult = bomSynsUpdateService.SynsSubUpdatePPBom(this.Context, bomDatas, conSultDate);
            if (operationSubResult != null)
            {
                result.MergeResult(operationSubResult);
            }
            //计划用料清单
            IOperationResult operationSubPLMResult = bomSynsUpdateService.SynsSubUpdatePLPPBom(this.Context, bomDatas, conSultDate);
            if (operationSubPLMResult != null)
            {
                result.MergeResult(operationSubPLMResult);
            }
            return result;
        }

    }
}


<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。

<3>BOSIDE扩展变更单,新增一个空操作,并绑定上述服务插件

<4>业务类型配置中或业务类型初始化,更新变更单业务类型模型;


<5>随后即可在变更单流程中配置对应服务操作;


【功能验证】

<1>发起一个变更单流程查看效果



【参考资料】

如何后台调用同步更新计划BOM、用料清单 (kingdee.com)

【汇总】星空PLM二开指南(持续更新) (kingdee.com)

金蝶云星空BOS二次开发案例演示 (kingdee.com)

PLM.二开案例.ECN变更单自动同步更新服务案例

【应用场景】变更单新增操作,自动同步更新制造用料清单【案例演示】变更单新增一个操作,用于自动同步更新制造用料清单【实现步骤】<1>编...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息