public class SapFunction {
//JCo 返回参数类型定义
public static final Integer Type_String = 1;
public static final Integer Type_Int = 2;
public static final Integer Type_Long = 3;
public static final Integer Type_Double = 4;
public static final Integer Type_Date = 5;
public static final Integer Type_Float = 6;
/**
* @Description: 返回值为List,有入参的情况
* @param functionName 调用的SAP方法名称
* @param paramMap SAP方法所需要的参数MAP,KEY=传入参数名称,VALUE=传入参数值;
* @param keyTypeMap SAP方法返回的参数类型,KEY=返回参数名称,VALUE=返回参数类型;
* @return List<?> SAP方法返回的List,?为指定类型;
* @throws
*/
public static List<?> getList(String functionName,String tableName, Map<String,Integer> keyTypeMap, Class<?> beanClazz){
JCoDestination jCoDestination = null;
JCoFunction function = null;
List<Object> list = null;
try {
jCoDestination = SapFactory.getConnection();
function = jCoDestination.getRepository().getFunction(functionName);
function.execute(jCoDestination);
JCoTable tb = function.getTableParameterList().getTable(tableName);
for (int i = 0; i < tb.getNumRows(); i++) {
tb.setRow(i);
Map<String,Object> map = new HashMap<String,Object>();
for (Map.Entry<String, Integer> entry : keyTypeMap.entrySet()) {
switch(entry.getValue().intValue()){
case 1:
map.put(entry.getKey(), tb.getString(entry.getKey()));
break;
case 2:
map.put(entry.getKey(), tb.getInt(entry.getKey()));
break;
case 3:
map.put(entry.getKey(), tb.getLong(entry.getKey()));
break;
case 4:
map.put(entry.getKey(), tb.getDouble(entry.getKey()));
break;
case 5:
map.put(entry.getKey(), tb.getDate(entry.getKey()));
break;
case 6:
map.put(entry.getKey(), tb.getFloat(entry.getKey()));
break;
}
}
if(list == null){
list = new ArrayList<Object>();
}
Object obj = CommonUtils.getBean(map, beanClazz);
list.add(obj);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* @Description: 返回值为List,有入参的情况
* @param functionName 调用的SAP方法名称
* @param paramMap SAP方法所需要的参数MAP,KEY=传入参数名称,VALUE=传入参数值;
* @param keyTypeMap SAP方法返回的参数类型,KEY=返回参数名称,VALUE=返回参数类型;
* @return List<?> SAP方法返回的List,?为指定类型;
* @throws
*/
public static List<?> getList(String functionName, Map<String,Object> paramMap,String tableName, Map<String,Integer> keyTypeMap, Class<?> beanClazz){
JCoDestination jCoDestination = null;
JCoFunction function = null;
List<Object> list = null;
try {
jCoDestination = SapFactory.getConnection();
function = jCoDestination.getRepository().getFunction(functionName);
JCoParameterList parameterList = function.getImportParameterList();
for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
parameterList.setValue(entry.getKey(), entry.getValue());
}
function.execute(jCoDestination);
JCoTable tb = function.getTableParameterList().getTable(tableName);
for (int i = 0; i < tb.getNumRows(); i++) {
tb.setRow(i);
Map<String,Object> map = new HashMap<String,Object>();
for (Map.Entry<String, Integer> entry : keyTypeMap.entrySet()) {
switch(entry.getValue().intValue()){
case 1:
map.put(entry.getKey(), tb.getString(entry.getKey()));
break;
case 2:
map.put(entry.getKey(), tb.getInt(entry.getKey()));
break;
case 3:
map.put(entry.getKey(), tb.getLong(entry.getKey()));
break;
case 4:
map.put(entry.getKey(), tb.getDouble(entry.getKey()));
break;
case 5:
map.put(entry.getKey(), tb.getDate(entry.getKey()));
break;
case 6:
map.put(entry.getKey(), tb.getFloat(entry.getKey()));
break;
}
}
if(list == null){
list = new ArrayList<Object>();
}
Object obj = CommonUtils.getBean(map, beanClazz);
list.add(obj);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* @Description: 返回值为List,有入参的情况
* @param functionName 调用的SAP方法名称
* @param paramMap SAP方法所需要的参数MAP,KEY=传入参数名称,VALUE=传入参数值;
* @param keyTypeMap SAP方法返回的参数类型,KEY=返回参数名称,VALUE=返回参数类型;
* @return Map<String,Object> SAP方法返回的参数值,KEY=返回参数名称,VALUE=返回参数值;
* @throws
*/
public static List<Map<String,Object>> getList(String functionName, Map<String,Object> paramMap,String tableName, Map<String,Integer> keyTypeMap){
JCoDestination jCoDestination = null;
JCoFunction function = null;
List<Map<String,Object>> list = null;
try {
jCoDestination = SapFactory.getConnection();
function = jCoDestination.getRepository().getFunction(functionName);
JCoParameterList parameterList = function.getImportParameterList();
for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
parameterList.setValue(entry.getKey(), entry.getValue());
}
function.execute(jCoDestination);
JCoTable tb = function.getTableParameterList().getTable(tableName);
for (int i = 0; i < tb.getNumRows(); i++) {
tb.setRow(i);
Map<String,Object> map = new HashMap<String,Object>();
for (Map.Entry<String, Integer> entry : keyTypeMap.entrySet()) {
switch(entry.getValue().intValue()){
case 1:
map.put(entry.getKey(), tb.getString(entry.getKey()));
break;
case 2:
map.put(entry.getKey(), tb.getInt(entry.getKey()));
break;
case 3:
map.put(entry.getKey(), tb.getLong(entry.getKey()));
break;
case 4:
map.put(entry.getKey(), tb.getDouble(entry.getKey()));
break;
case 5:
map.put(entry.getKey(), tb.getDate(entry.getKey()));
break;
case 6:
map.put(entry.getKey(), tb.getFloat(entry.getKey()));
break;
}
}
if(list == null){
list = new ArrayList<Map<String,Object>>();
}
list.add(map);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* @Description: 返回值为List,没有入参的情况
* @param functionName 调用的SAP方法名称
* @param keyTypeMap SAP方法返回的参数类型,KEY=返回参数名称,VALUE=返回参数类型;
* @return Map<String,Object> SAP方法返回的参数值,KEY=返回参数名称,VALUE=返回参数值;
* @throws
*/
public static List<Map<String,Object>> getList(String functionName,String tableName, Map<String,Integer> keyTypeMap){
JCoDestination jCoDestination = null;
JCoFunction function = null;
List<Map<String,Object>> list = null;
try {
jCoDestination = SapFactory.getConnection();
function = jCoDestination.getRepository().getFunction(functionName);
function.execute(jCoDestination);
JCoTable tb = function.getTableParameterList().getTable(tableName);
for (int i = 0; i < tb.getNumRows(); i++) {
tb.setRow(i);
Map<String,Object> map = new HashMap<String,Object>();
for (Map.Entry<String, Integer> entry : keyTypeMap.entrySet()) {
switch(entry.getValue().intValue()){
case 1:
map.put(entry.getKey(), tb.getString(entry.getKey()));
break;
case 2:
map.put(entry.getKey(), tb.getInt(entry.getKey()));
break;
case 3:
map.put(entry.getKey(), tb.getLong(entry.getKey()));
break;
case 4:
map.put(entry.getKey(), tb.getDouble(entry.getKey()));
break;
case 5:
map.put(entry.getKey(), tb.getDate(entry.getKey()));
break;
case 6:
map.put(entry.getKey(), tb.getFloat(entry.getKey()));
break;
}
}
if(list == null){
list = new ArrayList<Map<String,Object>>();
}
list.add(map);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* @Description: 返回值为MAP,但有入参的情况
* @param functionName 调用的SAP方法名称
* @param paramMap SAP方法所需要的参数MAP,KEY=传入参数名称,VALUE=传入参数值;
* @param keyTypeMap SAP方法返回的参数类型,KEY=返回参数名称,VALUE=返回参数类型;
* @return Map<String,Object> SAP方法返回的参数值,KEY=返回参数名称,VALUE=返回参数值;
* @throws
*/
public static Map<String,Object> getMap(String functionName, Map<String,Object> paramMap, Map<String,Integer> keyTypeMap){
JCoDestination jCoDestination = null;
JCoFunction function = null;
Map<String,Object> map = null;
try {
jCoDestination = SapFactory.getConnection();
function = jCoDestination.getRepository().getFunction(functionName);
JCoParameterList parameterList = function.getImportParameterList();
for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
parameterList.setValue(entry.getKey(), entry.getValue());
}
function.execute(jCoDestination);
JCoParameterList resultList = function.getExportParameterList();
for (Map.Entry<String, Integer> entry : keyTypeMap.entrySet()) {
if(map == null){
map = new HashMap<String,Object>();
}
switch(entry.getValue().intValue()){
case 1:
map.put(entry.getKey(), resultList.getString(entry.getKey()));
break;
case 2:
map.put(entry.getKey(), resultList.getInt(entry.getKey()));
break;
case 3:
map.put(entry.getKey(), resultList.getLong(entry.getKey()));
break;
case 4:
map.put(entry.getKey(), resultList.getDouble(entry.getKey()));
break;
case 5:
map.put(entry.getKey(), resultList.getDate(entry.getKey()));
break;
case 6:
map.put(entry.getKey(), resultList.getFloat(entry.getKey()));
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
/**
* @Description: 返回值为MAP,但没有入参的情况
* @param functionName 调用的SAP方法名称
* @param keyTypeMap SAP方法返回的参数类型,KEY=返回参数名称,VALUE=返回参数类型;
* @return Map<String,Object> SAP方法返回的参数值,KEY=返回参数名称,VALUE=返回参数值;
* @throws
*/
public static Map<String,Object> getMap(String functionName, Map<String,Integer> keyTypeMap){
JCoDestination jCoDestination = null;
JCoFunction function = null;
Map<String,Object> map = null;
try {
jCoDestination = SapFactory.getConnection();
function = jCoDestination.getRepository().getFunction(functionName);
function.execute(jCoDestination);
JCoParameterList resultList = function.getExportParameterList();
for (Map.Entry<String, Integer> entry : keyTypeMap.entrySet()) {
if(map == null){
map = new HashMap<String,Object>();
}
switch(entry.getValue().intValue()){
case 1:
map.put(entry.getKey(), resultList.getString(entry.getKey()));
break;
case 2:
map.put(entry.getKey(), resultList.getInt(entry.getKey()));
break;
case 3:
map.put(entry.getKey(), resultList.getLong(entry.getKey()));
break;
case 4:
map.put(entry.getKey(), resultList.getDouble(entry.getKey()));
break;
case 5:
map.put(entry.getKey(), resultList.getDate(entry.getKey()));
break;
case 6:
map.put(entry.getKey(), resultList.getFloat(entry.getKey()));
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
/**
* @Description: 返回值为String,但没有入参的情况
* @param functionName 调用的SAP方法名称
* @param paramMap SAP方法所需要的参数MAP,KEY=传入参数名称,VALUE=传入参数值;
* @param valueKey SAP方法返回的参数名称;
* @return String SAP方法返回的参数值;
* @throws
*/
public static String getString(String functionName, Map<String,Object> paramMap, String valueKey){
JCoDestination jCoDestination = null;
JCoFunction function = null;
try {
jCoDestination = SapFactory.getConnection();
function = jCoDestination.getRepository().getFunction(functionName);
JCoParameterList parameterList = function.getImportParameterList();
for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
parameterList.setValue(entry.getKey(), entry.getValue());
}
function.execute(jCoDestination);
JCoParameterList resultList = function.getExportParameterList();
return resultList.getString(valueKey);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* @Description: 返回值为String,但没有入参的情况
* @param functionName 调用的SAP方法名称
* @param valueKey SAP方法返回的参数名称;
* @return String SAP方法返回的参数值;
* @throws
*/
public static String getString(String functionName, String valueKey){
JCoDestination jCoDestination = null;
JCoFunction function = null;
try {
jCoDestination = SapFactory.getConnection();
function = jCoDestination.getRepository().getFunction(functionName);
function.execute(jCoDestination);
JCoParameterList resultList = function.getExportParameterList();
return resultList.getString(valueKey);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
public class SapFactory {
private static SapFactory instance = null;
private static String abap_as_pooled = "ABAP_AS_WITH_POOL";
private SapFactory(){
}
public static JCoDestination getConnection(){
if(instance == null){
instance = new SapFactory();
instance.init();
}
return instance.connection();
}
private void init(){
Properties connectProperties = new Properties();
abap_as_pooled = AppContext.getSystemProperty("formFlowListener.abap_as_pooled");
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, AppContext.getSystemProperty("formFlowListener.jco_ashost")); //连接IP
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, AppContext.getSystemProperty("formFlowListener.jco_sysnr")); //系统编号
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, AppContext.getSystemProperty("formFlowListener.jco_client")); //SAP集团
connectProperties.setProperty(DestinationDataProvider.JCO_USER, AppContext.getSystemProperty("formFlowListener.jco_user")); //SAP用户名
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, AppContext.getSystemProperty("formFlowListener.jco_passwd")); //密码
connectProperties.setProperty(DestinationDataProvider.JCO_LANG, AppContext.getSystemProperty("formFlowListener.jco_lang")); //登录语言
connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, AppContext.getSystemProperty("formFlowListener.jco_pool_capacity")); //最大连接数
connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, AppContext.getSystemProperty("formFlowListener.jco_peak_limit")); //最大连接线程
createDataFile(abap_as_pooled, "jcoDestination", connectProperties);
}
private void createDataFile(String name, String suffix, Properties properties){
File cfg = new File(name+"."+suffix);
if(cfg.exists()){
cfg.deleteOnExit();
}
try{
FileOutputStream fos = new FileOutputStream(cfg, false);
properties.store(fos, "for tests only !");
fos.close();
}catch (Exception e){
e.printStackTrace();
throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
}
}
private JCoDestination connection(){
JCoDestination destination =null;
try {
destination = JCoDestinationManager.getDestination(abap_as_pooled);
} catch (JCoException e) {
e.printStackTrace();
}
return destination;
}
}
需要引入的 jar与dll文件
本文介绍了一种封装SAP函数调用的方法,通过Java实现,支持不同类型的参数输入及输出,包括字符串、整型、长整型、双精度浮点型、日期和单精度浮点型等。
492

被折叠的 条评论
为什么被折叠?



