打印预览功能插件开发
金蝶云社区-150xxxx6187
150xxxx6187
2人赞赏了该文章 2,414次浏览 未经作者许可,禁止转载编辑于2016年04月12日 16:05:54

如题,小弟最近在做一个关于打印功能的插件,需求如下:要求先在套打设计平台里设计出一个套打,再在单据界面增加一个打印预览按钮,点击此按钮进行套打预览,全部代码如下:
using System;
using System.Collections.Generic;
using System.Data;
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Core.SqlBuilder;
using Kingdee.BOS.Core.Validation;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.K3.SCM.App.Utils;
using System.Dynamic;
using Kingdee.BOS.Core.Metadata.EntityElement;
using System.Text;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.NotePrint;
using Kingdee.BOS.JSON;

namespace TP.K3.FYGL.FYGL.Business.PlugIn.Print
{
public class PrintData : AbstractBillPlugIn
{
///


/// 待打印的单据数据包
///

private Kingdee.BOS.Orm.DataEntity.DynamicObject _billObj = null;

public override void BarItemClick(BarItemClickEventArgs e)
{
if (e.BarItemKey.Equals("tbButton"))
{
//QueryBuilderParemeter p = new QueryBuilderParemeter();
//p.FormId = "TP_ZDYRKD";
//p.SelectItems.Add(new SelectorItemInfo("FID"));
//p.SelectItems.Add(new SelectorItemInfo("FBillNo"));
//p.FilterClauseWihtKey = "FBillNo='123'";
//DynamicObjectCollection cs = QueryServiceHelper.GetDynamicObjectCollection(this.Context, p);
//if (cs.Count > 0)
//{
// this.View.ShowErrMessage(cs[0]["FID"].ToString());
//}
string billFormId = "TP_ZDYRKD";//单据标识ID

string billId = "101002";//单据内码

// 加载单据数据包,放在缓存中,以被后续事件使用
FormMetadata meta = MetaDataServiceHelper.Load(
this.Context, billFormId) as FormMetadata;
this._billObj = BusinessDataServiceHelper.LoadSingle(
this.Context, billId, meta.BusinessInfo.GetDynamicObjectType());

// 下达打印、预览指令
List printInfoList = new List();
PrintJobItem printInfoItem = new PrintJobItem();
printInfoItem.BillId = billId;
printInfoItem.FormId = billFormId;
printInfoItem.TemplateId = "cae79d26-e7fe-4ddc-817a-8b826a5364a3";//套打模版的ID
printInfoItem.SortString = "";
printInfoList.Add(printInfoItem);
string key = Guid.NewGuid().ToString();
this.View.Session[key] = printInfoList;
JSONObject jsonObj = new JSONObject();
jsonObj.Put("pageID", this.View.PageId);
jsonObj.Put("printJobId", key);
jsonObj.Put("action", "preview");//预览--printType赋值为"preview";打印--printType赋值为"print"
string action = "printPreview";
jsonObj.Put("printBarName", null);
this.View.AddAction(action, jsonObj);
}

}
//自定义的数据包
public override void OnPrepareNotePrintData(PreparePrintDataEventArgs e)
{
//构建新数据包并提供给系统
if (e.DataSourceId.Equals("FBillHead", StringComparison.OrdinalIgnoreCase))
{
// 基于套打要求的ORM数据模型,构建数据包,取单据头的字段值
// 特别注意:e.DynamicObjectType,仅包含了套打会用到的单据头字段
Kingdee.BOS.Orm.DataEntity.DynamicObject notePrintHeadObj = new Kingdee.BOS.Orm.DataEntity.DynamicObject(e.DynamicObjectType);

// 为字段赋值:本例仅演示给单据编号赋值
notePrintHeadObj["FBillNo"] = _billObj["BillNo"];

e.DataObjects = new Kingdee.BOS.Orm.DataEntity.DynamicObject[] { notePrintHeadObj };
}
}
}
针对以上代码,现在小弟提出几点疑惑:
一、因为是写在表单插件里面,但是看论坛里的许多代码都不是写在表单插件里面,我想问我以上写的代码是否正确。
二、此代码运行后报错,报错如图所示:

请诸位大侠帮忙纠错,指点小弟一下,(新人入门,问题不高深,勿嫌弃)


您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0