二开案例.列表插件.绕开Web层直接从App层调用操作

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

二开案例.列表插件.绕开Web层直接从App层调用操作

【应用场景】无需界面交互,无需网络控制,无需功能验权,只需要在服务层快速完成指定操作的轻量级调用。

【案例演示】采购订单列表上,对采购订单的明细信息单据体的指定数据行执行【业务终止】操作。

【实现步骤】

<1>编写列表插件,代码如下。

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

using Kingdee.BOS.Core.List.PlugIn;

using Kingdee.BOS.ServiceHelper;

using Kingdee.BOS.Util;

using System.Collections.Generic;

using System.ComponentModel;


namespace Jac.XkDemo.BOS.Business.PlugIn

{

    /// <summary>

    /// 【列表插件】绕开Web层直接从App层调用操作

    /// </summary>

    [Description("【列表插件】绕开Web层直接从App层调用操作"), HotUpdate]

    public class InvokeFormOperationFromAppListPlugIn : AbstractListPlugIn

    {

        /// <summary>

        /// 列表主菜单点击事件

        /// </summary>

        /// <param name="e"></param>

        public override void BarItemClick(BarItemClickEventArgs e)

        {

            base.BarItemClick(e);

            if (e.BarItemKey.EqualsIgnoreCase("tbInvokeFormOperation"))

            {

                if (this.ListView.CurrentSelectedRowInfo == null)

                {

                    this.View.ShowWarnningMessage("没有选择任何数据,请先选择数据!");

                    return;

                }


                // 获取当前选中单据的主键值

                // SELECT a.FID,b.FENTRYID,b.FSEQ,* FROM T_PUR_POORDER a LEFT JOIN T_PUR_POORDERENTRY b ON a.FID=b.FID WHERE a.FBILLNO='CGDD000512'

                var pkId = this.ListView.CurrentSelectedRowInfo.PrimaryKeyValue;

                var entryPkId = this.ListView.CurrentSelectedRowInfo.EntryPrimaryKeyValue;

                // 对采购订单的明细信息单据体的指定数据行执行终止操作

                var pkEntryIds = new List<KeyValuePair<object, object>>(new[] { new KeyValuePair<object, object>(pkId, entryPkId) });

                var result = BusinessDataServiceHelper.SetBillStatus(this.View.Context, this.View.BillBusinessInfo, pkEntryIds, null, "Terminate");

                if (result.IsSuccess)

                {

                    this.View.ShowMessage(string.Format("操作成功,分录内码为{0}的数据行已被终止", entryPkId));

                    this.ListView.Refresh();

                }

            }

        }

    }

}


<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。


<3>BOSIDE扩展采购订单,列表菜单添加子菜单,注册列表插件,保存元数据,开发完毕。

010069874b5a6be744fbbe6b25db055a6609.webp


现在可以登录业务站点,打开采购订单列表界面,检验一下插件效果啦。

【业务终止】操作执行前:

【业务终止】操作执行后:





【知识点】

<1>表单操作通常绑定在菜单的点击事件上,由用户在前端界面上点击某个菜单而触发BarItemClick事件,该事件到达服务端后,就会执行菜单所绑定的操作,执行链路会先后经过Web层、Model层、App层、Orm层,完成业务逻辑处理及数据持久化后,回发处理结果指令到客户端。

<2>操作按执行链路可分为两大类,其中一类不进入App层,在Web层完成逻辑处理后就返回了(例如:新增、前一、后一),另一类会进入App层,执行操作绑定的校验器、表单服务和数据技术及存储(例如:空操作、保存、提交、审核)。

<3>操作在Web层会完成基本数据校验、操作验权,网络控制,界面交互、触发表单插件(BeforeDoOperation、AfterDoOperation)事件等工作。

<4>操作在App层会完成校验器执行、事务保护下的表单服务执行、操作服务插件触发,表单数据存储等工作。


















【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

二开案例.列表插件.绕开Web层直接从App层调用操作

【应用场景】无需界面交互,无需网络控制,无需功能验权,只需要在服务层快速完成指定操作的轻量级调用。【案例演示】采购订单列表上,对采...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息