二开案例.表单插件.创建列表视图执行列表操作

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

二开案例.表单插件.创建列表视图执行列表操作

【应用场景】

在单据或动态表单上,通过插件创建列表视图,然后执行列表操作。



【案例演示】

采购订单,通过插件创建列表视图,然后执行列表操作

上传图片



【实现步骤】

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

using Kingdee.BOS;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Core.ListFilter;
using Kingdee.BOS.JSON;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Kingdee.BOS.Web.Core;
using Kingdee.BOS.Web.DynamicForm;
using Kingdee.BOS.Web.List;
using System;
using System.ComponentModel;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
    /// <summary>
    /// 【表单插件】创建列表视图执行列表操作
    /// </summary>
    [Description("【表单插件】创建列表视图执行列表操作"), HotUpdate]
    public class CreateListViewAndDoOperationBillFormPlugIn : AbstractDynamicFormPlugIn
    {
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            if (e.BarItemKey.EqualsIgnoreCase("test"))
            {
                var formId = "PUR_PurchaseOrder";
                var schemeId = "6374b23796fe68";// 通过SQL查询:SELECT * FROM T_BAS_FILTERSCHEME
                // <1>创建列表视图
                var listView = CreateListView(this.Context, formId, schemeId);
                listView.GetEntryData("FLIST", 0, 1000, null);
                // <2>设置列表选中行
                /* 用于列表选中行的数据包,可通过http数据抓包获取其格式
[{
"FLIST": {
"fieldKey": "Selected",
"row": 3,
"selRows": "1,2,3",
"isClientNewRow": false,
"clientNewRows": ""
}
}]
                 */
                var row = 3;
                var selectedRows = new[] { 1, 2, 3 };
                var postDatas = new JSONArray();
                var jsObj = new JSONObject();
                postDatas.Add(jsObj);
                var jsObj2 = new JSONObject();
                jsObj.Put("FLIST", jsObj2);
                jsObj2["fieldKey"] = "Selected";
                jsObj2["row"] = 3;
                jsObj2["selRows"] = string.Join(",", selectedRows);
                jsObj2["isClientNewRow"] = false;
                jsObj2["clientNewRows"] = "";
                listView.LoadPostBackData(postDatas);
                listView.EntityRowClick("FLIST", row);
                listView.GetActions();
                // <3>执行列表操作
                listView.InvokeFormOperation("Submit");
                this.View.ShowMessage("执行列表操作成功!");
            }
        }
        /// <summary>
        /// 创建单据视图
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="formId"></param>
        /// <param name="schemeId"></param>
        /// <returns></returns>
        private static ListView CreateListView(Context ctx, string formId, string schemeId = null)
        {
            // 元数据
            var formMetaData = FormMetaDataCache.GetCachedFormMetaData(ctx, formId);
            // ShowParameter
            var showParam = new ListShowParameter();
            showParam.FormId = formId;
            showParam.PageId = Guid.NewGuid().ToString();
            var paraObj = showParam.CreateWebParams();
            // OpenParameter
            var dynamicFormMetaDataService = new DynamicFormMetaDataService();
            var sessionManager = new SessionManager();
            dynamicFormMetaDataService.SetContext(sessionManager, ctx);
            dynamicFormMetaDataService.FormMetaData = formMetaData;
            dynamicFormMetaDataService.GetDynamicFormConfig(paraObj);
            var openParam = sessionManager.Get<DynamicFormOpenParameter>(showParam.PageId, FormConst.OPEN_PARAM);
            openParam.SetCustomParameter("SessionManager", sessionManager);
            // 创建视图
            var listView = new ListPrintWebService(schemeId, null, null);
            // 初始化视图
            var provider = GetListServiceProvider(openParam);
            listView.Initialize(openParam, provider);
            listView.LoadData();
            return listView;
        }
        /// <summary>
        /// 获取报表服务提供者
        /// </summary>
        /// <returns></returns>
        private static IResourceServiceProvider GetListServiceProvider(DynamicFormOpenParameter param)
        {
            var provider = new FormServiceProvider();
            provider.Add(typeof(IDynamicFormView), CreateListView(param));
            provider.Add(typeof(DynamicFormViewPlugInProxy), new ListViewPlugInProxy());
            provider.Add(typeof(DynamicFormModelPlugInProxy), new ListModelPlugInProxy());
            provider.Add(typeof(IDynamicFormModelService), GetListModel(param));
            provider.Add(typeof(IListFilterModelService), GetListFilterModel());
            var type = TypesContainer.GetOrRegister("Kingdee.BOS.Business.DynamicForm.DefaultValue.DefaultValueCalculator,Kingdee.BOS.Business.DynamicForm");
            provider.Add(typeof(IDefaultValueCalculator), Activator.CreateInstance(type));
            // 注册IDBModelService
            type = TypesContainer.GetOrRegister("Kingdee.BOS.Business.DynamicForm.DBModel.DBModelService,Kingdee.BOS.Business.DynamicForm");
            provider.Add(typeof(IDBModelService), Activator.CreateInstance(type));
            return provider;
        }
        /// <summary>
        /// 获取视图
        /// </summary>
        /// <returns></returns>
        private static IDynamicFormView CreateListView(DynamicFormOpenParameter param)
        {
            var form = param.FormMetaData.BusinessInfo.GetForm();
            if (form.FormGroups != null && form.FormGroups.Count > 0)
            {
                return new TreeListView();
            }
            else
            {
                return new ListView();
            }
        }
        /// <summary>
        /// 获取视图模型
        /// </summary>
        /// <returns></returns>
        private static IDynamicFormModelService GetListModel(DynamicFormOpenParameter param)
        {
            var form = param.FormMetaData.BusinessInfo.GetForm();
            if (form.FormGroups != null && form.FormGroups.Count > 0)
            {
                var type = TypesContainer.GetOrRegister("Kingdee.BOS.Model.List.TreeListModel,Kingdee.BOS.Model");
                return (IDynamicFormModelService)Activator.CreateInstance(type);
            }
            else
            {
                var type = TypesContainer.GetOrRegister("Kingdee.BOS.Model.List.ListModel,Kingdee.BOS.Model");
                return (IDynamicFormModelService)Activator.CreateInstance(type);
            }
        }
        /// <summary>
        /// 创建过滤条件模型
        /// </summary>
        /// <returns></returns>
        private static IListFilterModelService GetListFilterModel()
        {
            var type = TypesContainer.GetOrRegister("Kingdee.BOS.Model.ListFilter.ListFilterModel,Kingdee.BOS.Model");
            return (IListFilterModelService)Activator.CreateInstance(type);
        }
    }
}


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

上传图片


<3>BOSIDE扩展采购订单,菜单集合新增菜单项,注册表单插件,保存元数据,开发完毕。

上传图片



【功能验证】

<1>登录业务站点,打开采购订单列表界面,选择一个有数据的过滤方案,查询数据如下图。

上传图片

<2>打开采购订单新增界面,点击test菜单,执行采购订单的列表操作,该插件事件中,会对采购订单列表的指定过滤方案下的第一二三行数据进行提交操作。

上传图片

<3>操作成功后,再次刷新列表数据,此时,列表的第一二三行数据进已提交成功。

上传图片

---------------------------------------------------------------------------------------------------------













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

二开案例.表单插件.创建列表视图执行列表操作

【应用场景】在单据或动态表单上,通过插件创建列表视图,然后执行列表操作。【案例演示】采购订单,通过插件创建列表视图,然后执行列表操...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息