Обратные вызовы из ABAP не поддерживаются

Я пытаюсь реализовать сценарий PowerShell, который возвращает «счета». соединение работает, моя функция также вызывается, но метод invole не работает. я получаю журнал ошибок:

      Ausnahme beim Aufrufen von "Invoke" mit 1 Argument(en):  "Callbacks from ABAP are not supported"
In C:\Users\test\Desktop\script.ps1:75 Zeichen:10
+          $myFun.Invoke($destination)
+          ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : RfcAbapRuntimeException

Я искал в Интернете раньше, и они говорят, что соединитель sap .net не поддерживает вызов "invoke" в этих операциях. Есть ли другая функция, которая делает то же самое? Я нашел сообщение, написанное почти 5 лет назад на C #, и я не могу его воспроизвести.

мой сценарий PowerShell:

        #load .net sap connector
    Function Load-NCo {

      $CurrentDir = Get-Location
      [System.IO.Directory]::SetCurrentDirectory($CurrentDir.Path)

      $rc = [Reflection.Assembly]::LoadFile("C:\Program Files\SAP\SAP_DotNetConnector3_Net40_x64\" + "sapnco.dll")
      $rc = [Reflection.Assembly]::LoadFile("C:\Program Files\SAP\SAP_DotNetConnector3_Net40_x64\" + "sapnco_utils.dll")

    }


    Function Get-Destination2  {

      #-Verbindungsparamter---------------------------------------------
        $cfgParams = New-Object SAP.Middleware.Connector.RfcConfigParameters

        $cfgParams.Add("NAME", "SAPconnect")
        $cfgParams.Add("ASHOST", "xxx.xx.xxx.xx")
        $cfgParams.Add("SYSNR", "25")
        $cfgParams.Add("CLIENT", "111")
        $cfgParams.Add("USER", "test")

        $cfgParams.Add("SYSID ","T30")
        $cfgParams.Add("LANG","DE")
        $cfgParams.Add("PASSWD", "test")
        

         $destination = [SAP.Middleware.Connector.RfcDestinationManager]::GetDestination($cfgParams) 

         $rfcRepository = [SAP.Middleware.Connector.RfcDestination]
         $rfcRepository = $destination.Repository


         
         $myFun =  [SAP.Middleware.Connector.IRfcFunction]
         
         $myFun = $rfcRepository.CreateFunction("Z_GET_ARCHIVE_FILE")
         
         $myFun.setValue("SAP_OBJECT" , "test2020")
         $myFun.setValue("OBJECT_ID" , "64562254")
         $myFun.setValue("ARCHIV_TAB" , "TOAST02")
          $myFun.setValue("ARCHIV_ID" , "I8")
         $myFun.setValue("AR_OBJECT" , "ZIMT05")
         
         $myFun.Invoke($destination) // error 



         $table = $myFun.GetTable("T_URLS") 

1 ответ

Проблема, с которой вы столкнулись, аналогична тому, что описано в этом вопросе:

Исключение: сервер обратного вызова RFC недоступен во время вызова RFC.

Я не вижу в интерфейсе вашего модуля параметра обратного вызова (обратные вызовы не поддерживаются в NCo), но я вижу, что это ваш заказной модуль, написанный с нуля, и он якобы загружает архивный файл из SAP-бэкенда.

Я предполагаю, что вы закодировали эту функцию RFC, используя такой модуль, как GUI_DOWNLOADили метод cl_gui_frontend_services=>gui_downloadили что-то подобное, которое отлично работает в режиме графического интерфейса, когда у него есть доступ к файловой системе внешнего интерфейса, но не работает в режиме RFC (NCo).

Другие вопросы по тегам