【套打二开】动态表单实现【使用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格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



