SAP和php SOAP提交

SAP和php SOAP提交,php,web-services,soap,sap,commit,Php,Web Services,Soap,Sap,Commit,我已经从SAP中的BAPI创建了一个Web服务,以将一些AccountDocuments插入SAP。在这些情况下,系统需要在成功插入调用后进行提交调用。这两个函数都必须在“一个上下文”中调用。 现在我面临的问题是,我不知道如何在php中做到这一点,或者是否有任何方法可以做到这一点? 我创建了以下示例,但它不起作用。COMMIT函数被执行,但在SAP中没有影响。虽然第一次调用返回“data successfully booked”,但我无法看到数据库中的数据。我知道您必须通过SAP中的提交调用来确

我已经从SAP中的BAPI创建了一个Web服务,以将一些AccountDocuments插入SAP。在这些情况下,系统需要在成功插入调用后进行提交调用。这两个函数都必须在“一个上下文”中调用。 现在我面临的问题是,我不知道如何在php中做到这一点,或者是否有任何方法可以做到这一点? 我创建了以下示例,但它不起作用。COMMIT函数被执行,但在SAP中没有影响。虽然第一次调用返回“data successfully booked”,但我无法看到数据库中的数据。我知道您必须通过SAP中的提交调用来确认这一点。在SE37中,有一种方法可以将2个函数调用放入一个序列中。我正在搜索php方法来实现这一点

    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;    
}
function insertAccntDoc($accntgl、$currAmount、$docHeader、$accntTax)
{
#定义身份验证
$SOAP_AUTH=array('login'=>SAPUSER,
“密码”=>SAPPASSWORD);
$WSDL=“url\u to\u my\u WSDL”;
#创建客户机对象,下载并解析WSDL
$client=newsoapclient($WSDL,$SOAP\u AUTH);
#设置输入参数(SAP喜欢将参数名称大写)
$params=数组(
“AccountGl”=>$accntgl,
“CurrencyAmount”=>$CurrencAmount,
“DocumentHeader”=>$docHeader,
“AccountTax”=>$accntTax
);
#调用操作(函数)。捕获并显示任何错误
尝试
{
$result=$client->AcctngDocumentPost($params);
$result=$client->BapiServiceTransactionCommit();
$result->Gebucht='Committed';
如果(计数($result->Return)>1)
{
$client->BapiServiceTransactionRollback();
$result->Gebucht='Rollback';
}
else if($result->Return->item->Type=='S')
{
尝试
{
$client->BapiServiceTransactionCommit();
$result->Gebucht='Committed';
}
catch(SoapFault$异常)
{
$client->BapiServiceTransactionRollback();
$result->Fehler=“***捕获的异常***
”$Exception。”
***结束异常***
”; $result->Gebucht='Fehler beim Committen'; } } } catch(SoapFault$异常) { $client->BapiServiceTransactionRollback(); $result->Fehler=“***捕获的异常***
”$Exception。”
***结束异常***
”; $result->Gebucht='Fehler beim Anlegen'; } #输出结果 $result->FlexRet='insertAccntDoc'; 返回$result; }

谢谢

此链接提供了有关如何使用“有状态”web服务的详细信息。这是共享会话所必需的