
【场景】后台创建动态表单套打导出
【前置知识】
(0)[动态表单套打](https://vip.kingdee.com/article/434749865378241536?productLineId=1)
(1)[创建单据视图套打导出](https://vip.kingdee.com/article/136780524734740224)
【二开案例】在采购订单套打导出动态表单PDF文件

```csharp
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.NotePrint;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Kingdee.BOS.Web.Core;
using Kingdee.BOS.Web.DynamicForm;
using System;
using System.Collections.Generic;
using System.Data;
namespace DynamicFormPlugIn.NotePrint
{
[Kingdee.BOS.Util.HotUpdate]
[System.ComponentModel.Description("后台创建动态表单进行套打导出")]
public class BillPlugIn_ExportDynamicPdf:AbstractBillPlugIn
{
public override void BarItemClick(BarItemClickEventArgs e)
{
if (!string.Equals(e.BarItemKey, "tb_ExportDynamic", StringComparison.OrdinalIgnoreCase))
return;
string formId = "ka0aa985cfc5d41ed838cde76b833a455";
string tempId = "da156944-0ee7-4d26-a0de-4d21c1b6bdf1";
var sessionManager = CommonSession.GetCurrent(this.View.Context.UserToken).SessionManager;
//如果生成的地方没有Http请求,可以直接实例化一个
//SessionManager sessionManager = new SessionManager();
//<0>创建动态表单逻辑
var view = CreateDynamicFormView(this.View.Context, formId, sessionManager);
var viewService = view as IDynamicFormViewService;
if (viewService == null)
return;
//<1> 模拟录入部分字典,进行数据查询
view.Model.SetValue("FDate",DateTime.Now);
viewService.ButtonClick("FRefresh", "");
//<2> 生成动态表单导出文件
string filePath = string.Empty;
try
{
//<3>mark 生成前要注册视图
sessionManager.GetOrAdd(((AbstractDynamicWebFormView)view).PageId, view.GetType().Name, view);
//说明 dynamicformpreview 是动态表单中针对套打的单据内码
filePath = ExportTargetBill(view, formId, "dynamicformpreview", tempId);
this.View.ShowMessage(filePath);
}
finally
{
view.Close();
//<4>mark 生成完要反注册视图
sessionManager.Remove(((AbstractDynamicWebFormView)view).PageId, view.GetType().Name);
}
}
/// <summary>
/// 套打导出逻辑
/// </summary>
/// <param name="dynamicFormView"></param>
/// <param name="formId"></param>
/// <param name="billId"></param>
/// <param name="templateId"></param>
/// <returns></returns>
private static string ExportTargetBill(IDynamicFormView dynamicFormView, string formId, string billId, string templateId)
{
IDynamicFormViewService viewService = dynamicFormView as IDynamicFormViewService;
if (viewService == null)
return null;
try
{
List<string> billIds = new List<string>() { billId };
List<string> templateIds = new List<string>() { templateId };
PrintExportInfo pExInfo = new PrintExportInfo();
pExInfo.PageId = dynamicFormView.PageId;
pExInfo.FormId = formId;
pExInfo.BillIds = billIds; //单据内码
pExInfo.TemplateIds = templateIds; //套打模板ID
pExInfo.FileType = ExportFileType.PDF;