简单账表使用问题
金蝶云社区-天冥异
天冥异
10人赞赏了该文章 1985次浏览 未经作者许可,禁止转载编辑于2018年07月27日 11:50:42

要求:原客户账表用直接SQL账表实现,现客户要求FLIST表中的某列可以实现链接跳转,经查论坛,直接SQL账表不支持插件。现改为简单账表,经前几次提问后可以实现了动态列或固定列数据源填充。但有尚有问题无法解决(查询论坛,该方面的资料实在很少)。
  1、无论是用动态列或固定列填充,在界面开始弹出的过滤窗中为空,如何为过滤窗口添加条件?
    2、本例中的之所以用固定列而非动态列,是因为要实现某列为链接状态(但是由于字段太多,用固定列画出太麻烦),能否在动态列中实现某字段链接状态。我在动态列填充时发现一个属性,但还是无法实现列链接header.AddChild("FUNAME", new LocaleValue("员工编号", this.Context.UserLocale.LCID)).IsHyperlink=true;请问如何解决?
    3、若以上的服务器端插件编写完成。那么链接事件是否用表单插件编写?是否用的是AbstractSysReportPlugIn这个基类?若是它的引用与using是什么?若不是请给出基类和其引用。
  4、由于第3点不知,所以无法测试,在此先提出,在表单插件中FLIST中的列链接(按钮事件)是否和单据体中使用同样的EntryButtonCellClick事件?
  5、在服务器端插件中如何实现合计列(这个好像论坛中有贴,但因上述问题较多,在此一并提出,望老师能在同段代码中示例)。


首先解答问题一:为何打开报表时,过滤界面为空白的?

默认情况下,简单账表的过滤界面,调用的是空白的过滤界面(就是楼主现在看到的情况):
20151116 01新建过滤界面7.png 

需要按照如下步骤自行定制一个全新的报表过滤界面,并绑定到报表上,步骤如下:

步骤一:新建 - 继承 - 应用框架 - 公共过滤
20151116 01新建过滤界面1.png 

步骤二:复制下自定义过滤界面的标识
20151116 01新建过滤界面3.png 

步骤三:把自定义过滤界面的标识,粘贴到报表的过滤窗口业务对象属性上
20151116 01新建过滤界面2.png 

步骤四:修改自定义过滤界面的条件过滤表格,增加各个字段,后续用户可以为这些字段录入条件
20151116 01新建过滤界面4.png 

步骤五:保存过滤界面与报表后,运行效果:录入条件
20151116 01新建过滤界面5.png 

步骤六:在报表的服务端取数插件中,可以捕获到前端用户录入的条件
20151116 01新建过滤界面6.png


问题2 - 4:
2、本例中的之所以用固定列而非动态列,是因为要实现某列为链接状态(但是由于字段太多,用固定列画出太麻烦),能否在动态列中实现某字段链接状态。我在动态列填充时发现一个属性,但还是无法实现列链接header.AddChild("FUNAME", new LocaleValue("员工编号", this.Context.UserLocale.LCID)).IsHyperlink=true;请问如何解决?
    3、若以上的服务器端插件编写完成。那么链接事件是否用表单插件编写?是否用的是AbstractSysReportPlugIn这个基类?若是它的引用与using是什么?若不是请给出基类和其引用。
  4、由于第3点不知,所以无法测试,在此先提出,在表单插件中FLIST中的列链接(按钮事件)是否和单据体中使用同样的EntryButtonCellClick事件?

解答:
动态创建的列,没有支持 IsHyperlink 属性,请事先在报表上,添加好各字段。
只要确保字段的标识,报表插件产生的临时表中的字段名一致,最终的运行效果,与动态构建列无差。
而且,动态列可以与固定列混用;

点击字段超链接,打开新界面,需要编写报表的表单插件,派生自 AbstractSysReportPlugIn。此类在类库 Kingdee.BOS.Core.dll中:
using Kingdee.BOS.Core.Report.PlugIn;

点击列上的超链接,会触发报表插件的 EntryButtonCellClick 事件,在此事件中,可以从this.SysReportView.SelectedDataRows[0] 中,获取当前行的数据,从而实现打开自定义界面。


问题5:
5、在服务器端插件中如何实现合计列(这个好像论坛中有贴,但因上述问题较多,在此一并提出,望老师能在同段代码中示例)。

解答:
简单账表实现合计列,需要重载 GetSummaryColumnInfo 事件,指定那些字段需要合计,如下示例代码,指定价税合计字段(FAllAmount)需要合计,合计模式为SUM:

/// <summary>
/// 设置报表合计列
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
public override List<SummaryField> GetSummaryColumnInfo(IRptParams filter)
{
    var result = base.GetSummaryColumnInfo(filter);
    result.Add(new SummaryField("FALLAMOUNT", Kingdee.BOS.Core.Enums.BOSEnums.Enu_SummaryType.SUM));
    return result;
}


请问CommonHelper.PrintEventName("GetSummaryColumnInfo");这句引用于那个DLL文件和using什么空间?


抱歉,这个代码不用关注,直接删除即可。(已修正12楼示例代码)

这是我本地写的一个小辅助函数,用于输出当前正在执行的事件名称。

本人重载了插件的全部事件,然后在每个事件中,都输出当前正在执行的事件名,最后我可以通过各事件名输出的先后顺序,学习到各个事件在什么时候被触发,之前触发了什么事件,之后触发了什么事件。




赞 10