SAPRFC с использованием переполнения стека

Я работаю над проектом, который позволит загружать в SAP с использованием PHP.

Я использовал код:

// Call-функция

$parameters = array(

array("IMPORT", "ZMM_", "*"),
//array("EXPORT", "*", array()),
array("TABLE", "IMT_", array())
);

$result = $sap->callFunction('ZMM_', $parameters);

Я хочу отобразить содержимое таблицы, но получаю сообщение об ошибке для
параметр импорта. Может кто-нибудь, пожалуйста, помогите мне решить эту проблему?

Спасибо

0

Решение

Кажется, что вы используете это — https://github.com/sensational/php-saprfc/blob/php7/saprfc.php — Реализация php callFunction для вызова пользовательская функция ZMM_ (функция SAP, которая находится в пространстве имен Z_ и которую вы внедрили в SAP самостоятельно — для ZMM_ обычно не существует в системе, и все существующие ZMM * не включены удаленно), которая содержит таблицу в SAP поверх SAP rfcsdk.
не!!! дистанционно включен

  1. Вы активировали удаленно эту функцию (как, например, та, что показана на рис. RFC_READ_TABLE), которую вы создали в SAP самостоятельно? Если нет, он не может работать вместе с SAP rfcsdk
    дистанционное управление включено

  2. Если да — ваши параметры не могут быть правильными. Это пример типичного вызова существующей функции rfc в SAP в этой среде, который вам кажется !!Я только могу догадаться, потому что вы не объясните это) использовать.

P.S .:
Если вы не используете php-фреймворк для dll E. koucky saprfc 1.4.1, расширение (который вы кажетесь !! использовать) вы можете использовать прямые вызовы, что означает прямые вызовы в скомпилированном расширении [php_functions]. Я указал прямые звонки с **** …. ****. Вы можете напрямую позвонить так:

 ...
// router string
$LOGIN = array ("ASHOST"=>"/H/xx.xx.xx.com/S/port/W/xx/H/localhost",
"SYSNR"   =>"00",
"CLIENT"  =>"800",
"USER"    =>"xxxxxxxx",
"PASSWD"  =>"xxxxxxxx",
"LANG"    =>"E");
...
$table="T100";
$criteria="SPRSL EQ 'E' AND TEXT GE 'Must e' AND TEXT LT 'N'";
$options=array("TEXT"=>$criteria);
...
$rfc = ****saprfc_open**** ($LOGIN);
$fce = ****saprfc_function_discover****($rfc,"RFC_READ_TABLE");
...
// set import parameters
saprfc_import ($fce,"DELIMITER","*");
saprfc_import ($fce,"NO_DATA","");
saprfc_import ($fce,"QUERY_TABLE",$table);
saprfc_import ($fce,"ROWCOUNT","");
saprfc_import ($fce,"ROWSKIPS","");

saprfc_table_init ($fce,"FIELDS");
saprfc_table_init ($fce,"OPTIONS");
saprfc_table_init ($fce,"DATA");
// options look at the top -> $criteria
****saprfc_table_append**** ($fce,"OPTIONS", $options);
...
for($i=1; $i<=$data_row;$i++)
{
$DATA[$i] = ****saprfc_table_read**** ($fce,"DATA",$i);
$ex = explode("*",$DATA[$i]["WA"]);
...

Рабочее расширение saprfc для php-7.1.11-nts-x32 вместе с SAPGUI 7.4 (rfcsdk 7.4) вы можете найти здесь
https://sourceforge.net/projects/saprfcsdk/files/PHP%207.1.11%20NTS%20VC14%20%20SAP%20GUI%207.4%20-%20×32%20%20NUC/

Вы можете получить напрямую вызываемые функции расширения с помощью

$extensions= get_loaded_extensions();
$functions=array();

foreach($extensions as $ext)
{
if($ext=="saprfc-gimba")
{
echo "<font size='4' color='green'>".$ext."</font><font size='2' color='green'> ist geladen<br></font>";
echo "<font size='1' color='green'>vorhandene Funktionen:<br></font>";
$functions =  get_extension_funcs($ext);
}
}
foreach($functions as $text)
{
echo "<font size='1' color='green'>$text<br></font>";
}

Тогда вы получите этот результат
напрямую вызываемые функции расширения php saprfc

Здесь у вас есть запрос к таблице из таблицы TFDIR, которая возвращает все функции RFC_ * в системе. Если вы установите FMODE EQ ‘R’, вы получите все функции системы, которые можно вызывать дистанционно.

$table="TFDIR";
$criteria="FUNCNAME GE 'RFC_' AND FUNCNAME LT 'RFC_ZZZZ'";
$options=array("TEXT"=>$criteria);

$LOGIN = array ("ASHOST"=>"/H/sapx.x.x.com/S/port/W/x/H/localhost",
"SYSNR" =>"00",
"CLIENT"=>"800",
"USER"  =>"xxx",
"PASSWD"=>"xxx",
"LANG"  =>"E");
$rfc = saprfc_open ($LOGIN);
$fce = saprfc_function_discover($rfc,"RFC_READ_TABLE");
if (! $fce )
{
echo "Discovering interface of function module failed";
exit;
}
saprfc_import ($fce,"DELIMITER","*");
saprfc_import ($fce,"NO_DATA","");
saprfc_import ($fce,"QUERY_TABLE",$table);
saprfc_import ($fce,"ROWCOUNT","");
saprfc_import ($fce,"ROWSKIPS","");
saprfc_table_init ($fce,"FIELDS");
saprfc_table_init ($fce,"OPTIONS");
saprfc_table_init ($fce,"DATA");
saprfc_table_append ($fce,"OPTIONS", $options);
$rc = saprfc_call_and_receive ($fce);
if ($rc != SAPRFC_OK)
{
if ($rfc == SAPRFC_EXCEPTION )
{
echo ("Exception raised: ".saprfc_exception($fce));
}
else
{
echo ("Call error: ".saprfc_error($fce));
}
exit;
}
$data_row = saprfc_table_rows ($fce,"DATA");
$field_row = saprfc_table_rows ($fce,"FIELDS");
echo "<div align='center'><p style='font-size:22px;color:midnightblue'>SAP - QUERY TABLE - TFDIR - PHP 7.1.11</p>".
"<table><tr bgcolor='#dddddd' style='font-size:15px; color:midnightblue;'>".
"<td>FUNCNAME</td><td>PNAME</td><td>INCLUDE</td><td>FREEDATE</td><td>APPL</td><td>MAND</td><td>FMODE</td><td>HOST</td><td>U_TASK</td><td>PNAME_MAIN</td><td>STEXT</td>";
for($i=1; $i<=$data_row;$i++)
{
$DATA[$i] = saprfc_table_read ($fce,"DATA",$i);
$ex = explode("*",$DATA[$i]["WA"]);
echo "<tr style='font-size:12px;'>";
for ($n=0;$n<=sizeof($ex);$n++)
{
if($ex[$n] != '')
{
echo "<td id=".$i."_".$n.">".$ex[$n]."</td>";
}
if(sizeof($ex) == 4 && $n==3)
{
echo "<td id=".$i."_".$n.">&nbsp;</td>";
echo "<td id=".$i."_".$n.">&nbsp;</td>";
echo "<td id=".$i."_".$n.">&nbsp;</td>";
}
}
echo "</tr>";
}
echo "</table></div>";
//saprfc_function_debug_info($fce);
saprfc_function_free($fce);
saprfc_close($rfc);

Результат:
все функции RFC_ *

Если вам нужна поддержка юникода, например, для немецкого и т. Д., Вставьте это здесь:

$rfc = saprfc_open ($LOGIN);
// enabling the same codepage as SAPGUI - unicode - for  ö,ü,ä etc.
saprfc_set_code_page ($rfc,"4110");

Или, если вы используете каркас E. Koucky:

$rfc->SetCodePage("4110");

С наилучшими пожеланиями
Аксель Арнольд Бангерт

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]