App层插件,如何删除(Delete)单据,IDeleteService.Delete()
金蝶云社区-Running
Running
2人赞赏了该文章 210次浏览 未经作者许可,禁止转载编辑于2023年10月23日 19:55:43

Ø  运行在App层的插件

    包括操作插件、单据转换插件、反写插件、账表取数插件等,此类插件掌控着某种特定服务的执行过程,与交互界面无关;


Ø  实现思路

    调用Kingdee.BOS.App.dll组件的ServiceHelper类提供的GetService泛型方法获取删除服务

 

Ø  插件准备

    插件工程引用Kingdee.BOS.App.dll、Kingdee.BOS.Contracts.dll、Kingdee.BOS.DataEntity.dll

    类文件引用相关命名空间,详见示例代码

 

Ø  接口介绍

 IDeleteService提供两个Delete方法,其区别在于

  • 参数不带元数据描述信息的,直接执行数据库删除操作,把数据删除

    public void Delete(Context ctx, object[] Ids, DynamicObjectType dynamicObjectType)


  • 参数带元数据描述信息的,执行删除操作的服务端完整服务,如执行删除操作的校验器、删除操作的服务端服务、删除操作的服务端插件

public IOperationResult Delete(Context ctx, BusinessInfo businessInfo, object[] Ids, OperateOption option = nullstring operationNumber = "")

 

Ø  参数介绍

名称

类型

说明

ctx

Context

系统上下文全局信息

Ids

object[]

待删除数据的id集合

dynamicObjectType

DynamicObjectType

待删除数据的动态实体类型

businessInfo

BusinessInfo

待删除数据的元数据描述信息

option

OperateOption

业务控制额外选项,删除的服务端服务和插件都能持有此对象

operationNumber

string

删除操作的操作码

 

Ø  示例代码

C#


using   Kingdee.BOS.Contracts;

using   Kingdee.BOS.Core.DynamicForm.PlugIn;

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

using   Kingdee.BOS.Core.Metadata;

using System;

using   System.Collections.Generic;

using   System.Linq;

using   System.Text;

using   System.Threading.Tasks;

 

namespace MyOperaionServicePlugIn

{

    public class Class5 : AbstractOperationServicePlugIn

    {

        public override void BeforeExecuteOperationTransaction(

BeforeExecuteOperationTransaction e)

        {

            //获取删除服务

            IDeleteService deleteService =

                Kingdee.BOS.App.ServiceHelper.GetService<IDeleteService>();

            //获取元数据服务

            IMetaDataService metaDataService =  

                Kingdee.BOS.App.ServiceHelper.GetService<IMetaDataService>();

            //获取物料元数据

            FormMetadata materialMetadata   =

                  metaDataService.Load(this.Context,"BD_Material") as FormMetadata;

            //执行删除服务的完整过程(推荐方式)

            deleteService.Delete(

                this.Context,

                  materialMetadata.BusinessInfo,

                new object[] { 10001, 10002 });

 

            // 直接执行数据删除 (风险极高,仅适用于未定义单据,只是利用ORM模型存取数据的情况)

// 调用此服务会跳过删除校验,仅删除ORM模型内含表格的数据,其他相关数据不会处理,如果有上下游单据及反写,不会撤销关联及回滚反写,从而造成数据错误!

            deleteService.Delete(

                this.Context,

                new object[] { 10001, 10002 },

                  materialMetadata.BusinessInfo.GetDynamicObjectType());

        }

    }

}


本文转载自:《K/3 Cloud BOS 插件开发百问百答》

作者:张晋博、丁振华

原文链接:https://open.kingdee.com/K3Cloud/Wenku/DocumentView.aspx?docId=117527

赞 2