Задать вопрос
z17
@z17
Java, PHP

Импорт данных в SAP (sap rfc), как это сделать?

Есть сайт, на котором уже настроен экспорт из SAP в базу сайта по нескольким модулям.
Получение данных из SAP получается примерно так по этим модулям:

$data = $this->authorize_sap()->execute_function('МОДУЛЬ');
$data->Call();
$arr = $data->LIST->Export();

в arr получаются данные
this - класс работы с сап,
authorize_sap и execute_function:
private function authorize_sap(){
        try{
            $this->sap = new SAPConnection;
            $this->sap->connectToApplicationServer($this->sap_host, "00");
            $this->sap->Open($this->sap_client, $this->sap_login, $this->sap_password, "ru");
            if($this->sap->GetStatus() != SAPRFC_OK)
                throw new Exception('Connection problem(SAP).');
        } catch(Exception $e){
            echo $e->getMessage();
        }
        return $this;
    }

    private function execute_function($f){
        return $this->sap->NewFunction($f);
    }


Это всё понятно, и по логике для таких модулей есть и метод Import.
Проблема в том, что по нужному модулю $this->authorize_sap()->execute_function('МОДУЛЬ'); не возвращает в себе объект LIST, так что и Export не вызвать.
Нужно же импортировать данные (несколько поля) и получить в ответ одно поле.
И я не понимаю как это сделать.

Немного предыстории:
с SAPом ранее не сталкивался, появилась необходимость доработки системы, при этом сроки сильно горят.
Нормальной документации найти не смог, примера тоже (на сайте был только экспорт).
Получается что делаю практически методом тыка.
пробовал с помощью saprfc->callFunction('модуль', параметры), но пока не получилось, хотя мне кажется что это оно.

Задача интуитивно кажется очень простой, просто недостаточно информации.
Буду очень рад советам.

Выкладываю вывод функции execute_function('МОДУЛЬ') :
для модуля, экспорт из которого работает:
object(SAPFunction)#3 (11) {
  ["rfc"]=>
  resource(7) of type (saprfc handle)
  ["fce"]=>
  resource(8) of type (saprfc function module)
  ["name"]=>
  string(22) "ИМЯ МОДУЛЯ"
  ["exception"]=>
  string(0) ""
  ["server"]=>
  bool(false)
  ["bapi"]=>
  bool(false)
  ["def"]=>
  array(1) {
    [0]=>
    array(4) {
      ["name"]=>
      string(4) "LIST"
      ["type"]=>
      string(5) "TABLE"
      ["optional"]=>
      int(0)
      ["def"]=>
      array(18) {
        [0]=>
        array(5) {
          ["name"]=>
          string(5) "MATNR"
          ["abap"]=>
          string(1) "C"
          ["len"]=>
          int(18)
          ["dec"]=>
          int(0)
          ["offset"]=>
          int(0)
        }
        [1]=>
        array(5) {
          ["name"]=>
          string(9) "SERV_CODE"
          ["abap"]=>
          string(1) "C"
          ["len"]=>
          int(10)
          ["dec"]=>
          int(0)
          ["offset"]=>
          int(18)
        }
        [2]=>
        array(5) {
          ["name"]=>
          string(9) "SERV_NAME"
          ["abap"]=>
          string(1) "C"
          ["len"]=>
          int(40)
          ["dec"]=>
          int(0)
          ["offset"]=>
          int(28)
        }
        [3]=>
        array(5) {
          ["name"]=>
          string(9) "SERV_TYPE"
          ["abap"]=>
          string(1) "C"
          ["len"]=>
          int(10)
          ["dec"]=>
          int(0)
          ["offset"]=>
          int(68)
        }
        ... дальше описание полей ...
      }
    }
  }
  ["status"]=>
  int(0)
  ["statusInfos"]=>
  string(0) ""
  ["debug"]=>
  bool(false)
  ["LIST"]=>
  object(SAPTable)#4 (9) {
    ["fce"]=>
    resource(8) of type (saprfc function module)
    ["name"]=>
    string(4) "LIST"
    ["row"]=>
    array(0) {
    }
    ["rowNum"]=>
    int(0)
    ["rowStruct"]=>
    array(18) {
      [0]=>
      string(5) "MATNR"
      [1]=>
     ... перечисление полей ...
    }
    ["rowLast"]=>
    int(0)
    ["status"]=>
    int(0)
    ["statusInfos"]=>
    string(0) ""
    ["debug"]=>
    bool(false)
  }
}

Для второго, в который нужно организовать импорт:
object(SAPFunction)#3 (10) {
  ["rfc"]=>
  resource(7) of type (saprfc handle)
  ["fce"]=>
  resource(8) of type (saprfc function module)
  ["name"]=>
  string(14) "ИМЯ МОДУЛЯ"
  ["exception"]=>
  string(0) ""
  ["server"]=>
  bool(false)
  ["bapi"]=>
  bool(false)
  ["def"]=>
  array(3) {
    [0]=>
    array(4) {
      ["name"]=>
      string(3) "NUM"
      ["type"]=>
      string(6) "EXPORT"
      ["optional"]=>
      int(0)
      ["def"]=>
      array(1) {
        [0]=>
        array(5) {
          ["name"]=>
          string(0) ""
          ["abap"]=>
          string(1) "C"
          ["len"]=>
          int(10)
          ["dec"]=>
          int(0)
          ["offset"]=>
          int(0)
        }
      }
    }
    [1]=>
    array(4) {
      ["name"]=>
      string(5) "RCODE"
      ["type"]=>
      string(6) "EXPORT"
      ["optional"]=>
      int(0)
      ["def"]=>
      array(1) {
        [0]=>
        array(5) {
          ["name"]=>
          string(0) ""
          ["abap"]=>
          string(1) "b"
          ["len"]=>
          int(1)
          ["dec"]=>
          int(0)
          ["offset"]=>
          int(0)
        }
      }
    }
    [2]=>
    array(4) {
      ["name"]=>
      string(4) "DATA"
      ["type"]=>
      string(6) "IMPORT"
      ["optional"]=>
      int(0)
      ["def"]=>
      array(34) {
        [0]=>
        array(5) {
          ["name"]=>
          string(5) "MANDT"
          ["abap"]=>
          string(1) "C"
          ["len"]=>
          int(3)
          ["dec"]=>
          int(0)
          ["offset"]=>
          int(0)
        }
        [1]=>
        array(5) {
          ["name"]=>
          string(6) "WI_NUM"
          ["abap"]=>
          string(1) "C"
          ["len"]=>
          int(10)
          ["dec"]=>
          int(0)
          ["offset"]=>
          int(3)
        }
        [2]=>
        array(5) {
          ["name"]=>
          string(5) "ERDAT"
          ["abap"]=>
          string(1) "D"
          ["len"]=>
          int(8)
          ["dec"]=>
          int(0)
          ["offset"]=>
          int(13)
        }
        .. дальше остальные поля ..
      }
    }
  }
  ["status"]=>
  int(0)
  ["statusInfos"]=>
  string(0) ""
  ["debug"]=>
  bool(false)
}
  • Вопрос задан
  • 4543 просмотра
Подписаться 2 Оценить 18 комментариев
Пригласить эксперта
Ответы на вопрос 1
@IronBream
SAP SD/MM consultant
Привет, понимаю что вопрос задан очень давно и возможно он уже не актуален, но ответ скорее всего будет интересен многим специалистам начинающим свою работу с SAP системами.

В SAP есть ряд ограничений по используемым технологиям, например для RFC вызова функционального модуля (functional modul) или BAPI, модуль должен обладать определенными свойствами. Грубо говоря, он должен быть доступен для удаленного вызова.

Кроме этого, модуль должен иметь структуру или таблицу ответа. Так что, чтобы правильно вызвать модуль из SAP желательно поговорить с программистом или хотя бы консультантом SAP. Если такой возможности нет, то нужно зайти в сам SAP и проверить вызываемый модуль в транзакции se37.

Вкратце, как-то так.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы