Обратные вызовы из 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).