初学者分享,借鉴社区上前辈们的经验成功在标准账表上添加了字段,但是还没有实现在高级过滤里的功能,目前只是默认显示这个字段,后面实现了再来更新。
所添加字段为GMP
字段是添加在资产卡片的基本信息中的
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Util;
using Kingdee.K3.FIN.FA.App.Report;
using System.ComponentModel;
using Kingdee.BOS.Core.Report;
namespace LX.K3.FIN.FA.App.Report//这里不能使用kingdee.XXXXXX的格式命名,会导致下面的kingdee.bos的方法冲突
{
//[Description("GMP字段"),HotUpdate]//Description("插件名称"),HotUpdate启用热更新
//CustomAssetFinEdit 是自定义的类名称,根据实际情况修改
//AssetObjectListService 是标准产品的插件类名称,根据实际情况修改
public class CustomAssetFinEdit:AssetObjectListService// 继承标准产品报表插件
{
string[] tempTableNames;//声明一个字符串数组,在后面会用,但是语句的意思我还没搞懂
/// <summary>
/// 重写基类临时表,增加自定义的字段
/// </summary>
/// <param name="filter">默认的就行不用改</param>
/// <param name="tableName">默认的就行不用改</param>
public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
{
//创建临时表,用于存放自己的数据
IDBService dbservice = Kingdee.BOS.App.ServiceHelper.GetService<IDBService>();//这句照抄就行了,具体意思我也没懂
this.tempTableNames = dbservice.CreateTemporaryTableName(this.Context, 1);//这句也是照抄
string strTable = this.tempTableNames[0];//照抄
//调用基类方法,获取初步的查询结果到临时表
//(意思就是调用标准账表的插件,先运行一遍,这样后面就能在标准账表的结果上再增加内容了)
base.BuilderReportSqlAndTempTable(filter, strTable);//照抄
//对初步查询结果进行处理,然后写回基类默认的存放查询结果的临时表
StringBuilder sb = new StringBuilder();//实例化一个StringBuilder类,据说是运算效率会比string快
//编写SQL脚本,我在这里迷糊了半天,其实就是把标准账表的查询结果当做一个独立的表来看待,然后再
//加上自己要增加的表和字段就行了
//SELECT 标准账表名(T1).*,新加的表名(A1).新加的字段(F_GMP) INTO 临时表名 FROM 标准账表名
//LEFT JOIN 新加的表名 ON 新表与标准账表的匹配条件
string strSql = "/*dialect*/SELECT T1.*,A1.F_GMP INTO {0} FROM {1} T1 " +
"LEFT JOIN t_fa_card A1 ON T1.FNUMBER = A1.FNUMBER";
sb.AppendFormat(strSql, tableName, strTable);//把上面的SQL,放到前面实例化的对象里
DBUtils.Execute(this.Context, sb.ToString());//执行这段SQL
}
/// <summary>
/// 添加表头字段,否则显示不出来
/// </summary>
/// <param name="filter">默认就行不用改</param>
/// <returns></returns>
public override ReportHeader GetReportHeaders(IRptParams filter)
{
//先把标准账表的表头内容,获取到header的变量里,后面再进行增加,跟SQL的意思差不多
ReportHeader header = base.GetReportHeaders(filter);
//添加表头字段("字段名", new一个Kingdee.BOS.LocaleValue对("显示到表头的名称"),后面还有一个非必填的参数,忘了是啥了)
header.AddChild("F_GMP",new Kingdee.BOS.LocaleValue("GMP"));
return header;//返回这个增加了内容的表头变量
}
/// <summary>
/// 最后要删除临时表,这一步也都是照抄就行了
/// </summary>
public override void CloseReport()
{
//删除临时表
if (tempTableNames.IsNullOrEmptyOrWhiteSpace())
{
return;
}
IDBService dBService = Kingdee.BOS.App.ServiceHelper.GetService<Kingdee.BOS.Contracts.IDBService>();
dBService.DeleteTemporaryTableName(this.Context, tempTableNames);
base.CloseReport();
}
}
}
以上插件编写完成后,还需要扩展标准账表的过滤插件,在显示隐藏列中,增加前面添加的字段标识和名称,否则还是会显示不出来的
参考1:https://vip.kingdee.com/article/149770?productLineId=1
参考2:https://vip.kingdee.com/article/1011?productLineId=1
推荐阅读