将PLM系统中文档的PDF生成下载链接,通过邮件、社交工具发送给客户、供应商等合作伙伴 更好的促进产业链上下游协作
【应用场景】
目前标准产品支持原文档批量生成下载链接,本次demo指导大家如何实现生成下载PDF链接。
【注意事项】
二开完成后,具体的配置方法与标准生成链接相似,请参考:文档外部分享配置 (kingdee.com)。
【案例演示】
生成原文档的PDF文件下载链接。
【实现步骤】
<1>编写服务插件,继承DocumentDownloadLinkService,代码如下。
using Kingdee.BOS; using Kingdee.BOS.Core; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Util; using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Manager; using Kingdee.K3.PLM.Common.Core.BOSBridge; using Kingdee.K3.PLM.Common.Core.Common; using Kingdee.K3.PLM.Common.Core.ServiceHelper; using Kingdee.K3.PLM.Common.Core.Utility; using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Text; namespace .Document { [Description("二开生成链接服务插件")] public class CreateDownLoadLinkService : DocumentDownloadLinkService { /// <summary> /// 返回需要下载的文档 /// </summary> /// <param name="selectedRows"></param> /// <returns></returns> protected override List<DynamicObject> GetDownloadDocuments(IEnumerable<ExtendedDataEntity> selectedRows) { var tempDocIds = selectedRows.Select(t => Convert.ToInt64(t.DataEntity["Id"])).Cast<object>().ToArray(); List<DynamicObject> dynCol = DomainObjectManager.Instance(this.PLMContext, (long)StandardCategoryType.Document).Load(this.PLMContext, tempDocIds).ToList(); foreach (var dyn in dynCol) { if ((DynamicObject)dyn["FileId"] != null) { var file = GetDocumentInfo(PLMContext, Convert.ToInt64(dyn["Id"])); if (file != null) { var FileNameNoExt = Path.GetFileNameWithoutExtension(file["FileName"].GetString()); var ext = Path.GetExtension((file["FFILENAME"] ?? "").ToString()).ToLower(); file["FileName"] = FileNameNoExt + ext; dyn["FileId"] = file; } } } return dynCol; } /// <summary> /// 获取生成链接所需的文档信息,包括PDF的物理文件Id,文档名等 /// </summary> /// <param name="ctx"></param> /// <param name="docId"></param> /// <returns></returns> private DynamicObject GetDocumentInfo(PLMContext ctx, long docId) { List<SqlParam> paras = new List<SqlParam>() { new SqlParam("@FID", KDDbType.Int64, docId), new SqlParam("@FLOCALEID", KDDbType.Int32, ctx.LanguageId) }; string sql = string.Format(@"SELECT D.FRELEVANTOBJECT as Id,P.FFILENAME,B.FNAME as FileName FROM T_PLM_PDM_BASE A INNER JOIN T_PLM_PDM_BASE_L B ON A.FID = B.FID INNER JOIN T_PLM_PDM_BASE_D D ON A.FID = D.FID INNER JOIN T_PLM_PDM_PHYSICALFILE P ON D.FRELEVANTOBJECT = P.FFILEID WHERE A.FID = @FID AND FLOCALEID=@FLOCALEID"); return PLMDBUtils.Instance.ExecuteDynamicObject(ctx, sql, paras).FirstOrDefault(); } } }
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>操作列表添加操作
<4>
在业务类型配置-》操作配置添加【生成下载PDF链接】操作
业务类型授权增加权限项
【功能验证】
<1>登录业务站点,打开文档库,可以看到【生成下载PDF链接】,此功能针对文档已经生成PDF的文件。注意:如果原文档没有PDF,则不能生成下载链接。
【参考资料】
【汇总】星空PLM二开指南(持续更新)https://vip.kingdee.com/article/329914697153905408?productLineId=1&isKnowledge=2
【合辑】金蝶云.星空 PLM知识合辑(持续更新) https://vip.kingdee.com/article/329662872047302912?productLineId=1&isKnowledge=2
二次开发扩展程序开发之插件模式 https://vip.kingdee.com/article/83591896433330944?productLineId=1
PLM云 -- 基于BOS平台的二次开发扩展 https://vip.kingdee.com/article/10875?productLineId=1
PLM云 -- 基于配置系统的二次开发扩展(对象属性扩展)https://vip.kingdee.com/article/10887?productLineId=1
PLM云 -- 基于标准业务系统的二次开发扩展 https://vip.kingdee.com/article/10901?productLineId=1
金蝶云星空BOS二次开发指南 https://vip.kingdee.com/article/94751030918525696?productLineId=1&isKnowledge=2
金蝶云星空数据字典V7.6 https://open.kingdee.com/K3Cloud/WenKu/DocumentView.aspx?docId=102613
将PLM系统中文档的PDF生成下载链接,通过邮件、社交工具发送给客户、供应商等合作伙伴 更好的促进产业链上下游协作
本文2024-09-23 03:02:09发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-156218.html