1、打开设计器,找到对应报表表单,看看服务器插件是哪一个组件
2、编写客户自己的服务器插件,继承自1中的服务器插件
3、override重写BuilderReportSqlAndTempTable方法,基于之前的tablename查询关联查询自己添加的字段,并最终将数据更新到tablename中,例如:
public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
{
string tablenameExt = GetTableName();
base.BuilderReportSqlAndTempTable(filter, tablenameExt);
// TODO:关联查询,并将结果更新到tablename表,以下仅供参考
string strSql = string.Format("select A.*,b.FUnitId into {0} from {1} as A left join T_SAL_ORDERENTRY b on a.fentryid=b.fentryid", tableName, tablenameExt);
DBUtils.Execute(this.Context, strSql);
string droptable = "drop table " + tablenameExt;
DBUtils.Execute(this.Context, droptable);
}
复制代码
4、override重写GetReportHeaders方法
public override ReportHeader GetReportHeaders(IRptParams filter)
{
ReportHeader header = base.GetReportHeaders(filter);
// TODO: 添加新增字段
}
复制代码
5、最关键的一步,修改1中的插件列表,取消标准插件,然后注册二开插件。
6、完毕,可以测试了。
备注:
5.0的基类里已经没有GetReportHeaders方法了,现在用哪个?
我改的报表是应收票据余额表,插件继承Kingdee.BOS.Contracts.Report.SysReportBaseService