二开案例.列表插件.列表调用保存操作

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

二开案例.列表插件.列表调用保存操作

【应用场景】使用列表插件,在列表上调用单据的保存操作。

【案例演示】采购订单,列表界面,主菜单新增保存菜单,实现对列表选中行调用单据保存操作。

【实现步骤】

<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

二开案例.列表插件.列表调用保存操作

【应用场景】使用列表插件,在列表上调用单据的保存操作。【案例演示】采购订单,列表界面,主菜单新增保存菜单,实现对列表选中行调用单据...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息