前提:1、BOS对【资产卡片】对应页签增加相关字段例如:实物里增加设备编号【F_EQUIPMENTNUMBER】,发票里增加合同号【F_CONTRACTNUMBER】
2、BOS对【资产实物清单】增加相关字段与【资产卡片】中的保持一致 例如:设备编号【F_EQUIPMENTNUMBER】,合同号【F_CONTRACTNUMBER】
3、编译以下插件,放到服务器上,BOS【资产实物清单】服务器插件中注册编译好的插件
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Core.Report;
using Kingdee.BOS.Util;
using Kingdee.K3.FIN.FA.App.Report;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS.ServiceFacade;
namespace ExtAssetObjectListService
{
public class ExtAssetObjectListService : AssetObjectListService
{
private string[] customRptTempTableNames;
// DynamicObjectToJson对象转JSON
private static string DynamicObjectToJson(object obj)
{
var jsonSerializerProxy = new JsonSerializerProxy(Encoding.UTF8, false);
var jsonData = jsonSerializerProxy.Serialize(obj);
return jsonData;
}
public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
{
// 为了查看日志 K/3 Cloud会把各种错误信息,自动输出到站点目录 ..\WebSite\App_Data\Log 下的日志文件中
// Kingdee.BOS.Log.Logger.Info("【BuilderReportSqlAndTempTable】", "第一次tableName" + tableName);
// 创建临时表,用于存放自己的数据
IDBService dBService = Kingdee.BOS.App.ServiceHelper.GetService<IDBService>();
customRptTempTableNames = dBService.CreateTemporaryTableName(this.Context, 1);
string strTable = customRptTempTableNames[0];
// 调用基类的方法,获取初步的查询结果到临时表
base.BuilderReportSqlAndTempTable(filter, strTable);
// 对初步的查询结果进行处理,然后写回基类默认的存放查询结果的临时表
StringBuilder sb = new StringBuilder();
string strSql = "/*dialect*/SELECT t1.*,a2.F_EQUIPMENTNUMBER,a3.F_CONTRACTNUMBER into {0} FROM {1} t1 left join t_fa_card a1 on t1.FALTERID = a1.FALTERID left join T_FA_CARDDETAIL a2 on a1.FALTERID = a2.FALTERID left join T_FA_INVOICE a3 on a1.FALTERID = a3.FALTERID";
sb.AppendFormat(strSql,tableName,strTable);
DBUtils.Execute(this.Context, sb.ToString());
}
public override ReportHeader GetReportHeaders(IRptParams filter)
{
ReportHeader reportHeader = base.GetReportHeaders(filter);
reportHeader.AddChild("F_EQUIPMENTNUMBER", new LocaleValue("设备编号"));
reportHeader.AddChild("F_CONTRACTNUMBER", new LocaleValue("合同号"));
return reportHeader;
}
public override void CloseReport()
{
// 删除临时表
if (customRptTempTableNames.IsNullOrEmptyOrWhiteSpace())
{
return;
}
IDBService dBService = Kingdee.BOS.App.ServiceHelper.GetService<Kingdee.BOS.Contracts.IDBService>();
dBService.DeleteTemporaryTableName(this.Context, customRptTempTableNames);
base.CloseReport();
}
}
}
推荐阅读