2017-03-09 15 views
0

私はPHPを使用してSAPにアップロードできるプロジェクトに取り組んでいます。PHPを使用したSAPRFC

私は、コードを使用:

//コール機能

$parameters = array(

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

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

を私は、テーブルの内容を表示したいが、 インポートパラメータのエラーメッセージが出ています。誰でもこの問題を解決するのを助けてくれますか?

おかげ

答えて

4

あなたがこれを使用するようです - https://github.com/sensational/php-saprfc/blob/php7/saprfc.php - 自分でSAPに実装ユーザー定義関数ZMM_(Z_名前空間にあるSAP機能とどのへの呼び出しのためのPHP callFunction実装 - SAP上のSAP rfcsdkでは、ZMM_が標準的にシステムに存在しないため、既存のZMM *はすべてリモート対応ではないため)、テーブルを保持します。 not!!! remote enabled

  1. リモートあなたがSAPで独自で構築されていること(例えば同じようPIC1のRFC_READ_TABLEに示したものである)、この機能を有効にしましたか?そうでない場合は、SAPと一緒には動作しません。rfcsdk rfc remote enabled

  2. もしそうなら、あなたのパラメータは正しいかもしれません。これは、そのフレームワーク内のSAPの既存のrfc関数へのtyicalコールの例です。あなたは!!(私はそれを推測することができます、あなたはそれを説明しないため、)を使用します。

PS:あなたはE. KouckyのSAPRFC 1.4.1拡張dllのためのPHPフレームワークを使用しない場合は(あなたがいるようです!! を!!を使用する) あなたは意味し、直接呼び出しを使用することができますコンパイルされた拡張機能[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"]); 
    ... 

あなたがSAPGUI 7.4と一緒のphp-7.1.11-NTS-X32の作業SAPRFC拡張子を見つけることができます(7.4をRFCSDK)ここ https://sourceforge.net/projects/saprfcsdk/files/PHP%207.1.11%20NTS%20VC14%20%20SAP%20GUI%207.4%20-%20x32%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>"; 
} 

を使用して、直接呼び出し可能な拡張関数は、その後、あなたはその結果を得る directly callable php saprfc extension functions

ここでは、システム内のすべてのRFC_ *関数を返すテーブルTFDIRのテーブルクエリがあります。 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); 

結果は次のとおりです。 all RFC_* functions

あなたはなど、ドイツのために例えばUnicodeのサポートが必要な場合は、ここにこれを挿入します。

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

それとも、Eを使用している場合をKouckyフレームワーク:

$rfc->SetCodePage("4110"); 

敬具 アクセルアーノルドBangert

関連する問題