Есть сайт, на котором уже настроен экспорт из 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)
}