2014-10-09 80 views
0

我已经从SAP中的BAPI创建了一个Webservice,以将一些AccountDocuments插入到SAP中。在这些情况下,系统在成功插入呼叫后需要COMMIT呼叫。这两个函数都必须在“一个上下文”中调用。 现在我面临的问题是,我不知道如何在php中执行此操作,或者有任何方法可以执行此操作? 我已经创建了以下示例,但它不起作用。 COMMIT函数被执行,但对SAP没有影响。我看不到数据库中的数据,但第一次调用返回“数据成功预订”。我知道你必须用SAP中的COMMIT调用来确认这一点。在SE37中,可以将2个函数调用放入一个序列中。我正在寻找php方式来做到这一点。SAP和php SOAP COMMIT

function insertAccntDoc($accntgl, $currAmount, $docHeader, $accntTax) 
    { 
    #Define Authentication 
    $SOAP_AUTH = array('login' => SAPUSER, 
         'password' => SAPPASSWORD); 

    $WSDL = "url_to_my_wsdl"; 

    #Create Client Object, download and parse WSDL 
    $client = new SoapClient($WSDL, $SOAP_AUTH); 

    #Setup input parameters (SAP Likes to Capitalise the parameter names) 
    $params = array(
      'AccountGl' => $accntgl, 
      'CurrencyAmount' => $currAmount, 
      'DocumentHeader' => $docHeader, 
      'AccountTax' => $accntTax  
    ); 

    #Call Operation (Function). Catch and display any errors 
    try 
    { 
     $result = $client->AcctngDocumentPost($params); 
     $result = $client->BapiServiceTransactionCommit(); 
     $result->Gebucht = 'Committed'; 

     if(count($result->Return) > 1) 
     { 
      $client->BapiServiceTransactionRollback(); 
      $result->Gebucht = 'Rollback'; 
     } 
     else if($result->Return->item->Type == 'S') 
     { 
      try 
      { 
       $client->BapiServiceTransactionCommit(); 
       $result->Gebucht = 'Committed'; 
      } 
      catch(SoapFault $exception) 
      { 
       $client->BapiServiceTransactionRollback(); 
       $result->Fehler = "***Caught Exception***<br>".$exception."<br>***END Exception***<br>"; 
       $result->Gebucht = 'Fehler beim Committen'; 
      } 


     } 
    } 
    catch (SoapFault $exception) 
    { 
     $client->BapiServiceTransactionRollback(); 
     $result->Fehler = "***Caught Exception***<br>".$exception."<br>***END Exception***<br>"; 
     $result->Gebucht = 'Fehler beim Anlegen'; 

    } 

    #Output the results 
    $result->FlexRet = 'insertAccntDoc';  
    return $result;  
} 

谢谢!

回答