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

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

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

Показать лучший ответ

Какой функциональный модуль RFC вы вызываете? RFC_READ_TABLE?

Да, используя RFC_READ_TABLE. Система, над которой я работаю, просто извлекает информацию, поэтому вставка не производится.

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

введите описание изображения здесь

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

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

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

Так что, чтобы обойти эту проблему, мне придется разбить поиск на столбцы до 512 символов, верно? Это совершенно поразило меня. Спасибо за помощь. Это действительно очистило мой разум.

Совершенно верно - и вы должны следить за полями, не похожими на символы, и исключать их. Следствие: вы не сможете читать поля, содержащие поля первичного ключа «оскорбительных» типов данных, используя RFC_READ_TABLE.

Я очень ценю твой ответ. Если бы я мог дать вам еще один голос, я бы это сделал. Но так как я не могу, не буду. Спасибо. :)