PLM二开:如何在自定义插件中使用状态转换服务接口

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

PLM二开:如何在自定义插件中使用状态转换服务接口


此处以将对象转到 归档 为例。


一、在生命周期阶段列表找到目标状态对应的值。


20220616152755932.webp



二、调用生命周期状态转换接口

组件: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二开:如何在自定义插件中使用状态转换服务接口

此处以将对象转到 归档 为例。一、在生命周期阶段列表找到目标状态对应的值。二、调用生命周期状态转换接口组件:Kingdee.K3.PLM.CFG.Commo...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息