【分享】自定义WEB API 生成单据套打导出文件
金蝶云社区-云社区用户p5517068
云社区用户p5517068
9人赞赏了该文章 3717次浏览 未经作者许可,禁止转载编辑于2018年06月14日 09:49:47

第三方系统需要单据套打文件,可以通过自定义WEB API 接口来实现。
首先,你要自行学习自定义WEB API 编程,这不是本贴的重点,故略过。
第二,初始化套打导出实体PrintExportInfo,并赋予其中属性对应值。
第三,创建单据视图VIEW。
第四,调用视图方法ExportNotePrint。

第五,用完生成的套打文件,请自行清理此文件,避免堆积在服务器上。
下面以单据列表为例,代码如下:
[code] //WEB API 自定义接口
public bool ExecuteServce()
{
Context ctx = this.KDContext.Session.AppContext;
IDynamicFormView view = null;
view = CreateView(ctx, "PUR_PurchaseOrder");
CommonSession.GetCurrent(ctx.UserToken).SessionManager.GetOrAdd(view.PageId, view.GetType().Name, view);

//单据内码与套打模板标识一一对应
List billIds = new List { "100437" }; //单据内码
List tempIds = new List { "1e8cae2e-875d-4a45-a037-4f3be418e6a6" };//套打模板标识

PrintExportInfo pExInfo = new PrintExportInfo();
pExInfo.PageId = view.PageId;
pExInfo.FormId = view.BillBusinessInfo.GetForm().Id;
pExInfo.BillIds = billIds;//单据内码
pExInfo.TemplateIds = tempIds;//套打模板ID
pExInfo.FileType = ExportFileType.PDF;//文件格式
pExInfo.ExportType = ExportType.ByPage;//导出格式
string temppath = "D:\\";
string filePath = Path.Combine(temppath, Guid.NewGuid().ToString() + ".PDF");
pExInfo.FilePath = filePath;//文件输出路径

Export(pExInfo, view);
return true; ;
}

private void Export(PrintExportInfo pExInfo, IDynamicFormView view)
{
if (view is IListViewService)
{
ListView list = (ListView)view;
list.ExportNotePrint(pExInfo);
}
}[/code]

[code] #region 创建listview
public IDynamicFormView CreateView(Context ctx, string formId)
{
FormMetadata _metadata = (FormMetadata)ServiceHelper.MetaDataServiceHelper.Load(ctx, formId);
var OpenParameter = CreateOpenParameter(OperationStatus.VIEW, ctx, formId, _metadata);
var Provider = GetListServiceProvider(OpenParameter);

string importViewClass = "Kingdee.BOS.Web.List.ListView,Kingdee.BOS.Web";
Type type = Type.GetType(importViewClass);
IListViewService View = (IListViewService)Activator.CreateInstance(type);

((IListViewService)View).Initialize(OpenParameter, Provider);
((IListViewService)View).LoadData();
return (IDynamicFormView)View;
}

private ListOpenParameter CreateOpenParameter(OperationStatus status, Context ctx, string formId, FormMetadata _metadata)
{

ListOpenParameter openPara = new ListOpenParameter(formId, _metadata.GetLayoutInfo().Id);
Form form = _metadata.BusinessInfo.GetForm();
openPara = new ListOpenParameter(formId, string.Empty);
openPara.Context = ctx;
openPara.ServiceName = form.FormServiceName;
openPara.PageId = Guid.NewGuid().ToString();

// 单据
openPara.FormMetaData = _metadata;
openPara.LayoutId = _metadata.GetLayoutInfo().Id;
openPara.ListFormMetaData = (FormMetadata)FormMetaDataCache.GetCachedFormMetaData(ctx, FormIdConst.BOS_List);

// 操作相关参数
openPara.SetCustomParameter(FormConst.PlugIns, form.CreateListPlugIns());
openPara.SetCustomParameter("filterschemeid", "");
openPara.SetCustomParameter("listfilterparameter", new ListRegularFilterParameter());
// 修改主业务组织无须用户确认
openPara.SetCustomParameter("ShowConfirmDialogWhenChangeOrg", false);

openPara.SetCustomParameter("SessionManager", CommonSession.GetCurrent(ctx.UserToken).SessionManager);
return openPara;
}

private IResourceServiceProvider GetListServiceProvider(DynamicFormOpenParameter param)
{
FormServiceProvider provider = new FormServiceProvider();
provider.Add(typeof(IDynamicFormView), CreateListView(param));
provider.Add(typeof(DynamicFormViewPlugInProxy), new ListViewPlugInProxy());
provider.Add(typeof(DynamicFormModelPlugInProxy), new ListModelPlugInProxy());
provider.Add(typeof(IDynamicFormModelService), GetListModel(param));
provider.Add(typeof(IListFilterModelService), GetListFilterModel());
var type = TypesContainer.GetOrRegister("Kingdee.BOS.Business.DynamicForm.DefaultValue.DefaultValueCalculator,Kingdee.BOS.Business.DynamicForm");
provider.Add(typeof(IDefaultValueCalculator), Activator.CreateInstance(type));
// 注册IDBModelService
type = TypesContainer.GetOrRegister("Kingdee.BOS.Business.DynamicForm.DBModel.DBModelService,Kingdee.BOS.Business.DynamicForm");
provider.Add(typeof(IDBModelService), Activator.CreateInstance(type));
return provider;
}

///


/// 获取视图
///

///
private IDynamicFormView CreateListView(DynamicFormOpenParameter param)
{
Form form = param.FormMetaData.BusinessInfo.GetForm();
if (form.FormGroups != null && form.FormGroups.Count > 0)
{
return new TreeListView();
}
else
{
return new ListView();
}
}

///


/// 获取视图模型
///

///
private IDynamicFormModelService GetListModel(DynamicFormOpenParameter param)
{
Form form = param.FormMetaData.BusinessInfo.GetForm();
if (form.FormGroups != null && form.FormGroups.Count > 0)
{
var type = TypesContainer.GetOrRegister("Kingdee.BOS.Model.List.TreeListModel,Kingdee.BOS.Model");
return (IDynamicFormModelService)Activator.CreateInstance(type);
}
else
{
var type = TypesContainer.GetOrRegister("Kingdee.BOS.Model.List.ListModel,Kingdee.BOS.Model");
return (IDynamicFormModelService)Activator.CreateInstance(type);
}
}

///


/// 创建过滤条件模型
///

///
private IListFilterModelService GetListFilterModel()
{
Type type = TypesContainer.GetOrRegister("Kingdee.BOS.Model.ListFilter.ListFilterModel,Kingdee.BOS.Model");
return (IListFilterModelService)Activator.CreateInstance(type);
}
#endregion[/code]