Как проверить размер файла на сервере приложений во время выполнения? - PullRequest
0 голосов
/ 12 января 2019

Уважаемые эксперты SAP & DMS,

Я бы хотел знать, как проверить размер файла, загружаемого на сервер приложений -AL11- во время выполнения .

Моя проблема заключается в следующем:

При использовании FM HTTP_GET_FILE для загрузки файлов DMS (исходные чертежи материалов) на сервер приложений (T-код AL11) я иногда сталкиваюсь со следующей проблемой:

Загруженные файлы на сервере приложений считаются неполными другим отчетом (фоновое задание SAP). Это может быть связано с перекрытием обоих отчетов (1-й отчет загружает документы на сервер приложений, а 2-й отчет (задание) читает его и отправляет по электронной почте).

До этого момента моя попытка решить проблему заключалась в следующем: Во втором отчете размер исходного файла сравнивается с загруженным файлом. Если оба размера неравны, подождите 1 секунду и сравните снова, пока оба размера не будут равны. К сожалению, я не смог реализовать это решение, потому что у меня нет доступа к размеру файла во время загрузки.

Если невозможно определить размер файла, есть ли другие идеи, чтобы избежать этой проблемы?

Я надеюсь, что смогу дать четкое представление о проблеме.

Я благодарен за любую помощь и информацию.

Халед

Редактировать (просто для пояснения использования HTTP_GET_FILE):

  1. Получить ссылку на оригинальный файл с помощью FM CVAPI_DOC_VIEW

  2. Затем «загрузить» файл с помощью возвращенного pfx_url на сервер приложений sap (AL11)

1 Ответ

0 голосов
/ 12 января 2019

Чтобы получить размер файла на сервере приложений, SAP ничего не предлагает "из коробки". Вы должны использовать:

  • либо использовать команды операционной системы (определите это в коде транзакции SM49 и вызовите его через функциональный модуль SXPG_COMMAND_EXECUTE)
  • или используйте программы ядра C C_DIR_READ_START, C_DIR_READ_NEXT, C_DIR_READ_FINISH.
  • другое решение для небольших файлов - это сделать это в ABAP.

В Интернете вы можете найти несколько примеров двух первых возможностей.

Рассчитать размер файла в ABAP (низкая производительность для больших файлов):

data read_buffer type x length 1000.
data(fullpath) = `/tmp/file`.
data(file_size) = 0.
open dataset fullpath for input in binary mode.
do.
  read dataset fullpath into read_buffer ACTUAL LENGTH data(actual_length).
  if actual_length = 0.
    exit.
  endif.
  add actual_length to file_size.
enddo.
close dataset fullpath.
...