针对星空PLM二开实现CAD文档导入时对CAD数据模型进行校验
【应用场景】
二开实现CAD文档导入阶段对CAD数据模型进行检验
针对CAD检入时的二开校验请参考:
https://vip.kingdee.com/article/398760024484581632
【注意事项】
二开的插件需要继承标准功能插件,重写标准功能方法。视二开业务复杂度存在影响CAD导入界面加载速度的情况
本文基于以下版本代码进行整理:
K3Cloud V8.0(12号补丁)
补丁编号:PT-146930 [8.1.0.20221110]
发布时间:2022/11/10
【案例演示】
【实现步骤】
<1>创建.Net 4.0类库项目编写插件,项目需引用以下组件:
Kingdee.BOS.Core.dll
Kingdee.BOS.DataEntity.dll
Kingdee.K3.PLM.Business.PlugIn.dll
Kingdee.K3.PLM.Common.Cad.dll
Kingdee.K3.PLM.Common.Core.dll
Kingdee.K3.PLM.STD.Business.PlugIn.dll
Kingdee.K3.PLM.STD.Common.BusinessEntity.dll
继承CADImportForm类。这个类是标准产品中实现CAD导入的基础类,从中获取到反序列化后的Cad数据结构对象_cadDataModel。以及校验实体对象 _validateSubjects
二开需求的实现参考方案如下:
重写CreateTree方法,在CreateTree方法中对数据模型进行校验。
同时缓存校验结果,并重写AfterBarItemClick事件,对导入按钮tbUpLoadFile的实现进行干预。
复用CreateTree方法中缓存下来的校验结果,如果存在校验不通过的情况,则提示出来。否则执行标准事件方法
参考下图
参考代码如下:
namespace PLM.CAD.Plugin { [Description("测试CAD导入动态表单二开")] public class CADImportFormBefore : CADImportForm { /// <summary> /// 重写CreateTree方法,在界面加载过程中对数据进行二开校验 /// </summary> /// <param name="ctlData"></param> /// <param name="progress"></param> public override void CreateTree(CADUserControlData ctlData, Action<CallProgress> progress) { base.CreateTree(ctlData, progress); Validate(PLMContext, _cadDataModel,ref _validateSubjects, ctlData);//校验数据,将全局变量 _cadDataModel,_validateSubjects作为参数传入 RenderErrorDataStateColumn(PLMView, _validateSubjects, MainEntity, StateColumnName, "CadId", ref _rowStateRecord);//展示渲染 } protected List<CadValidateSubject> ErrValidSubjectsCache = new List<CadValidateSubject>();//校验结果缓存,用以将校验结果在上传时复用 /// <summary> /// 业务校验方法,根据业务需要实现,示例代码仅供参考 /// </summary> /// <param name="ctx"></param> /// <param name="cadDataModel">Cad数据模型</param> /// <param name="validateSubjects">校验对象</param> /// <param name="ctlData">界面控制信息</param> protected void Validate(PLMContext ctx, CadDataModel cadDataModel, ref List<CadValidateSubject> validateSubjects, CADUserControlData ctlData) { var dataStructs = cadDataModel.CadDataStructs; for (int i = 0; i < dataStructs.Count; i++) { if (i == 1) { var ds = dataStructs[i]; var validSbj = validateSubjects.FirstOrDefault(t => t.CadDataStruct.Id.Equals(ds.Id, StringComparison.OrdinalIgnoreCase)); if (validSbj != null) { validSbj.ValidateResult.Message = "二开校验测试-严重错误"; validSbj.ValidateResult.ErrorLevel = Kingdee.K3.PLM.STD.Common.BusinessEntity.Enum.ErrorLevel.SeriousError; ErrValidSubjectsCache.Add(validSbj);//将校验失败项进行缓存 } } } } /// <summary> /// 点击事件 /// </summary> /// <param name="e"></param> public override void AfterBarItemClick(AfterBarItemClickEventArgs e) {//点击导入文档按钮时对数据进行校验 switch (e.BarItemKey) { case "tbUpLoadFile"://导入文档按钮 if (ErrValidSubjectsCache.Count > 0) {//如果错误校验列表不为空,则提示出来 this.View.ShowErrMessage("存在二开校验测试错误,请排除后重新导入文档,具体提示请查看状态列中的消息!"); return; } break; } base.AfterBarItemClick(e); } } }
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展CAD导入,注册表单插件,并反注册标准插件,保存元数据,开发完毕。
【功能验证】
<1>打开任一CAD,使用PLM客户端,使用PLM插件中导入文档功能 在界面展开、以及点击上传按钮验证二开功能(开发者可附加Cloud的w3wp.exe进程进行调试)。
【金蝶云星空BOS二次开发案例演示】
https://vip.kingdee.com/article/94751030918525696
针对星空PLM二开实现CAD文档导入时对CAD数据模型进行校验
本文2024-09-23 03:02:26发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-156255.html