Два способа выгрузить файл

Без предисловий, сразу код в начальной итерации:

А теперь можно его покритиковать.

Во-первых, имя файла.

Пользователю должно быть удобно и понятно.

Техническое имя — непонятно, значит от него надо избавиться. В некоторых подходах можно встретить запрос имени файла (и пути к нему заодно):

Это не всегда удобно. Спрашивать — это дополнительное движение. Оно критично, если пользователю надо проконтролировать место хранения файла. В моём типичном случае файл всегда выгружается во временную папку, пользователь контролирует его содержимое, отправляет на печать, закрывает и забывает. Поэтому место хранения контролировать не надо.

А имя файла можно задать понятное до деталей:

Это совсем не сложно, не стоит этого бояться.

Во-вторых, полномочия на стороне пользователя.

Тыкать в дополнительные нудные предупреждения — неудобно.

В моём случае show_document встречает две проверки:

А) Проверка на выгрузку файла в папку:

Word security 1

Б) Проверка на открытие файла:

Word security 2

Первую проверку можно и «запомнить» и обосновать по корпоративной политике.

А вот вторую проверку «запомнить» нельзя. Варианта два — копать или обходить. Нормальные герои всегда идут в обход.

Если метод cl_gui_frontend_services=>show_document заставляет SAP GUI искать программу, ассоциированную с данным типом файлов, то метод cl_gui_frontend_services=>execute работает хитрее. Он просто предоставляет операционной системе самой разобраться что к чему.

Вот такой маленький proof-of-concept:

Метод SHOW реализован отдельно:

Профит.

PS. И это не конец истории. Не забыть бы про мусор во временной папке, а то мало ли что.

Есть варианты:

  • C:\Users\<username>\AppData\Local\Temp — системная временная папка; не common way
  • C:\Users\<username>\AppData\Local\SAP\SAP GUI\tmp\ — временная папка самого SAP GUI; my way
  • C:\Users\<username>\Documents\SAP\SAP GUI — папка по-умолчанию для работы с документами; не в этот раз
  • [включите воображение]

Метод SHOW_DOCUMENT выгружает файл во вторую папку и там есть  параметр KEEP_FILE. Очевидно тогда, что если флаг специально не выставить, то файл будет подчищен автоматически; вопрос только в какой момент.

В нашем новом методе EXECUTE данный параметр отсутствует. Что это значит? Интересно, чистит ли папку кто-нибудь и когда-нибудь?

Документация говорит:

Documents in the temporary directory will be deleted, when SAP GUI is closed. You can configure the deletion of files also in other directories. For information on this, refer to the security guide.

Это успокаивает, значит хорошо что мы выгружаем именно в эту папку.

Мусор во временной папке

А к третьей папке есть настройка:

Lifetime

 

Добавить комментарий

Ваш адрес email не будет опубликован.