WebAPI自定义接口获取报表数据
## WebAPI自定义接口获取报表数据
### 一、提问:
想要开发自定义物料收发明细报表接口,供第三方调用,难点:1、需要知道报表数据抓取的范例或者逻辑?2、后台找不到物料收发明细表的表名,应该怎么取呢?3、想查询具体条件如组织、物料的报表数据,这个物料收发明细的数据如何取?
通过多个论坛文章参考:
1、在插件中获取分页账表数据:https://wenku.my7c.com/article/98475029272558848?productLineId=1&isKnowledge=2
2、WebAPI自定义接口调用报表数据:https://wenku.my7c.com/article/25709?productLineId=1
3、分页账表封装自定义WebApi接口供第三方系统调用示例:https://wenku.my7c.com/article/273824919174636288?productLineId=1
最后结合自己实际开发接口后,实现如下:
### 二、实现
```
var ctx = this.KDContext.Session.AppContext;
//库存组织
string FStockOrgId = jObject["FStockOrgId"].ToString();
//起始日期 2022-6-15
string FBeginDate = jObject["FBeginDate"].ToString();
//结束日期 2022-6-15
string FEndDate = jObject["FEndDate"].ToString();
//是否包含禁用物料
bool FShowForbidMaterial = Convert.ToBoolean(jObject["FShowForbidMaterial"].ToString());
//库存状态是否包含在途
bool FStockStatus = Convert.ToBoolean(jObject["FStockStatus"].ToString());
ISysReportService sysReporSservice = ServiceFactory.GetSysReportService(ctx);
var filterMetadata = FormMetaDataCache.GetCachedFilterMetaData(ctx);//加载字段比较条件元数据。
var reportMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, "STK_StockDetailRpt");//加载报表
var reportFilterMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, "STK_StockDetailFilter");//加载报表过滤条件元数据。
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();
//查询默认过滤方案id
string Sql = "SELECT fschemeid FROM T_BAS_FILTERSCHEME where fformid='STK_StockDetailRpt' and fschemename='Default Scheme'";
string fschemeid = "";
using (IDataReader reader = DBServiceHelper.ExecuteReader(ctx, Sql))
{
if (reader.Read())
{
fschemeid = reader["fschemeid"].ToString();
}
}
if (string.IsNullOrEmpty(fschemeid))
{
return "过滤方案为空,请配置物料收发存明细表的过滤方案!";
}
//过滤方案的主键值,可通过该SQL语句查询得到:SELECT * FROM T_BAS_FILTERSCHEME
//var entity = model.Load("62a859a944add8");
var entity = model.Load(fschemeid);
//查询组织id
string sd = string.Format(@"/*dialect*/ select FORGID from T_ORG_Organizations where FNUMBER='{0}'", FStockOrgId);
DataTable dp = DBServiceHelper.ExecuteDataSet(ctx, sd).Tables[0];
long ForgId = dp.Rows[0][0] == null ? 0 : Convert.ToInt64(dp.Rows[0][0]);
//赋值过滤方案条件
var filterParam = model.GetFilterParameter();
filterParam.CustomFilter["StockOrgId"] = ForgId;
filterParam.CustomFilter["BeginDate"] = FBeginDate;
filterParam.CustomFilter["EndDate"] = FEndDate;
filterParam.CustomFilter["ShowForbidMaterial"] = FShowForbidMaterial;
IRptParams p = new RptParams();
p.FormId = reportFilterMetadata.BusinessInfo.GetForm().Id;
//StartRow和EndRow是报表数据分页的起始行数和截至行数,一般取所有数据,所以EndRow取int最大值。
p.StartRow = 1;
p.EndRow = int.MaxValue;
p.FilterParameter = filterParam;
p.FilterFieldInfo = model.FilterFieldInfo;
p.CustomParams.Add("OpenParameter", "");//此参数不能缺少,即使为空也要保留
MoveReportServiceParameter param = new MoveReportServiceParameter(ctx, reportMetadata.BusinessInfo, Guid.NewGuid().ToString(), p);
var rpt = sysReporSservice.GetListAndReportData(param);//简单账表使用GetReportData方法
System.Data.DataTable dt = new System.Data.DataTable();
IsoDateTimeConverter timeConverter = new IsoDateTimeConverter();
timeConverter.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
DataTable dy = rpt.DataSource;
if (dy == null)
{
return "提示:当前查询条件下无返回数据!";
}
string listHead = JsonConvert.SerializeObject(dy, timeConverter, new DataTableConverter());
return listHead;
```
mark
WebAPI自定义接口获取报表数据
## WebAPI自定义接口获取报表数据### 一、提问:想要开发自定义物料收发明细报表接口,供第三方调用,难点:1、需要知道报表数据抓取的范...
点击下载文档
本文2024-09-16 17:17:19发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14741.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章