RFC_READ_TABLE выдает Rfcabapexception после запроса большого количества столбцов

Там, где я работаю, у нас есть две системы, использующие SAP, одна из которых использует Delphi, а другая - C#. Я реализую C#, и оба имеют ту же проблему, когда я запрашиваю большое количество столбцов, используя RFC_READ_TABLEв зависимости от таблицы (обычно 60+) возвращает исключение Rfcabapexception без описания и без внутреннего исключения, а только заголовок. Что является причиной этого исключения и что я могу сделать, чтобы предотвратить это?

1 ответ

Решение

Функциональный модуль RFC_READ_TABLE должен преобразовать данные в общий формат, потому что "действительно общие типы", такие как DATA или же STANDARD TABLE не поддерживаются для связи RFC. Из-за этого outout передается в виде последовательности строк таблицы, каждая из которых имеет длину до 512 символов.

Это имеет несколько последствий:

  • Если общий размер всех запрошенных вами полей превышает 512 символов, вы получите короткий дамп (проверка с транзакцией ST22) и исключение, которое вы упомянули.
  • Если вы попытаетесь прочитать поля, которые не могут быть преобразованы в символьные поля и / или действительно имеют горячее (!) Символьное представление фиксированной длины, произойдут плохие вещи. Более вероятный, RFC_READ_TABLE будет либо прервана с коротким дампом или barf во всех ваших выходных данных.

Вы можете обойти первую проблему, разрезая таблицу по вертикали и последовательно читая группы столбцов. Быть в курсе, что RFC_READ_TABLE Не гарантируется, что вы всегда будете возвращать данные в одном и том же порядке при повторном соединении результатов. Также помните, что вы можете столкнуться с нарушениями изоляции транзакций, в зависимости от того, как часто изменяются прочитанные вами данные.

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