PLM.二开案例.项目最后一个任务完成时,项目自动完成

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

PLM.二开案例.项目最后一个任务完成时,项目自动完成

【应用场景】

当完成最后一个任务时,项目自动完成。

【案例演示】

最后一个任务进行中。

完成最后一个任务

【设计思路】

1. 二开执行计划。执行计划开发教程:

https://vip.kingdee.com/article/35401?productLineId=1

https://vip.kingdee.com/article/172011048747176704?productLineId=1

2. 使用PLM标准状态转换接口,在任务完成时对项目任务进行判断,符合业务场景的项目自动完成。本示例演示此方案。

【实现步骤】

如果你刚接触PLM二开,你可能需要参考:

如何编写二开插件配置等请参考:二次开发扩展程序开发之插件模式https://vip.kingdee.com/article/83591896433330944?productLineId=1

其他星空PLM开发指南也可以参考 【汇总】星空PLM二开指南(持续更新)https://vip.kingdee.com/article/329914697153905408?productLineId=1&isKnowledge=2

更多详细的金蝶云星空BOS二次开发指南:https://vip.kingdee.com/article/94751030918525696?productLineId=1&isKnowledge=2


<1>编写二开插件

本示例二开的主要接口方法位于标准插件Kingdee.K3.PLM.CFG.Common.Interface.dll中,接口方法为Kingdee.K3.PLM.CFG.Common.Interface.Switchers. IControlStageSwitcher


本示例必要的引用

实现接口IControlStageSwitcher,使用StageSwitcher特性标记[任务]业务类型,指定状态为[完成],实现方法AfterEnterStatus处理任务到完成时的业务

* 本示例只演示简单的状态转换,如果项目转换涉及流程,请另作处理。可在PLM二开指南中查找相关资料。

* 使用标准方案转化项目生命周期不涉及规则类校验,请根据自身业务场景设置必要的校验逻辑

示例代码:

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.K3.PLM.CFG.Common.BusinessEntity.CategoryStatus;

using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Manager;

using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Operation;

using Kingdee.K3.PLM.CFG.Common.Interface.CategoryStatus;

using Kingdee.K3.PLM.CFG.Common.Interface.EventArgument;

using Kingdee.K3.PLM.CFG.Common.Interface.Switchers;

using Kingdee.K3.PLM.Common.BusinessEntity.Operation;

using Kingdee.K3.PLM.Common.Core.BOSBridge;

using Kingdee.K3.PLM.Common.Core.Log;

using Kingdee.K3.PLM.Common.Core.ServiceHelper;

using Kingdee.K3.PLM.STD.Common.BusinessEntity.Project.Plugins;

using System;

using System.Linq;


namespace ISV.TaskDemo.Common.BusinessEntity

{

    [StageSwitcher(CategoryId1 = (long)StandardCategoryType.TaskStage = ControlStage.Finish)]

    public class TaskFinishStageSwitchDemo : IControlStageSwitcher

    {

        public void AfterEnterStatus(PLMContext ctxDynamicObject objControlStageChangeEventArgs e)

        {

            //获取所属项目

            var projectId = Convert.ToInt64(obj["PROJECT_ID"]);

            var project = DomainObjectManager.AutoLoad(ctxprojectId);

            /*

             * 本示例通过标准项目规则判断是否允许当前项目完成。

             * 可根据自己实际业务场景进行业务判断。

             * */

            if (RuleVerifyPlugin.Instance.Check(ctxprojectControlStage.FinishControlRuleType.Prj_ReadyLeader) && //是否为项目经理

                RuleVerifyPlugin.Instance.Check(ctxprojectControlStage.FinishControlRuleType.Prj_SubTaskAllArrived) && //下层任务是否都完成

                RuleVerifyPlugin.Instance.Check(ctxprojectControlStage.FinishControlRuleType.Prj_CheckMark//要求全部标记

                )

            {

                //符合要求使用标准生命周期转换方法,转换项目至完成状态

                StageConvertItem item = new StageConvertItem() { Object = projectTargetStage = ControlStage.Finish };

                var result = StageConvertMananger.Instance.SwitchStage(ctx, (new[] { item }).ToList());

                if (OperationResultHelper.IsSuccess(result)) // 请根据业务场景处理项目转换至完成的执行结果。 此处演示记录文件日志。

                {

                    LogHelper.Info(string.Format("任务{0}完成时,项目{1}完成!"obj["Code"], project["Code"]));

                }

            }

        }


        public void AfterLeaveStatus(PLMContext ctxDynamicObject objControlStageChangeEventArgs e)

        {

            //缺省

        }

    }

}



<3>拷贝组件

拷贝新增插件的组件到应用站点的WebSite\Bin目录下,重启IIS

上述操作完成后便可以查看效果啦。


PLM.二开案例.项目最后一个任务完成时,项目自动完成

【应用场景】当完成最后一个任务时,项目自动完成。【案例演示】最后一个任务进行中。完成最后一个任务【设计思路】1. 二开执行计划。执行...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息