一转眼从.NET转JAVA已经大半个月了,刚进公司又被推到了项目一线现场,对基础并不怎么扎实的我来说也是有点惶恐,所幸有热心的小姐姐们愿意带我这个小白,在此记录一些二开常用的接口和方法以便以后查用。
- 常用接口
1. 任务插件执行接口
多用于执行后台循环任务,该接口实现后需要在前台进行插件注册。
public interface IBackgroundWorkPlugin {
/**
* 任务插件执行体
* @param bgwc 执行环境
* @return PreAlertObject
* 该返回值不允许为null!
* 若后台任务插件成功执行但不打算发送消息,
* 那么请将PreAlertObject的returnType设为PreAlertReturnType.RETURNNOTHING
* @throws BusinessException
*/
PreAlertObject executeTask(BgWorkingContext bgwc) throws BusinessException;
}
2. 事件监听器
用于对各个流程之间的事件控制,该接口实现后需要在前台进行插件注册。
public interface IBusinessListener {
/**
* 响应事件的动作
* @param event
* @throws BusinessException
*/
public void doAction(IBusinessEvent event) throws BusinessException;
}
实现类:
public class Xxxx implements IBusinessListener {
@Override
public void doAction(IBusinessEvent event) throws BusinessException {
// 获取订单聚合VO
OrderVO[] dataVOs=null;
if ((event instanceof BusinessEvent))
{
BusinessEvent busievent = (BusinessEvent)event;
dataVOs = (OrderVO[])busievent.getObject();
}
if ((dataVOs == null) || (dataVOs.length == 0)) {
return;
}
}
}
- 常用父类
1.SuperVO
public class XxxxVO extends SuperVO{
/**
* 此处为VO的属性
*/
/**
* 此处为Get,Set方法
*/
@Override
public String getPKFieldName() {
return "pk_xxxx";//获取表主键
}
@Override
public String getParentPKFieldName() {
return null;//获取父表主键
}
@Override
public String getTableName() {
return "xxxx";//获取表名
}
}
- 常用类和方法
1.BaseDAO
内部数据库访问帮助类,封装了常用的持久层访问操作
调用方式和常用方法:
public class Xxxxxxxx implements Ixxxx{
static BaseDAO baseDao = null;
public static BaseDAO getBaseDao(){
if(baseDao == null){
baseDao = new BaseDAO();
}
return baseDao;
}
public void Invoke(){
/**
* 根据指定SQL 执行无参数的数据库更新操作
*/
getBaseDao().executeUpdate(String sqlStr);
/**
* 向数据表中插入VO数组
*/
getBaseDao().insertVOArray(SuperVO[]);
/**
* 查询单一字段
*/
Object result = this.getBaseDao().executeQuery(sql, new ColumnProcessor());
/**
* 查询两个字段
*/
map = (Map<String, String>) this.getBaseDao().executeQuery(sql, new MapProcessor());
}
/**
* 查询多行
*/
list = (List<String>)this.getBaseDao().executeQuery(sql, new ColumnListProcessor());
}
2.JDBC封装
用于访问外部数据库进行数据交换
Properties p ;
private Connection conn;
private PreparedStatement ps;
public Connection getsqlcon() {
try {
p = new Properties();
InputStream in = this.getClass().getResourceAsStream("xxx.properties");
p.load(in);
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://"+p.getProperty("IP")+":"+p.getProperty("PORT")+";DatabaseName="+p.getProperty("DatabaseName")+" ;";
conn = DriverManager.getConnection(url, p.getProperty("User"), p.getProperty("Passwod"));
} catch (Exception e) {
e.printStackTrace();
Logger.error(e.getMessage(), e);
System.out.println("数据库连接失败");
}
return conn;
}
public void closeTest(Connection conn,PreparedStatement ps) {
try {
if (ps != null) {
ps.close();
ps = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
xxx.properties:
IP=xxx.xxx.xxx.xxx
PORT=xxxx
DatabaseName=xx_xxxx
User=****
Passwod=******
3.NCLocator
接口访问类,NC对Java 远程调用RMI的封装,nc调用类不能直接new,一般用于获取自定义接口的实例
NCLocator.getInstance().lookup(Xxx.class);
4.BillQuery
单据查询类,根据单据主键加载单据VO
下例为查询订单VO:
private AbstractBill[] queryVOByPk(String[] pks) {
if(new BillQuery<OrderVO>(OrderVO.class).query(pks)!=null
&& new BillQuery<OrderVO>(OrderVO.class).query(pks).length>0){
return new BillQuery<OrderVO>(OrderVO.class).query(pks);
}else{
return new BillQuery<BillVO>(BillVO.class).query(pks);
}
}
5.IUAPQueryBS
数据库查询帮助类
常用方法:
IUAPQueryBS iUAPQueryBS = (IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());
List<String> list = (List<String>)iUAPQueryBS.executeQuery(sql, new ColumnListProcessor());//返回结果集
String result = (String)iUAPQueryBS.executeQuery(sql, new ColumnProcessor());//返回单一结果
6.PfUtilTools
流程平台后台工具类
单据转换方法,通过前台先查询单据转换规则,明确两种单据VO之间的映射关系,再根据具体需求补全单据剩余字段属性:
/**
* 进行VO交换 <li>不支持分单
* @param srcTranstype 源交易类型PK
* @param destTranstype 目的交易类型PK
* @param sourceBillVO 源单据聚合VO
* @return 目的单据聚合VO
* @throws BusinessException
*/
public static AggregatedValueObject runChangeData(String srcTranstype,
String destTranstype, AggregatedValueObject sourceBillVO)
throws BusinessException {
return getExchangeService().runChangeData(srcTranstype, destTranstype,
sourceBillVO, null);
}
例:采购单据---->采购出库的VO转化
PurchaseInVO vo = (PurchaseInVO) PfUtilTools.runChangeData("21", "45", orderVO);
7.IplatFormEntry
流程平台进行的单据动作处理的入口类
/**
* @param actionName 动作编码,比如“SAVE”、“APPROVE”
* @param billType 单据类型PK
* @param currentDate 当前日期
* @param worknoteVO 工作项VO
* @param billvo 单据聚合VO
* @param userObj 用户对象
* @param eParam 环境参数
* @return 动作处理返回值
* @throws BusinessException
*/
public Object processAction(String actionName, String billType, WorkflownoteVO worknoteVO,
AggregatedValueObject billvo, Object userObj, HashMap eParam) throws BusinessException;
例:新增采购入库单据
PurchaseInVO vo;
HashMap map = new HashMap();
map.put("notechecked", "notechecked");
Object aggvo = NCLocator.getInstance().lookup(IplatFormEntry.class).processAction("WRITE", vo.getParentVO().getVtrantypecode(), null, vo, null, map);
8.I + { 单据 } + Maintain
单据维护接口,一般情况下封装了签字,退签,增删改差等常用单据接口,如果没有请调用接口7实现
例 ISaleOutMaintain:
public interface ISaleOutMaintain {
/**
* 销售出库单新增
*/
public SaleOutVO[] insert(SaleOutVO[] billVOs) throws BusinessException;
/**
* 销售出库单保存
*/
public SaleOutVO[] update(SaleOutVO[] billVOs,SaleOutVO[] originBillVOs) throws BusinessException;
/**
* 销售出库单删除
*/
public void delete(SaleOutVO[] billVOs) throws BusinessException;
/**
* 销售出库单签字
*/
public SaleOutVO[] sign(SaleOutVO[] billVOs) throws BusinessException;
/**
* 销售出库取消签字
*/
public SaleOutVO[] cancelSign(SaleOutVO[] billVOs) throws BusinessException;
}