电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

PLM.变更申请单.自定义下推变更单二开方案

来源:金蝶云社区作者:金蝶2024-09-233

PLM.变更申请单.自定义下推变更单二开方案

前言

PLM变更申请单中的下推变更单功能,标准产品中两者为一对一映射,即一张申请单可以下推成一张变更单,这个关系无法改变,且下推内容暂只支持单据头字段的配置。

 

标准产品中的申请单下推功能,目前无法通过二开方式干预,因此对于一些特殊的业务场景,建议通过自定义自己的操作二开实现。PLM组件中,有部分公用方法可供代码开发使用。

二开示例

1. 场景说明

根据申请单中不同变更对象内容,下推生成不同的变更单类型。

2. 可行方案

由于标准功能无法通过二开干预,所以只能通过完全自定义操作实现。你可以通过扩展申请单,在申请单上加入表单按钮,然后编写表单插件或者服务拆建实现。本文不详细介绍插件部署方式,相关内容可以参考【汇总】星空PLM二开指南(持续更新)

3. 编码示例

对于上述场景,你可以参考下面的代码示例。

在此之前,你可能需要以下组件:

Kingdee.K3.PLM.Common.Core.dll

Kingdee.K3.PLM.Common.Framework.dll

Kingdee.K3.PLM.Common.BusinessEntity.dll

Kingdee.K3.PLM.Business.PlugIn.dll

Kingdee.K3.PLM.CFG.Common.BusinessEntity.dll

Kingdee.K3.PLM.CFG.Common.Core.dll

 

C# 编码示例:

//本示例通过重写表单插件的菜单按钮事件实现。也可以通过增加操作绑定服务操作实现

public override void BarItemClick(BarItemClickEventArgs e)

{

    if(e.BarItemKey == "PLM_tbSplitPush") // 自定义按钮名称

    {

        IOperationResult result = new SaveOperationResult();

        var ecrId = Convert.ToInt64(this.PLMView.CurrentView.Model.DataObject["Id"]);

        if(ECRModel.Instance.HasEcn(PLMContext, ecrId)) // 标准产品中的判断是否已经下推,也可以自定义其他标记做判断

        {

            result.IsSuccess = false;

            result.OperateResult.Add(OperationResultHelper.CreateOperateResult(ecrId.ToString(), 0, "下推变更单失败", false, "已经存在相关联变更单,不允许再下推!", MessageType.Warning));

        }

        else

        {

            using(KDTransactionScope trans = new KDTransactionScope(TransactionScopeOption.Required))

            {

                var changeObjectEntitys = this.PLMView.CurrentView.Model.DataObject["ChangeObjectEntity"] as DynamicObjectCollection;

                for(int index = 0; index < changeObjectEntitys.Count; index++)

                {

                    // 复制一个当前申请单对象,按需要修改自己的数据包内容

                    // 本示例演示,每一行创建一个变更单的场景

                    // 注意:实际场景还需要考虑不同变更类型,以及评估内容等

                    var targetECR = this.PLMView.CurrentView.Model.DataObject.Clone() as DynamicObject;

                    var targetECRChangeObjs = targetECR["ChangeObjectEntity"] as DynamicObjectCollection;

                    for(int delIndex = targetECRChangeObjs.Count - 1; delIndex > index; delIndex--)

                    {

                        targetECRChangeObjs.RemoveAt(delIndex);

                    }

                    for(int delIndex = 0; delIndex < index; delIndex++)

                    {

                        targetECRChangeObjs.RemoveAt(0);

                    }

                    var currrentResult = PushEcn(this.PLMContext, targetECR);

                    foreach(var res in currrentResult.OperateResult)

                    {

                        result.OperateResult.Add(res);

                    }

                    if(!currrentResult.IsSuccess)

                    {

                        result.IsSuccess = false;

                        break;

                    }

                    result.IsSuccess = true;

                }

                if(result.IsSuccess) // 一个不成功则回滚。可以根据场景自己控制

                {

                    trans.Complete();

                }

            }

        }

        PLMView.ShowOperateResult(OperationResultHelper.GetResults(result));

    }

    base.BarItemClick(e);

}

 

/// <summary>

/// 下推申请单至变更单

/// </summary>

/// <param name="ctx">PLM上下文</param>

/// <param name="ecr">ECR申请单单据体数据包</param>

/// <returns>操作结果</returns>

private IOperationResult PushEcn(PLMContext ctx, DynamicObject ecr)

{

    if(ecr == null) return null;

    long ecrId = Convert.ToInt64(ecr["Id"]);

    //获取

PLM.变更申请单.自定义下推变更单二开方案

前言PLM变更申请单中的下推变更单功能,标准产品中两者为一对一映射,即一张申请单可以下推成一张变更单,这个关系无法改变,且下推内容暂...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信