예제 #1
4
 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);
 }
예제 #2
0
파일: Gateway.php 프로젝트: cti/saprfc
 /**
  * @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;
 }
예제 #3
0
 /**
  * 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;
 }
예제 #4
0
 /**
  * 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
 }
예제 #5
0
파일: Bapi.php 프로젝트: jkulam/myMadixREP
 function export($fieldName)
 {
     global $rfc, $fce;
     $rowsag = saprfc_export($fce, $fieldName);
     return $rowsag;
 }
예제 #6
0
파일: SAP.php 프로젝트: wilaheng/wila
 public function getExport($n)
 {
     return saprfc_export($this->func, $n);
 }
예제 #7
0
	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;	
	}
예제 #8
0
       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);
?>

예제 #9
0
 /**
  */
 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;
         }
     }
 }
예제 #10
0
                              "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);
         }