二开插件如何获取分页报表数据?
/// <summary>
/// 获取基础资料数据包
/// </summary>
/// <param name="ctx"></param>
/// <param name="FormNumber">基础资料编码</param>
/// <param name="PKId">基础资料内码</param>
/// <returns></returns>
private DynamicObject GetDynamicObject(Context ctx,string FormNumber,string PKId)
{
FormMetadata formMetaData = MetaDataServiceHelper.Load(ctx, FormNumber) as FormMetadata;
DynamicObject dynamicObject = BusinessDataServiceHelper.LoadSingle(ctx, PKId, formMetaData.BusinessInfo.GetDynamicObjectType());
return dynamicObject;
}
/// <summary>
/// 获取分页账表数据
/// </summary>
/// <param name="ctx"></param>
/// <param name="rptFormId">账表FormId</param>
/// <param name="rptFilterFormId">账表过滤方案FormId</param>
/// <param name="schemeId">过滤方案内码</param>
/// <param name="currentPosition">分页账表当前位置</param>
/// <returns></returns>
private DataTable GetReportData(Context ctx, string rptFormId, string rptFilterFormId, string schemeId, int currentPosition)
{
var dt = new DataTable();
try
{
var sysReportService = ServiceFactory.GetSysReportService(ctx);
var permissionService = ServiceFactory.GetPermissionService(ctx);
//此处以存货收发存明细表分页账表为例
var filterMetadata = FormMetaDataCache.GetCachedFilterMetaData(ctx);//加载字段比较条件元数据。
var reportMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, rptFormId);//加载存货收发存明细表
var reportFilterMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, rptFilterFormId);//加载存货存收发存明细表明细表表过滤条件元数据。
var reportFilterServiceProvider = reportFilterMetadata.BusinessInfo.GetForm().GetFormServiceProvider();
var model = new SysReportFilterModel();
model.SetContext(ctx, reportFilterMetadata.BusinessInfo, reportFilterServiceProvider);
model.FormId = reportFilterMetadata.BusinessInfo.GetForm().Id;
model.FilterObject.FilterMetaData = filterMetadata;
model.InitFieldList(reportMetadata, reportFilterMetadata);
model.GetSchemeList();//过滤方案的主键值,可通过该SQL语句查询得到:SELECT * FROM T_BAS_FILTERSCHEME
var filter = model.GetFilterParameter();
var filterObj = filter.CustomFilter;
//过滤条件值,根据实际情况给值
var ACCTGSYSTEMID = "1";
var OrgId = Convert.ToString(this.Context.CurrentOrganizationInfo.ID);
var AcctPolicyId = "1";
var matId = "283955";
var acctsystemDynamic = GetDynamicObject(ctx, "Org_AccountSystem", ACCTGSYSTEMID);
var acctOrgIdDynamic = GetDynamicObject(ctx, "ORG_Organizations", OrgId);
var acctPolicyIdDynamic = GetDynamicObject(ctx, "BD_ACCTPOLICY", AcctPolicyId);
var matDynamic = GetDynamicObject(ctx, "BD_MATERIAL", matId);
IRptParams rptParam = new RptParams();
rptParam.FormId = reportFilterMetadata.BusinessInfo.GetForm().Id;
rptParam.CurrentPosition = 0;//分页账表当前位置,官方提示除分页报表外,该值始终为0可不用理会,默认给0
rptParam.StartRow = 1;
rptParam.EndRow = int.MaxValue;//StartRow和EndRow是报表数据分页的起始行数和截至行数,一般取所有数据,所以EndRow取int最大值。
rptParam.FilterParameter = filter;
rptParam.FilterFieldInfo = model.FilterFieldInfo;
//自定义条件赋值
var dic = new Dictionary<string, object>();
dic.Add("CustomFilter", filter.CustomFilter);
rptParam.CustomParams.Add("OpenParameter", dic);
//需要修改的过滤条件
rptParam.FilterParameter.CustomFilter["ACCTGSYSTEMID"] = acctsystemDynamic;
rptParam.FilterParameter.CustomFilter["ACCTGSYSTEMID_Id"] = ACCTGSYSTEMID;
rptParam.FilterParameter.CustomFilter["ACCTGORGID"] = acctOrgIdDynamic;
rptParam.FilterParameter.CustomFilter["ACCTGORGID_Id"] = OrgId;
rptParam.FilterParameter.CustomFilter["ACCTPOLICYID"] = acctPolicyIdDynamic;
rptParam.FilterParameter.CustomFilter["ACCTPOLICYID_Id"] = AcctPolicyId;
rptParam.FilterParameter.CustomFilter["Year"] = "2024";
rptParam.FilterParameter.CustomFilter["Period"] = "4";
rptParam.FilterParameter.CustomFilter["ENDYEAR"] = "2024";
rptParam.FilterParameter.CustomFilter["EndPeriod"] = "4";
rptParam.FilterParameter.CustomFilter["MATERIALID_Id"] = matId;
rptParam.FilterParameter.CustomFilter["MATERIALID"] = matDynamic;
rptParam.FilterParameter.CustomFilter["ENDMATERIALID_Id"] = matId;
rptParam.FilterParameter.CustomFilter["ENDMATERIALID"] = matDynamic;
rptParam.FilterParameter.CustomFilter["FDimType"] = "0";
rptParam.FilterParameter.CustomFilter["CHXEXPENSE"] = "true";
//下面两种方法都可获取到明细表信息
using (DataTable datatable = sysReportService.GetData(ctx, reportMetadata.BusinessInfo, rptParam))
{
return datatable;
}
//MoveReportServiceParameter param = new MoveReportServiceParameter(ctx, reportMetadata.BusinessInfo, Guid.NewGuid().ToString(), rptParam);
//var repData = sysReportService.GetListAndReportData(param);
}
catch(Exception ex)
{
}
return dt;
}
二开插件如何获取分页报表数据?
本文2024-09-16 17:10:38发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14025.html