1

我有一个页面上有几个子记录的记录。我在页面上有一个按钮,通过行集通过 XML Publisher 触发报告。我遇到的问题是我传递给报表的行集包含缓冲区中的所有内容——我只想在报表上显示当前上下文。我现在拥有的:

&rs_resp = CreateRowset(Record.AVZ_JD_RESP_TBL);
&rs_expr = CreateRowset(Record.AVZ_JD_EXPR_TBL);
&rs_skls = CreateRowset(Record.AVZ_JD_SKLS_TBL);
&rs_dtl = CreateRowset(Record.AVZ_JD_DTL_TBL, &rs_resp, &rs_expr, &rs_skls   

&RS0 = GetLevel0().GetRow(1).GetRowset(Scroll.AVZ_JD_DTL_TBL);
&RS0.CopyTo(&rs_dtl);

然后我开始报告:

&oReportDefn.SetRuntimeDataRowset(&rs_dtl);   
&oReportDefn.ProcessReport(&MyTemplate, &LanguageCd, &AsOfDate, &OutFormat);

我以前在每个行集(父和子)上使用 Rowset.Fill,但我的 copyto 方法似乎“更干净”(当然代码更少:-))。有没有办法只复制当前上下文?

谢谢

4

2 回答 2

1

如果我理解这个问题,你可以这样做:

Getrow().Copyto(&rs_dtl(1));
于 2012-05-18T13:46:00.883 回答
0

我认为当您执行行集复制时,所有行都会被复制 -
    &RS0.CopyTo(&rs_dtl);

您可以控制为报表上的每一行创建新页面,方法是在 for-each 循环中使用分页符(您将使用它来遍历模板中的行集):
   <?split-by-page-break:?>

如果您只想打印最新的 effdt 行,请仅将最新的 effdt 行复制到 &rs_dtl 行集。您可以通过首先使用基于键对 &RS0 行集进行排序来做到这一点
    &RS0.sort(keyfield1,keyfield2,"A");

然后循环遍历排序的行集,检查给定键集的最大 effdt。

使用插入行函数将行插入 &rs_dtl。
    &rs_dtl.Insertrow(&rownumber);

请告诉我这是否有效。

于 2012-05-20T08:54:10.563 回答