App层插件,如何调用保存(Save)操作,ISaveService.Save()
金蝶云社区-Running
Running
4人赞赏了该文章 456次浏览 未经作者许可,禁止转载编辑于2023年10月23日 19:28:54

Ø  运行在App层的插件

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

Ø  实现思路

    通过Kingdee.BOS.App.dll组件提供的ServiceHelper类,调用GetService泛型方法,获取SaveService服务,调用SaveService提供的Save方法

Ø  插件准备

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

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

 

Ø  ISaveService.Save接口介绍

    ISaveService提供4个Save方法,看上去差不多,其实本质有区别,可以将这4个方法区分为2类方法

  • 直接调用Orm把数据保存到数据库

    public DynamicObject Save(Context ctx, DynamicObject dataObject)

    public DynamicObject[] Save(Context ctx, DynamicObject[] dataObject)


  • 模拟保存操作服务端完整过程,调用填充主键、生成单据编号,执行校验器,调用服务端服务与服务端插件,最后调用Orm把数据保存到数据库

    public DynamicObject[] Save(Context ctx, BusinessInfo businessInfo, DynamicObject[] dataObject, string operationNumber)

    public IOperationResult Save(Context ctx, BusinessInfo businessInfo, DynamicObject dataObject, OperateOption option = null, string operationNumber = "")

 

Ø  Save方法参数介绍

名称

类型

说明

ctx

Context

系统全局信息,这里主要使用全局信息中的数据库连接信息

dataObject

DynamicObject

待保存的数据对象

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   Kingdee.BOS.Orm.DataEntity;

using   System;

using   System.Collections.Generic;

using   System.Linq;

using   System.Text;

using   System.Threading.Tasks;

 

namespace MyOperaionServicePlugIn

{

    [System.ComponentModel.Description("区分当前类应用在哪个操作上")]

    public class Class1 : AbstractOperationServicePlugIn

    {

        public override void BeforeExecuteOperationTransaction(

BeforeExecuteOperationTransaction e)

        {

            //例如:保存id10001的物料

            //获取元数据服务

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

            //获取保存服务

            ISaveService saveService =   Kingdee.BOS.App.ServiceHelper.GetService<ISaveService>();

            //获取加载数据服务

            IViewService viewService =   Kingdee.BOS.App.ServiceHelper.GetService<IViewService>();

 

            //获取物料元数据

            FormMetadata materialMetadata   = metadataService.Load(this.Context,"BD_Material") as FormMetadata;

            //获取id10001的物料数据

            DynamicObject[] objs =   viewService.Load(

                this.Context,

                new object[] { 10001 },

                  materialMetadata.BusinessInfo.GetDynamicObjectType());

            //保存id10001的物料

            saveService.Save(this.Context, objs);

            saveService.Save(this.Context,   materialMetadata.BusinessInfo, objs);

        }

    }

}


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

作者:张晋博、丁振华

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

赞 4