使用Java调用SAP函数

本人Java菜鸟一枚,很多地方写的不好,请见谅!

这次做的是在JavaWeb端显示出DATE_COMPUTE_DAY(函数作用:传日期,获取星期几。例如输入20160809 Result:2)函数的作用。

首先我们先看一下DATE_COMPUTE_DAY函数的参数:

在这个图片中 我们可以看出DATE_COMPUTE_DAY函数的导入参数是DATE 导出参数是DATE
这里写图片描述
这里写图片描述
在SAP中,想调用函数就必须设置函数属行为:远程启动的模块。如下图:
这里写图片描述
OK。SAP中我们的配置就到这里

Java连接SAP会需要用到JCO。大家可以去下载一下。然后配置JCO。

好了 现在上Java代码

import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;
import com.sap.conn.jco.AbapException;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.ext.DestinationDataProvider;

public class SAPJco {
//定义全局常量
static private final String DESTINATION_NAME = "ABAP_AS_WITH_POOL";

//初始化
public static void initDestinationProperty() {
    Properties connectProperties = new Properties();
    connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "xxx");//IP地址
    connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "xx");//系统编号
    connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "xx");//集团号
    connectProperties.setProperty(DestinationDataProvider.JCO_USER, "xxx");//用户名
    connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "xxxx");//密码
    connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "ZH");//国家:中国

    createDestinationDataFile(DESTINATION_NAME, connectProperties);//创建文件

    connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "1");
}

//连接SAP
private static void createDestinationDataFile(String destinationName, Properties connectProperties) {
    File destCfg = new File(destinationName + ".jcoDestination");
    try {
        FileOutputStream fos = new FileOutputStream(destCfg, false);
        connectProperties.store(fos, "测试Java和SAP的连接!");
        fos.close();
        System.out.println("Java客户端和SAP服务器通信成功!");
    } catch (Exception e) {
        throw new RuntimeException("SAP和Java无法正常通信,请检查!", e);
    }
}

//调用函数
public static char consumeABAPFM(String datum) throws JCoException {
        JCoDestination destination = JCoDestinationManager.getDestination(DESTINATION_NAME);
        //函数名称--输入日期可以算出星期几  比如20160801  输出1
        JCoFunction function = destination.getRepository().getFunction("DATE_COMPUTE_DAY");
        if (function == null)
            throw new RuntimeException("SAP中不存在您调用的函数,请确认!");
        try {
            function.getImportParameterList().setValue("DATE", datum);
            function.execute(destination);
        } catch (AbapException e) {
            System.out.println(e.toString());
        }
        char exportChar = function.getExportParameterList().getChar("DAY");
        return exportChar;//结果
}

}

现在我们可以正常连接到SAP 并且可以正常的调用Fucntion
我们写一个简单 的Servlet来实现

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.bb.util.SAPJco;
import com.sap.conn.jco.AbapException;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.ext.DestinationDataProvider;

public class SAPServlet extends HttpServlet {

SAPJco jco = new SAPJco();

public SAPServlet() {
    jco.initDestinationProperty();//连接SAP
}

public void destroy() {
    super.destroy(); 
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");//格式
        char dayone = 0;//计算结果
        try {
            String day = request.getParameter("day");//获取jsp页面输入的值
            dayone = jco.consumeABAPFM(day);//输入的固定值
        } catch (JCoException e) {
            e.printStackTrace();
        }
        request.setAttribute("dayone",dayone);//传值到jsp
        request.getRequestDispatcher("index.jsp").forward(request,response);
}
public void init() throws ServletException {
}

}
好了 再来看看jsp上的代码
< form action=”SAPServlet” method=”post”>
< h3>请输入日期(比如20160801):< br/>
< input type = “text” id = “day” name = “day”>
< input type=”submit” value=”查询”>
< /form>
今天是:星期 < input id = “dayone” name=”dayone” value=”${dayone}”/>

猜你喜欢

转载自blog.csdn.net/qq_31896043/article/details/52160893