完整word版,NC数据加工做语义模型

完整word版,NC数据加工做语义模型
完整word版,NC数据加工做语义模型

报表语义模型(数据加工:返回结果集方式)

数据加工方式:1.返回查询SQL ; 2.返回结果集DataSet;3.返回数据表。

实现方式基本一致,可以参照系统原有报表语义模型

一、新建报表查询入口类,初始化报表字段

1.数据加工查询业务处理接口的定义:

package nc.itf.fbm.paperbill.query;

import nc.pub.smart.data.DataSet;

import nc.vo.pub.BusinessException;

import com.ufida.dataset.IContext;

/**票据信息查询/票据池额度查询接口

*

* @author 温燕荣WYR

* @date 2014-04-15

*/

public interface IFbmQueryPaperBillService {

/**

* 票据信息查询

* @param context

* @return

* @throws BusinessException

*/

public DataSet queryPaperBillInfo(IContext context) throws Exception;

/**

* 票据池额度查询接口

* @param context

* @return

* @throws BusinessException

*/

public DataSet queryPaperBillPoolLimit(IContext context) throws Exception;

}

2.数据加工入口类,初始化报表字段

package nc.itf.fbm.paperbill.query;

import java.util.ArrayList;

import java.util.List;

import https://www.360docs.net/doc/9a12772035.html,mon.NCLocator;

import nc.pub.smart.data.DataSet;

import nc.pub.smart.metadata.DataTypeConstant;

import nc.pub.smart.metadata.Field;

import nc.pub.smart.metadata.MetaData;

import nc.vo.obm.paperbill.query.PaperBillPoolVO;

import com.ufida.dataset.IContext;

/**票据池额度查询入口类

*

* @author 温燕荣WYR

* @date 2014-04-15

*/

public class QueryPaperPoolLimitService {

private static final MetaData metaData;

public QueryPaperPoolLimitService(){

super();

}

/**

* 获得结果集

*

* @param context 报表界面查询传进来的参数(查询条件=值,系统一些默认参数等)* @return

*/

public static DataSet queryPJCAmt(IContext context)throws Exception {

//调用报表查询业务处理接口,

IFbmQueryPaperBillService gatherservice=(IFbmQueryPaperBillService) NCLocator.getInstance().lookup(IFbmQueryPaperBillService.class.getName());

DataSet resultDataSet = gatherservice.queryPaperBillPoolLimit(context);

setPrecision(resultDataSet);

return resultDataSet;

}

//初始化报表要显示的字段,包括查询条件字段也在内

static {

metaData = new MetaData();

List fields =makeList();

//报表显示字段

Field f = new Field();

f.setFldname(https://www.360docs.net/doc/9a12772035.html,NAME);

f.setCaption("财务组织名称");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING);

fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.ACCTNAME);

f.setCaption("机构名称");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING);

fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.ACCTNO);

f.setCaption("账号");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING);

fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.PJCNO);

f.setCaption("票据池编号");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING);

fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.PJCKAMT);

f.setCaption("票据池可开票额度");

f.setPrecision(17);

f.setDataType(DataTypeConstant.BIGDECIMAL);

f.setScale(4);

fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.CUSKAMT);

f.setCaption("客户剩余可开票额度");

f.setPrecision(17);

f.setDataType(DataTypeConstant.BIGDECIMAL);

f.setScale(4);

fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.CUSEAMT);

f.setCaption("客户有效开票额度");

f.setPrecision(17);

f.setDataType(DataTypeConstant.BIGDECIMAL);

f.setScale(4);

fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.CORNAME);

f.setCaption("分支机构名称");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING); fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.CORKAMT);

f.setCaption("分支机构剩余可开票额度");

f.setPrecision(17);

f.setDataType(DataTypeConstant.BIGDECIMAL);

f.setScale(4);

fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.REQRESERVED1);

f.setCaption("请求备用字段1");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING); fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.REQRESERVED2);

f.setCaption("请求备用字段2");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING); fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.REPRESERVED3);

f.setCaption("响应备用字段3");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING); fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.REPRESERVED4);

f.setCaption("响应备用字段4");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING); fields.add(f);

//查询字段

f = new Field();

f.setFldname(PaperBillPoolVO.PK_ORG);

f.setCaption("财务组织PK");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING); fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.QUERY_ACCTNO);

f.setCaption("账号-查询");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING); fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.QUERY_PJCNO);

f.setCaption("票据池编号-查询");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING); fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.MFLAG);

f.setCaption("是否票据池主申请账号-查询");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING); fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.NEXTTAG);

f.setCaption("下页标识-查询");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING);

fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.REQRESERVED1);

f.setCaption("请求备用字段1-查询");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING);

fields.add(f);

f = new Field();

f.setFldname(PaperBillPoolVO.REQRESERVED1);

f.setCaption("请求备用字段2-查询");

f.setPrecision(200);

f.setDataType(DataTypeConstant.STRING);

fields.add(f);

metaData.addField(fields.toArray(new Field[] {}));

}

/**

* 构造list

*

* @param

* @return

*/

public static List makeList() {

return new ArrayList();

}

//字符串类型字段统一设置字段长度

private static void setPrecision(DataSet resultDataSet) { for (Field f : resultDataSet.getMetaData().getFields()) { if (f.getDataType() == DataTypeConstant.STRING) {

f.setPrecision(300);

}

}

}

/**

* 获得票据池额度元数据(相当于代码写一个元数据)

*

* @return

*/

public static MetaData getPJCAmtrMetaData(){

return metaData;

}

}

二、数据加工业务处理

//注意:我这个是(银企直联)NC在线查询银行数据的代码,不用完全参照//我这里就举例(票据池额度查询)

package nc.impl.fbm.paperbill.query;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import nc.bs.fbm.paperbill.PaperBillService;

import https://www.360docs.net/doc/9a12772035.html,mon.NCLocator;

import nc.itf.fbm.paperbill.query.IFbmQueryPaperBillService;

import nc.itf.fbm.paperbill.query.QueryPaperBillInfoService;

import nc.itf.fbm.paperbill.query.QueryPaperPoolLimitService;

import nc.itf.obm.paperbill.query.IObmQueryPaperBillService;

import nc.pub.smart.data.DataSet;

import nc.pub.smart.metadata.Field;

import nc.pub.smart.metadata.MetaData;

import nc.vo.fbm.paperbill.constant.PaperBillFbmOrderType;

import nc.vo.obm.paperbill.constant.PaperBillObmConstant;

import nc.vo.obm.paperbill.query.PaperBillInfoVO;

import nc.vo.obm.paperbill.query.PaperBillPoolVO;

import nc.vo.pub.BusinessException;

import nc.vo.pub.query.ConditionVO;

import com.ufida.dataset.IContext;

import com.ufida.report.anareport.FreeReportContextKey;

/**票据信息查询/票据池额度查询接口实现类

*

* @author 温燕荣WYR

* @date 2014-04-15

*/

public class FbmQueryPaperBillServiceImpl extends PaperBillService implements IFbmQueryPaperBillService{

private IObmQueryPaperBillService iObmQueryPaperBillService;

//这一步可以不需要去理解,当不存在就可以了

private static String billfunc= PaperBillObmConstant.PAPERQUERY;

/**

* 票据池额度查询

* @param context

* @return

* @throws BusinessException

*/

@Override

public DataSet queryPaperBillPoolLimit(IContext context) throws Exception {

//获取查询条件值

ConditionVO[] conditionvos=(ConditionVO[]) context.getAttribute(FreeReportContextKey.KEY_REPORT_QUERYCONDITIONVOS);

DataSet resultDataSet = new DataSet();

HashMap hashmap=new HashMap();//获取查询条件(key,值)对应

if(conditionvos!=null&&conditionvos.length>0){//执行了查询

for(ConditionVO conditionvo:conditionvos){

hashmap.put(conditionvo.getFieldCode(), conditionvo.getValue());

}

//这一步可以不需要去理解,当不存在就可以了

String

banktype=getbanktype(hashmap.get(PaperBillPoolVO.QUERY_ACCTNO));

//这一步可以不需要去理解,当不存在就可以了

//根据当前界面VO获取银行的信息类

createBankInfoClass(banktype,billfunc,PaperBillFbmOrderType.QUERYBILLPOOLLIMIT) ;

/**这一步是获取查询条件值组装成查询vo(自己新建一个VO【PaperBillPoolVO】,记得加*上必须字段pk_org和orgname,前者是PK查询使用,后者是显示名称,初始化字段类里*面也必须有),我这里是按照不同银行动态调用各个handler

*/

//组装发送指令VO

PaperBillPoolVO

poolvo=(PaperBillPoolVO)abstractBankInfo.getQueryBankHandlerClass(abstractBankInfo).chan geQueryPaperBillPoolVO(hashmap);

//查询条件值可能要先暂存,待返回数据集再把对应查询条件值设值回去,不然查不出数据//也就是查询条件是什么值,最终结果集对应的查询字段值也必须是什么值

//看需求,报表字段有的时候需要建两种,一种是查询,一种是显示结果,进行分开

//这一步是报表数据逻辑处理

//发送查询指令业务接口

PaperBillPoolVO[] paperBillPoolVOs = null;

paperBillPoolVOs=getiObmQueryPaperBillService().queryPaperBillPoolLimit(new PaperBillPoolVO[]{poolvo});

//获取报表查询条件之后经过一些业务处理后返回的最终结果数据

//接收发送指令返回数据,进行数据转换,返回报表界面

//把处理好的结果,可以是返回ArrayList或者对象数组PaperBillPoolVO[]

resultDataSet =getPjcAmtRstProcessData(paperBillPoolVOs); //结果转换成DataSet }else{//没有执行查询

MetaData metaData = QueryPaperPoolLimitService.getPJCAmtrMetaData();

resultDataSet.setMetaData(metaData);

}

return resultDataSet;

}

//下面就是把转换成报表显示数据DataSet格式,这里是固定的换个VO就能用

/**

* 票据池额度查询

* 银行返回的指令VO数据

*转换成报表显示数据DataSet

*@author 温燕荣WYR

*@date 2014-4-17

*@param paperBillPoolVOs

*@return

* @throws BusinessException

*/

public DataSet getPjcAmtRstProcessData(PaperBillPoolVO[] paperBillPoolVOs)throws BusinessException{

DataSet resultDataSet = new DataSet();

MetaData metaData = QueryPaperPoolLimitService.getPJCAmtrMetaData();

resultDataSet.setMetaData(metaData);

if (paperBillPoolVOs == null || paperBillPoolVOs.length== 0) {

return resultDataSet;

}

Field[] fields = metaData.getFields();

List reportList = new ArrayList();

for (PaperBillPoolVO vo : paperBillPoolVOs) {

if(vo==null){

continue;

}

Object[] rowData = new Object[fields.length];

for (int k = 0; k < fields.length; k++) {

String fldName = fields[k].getFldname();

rowData[k] = vo.getAttributeValue(fldName);

}

reportList.add(rowData);

}

resultDataSet.setDatas(reportList.toArray(new Object[0][fields.length]));

return resultDataSet;

}

//从这里到最后面的代码不用去理会了

/**

* @param iObmQueryPaperBillService 要设置的iObmQueryPaperBillService

*/

public void setiObmQueryPaperBillService(IObmQueryPaperBillService iObmQueryPaperBillService) {

this.iObmQueryPaperBillService = iObmQueryPaperBillService;

}

/**

* @return iObmQueryPaperBillService

*/

public IObmQueryPaperBillService getiObmQueryPaperBillService() {

if(iObmQueryPaperBillService==null){

iObmQueryPaperBillService=NCLocator.getInstance().lookup(IObmQueryPaperBillService. class);

}

return iObmQueryPaperBillService;

}

//根据银行账户子户PK获取银行代码,如:工商银行00015 icbc

public String getbanktype (String banktype) throws BusinessException{

String nbanktype=banktype;

if(nbanktype!=null){

if(nbanktype.indexOf(",")!=-1){

throw new BusinessException("[账号]不能多选!");

}

nbanktype=getPaperBillHandler().getNetbankinftpCodeByAccount(nbanktype);

return nbanktype;

}

return null;

}

}

三、语义模型-XX(预置、集团、全局)设置

1.新建一个语义模型文件,来到【语义模型设计器】界面,第一步“选择表”。(如果不会

说明你好高骛远);

注意:字段编码与字段表达式,不能修改!

2.报表字段,这里就全选,不用显示的自由报表不设置显示就行:

自由报表设计就不用说了,自己去琢磨。

四、制作查询模版

1.数据加工做语义模型跟语义脚本(直接写SQL)有点不一样:

数据加工查询模版查询条件字段直接写语义模型里面的字段编码,而语义脚本方式查询模版查询条件字段必须是填写语义模型里面的字段表达式,接下来的其他操作跟使用元数据做报表的步骤是一致的。

2019年NC数据加工做语义模型(DOC)

报表语义模型(数据加工:返回结果集方式) 数据加工方式:1.返回查询SQL ; 2.返回结果集DataSet;3.返回数据表。 实现方式基本一致,可以参照系统原有报表语义模型 一、新建报表查询入口类,初始化报表字段 1.数据加工查询业务处理接口的定义: package 票据信息查询/票据池额度查询接口 * * @author 温燕荣WYR * @date 2014-04-15 */ public interface IFbmQueryPaperBillService { /** * 票据信息查询 * @param context * @return * @throws BusinessException */ public DataSet queryPaperBillInfo(IContext context) throws Exception; /** * 票据池额度查询接口 * @param context * @return * @throws BusinessException */ public DataSet queryPaperBillPoolLimit(IContext context) throws Exception; } 2.数据加工入口类,初始化报表字段 package 票据池额度查询入口类 * * @author 温燕荣WYR * @date 2014-04-15 */ public class QueryPaperPoolLimitService {

private static final MetaData metaData; public QueryPaperPoolLimitService(){ super(); } /** * 获得结果集 * * @param context 报表界面查询传进来的参数(查询条件=值,系统一些默认参数等)* @return */ public static DataSet queryPJCAmt(IContext context)throws Exception { ookup DataSet resultDataSet = (context); setPrecision(resultDataSet); return resultDataSet; } etFields()) { if () == { (300); } } } /** * 获得票据池额度元数据(相当于代码写一个元数据) * * @return */ public static MetaData getPJCAmtrMetaData(){ return metaData; } } 二、数据加工业务处理 hangeQueryPaperBillPoolVO(hashmap);

语义模型红皮书

用友软件股份有限公司 商业分析平台语义模型红皮书 版本:V6.0.0.20120227

目录 一、前言 (3) 1.概念 (3) 2.定位 (3) 二、结构 (3) 1.应用模型 (3) 2.语义模型 (4) a) 定义形态 (4) b) 执行流程 (6) c) 数据形态 (6) 3.语义提供者 (7) a) 接口 (7) b) 扩展 (9) 4.函数 (13) a) 函数解析 (13) b) 函数扩展 (13) 5.参数 (15) a) 参数定义 (16) b) 参数引用 (16) c) 参数设置 (16) 6.宏变量 (18) 7.描述器 (19) 8.数据加工 (20) 9.物化策略 (23) 10.复合语义模型 (24) 11.语义上下文 (28) 三、语义模型的管理 (31) 1.对象管理 (31) 2.环境配置 (34) 四、功能扩展 (41) 1.扩展语义提供者 (41) 2.扩展业务函数 (42) 3.使用数据加工 (42) 4.自定义执行策略 (42) 五、附录 (43) 1.入门 (43) 2.语义模型API (48) 3.语义函数 (50) 4.其他函数 (50) 5.脚本引擎 (52) 6.针对查询引擎的改进 (52)

一、前言 1.概念 SMART,即Semantic Modeling for Analysis Report Toolkit, 分析报表语义建模工具。 2.定位 语义模型把面向技术的数据,组织成面向业务的数据,供业务人员查询分析使用 二、结构 1.应用模型

上图为语义模型应用结构图。语义模型通过语义提供者,可以将多个数据源的数据进行整合。 2. 语义模型 定义形态 下图展示了语义模型的内部结构, 语义模型主要由以下几部分构成: 1.1 元数据

用友NC语义模型红皮书-2011-07

用友软件股份有限公司 高级分析平台语义模型红皮书 版本:V6.0.0.20100924

目录 一、前言 (3) 1.概念 (3) 2.定位 (3) 二、结构 (3) 1.应用模型 (3) 2.语义模型 (4) a) 定义形态 (4) b) 执行流程 (6) c) 数据形态 (7) 3.语义提供者 (7) a) 接口 (7) b) 扩展 (10) 4.函数 (14) a) 函数解析 (14) b) 函数扩展 (14) 5.参数 (17) a) 参数定义 (17) b) 参数引用 (17) c) 参数设置 (18) 6.宏变量 (19) 7.描述器 (20) 8.数据加工 (22) 9.物化策略 (24) 10.复合语义模型 (25) 11.语义上下文 (29) 三、语义模型的管理 (32) 1.对象管理 (32) 2.环境配置 (35) 四、功能扩展 (36) 1.扩展语义提供者 (37) 2.扩展业务函数 (37) 3.使用数据加工 (37) 4.自定义执行策略 (37) 五、附录 (38) 1.入门 (38) 2.语义模型API (43) 3.语义函数 (45) 4.其他函数 (45) 5.脚本引擎 (47) 6.针对查询引擎的改进 (47)

一、前言 1.概念 SMART,即Semantic Modeling for Analysis Report Toolkit, 分析报表语义建模工具。 2.定位 二、结构 1.应用模型

上图为语义模型应用结构图。语义模型通过语义提供者,可以将多个数据源的数据进行整合。 2.语义模型 a)定义形态 下图展示了语义模型的内部结构,

相关主题
相关文档
最新文档