0

I have created a Webservice from a BAPI in SAP to insert some AccountDocuments into SAP. The system in these cases needs a COMMIT-call after a successful insert call. Both of these functions must be called in "one context".

Now I'm facing the problem that I don't know how to do this in php or if there is any way to do this?

I have created the following example, but it doesn't work. The COMMIT function gets executed but it has no impact in SAP. I cannot see the data in the databases, although the first call returns "Data successfully booked". I know that you must confirm this with the COMMIT call in SAP. In SE37 there is a way to put 2 function calls into one Sequence. I'm searching the php-way to do this.

    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;    
}

Thanks!

Sandra Rossi
  • 11,934
  • 5
  • 22
  • 48
StS
  • 283
  • 4
  • 10

1 Answers1

0

This link gives details on how to use "stateful" web services. This is required to have a shared session.

http://scn.sap.com/thread/140909

Matthias Wuttke
  • 1,982
  • 2
  • 21
  • 38