Вопрос

Моя программа Java / Groovy получает имена таблиц и полей таблицы с пользовательского ввода, он запрашивает таблицы в SAP и возвращает его содержимое.

Пользовательский ввод может касаться таблиц CDPOS а также CDHDR. Отказ После прочтения документов SAP и Googlet я обнаружил, что это таблицы хранения изменений журналов документов. Но я не нашел никаких удаленных функций вызова, которые можно использовать в Java для выполнения такого рода запросов.

Затем я использовал устаревшее модуль функции RFC RFC_READ_TABLE и попытался создать настроенные запросы только в зависимости от этого RFC. Тем не менее, я нашел, если количество желаемых полей, которые я передал к этому RFC, более 2, я всегда получил DATA_BUFFER_EXCEEDED Ошибка, даже если я ограничиваю максимальные строки.

Я не разрешаю быть разработчиком ABAP в системе SAP и не может добавить какие-либо FM в существующие системы, поэтому я могу только написать код для выполнения этого требования в Java.

Я делаю что-то неправильно? Не могли бы вы дать мне несколько советов на эту проблему?

Это было полезно?

Решение

DATA_BUFFER_EXCEEDED бывает только если общая ширина полей, которые вы хотите прочитать, превышает ширина принадлежащий DATA Параметр, который может варьироваться в зависимости от выпуска SAP - 512 символов для текущих систем. Это не имеет ничего общего с количеством ряды, но размер одного набора данных.

Таким образом, вопрос в том, каковы содержание FIELDS параметр? Если он пуст, это означает «читать все поля». CDHDR 192 в ширину 192 года, поэтому я бы предположил, что проблема CDPOS который широко составляет 774 символов. Основная проблема была бы полями VALUE_OLD а также VALUE_NEW, оба 245 символов.

Даже если вы не получите доступом для разработчика, вы должны подтащить кого-то, чтобы получить доступ только для чтения, который можно подробно проверить структуры.

Бесстыдная пробка: Рост содержит класс обертки для RFC_READ_TABLE Это заботится о обработке полей и гарантирует, что общая ширина выбранных полей ниже предела, налагаемого функциональным модулем.

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

PS: RFC_READ_TABLE не выпущен для использования клиента согласно SAP Note 382318, и записка 758278 Рекомендует создать свой собственный модуль функции и предоставляет шаблон с улучшенной логикой.

Другие советы

Вокруг ошибки data_buffer_exeex есть путь. Хотя эта функция не выпускается для использования клиента в соответствии с SAP OST Note 382318, вы можете обойти эту проблему с изменениями в том, как вы передаете параметры этой функции. Это не одно поле, которое вызывает вашу ошибку, но если ряд данных превышает 512 байтов, эта ошибка будет подниматься. CDPOS будет иметь эту проблему наверняка!

Работа вокруг Если вы знаете, как позвонить в функцию, используя параметры таблицы JCO и Pass, это указать точные поля, которые вы хотите, возвращенные. Затем вы можете сохранить ваши возвращенные результаты под пределами 512 байтов.

Используя свой пример таблицы CDPOS, укажите что-то вроде этого, и вы должны быть хорошими, чтобы пойти ... (Будьте осторожны, CDPOS может стать массивным! Вы должны указать и пройти предложение, где!)

Поля = «ObjectClas» .... Поля = «ObjectID»

В Java можно выразить как ..

listparams.stevalue (this.getpobjectclas (), "objectClas");

Предоставив поля, которые вы возвращаете, вы можете избежать этой ошибки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top