二开案例.列表插件.列表调用保存操作
【应用场景】使用列表插件,在列表上调用单据的保存操作。
【案例演示】采购订单,列表界面,主菜单新增保存菜单,实现对列表选中行调用单据保存操作。
【实现步骤】
<1>编写列表插件,代码如下。
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Core.Validation;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System.ComponentModel;
using System.Linq;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【列表插件】列表调用保存操作
/// </summary>
[Description("【列表插件】列表调用保存操作"), HotUpdate]
public class ListInvokeSaveOperationListPlugIn : AbstractListPlugIn
{
/// <summary>
/// 列表主菜单点击事件
/// </summary>
/// <param name="e"></param>
public override void BarItemClick(BarItemClickEventArgs e)
{
base.BarItemClick(e);
if (e.BarItemKey.EqualsIgnoreCase("tbSave"))
{
if (this.ListView.SelectedRowsInfo == null || this.ListView.SelectedRowsInfo.Count == 0)
{
this.View.ShowMessage("没有选择任何数据,请先选择数据!");
return;
}
var selectedIds = this.ListView.SelectedRowsInfo.Select(o => (object)o.PrimaryKeyValue).Distinct().ToArray();
var selectedBillNos = string.Join(",", this.ListView.SelectedRowsInfo.Select(o => (object)o.BillNo).Distinct());
var dataObjects = BusinessDataServiceHelper.Load(this.Context, selectedIds, this.View.BillBusinessInfo.GetDynamicObjectType());
foreach (var dataObject in dataObjects)
{
// 修改采购订单的变更原因
dataObject["ChangeReason"] = "666";
}
var result = BusinessDataServiceHelper.Save(this.Context, this.View.BillBusinessInfo, dataObjects);
if (result.IsSuccess)
{
this.View.ShowMessage(string.Format("单据【{0}】保存成功!", selectedBillNos));
}
else
{
// 操作失败,弹窗显示操作结果
FormatOperateResultValidationInfo(result);
this.View.ShowOperateResult(result.OperateResult);
}
}
}
/// <summary>
/// 将操作返回结果中的校验信息合并到操作结果集合中
/// </summary>
/// <param name="result"></param>
protected virtual void FormatOperateResultValidationInfo(IOperationResult result)
{
if (result.ValidationErrors == null || result.ValidationErrors.Count == 0)
{
return;
}
var collection = result.OperateResult;
foreach (var errorInfo in result.ValidationErrors)
{
var rs = new OperateResult
{
PKValue = errorInfo.BillPKID,
RowIndex = errorInfo.RowIndex,
Name = errorInfo.Title,
SuccessStatus = false,
Message = errorInfo.Message,
MessageType = errorInfo.Level == ErrorLevel.Warning ? MessageType.Warning : MessageType.FatalError
};
collection.Add(rs);
}
}
}
}
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展采购订单,列表菜单添加一个菜单项,注册列表插件,保存元数据,开发完毕。
现在可以登录业务站点,打开采购订单列表,检验一下插件的控制效果啦。
保存操作执行成功:
保存操作执行失败:
【知识点】
<1>保存操作只能运行在单据视图,因此在列表视图上的列表菜单不能直接配置保存操作,底层不支持,配置了运行时执行也会报错。
<2>列表上要执行单据的保存操作,建议通过列表插件的方式,直接调用单据的保存接口。
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.列表插件.列表调用保存操作
本文2024-09-23 04:20:32发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164686.html