【套打二开】动态表单实现【使用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模板打印...
点击下载文档
本文2024-09-23 04:07:07发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-163247.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章