报表页面
在\yonyou\U9V60\Portal\UILib\UFIDA.U9.Report.IndividualRptUI.WebPart.dll,是所有报表的通用界面
不知道能不能写UI插件
报表策略
在\yonyou\UBFV60\U9.VOB.Product.UBF\UBFStudio\Runtime\UFIDA.UBF.Report.App.UI.dll中的UFIDA.UBF.Report.App.UI.ProcessStrategy是策略基类,UFIDA.UBF.Report.App.UI下的大多数是帮助类
自定义报表策略继承的就是这个类,重写里面的VerifyParameters方法可以定义自己的行分组列分组最大限制
public override string VerifyParameters(Case usercase, CaseDefine caseDefine)
{
//return base.VerifyParameters(usercase, caseDefine); // 不调用父类的检验规则
string text = this.ValidateFixedColumnCount(usercase); // 父类的
if (text.Length > 0) return text;
text = base.VerifyBaseInfo(usercase, caseDefine); // 父类的
if (text.Length > 0) return text;
//text = base.VerifyGroupNumbers(usercase); // 父类的矩阵行分组12个,列分组6个的检验,干掉
//if (text.Length > 0) return text;
// 使用自己的行分组检验规则,也可以不写自己的行分组检验规则,那就是无限制(不推荐)
text = this.VerifyGroupNumbers(usercase);
if (text.Length > 0) return text;
return null;
}
private new string VerifyGroupNumbers(Case usercase)
{
int num = 0;
int num2 = 0;
foreach (Group item in usercase.Groups)
{
if (item.Type == GroupType.Column) num2++;
else if (item.Type == GroupType.Row) num++;
}
// 这里的限制可以自由发挥,做成可配置项,U9定义的是50,6,12
if (num > 100) return "表行分组不能超过100个!";
if (num2 > 12) return "矩阵列分组不能超过12个!";
if (num2 > 0 && num > 24) return "矩阵行分组不能超过24个!";
return string.Empty;
}
/// <summary>
/// 校验固定列数条件(copy的父类,因为父类是私有方法无法调用,骚气的你也可以不copy。反射去调用父类的私有方法)
/// </summary>
/// <returns></returns>
private string ValidateFixedColumnCount(Case usercase)
{
string empty = string.Empty;
FilterValue val = usercase.FilterValues.GetObjectByName("Para_TableColumnsFixedCount");
if (val != null)
{
empty = val.GetValue();
if (!int.TryParse(empty, out int num))
{
return ReportApplicationUIRes.FixedColumnCountMustBeNumber;
}
if (num < 0)
{
return ReportApplicationUIRes.FixedColumnCountLessThanZero;
}
CommonFormatProcess commonFormatProcess = new CommonFormatProcess();
int groupCountNotHead = commonFormatProcess.GetGroupCountNotHead(usercase.Groups);
int num2 = 0;
if (usercase.Columns != null)
{
num2 = usercase.Columns.Count + groupCountNotHead;
}
if (num > num2)
{
return ReportApplicationUIRes.FixedColumnCountGreatThanTotalColunms;
}
}
return string.Empty;
}
查询方案
在\yonyou\U9V60\Portal\UILib\UFIDA.U9.Report.ReportCaseUI.WebPart.dll的UFIDA.U9.Report.ReportCaseUIModel的ReportCaseMainUIFormWebPart是查询方案页面
不知道能不能写UI插件(能写,但是没什么用,只能注入一下JS而且还只能通过定时器的方式运行)
报表数据加载
在\yonyou\UBFV60\U9.VOB.Product.UBF\UBFStudio\Runtime\Microsoft.ReportViewer.WebForms.dll的Microsoft.Reporting.WebForms.ReportViewer类RenderReport方法
最后生成了一个URL
http://desktop-egvqeh7/ReportServer?&rs:SessionID=tq1miizeyg4xvwzfo4ml5455&rs:command=Render&rs:Format=RPL&rc:StartPage=1&rc:EndPage=1&rc:ToggleItems=False&rc:MeasureItems=False&rc:SecondaryStreams=Server&rc:StreamNames=True&rc:StreamRoot=%2FU9%2FReserved.ReportViewerWebControl.axd%3FReportSession%3Dtq1miizeyg4xvwzfo4ml5455%26Culture%3D2052%26CultureOverrides%3DTrue%26UICulture%3D2052%26UICultureOverrides%3DTrue%26ReportStack%3D1%26ControlID%3D54ef74293e7c4759838a0dbeda2c188f%26OpType%3DReportImage%26IterationId%3Dd89432aae9be42c994f5dfe4e9f5fa2f%26StreamID%3D&rc:RPLVersion=10.6&rc:ImageConsolidation=True&rc:Toolbar=false&rs:ErrorResponseAsXml=true&rs:AllowNewSessions=false&rs%3APageCountMode=Actual
使用this.ServerUrlRequest方法跳转
评论 (0)