NC6X报表数据加工做语义模型返回SQL篇Word下载.docx
- 文档编号:21501750
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:31
- 大小:1.19MB
NC6X报表数据加工做语义模型返回SQL篇Word下载.docx
《NC6X报表数据加工做语义模型返回SQL篇Word下载.docx》由会员分享,可在线阅读,更多相关《NC6X报表数据加工做语义模型返回SQL篇Word下载.docx(31页珍藏版)》请在冰豆网上搜索。
最后解释下“数据加工(dp)”这个命名都是这样写规范,防止其他实施不随意修改。
15.然后就是自由报表设计了,在“自由报表-集团”或者“自由报表-全局”节点,引入刚才做好的语义模型文件,设计报表界面及相关统计等(这里不多说,不懂问实施或开发);
16.记得自由报表设计界面有右上角“标题”左边有个“主组织属性设置”螺丝一样的按钮,如果是报表存在组织查询条件的报表,这里必须设置集团和组织字段(代码或者SQL里面默认字段pk_org与pk_group)就不需要你设置,自动识别,否则需要手动设置(集团节点设置pk_group,反之都设置),如果这里没设置,可能出现语义模型可以预览数据,而自由报表预览无数据现象。
一般不需要查询组织条件的报表,报表字段只需要业务字段+pk_group,发布组织类型为集团的报表节点即可;
如果需要用到组织查询的报表,报表字段只需要业务字段+pk_group+pk_org,发布组织类型为具体组织(销售、库存、财务等)的的报表节点。
17.自由报表界面格式设计好了就需要发布节点,如果改报表用不到组织字段那就发布集团类型的报表节点;
如果用到了组织,那就发布具体的组织(销售、库存、财务等)的节点。
18.分配报表节点权限,制作报表查询模板,并分配给报表;
19.打开报表节点校验报表及查询模板能否正常加载出来;
20.如果报表正常显示加载出来,测试查询模板,接口实现类断点调试,把剩下的查询参数初始化与查询条件值校验工作完成;
21.以上工作完成,导出代码补丁、报表文件补丁、SQL脚本补丁给实施测试验证就大功告成!
2、定义报表数据加工接口及实现类代码
1.定义接口及接口方法:
截图:
以下是代码:
packagenc.itf.cmp.report.ext;
importcom.ufida.dataset.IContext;
/**
*资金管理>
现金管理报表>
集团现金流简表(新)(性能优化-由原来的语义脚本改成数据加工)
*
*@authorWYR
*@since2017-09-25
*
*/
publicinterfaceGroupcashflowprofileNewItf{
/**
*集团现金流简表(新)
*@paramcontext
*@return
*@throwsException
publicStringgetQuerySql(IContextcontext)throwsException;
}
2.接口实现类截图介代码:
代码:
packagenc.impl.cmp.report.ext;
importnc.itf.cmp.report.ext.GroupcashflowprofileNewItf;
publicclassGroupcashflowprofileNewImplimplementsGroupcashflowprofileNewItf{
publicStringgetQuerySql(IContextcontext)throwsException{
returnnull;
}
3.后面自己完善逻辑。
3、创建临时表参考案列
importjava.util.ArrayList;
importjava.util.List;
importnc.impl.pubapp.pattern.database.TempTable;
importnc.vo.pub.JavaType;
//NC6x后台创建临时表并插入数据(select多列fromTempTable那种)
publicStringcreateTempTable(StringtempName,String[]ids){
List<
List<
Object>
>
rows=newArrayList<
();
for(Stringite:
ids){
row=newArrayList<
String[]dates=ite.split("
"
);
row.add(dates[0]);
row.add(dates[1]);
rows.add(row);
//这个自己写个Stringcolumns="
id1,id2,id3,..."
;
分割一下就好了,方便拼接select语句查询
String[]columns={
"
id1"
"
id2"
};
String[]columnTypes={
CHAR(20)"
JavaType[]types=newJavaType[]{
JavaType.String,JavaType.String
TempTabledao=newTempTable();
returndao.getTempTable(tempName,columns,columnTypes,types,rows);
//返回表名
4、查询条件获取与查询模板简单说明
5、义模型放入数据加工接口代码操作步骤
1.创建语义模型:
2.设计语义模型(语义模型按钮组下面点设计按钮):
3.放入数据加工写好的代码接口代码:
4.格式化代码>
编译>
下一步>
确定:
5.添加语义模型字段:
6、自由报表设计
7、实打开报表节点测试查询模板调试代码修改代码(自己体会)
此处省略一万个草泥马(骂平台的最多能调试三次,超过3次报错直接结束开发环境启动的服务)........
8、接口文件配置
<
?
xmlversion="
1.0"
encoding="
gb2312"
modulename="
CMPEJB"
<
public>
<
!
--资金管理>
集团现金流简表(新)报表查询接口-->
componentpriority="
0"
singleton="
true"
remote="
tx="
CMT"
supportAlias="
<
interface>
nc.itf.cmp.report.ext.GroupcashflowprofileNewItf<
/interface>
implementation>
nc.impl.cmp.report.ext.GroupcashflowprofileNewImpl<
/implementation>
/component>
/public>
/module>
9、提供案例所有类代码:
1.临时表VO:
packagenc.vo.cmp.report.ext;
/***
集团现金流简表(新)临时表VO
*@since2017-09-26
publicclassGpCflowprofileNewTempVO{
privateStringpk_group;
privateStringinoutname;
privateStringcuname;
privatedoublemoney;
privateStringtallydate;
privateStringcashflow;
publicStringgetPk_group(){
returnpk_group;
publicvoidsetPk_group(Stringpk_group){
this.pk_group=pk_group;
publicStringgetInoutname(){
returninoutname;
publicvoidsetInoutname(Stringinoutname){
this.inoutname=inoutname;
publicStringgetCuname(){
returncuname;
publicvoidsetCuname(Stringcuname){
this.cuname=cuname;
publicdoublegetMoney(){
returnmoney;
publicvoidsetMoney(doublemoney){
this.money=money;
publicStringgetTallydate(){
returntallydate;
publicvoidsetTallydate(Stringtallydate){
this.tallydate=tallydate;
publicStringgetCashflow(){
returncashflow;
publicvoidsetCashflow(Stringcashflow){
this.cashflow=cashflow;
2.接口:
3.实现类:
importjava.util.HashMap;
importnc.bs.dao.BaseDAO;
importnc.bs.dao.DAOException;
importnc.jdbc.framework.processor.BeanListProcessor;
importnc.vo.cmp.report.ext.GpCflowprofileNewTempVO;
importnc.vo.pub.query.ConditionVO;
importnc.vo.pubapp.pattern.exception.ExceptionUtils;
importmon.util.NumberUtils;
importcom.ufida.report.anareport.FreeReportContextKey;
/*****最终返回的查询SQL******/
privateStringBuilderbuilderSQL=newStringBuilder();
privateBaseDAOdao=null;
/*****创建的临时表名*******/
privateStringTempTableName=null;
/*****临时表查询SQL列*******/
privatefinalStringTempSelectField="
pk_group,inoutname,cuname,money,tallydate,cashflow"
/*****项目类型(拼SQL用到)******/
privateString[]cashflows=newString[]{
"
经营流入"
经营流出"
土地费用"
筹资流入"
筹资流出"
投资流入"
投资流出"
集团内部抵消项"
理财收支"
};
/*******开始日期*********/
privateStringbeg_date="
2017-06-01"
/*******结束日期*********/
privateStringend_date="
2017-09-2523:
59:
59"
/********java数据类型*********/
privateJavaType[]types=newJavaType[]{
JavaType.String,JavaType.String,JavaType.String,JavaType.BigDecimal,JavaType.String,JavaType.String
/************数据库列类型*************/
privateString[]columnTypes={"
char(20)"
varchar(100)"
varchar(30)"
decimal(28,8)"
char(19)"
//以下汇率只是以默认定义的(测试使用,否则开发时语义模型没法测试编译下一步通过),后续查询条件必输会覆盖值
//那个时候还没用到查询模板
/********美元汇率********/
privatedoubleusd=6.5382;
/********港币汇率********/
privatedoublehkd=0.83687;
/********马币汇率********/
privatedoublemb=1.55;
/********澳元汇率********/
privatedoubleob=1.7;
/********新币汇率********/
privatedoublexb=1.2;
/********加币汇率********/
privatedoublejb=1.3;
/***
*拼接查询SQL
*@paramcontext报表参数上下文
privateStringgetConvertSql(IContextcontext)throwsException{
TempTableName=null;
this.getQueryParameters(context);
this.checkQueryParametersIsNotNull();
this.getCreateTempTableName();
this.buildSelectSql();
this.getEmbeddedSql();
returnthis.builderSQL.toString();
*获取第二层嵌套的SQL
*@since2017-09-26
*@throwsException
privatevoidgetEmbeddedSql()throwsException{
StringBuilderbdSql=newStringBuilder();
bdSql.append("
from"
("
+getSameCasewhenPartSql("
A.经营"
)+"
)"
Unionall"
B.土地费用"
C.筹资"
)"
D.投资"
E.集团内部"
bd
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NC6X 报表 数据 加工 语义 模型 返回 SQL
![提示](https://static.bdocx.com/images/bang_tan.gif)