public function callFunctionTest() { $rfc = $this->open(); $fce = saprfc_function_discover($rfc, 'ZBAPI_RECEIVING'); if (!$fce) { echo 'Discovering interface of function module ZBAPI_RECEIVING failed'; exit; } saprfc_import($fce, RSINPUT, array('ZEX_VBELN' => '1500000000', 'KUNNR' => 'ANGELITO', 'MATNR' => 'ANGELITO0002', 'LFIMG' => '5.000', 'CHARG' => '1427279260', 'WERKS' => 'BBL2', 'LFART' => 'ZEL', 'LGORT' => 'B201', 'XABLN' => 'ZXY12345', 'WADAT' => '04/25/2015', 'WDATU' => '04/25/2015', 'HSDAT' => '04/03/2014', 'VFDAT' => '04/05/2015', 'CRATES_IND' => '', 'EXIDV' => '', 'VHILM' => '36', 'VHILM2' => '36', 'REMARKS' => 'TEST', 'LAST_ITEM_IND' => ' ')); saprfc_import($fce, 'PRINTER', 'ZWI6'); saprfc_table_init($fce, 'ET_PALLETS'); saprfc_table_init($fce, 'ET_PALLETS_W_TO'); $sn = saprfc_export($fce, 'VBELN'); $ol = saprfc_export($fce, 'OBJECT_LOCKED'); $nc = saprfc_export($fce, 'NOT_COMPATIBLE'); $vc = saprfc_export($fce, 'VOLUME_CAP_ERROR'); $oe = saprfc_export($fce, 'OTHER_ERROR'); if (saprfc_call_and_receive($fce) == SAPRFC_OK) { echo '<h2>Pulled Data</h2>'; echo 'SAP #:' . $sn . '<br />'; echo 'Object Locked:' . $ol . '<br />'; echo 'Not Compatible:' . $nc . '<br />'; echo 'Volume Cap Error:' . $vc . '<br />'; echo 'Other Error:' . $oe . '<br />'; } $data_et_pallets = saprfc_table_rows($fce, 'ET_PALLETS'); $data_et_pallets_w_to = saprfc_table_rows($fce, 'ET_PALLETS_W_TO'); $this->close($fce, $rfc); }
/** * @param string $name * @param array $request * @param array $responseKeys * @throws Exception * @return object */ public function execute($name, $request, $responseKeys) { $start = microtime(1); $fce = saprfc_function_discover($this->connection, $name); if (!$fce) { throw new Exception("Error discovering " . $name, 1); } foreach ($request as $k => $v) { if (is_array($v)) { foreach ($v as $index => $row) { if (is_object($row)) { $row = get_object_vars($row); } foreach ($row as $row_key => $row_value) { $row[$row_key] = $this->encodeString($row_value); } saprfc_table_insert($fce, $k, $row, $index + 1); } } else { saprfc_request($fce, $k, $this->encodeString($v)); } } $result = saprfc_call_and_receive($fce); if ($result != SAPRFC_OK) { $message = isset($this->errors[$result]) ? $this->errors[$result] : 'Unknown error'; if ($this->profiler) { $this->profiler->register((object) array('name' => $name, 'request' => $request, 'success' => false, 'message' => $message, 'time' => microtime(1) - $start)); } throw new Exception($message); } $response = array(); foreach ($responseKeys as $table) { $count = saprfc_table_rows($fce, $table); if ($count == -1) { // responseKeys param $data = $this->decodeString(saprfc_export($fce, $table)); } else { // responseKeys table $data = array(); for ($i = 1; $i <= $count; $i++) { $row = saprfc_table_read($fce, $table, $i); foreach ($row as $k => $v) { $row[$k] = $this->decodeString($v); } $data[] = (object) $row; } } $response[$table] = $data; } if ($this->profiler) { $this->profiler->register((object) array('name' => $name, 'request' => (object) $request, 'response' => (object) $response, 'success' => true, 'time' => microtime(1) - $start)); } return (object) $response; }
/** * Get system info about remote SAP system * * @return array[APPHOST] ......... application server * array[APPOS] ........... operating system * array[APPIP] ........... IP address * array[APPDEST].......... RFC destination * array[SAPSYS] .......... SAP system id * array[SAPREL] .......... SAP R/3 release version * array[SAPCP] ........... SAP R/3 code page * array[SAPKREL] ......... SAP R/3 Kernel release version * array[DBNAME] .......... Database name * array[DBHOST] .......... Database host * array[DBTYPE] .......... Database system (Oracle...) * */ function GetSystemInfo() { if ($this->rfc == false) { return array(); } if (is_array($this->systemInfo)) { return $this->systemInfo; } $sysinfo = array(); $fce = @saprfc_function_discover($this->rfc, "RFC_SYSTEM_INFO"); if ($fce) { $rc = @saprfc_call_and_receive($fce); if ($rc == SAPRFC_OK) { $sysinfo = @saprfc_export($fce, "RFCSI_EXPORT"); } @saprfc_function_free($fce); } $attr = $this->GetAttributes(); $this->systemInfo["APPHOST"] = $sysinfo["RFCHOST"] != "" ? $sysinfo["RFCHOST"] : $attr["partner_host"]; $this->systemInfo["APPOS"] = $sysinfo["RFCOPSYS"]; $this->systemInfo["APPIP"] = $sysinfo["RFCIPADDR"] != "" ? $sysinfo["RFCIPADDR"] : gethostbyname($this->systemInfo["APPHOST"]); $this->systemInfo["SAPSYS"] = $sysinfo["RFCSYSID"] != "" ? $sysinfo["RFCSYSID"] : $attr["sysid"]; $this->systemInfo["SAPREL"] = $sysinfo["RFCSAPRL"] != "" ? $sysinfo["RFCSAPRL"] : $attr["partner_rel"]; $this->systemInfo["SAPCP"] = $sysinfo["RFCCHARTYP"] != "" ? $sysinfo["RFCCHARTYP"] : $attr["partner_codepage"]; $this->systemInfo["SAPKREL"] = $sysinfo["RFCKERNRL"] != "" ? $sysinfo["RFCKERNRL"] : $attr["kernel_rel"]; $this->systemInfo["DBNAME"] = $sysinfo["RFCDATABS"] != "" ? $sysinfo["RFCDATABS"] : $this->systemInfo["SAPSYS"]; $this->systemInfo["DBHOST"] = $sysinfo["RFCDBHOST"]; $this->systemInfo["DBTYPE"] = $sysinfo["RFCDBSYS"]; $this->systemInfo["APPDEST"] = $sysinfo["RFCDEST"] != "" ? $sysinfo["RFCDEST"] : $this->systemInfo["APPHOST"] . "_" . $this->systemInfo["SAPSYS"] . "_" . $attr["systnr"]; unset($sysinfo); unset($attr); return $this->systemInfo; }
/** * Copy interface function module to class vars * */ function ImportVars() { if ($this->def == false) { return; } for ($i = 0; $i < count($this->def); $i++) { $interface =& $this->def[$i]; $name = strtoupper($interface[name]); $type = $interface[type]; switch ($type) { case 'IMPORT': if ($this->server == true) { if (isset($this->{$name})) { unset($this->{$name}); } $this->{$name} = @saprfc_server_import($this->fce, $name); } break; case 'EXPORT': if ($this->server == false) { if (isset($this->{$name})) { unset($this->{$name}); } $this->{$name} = @saprfc_export($this->fce, $name); } break; case 'TABLE': if (!isset($this->{$name}) || !is_object($this->{$name})) { $this->{$name} = new SAPTable($this->fce, $name); } break; } //switch } //for }
function export($fieldName) { global $rfc, $fce; $rowsag = saprfc_export($fce, $fieldName); return $rowsag; }
public function getExport($n) { return saprfc_export($this->func, $n); }
function callFunction($func_name="",$parameters) { /* typical call: $result=$saprfc->call_function("RFC_SYSTEM_INFO", array( array("EXPORT","SYSTEM","MBS") array("IMPORT","CODEPAGE") array("IMPORT","DBNAME") array("TABLE","APPLLIST",array()) ) ); */ // Initialize Variables $result_data=array(); $this->call_function_result=false; // Check SAPRFC-Installation if (! extension_loaded ("saprfc")) { return $this->setStatus(SAPRFC_ERROR,"saprfc::callFunction()\n SAPRFC-Extension.dll not loaded."); } // Validate given data if (empty($func_name)) { return $this->setStatus(SAPRFC_ERROR,"saprfc::callFunction():\n No Function-Name given"); } // Move Parameters to local Arrays $func_params_import=array(); $func_params_tables=array(); $func_params_export=array(); foreach ($parameters as $key => $param) { $type=$param[0]; $name=$param[1]; $value=isset($param[2])?$param[2]:""; switch ($type) { case "IMPORT": $func_params_import[$name]=$value; break; case "EXPORT": $func_params_export[$name]=""; break; case "TABLE": $func_params_tables[$name]=$value; if (!is_array($value)) { return $this->setStatus(SAPRFC_ERROR,"saprfc::callFunction()\n Wrong Parameter-Value for Table-Parameter ".$name.". We expected an Array."); } break; default: return $this->setStatus(SAPRFC_ERROR,"saprfc::callFunction()\n Wrong Parameter-Type '".$type."'. Must be IMPORT, EXPORT or TABLE."); } } // Do Login (only done in method login(), if necessary) if ($this->login()==SAPRFC_ERROR) { return $this->getStatus(); } // Discover Function in SAP $this->func_id=@saprfc_function_discover($this->rfc_conn,$func_name); if (!$this->func_id) { return $this->setStatus(SAPRFC_ERROR,"saprfc::callFunction()\n Function module '".$func_name."' seems not to exist. function saprfc_function_discover() failed."); } // Set Import-Parameters foreach ($func_params_import as $name => $value) { $rc=@saprfc_import($this->func_id,$name,$value); if (empty($rc)) { return $this->setStatus(SAPRFC_ERROR,"saprfc::callFunction('".$func_name."')\n Import-Parameter=".$name. " could not be set. (Does it exist?)"); } } // Set Table-Parameters (importing-values) foreach ($func_params_tables as $name => $value) { $rc=@saprfc_table_init($this->func_id,$name); if (empty($rc)) { return $this->setStatus(SAPRFC_ERROR,"saprfc::callFunction('".$func_name."')\n Table-Parameter=".$name. " could not be set. (Does it exist?)"); } foreach ($value as $key => $data) { @saprfc_table_append($this->func_id,$name,$data); } } // Execute Function $result = @saprfc_call_and_receive ($this->func_id); if ($result != SAPRFC_OK) { if ($result == SAPRFC_EXCEPTION ) { return $this->setStatus(SAPRFC_ERROR,"saprfc::callFunction('".$func_name."')\n saprfc_call_and_receive(): Exception raised: ".@saprfc_exception($this->func_id)); } else { return $this->setStatus(SAPRFC_ERROR,"saprfc::callFunction('".$func_name."')\n saprfc_call_and_receive(): Call error: ".@saprfc_error($this->func_id)); } } // Get Exporting-Parameters foreach ($func_params_export as $name =>$value) { $rc=@saprfc_export($this->func_id,$name); // if (empty($rc)) { // llaegner removed (Reason: when export returns the -good- value "0", then empty also evaluates to true (thanks Alexander Gouriev) if (!isset($rc)) { return $this->setStatus(SAPRFC_ERROR,"saprfc::callFunction('".$func_name."')\n Export-Parameter=".$name. " could not be set (Does it exist?)".@saprfc_error($this->func_id)); } else { $result_data[$name]=$rc; } } // Get Table-Parameters foreach ($func_params_tables as $name => $content) { // Ausgabe-Tabelle initialisieren $result_data[$name]=array(); $rows=@saprfc_table_rows($this->func_id,$name); for ($i=1; $i<=$rows; $i++) { $result_data[$name][$i]=@saprfc_table_read ($this->func_id,$name,$i); } } // Save function-call result for later analysis $this->call_function_result=$result_data; // Echo Debug-Information, if flagged if ($this->debug) @saprfc_function_debug_info($this->func_id); // Falls es ein BAPI-Aufruf ist, Fehler raussuchen if ($this->check_bapi_errors) { $bapi_return=@saprfc_export($this->func_id,"RETURN"); if (isset($bapi_return) && is_array($bapi_return) && isset($bapi_return["MESSAGE"]) && $bapi_return["NUMBER"] != 0) { // FINISH FUNCTION-CALL $this->setStatus(SAPRFC_APPL_ERROR,$bapi_return); return $result_data; } } // Close Function-Execution and free results removed because it sometimes stops completly executing PHP!! //@saprfc_function_free($this->func_id); // FINISH FUNCTION-CALL $this->setStatus(SAPRFC_OK,"call function '".$func_name."' successfull."); return $result_data; }
exit; } saprfc_import ($fce,"PROGRAM",$REPORT); saprfc_table_init ($fce,"QTAB"); $rc = saprfc_call_and_receive ($fce); if ($rfc_rc != SAPRFC_OK) { if ($rfc == SAPRFC_EXCEPTION ) echo ("Exception raised: ".saprfc_exception($fce)); else echo ("Call error: ".saprfc_error($fce)); exit; } $SYSTEM = saprfc_export ($fce,"SYSTEM"); $TRDIR = saprfc_export ($fce,"TRDIR"); $rows = saprfc_table_rows ($fce,"QTAB"); echo "<PRE>"; for ($i=1; $i<=$rows; $i++) { $QTAB = saprfc_table_read ($fce,"QTAB",$i); echo ($QTAB[LINE]."\n"); } echo "</PRE>"; saprfc_function_free($fce); saprfc_close($rfc); ?>
/** */ private function appendExporter(&$result, $moduleResource, array $exporter) { foreach ($exporter as $exporterName) { $exportIndex = $this->getLastClassPrefix($exporterName); $additionalExportParam = saprfc_export($moduleResource, $exportIndex); if (!empty($additionalExportParam)) { $result[$exportIndex] = $additionalExportParam; } } }
"Calling of function module $function failed. See the error message below.<a href=\"saprfc_test.php?p=select\">Other function module</a>", saprfc_error() ); exit; } print_header ("Results of function module $function"); $form = "<table colspacing=0 colpadding=0>\n"; $form .= "<tr bgcolor=#D0D0D0><td colspan=2><b>EXPORT PARAMETERS</b></td></tr>\n"; for ($i=0;$i<count($def);$i++) { $interface = $def[$i]; if ($interface["type"] == "EXPORT") // show export parameters { $var = saprfc_export ($fce,$interface["name"]); $form .= show_parameter_out ($interface["name"],$interface["def"],$var); } } for ($i=0;$i<count($def);$i++) { $interface = $def[$i]; if ($interface["type"] == "TABLE") // show content of internal tables { $form .= "<tr bgcolor=#D0D0D0><td colspan=2><b>TABLE ".$interface["name"]."</b></td></tr>\n"; unset ($vararray); $rows = saprfc_table_rows ($fce,$interface["name"]); for ($j=1;$j<=$rows;$j++) $vararray[] = saprfc_table_read($fce,$interface["name"],$j); $form .= show_table_out ($interface["name"],$interface["def"],$vararray); }