目錄
- 一、What is DI ?
- 二、步驟
-
- 1.配置連接配接資訊靜态檔案
- 2.引入讀取配置檔案工具類
- 3.引入連接配接工具類
- 4.建立model、Service、ServiceImpl、controller層
- 三、附.SAP DI API下載下傳連結
一、What is DI ?
資料接口API (DI API)是一組開發工具,它使SAP業務合作夥伴能夠增強和擴充SAP Business One,以及将外部解決方案與SAP Business One應用程式內建。
二、步驟
1.配置連接配接資訊靜态檔案
application-config.properties:
#資料庫IP位址
appconfig.server = ***************
#資料庫名稱
appconfig.companyDB = ********
#資料庫使用者名
appconfig.dbUsername = **
#資料庫密碼
appconfig.dbPassword = ****
#Bo使用者名
appconfig.userName = *******
#Bo密碼
appconfig.password = ****
#sldServerc
appconfig.sldServer = ***************:40000
#licenseServer
appconfig.licenseServer = ***************:30000
#資料庫類型
appConfig.dbServerType = BoDataServerTypes_dst_MSSQL2012
2.引入讀取配置檔案工具類
AppConfig.java:
package com.avatech.dahupt.demo.model.applicationConfig;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix="appconfig")
@PropertySource(value= {"classpath:application-config.properties"}, encoding = "utf-8")
public class AppConfig {
private String server;
private String companyDB;
private String userName;
private String password;
private String dbUsername;
private String dbPassword;
private String sldServer;
private String licenseServer;
private String dbServerType;
public String getServer() {
return server;
}
public void setServer(String server) {
this.server = server;
}
public String getCompanyDB() {
return companyDB;
}
public void setCompanyDB(String companyDB) {
this.companyDB = companyDB;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDbUsername() {
return dbUsername;
}
public void setDbUsername(String dbUsername) {
this.dbUsername = dbUsername;
}
public String getDbPassword() {
return dbPassword;
}
public void setDbPassword(String dbPassword) {
this.dbPassword = dbPassword;
}
public String getSldServer() {
return sldServer;
}
public void setSldServer(String sldServer) {
this.sldServer = sldServer;
}
public String getLicenseServer() {
return licenseServer;
}
public void setLicenseServer(String licenseServer) {
this.licenseServer = licenseServer;
}
public String getDbServerType() {
return dbServerType;
}
public void setDbServerType(String dbServerType) {
this.dbServerType = dbServerType;
}
}
3.引入連接配接工具類
import com.avatech.dahupt.demo.model.applicationConfig.AppConfig;
import com.avatech.edi.common.exception.DBException;
import com.sap.smb.sbo.api.ICompany;
import com.sap.smb.sbo.api.SBOCOMConstants;
import com.sap.smb.sbo.api.SBOCOMUtil;
import com.sap.smb.sbo.api.SBOErrorMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Field;
public class BoConnect {
private volatile static ICompany company = null;
private volatile static BoConnect boConnect = null;
private static final Logger LOG = LoggerFactory.getLogger(BoConnect.class);
private String server;
private String companyDB;
private String userName;
private String password;
private String licenseServer;
private String sldServer;
private String dbUsername;
private String dbPassword;
private String dbServerType;
private BoConnect(AppConfig appConfig){
this.server = appConfig.getServer();
this.companyDB = appConfig.getCompanyDB();
this.userName = appConfig.getUserName();
this.password = appConfig.getPassword();
this.licenseServer = appConfig.getLicenseServer();
this.sldServer = appConfig.getSldServer();
this.dbUsername = appConfig.getDbUsername();
this.dbPassword = appConfig.getDbPassword();
this.dbServerType = appConfig.getDbServerType();
}
public final static BoConnect getInstance(AppConfig appConfig){
synchronized (BoConnect.class) {
if (null == boConnect ) {
boConnect = new BoConnect(appConfig);
}
}
return boConnect;
}
public ICompany getCompany(){
try{
if(company == null || !company.isConnected()){
company = connect();
}
}catch (Exception ex){
throw new DBException("-1",ex.getMessage());
}
return company;
}
private ICompany connect(){
if(company == null)
company = SBOCOMUtil.newCompany();
company.setServer(this.server);
company.setCompanyDB(this.companyDB);
company.setUserName(this.userName);
company.setPassword(this.password);
try{
Class<?> clz = SBOCOMConstants.class;
Field[] fields = clz.getDeclaredFields();
for (int j = 0; j < fields.length; j++) {
if(fields[j].getName().equals(this.dbServerType)){
company.setDbServerType(Integer.parseInt(fields[j].get(SBOCOMConstants.class).toString()));
}
}
}catch (Exception ex){
company.setDbServerType(SBOCOMConstants.BoDataServerTypes_dst_MSSQL2008);
}
company.setUseTrusted(false);
company.setLanguage(15);
company.setDbUserName(this.dbUsername);
company.setDbPassword(this.dbPassword);
company.setSLDServer(this.sldServer);
company.setLicenseServer(this.licenseServer);
int connectionResult = company.connect();
if (connectionResult != 0) {
SBOErrorMessage errMsg = company.getLastError();
throw new DBException("-1","Cannot connect to server: " + this.companyDB + errMsg.getErrorCode()+ " "+ errMsg.getErrorMessage());
}
LOG.info("連接配接成功>>>"+company.getCompanyDB());
return company;
}
}
4.建立model、Service、ServiceImpl、controller層
model:
//銷售訂單
public class Order {
private String cardCode;
private Date docDueDate;
private String comment;
private List<OrderLines> orderLines;
public String getCardCode() {
return cardCode;
}
public void setCardCode(String cardCode) {
this.cardCode = cardCode;
}
public Date getDocDueDate() {
return docDueDate;
}
public void setDocDueDate(Date docDueDate) {
this.docDueDate = docDueDate;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public List<OrderLines> getOrderLines() {
return orderLines;
}
public void setOrderLines(List<OrderLines> orderLines) {
this.orderLines = orderLines;
}
}
//銷售訂單-行
public class OrderLines {
private String itemCode;
private Double quantity;
public String getItemCode() {
return itemCode;
}
public void setItemCode(String itemCode) {
this.itemCode = itemCode;
}
public Double getQuantity() {
return quantity;
}
public void setQuantity(Double quantity) {
this.quantity = quantity;
}
}
Service.java:
//AppConfig 是讀取配置檔案工具類 Order 是實體類對象
void AddSAP(AppConfig appConfig, Order order);
ServiceImpl.java:
@Override
public void AddSAP(AppConfig appConfig, Order order){
//連接配接對象
BoConnect boConnect = null;
//公司對象
ICompany company = null;
//要添加單據的對象對象可在幫助文檔中進行查找(SDK搜尋BoObjectTypes Enumeration)
IDocuments orders = null;
try{
boConnect = BoConnect.getInstance(appConfig);
company = boConnect.getCompany();
orders = SBOCOMUtil.newDocuments(company, SBOCOMConstants.BoObjectTypes_Document_oOrders);
orders.setCardCode(order.getCardCode());//客戶、供應商代碼
orders.setDocDueDate(order.getDocDueDate());//交貨日期
orders.setComments(order.getComment());//備注
int count = 0;
for (OrderLines ol:order.getOrderLines()) {
if(count != 0){
orders.getLines().add();
}
orders.getLines().setItemCode(ol.getItemCode());
orders.getLines().setQuantity(ol.getQuantity());
count++;
}
//新增操作
if(orders.add() == 0){
System.out.println("生成銷售訂單成功,單據編号:" + company.getNewObjectKey());
}else {
System.out.println("生成銷售訂單失敗,錯誤代碼:" + company.getLastErrorCode() + ",錯誤描述:"+company.getLastErrorDescription());
}
}catch (Exception ex){
throw new DBException("-1",ex.getMessage());
}
}
Controller.java:
@RestController
@RequestMapping("/v1/demo/*")
public class Controller{
@Autowired
private Service service;
@Autowired
private AppConfig appConfig;
@GetMapping("OrderAddSap")
public @ResponseBody void AddSAP(){
System.out.println("開始執行......");
try {
//模拟插入SAP資料
Order order = null;
order.setCardCode("A101");
Date date = new Date();
order.setDocDueDate(date);
order.setComment("bean add");
List<OrderLines> orderLinesList = new ArrayList<>();
OrderLines orderLines =new OrderLines();
orderLines.setItemCode("BD00444");
orderLines.setQuantity(1.0);
orderLinesList.add(orderLines);
orderLines =new OrderLines();
orderLines.setItemCode("BD00443");
orderLines.setQuantity(2.0);
orderLinesList.add(orderLines);
order.setOrderLines(orderLinesList);
//調用添加SAP Service接口
service.AddSAP(appConfig,order);
}catch (Exception ex) {
throw new DBException("5001", ex.getMessage());
}
}
}
三、附.SAP DI API下載下傳連結
https://download.csdn.net/download/qq_35844400/18800546