代码获取报表数据,插入datatable原创
金蝶云社区-anlan
anlan
0人赞赏了该文章 1,666次浏览 未经作者许可,禁止转载编辑于2022年01月18日 09:41:36

 #region 获取存货明细数据

        public void getStockDetailData(Context ctx, String year, String endYear, String period, String endPeriod, String currency, String ACCTGSYSTEMID, String ACCTGORGID, String ACCTPOLICYID, DataTable data)

        {

            try

            {


                ISysReportService sysReporSservice = ServiceFactory.GetSysReportService(ctx);


                IPermissionService permissionService = ServiceFactory.GetPermissionService(ctx);

                


                var filterMetadata = FormMetaDataCache.GetCachedFilterMetaData(ctx);

                var reportMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, "HS_NoDimInOutStockDetailRpt");

                var reportFilterMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, "HS_NoDimInOutStockDetailFilter");

                //获取报表过滤方案的构建基础,便于后续模型构建

                var reportFilterServiceProvider = reportFilterMetadata.BusinessInfo.GetForm().GetFormServiceProvider();

                var model = new SysReportFilterModel();

                model.SetContext(ctx, reportFilterMetadata.BusinessInfo, reportFilterServiceProvider);

                model.FormId = reportFilterMetadata.BusinessInfo.GetForm().Id;

                model.FilterObject.FilterMetaData = filterMetadata;

                model.InitFieldList(reportMetadata, reportFilterMetadata);

                model.GetSchemeList();


                //获取过滤方案,可以通过LoadScheme("Id"),查询报表默认存在的一些过滤方案

                model.LoadDefaultScheme();

                var filter = model.GetFilterParameter();

                var det = reportFilterMetadata.BusinessInfo.GetDynamicObjectType();


                //这里填写普通过滤方案,填充实体信息

                DynamicObject filterObj = filter.CustomFilter;

                filterObj["ACCTGSYSTEMID"] = getDynamicObject("Org_AccountSystem", ACCTGSYSTEMID, ctx);//默认会计核算体系

                //filterObj["STARTDATE"] = null;

                //filterObj["EndDate"] = null;

                filterObj["ACCTGSYSTEMID_Id"] = ACCTGSYSTEMID;

                filterObj["ACCTGORGID_Id"] = ACCTGORGID;

                filterObj["ACCTGORGID"] = getDynamicObject("ORG_Organizations", ACCTGORGID, ctx);

                filterObj["ACCTPOLICYID_Id"] = ACCTPOLICYID;

                filterObj["ACCTPOLICYID"] = getDynamicObject("BD_ACCTPOLICY", ACCTPOLICYID, ctx);

                //filterObj["FCURRENCYID_Id"] = currency;

                //filterObj["FCURRENCYID"] = getDynamicObject("BD_Currency", currency, ctx);

                filterObj["Year"] = year;

                filterObj["Period"] = period;

                filterObj["EndYear"] = endYear;

                filterObj["EndPeriod"] = endPeriod;

               // filterObj["FDimType"] ="1";


                //filter.FilterString.JoinFilterString(" FMaterialId IN ({0})", string.Join(",", materialSeq.Keys.Distinct().ToArray()));

                //报表参数

                IRptParams p = new RptParams();

                p.FormId = reportFilterMetadata.BusinessInfo.GetForm().Id;

                p.StartRow = 1;

                p.EndRow = int.MaxValue;

                p.FilterParameter = filter;

                p.FilterFieldInfo = model.FilterFieldInfo;

                p.CustomParams = new Dictionary<string, object>();

                p.CustomParams.Add("OpenParameter", "");

                //报表服务参数,用于查询。

                var reportServiceParam = new ReportServiceParameter();

                reportServiceParam.RptFilterParams = p;

                reportServiceParam.Context = ctx;

                reportServiceParam.PageId = Guid.NewGuid().ToString();

                reportServiceParam.BusinessInfo = reportMetadata.BusinessInfo;

                //调用服务、查询报表,resutl.DataSource就是我们需要的DatTable了

                var result = sysReporSservice.GetData(ctx, reportMetadata.BusinessInfo, p);


;

                SerializerProxy serialHelper = new SerializerProxy(MessageFormats.Json, UTF8Encoding.UTF8, false, "", true);

               

                //1、添加列


                using (DataTable resultDataTable = result)


                {

                    List<String> productList = new List<string>();

                    List<DataRow> productRowList = new List<DataRow>();

                    String productID = "";

                    DataRow newRow = data.NewRow();

                    foreach (DataRow dr in resultDataTable.Rows)

                    {


                        newRow = data.NewRow();

                        if (("标准销售出库单").Equals(dr["FBUSINESSTYPE"]) || ("标准销售退货单").Equals(dr["FBUSINESSTYPE"]))

                        {

                            productID = dr["FBILLNO"].ToString();

                            newRow["FBillno"] = productID;

                            newRow["FMaterialNumber"] = dr["FMaterialNumber"] == null ? "" : dr["FMaterialNumber"].ToString();

                            newRow["FSENDPRICE"] = dr["FSENDPRICE"] == null ? 0.0 : Convert.ToDouble(dr["FSENDPRICE"]);


                            data.Rows.Add(newRow);

                        }   

                    }

                }

            }

            catch (Exception e)

            {

                string errormessage = e.Message;


            }



        }

大批量插入数据

  DBServiceHelper.BulkInserts(this.Context, string.Empty, string.Empty, data);

赞 0