PLM二开:如何在自定义插件中使用状态转换服务接口
此处以将对象转到 归档 为例。
一、在生命周期阶段列表找到目标状态对应的值。
二、调用生命周期状态转换接口
组件:Kingdee.K3.PLM.CFG.Common.BusinessEntity.dll
方法:StageConvertManager.SwitchStage
代码示例:
string targetStatus = "AC"; //归档对应的状态值 //获取需要状态转换的对象,此处以根据id获取对象为例 var pdmObj = DomainObjectManager.Instance(PLMContext, categoryId).Get(PLMContext, fid); //执行状态转换 var stageConverts = new List<StageConvertItem>(); stageConverts.Add(new StageConvertItem { TargetStage = targetStatus, Object = pdmObj }); var statusConvertResults = StageConvertMananger.Instance.SwitchStage(PLMContext, stageConverts);//返回状态转换结果
请教一下为什么在变更单流程中,对新的BOM版本进行状态转换,statusConvertResults返回成功但实际还是原状态 代码如下:
public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e)
{
base.BeforeExecuteOperationTransaction(e);
List<long> fids = new List<long>();
foreach (var item in e.SelectedRows)
{
var changeData = item.DataEntity;
DynamicObjectCollection changeEntity = changeData["ChangeObjectEntity"] as DynamicObjectCollection;
foreach (var changeEntityitem in changeEntity) // 简单遍历以演示,实际使用请考虑性能
{
var oldVerId = Convert.ToInt64(changeEntityitem["NewVersionId"]); //对象版本ID
if (oldVerId != 0)
{
fids.Add(oldVerId);
}
}
}
string targetStatus = "AB"; //试制对应的状态值
//获取需要状态转换的对象,此处以根据id获取对象为例
//批量加载对应业务类型对象。 可以传入Id数组获取对象数组
//执行状态转换
var stageConverts = new List<StageConvertItem>();
foreach (var ids in fids)
{
var oldVerObj = GlobalVersionManager.InstanceByObjectId(this.PLMContext, ids).Get(PLMContext, ids);
//var fid = (long)oldVerObj["id"];
//var categoryId = Convert.ToInt64(oldVerObj["CategoryID_Id"]);
//var pdmObj = DomainObjectManager.Instance(PLMContext, categoryId).Get(PLMContext, fid);
stageConverts.Add(new StageConvertItem { TargetStage = targetStatus, Object = oldVerObj });
}
var statusConvertResults = StageConvertMananger.Instance.SwitchStage(PLMContext, stageConverts);
if (statusConvertResults[0].IsSuccess == false)
{
var OperateResult = statusConvertResults[0].OperateResult;
string errMsg = OperateResult[0].Name + "原因:" + OperateResult[0].Message;
throw new Exception(errMsg);
}else
{
IOperationResult operationResult = new OperationResult();
this.OperationResult.MergeResult(operationResult);
}
}
太牛了!顺便问下需要引用什么.dll组件呢,万分感谢!
PLM二开:如何在自定义插件中使用状态转换服务接口
本文2024-09-16 17:17:40发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14777.html