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
Не гарантируется, что вы всегда будете возвращать данные в одном и том же порядке при повторном соединении результатов. Также помните, что вы можете столкнуться с нарушениями изоляции транзакций, в зависимости от того, как часто изменяются прочитанные вами данные.