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

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

【套打二开】动态表单实现【使用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模板同一用户新建、导入模板,不做数据隔离;
                //非本人创建模板 启用组织隔离
                long createID = ObjectUtils.Object2Int64(templateItem["FCREATEID"]);
                if (createID != ctx.UserId)
                {
                    if (!excelTemplateSetting.NoteTemplateEnable(ObjectUtils.Object2String(templateItem["FID"])))
                        continue;
                    permissionTemplates.Add(templateItem);
                }
                else
                {
                    permissionTemplates.Add(templateItem);
                }
            }
            return permissionTemplates;
        }

        private DynamicObjectCollection GetExcelTemplate(Context ctx, string strFBillFormID)
        {
            string strSql = "select FID,FNAME,FCREATEID from T_BOS_EXCELPRINT WHERE FBILLFORMID=@FBILLFORMID order by FNAME asc";
            SqlParam sqlParam = new SqlParam("@FBILLFORMID", KDDbType.String, strFBillFormID);
            return DBServiceHelper.ExecuteDynamicObject(ctx, strSql, null, null, CommandType.Text, sqlParam);
        }
/// <summary>
        /// 获取无后缀文件名
        /// </summary>
        /// <param name="fullName"></param>
        /// <returns></returns>
        private string GetNotExtName(string fullName)
        {
            if (string.IsNullOrWhiteSpace(fullName)) return "";
            if (fullName.LastIndexOf(".") > 0)
            {
                return fullName.Substring(0, fullName.LastIndexOf("."));
            }
            return fullName;
        }

        private void DoBaseExcelPrintAction(ExcelPrintAction action, Dictionary<string, List<string>> dictPrint, JSONObject objData = null)
        {
            JSONObject jsonBillID = new JSONObject();
            jsonBillID.Add("Data", dictPrint);

            objData = objData ?? new JSONObject();
            object value;
            objData.TryGetValue("exportType", out value, true);
            ExportType type;
            Enum.TryParse(value.GetString(), out type);
            if (type == ExportType.Merge)
            {
                action = ExcelPrintAction.ExportMerge;
            }
            else if (type == ExportType.BillTempId)
            {
                //按单模板分文件导出
                action = ExcelPrintAction.ExportOneByOne;
            }

            jsonBillID.Add("JSONObject", objData);
            LoginExcelPrintParam loginParam = new LoginExcelPrintParam();
            loginParam.ActionType = action;
            loginParam.FormId = "PUR_PurchaseOrder";
            loginParam.PageId = this.View.PageId;
            loginParam.ActionNumber = this.GetType().Name;
            loginParam.PrintParam = jsonBillID;
            ExcelPrintServiceHelper.SendExcelPrintAction(View, loginParam);
        }

    }
}


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


<4>BOSIDE扩展动态表单,注册表单插件,保存元数据,开发完毕。



【功能验证】

<1>登录业务站点H5或者GUI端,打开动态表单“测试Excel导出”,选择模板,点击导出Excel验证功能。



【参考资料】




【金蝶云星空BOS二次开发案例演示】

https://vip.kingdee.com/article/94751030918525696



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

【应用场景】二开在动态表单实现【使用Excel模板打印】套打导出指定业务对象【注意事项】该实现方案涉及到动态表单实现【使用Excel模板打印...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息