本人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}”/>