zoukankan      html  css  js  c++  java
  • 如何在服务层获取简单账表数据结果

    在项目实施中,总会碰到这样的需求:需要将系统中某些报表的数据传递给第三方系统。假如实施的系统是K/3 WISE,那么恭喜你,你需要自己跟踪SQL语句,把报表逻辑重新实现一遍。不过在K/3 Cloud,你不需要这么做,依托强大的BOS平台(这点必须好好吹),通过调用接口的方式即可轻松获取简单账表数据。

    当然,本技巧有前提条件:简单账表的过滤条件必须事先有保存方案。毕竟通过纯编码的方式构建过滤条件是一件很麻烦的事情。
    废话不多说,我们以【财务会计】—【应收款管理】—【报表分析】-【应收款账龄分析表】为例,来教大家如何调用。

    直接上代码!

    using Kingdee.BOS.Contracts;
    using Kingdee.BOS.Core;
    using Kingdee.BOS.Core.DynamicForm;
    using Kingdee.BOS.Core.DynamicForm.PlugIn;
    using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
    using Kingdee.BOS.Core.Report;
    using Kingdee.BOS.Core.ReportFilter;
    using Kingdee.BOS.Model.CommonFilter;
    using Kingdee.BOS.Model.ReportFilter;
    using Kingdee.BOS.ServiceHelper;
    
    
    
    ISysReportService sysReporSservice = ServiceFactory.GetSysReportService(this.Context);
    IPermissionService permissionService = ServiceFactory.GetPermissionService(this.Context);
    
    var filterMetadata = FormMetaDataCache.GetCachedFilterMetaData(this.Context);//加载字段比较条件元数据。
    var reportMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, "AR_AgingAnalysis");//加载应收款账龄分析表元数据。
    var reportFilterMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, "AR_AgingAnalysisFilter");//加载应收款账龄分析表过滤条件元数据。
    var reportFilterServiceProvider = reportFilterMetadata.BusinessInfo.GetForm().GetFormServiceProvider();
    
    var model = new SysReportFilterModel();
    model.SetContext(this.Context, reportFilterMetadata.BusinessInfo, reportFilterServiceProvider);
    model.FormId = reportFilterMetadata.BusinessInfo.GetForm().Id;
    model.FilterObject.FilterMetaData = filterMetadata;
    model.InitFieldList(reportMetadata, reportFilterMetadata);
    model.GetSchemeList();
    
    var entity = model.Load("57fc5b64cc45d7");//过滤方案的主键值,可通过该SQL语句查询得到:SELECT * FROM T_BAS_FILTERSCHEME
    var filter = model.GetFilterParameter();
    
    IRptParams p = new RptParams();
    p.FormId = reportFilterMetadata.BusinessInfo.GetForm().Id;
    p.StartRow = 1;
    p.EndRow = int.MaxValue;//StartRow和EndRow是报表数据分页的起始行数和截至行数,一般取所有数据,所以EndRow取int最大值。
    p.FilterParameter = filter;
    p.FilterFieldInfo = model.FilterFieldInfo;
    p.BaseDataTempTable.AddRange(permissionService.GetBaseDataTempTable(this.Context, reportMetadata.BusinessInfo.GetForm().Id));
    using (DataTable dt = sysReporSservice.GetData(this.Context, reportMetadata.BusinessInfo, p))
    {
            //dt就是报表数据,接下来就是你发挥的时间。
    }
    
    ServiceFactory.CloseService(sysReporSservice);
    ServiceFactory.CloseService(permissionService);
    


  • 相关阅读:
    AcWing每日一题--最大的和
    使用 *args 和 **kwargs 的含义
    Python的八大基本数据类型之 元组、列表、字典
    条件判断与if嵌套
    数据拼接与转换
    print()函数与转义字符
    BEGIN-2 序列求和
    BEGIN-1 A+B问题
    并发编程——进程——生产者消费者模型
    并发编程——进程——进程的同步与数据共享
  • 原文地址:https://www.cnblogs.com/fyq891014/p/8698037.html
Copyright © 2011-2022 走看看