针对星空PLM二开实现CAD文档检入时对CAD数据模型进行校验

【应用场景】
二开实现CAD文档检入阶段对CAD数据模型进行检验。
针对CAD导入时的二开校验请参考:
https://vip.kingdee.com/article/385354058087083776
【注意事项】
二开的插件需要继承标准功能插件,重写标准功能方法。视二开业务复杂度存在影响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
继承CADCheckInForm类。这个类是标准产品中实现CAD检入的基础类,从中获取到反序列化后的Cad数据结构对象_cadDataModel。以及校验实体对象 _validateSubjects
二开需求的实现参考方案如下:
重写CreateDataView方法,在CreateDataView方法中对数据模型进行校验。
同时缓存校验结果,并重写AfterBarItemClick事件,对导入按钮tbCheckIn的实现进行干预。
复用CreateDataView方法中缓存下来的校验结果,如果存在校验不通过的情况,则提示出来。否则执行标准事件方法
参考下图


参考代码如下:
namespace PLM.CAD.Plugin
{
[Description("测试CAD检入动态表单二开")]
public class CADCheckinFormBefore: CADCheckInForm
{
/// <summary>
/// 重写CreateDataView方法,在界面加载时对模型进行校验
/// </summary>
/// <param name="ctx"></param>
/// <param name="root"></param>
/// <param name="cadDataStructs"></param>
/// <param name="progress"></param>
public override void CreateDataView(PLMBasketContext ctx, CadDataStruct root, List<CadDataStruct> cadDataStructs, Action<CallProgress> progress)
{
base.CreateDataView(ctx, root, cadDataStructs, progress);
CadDataModel currentMdl = _cadDataModel;
List<CadValidateSubject> validateSubjects = _validateSubjects;
var dyncol = GridHelper.GetEntityCollection(this.View, ENTITY_NAME);
Validate(ctx, currentMdl, ref validateSubjects);//校验数据,将全局变量 _cadDataModel,_validateSubjects作为参数传入
RenderState(ctx, dyncol, validateSubjects);//展示渲染
}
protected List<CadValidateSubject> ErrValidSubjectsCache = new List<CadValidateSubject>();//校验结果缓存,用以将校验结果在检入时复用
/// <summary>
/// 业务校验方法
/// </summary>
/// <param name="ctx">上下文</param>
/// <param name="cadDataModel">Cad数据模型</param>
/// <param name="validateSubjects">校验对象</param>
protected void Validate(PLMContext ctx, CadDataModel cadDataModel, ref List<CadValidateSubject> validateSubjects)
{
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.Busi针对星空PLM二开实现CAD文档检入时对CAD数据模型进行校验
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



