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

【应用场景】
项目编码或名称变更时,原来由项目文档命名规则生成的文档文件名(含物理文件名)需要批量被修改。
【案例演示】
项目模板生成实例后,默认的输出文档内容

修改项目名称


【设计思路】
书写二开插件,标准保存插件完成后,获取输出物中的文档对象以及对应的物理文件对象,修改需要修改的文档对象名称以及物理文件名。
【实现步骤】
如果你刚接触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
项目二开.项目编码或名称变更时,批量修改输出对象中的文档文件名
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



