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

项目二开.项目编码或名称变更时,批量修改输出对象中的文档文件名

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

项目二开.项目编码或名称变更时,批量修改输出对象中的文档文件名

【应用场景】

项目编码或名称变更时,原来由项目文档命名规则生成的文档文件名(含物理文件名)需要批量被修改。


【案例演示】

项目模板生成实例后,默认的输出文档内容

修改项目名称


【设计思路】

书写二开插件,标准保存插件完成后,获取输出物中的文档对象以及对应的物理文件对象,修改需要修改的文档对象名称以及物理文件名。


【实现步骤】

如果你刚接触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>编写二开插件

首先项目中添加必要的引用

继承PLM标准单据插件,在AfterDoOperation事件中修改输出对象的名称

示例代码:

using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.Util;

using Kingdee.K3.PLM.Business.PlugIn;

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

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

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

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

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

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

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

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Linq;


namespace ISV.PLM.ProjectDemo

{

    [HotUpdate]

    [Description("项目保存二开插件")]

    public class ProjectSaveExtendPlugIn : AbstractPLMBillPlugIn

    {

        private string _oldProjectName = null;

        public override void OnLoad(EventArgs e)

        {

            base.OnLoad(e);

            if (this.Model != null && this.Model.DataObject != null && _oldProjectName == null)

            {

                _oldProjectName = this.Model.DataObject["NAME"].GetString(); // 这里只需要加载一次,后续保存操作会刷新,可能会被新的项目名称覆盖

            }

        }


        public override void AfterDoOperation(AfterDoOperationEventArgs e)

        {

            // 本示例只演示如何修改名称。具体名称校验规则可根据实际场景完善

            // 本示例暂未涉及版本变动, 建议涉及对象信息修改的地方加上必要的日志记录,否则可能无法追溯。

            base.AfterDoOperation(e);

            if (e.OperationResult != null && e.OperationResult.IsSuccess && e.Operation.Operation.ToUpperInvariant() == "SAVE")

            {

                var newProjectName = this.Model.DataObject["NAME"].GetString();

                if (newProjectName == _oldProjectName) return; //未改项目名时退出

                var projectId = Convert.ToInt64(this.Model.DataObject["Id"]);

                List<DynamicObject> wbs = ProjectManager.Instance.GetProjectWBSObjs(PLMContext, projectId);

                var wbsIds = wbs.Select(x => Convert.ToInt64(x["id"])).ToList();

                DynamicObjectCollection relatedObjects = ProjectRelationModel.Instance.GetAllProjectRelatedObjectList(this.PLMContext, wbsIds, 1); //获取项目任务输出内容,1代表为输出

                if (relatedObjects.Count > 0)

                {

                    var ids = relatedObjects.Select(w => w["FRELATEDOBJECT"]);

                    var reobjects = GlobalObjectManager.Instance(PLMContext).Load(PLMContext, ids.ToArray());

                    //获取输出中的文档对象

                    //注意需要过滤集成文档,集成文档不能随意改名

                    var docIds = reobjects.Where(x => CategoryContract.Instance.IsDocumentCategory(Convert.ToInt64(x["CategoryId_Id"])) && !FileTypeManager.I

项目二开.项目编码或名称变更时,批量修改输出对象中的文档文件名

【应用场景】项目编码或名称变更时,原来由项目文档命名规则生成的文档文件名(含物理文件名)需要批量被修改。【案例演示】项目模板生成实...
点击下载文档文档为doc格式

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

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