CL_GOS_MANAGER - Класс для публикации объектов. Под объектами понимаем данные от заметок до файлов любых форматов. С версии 4.6 практически для всех документов и объектов системы появилась возможность прикрепления атачментов, в общем виде мне кажется это очень удобная функция для сохранения таких вещей как например от сканированные копии договоров, которые можно прикрепить к договору в системе и т.д., так же можно оставлять текстовые заметки к документу. Например, на рисунке GOS-1.png показан пример вызова объекта GOS (Generic Object Services) для заказа ММ и рисунок GOS-2.png с открытым меню приложений GOS. Для работы с этой функциональностью используются специальный класс CL_GOS_MANAGER, вообще-то классов для работы создано много, но как общий группирующий объект это именно CL_GOS_MANAGER. В принципе можно воспользоваться для работы и фукциональными модулями, но через класс все выполняется просто и быстро. Я не буду рассматривать все методы и атрибуты данного класса, как говорится я дам наметки как его быстро прикрутить к своему экрану, а дальше уже все получившие удочку, рыбу думаю смогут натаскать сами.
Почитать вообще что такое GOS можно тут: You are not allowed to view links.
Register or
LoginПример будет очень простой, только для показа способа работы с классом. Первое что нужно знать это тип объекта к которому будем использовать вызов GOS, рассматривать буду заказ ММ, транзакция ME23N - закупочный заказ. Как узнать тип объекта, самое просто это воспользоваться транзакцией BAPI, которая позволяет узнать тип объекта, и много еще полезно, но не в нужное в данном случае. Вызываем транзакцию и ищем заказы ММ, на рисунке BAPI-1.png собственно показаны результаты поиска, нас интересует код объекта BUS2012. Далее все очень просто например мы имеет два экрана, первый где запрашиваем номер документа заказа и второй, где этот заказ показываем и хотим чтобы пользователь смог добавить какие-то внешние файлы к документу. Объявляем следующие переменные:
DATA: ref_gos_manager type ref TO cl_gos_manager.
Далее в PBO-логике второго экрана, делаем где-то вызов процедуры которая создаетнам сервис GOS на нашем экране, для этого достаточно написать следующую процедурку
FORM init_controls_gos.
* Сервис приложений
DATA: l_ip_mode TYPE sgs_rwmod,
ls_borident TYPE borident.
* Если объект не создан, создать.
IF ref_gos_manager IS INITIAL.
* D - Режим просмотра
* E - Режим изменения
IF sy-tcode = 'Y_EDIT'. l_ip_mode = 'E'. ELSE. l_ip_mode = 'D'. ENDIF.
ls_borident-objkey = g_ebeln. "Номер заказа ММ
ls_borident-objtype = 'BUS2012'. "Тип объекта
CREATE OBJECT ref_gos_manager
EXPORTING
is_object = ls_borident
ip_mode = l_ip_mode
EXCEPTIONS
object_invalid = 1
callback_invalid = 2
OTHERS = 3.
ENDIF.
и все, на нашем экране появится кнопка доступа к GOS-объектам заказа. При этом эти же приложения будут доступны так же и при просмотре заказа через стандартные транзакции системы работы с заказами ММ.
Теперь надо сделать еще одну вещь, убрать кнопку приложения, если например по логике работы на втором экране есть кнопка BACK по которой пользователь может вернутся на предыдущий экран и ввести для работы новый номер заказа. Если же пользователь сразу выходит из транзакции, то про освобождение объекта позаботиться автоматически сборщик "мусора". Кстати, как только при приатачили файл, он автоматически загружается на сервер и выполнять операцию COMMIT не нужно. И так как убрать кнопку GOS с экрана, ну можно при обработке выхода на предыдущий экран, а можно в так же в PBO-логике первого экрана написать следующий код:
IF ref_gos_manager IS NOT INITIAL.
CALL METHOD ref_gos_manager->unpublish( ). "Закрыть объект
FREE ref_gos_manager. "Освободить класс
ENDIF.
Все теперь если вы перейдете на второй экран по новой вызовется создание объекта по новой с введенным новым номером заказа. При этом если это тот же самый номер заказа, то система при создании объекта GOS корректно покажет что уже есть приатаченные файлы к заданному заказу, это будет видно по тому, что станет доступен пункт меню "Список приложений", по которому будет открыто окно списка всех прикрепленных файлов.
Примечание: К сожалению в режиме просмотра списка прикрепленных приложений, система позволяет удалять данные без всяких запросов на подтверждение, не говоря уже о проверке полномочий на просмотр данных. Однако с этим можно легко справится, есть специальная нота и мое расширение к этой ноте, которое позволяет решить данную проблему: You are not allowed to view links.
Register or
Login, так же как-то поднималась проблема контроля типов загружаемых файлов и их размеров, это тоже решаемое, обсуждалось тут:
You are not allowed to view links.
Register or
Login