收藏 分销(赏)

账表服务取数插件示例代码.docx

上传人:pc****0 文档编号:8938985 上传时间:2025-03-08 格式:DOCX 页数:49 大小:473.66KB 下载积分:10 金币
下载 相关 举报
账表服务取数插件示例代码.docx_第1页
第1页 / 共49页
账表服务取数插件示例代码.docx_第2页
第2页 / 共49页


点击查看更多>>
资源描述
账表(服务取数)插件示例代码 修订记录 Ver. No 日期 编制\修订 校对 批准 修改的章节号 V1.0 20150415 杨兵 张晋博 刘兵 赖碧云 初始版本 问题和意见 如果你对文档有任何意见、问题或想法,或者你的问题未在此文档中找到答案,请通过电子邮件联系我们 jinbo_zhang@ 目录 账表(服务取数)插件示例代码 1 账表(服务取数)插件概要说明 4 如何创建账表服务插件 6 如何启用账表服务插件 8 公共属性 9 BusinessInfo 9 Context 10 DctSpecialTempSumTable 10 DynamicHeader 10 ReportHeader 10 ReportId 10 ReportProperty 10 ReportTitles 10 SummarySpecialFields 11 TempTableNameList 11 分页账表特有属性 11 CurrentListPosition 11 CacheMapTempTableNameList 11 CacheDataList 11 树形账表特有属性 11 CurrentGroupID 11 事件 12 Initialize 12 案例 – 销售订单执行汇总表账表取数插件初始化 12 GetData 17 GetTableName 17 BuilderReportSqlAndTempTable 17 案例 – 销售订单执行汇总表账表取数 17 BuilderSelectFieldSQL 19 案例 – 核算错误记录账表取数 20 BuilderTempTableOrderBySQL 21 BuilderFromWhereSQL 21 案例 – 核算错误记录账表取数 22 GetIdentityFieldIndexSQL 24 ExecuteBatch 25 GetReportHeaders 25 案例 – 应付款账龄分析表构建列头信息 25 GetReportTitles 29 案例 – 销售订单执行汇总表账表表头信息 30 AnalyzeDspCloumn 35 AfterCreateTempTable 35 GetReportData 35 案例 – 供应商供货汇总表取数 36 GetRowsCount 37 案例 – 库存台账分页账表获取当前页数据行数 38 GetSummaryData 40 GetSummaryColumnInfo 40 案例 – 销售订单执行汇总表分组汇总字段信息 40 GetSummaryColumsSQL 43 案例 – 销售订单执行汇总表分组汇总SQL指令 43 CloseReport 45 案例 – 供货商供货汇总表关闭时,清除临时表 46 GetList 47 GetTreeNodes 49 账表(服务取数)插件概要说明 账表的服务端取数插件,是通过插件组装账表取数Sql指令,把取数结果返回给平台账表引擎,平台将取数结果绑定到账表页面的过程,简单说,平台在账表开发过程中,只负责把插件取到的账表数据绑定到设计好的账表模型上,取数逻辑由账表服务端插件完成 开发过程中,有几个重要模型 1、 设计账表模型 a) 账表表头字段 b) 账表表体字段(也说成账表列头字段) 2、 设计账表过滤模型 a) 自定义快捷过滤面板 b) 高级过滤条件面板 c) 排序面板 d) 分组汇总面板 e) 显示隐藏列面板 账表根据使用场景,分为简单账表、树形账表、分页账表、简单Sql账表 简单Sql账表没有服务取数插件 所有账表都须实现的重要事件 1、 Initialize 2、 BuilderSelectFieldSQL 3、 BuilderFromWhereSQL 4、 BuilderReportSqlAndTempTable 5、 GetReportTitles 6、 GetReportHeaders 7、 GetSummaryColumnInfo 分页账表特点: 与简单账表区别在于,分页账表通过导航按钮切换帐表内容 分页账表基本原理说明: Ø 需要提供用于导航的结果集,如下图中以语言标识为导航结果集(实现GetList方法) Ø 显示数据需要按照导航结果过滤(实现BuilderReportSqlAndTempTable方法) 树形账表特点: Ø 树形账表通过树节点切换账表内容 树形账表基本原理说明: Ø 需要提供用于导航树形结果集(List<TreeNode>),如下图中以语言标识为树形结果集(实现GetTreeNodes方法) Ø 显示数据需要按照树节点结果过滤(实现BuilderReportSqlAndTempTable方法,使用CurrentGroupID重要属性作过滤条件) 如何创建账表服务插件 Ø 创建插件类库工程 Ø 插件类库引用BOS平台组件(被引用组件在Cloud网站website\bin目录下) Ø 修改插件类库编译输出路径为website\bin(右键插件类库,选择属性) Ø 修改类文件继承基类,并引用基类所在命名空间 如何启用账表服务插件 插件编写完毕,类库编译通过后 进入BOS设计器,打开对应账表模型,配置账表服务插件: 公共属性 BusinessInfo 账表模型的元数据描述信息 Context 当前登录系统的上下文信息,如数据库连接信息,当前登录操作员信息等 DctSpecialTempSumTable 临时汇总数据表格 DynamicHeader 动态列头 ReportHeader 账表列头 ReportId 当前账表模型唯一标示 ReportProperty Ø 账表属性,包含账表开发过程中的全局信息 Ø 其重要属性说明: 属性名 描述 ReportType 账表类型(默认是简单账表、如果开发的是分页或树形帐表,请在账表插件初始化事件中,对此属性进行正确赋值,否则账表引擎会默认按简单账表处理页面) IsGroupSummary 是否支持分组汇总 IsUIDesignerColumns 账表列头是否是通过BOSIDE设计 SimpleAllCols 是否锁定账表表格列 DecimalControlFieldList 精度控制字段信息 DspInsteadColumnsInfo 列表格式化列,指示Key列被Value列内容替代 GroupSummaryInfoData 分组汇总信息 ReportTitles 账表表头字段信息 SummarySpecialFields 汇总字段信息 TempTableNameList 临时表列表 分页账表特有属性 CurrentListPosition 分页账表属性 分页账表当前页账表数据对象的位置信息,此属性与CacheMapTempTableNameList属性一起使用 CacheMapTempTableNameList 分页账表属性 记录分页账表每页账表数据对象信息,此属性与CurrentListPosition属性一起使用 CacheDataList 分页账表属性 根据账表当前页位置,获取DataRow对象 树形账表特有属性 CurrentGroupID 树形账表属性 树形账表分组标识,点击树形账表左边树时,由平台账表引擎为其赋值,其数据来源于账表插件GetTreeNodes方法返回的树节点id属性的值,对应树形账表插件在BuilderReportSqlAndTempTable方法拼接账表取数sql时,需要以CurrentGroupID作为过滤条件拼接到Sql指令的Where部分 事件 Initialize 触发时机 账表View初始化,开始初始化账表服务取数插件代理对象时 应用场景 此时账表插件基类已完成账表属性对象(ReportProperty)的创建工作 关键字 初始化 备注 一般账表插件在此事件中,对刚创建的ReportProperty做进一步初始化 案例 – 销售订单执行汇总表账表取数插件初始化 代码来源 Kingdee.K3.SCM.App.Sal.Report.SalCollectRpt 需求背景 销售订单执行汇总表初始化时,进一步初始化账表属性对象 1、 账表属性的报表类型、报表名称 2、 由于是汇总表,配置其明细表模型唯一标示和唯一标示一张明显表的字段信息(双击汇总表一行记录时,根据以上信息定位到明细表) 3、 账表属性的列替代显示信息(key:被替代显示的列,value:替代显示的列) 4、 字段精度控制描述信息(即哪个字段的精度被哪个字段所控制) 实现方案 账表服务取数插件初始化时,修改账表属性中的报表名称、明细表属性、替代显示列信息、字段精度控制信息等 示例代码 C#   using System; using System.Collections.Generic; using System.Linq; using System.Text; using Kingdee.BOS.Contracts.Report; using Kingdee.BOS.Core.Report; using Kingdee.BOS; using Kingdee.BOS.Core.List; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Contracts; using Kingdee.K3.SCM.Sal.Report.PlugIn; using System.Collections; using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.SqlBuilder; using Kingdee.BOS.Core; using Kingdee.BOS.Core.Util; using Kingdee.BOS.Util; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Permission; using Kingdee.BOS.App.Core.BusinessFlow; using Kingdee.K3.Core; using Kingdee.BOS.Core.BusinessFlow.ServiceArgs; using Kingdee.BOS.BusinessEntity.BusinessFlow; using System.Data; using Kingdee.BOS.Core.Permission.Objects; using Kingdee.BOS.Core.CommonFilter; namespace Kingdee.K3.SCM.App.Sal.Report { /// <summary> /// 销售汇总表数据源插件 /// </summary> public class SalCollectRpt : SysReportBaseService { public override void Initialize() { base.Initialize(); this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL; this.ReportProperty.ReportName = "销售订单执行汇总表"; this.ReportProperty.DetailReportId = "SAL_DetailReport"; this.ReportProperty.PrimaryKeyFieldName = "FBILLNO"; this.ReportProperty.IsGroupSummary = true; this.ReportProperty.IsUIDesignerColumns = true; //显示替代列this.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FSALEORGID", "FSALEORGNAME"); this.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FSALEDEPTID", "FSALEDEPT"); this.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FSALEGROUPID", "FSALEGROUP"); this.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FSALERID", "FSALES"); this.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FMATERIALID", "FMATERIALNUMBER"); this.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FCURRENCYID", "FMONEYTYPE"); this.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FCUSTID", "FCUSTOMERNUMBER"); this.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FMATERIALGROUP", "FMATERIALGROUPNAME"); this.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FAUXPROPID", "FAUXPROP"); this.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FUNITID", "FUNITNAME"); //精度控制 List<DecimalControlField> lstDcf = new List<DecimalControlField>(); DecimalControlField dcf = new DecimalControlField(); //单价 dcf.ByDecimalControlFieldName = "FPRICE";// dcf.DecimalControlFieldName = "FPRICEDIGITS"; lstDcf.Add(dcf); dcf = new DecimalControlField(); //订单 dcf.ByDecimalControlFieldName = "FSOQTY"; dcf.DecimalControlFieldName = "FPRECISION"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FSOAMOUNT"; dcf.DecimalControlFieldName = "FAMOUNTDIGITS"; lstDcf.Add(dcf); //发货单 dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FSQTY"; dcf.DecimalControlFieldName = "FPRECISION"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FSAMOUNT"; dcf.DecimalControlFieldName = "FAMOUNTDIGITS"; lstDcf.Add(dcf); //出库 dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FALREADYQTY"; dcf.DecimalControlFieldName = "FPRECISION"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FALREADYAMOUNT"; dcf.DecimalControlFieldName = "FAMOUNTDIGITS"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FNOTQTY"; dcf.DecimalControlFieldName = "FPRECISION"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FNOTAMOUNT"; dcf.DecimalControlFieldName = "FAMOUNTDIGITS"; lstDcf.Add(dcf); //退货 dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FRETURNPQTY"; dcf.DecimalControlFieldName = "FPRECISION"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FRETURNPAMOUNT"; dcf.DecimalControlFieldName = "FAMOUNTDIGITS"; lstDcf.Add(dcf); //退库 dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FRETURNSQTY"; dcf.DecimalControlFieldName = "FPRECISION"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FRETURNSAMOUNT"; dcf.DecimalControlFieldName = "FAMOUNTDIGITS"; lstDcf.Add(dcf); //开票 dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FINVOECEQTY"; dcf.DecimalControlFieldName = "FPRECISION"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FNVOECEAMOUNT"; dcf.DecimalControlFieldName = "FAMOUNTDIGITS"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FNINVOECEQTY"; dcf.DecimalControlFieldName = "FPRECISION"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FNNVOECEAMOUNT"; dcf.DecimalControlFieldName = "FAMOUNTDIGITS"; lstDcf.Add(dcf); //收款 dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FRECEIPTAMOUNT"; dcf.DecimalControlFieldName = "FAMOUNTDIGITS"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FNRECEIPTAMOUNT"; dcf.DecimalControlFieldName = "FAMOUNTDIGITS"; lstDcf.Add(dcf); //核销金额可能是尾差过小,就不按金额精度处理 dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FCHARGEOFFAMOUNT"; dcf.DecimalControlFieldName = "FAMOUNTDIGITS"; lstDcf.Add(dcf); //应收 dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FRECQTY"; dcf.DecimalControlFieldName = "FPRECISION"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FRECAMOUNT"; dcf.DecimalControlFieldName = "FAMOUNTDIGITS"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FRECNQTY"; dcf.DecimalControlFieldName = "FPRECISION"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FRECNAMOUNT"; dcf.DecimalControlFieldName = "FAMOUNTDIGITS"; lstDcf.Add(dcf); dcf = new DecimalControlField(); dcf.ByDecimalControlFieldName = "FWRITEOFFAMOUNT"; dcf.DecimalControlFieldName = "FAMOUNTDIGITS"; lstDcf.Add(dcf); this.ReportProperty.DecimalControlFieldList = lstDcf; } } } GetData 备注 此方法由插件平台报表基类实现,插件不用关注 示例代码 无 GetTableName 备注 此方法由插件平台报表基类实现,插件不用关注 用于创建一张临时表,完成插件账表数据逻辑后,用此表承载账表数据 示例代码 无 BuilderReportSqlAndTempTable 触发时机 正式进入账表取数sql拼接并取数,把账表取数结果放到上一步创建的临时表中 应用场景 开始进行账表sql拼接取数,并把账表取数结果放到上一步创建的临时表中 关键字 账表取数 备注 如果此账表插件设置sql数据逻辑由插件完成(this.IsCreateTempTableByPlugin),即调用BuilderReportSqlAndTempTable接口,否则调用以下3个接口,完成账表取数逻辑的sql指令即:BuilderSelectFieldSQL、BuilderTempTableOrderBySQL、BuilderFormWhereSQL 案例 – 销售订单执行汇总表账表取数 代码来源 Kingdee.K3.SCM.App.Sal.Report.SalCollectRpt 需求背景 销售订单执行汇总表根据账表过滤条件取数 实现方案 账表插件在BuilderReportSqlAndTempTable方法中,完成账表取数并把数据填充到临时表中 示例代码 C#   using System; using System.Collections.Generic; using System.Linq; using System.Text; using Kingdee.BOS.Contracts.Report; using Kingdee.BOS.Core.Report; using Kingdee.BOS; using Kingdee.BOS.Core.List; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Contracts; using Kingdee.K3.SCM.Sal.Report.PlugIn; using System.Collections; using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.SqlBuilder; using Kingdee.BOS.Core; using Kingdee.BOS.Core.Util; using Kingdee.BOS.Util; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Permission; using Kingdee.BOS.App.Core.BusinessFlow; using Kingdee.K3.Core; using Kingdee.BOS.Core.BusinessFlow.ServiceArgs; using Kingdee.BOS.BusinessEntity.BusinessFlow; using System.Data; using Kingdee.BOS.Core.Permission.Objects; using Kingdee.BOS.Core.CommonFilter; namespace Kingdee.K3.SCM.App.Sal.Report { /// <summary> /// 销售汇总表数据源插件 /// </summary> public class SalCollectRpt : SysReportBaseService { public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName) { ModifyShowHideColumns(ref filter); InitTables();//初始化报表使用的临时表,使用一次即删除 moreFilter = filter.FilterParameter.FilterString.Trim();//高级过滤 this.SetFilter(filter);//设置快捷页签过滤条件 DynamicObject userParameter = filter.ParameterData; if (userParameter != null) { this.onTime = Convert.ToBoolean(userParameter["onTime"]); } DynamicObject dyFilter = filter.FilterParameter.CustomFilter;//快捷页签过滤 if (dyFilter["SaleOrgList"] == null || string.IsNullOrWhiteSpace(dyFilter["SaleOrgList"].ToString())) { SetRptBosTable(tableName); return; } else { this.GetSQLWhere(); //进行过滤快捷页签汇总 List<BaseDataTempTable> listBaseDataTempTable = filter.BaseDataTempTable; // 如果设置了基础资料数据权限,则获取基础资料数据权限隔离的临时表集合 SalRptCommon.GetFilterOrder(this.Context,rptFilterTable, !string.IsNullOrWhiteSpace(moreFilter), creatWhereFirst.ToString(), this.filterOrgList, listBaseDataTempTable, "SAL_CollectReport"); // 添加基础资料数据权限隔离的临时表到待删除临时表集合 foreach (BaseDataTempTable item in listBaseDataTempTable) { deleteTables.Add(item.TempTable);
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服