Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Java & SAP / 11 сообщений из 11, страница 1 из 1
10.04.2013, 15:35:23
    #38220544
MrSorh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java & SAP
Требуется данные (таблица/массив) из JAVA записать в z-таблицу SAP'a. Буду рад любой помощи.
...
Рейтинг: 0 / 0
10.04.2013, 15:48:01
    #38220580
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java & SAP
Могу поддержать морально, посочувствовать. Буду рад если помог.
...
Рейтинг: 0 / 0
11.04.2013, 00:53:12
    #38221138
Serebatos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java & SAP
Постановка нехорошая, напрямую в таблицу писать не стоит.
используйте SAPJCO для вызова ФМ, который запишет в z-таблицу.
...
Рейтинг: 0 / 0
11.04.2013, 00:58:47
    #38221141
Serebatos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java & SAP
Да, еще ФМ должен быть RFC или по-русски у него должна стоять галка, что он дистанционный
...
Рейтинг: 0 / 0
11.04.2013, 11:27:36
    #38221465
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java & SAP
А можно еще посмотреть SAP адаптеры IBM, ни как уже было написано SAP JCo используют. Но, если я все правильно помню эти jar'ы так просто не выкачать.

Для примера можно обратиться к докам IBM ESB/PS.
...
Рейтинг: 0 / 0
11.04.2013, 11:52:11
    #38221518
xds
xds
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java & SAP
ТимоНА можно еще посмотреть SAP адаптеры IBM, ни как уже было написано SAP JCo используют. Но, если я все правильно помню эти jar'ы так просто не выкачать.

Для примера можно обратиться к докам IBM ESB/PS.

Эти адаптеры можно свободно выкачать у Oracle.
Думаю, что там один и тот же iWay.
...
Рейтинг: 0 / 0
11.04.2013, 12:49:58
    #38221646
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java & SAP
xds,

О. А раньше нужен был клиентский Oracle id для скачки. Ну тогда и флаг в руки :)
...
Рейтинг: 0 / 0
13.04.2013, 02:20:54
    #38224198
Serebatos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java & SAP
на СДНе много ссылок и вопросов на этот счет
IMBовскими не пользовался, а обычный jco идет вместе с нетвивером
...
Рейтинг: 0 / 0
13.04.2013, 10:49:04
    #38224267
MrSorh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java & SAP
Всем спасибо за помощь.
Я использовал коннектор SAPJCO версии 2, скачанный с оф. сайта SAP'а ( http://service.sap.com/connectors ), который конечно же доступен "не для всех". Из него 2 DLL-файла (librfc32.dll и sapjcorfc.dll) поместил в C:\Windows\System32, а sapjco.jar подключил в своей JAVA-среде.

Далее на основе примеров (источники которых будут указаны ниже) был написан (а точнее переделан) следующий JAVA-код:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
package obuchenie;

import com.sap.mw.jco.*;

public class TEST extends Object {

    public static void main(String args[]) {
        TEST app = new TEST();
    }
    int count;
    JCO.Client mConnection;
    JCO.Repository mRepository;
    String[] SAPInterfaces;

    public TEST() {
        try {
            // Logon info
            mConnection = JCO.createClient("SAP client",
                    "userid",
                    "password",
                    "language",
                    "application server host name",
                    "system number");
            mConnection.connect();
            mRepository = new JCO.Repository("TEST_REP", mConnection);
        } catch (Exception ex) {
            ex.printStackTrace();
            System.exit(1);
        }

        JCO.Function function = null;
        JCO.Table codes = null;

        try {
            function = this.createFunction("Z_RFC_TEST");
            function.getTableParameterList();

            if (function == null) {
                System.out.println(
                        "Z_RFC_TEST" + " not found in SAP.");
                System.exit(1);
            }

            codes = function.getTableParameterList().getTable("TABLE_FOR_Z");

            codes.appendRows(2); // Add two rows to internal table
            codes.setValue("1101", "ZWERKS");
            codes.setValue("0121", "ZMTART");

            codes.nextRow(); // Move onto next row
            codes.setValue("1102", "ZWERKS");
            codes.setValue("0122", "ZMTART");
            
            mConnection.execute(function);
            
            // Output result
            System.out.println(
                    function.getTableParameterList().getValue("TABLE_FOR_Z"));
        } catch (Exception ex) {
            System.exit(1);
        }
    }

    public JCO.Function createFunction(String name) throws Exception {
        try {
            IFunctionTemplate ft =
                    mRepository.getFunctionTemplate(name.toUpperCase());
            if (ft == null) {
                return null;
            }
            return ft.getFunction();
        } catch (Exception ex) {
            throw new Exception("Problem retrieving JCO.Function object.");
        }
    }
}



А на стороне SAP'а создан функциональный модуль (ФМ) Z_RFC_TEST со следующим ABAP-кодом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
FUNCTION Z_RFC_TEST.

DATA: WA_ZOZM_TEST TYPE ZOZM_TEST,
      T_ZOZM_TEST TYPE STANDARD TABLE OF ZOZM_TEST.

LOOP AT TABLE_FOR_Z INTO WA_ZOZM_TEST.
  insert into zozm_test values wa_zozm_test.    "Запись в Z-таблицу ZOZM_TEST
  INSERT WA_ZOZM_TEST INTO TABLE T_FOR_CHECK.   "Запись во внутренню таблицу T_FOR_CHECK для проверки
ENDLOOP.


ENDFUNCTION.



При этом в параметрах ФМ Z_RFC_TEST на вкладке Таблицы я указал таблицу TABLE_FOR_Z типа ZOZM_TEST (она является входным параметром, но таблицы надо указывать на вкладке таблиц, а не импорт!) и таблицу T_FOR_CHECK типа ZOZM_TEST (она заполняется одновременно с Z-таблицей ZOZM_TEST и служит для того, чтобы в JAVA-среде вывести мне занесенные данные для проверки).

ВАЖНО! На вкладке свойств ФМ должно быть указано, что он Дистанционный !

После выполнения JAVA-программка выдала следующее:

--------
| TABLE 'ZOZM_TEST'
--------
| ZWE| ZMT|
--------
|0123|4567|
--------
|1111|0121|
|1112|0122|
--------

таблица ZOZM_TEST в SAP'е также была удачно заполнена. (Я не знаю, что означает строка |0123|4567| в выводе, но в Z-таблицу она не занеслась)

Источники информации:
небольшая книга Enterprise Java for SAP by Austin Sincock (написано, где скачать и как установить коннектор SAPJCO версии 2, а также другая полезная инфа)

пример отсюда http://www.sapdev.co.uk/java/jco/jco_callfunc.htm

справка в составе скаченного коннектора SAPJCO версии 2. Есть коннектор версии 3, но в нем уже поменялись классы. Разбираться в нем мне было сложнее, а примеров для версии 2 в интернете больше.

http://scn.sap.com , но мне он не помог

P.S.: я новичок, поэтому исправляйте, учите, направляйте
...
Рейтинг: 0 / 0
13.04.2013, 22:13:35
    #38224645
Serebatos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java & SAP
insert в абапе вы используете потому что вам так нужно?
может лучше modify?

про дистанционность ФМника, я сразу указал :)

используйте сразу нормальное именование переменных в ФМ:
ls_имя_структуы (Local Structutre)
lt_имя_таблицы (Local Table)

кто то пишет WA, но это моветон - визард абаповский генерит код именно так, как я указал

и здорово было бы добавить проверку таблицы на заполненность

if TABLE_FOR_Z is not initial.
тут ваш код.
elseif.
обработка на случай прихода пустой таблицы
endif.

лучше сразу писать нормально, т.к. может понадобится потом, что то еще прикручивать

а вообще JCO - это тоже на айс, юзайте веб-сервисы.
генерятся через пункт "сервисы предприятия" контекстного меню кликом по группе функций
...
Рейтинг: 0 / 0
14.04.2013, 10:48:06
    #38224805
MrSorh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java & SAP
Исправленный ABAP-код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
FUNCTION Z_RFC_TEST.

DATA: ls_zozm_test TYPE zozm_test.

IF table_for_z[] IS NOT INITIAL.

LOOP AT table_for_z[] INTO ls_zozm_test.
  INSERT INTO zozm_test VALUES ls_zozm_test.
  INSERT ls_zozm_test INTO TABLE t_for_check[].
ENDLOOP.

ELSE.

*обработка на случай прихода пустой таблицы

ENDIF.

ENDFUNCTION.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Java & SAP / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]