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.变更申请单.自定义下推变更单二开方案
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



