电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

【套打二开】动态表单实现【使用Excel模板打印】套打导出指定业务对象

来源:金蝶云社区作者:金蝶2024-09-238

【套打二开】动态表单实现【使用Excel模板打印】套打导出指定业务对象

【应用场景】

二开在动态表单实现【使用Excel模板打印】套打导出指定业务对象


【注意事项】

该实现方案涉及到动态表单实现【使用Excel模板打印】套打导出,仅支持H5和GUI端,仅限于特殊场景下的特殊应用。


【案例演示】

二开动态表单实现【使用Excel模板打印】套打导出【采购订单】的指定单据


【实现步骤】

<1>BOSIDE新增动态表单,标题为“测试Excel导出”,在动态表单新增菜单按钮,标识为"btnExportExcel",标题为“导出Excel”,新增一个多选下拉列表字段,标识为"F_Jac_SelectTemps" ,标题为“选择Excel模板”,保存元数据,发布到主控台。

<2>编写表单插件和服务插件,代码如下。 

using Kingdee.BOS;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.NotePrint;
using Kingdee.BOS.JSON;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.ServiceHelper.ExcelPrint;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace Kingdee.Test
{
    /// <summary>
    /// 动态表单测试采购订单Excel模版导出类
    /// </summary>
    public class TestExportExcelPluglIn:AbstractDynamicFormPlugIn
    {
        public override void AfterBindData(EventArgs e)
        {
            base.AfterBindData(e);
            var dcExcel = GetPermissionExcelTemplates(this.View.Context, "PUR_PurchaseOrder");//获取采购订单的excel套打模版信息
            if (dcExcel.IsEmpty())
                return;
            BindExcelTemps(dcExcel);

        }
        public override void BarItemClick(BOS.Core.DynamicForm.PlugIn.Args.BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            if (e.BarItemKey.EqualsIgnoreCase("btnExportExcel"))
            {
                Dictionary<string, List<string>> dictPrint = new Dictionary<string, List<string>>();//key:模版标识,value:单据的内码列表
                List<string> billIds = new List<string> { "114004" };//需要导出的单据的内码列表
                var temps = this.View.Model.GetValue("F_Jac_SelectTemps");
                if (temps != null)
                {
                    var array = temps.ToString().Split(',');
                    foreach (var temp in array)
                    {
                        dictPrint[temp] = billIds;
                    }
                }
                JSONObject objData = new JSONObject();
                objData.Add("exportType", (int)Kingdee.BOS.Core.NotePrint.ExportType.ByPage);//excel导出方式
                DoBaseExcelPrintAction(ExcelPrintAction.Export, dictPrint, objData);
            }
        }
/// <summary>
        /// 绑定套打模版到控件
        /// </summary>
        /// <param name="dcExcel"></param>
        private void BindExcelTemps(DynamicObjectCollection dcExcel)
        {
            var enumList = new List<EnumItem>();

            for (int i = 0; i < dcExcel.Count; i++)
            {
                var enumItem = new EnumItem();
                enumItem.Caption = new LocaleValue(GetNotExtName(Convert.ToString(dcExcel[i]["FName"])));
                enumItem.EnumId = ObjectUtils.Object2String(dcExcel[i]["FID"]);
                enumItem.Invalid = false;
                enumItem.Value = ObjectUtils.Object2String(dcExcel[i]["FID"]);
                enumList.Add(enumItem);
            }
            var comboList = this.View.GetFieldEditor<ComboFieldEditor>("F_Jac_SelectTemps", 0);
            if (comboList != null)
            {
                comboList.SetComboItems(enumList);
            }
        }

        /// <summary>
        /// 获取有权的excel模板集合
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="formId"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        private DynamicObjectCollection GetPermissionExcelTemplates(Context ctx, string formId)
        {
            var excelAllTemplates = GetExcelTemplate(ctx, formId);
            if (excelAllTemplates == null || excelAllTemplates.Count == 0)
                return excelAllTemplates;

            //获取Excel模板组织隔离配置信息,无配置信息 或不验证 则返回所有模板
            var excelTemplateSetting = ExcelPrintServiceHelper.GetExcelPrintTemplateSetting(ctx, formId, ctx.UserId);
            if (excelTemplateSetting == null || !excelTemplateSetting.ValidateNotePermission)
                return excelAllTemplates;

            DynamicObjectCollection permissionTemplates = new DynamicObjectCollection(excelAllTemplates.DynamicCollectionItemPropertyType);
            foreach (var templateItem in excelAllTemplates)
            {
                //Excel模板同一用户新建、导入模板,不做数据隔离;
                //非本人创建模板 启

【套打二开】动态表单实现【使用Excel模板打印】套打导出指定业务对象

【应用场景】二开在动态表单实现【使用Excel模板打印】套打导出指定业务对象【注意事项】该实现方案涉及到动态表单实现【使用Excel模板打印...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信