二开案例.列表插件.绕开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扩展采购订单,列表菜单添加子菜单,注册列表插件,保存元数据,开发完毕。
现在可以登录业务站点,打开采购订单列表界面,检验一下插件效果啦。
【业务终止】操作执行前:
【业务终止】操作执行后:
【知识点】
<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层调用操作
本文2024-09-23 04:21:10发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164751.html