Как подключиться к системе SAP с помощью sapjco3 и Eclipse?

Мне нужно подключиться к SAP-системам с помощью стандартных вызовов BAPI. Я уже установил JCo (sapjco3) и добавил .jar в путь сборки в Eclipse.

Но из-за того, что я новичок в программировании сети/сервера, я понятия не имею, как настроить соединение между Eclipse и системами SAP... Может ли кто-нибудь предложить базовое решение или некоторые идеи для этого?

Спасибо и привет!


person Jan Konrad    schedule 02.09.2015    source источник
comment
Какая часть вводного руководства, предоставленного SAP, действительно вызвала проблему — и какая именно проблема?   -  person vwegert    schedule 03.09.2015
comment
Какое именно вводное руководство от SAP?   -  person Ewoks    schedule 05.10.2018


Ответы (4)


Я решил вопрос самостоятельно после того, как нашел хорошую документацию с примерами по этой теме на домашней странице SAP. Сначала вам нужно определить назначение, в основном настроив свой хост и всю другую необходимую информацию для сетевого подключения. Вы можете найти его здесь: http://help.sap.com/saphelp_nwes72/helpdata/de/48/5fb9f9b523501ee10000000a421937/content.htm

Затем вы можете проверить свое соединение, создав метод, который получает атрибуты сервера, к которому вы подключаетесь. Код можно найти здесь: http://help.sap.com/saphelp_nwes72/helpdata/de/48/840186ab5a2722e10000000a42189d/content.htm?frameset=/de/48/874bb4fb0e35e1e10000000a42189c/frameset.htm¤t_toc=/де/b4/3f9e64bff38c4f9a19635f57eb4248/plain.htm&node_id=498

На сайте представлены хорошие примеры работы с системой SAP на языке Java.

person Jan Konrad    schedule 04.09.2015
comment
В этих ссылках указано, что предоставленный пример кода сохраняет свойства подключения в файловой системе и не рекомендуется для производственной системы. Они не указывают, как это сделать правильно. Ни капельки полезного. - person Phil; 13.10.2016
comment
@MertSerimer Хотя текст может быть на немецком языке, код — нет, это не причина для понижения голоса. - person JRSofty; 12.02.2018

Настройка соединения SAP с использованием SAP JCO3 в Eclipse IDE Можно настроить соединение приложения SAP с приложением Java, выполнив следующие шаги:

Шаги для производства:

  1. Загрузите соединители SAP Java SAPJCO3 (32-разрядная или 64-разрядная версия в зависимости от архитектуры вашей системы) из SAP Marketplace.
  2. Создайте отдельную папку, сохраните загруженный zip-файл sapjco3 и разархивируйте его.
  3. Скопируйте расположение файла sapjco3.jar во вновь созданную папку.
  4. Теперь перейдите в «Переменные среды» и создайте системные переменные CLASSPATH, если они не существуют, и добавьте местоположение sapjco3.jar, а затем ; ex: D:\sapjco3-NTAMD64-3.0.16\sapjco3.jar;
  5. Отредактируйте системную переменную PATH и добавьте расположение вновь созданной папки, а затем ; пример: D:\sapjco3-NTAMD64-3.0.16;
  6. Теперь перейдите в Eclipse и создайте новый проект.
  7. Создайте новый класс с любым именем для подключения к приложению SAP.
  8. Щелкните правой кнопкой мыши только что созданный проект, перейдите к пути сборки и нажмите «Настроить путь сборки».
  9. Нажмите «Библиотеки» и «Добавить внешние банки».
  10. Теперь выберите sapjco3.jar только что загруженный файл.
  11. Сделайте имя вашего класса таким же, как вы создали на шаге 7.
  12. Напишите Java-код
person Sameer Kumar Choudhary    schedule 30.03.2017

В Docker для вашего приложения

FROM niels58/java8:latest
ARG JAR_FILE
ARG SPRING_PROFILES_ACTIVE
ARG LD_LIBRARY_PATH 
ARG CLASSPATH
ENV SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE} \
        LD_LIBRARY_PATH=${LD_LIBRARY_PATH} \
        CLASSPATH=${CLASSPATH} 
RUN export PATH=$PATH:${LD_LIBRARY_PATH} && \
        export PATH=$PATH:${CLASSPATH} && \   
        env
RUN mkdir -p /opt/sap/
COPY  src/main/resources/lib/* /opt/sap/
COPY ${JAR_FILE} app.jar
RUN ["java","-jar", "/opt/sap/sapjco3.jar"]
ENTRYPOINT [ "java","-Xmx1024m","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar" ]
person Niels    schedule 08.09.2018

Код, который помог мне установить соединение, выглядит следующим образом:

package com.example.springsocial.sap;

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

import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.ext.DestinationDataProvider;

public class SapTest {
    static String   IP="192.168.1.1", //IP or HOST
                    USER="userName", // user name of SAP
                    PASSWORD="mypassword", // password of SAP
                    CLIENT="100", //mandant in sap
                    SYSNR="00", // instance number
                    LANG="es"; // language (es or en)

    public static void main(String[] args) {
        System.out.println("SAP Test is running");
        try {
            // This will create a file called mySAPSystem.jcoDestination
            String DESTINATION_NAME1 = "mySAPSystem";
            Properties connectProperties = new Properties();
            connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST,   IP);
            connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,    SYSNR);
            connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT,   CLIENT);
            connectProperties.setProperty(DestinationDataProvider.JCO_USER,     USER);
            connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD,   PASSWORD);
            connectProperties.setProperty(DestinationDataProvider.JCO_LANG,     LANG);
            createDestinationDataFile(DESTINATION_NAME1,connectProperties);

        // This will use that destination file to connect to SAP

            JCoDestination destination = JCoDestinationManager.getDestination("mySAPSystem");
            System.out.println("Attributes:");
            System.out.println(destination.getAttributes());
            System.out.println();
            destination.ping();
        } catch (JCoException ex) {
            System.out.println("exception "+ex.toString());
        } catch(Exception ex) {
            System.out.println("exception "+ex.toString());
        }
    }

    private static void createDestinationDataFile(String destinationName, Properties connectProperties)
    {
        File destCfg = new File(destinationName+".jcoDestination");
        try
        {
            FileOutputStream fos = new FileOutputStream(destCfg, false);
            connectProperties.store(fos, "for tests only !");
            fos.close();
        }
        catch (Exception e)
        {
            throw new RuntimeException("Unable to create the destination files", e);
        }
    }
}
person Jorge Santos Neill    schedule 24.03.2020